<?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>150133</bug_id>
          
          <creation_ts>2015-10-14 11:49:25 -0700</creation_ts>
          <short_desc>[Streams API] Rework some readable stream internals that can be common to writable streams</short_desc>
          <delta_ts>2015-10-20 02:51:55 -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>New Bugs</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="Xabier Rodríguez Calvar">calvaris</reporter>
          <assigned_to name="Xabier Rodríguez Calvar">calvaris</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>koivisto</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1133205</commentid>
    <comment_count>0</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-14 11:49:25 -0700</bug_when>
    <thetext>[Streams API] Rework some readable stream internals that can be common to writable streams</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133211</commentid>
    <comment_count>1</comment_count>
      <attachid>263095</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-14 12:06:36 -0700</bug_when>
    <thetext>Created attachment 263095
Patch

This patch will need to be rebased against bug 149951 or viceversa as they will conflict during landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133213</commentid>
    <comment_count>2</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-14 12:10:26 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created attachment 263095 [details]
&gt; Patch

I could split the patch in smaller pieces, but I think the size and complexity are manageable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133249</commentid>
    <comment_count>3</comment_count>
      <attachid>263095</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-14 13:28:14 -0700</bug_when>
    <thetext>Comment on attachment 263095
Patch

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

Sounds mostly good to me, some questions below.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:505
&gt; +        GlobalPropertyInfo(vm.propertyNames-&gt;EvalErrorPrivateName, m_evalErrorConstructor.get(), DontEnum | DontDelete | ReadOnly),

What is the reason for adding this one?

&gt; Source/WebCore/Modules/streams/ReadableStream.js:55
&gt; +    this.@strategy = @validateAndNormalizeQueuingStrategy(strategy.size, strategy.highWaterMark);

Sounds very good.

&gt; Source/WebCore/Modules/streams/StreamInternals.js:93
&gt; +{

This adds an if test which was not needed in the past.
If implemented in C++, this could well be set as &quot;inline&quot;.
Are these 3 promise routines useful enough to be added?

&gt; Source/WebCore/Modules/streams/StreamInternals.js:116
&gt; +    return { content: [], size: 0 };

Is it worth adding a function for this one?

&gt; Source/WebCore/bindings/js/JSDOMWindowBase.cpp:105
&gt; +#undef DECLARE_GLOBAL_STATIC

We should find a way to improve this in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133414</commentid>
    <comment_count>4</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-15 01:12:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:505
&gt; &gt; +        GlobalPropertyInfo(vm.propertyNames-&gt;EvalErrorPrivateName, m_evalErrorConstructor.get(), DontEnum | DontDelete | ReadOnly),
&gt; 
&gt; What is the reason for adding this one?

I&apos;ll use them in some later patches, where the spec just says things like &quot;fail here&quot; without specifying any error.

&gt; &gt; Source/WebCore/Modules/streams/StreamInternals.js:93
&gt; &gt; +{
&gt; 
&gt; This adds an if test which was not needed in the past.
&gt; If implemented in C++, this could well be set as &quot;inline&quot;.
&gt; Are these 3 promise routines useful enough to be added?

They are useful, IMHO, otherwise I wouldn&apos;t have added them :)

I know you are adding an if clause but the idea behind it is to be able to just call resolve or reject with values like:

* ones that are not even a promise: imagine that the spec defines some case where it tells you to resolve a promise that has been unset by some earlier code flow. In that case you can still almost literal with the spec without adding any extra if clause for those cases that would create an eval error and code is easier to read and follow.
* ones created with Promise.resolve or Promise.reject, that don&apos;t have the internal slots and would create an eval error.

&gt; &gt; Source/WebCore/Modules/streams/StreamInternals.js:116
&gt; &gt; +    return { content: [], size: 0 };
&gt; 
&gt; Is it worth adding a function for this one?

That&apos;s a matter of taste. In the case of the promises it is more clear to me because code is more complex (keeping the internal slots and so on), but in this case I had that doubt too. I decided to add it because I think it brings coherence to the code and reduces the posibility of coding errors as you&apos;d have to inline the same code everywhere the function is used, which not only happens when initializing, but with errors and of course also in writable stream.

&gt; &gt; Source/WebCore/bindings/js/JSDOMWindowBase.cpp:105
&gt; &gt; +#undef DECLARE_GLOBAL_STATIC
&gt; 
&gt; We should find a way to improve this in the future.

I liked the way it was done with some earlier patches for bug 149751.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133425</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-15 03:11:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; &gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:505
&gt; &gt; &gt; +        GlobalPropertyInfo(vm.propertyNames-&gt;EvalErrorPrivateName, m_evalErrorConstructor.get(), DontEnum | DontDelete | ReadOnly),
&gt; &gt; 
&gt; &gt; What is the reason for adding this one?
&gt; 
&gt; I&apos;ll use them in some later patches, where the spec just says things like
&gt; &quot;fail here&quot; without specifying any error.

OK.
I would personally wait for the later patches to introduce it.

&gt; &gt; &gt; Source/WebCore/Modules/streams/StreamInternals.js:93
&gt; &gt; &gt; +{
&gt; &gt; 
&gt; &gt; This adds an if test which was not needed in the past.
&gt; &gt; If implemented in C++, this could well be set as &quot;inline&quot;.
&gt; &gt; Are these 3 promise routines useful enough to be added?
&gt; 
&gt; They are useful, IMHO, otherwise I wouldn&apos;t have added them :)
&gt; 
&gt; I know you are adding an if clause but the idea behind it is to be able to
&gt; just call resolve or reject with values like:
&gt; 
&gt; * ones that are not even a promise: imagine that the spec defines some case
&gt; where it tells you to resolve a promise that has been unset by some earlier
&gt; code flow. In that case you can still almost literal with the spec without
&gt; adding any extra if clause for those cases that would create an eval error
&gt; and code is easier to read and follow.
&gt; * ones created with Promise.resolve or Promise.reject, that don&apos;t have the
&gt; internal slots and would create an eval error.

I would tend to split promise handling refactoring in another bug.

For instance, we are using public Promise APIs (like new Promise and so on).
We may want to use internals ones.

Also, we could directly use promise operations functions like @rejectPromise or @fulfillPromise (not sure this is a good idea).

Let&apos;s see what others think.

&gt; &gt; &gt; Source/WebCore/Modules/streams/StreamInternals.js:116
&gt; &gt; &gt; +    return { content: [], size: 0 };
&gt; &gt; 
&gt; &gt; Is it worth adding a function for this one?
&gt; 
&gt; That&apos;s a matter of taste. In the case of the promises it is more clear to me
&gt; because code is more complex (keeping the internal slots and so on), but in
&gt; this case I had that doubt too. I decided to add it because I think it
&gt; brings coherence to the code and reduces the posibility of coding errors as
&gt; you&apos;d have to inline the same code everywhere the function is used, which
&gt; not only happens when initializing, but with errors and of course also in
&gt; writable stream.

OK.
It would be interesting to know the kind of consequences such encapsulation has in terms of code size/performances...
As we get more js builtin code, some guidelines may be helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133426</commentid>
    <comment_count>6</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-15 03:29:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; I&apos;ll use them in some later patches, where the spec just says things like
&gt; &gt; &quot;fail here&quot; without specifying any error.
&gt; 
&gt; OK.
&gt; I would personally wait for the later patches to introduce it.

Yes, this is something that can be easily changed at landing time.

&gt; &gt; I know you are adding an if clause but the idea behind it is to be able to
&gt; &gt; just call resolve or reject with values like:
&gt; &gt; 
&gt; &gt; * ones that are not even a promise: imagine that the spec defines some case
&gt; &gt; where it tells you to resolve a promise that has been unset by some earlier
&gt; &gt; code flow. In that case you can still almost literal with the spec without
&gt; &gt; adding any extra if clause for those cases that would create an eval error
&gt; &gt; and code is easier to read and follow.
&gt; &gt; * ones created with Promise.resolve or Promise.reject, that don&apos;t have the
&gt; &gt; internal slots and would create an eval error.
&gt; 
&gt; I would tend to split promise handling refactoring in another bug.
&gt; 
&gt; For instance, we are using public Promise APIs (like new Promise and so on).
&gt; We may want to use internals ones.
&gt; 
&gt; Also, we could directly use promise operations functions like @rejectPromise
&gt; or @fulfillPromise (not sure this is a good idea).
&gt; 
&gt; Let&apos;s see what others think.

I could split it in another bug or leave it for a future follow up patch.

&gt; &gt; &gt; &gt; Source/WebCore/Modules/streams/StreamInternals.js:116
&gt; &gt; &gt; &gt; +    return { content: [], size: 0 };
&gt; &gt; &gt; 
&gt; &gt; &gt; Is it worth adding a function for this one?
&gt; &gt; 
&gt; &gt; That&apos;s a matter of taste. In the case of the promises it is more clear to me
&gt; &gt; because code is more complex (keeping the internal slots and so on), but in
&gt; &gt; this case I had that doubt too. I decided to add it because I think it
&gt; &gt; brings coherence to the code and reduces the posibility of coding errors as
&gt; &gt; you&apos;d have to inline the same code everywhere the function is used, which
&gt; &gt; not only happens when initializing, but with errors and of course also in
&gt; &gt; writable stream.
&gt; 
&gt; OK.
&gt; It would be interesting to know the kind of consequences such encapsulation
&gt; has in terms of code size/performances...
&gt; As we get more js builtin code, some guidelines may be helpful.

I don&apos;t have a strong opinion and it something that be easily done in a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134575</commentid>
    <comment_count>7</comment_count>
      <attachid>263483</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-19 07:39:23 -0700</bug_when>
    <thetext>Created attachment 263483
Patch

Rebased against landed bug 149951 and removed EvalError as we don&apos;t plan to release anything with soon enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134696</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-19 14:26:03 -0700</bug_when>
    <thetext>I am still not sure with the promise refactoring.

@InternalPromise should be used.

Also the added promise routines are generic and have no streams API special bits.
If they are useful, maybe the promise built-in JS implementation could be adapted to provide these (or similar) internal APIs? yusukesuzuki, do you have an opinion on this?

That said, this can be done as a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134838</commentid>
    <comment_count>9</comment_count>
      <attachid>263483</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-20 02:51:50 -0700</bug_when>
    <thetext>Comment on attachment 263483
Patch

Clearing flags on attachment: 263483

Committed r191335: &lt;http://trac.webkit.org/changeset/191335&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134839</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-20 02:51:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263095</attachid>
            <date>2015-10-14 12:06:36 -0700</date>
            <delta_ts>2015-10-19 07:36:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150133-20151014210558.patch</filename>
            <type>text/plain</type>
            <size>33127</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MWY4NDg3YzQzMmI4ZWZiNDAzYzI2OTYyNjc5OGI2NWE1N2I2YzQyLi40OWIwZWYyYTBmMDg5YzE0
NmQzNTE5ZjZhMzBiMTMzZTViZDNhMmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxNS0xMC0xNCAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJp
c0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtTdHJlYW1zIEFQSV0gUmV3b3JrIHNvbWUgcmVhZGFi
bGUgc3RyZWFtIGludGVybmFscyB0aGF0IGNhbiBiZSBjb21tb24gdG8gd3JpdGFibGUgc3RyZWFt
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMTMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KTogQWRkZWQgUmFuZ2VF
cnJvciBhbmQgRXZhbEVycm9yIGFsc28gYXMgbmF0aXZlIGZ1bmN0aW9ucy4KKwogMjAxNS0xMC0x
NCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE5MTAzMC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNzVhMzBlNTMxZDA2
NzMxNmZiNmJiMmY0NzdjMzkxZWY5M2YwNjBkLi40ZGIxNDgwZjdiNjIyNmFiYzE1NGMyOGY4ODkz
ZTg2OGI3Y2M5MzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTUtMTAtMTQgIFhh
YmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAgICBb
U3RyZWFtcyBBUEldIFJld29yayBzb21lIHJlYWRhYmxlIHN0cmVhbSBpbnRlcm5hbHMgdGhhdCBj
YW4gYmUgY29tbW9uIHRvIHdyaXRhYmxlIHN0cmVhbXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDEzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFyZSBzb21lIHRoaW5ncyBpbiBSZWFkYWJs
ZVN0cmVhbSBpbnRlcm5hbHMgdGhhdCBiZSBiZSB1c2VkIGFsc28gZm9yIFdyaXRhYmxlIFN0cmVh
bXMgc28gaXQgd2FzIG5lY2Vzc2FyeQorICAgICAgICB0byBtb3ZlIHNvbWUgZnVuY3Rpb25zIGFu
ZCByZWZhY3RvciBzb21lIGNvZGUgdGhhdCBjYW4gYmUgc2hhcmVkIGJ5IGJvdGggaW1wbGVtZW50
YXRpb25zLgorCisgICAgICAgIFF1ZXVlIHdhcyB3cml0dGVuIHdpdGggdGhlIGZ1bmN0aW9ucyBk
ZWNsYXJlZCBhdCB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGtlZXBpbmcgdGhlIGltcHJvdmVtZW50
IG9mIGhhdmluZyB0aGUKKyAgICAgICAgdG90YWwgc2l6ZSBjYWxjdWxhdGVkIGluc3RlYWQgb2Yg
aGF2aW5nIHRvIHRyYW5zdmVyc2UgdGhlIHdob2xlIGFycmF5LgorCisgICAgICAgIFRoZSBzdHJh
dGVneSBpcyBrZXB0IGFzIGFuIG9iamVjdCBhbmQgYSBjb21tb24gbWV0aG9kIGlzIHVzZWQgdG8g
dmFsaWRhdGUgaXQgYXMgcGVyIHNwZWMuCisKKyAgICAgICAgUHJvbWlzZXMgYXJlIHJld29ya2Vk
IHRvIGtlZXAgaW4gYW4gaW50ZXJuYWwgc2xvdCBpbnNpZGUgdGhlIHByb21pc2Ugb2JqZWN0IHRo
ZSByZXNvbHZlIGFuZCByZWplY3QKKyAgICAgICAgZnVuY3Rpb25zLiBGb3IgY29udmluaWVuY2Ug
dGhyZWUgZnVuY3Rpb25zIHdlcmUgd3JpdHRlbiwgb25lIHRvIGNyZWF0ZSB0aGUgcHJvbWlzZSAo
YW5kIGtlZXAgaW50ZXJuYWxseSB0aGUKKyAgICAgICAgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1bmN0
aW9ucyksIG9uZSB0byByZXNvbHZlIGFuZCBhbm90aGVyIHRvIHJlamVjdC4gUHJvbWlzZXMgY2Fu
IHN0aWxsIGJlIGNyZWF0ZWQgd2l0aAorICAgICAgICBQcm9taXNlLnJlc29sdmUgb3IgcmVqZWN0
IGFzIHRoZSByZXNvbHZlIGFuZCByZWplY3RTdHJlYW1zUHJvbWlzZSBmdW5jdGlvbnMgb3BlcmF0
ZSB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0CisgICAgICAgIHRoZSBpbnRlcm5hbCBzbG90cyBt
aWdodCBub3QgZXhpc3QuCisKKyAgICAgICAgaW52b2tlT3JOb29wIGFuZCBwcm9taXNlSW52b2tl
T3JOb29wIHdlcmUgbW92ZWQgdG8gdGhlIGNvbW1vbiBjb2RlIGFzIHRoZXkgd2lsbCBiZSBhbHNv
IHVzZWQgYnkgV3JpdGFibGVTdHJlYW0uCisKKyAgICAgICAgQ3VycmVudCB0ZXN0IHNldCBzdWZm
aWNlcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgICogYmlu
ZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1dlYkNvcmVKU0J1aWx0aW5zLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3Jl
SlNCdWlsdGlucy5oOiBCdWlsZCBpbmZyYXN0cnVjdHVyZQorICAgICAgICAqIE1vZHVsZXMvc3Ry
ZWFtcy9SZWFkYWJsZVN0cmVhbS5qczoKKyAgICAgICAgKGluaXRpYWxpemVSZWFkYWJsZVN0cmVh
bSk6IFJld29ya2VkIHF1ZXVlIGFuZCBzdHJhdGVneQorICAgICAgICAqIE1vZHVsZXMvc3RyZWFt
cy9SZWFkYWJsZVN0cmVhbUludGVybmFscy5qczoKKyAgICAgICAgKHByaXZhdGVJbml0aWFsaXpl
UmVhZGFibGVTdHJlYW1SZWFkZXIpOgorICAgICAgICAoZXJyb3JSZWFkYWJsZVN0cmVhbSk6Cisg
ICAgICAgIChnZXRSZWFkYWJsZVN0cmVhbURlc2lyZWRTaXplKToKKyAgICAgICAgKGNhbmNlbFJl
YWRhYmxlU3RyZWFtKToKKyAgICAgICAgKGNsb3NlUmVhZGFibGVTdHJlYW0pOgorICAgICAgICAo
Y2xvc2VSZWFkYWJsZVN0cmVhbVJlYWRlcik6CisgICAgICAgIChlbnF1ZXVlSW5SZWFkYWJsZVN0
cmVhbSk6CisgICAgICAgIChyZWFkRnJvbVJlYWRhYmxlU3RyZWFtUmVhZGVyKTogUmV3b3JrZWQg
cXVldWUsIHN0cmF0ZWd5IGFuZCBwcm9taXNlcy4KKyAgICAgICAgKGludm9rZU9yTm9vcCk6IERl
bGV0ZWQuCisgICAgICAgIChwcm9taXNlSW52b2tlT3JOb29wKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzOiBBZGRlZC4KKyAgICAgICAgKGlu
dm9rZU9yTm9vcCk6CisgICAgICAgIChwcm9taXNlSW52b2tlT3JOb29wKTogTW92ZWQgZnJvbSBS
ZWFkYWJsZVN0cmVhbUludGVybmFscy5qcy4KKyAgICAgICAgKHZhbGlkYXRlQW5kTm9ybWFsaXpl
UXVldWluZ1N0cmF0ZWd5KToKKyAgICAgICAgKGNyZWF0ZU5ld1N0cmVhbXNQcm9taXNlKToKKyAg
ICAgICAgKHJlc29sdmVTdHJlYW1zUHJvbWlzZSk6CisgICAgICAgIChyZWplY3RTdHJlYW1zUHJv
bWlzZSk6CisgICAgICAgIChuZXdRdWV1ZSk6CisgICAgICAgIChkZXF1ZXVlVmFsdWUpOgorICAg
ICAgICAoZW5xdWV1ZVZhbHVlV2l0aFNpemUpOiBBZGRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMu
CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oOiBVcGRhdGVkIHBy
aXZhdGUgbmFtZXMgYWNjb3JkaW5nIHRvIHRoZSBuZXcgc2xvdHMuCisKIDIwMTUtMTAtMTMgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGhlbHBl
ciBmdW50aW9uIGZvciBjaGVja2luZyBwb2ludGVyIGVxdWl2YWxlbmN5IGFuZCB1c2UgaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmlu
ZGV4IDMzNTUwMDJiYmFjOWMwYmI1ZDE3YWY2MzYzZTU0MjJmODQwYzQ2MzYuLjUwMTlkZDNiM2Ix
YTFjNDE0MjRmZjc4ZTEyNTlkYjkxZGQxZGQzNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtMjkxLDYgKzI5MSw4IEBACiAg
ICAgbWFjcm8oaXNGaW5pdGUpIFwKICAgICBtYWNybyhnZXRQcm90b3R5cGVPZikgXAogICAgIG1h
Y3JvKGdldE93blByb3BlcnR5TmFtZXMpIFwKKyAgICBtYWNybyhFdmFsRXJyb3IpIFwKKyAgICBt
YWNybyhSYW5nZUVycm9yKSBcCiAgICAgbWFjcm8oVHlwZUVycm9yKSBcCiAgICAgbWFjcm8odHlw
ZWRBcnJheUxlbmd0aCkgXAogICAgIG1hY3JvKHR5cGVkQXJyYXlTb3J0KSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggNTI3MjY3
OGUxZDk3NWI2MWI5YWQ3N2Y4ZmRkZTdkZDc1N2RiNzEwZS4uZjY2NGEzMTNkMDQ1YjlmMTA3ZDli
MTM4MDZjODI5Y2FiOWJmYTU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtNTAyLDYgKzUwMiw4IEBAIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT4ganNOYW1lLCBsb3dlck5hbWUgIyMg
Q29uc3RydWN0CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5v
d25FbnVtZXJhYmxlUHJvcGVydHlLZXlzUHJpdmF0ZU5hbWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2
bSwgdGhpcywgMCwgU3RyaW5nKCksIG93bkVudW1lcmFibGVQcm9wZXJ0eUtleXMpLCBEb250RW51
bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2
bS5wcm9wZXJ0eU5hbWVzLT5nZXRUZW1wbGF0ZU9iamVjdFByaXZhdGVOYW1lLCBwcml2YXRlRnVu
Y0dldFRlbXBsYXRlT2JqZWN0LCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5lbnF1ZXVlSm9iUHJp
dmF0ZU5hbWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMCwgU3RyaW5nKCksIGVucXVl
dWVKb2IpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5FdmFsRXJyb3JQcml2YXRlTmFtZSwgbV9l
dmFsRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+UmFuZ2VF
cnJvclByaXZhdGVOYW1lLCBtX3JhbmdlRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0g
fCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0u
cHJvcGVydHlOYW1lcy0+VHlwZUVycm9yUHJpdmF0ZU5hbWUsIG1fdHlwZUVycm9yQ29uc3RydWN0
b3IuZ2V0KCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xv
YmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPnR5cGVkQXJyYXlMZW5ndGhQcml2YXRl
TmFtZSwgcHJpdmF0ZUZ1bmNUeXBlZEFycmF5TGVuZ3RoLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVz
LT50eXBlZEFycmF5U29ydFByaXZhdGVOYW1lLCBwcml2YXRlRnVuY1R5cGVkQXJyYXlTb3J0LCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4
IDVjZjFiYzFlYzIwNjM2Yjc2Njg5ODE3Y2RhMTdkM2Q3ODQ4Y2Q4ZDkuLjUwNTNiZjQzYzIzNzhh
NTI1ZTQ3MzQwYTA0YTU3YjAxMjllMjgwZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0zMzYw
LDYgKzMzNjAsNyBAQCBzZXQoV0VCQ09SRV9KU19CVUlMVElOUwogICAgICR7V0VCQ09SRV9ESVJ9
L01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuanMKICAgICAke1dFQkNP
UkVfRElSfS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanMKICAgICAk
e1dFQkNPUkVfRElSfS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuanMKKyAg
ICAke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzCiApCiAK
IFdFQktJVF9JTkNMVURFX0NPTkZJR19GSUxFU19JRl9FWElTVFMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKaW5kZXggNDY2NTRmMmFkMzE4ODlkYjM0MjU3YmZkOGM4ZmFjOTNlMmRmMDRi
NS4uMjUyNmMxMmU0ZGJjNWRlZWIxZGJhZWJiN2MzYzU5YWM4NzI3MmY2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xMjU4LDYgKzEyNTgsNyBAQCBXRUJDT1JFX0pTX0JVSUxU
SU5TID0gXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtQ29u
dHJvbGxlci5qcyBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJl
YW1JbnRlcm5hbHMuanMgXAogICAgICQoV2ViQ29yZSkvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxl
U3RyZWFtUmVhZGVyLmpzIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvc3RyZWFtcy9TdHJlYW1J
bnRlcm5hbHMuanMgXAogIwogCiBhbGwgOiAkKFdFQkNPUkVfSlNfQlVJTFRJTlM6JS5qcz0lQnVp
bHRpbnMuY3BwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1Jl
YWRhYmxlU3RyZWFtLmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxl
U3RyZWFtLmpzCmluZGV4IDQ0OGMyYWQzYTkyNzg2Nzc3NTQxYjk0NWUxYzFkNDIyMWI0OWFlMmUu
LjQ2ZjA1ZGY5ZTNiZGNmOGI2ZWY0Y2YxZGJhNDFjYzAzMDY1ZWNlZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uanMKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAxNSBJZ2FsaWEuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDgg
KzQzLDcgQEAgZnVuY3Rpb24gaW5pdGlhbGl6ZVJlYWRhYmxlU3RyZWFtKHVuZGVybHlpbmdTb3Vy
Y2UsIHN0cmF0ZWd5KQogCiAgICAgdGhpcy5AdW5kZXJseWluZ1NvdXJjZSA9IHVuZGVybHlpbmdT
b3VyY2U7CiAKLSAgICB0aGlzLkBxdWV1ZSA9IFtdOwotICAgIHRoaXMuQHF1ZXVlU2l6ZSA9IDA7
CisgICAgdGhpcy5AcXVldWUgPSBAbmV3UXVldWUoKTsKICAgICB0aGlzLkBzdGF0ZSA9IEByZWFk
YWJsZVN0cmVhbVJlYWRhYmxlOwogICAgIHRoaXMuQHN0YXJ0ZWQgPSBmYWxzZTsKICAgICB0aGlz
LkBjbG9zZVJlcXVlc3RlZCA9IGZhbHNlOwpAQCAtNTIsMTMgKzUyLDcgQEAgZnVuY3Rpb24gaW5p
dGlhbGl6ZVJlYWRhYmxlU3RyZWFtKHVuZGVybHlpbmdTb3VyY2UsIHN0cmF0ZWd5KQogICAgIHRo
aXMuQHJlYWRlciA9IHVuZGVmaW5lZDsKICAgICB0aGlzLkBzdG9yZWRFcnJvciA9IHVuZGVmaW5l
ZDsKICAgICB0aGlzLkBjb250cm9sbGVyID0gbmV3IEBSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIo
dGhpcyk7Ci0gICAgdGhpcy5Ac3RyYXRlZ3lTaXplID0gc3RyYXRlZ3kuc2l6ZTsKLSAgICB0aGlz
LkBoaWdoV2F0ZXJNYXJrID0gTnVtYmVyKHN0cmF0ZWd5LmhpZ2hXYXRlck1hcmspOwotCi0gICAg
aWYgKE51bWJlci5pc05hTih0aGlzLkBoaWdoV2F0ZXJNYXJrKSkKLSAgICAgICAgdGhyb3cgbmV3
IFR5cGVFcnJvcigiaGlnaFdhdGVyTWFyayBwYXJhbWV0ZXIgaXMgbm90IGNvcnJlY3QiKTsKLSAg
ICBpZiAodGhpcy5AaGlnaFdhdGVyTWFyayA8IDApCi0gICAgICAgIHRocm93IG5ldyBSYW5nZUVy
cm9yKCJoaWdoV2F0ZXJNYXJrIGlzIG5lZ2F0aXZlIik7CisgICAgdGhpcy5Ac3RyYXRlZ3kgPSBA
dmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3koc3RyYXRlZ3kuc2l6ZSwgc3RyYXRl
Z3kuaGlnaFdhdGVyTWFyayk7CiAKICAgICB2YXIgcmVzdWx0ID0gQGludm9rZU9yTm9vcCh1bmRl
cmx5aW5nU291cmNlLCAic3RhcnQiLCBbdGhpcy5AY29udHJvbGxlcl0pOwogICAgIHZhciBfdGhp
cyA9IHRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW1JbnRlcm5hbHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMv
UmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanMKaW5kZXggMzM5OTE4Yzc0YTA4MWYzY2Q1NDFlMzhj
Y2ZiMWZmMzE1OGJlYjA4Yy4uMjRjOTQxZTM5ZDE4MzA2YThjMGM2YTJjYTJiNTY0NWY1YTA5OTEz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3Ry
ZWFtSW50ZXJuYWxzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFk
YWJsZVN0cmVhbUludGVybmFscy5qcwpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1IElnYWxpYS4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTAg
KzQyLDcgQEAgZnVuY3Rpb24gcHJpdmF0ZUluaXRpYWxpemVSZWFkYWJsZVN0cmVhbVJlYWRlcihz
dHJlYW0pCiAgICAgICAgIHRoaXMuQG93bmVyUmVhZGFibGVTdHJlYW0gPSBzdHJlYW07CiAgICAg
ICAgIHRoaXMuQHN0b3JlZEVycm9yID0gdW5kZWZpbmVkOwogICAgICAgICBzdHJlYW0uQHJlYWRl
ciA9IHRoaXM7Ci0gICAgICAgIHRoaXMuQGNsb3NlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5j
dGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgIHN0cmVhbS5AcmVhZGVyLkBjbG9z
ZWRQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7Ci0gICAgICAgICAgICBzdHJlYW0uQHJlYWRlci5A
Y2xvc2VkUHJvbWlzZVJlamVjdCA9IHJlamVjdDsKLSAgICAgICAgfSk7CisgICAgICAgIHRoaXMu
QGNsb3NlZFByb21pc2UgPSBAY3JlYXRlTmV3U3RyZWFtc1Byb21pc2UoKTsKICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgfQogICAgIGlmIChzdHJlYW0uQHN0YXRlID09PSBAcmVhZGFibGVTdHJl
YW1DbG9zZWQpIHsKQEAgLTEwNyw3ICsxMDUsNyBAQCBmdW5jdGlvbiBlcnJvclJlYWRhYmxlU3Ry
ZWFtKHN0cmVhbSwgZXJyb3IpCiAgICAgInVzZSBzdHJpY3QiOwogCiAgICAgLy8gVE9ETzogQVNT
RVJUKHN0cmVhbS5Ac3RhdGUgPT09IEByZWFkYWJsZVN0cmVhbVJlYWRhYmxlKTsKLSAgICBzdHJl
YW0uQHF1ZXVlID0gW107CisgICAgc3RyZWFtLkBxdWV1ZSA9IEBuZXdRdWV1ZSgpOwogICAgIHN0
cmVhbS5Ac3RvcmVkRXJyb3IgPSBlcnJvcjsKICAgICBzdHJlYW0uQHN0YXRlID0gQHJlYWRhYmxl
U3RyZWFtRXJyb3JlZDsKIApAQCAtMTE3LDE0ICsxMTUsMTQgQEAgZnVuY3Rpb24gZXJyb3JSZWFk
YWJsZVN0cmVhbShzdHJlYW0sIGVycm9yKQogCiAgICAgdmFyIHJlcXVlc3RzID0gcmVhZGVyLkBy
ZWFkUmVxdWVzdHM7CiAgICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSByZXF1ZXN0cy5s
ZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KQotICAgICAgICByZXF1ZXN0c1tpbmRleF0u
cmVqZWN0KGVycm9yKTsKKyAgICAgICAgQHJlamVjdFN0cmVhbXNQcm9taXNlKHJlcXVlc3RzW2lu
ZGV4XSwgZXJyb3IpOwogICAgIHJlYWRlci5AcmVhZFJlcXVlc3RzID0gW107CiAKICAgICBAcmVs
ZWFzZVJlYWRhYmxlU3RyZWFtUmVhZGVyKHJlYWRlcik7CiAgICAgcmVhZGVyLkBzdG9yZWRFcnJv
ciA9IGVycm9yOwogICAgIHJlYWRlci5Ac3RhdGUgPSBAcmVhZGFibGVTdHJlYW1FcnJvcmVkOwog
Ci0gICAgcmVhZGVyLkBjbG9zZWRQcm9taXNlUmVqZWN0KGVycm9yKTsKKyAgICBAcmVqZWN0U3Ry
ZWFtc1Byb21pc2UocmVhZGVyLkBjbG9zZWRQcm9taXNlLCBlcnJvcik7CiB9CiAKIGZ1bmN0aW9u
IHJlcXVlc3RSZWFkYWJsZVN0cmVhbVB1bGwoc3RyZWFtKQpAQCAtMTcwLDcgKzE2OCw3IEBAIGZ1
bmN0aW9uIGdldFJlYWRhYmxlU3RyZWFtRGVzaXJlZFNpemUoc3RyZWFtKQogewogICAgInVzZSBz
dHJpY3QiOwogCi0gICByZXR1cm4gc3RyZWFtLkBoaWdoV2F0ZXJNYXJrIC0gc3RyZWFtLkBxdWV1
ZVNpemU7CisgICByZXR1cm4gc3RyZWFtLkBzdHJhdGVneS5oaWdoV2F0ZXJNYXJrIC0gc3RyZWFt
LkBxdWV1ZS5zaXplOwogfQogCiBmdW5jdGlvbiByZWxlYXNlUmVhZGFibGVTdHJlYW1SZWFkZXIo
cmVhZGVyKQpAQCAtMTg5LDcgKzE4Nyw3IEBAIGZ1bmN0aW9uIGNhbmNlbFJlYWRhYmxlU3RyZWFt
KHN0cmVhbSwgcmVhc29uKQogICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICAg
aWYgKHN0cmVhbS5Ac3RhdGUgPT09IEByZWFkYWJsZVN0cmVhbUVycm9yZWQpCiAgICAgICAgIHJl
dHVybiBQcm9taXNlLnJlamVjdChzdHJlYW0uQHN0b3JlZEVycm9yKTsKLSAgICBzdHJlYW0uQHF1
ZXVlID0gW107CisgICAgc3RyZWFtLkBxdWV1ZSA9IEBuZXdRdWV1ZSgpOwogICAgIEBmaW5pc2hD
bG9zaW5nUmVhZGFibGVTdHJlYW0oc3RyZWFtKTsKICAgICByZXR1cm4gQHByb21pc2VJbnZva2VP
ck5vb3Aoc3RyZWFtLkB1bmRlcmx5aW5nU291cmNlLCAiY2FuY2VsIiwgW3JlYXNvbl0pLnRoZW4o
ZnVuY3Rpb24oKSB7IH0pOwogfQpAQCAtMjE0LDcgKzIxMiw3IEBAIGZ1bmN0aW9uIGNsb3NlUmVh
ZGFibGVTdHJlYW0oc3RyZWFtKQogICAgIGlmIChzdHJlYW0uQHN0YXRlID09PSBAcmVhZGFibGVT
dHJlYW1DbG9zZWQpCiAgICAgICAgIHJldHVybjsgCiAgICAgc3RyZWFtLkBjbG9zZVJlcXVlc3Rl
ZCA9IHRydWU7Ci0gICAgaWYgKCFzdHJlYW0uQHF1ZXVlLmxlbmd0aCkKKyAgICBpZiAoIXN0cmVh
bS5AcXVldWUuY29udGVudC5sZW5ndGgpCiAgICAgICAgIEBmaW5pc2hDbG9zaW5nUmVhZGFibGVT
dHJlYW0oc3RyZWFtKTsKIH0KIApAQCAtMjI0LDExICsyMjIsMTEgQEAgZnVuY3Rpb24gY2xvc2VS
ZWFkYWJsZVN0cmVhbVJlYWRlcihyZWFkZXIpCiAKICAgICB2YXIgcmVxdWVzdHMgPSByZWFkZXIu
QHJlYWRSZXF1ZXN0czsKICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IHJlcXVlc3Rz
Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0gICAgICAgIHJlcXVlc3RzW2luZGV4
XS5yZXNvbHZlKHt2YWx1ZTp1bmRlZmluZWQsIGRvbmU6IHRydWV9KTsKKyAgICAgICAgQHJlc29s
dmVTdHJlYW1zUHJvbWlzZShyZXF1ZXN0c1tpbmRleF0sIHt2YWx1ZTp1bmRlZmluZWQsIGRvbmU6
IHRydWV9KTsKICAgICByZWFkZXIuQHJlYWRSZXF1ZXN0cyA9IFtdOwogICAgIEByZWxlYXNlUmVh
ZGFibGVTdHJlYW1SZWFkZXIocmVhZGVyKTsKICAgICByZWFkZXIuQHN0YXRlID0gQHJlYWRhYmxl
U3RyZWFtQ2xvc2VkOwotICAgIHJlYWRlci5AY2xvc2VkUHJvbWlzZVJlc29sdmUoKTsKKyAgICBA
cmVzb2x2ZVN0cmVhbXNQcm9taXNlKHJlYWRlci5AY2xvc2VkUHJvbWlzZSk7CiB9CiAKIGZ1bmN0
aW9uIGVucXVldWVJblJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgY2h1bmspCkBAIC0yNDAsMTkgKzIz
OCwxOCBAQCBmdW5jdGlvbiBlbnF1ZXVlSW5SZWFkYWJsZVN0cmVhbShzdHJlYW0sIGNodW5rKQog
ICAgIGlmIChzdHJlYW0uQHN0YXRlID09PSBAcmVhZGFibGVTdHJlYW1DbG9zZWQpCiAgICAgICAg
IHJldHVybiB1bmRlZmluZWQ7CiAgICAgaWYgKEBpc1JlYWRhYmxlU3RyZWFtTG9ja2VkKHN0cmVh
bSkgJiYgc3RyZWFtLkByZWFkZXIuQHJlYWRSZXF1ZXN0cy5sZW5ndGgpIHsKLSAgICAgICAgc3Ry
ZWFtLkByZWFkZXIuQHJlYWRSZXF1ZXN0cy5zaGlmdCgpLnJlc29sdmUoe3ZhbHVlOiBjaHVuaywg
ZG9uZTogZmFsc2V9KTsKKyAgICAgICAgQHJlc29sdmVTdHJlYW1zUHJvbWlzZShzdHJlYW0uQHJl
YWRlci5AcmVhZFJlcXVlc3RzLnNoaWZ0KCksIHt2YWx1ZTogY2h1bmssIGRvbmU6IGZhbHNlfSk7
CiAgICAgICAgIEByZXF1ZXN0UmVhZGFibGVTdHJlYW1QdWxsKHN0cmVhbSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgdHJ5IHsKICAgICAgICAgdmFyIHNpemUgPSAxOwotICAgICAgICBp
ZiAoc3RyZWFtLkBzdHJhdGVneVNpemUpIHsKLSAgICAgICAgICAgIHNpemUgPSBOdW1iZXIoc3Ry
ZWFtLkBzdHJhdGVneVNpemUoY2h1bmspKTsKKyAgICAgICAgaWYgKHN0cmVhbS5Ac3RyYXRlZ3ku
c2l6ZSkgeworICAgICAgICAgICAgc2l6ZSA9IE51bWJlcihzdHJlYW0uQHN0cmF0ZWd5LnNpemUo
Y2h1bmspKTsKICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4oc2l6ZSkgfHwgc2l6ZSA9PT0g
K0luZmluaXR5IHx8IHNpemUgPCAwKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVy
cm9yKCJDaHVuayBzaXplIGlzIG5vdCB2YWxpZCIpOwogICAgICAgICB9Ci0gICAgICAgIHN0cmVh
bS5AcXVldWUucHVzaCh7IHZhbHVlOiBjaHVuaywgc2l6ZTogc2l6ZSB9KTsKLSAgICAgICAgc3Ry
ZWFtLkBxdWV1ZVNpemUgKz0gc2l6ZTsKKyAgICAgICAgQGVucXVldWVWYWx1ZVdpdGhTaXplKHN0
cmVhbS5AcXVldWUsIGNodW5rLCBzaXplKTsKICAgICB9CiAgICAgY2F0Y2goZXJyb3IpIHsKICAg
ICAgICAgQGVycm9yUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBlcnJvcik7CkBAIC0yNzIsNDcgKzI2
OSwxNiBAQCBmdW5jdGlvbiByZWFkRnJvbVJlYWRhYmxlU3RyZWFtUmVhZGVyKHJlYWRlcikKICAg
ICAvLyBUT0RPOiBBU1NFUlQoISFyZWFkZXIuQG93bmVyUmVhZGFibGVTdHJlYW0pOwogICAgIC8v
IFRPRE86IEFTU0VSVChyZWFkZXIuQG93bmVyUmVhZGFibGVTdHJlYW0uQHN0YXRlID09PSBAcmVh
ZGFibGVTdHJlYW1SZWFkYWJsZSk7CiAgICAgdmFyIHN0cmVhbSA9IHJlYWRlci5Ab3duZXJSZWFk
YWJsZVN0cmVhbTsKLSAgICBpZiAoc3RyZWFtLkBxdWV1ZS5sZW5ndGgpIHsKLSAgICAgICAgdmFy
IGNodW5rID0gc3RyZWFtLkBxdWV1ZS5zaGlmdCgpOwotICAgICAgICBzdHJlYW0uQHF1ZXVlU2l6
ZSAtPSBjaHVuay5zaXplOworICAgIGlmIChzdHJlYW0uQHF1ZXVlLmNvbnRlbnQubGVuZ3RoKSB7
CisgICAgICAgIHZhciBjaHVuayA9IEBkZXF1ZXVlVmFsdWUoc3RyZWFtLkBxdWV1ZSk7CiAgICAg
ICAgIGlmICghc3RyZWFtLkBjbG9zZVJlcXVlc3RlZCkKICAgICAgICAgICAgIEByZXF1ZXN0UmVh
ZGFibGVTdHJlYW1QdWxsKHN0cmVhbSk7Ci0gICAgICAgIGVsc2UgaWYgKCFzdHJlYW0uQHF1ZXVl
Lmxlbmd0aCkKKyAgICAgICAgZWxzZSBpZiAoIXN0cmVhbS5AcXVldWUuY29udGVudC5sZW5ndGgp
CiAgICAgICAgICAgICBAZmluaXNoQ2xvc2luZ1JlYWRhYmxlU3RyZWFtKHN0cmVhbSk7Ci0gICAg
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3ZhbHVlOiBjaHVuay52YWx1ZSwgZG9uZTogZmFs
c2V9KTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dmFsdWU6IGNodW5rLCBkb25l
OiBmYWxzZX0pOwogICAgIH0KLSAgICB2YXIgcmVhZFJlcXVlc3QgPSB7fTsKLSAgICB2YXIgcmVh
ZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAg
ICAgcmVhZFJlcXVlc3QucmVzb2x2ZSA9IHJlc29sdmU7Ci0gICAgICAgIHJlYWRSZXF1ZXN0LnJl
amVjdCA9IHJlamVjdDsKLSAgICB9KTsKLSAgICByZWFkZXIuQHJlYWRSZXF1ZXN0cy5wdXNoKHJl
YWRSZXF1ZXN0KTsKKyAgICB2YXIgcmVhZFByb21pc2UgPSBAY3JlYXRlTmV3U3RyZWFtc1Byb21p
c2UoKTsKKyAgICByZWFkZXIuQHJlYWRSZXF1ZXN0cy5wdXNoKHJlYWRQcm9taXNlKTsKICAgICBA
cmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pOwogICAgIHJldHVybiByZWFkUHJvbWlz
ZTsKIH0KLQotZnVuY3Rpb24gaW52b2tlT3JOb29wKG9iamVjdCwga2V5LCBhcmdzKQotewotICAg
ICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBtZXRob2QgPSBvYmplY3Rba2V5XTsKLSAgICBpZiAo
dHlwZW9mIG1ldGhvZCA9PT0gInVuZGVmaW5lZCIpCi0gICAgICAgIHJldHVybjsKLSAgICByZXR1
cm4gbWV0aG9kLkBhcHBseShvYmplY3QsIGFyZ3MpOwotfQotCi1mdW5jdGlvbiBwcm9taXNlSW52
b2tlT3JOb29wKG9iamVjdCwga2V5LCBhcmdzKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAg
IHRyeSB7Ci0gICAgICAgIHZhciBtZXRob2QgPSBvYmplY3Rba2V5XTsKLSAgICAgICAgaWYgKHR5
cGVvZiBtZXRob2QgPT09ICJ1bmRlZmluZWQiKQotICAgICAgICAgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSgpOwotICAgICAgICB2YXIgcmVzdWx0ID0gbWV0aG9kLkBhcHBseShvYmplY3QsIGFy
Z3MpOwotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7Ci0gICAgfQotICAg
IGNhdGNoKGVycm9yKSB7Ci0gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7Ci0g
ICAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1N0cmVh
bUludGVybmFscy5qcyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9TdHJlYW1JbnRl
cm5hbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2IzZGZkNTU3NjQyNWQ0NGIyMTU5NTZkOGY1MDA4MmMwZWNh
M2Q4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9T
dHJlYW1JbnRlcm5hbHMuanMKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQ2Fub24gSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYS4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gQG9wdGlvbmFsPVNUUkVBTVNf
QVBJCisvLyBAaW50ZXJuYWxzCisKK2Z1bmN0aW9uIGludm9rZU9yTm9vcChvYmplY3QsIGtleSwg
YXJncykKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgbWV0aG9kID0gb2JqZWN0W2tl
eV07CisgICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICJ1bmRlZmluZWQiKQorICAgICAgICByZXR1
cm47CisgICAgcmV0dXJuIG1ldGhvZC5AYXBwbHkob2JqZWN0LCBhcmdzKTsKK30KKworZnVuY3Rp
b24gcHJvbWlzZUludm9rZU9yTm9vcChvYmplY3QsIGtleSwgYXJncykKK3sKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICB0cnkgeworICAgICAgICB2YXIgbWV0aG9kID0gb2JqZWN0W2tleV07Cisg
ICAgICAgIGlmICh0eXBlb2YgbWV0aG9kID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1ldGhvZC5AYXBw
bHkob2JqZWN0LCBhcmdzKTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQp
OworICAgIH0KKyAgICBjYXRjaChlcnJvcikgeworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWpl
Y3QoZXJyb3IpOworICAgIH0KKworfQorCitmdW5jdGlvbiB2YWxpZGF0ZUFuZE5vcm1hbGl6ZVF1
ZXVpbmdTdHJhdGVneShzaXplLCBoaWdoV2F0ZXJNYXJrKQoreworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIGlmIChzaXplICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHNpemUgIT09ICJmdW5jdGlv
biIpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJzaXplIHBhcmFtZXRlciBtdXN0IGJl
IGEgZnVuY3Rpb24iKTsKKworICAgIHZhciBub3JtYWxpemVkU3RyYXRlZ3kgPSB7IH07CisKKyAg
ICBub3JtYWxpemVkU3RyYXRlZ3kuc2l6ZSA9IHNpemU7CisgICAgbm9ybWFsaXplZFN0cmF0ZWd5
LmhpZ2hXYXRlck1hcmsgPSBOdW1iZXIoaGlnaFdhdGVyTWFyayk7CisKKyAgICBpZiAoTnVtYmVy
LmlzTmFOKG5vcm1hbGl6ZWRTdHJhdGVneS5oaWdoV2F0ZXJNYXJrKSkKKyAgICAgICAgdGhyb3cg
bmV3IEBUeXBlRXJyb3IoImhpZ2hXYXRlck1hcmsgcGFyYW1ldGVyIGlzIG5vdCBhIG51bWJlciIp
OworICAgIGlmIChub3JtYWxpemVkU3RyYXRlZ3kuaGlnaFdhdGVyTWFyayA8IDApCisgICAgICAg
IHRocm93IG5ldyBAUmFuZ2VFcnJvcigiaGlnaFdhdGVyTWFyayBpcyBuZWdhdGl2ZSIpOworCisg
ICAgcmV0dXJuIG5vcm1hbGl6ZWRTdHJhdGVneTsKK30KKworZnVuY3Rpb24gY3JlYXRlTmV3U3Ry
ZWFtc1Byb21pc2UoKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciByZXNvbHZlRnVu
Y3Rpb247CisgICAgdmFyIHJlamVjdEZ1bmN0aW9uOworICAgIHZhciBwcm9taXNlID0gbmV3IFBy
b21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIHJlc29sdmVGdW5jdGlv
biA9IHJlc29sdmU7CisgICAgICAgIHJlamVjdEZ1bmN0aW9uID0gcmVqZWN0OworICAgIH0pOwor
ICAgIHByb21pc2UuQHJlc29sdmUgPSByZXNvbHZlRnVuY3Rpb247CisgICAgcHJvbWlzZS5AcmVq
ZWN0ID0gcmVqZWN0RnVuY3Rpb247CisgICAgcmV0dXJuIHByb21pc2U7Cit9CisKK2Z1bmN0aW9u
IHJlc29sdmVTdHJlYW1zUHJvbWlzZShwcm9taXNlLCB2YWx1ZSkKK3sKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICBpZiAocHJvbWlzZSAmJiBwcm9taXNlLkByZXNvbHZlKSB7CisgICAgICAgIHBy
b21pc2UuQHJlc29sdmUodmFsdWUpOworICAgICAgICBwcm9taXNlLkByZXNvbHZlID0gdW5kZWZp
bmVkOworICAgICAgICBwcm9taXNlLkByZWplY3QgPSB1bmRlZmluZWQ7CisgICAgfQorfQorCitm
dW5jdGlvbiByZWplY3RTdHJlYW1zUHJvbWlzZShwcm9taXNlLCB2YWx1ZSkKK3sKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICBpZiAocHJvbWlzZSAmJiBwcm9taXNlLkByZWplY3QpIHsKKyAgICAg
ICAgcHJvbWlzZS5AcmVqZWN0KHZhbHVlKTsKKyAgICAgICAgcHJvbWlzZS5AcmVzb2x2ZSA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgcHJvbWlzZS5AcmVqZWN0ID0gdW5kZWZpbmVkOworICAgIH0KK30K
KworZnVuY3Rpb24gbmV3UXVldWUoKQoreworICAgIHJldHVybiB7IGNvbnRlbnQ6IFtdLCBzaXpl
OiAwIH07Cit9CisKK2Z1bmN0aW9uIGRlcXVldWVWYWx1ZShxdWV1ZSkKK3sKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICB2YXIgcmVjb3JkID0gcXVldWUuY29udGVudC5zaGlmdCgpOworICAgIHF1
ZXVlLnNpemUgLT0gcmVjb3JkLnNpemU7CisgICAgcmV0dXJuIHJlY29yZC52YWx1ZTsKK30KKwor
ZnVuY3Rpb24gZW5xdWV1ZVZhbHVlV2l0aFNpemUocXVldWUsIHZhbHVlLCBzaXplKQoreworICAg
IHNpemUgPSBOdW1iZXIoc2l6ZSk7CisgICAgaWYgKE51bWJlci5pc05hTihzaXplKSB8fCAhTnVt
YmVyLmlzRmluaXRlKHNpemUpIHx8IHNpemUgPCAwKQorICAgICAgICB0aHJvdyBuZXcgQFJhbmdl
RXJyb3IoInNpemUgaGFzIGFuIGluY29ycmVjdCB2YWx1ZSIpOworICAgIHF1ZXVlLmNvbnRlbnQu
cHVzaCh7IHZhbHVlOiB2YWx1ZSwgc2l6ZTogc2l6ZSB9KTsKKyAgICBxdWV1ZS5zaXplICs9IHNp
emU7CisKKyAgICByZXR1cm4gdW5kZWZpbmVkOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDAyNzdmYjg2Njg3NmNmMThiNGI4
ODc0YTdkY2QzMjdlMTVjMWQ5YmQuLjI4M2UzMjBiYmFkMzM2N2Y2ZjE0NjlmYTFiMjFlZDFhODQ5
NWMzYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTE1MDQsNiArMTUwNCw4IEBACiAJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNF
RCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNjJBNDU1MTAxMTQ2NDcwMERGRjNFRCAvKiBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCAqLzsgfTsKIAkJNDE2MkE0NTgxMDExNDY0
NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNjJBNDU2MTAxMTQ2NDcwMERGRjNF
RCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggKi87IH07CiAJCTQxNkUyOUE2MTAy
RkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBvcnRpbmdQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8q
IFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi87IH07CisJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAz
MyAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNDE2RTZGRUExQkJEMTY4NDAwMEE2MDM0IC8qIFN0cmVhbUludGVybmFsc0J1
aWx0aW5zV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUIwM0Q4MDcxQkIzMTEwRDAwQjc2NENBIC8qIFN0cmVhbUludGVybmFsc0J1aWx0aW5z
V3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1
aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQx
NkU2RkU5MUJCRDEyRTUwMDBBNjA0MyAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBE
MDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkVBMUJCRDE2ODQwMDBBNjA0NCAv
KiBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zV3JhcHBlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDcxQkIzMTEwRDAwQjc2NERB
IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMzExLDYgKzExMzEzLDgg
QEAKIAkJOTkwOEIwRUMxQkNBQ0YxRjAwRUQwRjY1IC8qIGdlbmVyYXRlLWpzLWJ1aWx0aW5zICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gImdlbmVyYXRlLWpzLWJ1aWx0aW5z
Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkwOEIwRUQxQkNBQ0Y5MTAwRUQwRjY1
IC8qIEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5LmpzOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBFRTFCQ0FDRjkxMDBFRDBGNjUgLyogQ291bnRRdWV1
aW5nU3RyYXRlZ3kuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBD
b3VudFF1ZXVpbmdTdHJhdGVneS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTkw
OEIwRjExQkNBQ0Y5MTAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFscy5qcyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmVhbUludGVybmFscy5qczsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTkwOEIwRkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUlu
dGVybmFsc0J1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkwOEIwRUYxQkNBQ0Y5MTAwRUQwRjY1IC8qIFJlYWRhYmxlU3RyZWFtLmpzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVTdHJlYW0uanM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEYwMUJDQUNGOTEwMEVEMEY2NSAvKiBSZWFk
YWJsZVN0cmVhbUNvbnRyb2xsZXIuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk5MDhCMEYxMUJDQUNGOTEwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVhbUludGVy
bmFscy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFJlYWRhYmxl
U3RyZWFtSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzNjUs
NiArMTEzNjksOCBAQAogCQk5QTUyOEU4MjE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmpl
Y3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0aW5nT2JqZWN0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QUIxRjM3RTE4RTI0ODlBMDA1MzQ3NDMg
LyogQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlBQjFGMzdGMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAz
RDgwNjFCQjMxMTBEMDBCNzY0QzkgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwM0Q4MDcxQkIzMTEwRDAwQjc2NENBIC8qIFN0
cmVhbUludGVybmFsc0J1aWx0aW5zV3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8qIFJlYWRhYmxlU3RyZWFt
QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVTdHJl
YW1CdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgwNjFCQjMx
MTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA3MUJCMzExMEQwMEI3NjRE
OCAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zV3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zV3JhcHBlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTYzMjQsNiArMTYzMzAsNyBAQAogCQkJCTk5MDhCMEYxMUJD
QUNGOTEwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVhbUludGVybmFscy5qcyAqLywKIAkJCQk0MTlG
QUZBRDFBQkFCQ0Q1MDA1QjgyOEIgLyogUmVhZGFibGVTdHJlYW1SZWFkZXIuaWRsICovLAogCQkJ
CTk5MDhCMEYyMUJDQUNGOTEwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVhbVJlYWRlci5qcyAqLywK
KwkJCQk5OTA4QjBGMTFCQ0FDRjkxMDBFRDBGNTUgLyogU3RyZWFtSW50ZXJuYWxzLmpzICovLAog
CQkJKTsKIAkJCXBhdGggPSBzdHJlYW1zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTE3MTU2LDYgKzE3MTYzLDkgQEAKIAkJCQkyNkFBMEY5RDE4RDJBMThCMDA0MTkzODEgLyogU2Vs
ZWN0b3JQc2V1ZG9FbGVtZW50VHlwZU1hcC5jcHAgKi8sCiAJCQkJMjZBQTBGOUYxOEQyQTFDMTAw
NDE5MzgxIC8qIFNlbGVjdG9yUHNldWRvRWxlbWVudFR5cGVNYXAuZ3BlcmYgKi8sCiAJCQkJNTNF
Rjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8sCisJCQkJOTkwOEIw
RkQxQkNBRDA3RDAwRUQwRjU1IC8qIFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNwcCAqLywKKwkJ
CQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QzkgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAq
LywKKwkJCQk5QjAzRDgwNzFCQjMxMTBEMDBCNzY0Q0EgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRp
bnNXcmFwcGVyLmggKi8sCiAJCQkJODM4NkE5NkUxOUY2MUU0RjAwRTFFQzRBIC8qIFN0eWxlQnVp
bGRlci5jcHAgKi8sCiAJCQkJODNDMDVBNTgxQTY4NjIxMjAwN0U1REVBIC8qIFN0eWxlUHJvcGVy
dHlTaG9ydGhhbmRGdW5jdGlvbnMuY3BwICovLAogCQkJCTgzQzA1QTU5MUE2ODYyMTIwMDdFNURF
QSAvKiBTdHlsZVByb3BlcnR5U2hvcnRoYW5kRnVuY3Rpb25zLmggKi8sCkBAIC0yNzE5MCw2ICsy
NzIwMCw4IEBACiAJCQkJNTFFMEJCMzgwREE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAuaCBp
biBIZWFkZXJzICovLAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFt
ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM3NjM2QzFBMkU2OEJCMDA5QTdFRTIgLyog
U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTZFNkZFODFC
QkQxMkRGMDAwQTYwMzMgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTQxNkU2RkVBMUJCRDE2ODQwMDBBNjAzNCAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
c1dyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM2QzM2MTMxQzU3RDMwMDA5QTdFMCAv
KiBTdHJpbmdDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIzNTQwRjMwRDAwNzgyRTAw
MjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUI2QzQxNTMx
MzQ0OTQ5MDAwMDg1QjYyIC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKaW5kZXgg
MmFmOTc5OWVkMWViZWQ0ZmI5Y2I4ZDk0ZjY3NjhhYzk1NjJjZmMwMi4uZmEyYTMwOTg5OTA0MWM1
MjUyOGZjNzk0OTdjODFlZTgzZGNiNmE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaWYgRU5BQkxFKFNU
UkVBTVNfQVBJKQogI2luY2x1ZGUgIkpTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3Jz
LmgiCiAjaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIgorI2luY2x1
ZGUgIlN0cmVhbUludGVybmFsc0J1aWx0aW5zLmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKQEAgLTk2LDYgKzk3LDEyIEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQogICAgICAgICAgICAgbV9wcml2
YXRlRnVuY3Rpb25zLnJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzKCkubV8jI25hbWUjI0Z1bmN0aW9u
LmdldCgpICwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgV0VCQ09SRVJFQURBQkxF
U1RSRUFNSU5URVJOQUxTX0ZPUkVBQ0hfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xP
QkFMX1NUQVRJQykKICN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKKyNkZWZpbmUgREVDTEFS
RV9HTE9CQUxfU1RBVElDKG5hbWUpXAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oXAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVp
bHRpbkZ1bmN0aW9ucygpLnN0cmVhbUludGVybmFsc0J1aWx0aW5zKCkubmFtZSMjUHJpdmF0ZU5h
bWUoKSwgXAorICAgICAgICAgICAgbV9wcml2YXRlRnVuY3Rpb25zLnN0cmVhbUludGVybmFscygp
Lm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAg
ICAgIFdFQkNPUkVTVFJFQU1JTlRFUk5BTFNfRk9SRUFDSF9CVUlMVElOX0ZVTkNUSU9OX05BTUUo
REVDTEFSRV9HTE9CQUxfU1RBVElDKQorI3VuZGVmIERFQ0xBUkVfR0xPQkFMX1NUQVRJQwogI2Vu
ZGlmCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUJ1aWx0aW5OYW1lcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1
aWx0aW5OYW1lcy5oCmluZGV4IDBlYjA1YWFjN2VkOWQ0ZTQ2YWE3Mzk4ZjAwNzIwYTE5MWZlNTNk
YzEuLmE1MDdiYjhlODc1NDY0ZTFhODU0ZWVjMzBhMWVmMTYwYjEwYjRjN2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgKQEAgLTM0LDE2
ICszNCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZGVmaW5lIFdFQkNPUkVfQ09NTU9OX1BS
SVZBVEVfSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKG1hY3JvKVwKICAgICBtYWNybyhj
bG9zZVJlcXVlc3RlZCkgXAogICAgIG1hY3JvKGNsb3NlZFByb21pc2UpIFwKLSAgICBtYWNybyhj
bG9zZWRQcm9taXNlUmVzb2x2ZSkgXAotICAgIG1hY3JvKGNsb3NlZFByb21pc2VSZWplY3QpIFwK
ICAgICBtYWNybyhjb250cm9sbGVkUmVhZGFibGVTdHJlYW0pIFwKICAgICBtYWNybyhjb250cm9s
bGVyKSBcCi0gICAgbWFjcm8oaGlnaFdhdGVyTWFyaykgXAogICAgIG1hY3JvKG93bmVyUmVhZGFi
bGVTdHJlYW0pIFwKICAgICBtYWNybyhwdWxsQWdhaW4pIFwKICAgICBtYWNybyhwdWxsaW5nKSBc
CiAgICAgbWFjcm8ocXVldWUpIFwKLSAgICBtYWNybyhxdWV1ZVNpemUpIFwKICAgICBtYWNybyhy
ZWFkYWJsZVN0cmVhbUNsb3NlZCkgXAogICAgIG1hY3JvKHJlYWRhYmxlU3RyZWFtRXJyb3JlZCkg
XAogICAgIG1hY3JvKHJlYWRhYmxlU3RyZWFtUmVhZGFibGUpIFwKQEAgLTUyLDcgKzQ4LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3JvKHN0YXRlKSBcCiAgICAgbWFjcm8oc3RhcnRl
ZCkgXAogICAgIG1hY3JvKHN0b3JlZEVycm9yKSBcCi0gICAgbWFjcm8oc3RyYXRlZ3lTaXplKSBc
CisgICAgbWFjcm8oc3RyYXRlZ3kpIFwKICAgICBtYWNybyh1bmRlcmx5aW5nU291cmNlKSBcCiAg
ICAgbWFjcm8oUmVhZGFibGVTdHJlYW1SZWFkZXIpIFwKICAgICBtYWNybyhSZWFkYWJsZVN0cmVh
bUNvbnRyb2xsZXIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaAppbmRleCA5NjM0NGY5YzRhZDJjNjJlOWI4ZDkzOTJk
MDlhZjVkNDlmYjFiMTA2Li5lMjlmMWVmNWQwM2E1MGJmOGI5MDU4OGQ3YWM3Njk3YTc0ZmQ2YWE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlu
SW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVp
bHRpbkludGVybmFscy5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpZiBFTkFCTEUoU1RSRUFNU19B
UEkpCiAjaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIuaCIK
KyNpbmNsdWRlICJTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIuaCIKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwxNSArNDAsMTggQEAgZXhwbGljaXQgSlNCdWlsdGlu
SW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdikKICAgICAgICAgOiB2bSh2KQogI2lmIEVOQUJM
RShTVFJFQU1TX0FQSSkKICAgICAgICAgLCBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rp
b25zKHZtKQorICAgICAgICAsIG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zKHZtKQogI2VuZGlm
CiAgICAgeyB9CiAKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAgICAgUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGluRnVuY3Rpb25zIHJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzKCkgeyByZXR1
cm4gbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9uczsgfQorICAgIFN0cmVhbUludGVy
bmFsc0J1aWx0aW5GdW5jdGlvbnMgc3RyZWFtSW50ZXJuYWxzKCkgeyByZXR1cm4gbV9zdHJlYW1J
bnRlcm5hbHNGdW5jdGlvbnM7IH0KICNlbmRpZgogICAgIHZvaWQgdmlzaXQoSlNDOjpTbG90Vmlz
aXRvciYgdmlzaXRvcikgewogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKICAgICAgICAgbV9yZWFk
YWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9ucy52aXNpdCh2aXNpdG9yKTsKKyAgICAgICAgbV9z
dHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7CiAjZWxzZQogICAgICAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7CiAjZW5kaWYKQEAgLTU1LDYgKzU5LDcgQEAgZXhwbGljaXQg
SlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoSlNDOjpWTSYgdikKICAgICB2b2lkIGluaXQoSlND
OjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KSB7CiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJ
KQogICAgICAgICBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zLmluaXQoZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgbV9zdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMuaW5pdChnbG9iYWxP
YmplY3QpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CiAjZW5k
aWYKQEAgLTYzLDcgKzY4LDggQEAgZXhwbGljaXQgSlNCdWlsdGluSW50ZXJuYWxGdW5jdGlvbnMo
SlNDOjpWTSYgdikKIHByaXZhdGU6CiAgICAgSlNDOjpWTSYgdm07CiAjaWYgRU5BQkxFKFNUUkVB
TVNfQVBJKQotICAgICBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5GdW5jdGlvbnMgbV9y
ZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9uczsKKyAgICBSZWFkYWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5GdW5jdGlvbnMgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9uczsK
KyAgICBTdHJlYW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25zIG1fc3RyZWFtSW50ZXJuYWxzRnVu
Y3Rpb25zOwogI2VuZGlmCiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlSlNCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlSlNCdWlsdGlucy5jcHAKaW5kZXggODdmOWYyMDU5NThiNTBlNjRlYjVhYjQ4NDg5MjUz
ZDI5MTg4OTk2ZS4uNTc2ZjAzYjY0MmM1MjU5MjdkNWM5MjlmMTgxMTkyNDE2NjM2YmUzYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmNwcApA
QCAtMzMsNCArMzMsNSBAQAogI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckJ1aWx0
aW5zLmNwcCIKICNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmNwcCIK
ICNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbVJlYWRlckJ1aWx0aW5zLmNwcCIKKyNpbmNsdWRlICJT
dHJlYW1JbnRlcm5hbHNCdWlsdGlucy5jcHAiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlucy5oCmluZGV4IGI2YjA1Yjk1OTQ2MTIxNDdhYzgy
YTg2YTdmNDgyMzcxYzE0MjU2MDkuLmJmZDE0MWQyMTZiMzkyM2VkODk0NGRhYWI2NjM0M2RiMWQ4
YTliNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1
aWx0aW5zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRp
bnMuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtQ29udHJvbGxl
ckJ1aWx0aW5zV3JhcHBlci5oIgogI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnNXcmFwcGVyLmgiCiAjaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1SZWFkZXJCdWlsdGluc1dy
YXBwZXIuaCIKKyNpbmNsdWRlICJTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIuaCIKICNl
bmRpZgogCiAKQEAgLTUyLDEwICs1MywxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9yZWFkYWJs
ZVN0cmVhbUNvbnRyb2xsZXJCdWlsdGlucygmdm0pCiAgICAgICAgICwgbV9yZWFkYWJsZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zKCZ2bSkKICAgICAgICAgLCBtX3JlYWRhYmxlU3RyZWFtUmVhZGVy
QnVpbHRpbnMoJnZtKQorICAgICAgICAsIG1fc3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoJnZtKQog
I2VuZGlmCiAgICAgewogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKICAgICAgICAgbV9yZWFkYWJs
ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmV4cG9ydE5hbWVzKCk7CisgICAgICAgIG1fc3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKICNlbmRpZgogICAgIH0KICNpZiBFTkFC
TEUoU1RSRUFNU19BUEkpCkBAIC02NSw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICBSZWFkYWJsZVN0
cmVhbUNvbnRyb2xsZXJCdWlsdGluc1dyYXBwZXImIHJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckJ1
aWx0aW5zKCkgeyByZXR1cm4gbV9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJCdWlsdGluczt9CiAg
ICAgUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXImIHJlYWRhYmxlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMoKSB7IHJldHVybiBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnM7fQogICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyQnVpbHRpbnNXcmFwcGVyJiByZWFkYWJs
ZVN0cmVhbVJlYWRlckJ1aWx0aW5zKCkgeyByZXR1cm4gbV9yZWFkYWJsZVN0cmVhbVJlYWRlckJ1
aWx0aW5zO30KKyAgICBTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXImIHN0cmVhbUludGVy
bmFsc0J1aWx0aW5zKCkgeyByZXR1cm4gbV9zdHJlYW1JbnRlcm5hbHNCdWlsdGluczt9CiAjZW5k
aWYKIAogcHJpdmF0ZToKQEAgLTc2LDYgKzgwLDcgQEAgcHJpdmF0ZToKICAgICBSZWFkYWJsZVN0
cmVhbUNvbnRyb2xsZXJCdWlsdGluc1dyYXBwZXIgbV9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJC
dWlsdGluczsKICAgICBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zV3JhcHBlciBtX3Jl
YWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnM7CiAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJC
dWlsdGluc1dyYXBwZXIgbV9yZWFkYWJsZVN0cmVhbVJlYWRlckJ1aWx0aW5zOworICAgIFN0cmVh
bUludGVybmFsc0J1aWx0aW5zV3JhcHBlciBtX3N0cmVhbUludGVybmFsc0J1aWx0aW5zOwogI2Vu
ZGlmCiAKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263483</attachid>
            <date>2015-10-19 07:39:23 -0700</date>
            <delta_ts>2015-10-20 02:51:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150133-20151019163840.patch</filename>
            <type>text/plain</type>
            <size>33452</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YjRhY2ZkMTdiYjg1OTJiMTc1N2U4YTExMzM1MDAyNWQ1MzUxMTM0Li5jMjU3MjM1YmVjMTVkMDcz
NDYxZGRiMTEyMjBkNGU3NDk3N2ExNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxNS0xMC0xOSAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJp
c0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtTdHJlYW1zIEFQSV0gUmV3b3JrIHNvbWUgcmVhZGFi
bGUgc3RyZWFtIGludGVybmFscyB0aGF0IGNhbiBiZSBjb21tb24gdG8gd3JpdGFibGUgc3RyZWFt
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMTMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KTogQWRkZWQgUmFuZ2VF
cnJvciBhbHNvIGFzIG5hdGl2ZSBmdW5jdGlvbnMuCisKIDIwMTUtMTAtMTkgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgRHJvcCAhbmV3VGFyZ2V0IGNo
ZWNrIHNpbmNlIGl0IGFsd2F5cyBiZWNvbWVzIHRydWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4YWY0ZmJmNmQ1
OTlkMzFhOGJjMTA3ZDVmN2MyZmVhZTM2NjliYjlhLi40NzIwN2E5MDIwYWQwNzliYWEyZjVkYTc5
YTc5ZmJmMmMyNTM4ZGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTUtMTAtMTkg
IFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbU3RyZWFtcyBBUEldIFJld29yayBzb21lIHJlYWRhYmxlIHN0cmVhbSBpbnRlcm5hbHMgdGhh
dCBjYW4gYmUgY29tbW9uIHRvIHdyaXRhYmxlIHN0cmVhbXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDEzMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFyZSBzb21lIHRoaW5ncyBpbiBSZWFk
YWJsZVN0cmVhbSBpbnRlcm5hbHMgdGhhdCBiZSBiZSB1c2VkIGFsc28gZm9yIFdyaXRhYmxlIFN0
cmVhbXMgc28gaXQgd2FzIG5lY2Vzc2FyeQorICAgICAgICB0byBtb3ZlIHNvbWUgZnVuY3Rpb25z
IGFuZCByZWZhY3RvciBzb21lIGNvZGUgdGhhdCBjYW4gYmUgc2hhcmVkIGJ5IGJvdGggaW1wbGVt
ZW50YXRpb25zLgorCisgICAgICAgIFF1ZXVlIHdhcyB3cml0dGVuIHdpdGggdGhlIGZ1bmN0aW9u
cyBkZWNsYXJlZCBhdCB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGtlZXBpbmcgdGhlIGltcHJvdmVt
ZW50IG9mIGhhdmluZyB0aGUKKyAgICAgICAgdG90YWwgc2l6ZSBjYWxjdWxhdGVkIGluc3RlYWQg
b2YgaGF2aW5nIHRvIHRyYW5zdmVyc2UgdGhlIHdob2xlIGFycmF5LgorCisgICAgICAgIFRoZSBz
dHJhdGVneSBpcyBrZXB0IGFzIGFuIG9iamVjdCBhbmQgYSBjb21tb24gbWV0aG9kIGlzIHVzZWQg
dG8gdmFsaWRhdGUgaXQgYXMgcGVyIHNwZWMuCisKKyAgICAgICAgUHJvbWlzZXMgYXJlIHJld29y
a2VkIHRvIGtlZXAgaW4gYW4gaW50ZXJuYWwgc2xvdCBpbnNpZGUgdGhlIHByb21pc2Ugb2JqZWN0
IHRoZSByZXNvbHZlIGFuZCByZWplY3QKKyAgICAgICAgZnVuY3Rpb25zLiBGb3IgY29udmluaWVu
Y2UgdGhyZWUgZnVuY3Rpb25zIHdlcmUgd3JpdHRlbiwgb25lIHRvIGNyZWF0ZSB0aGUgcHJvbWlz
ZSAoYW5kIGtlZXAgaW50ZXJuYWxseSB0aGUKKyAgICAgICAgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1
bmN0aW9ucyksIG9uZSB0byByZXNvbHZlIGFuZCBhbm90aGVyIHRvIHJlamVjdC4gUHJvbWlzZXMg
Y2FuIHN0aWxsIGJlIGNyZWF0ZWQgd2l0aAorICAgICAgICBQcm9taXNlLnJlc29sdmUgb3IgcmVq
ZWN0IGFzIHRoZSByZXNvbHZlIGFuZCByZWplY3RTdHJlYW1zUHJvbWlzZSBmdW5jdGlvbnMgb3Bl
cmF0ZSB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0CisgICAgICAgIHRoZSBpbnRlcm5hbCBzbG90
cyBtaWdodCBub3QgZXhpc3QuCisKKyAgICAgICAgaW52b2tlT3JOb29wIGFuZCBwcm9taXNlSW52
b2tlT3JOb29wIHdlcmUgbW92ZWQgdG8gdGhlIGNvbW1vbiBjb2RlIGFzIHRoZXkgd2lsbCBiZSBh
bHNvIHVzZWQgYnkgV3JpdGFibGVTdHJlYW0uCisKKyAgICAgICAgQ3VycmVudCB0ZXN0IHNldCBz
dWZmaWNlcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJD
b3JlSlNCdWlsdGlucy5oOiBCdWlsZCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBNb2R1bGVz
L3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uanM6CisgICAgICAgIChpbml0aWFsaXplUmVhZGFibGVT
dHJlYW0pOiBSZXdvcmtlZCBxdWV1ZSBhbmQgc3RyYXRlZ3kuCisgICAgICAgICogTW9kdWxlcy9z
dHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzOgorICAgICAgICAocHJpdmF0ZUluaXRp
YWxpemVSZWFkYWJsZVN0cmVhbVJlYWRlcik6CisgICAgICAgIChlcnJvclJlYWRhYmxlU3RyZWFt
KToKKyAgICAgICAgKGdldFJlYWRhYmxlU3RyZWFtRGVzaXJlZFNpemUpOgorICAgICAgICAoY2Fu
Y2VsUmVhZGFibGVTdHJlYW0pOgorICAgICAgICAoY2xvc2VSZWFkYWJsZVN0cmVhbSk6CisgICAg
ICAgIChjbG9zZVJlYWRhYmxlU3RyZWFtUmVhZGVyKToKKyAgICAgICAgKGVucXVldWVJblJlYWRh
YmxlU3RyZWFtKToKKyAgICAgICAgKHJlYWRGcm9tUmVhZGFibGVTdHJlYW1SZWFkZXIpOiBSZXdv
cmtlZCBxdWV1ZSwgc3RyYXRlZ3kgYW5kIHByb21pc2VzLgorICAgICAgICAoaW52b2tlT3JOb29w
KTogRGVsZXRlZC4KKyAgICAgICAgKHByb21pc2VJbnZva2VPck5vb3ApOiBEZWxldGVkLgorICAg
ICAgICAqIE1vZHVsZXMvc3RyZWFtcy9TdHJlYW1JbnRlcm5hbHMuanM6IEFkZGVkLgorICAgICAg
ICAoaW52b2tlT3JOb29wKToKKyAgICAgICAgKHByb21pc2VJbnZva2VPck5vb3ApOiBNb3ZlZCBm
cm9tIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzLgorICAgICAgICAodmFsaWRhdGVBbmROb3Jt
YWxpemVRdWV1aW5nU3RyYXRlZ3kpOgorICAgICAgICAoY3JlYXRlTmV3U3RyZWFtc1Byb21pc2Up
OgorICAgICAgICAocmVzb2x2ZVN0cmVhbXNQcm9taXNlKToKKyAgICAgICAgKHJlamVjdFN0cmVh
bXNQcm9taXNlKToKKyAgICAgICAgKG5ld1F1ZXVlKToKKyAgICAgICAgKGRlcXVldWVWYWx1ZSk6
CisgICAgICAgIChlbnF1ZXVlVmFsdWVXaXRoU2l6ZSk6IEFkZGVkIGFjY29yZGluZyB0byB0aGUg
c3BlYy4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmg6IFVwZGF0
ZWQgcHJpdmF0ZSBuYW1lcyBhY2NvcmRpbmcgdG8gdGhlIG5ldyBzbG90cy4KKwogMjAxNS0xMC0x
OSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAg
IEJpbmRpbmcgZ2VuZXJhdG9yIHNob3VsZCBhbGxvdyBnZW5lcmF0aW5nIHByaXZhdGUgSlMgZnVu
Y3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25J
ZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRp
ZmllcnMuaAppbmRleCA5MmM5YmIwZjA5ODE2N2Q3YzcwNmEwMDg0Y2QyZTViYWNlMzVkMGJkLi43
OTAxZWYwYzIwMmQxNDU3NDdmODRiODJiNWQ0OGVkYjk4ZDlkNGYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTI5MSw2ICsy
OTEsNyBAQAogICAgIG1hY3JvKGlzRmluaXRlKSBcCiAgICAgbWFjcm8oZ2V0UHJvdG90eXBlT2Yp
IFwKICAgICBtYWNybyhnZXRPd25Qcm9wZXJ0eU5hbWVzKSBcCisgICAgbWFjcm8oUmFuZ2VFcnJv
cikgXAogICAgIG1hY3JvKFR5cGVFcnJvcikgXAogICAgIG1hY3JvKHR5cGVkQXJyYXlMZW5ndGgp
IFwKICAgICBtYWNybyh0eXBlZEFycmF5U29ydCkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IGYzODBmZjJhODVjZWI4YmRjYzQx
OWViMzgwZmEyMjYxZjRiMmU4MzguLmIzMGViZjNjZWVmMTM2Mzc2YWE1MzNiMTQ2MzVhYzMyNDM0
M2U3OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKQEAgLTUxNiw2ICs1MTYsNyBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+IGpzTmFtZSwgbG93ZXJOYW1lICMjIENvbnN0cnVjdAogICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+b3duRW51bWVyYWJsZVBy
b3BlcnR5S2V5c1ByaXZhdGVOYW1lLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDAsIFN0
cmluZygpLCBvd25FbnVtZXJhYmxlUHJvcGVydHlLZXlzKSwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1l
cy0+Z2V0VGVtcGxhdGVPYmplY3RQcml2YXRlTmFtZSwgcHJpdmF0ZUZ1bmNHZXRUZW1wbGF0ZU9i
amVjdCwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQ
cm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+ZW5xdWV1ZUpvYlByaXZhdGVOYW1lLCBKU0Z1
bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDAsIFN0cmluZygpLCBlbnF1ZXVlSm9iKSwgRG9udEVu
dW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8o
dm0ucHJvcGVydHlOYW1lcy0+UmFuZ2VFcnJvclByaXZhdGVOYW1lLCBtX3JhbmdlRXJyb3JDb25z
dHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAg
ICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+VHlwZUVycm9yUHJpdmF0ZU5h
bWUsIG1fdHlwZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMt
PnR5cGVkQXJyYXlMZW5ndGhQcml2YXRlTmFtZSwgcHJpdmF0ZUZ1bmNUeXBlZEFycmF5TGVuZ3Ro
LCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3Bl
cnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT50eXBlZEFycmF5U29ydFByaXZhdGVOYW1lLCBwcml2
YXRlRnVuY1R5cGVkQXJyYXlTb3J0LCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSks
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGVhMDczNzU4N2I2NGVhMjFlYjEwMTczZGVmNTgxOTY1
NzNlNjljNzIuLjZlYTI3ODBlNzQyMzgwMWE0Y2U4ZGQyMDQzZDMwYjcwYmE2YzNjNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CkBAIC0zMzcwLDYgKzMzNzAsNyBAQCBzZXQoV0VCQ09SRV9KU19CVUlM
VElOUwogICAgICR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUNv
bnRyb2xsZXIuanMKICAgICAke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVT
dHJlYW1JbnRlcm5hbHMuanMKICAgICAke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW1SZWFkZXIuanMKKyAgICAke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3N0cmVhbXMv
U3RyZWFtSW50ZXJuYWxzLmpzCiAgICAgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9zdHJlYW1zL1dy
aXRhYmxlU3RyZWFtLmpzCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDNj
NWY4NWZiODgyMzc3N2UzNmM1MWFhNWRlNjg1MTAzODM2MzQ2MjUuLjk0MzA3Mjc3ZmI5YTYxMDEz
ZDZiYzE2NTQ4YTNkZDBlY2IwMGFkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpA
QCAtMTI2Miw2ICsxMjYyLDcgQEAgV0VCQ09SRV9KU19CVUlMVElOUyA9IFwKICAgICAkKFdlYkNv
cmUpL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuanMgXAogICAgICQo
V2ViQ29yZSkvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzIFwKICAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5qcyBcCisg
ICAgJChXZWJDb3JlKS9Nb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzIFwKICAgICAk
KFdlYkNvcmUpL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbS5qcyBcCiAjCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5qcyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5qcwppbmRleCAx
YTUyY2Y4MTYxZGQxZDI0ZDkzZDVjMTYzMzQ2ZWJjYTNkMGMxZThkLi41ZjU2ZjFlYzJmMDZmZTk4
OWMwZjEwNzRjMmViYjQ4MWNjMWMwMGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uanMKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmpzCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxNSBDYW5vbiBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw4ICs0Myw3IEBAIGZ1bmN0aW9u
IGluaXRpYWxpemVSZWFkYWJsZVN0cmVhbSh1bmRlcmx5aW5nU291cmNlLCBzdHJhdGVneSkKIAog
ICAgIHRoaXMuQHVuZGVybHlpbmdTb3VyY2UgPSB1bmRlcmx5aW5nU291cmNlOwogCi0gICAgdGhp
cy5AcXVldWUgPSBbXTsKLSAgICB0aGlzLkBxdWV1ZVNpemUgPSAwOworICAgIHRoaXMuQHF1ZXVl
ID0gQG5ld1F1ZXVlKCk7CiAgICAgdGhpcy5Ac3RhdGUgPSBAcmVhZGFibGVTdHJlYW1SZWFkYWJs
ZTsKICAgICB0aGlzLkBzdGFydGVkID0gZmFsc2U7CiAgICAgdGhpcy5AY2xvc2VSZXF1ZXN0ZWQg
PSBmYWxzZTsKQEAgLTUyLDEzICs1Miw3IEBAIGZ1bmN0aW9uIGluaXRpYWxpemVSZWFkYWJsZVN0
cmVhbSh1bmRlcmx5aW5nU291cmNlLCBzdHJhdGVneSkKICAgICB0aGlzLkByZWFkZXIgPSB1bmRl
ZmluZWQ7CiAgICAgdGhpcy5Ac3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7CiAgICAgdGhpcy5AY29u
dHJvbGxlciA9IG5ldyBAUmVhZGFibGVTdHJlYW1Db250cm9sbGVyKHRoaXMpOwotICAgIHRoaXMu
QHN0cmF0ZWd5U2l6ZSA9IHN0cmF0ZWd5LnNpemU7Ci0gICAgdGhpcy5AaGlnaFdhdGVyTWFyayA9
IE51bWJlcihzdHJhdGVneS5oaWdoV2F0ZXJNYXJrKTsKLQotICAgIGlmIChOdW1iZXIuaXNOYU4o
dGhpcy5AaGlnaFdhdGVyTWFyaykpCi0gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImhpZ2hX
YXRlck1hcmsgcGFyYW1ldGVyIGlzIG5vdCBjb3JyZWN0Iik7Ci0gICAgaWYgKHRoaXMuQGhpZ2hX
YXRlck1hcmsgPCAwKQotICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaGlnaFdhdGVyTWFy
ayBpcyBuZWdhdGl2ZSIpOworICAgIHRoaXMuQHN0cmF0ZWd5ID0gQHZhbGlkYXRlQW5kTm9ybWFs
aXplUXVldWluZ1N0cmF0ZWd5KHN0cmF0ZWd5LnNpemUsIHN0cmF0ZWd5LmhpZ2hXYXRlck1hcmsp
OwogCiAgICAgdmFyIHJlc3VsdCA9IEBpbnZva2VPck5vb3AodW5kZXJseWluZ1NvdXJjZSwgInN0
YXJ0IiwgW3RoaXMuQGNvbnRyb2xsZXJdKTsKICAgICB2YXIgX3RoaXMgPSB0aGlzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzLmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50
ZXJuYWxzLmpzCmluZGV4IGE3NzAyN2ExZTNiNWU1MjRlY2Y4NjI5NmIyZTVjM2QzNzhmZjUyNjMu
LjhhZDEzYTcwOWExODJkZDc1M2IxN2JjMDU2YmJjNzMxZTJkNTk3MGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUludGVybmFscy5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5h
bHMuanMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDEwICs0Miw3IEBAIGZ1bmN0aW9u
IHByaXZhdGVJbml0aWFsaXplUmVhZGFibGVTdHJlYW1SZWFkZXIoc3RyZWFtKQogICAgICAgICB0
aGlzLkBvd25lclJlYWRhYmxlU3RyZWFtID0gc3RyZWFtOwogICAgICAgICB0aGlzLkBzdG9yZWRF
cnJvciA9IHVuZGVmaW5lZDsKICAgICAgICAgc3RyZWFtLkByZWFkZXIgPSB0aGlzOwotICAgICAg
ICB0aGlzLkBjbG9zZWRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVq
ZWN0KSB7Ci0gICAgICAgICAgICBzdHJlYW0uQHJlYWRlci5AY2xvc2VkUHJvbWlzZVJlc29sdmUg
PSByZXNvbHZlOwotICAgICAgICAgICAgc3RyZWFtLkByZWFkZXIuQGNsb3NlZFByb21pc2VSZWpl
Y3QgPSByZWplY3Q7Ci0gICAgICAgIH0pOworICAgICAgICB0aGlzLkBjbG9zZWRQcm9taXNlID0g
QGNyZWF0ZU5ld1N0cmVhbXNQcm9taXNlKCk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0K
ICAgICBpZiAoc3RyZWFtLkBzdGF0ZSA9PT0gQHJlYWRhYmxlU3RyZWFtQ2xvc2VkKSB7CkBAIC0x
OTksNyArMTk3LDcgQEAgZnVuY3Rpb24gZXJyb3JSZWFkYWJsZVN0cmVhbShzdHJlYW0sIGVycm9y
KQogICAgICJ1c2Ugc3RyaWN0IjsKIAogICAgIC8vIFRPRE86IEFTU0VSVChzdHJlYW0uQHN0YXRl
ID09PSBAcmVhZGFibGVTdHJlYW1SZWFkYWJsZSk7Ci0gICAgc3RyZWFtLkBxdWV1ZSA9IFtdOwor
ICAgIHN0cmVhbS5AcXVldWUgPSBAbmV3UXVldWUoKTsKICAgICBzdHJlYW0uQHN0b3JlZEVycm9y
ID0gZXJyb3I7CiAgICAgc3RyZWFtLkBzdGF0ZSA9IEByZWFkYWJsZVN0cmVhbUVycm9yZWQ7CiAK
QEAgLTIwOSwxNCArMjA3LDE0IEBAIGZ1bmN0aW9uIGVycm9yUmVhZGFibGVTdHJlYW0oc3RyZWFt
LCBlcnJvcikKIAogICAgIHZhciByZXF1ZXN0cyA9IHJlYWRlci5AcmVhZFJlcXVlc3RzOwogICAg
IGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gcmVxdWVzdHMubGVuZ3RoOyBpbmRleCA8IGxl
bmd0aDsgKytpbmRleCkKLSAgICAgICAgcmVxdWVzdHNbaW5kZXhdLnJlamVjdChlcnJvcik7Cisg
ICAgICAgIEByZWplY3RTdHJlYW1zUHJvbWlzZShyZXF1ZXN0c1tpbmRleF0sIGVycm9yKTsKICAg
ICByZWFkZXIuQHJlYWRSZXF1ZXN0cyA9IFtdOwogCiAgICAgQHJlbGVhc2VSZWFkYWJsZVN0cmVh
bVJlYWRlcihyZWFkZXIpOwogICAgIHJlYWRlci5Ac3RvcmVkRXJyb3IgPSBlcnJvcjsKICAgICBy
ZWFkZXIuQHN0YXRlID0gQHJlYWRhYmxlU3RyZWFtRXJyb3JlZDsKIAotICAgIHJlYWRlci5AY2xv
c2VkUHJvbWlzZVJlamVjdChlcnJvcik7CisgICAgQHJlamVjdFN0cmVhbXNQcm9taXNlKHJlYWRl
ci5AY2xvc2VkUHJvbWlzZSwgZXJyb3IpOwogfQogCiBmdW5jdGlvbiByZXF1ZXN0UmVhZGFibGVT
dHJlYW1QdWxsKHN0cmVhbSkKQEAgLTI2Miw3ICsyNjAsNyBAQCBmdW5jdGlvbiBnZXRSZWFkYWJs
ZVN0cmVhbURlc2lyZWRTaXplKHN0cmVhbSkKIHsKICAgICJ1c2Ugc3RyaWN0IjsKIAotICAgcmV0
dXJuIHN0cmVhbS5AaGlnaFdhdGVyTWFyayAtIHN0cmVhbS5AcXVldWVTaXplOworICAgcmV0dXJu
IHN0cmVhbS5Ac3RyYXRlZ3kuaGlnaFdhdGVyTWFyayAtIHN0cmVhbS5AcXVldWUuc2l6ZTsKIH0K
IAogZnVuY3Rpb24gcmVsZWFzZVJlYWRhYmxlU3RyZWFtUmVhZGVyKHJlYWRlcikKQEAgLTI4MSw3
ICsyNzksNyBAQCBmdW5jdGlvbiBjYW5jZWxSZWFkYWJsZVN0cmVhbShzdHJlYW0sIHJlYXNvbikK
ICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogICAgIGlmIChzdHJlYW0uQHN0YXRl
ID09PSBAcmVhZGFibGVTdHJlYW1FcnJvcmVkKQogICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWpl
Y3Qoc3RyZWFtLkBzdG9yZWRFcnJvcik7Ci0gICAgc3RyZWFtLkBxdWV1ZSA9IFtdOworICAgIHN0
cmVhbS5AcXVldWUgPSBAbmV3UXVldWUoKTsKICAgICBAZmluaXNoQ2xvc2luZ1JlYWRhYmxlU3Ry
ZWFtKHN0cmVhbSk7CiAgICAgcmV0dXJuIEBwcm9taXNlSW52b2tlT3JOb29wKHN0cmVhbS5AdW5k
ZXJseWluZ1NvdXJjZSwgImNhbmNlbCIsIFtyZWFzb25dKS50aGVuKGZ1bmN0aW9uKCkgeyB9KTsK
IH0KQEAgLTMwNiw3ICszMDQsNyBAQCBmdW5jdGlvbiBjbG9zZVJlYWRhYmxlU3RyZWFtKHN0cmVh
bSkKICAgICBpZiAoc3RyZWFtLkBzdGF0ZSA9PT0gQHJlYWRhYmxlU3RyZWFtQ2xvc2VkKQogICAg
ICAgICByZXR1cm47IAogICAgIHN0cmVhbS5AY2xvc2VSZXF1ZXN0ZWQgPSB0cnVlOwotICAgIGlm
ICghc3RyZWFtLkBxdWV1ZS5sZW5ndGgpCisgICAgaWYgKCFzdHJlYW0uQHF1ZXVlLmNvbnRlbnQu
bGVuZ3RoKQogICAgICAgICBAZmluaXNoQ2xvc2luZ1JlYWRhYmxlU3RyZWFtKHN0cmVhbSk7CiB9
CiAKQEAgLTMxNiwxMSArMzE0LDExIEBAIGZ1bmN0aW9uIGNsb3NlUmVhZGFibGVTdHJlYW1SZWFk
ZXIocmVhZGVyKQogCiAgICAgdmFyIHJlcXVlc3RzID0gcmVhZGVyLkByZWFkUmVxdWVzdHM7CiAg
ICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSByZXF1ZXN0cy5sZW5ndGg7IGluZGV4IDwg
bGVuZ3RoOyArK2luZGV4KQotICAgICAgICByZXF1ZXN0c1tpbmRleF0ucmVzb2x2ZSh7dmFsdWU6
dW5kZWZpbmVkLCBkb25lOiB0cnVlfSk7CisgICAgICAgIEByZXNvbHZlU3RyZWFtc1Byb21pc2Uo
cmVxdWVzdHNbaW5kZXhdLCB7dmFsdWU6dW5kZWZpbmVkLCBkb25lOiB0cnVlfSk7CiAgICAgcmVh
ZGVyLkByZWFkUmVxdWVzdHMgPSBbXTsKICAgICBAcmVsZWFzZVJlYWRhYmxlU3RyZWFtUmVhZGVy
KHJlYWRlcik7CiAgICAgcmVhZGVyLkBzdGF0ZSA9IEByZWFkYWJsZVN0cmVhbUNsb3NlZDsKLSAg
ICByZWFkZXIuQGNsb3NlZFByb21pc2VSZXNvbHZlKCk7CisgICAgQHJlc29sdmVTdHJlYW1zUHJv
bWlzZShyZWFkZXIuQGNsb3NlZFByb21pc2UpOwogfQogCiBmdW5jdGlvbiBlbnF1ZXVlSW5SZWFk
YWJsZVN0cmVhbShzdHJlYW0sIGNodW5rKQpAQCAtMzMyLDE5ICszMzAsMTggQEAgZnVuY3Rpb24g
ZW5xdWV1ZUluUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBjaHVuaykKICAgICBpZiAoc3RyZWFtLkBz
dGF0ZSA9PT0gQHJlYWRhYmxlU3RyZWFtQ2xvc2VkKQogICAgICAgICByZXR1cm4gdW5kZWZpbmVk
OwogICAgIGlmIChAaXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pICYmIHN0cmVhbS5AcmVh
ZGVyLkByZWFkUmVxdWVzdHMubGVuZ3RoKSB7Ci0gICAgICAgIHN0cmVhbS5AcmVhZGVyLkByZWFk
UmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTogY2h1bmssIGRvbmU6IGZhbHNlfSk7Cisg
ICAgICAgIEByZXNvbHZlU3RyZWFtc1Byb21pc2Uoc3RyZWFtLkByZWFkZXIuQHJlYWRSZXF1ZXN0
cy5zaGlmdCgpLCB7dmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZX0pOwogICAgICAgICBAcmVxdWVz
dFJlYWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IHRyeSB7CiAgICAgICAgIHZhciBzaXplID0gMTsKLSAgICAgICAgaWYgKHN0cmVhbS5Ac3RyYXRl
Z3lTaXplKSB7Ci0gICAgICAgICAgICBzaXplID0gTnVtYmVyKHN0cmVhbS5Ac3RyYXRlZ3lTaXpl
KGNodW5rKSk7CisgICAgICAgIGlmIChzdHJlYW0uQHN0cmF0ZWd5LnNpemUpIHsKKyAgICAgICAg
ICAgIHNpemUgPSBOdW1iZXIoc3RyZWFtLkBzdHJhdGVneS5zaXplKGNodW5rKSk7CiAgICAgICAg
ICAgICBpZiAoTnVtYmVyLmlzTmFOKHNpemUpIHx8IHNpemUgPT09ICtJbmZpbml0eSB8fCBzaXpl
IDwgMCkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2h1bmsgc2l6ZSBp
cyBub3QgdmFsaWQiKTsKICAgICAgICAgfQotICAgICAgICBzdHJlYW0uQHF1ZXVlLnB1c2goeyB2
YWx1ZTogY2h1bmssIHNpemU6IHNpemUgfSk7Ci0gICAgICAgIHN0cmVhbS5AcXVldWVTaXplICs9
IHNpemU7CisgICAgICAgIEBlbnF1ZXVlVmFsdWVXaXRoU2l6ZShzdHJlYW0uQHF1ZXVlLCBjaHVu
aywgc2l6ZSk7CiAgICAgfQogICAgIGNhdGNoKGVycm9yKSB7CiAgICAgICAgIEBlcnJvclJlYWRh
YmxlU3RyZWFtKHN0cmVhbSwgZXJyb3IpOwpAQCAtMzY0LDQ3ICszNjEsMTYgQEAgZnVuY3Rpb24g
cmVhZEZyb21SZWFkYWJsZVN0cmVhbVJlYWRlcihyZWFkZXIpCiAgICAgLy8gVE9ETzogQVNTRVJU
KCEhcmVhZGVyLkBvd25lclJlYWRhYmxlU3RyZWFtKTsKICAgICAvLyBUT0RPOiBBU1NFUlQocmVh
ZGVyLkBvd25lclJlYWRhYmxlU3RyZWFtLkBzdGF0ZSA9PT0gQHJlYWRhYmxlU3RyZWFtUmVhZGFi
bGUpOwogICAgIHZhciBzdHJlYW0gPSByZWFkZXIuQG93bmVyUmVhZGFibGVTdHJlYW07Ci0gICAg
aWYgKHN0cmVhbS5AcXVldWUubGVuZ3RoKSB7Ci0gICAgICAgIHZhciBjaHVuayA9IHN0cmVhbS5A
cXVldWUuc2hpZnQoKTsKLSAgICAgICAgc3RyZWFtLkBxdWV1ZVNpemUgLT0gY2h1bmsuc2l6ZTsK
KyAgICBpZiAoc3RyZWFtLkBxdWV1ZS5jb250ZW50Lmxlbmd0aCkgeworICAgICAgICB2YXIgY2h1
bmsgPSBAZGVxdWV1ZVZhbHVlKHN0cmVhbS5AcXVldWUpOwogICAgICAgICBpZiAoIXN0cmVhbS5A
Y2xvc2VSZXF1ZXN0ZWQpCiAgICAgICAgICAgICBAcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChz
dHJlYW0pOwotICAgICAgICBlbHNlIGlmICghc3RyZWFtLkBxdWV1ZS5sZW5ndGgpCisgICAgICAg
IGVsc2UgaWYgKCFzdHJlYW0uQHF1ZXVlLmNvbnRlbnQubGVuZ3RoKQogICAgICAgICAgICAgQGZp
bmlzaENsb3NpbmdSZWFkYWJsZVN0cmVhbShzdHJlYW0pOwotICAgICAgICByZXR1cm4gUHJvbWlz
ZS5yZXNvbHZlKHt2YWx1ZTogY2h1bmsudmFsdWUsIGRvbmU6IGZhbHNlfSk7CisgICAgICAgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUoe3ZhbHVlOiBjaHVuaywgZG9uZTogZmFsc2V9KTsKICAgICB9
Ci0gICAgdmFyIHJlYWRSZXF1ZXN0ID0ge307Ci0gICAgdmFyIHJlYWRQcm9taXNlID0gbmV3IFBy
b21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgIHJlYWRSZXF1ZXN0LnJl
c29sdmUgPSByZXNvbHZlOwotICAgICAgICByZWFkUmVxdWVzdC5yZWplY3QgPSByZWplY3Q7Ci0g
ICAgfSk7Ci0gICAgcmVhZGVyLkByZWFkUmVxdWVzdHMucHVzaChyZWFkUmVxdWVzdCk7CisgICAg
dmFyIHJlYWRQcm9taXNlID0gQGNyZWF0ZU5ld1N0cmVhbXNQcm9taXNlKCk7CisgICAgcmVhZGVy
LkByZWFkUmVxdWVzdHMucHVzaChyZWFkUHJvbWlzZSk7CiAgICAgQHJlcXVlc3RSZWFkYWJsZVN0
cmVhbVB1bGwoc3RyZWFtKTsKICAgICByZXR1cm4gcmVhZFByb21pc2U7CiB9Ci0KLWZ1bmN0aW9u
IGludm9rZU9yTm9vcChvYmplY3QsIGtleSwgYXJncykKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0K
LSAgICB2YXIgbWV0aG9kID0gb2JqZWN0W2tleV07Ci0gICAgaWYgKHR5cGVvZiBtZXRob2QgPT09
ICJ1bmRlZmluZWQiKQotICAgICAgICByZXR1cm47Ci0gICAgcmV0dXJuIG1ldGhvZC5AYXBwbHko
b2JqZWN0LCBhcmdzKTsKLX0KLQotZnVuY3Rpb24gcHJvbWlzZUludm9rZU9yTm9vcChvYmplY3Qs
IGtleSwgYXJncykKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB0cnkgewotICAgICAgICB2
YXIgbWV0aG9kID0gb2JqZWN0W2tleV07Ci0gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kID09PSAi
dW5kZWZpbmVkIikKLSAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKLSAgICAg
ICAgdmFyIHJlc3VsdCA9IG1ldGhvZC5AYXBwbHkob2JqZWN0LCBhcmdzKTsKLSAgICAgICAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpOwotICAgIH0KLSAgICBjYXRjaChlcnJvcikgewot
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpOwotICAgIH0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9TdHJlYW1JbnRlcm5hbHMuanMgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjdiM2RmZDU1NzY0MjVkNDRiMjE1OTU2ZDhmNTAwODJjMGVjYTNkOGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpz
CkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENhbm9uIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIEBvcHRpb25hbD1TVFJFQU1TX0FQSQorLy8gQGludGVybmFs
cworCitmdW5jdGlvbiBpbnZva2VPck5vb3Aob2JqZWN0LCBrZXksIGFyZ3MpCit7CisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgdmFyIG1ldGhvZCA9IG9iamVjdFtrZXldOworICAgIGlmICh0eXBl
b2YgbWV0aG9kID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBt
ZXRob2QuQGFwcGx5KG9iamVjdCwgYXJncyk7Cit9CisKK2Z1bmN0aW9uIHByb21pc2VJbnZva2VP
ck5vb3Aob2JqZWN0LCBrZXksIGFyZ3MpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgdHJ5
IHsKKyAgICAgICAgdmFyIG1ldGhvZCA9IG9iamVjdFtrZXldOworICAgICAgICBpZiAodHlwZW9m
IG1ldGhvZCA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKCk7CisgICAgICAgIHZhciByZXN1bHQgPSBtZXRob2QuQGFwcGx5KG9iamVjdCwgYXJncyk7
CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTsKKyAgICB9CisgICAgY2F0
Y2goZXJyb3IpIHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTsKKyAgICB9
CisKK30KKworZnVuY3Rpb24gdmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3koc2l6
ZSwgaGlnaFdhdGVyTWFyaykKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoc2l6ZSAh
PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzaXplICE9PSAiZnVuY3Rpb24iKQorICAgICAgICB0aHJv
dyBuZXcgQFR5cGVFcnJvcigic2l6ZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CisK
KyAgICB2YXIgbm9ybWFsaXplZFN0cmF0ZWd5ID0geyB9OworCisgICAgbm9ybWFsaXplZFN0cmF0
ZWd5LnNpemUgPSBzaXplOworICAgIG5vcm1hbGl6ZWRTdHJhdGVneS5oaWdoV2F0ZXJNYXJrID0g
TnVtYmVyKGhpZ2hXYXRlck1hcmspOworCisgICAgaWYgKE51bWJlci5pc05hTihub3JtYWxpemVk
U3RyYXRlZ3kuaGlnaFdhdGVyTWFyaykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJo
aWdoV2F0ZXJNYXJrIHBhcmFtZXRlciBpcyBub3QgYSBudW1iZXIiKTsKKyAgICBpZiAobm9ybWFs
aXplZFN0cmF0ZWd5LmhpZ2hXYXRlck1hcmsgPCAwKQorICAgICAgICB0aHJvdyBuZXcgQFJhbmdl
RXJyb3IoImhpZ2hXYXRlck1hcmsgaXMgbmVnYXRpdmUiKTsKKworICAgIHJldHVybiBub3JtYWxp
emVkU3RyYXRlZ3k7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU5ld1N0cmVhbXNQcm9taXNlKCkKK3sK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgcmVzb2x2ZUZ1bmN0aW9uOworICAgIHZhciBy
ZWplY3RGdW5jdGlvbjsKKyAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJl
c29sdmUsIHJlamVjdCkgeworICAgICAgICByZXNvbHZlRnVuY3Rpb24gPSByZXNvbHZlOworICAg
ICAgICByZWplY3RGdW5jdGlvbiA9IHJlamVjdDsKKyAgICB9KTsKKyAgICBwcm9taXNlLkByZXNv
bHZlID0gcmVzb2x2ZUZ1bmN0aW9uOworICAgIHByb21pc2UuQHJlamVjdCA9IHJlamVjdEZ1bmN0
aW9uOworICAgIHJldHVybiBwcm9taXNlOworfQorCitmdW5jdGlvbiByZXNvbHZlU3RyZWFtc1By
b21pc2UocHJvbWlzZSwgdmFsdWUpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKHBy
b21pc2UgJiYgcHJvbWlzZS5AcmVzb2x2ZSkgeworICAgICAgICBwcm9taXNlLkByZXNvbHZlKHZh
bHVlKTsKKyAgICAgICAgcHJvbWlzZS5AcmVzb2x2ZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgcHJv
bWlzZS5AcmVqZWN0ID0gdW5kZWZpbmVkOworICAgIH0KK30KKworZnVuY3Rpb24gcmVqZWN0U3Ry
ZWFtc1Byb21pc2UocHJvbWlzZSwgdmFsdWUpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAg
aWYgKHByb21pc2UgJiYgcHJvbWlzZS5AcmVqZWN0KSB7CisgICAgICAgIHByb21pc2UuQHJlamVj
dCh2YWx1ZSk7CisgICAgICAgIHByb21pc2UuQHJlc29sdmUgPSB1bmRlZmluZWQ7CisgICAgICAg
IHByb21pc2UuQHJlamVjdCA9IHVuZGVmaW5lZDsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIG5ld1F1
ZXVlKCkKK3sKKyAgICByZXR1cm4geyBjb250ZW50OiBbXSwgc2l6ZTogMCB9OworfQorCitmdW5j
dGlvbiBkZXF1ZXVlVmFsdWUocXVldWUpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFy
IHJlY29yZCA9IHF1ZXVlLmNvbnRlbnQuc2hpZnQoKTsKKyAgICBxdWV1ZS5zaXplIC09IHJlY29y
ZC5zaXplOworICAgIHJldHVybiByZWNvcmQudmFsdWU7Cit9CisKK2Z1bmN0aW9uIGVucXVldWVW
YWx1ZVdpdGhTaXplKHF1ZXVlLCB2YWx1ZSwgc2l6ZSkKK3sKKyAgICBzaXplID0gTnVtYmVyKHNp
emUpOworICAgIGlmIChOdW1iZXIuaXNOYU4oc2l6ZSkgfHwgIU51bWJlci5pc0Zpbml0ZShzaXpl
KSB8fCBzaXplIDwgMCkKKyAgICAgICAgdGhyb3cgbmV3IEBSYW5nZUVycm9yKCJzaXplIGhhcyBh
biBpbmNvcnJlY3QgdmFsdWUiKTsKKyAgICBxdWV1ZS5jb250ZW50LnB1c2goeyB2YWx1ZTogdmFs
dWUsIHNpemU6IHNpemUgfSk7CisgICAgcXVldWUuc2l6ZSArPSBzaXplOworCisgICAgcmV0dXJu
IHVuZGVmaW5lZDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBiZjBmZTY1ODM1YzdlOTY2Yjc1ODBhYmIzOGRmMjM2ZWI2ZGU4
ZTg5Li4xNWUzZDhjNzQ2MTllMDllMTA5NDg5YmUyMGY5YzQ0ZjYwMmY3Y2IzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTEx
LDYgKzE1MTEsOCBAQAogCQk0MTYyQTQ1NzEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTYyQTQ1NTEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZS5jcHAgKi87IH07CiAJCTQxNjJBNDU4MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTYyQTQ1NjEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZS5oICovOyB9OwogCQk0MTZFMjlBNjEwMkZBOTYyMDA3RkMxNEUgLyog
V29ya2VyUmVwb3J0aW5nUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxNkUyOUE1MTAyRkE5NjIwMDdGQzE0RSAvKiBXb3JrZXJSZXBvcnRpbmdQ
cm94eS5oICovOyB9OworCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwMzMgLyogU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxNkU2
RkVBMUJCRDE2ODQwMDBBNjAzNCAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDNEODA3MUJC
MzExMEQwMEI3NjRDQSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZFNkZFODFCQkQx
MkRGMDAwQTYwNDMgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAw
Qjc2NEQ5IC8qIFJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZFNkZFOTFCQkQxMkU1MDAw
QTYwNDMgLyogUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8qIFJlYWRh
YmxlU3RyZWFtQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk0MTZFNkZFQTFCQkQxNjg0MDAwQTYwNDQgLyogUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGluc1dyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDlCMDNEODA3MUJCMzExMEQwMEI3NjREQSAvKiBSZWFkYWJsZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xMTM1Miw2ICsxMTM1NCw4IEBACiAJCTk5MDhCMEVDMUJD
QUNGMUYwMEVEMEY2NSAvKiBnZW5lcmF0ZS1qcy1idWlsdGlucyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2Ny
aXB0LnB5dGhvbjsgcGF0aCA9ICJnZW5lcmF0ZS1qcy1idWlsdGlucyI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk5MDhCMEVEMUJDQUNGOTEwMEVEMEY2NSAvKiBCeXRlTGVuZ3RoUXVl
dWluZ1N0cmF0ZWd5LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
Qnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTkwOEIwRUUxQkNBQ0Y5MTAwRUQwRjY1IC8qIENvdW50UXVldWluZ1N0cmF0ZWd5LmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gQ291bnRRdWV1aW5nU3RyYXRl
Z3kuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5MDhCMEYxMUJDQUNGOTEwMEVE
MEY1NSAvKiBTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3Jp
cHQ7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk5MDhCMEZEMUJDQUQwN0QwMEVEMEY1NSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MDhCMEVGMUJDQUNG
OTEwMEVEMEY2NSAvKiBSZWFkYWJsZVN0cmVhbS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5OTA4QjBGMDFCQ0FDRjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1Db250cm9s
bGVyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVhZGFibGVT
dHJlYW1Db250cm9sbGVyLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTA4QjBG
MTFCQ0FDRjkxMDBFRDBGNjUgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUludGVybmFscy5q
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExNDA4LDYgKzExNDEyLDggQEAKIAkJ
OUE1MjhFODIxN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdGluZ09iamVjdHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUFCMUYzN0UxOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QUIxRjM3
RjE4RTI0ODlBMDA1MzQ3NDMgLyogQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2
NEM5IC8qIFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTlCMDNEODA3MUJCMzExMEQwMEI3NjRDQSAvKiBTdHJlYW1JbnRlcm5hbHNCdWls
dGluc1dyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnNXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
MDNEODA2MUJCMzExMEQwMEI3NjREOCAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ5IC8qIFJl
YWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5QjAzRDgwNzFCQjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJl
YW1CdWlsdGluc1dyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVh
ZGFibGVTdHJlYW1CdWlsdGluc1dyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2Mzc2LDYgKzE2MzgyLDcgQEAKIAkJCQk0MTI5REY4MjFCQjVCN0E2MDAzMjJBMTYgLyog
UmVhZGFibGVTdHJlYW1SZWFkZXIuaCAqLywKIAkJCQk0MTlGQUZBRDFBQkFCQ0Q1MDA1QjgyOEIg
LyogUmVhZGFibGVTdHJlYW1SZWFkZXIuaWRsICovLAogCQkJCTk5MDhCMEYyMUJDQUNGOTEwMEVE
MEY2NSAvKiBSZWFkYWJsZVN0cmVhbVJlYWRlci5qcyAqLywKKwkJCQk5OTA4QjBGMTFCQ0FDRjkx
MDBFRDBGNTUgLyogU3RyZWFtSW50ZXJuYWxzLmpzICovLAogCQkJCTQxQTAyM0VEMUEzOURCNzkw
MEY3MjJERiAvKiBXcml0YWJsZVN0cmVhbS5pZGwgKi8sCiAJCQkJOTkwOEIwRUYxQkNBQ0Y5MTAw
RUQwRjc1IC8qIFdyaXRhYmxlU3RyZWFtLmpzICovLAogCkBAIC0xNzIxNSw2ICsxNzIyMiw5IEBA
CiAJCQkJMjZBQTBGOUQxOEQyQTE4QjAwNDE5MzgxIC8qIFNlbGVjdG9yUHNldWRvRWxlbWVudFR5
cGVNYXAuY3BwICovLAogCQkJCTI2QUEwRjlGMThEMkExQzEwMDQxOTM4MSAvKiBTZWxlY3RvclBz
ZXVkb0VsZW1lbnRUeXBlTWFwLmdwZXJmICovLAogCQkJCTUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0
OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovLAorCQkJCTk5MDhCMEZEMUJDQUQwN0QwMEVEMEY1NSAv
KiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5jcHAgKi8sCisJCQkJOUIwM0Q4MDYxQkIzMTEwRDAw
Qjc2NEM5IC8qIFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggKi8sCisJCQkJOUIwM0Q4MDcxQkIz
MTEwRDAwQjc2NENBIC8qIFN0cmVhbUludGVybmFsc0J1aWx0aW5zV3JhcHBlci5oICovLAogCQkJ
CTgzODZBOTZFMTlGNjFFNEYwMEUxRUM0QSAvKiBTdHlsZUJ1aWxkZXIuY3BwICovLAogCQkJCTgz
QzA1QTU4MUE2ODYyMTIwMDdFNURFQSAvKiBTdHlsZVByb3BlcnR5U2hvcnRoYW5kRnVuY3Rpb25z
LmNwcCAqLywKIAkJCQk4M0MwNUE1OTFBNjg2MjEyMDA3RTVERUEgLyogU3R5bGVQcm9wZXJ0eVNo
b3J0aGFuZEZ1bmN0aW9ucy5oICovLApAQCAtMjcyODAsNiArMjcyOTAsOCBAQAogCQkJCTUxRTBC
QjM4MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
NTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzNzYzNkMxQTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92
aWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDMzIC8qIFN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTZFNkZFQTFCQkQx
Njg0MDAwQTYwMzQgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4MUFDNkMzNjEzMUM1N0QzMDAwOUE3RTAgLyogU3RyaW5nQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCUIyMzU0MEYzMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVu
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCNkM0MTUzMTM0NDk0OTAwMDA4NUI2MiAvKiBT
dHJpbmdXaXRoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCmluZGV4IDJhZjk3OTllZDFlYmVkNGZiOWNi
OGQ5NGY2NzY4YWM5NTYyY2ZjMDIuLmZhMmEzMDk4OTkwNDFjNTI1MjhmYzc5NDk3YzgxZWU4M2Rj
YjZhOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKICNpbmNsdWRl
ICJKU1JlYWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5oIgogI2luY2x1ZGUgIlJlYWRh
YmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCIKKyNpbmNsdWRlICJTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC05Niw2ICs5Nywx
MiBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTVdp
bmRvd1NoZWxsKiBzaGVsbCkKICAgICAgICAgICAgIG1fcHJpdmF0ZUZ1bmN0aW9ucy5yZWFkYWJs
ZVN0cmVhbUludGVybmFscygpLm1fIyNuYW1lIyNGdW5jdGlvbi5nZXQoKSAsIERvbnREZWxldGUg
fCBSZWFkT25seSksCiAgICAgICAgIFdFQkNPUkVSRUFEQUJMRVNUUkVBTUlOVEVSTkFMU19GT1JF
QUNIX0JVSUxUSU5fRlVOQ1RJT05fTkFNRShERUNMQVJFX0dMT0JBTF9TVEFUSUMpCiAjdW5kZWYg
REVDTEFSRV9HTE9CQUxfU1RBVElDCisjZGVmaW5lIERFQ0xBUkVfR0xPQkFMX1NUQVRJQyhuYW1l
KVwKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKFwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5GdW5jdGlvbnMoKS5zdHJl
YW1JbnRlcm5hbHNCdWlsdGlucygpLm5hbWUjI1ByaXZhdGVOYW1lKCksIFwKKyAgICAgICAgICAg
IG1fcHJpdmF0ZUZ1bmN0aW9ucy5zdHJlYW1JbnRlcm5hbHMoKS5tXyMjbmFtZSMjRnVuY3Rpb24u
Z2V0KCkgLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBXRUJDT1JFU1RSRUFNSU5U
RVJOQUxTX0ZPUkVBQ0hfQlVJTFRJTl9GVU5DVElPTl9OQU1FKERFQ0xBUkVfR0xPQkFMX1NUQVRJ
QykKKyN1bmRlZiBERUNMQVJFX0dMT0JBTF9TVEFUSUMKICNlbmRpZgogICAgIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaAppbmRleCBi
ZTcyNmMxY2MxYjA3ZjhkNDdlZmZhYmIwMTYzMmI0ZWMyMGFjMmZkLi4wZmVmMjIwZDA5OWU2YmI1
MGVmYmQzYzkwZDBhMzhkNDU4YjY4Mzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oCkBAIC0zNCwxNyArMzQsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogI2RlZmluZSBXRUJDT1JFX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VB
Q0hfUFJPUEVSVFlfTkFNRShtYWNybylcCiAgICAgbWFjcm8oY2xvc2VSZXF1ZXN0ZWQpIFwKICAg
ICBtYWNybyhjbG9zZWRQcm9taXNlKSBcCi0gICAgbWFjcm8oY2xvc2VkUHJvbWlzZVJlc29sdmUp
IFwKLSAgICBtYWNybyhjbG9zZWRQcm9taXNlUmVqZWN0KSBcCiAgICAgbWFjcm8oY29udHJvbGxl
ZFJlYWRhYmxlU3RyZWFtKSBcCiAgICAgbWFjcm8oY29udHJvbGxlcikgXAogICAgIG1hY3JvKGdl
dFVzZXJNZWRpYUZyb21KUykgXAotICAgIG1hY3JvKGhpZ2hXYXRlck1hcmspIFwKICAgICBtYWNy
byhvd25lclJlYWRhYmxlU3RyZWFtKSBcCiAgICAgbWFjcm8ocHVsbGluZykgXAogICAgIG1hY3Jv
KHB1bGxBZ2FpbikgXAogICAgIG1hY3JvKHF1ZXVlKSBcCi0gICAgbWFjcm8ocXVldWVTaXplKSBc
CiAgICAgbWFjcm8ocmVhZGFibGVTdHJlYW1DbG9zZWQpIFwKICAgICBtYWNybyhyZWFkYWJsZVN0
cmVhbUVycm9yZWQpIFwKICAgICBtYWNybyhyZWFkYWJsZVN0cmVhbVJlYWRhYmxlKSBcCkBAIC01
Myw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhzdGF0ZSkgXAogICAg
IG1hY3JvKHN0YXJ0ZWQpIFwKICAgICBtYWNybyhzdG9yZWRFcnJvcikgXAotICAgIG1hY3JvKHN0
cmF0ZWd5U2l6ZSkgXAorICAgIG1hY3JvKHN0cmF0ZWd5KSBcCiAgICAgbWFjcm8odW5kZXJseWlu
Z1NvdXJjZSkgXAogICAgIG1hY3JvKFJlYWRhYmxlU3RyZWFtUmVhZGVyKSBcCiAgICAgbWFjcm8o
UmVhZGFibGVTdHJlYW1Db250cm9sbGVyKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgKaW5kZXggOTYzNDRmOWM0YWQy
YzYyZTliOGQ5MzkyZDA5YWY1ZDQ5ZmIxYjEwNi4uZTI5ZjFlZjVkMDNhNTBiZjhiOTA1ODhkN2Fj
NzY5N2E3NGZkNmFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUpTQnVpbHRpbkludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaApAQCAtMjksNiArMjksNyBAQAogCiAjaWYgRU5B
QkxFKFNUUkVBTVNfQVBJKQogI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRp
bnNXcmFwcGVyLmgiCisjaW5jbHVkZSAiU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyLmgi
CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMTUgKzQwLDE4IEBAIGV4cGxp
Y2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCiAgICAgICAgIDogdm0o
dikKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAgICAgICAgICwgbV9yZWFkYWJsZVN0cmVhbUlu
dGVybmFsc0Z1bmN0aW9ucyh2bSkKKyAgICAgICAgLCBtX3N0cmVhbUludGVybmFsc0Z1bmN0aW9u
cyh2bSkKICNlbmRpZgogICAgIHsgfQogCiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQogICAgIFJl
YWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyByZWFkYWJsZVN0cmVhbUludGVy
bmFscygpIHsgcmV0dXJuIG1fcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnM7IH0KKyAg
ICBTdHJlYW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25zIHN0cmVhbUludGVybmFscygpIHsgcmV0
dXJuIG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zOyB9CiAjZW5kaWYKICAgICB2b2lkIHZpc2l0
KEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIHsKICNpZiBFTkFCTEUoU1RSRUFNU19BUEkpCiAg
ICAgICAgIG1fcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnMudmlzaXQodmlzaXRvcik7
CisgICAgICAgIG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25zLnZpc2l0KHZpc2l0b3IpOwogI2Vs
c2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogI2VuZGlmCkBAIC01NSw2ICs1OSw3
IEBAIGV4cGxpY2l0IEpTQnVpbHRpbkludGVybmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCiAgICAg
dm9pZCBpbml0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkgewogI2lmIEVOQUJM
RShTVFJFQU1TX0FQSSkKICAgICAgICAgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0Z1bmN0aW9u
cy5pbml0KGdsb2JhbE9iamVjdCk7CisgICAgICAgIG1fc3RyZWFtSW50ZXJuYWxzRnVuY3Rpb25z
LmluaXQoZ2xvYmFsT2JqZWN0KTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShnbG9iYWxP
YmplY3QpOwogI2VuZGlmCkBAIC02Myw3ICs2OCw4IEBAIGV4cGxpY2l0IEpTQnVpbHRpbkludGVy
bmFsRnVuY3Rpb25zKEpTQzo6Vk0mIHYpCiBwcml2YXRlOgogICAgIEpTQzo6Vk0mIHZtOwogI2lm
IEVOQUJMRShTVFJFQU1TX0FQSSkKLSAgICAgUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
RnVuY3Rpb25zIG1fcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNGdW5jdGlvbnM7CisgICAgUmVhZGFi
bGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluRnVuY3Rpb25zIG1fcmVhZGFibGVTdHJlYW1JbnRlcm5h
bHNGdW5jdGlvbnM7CisgICAgU3RyZWFtSW50ZXJuYWxzQnVpbHRpbkZ1bmN0aW9ucyBtX3N0cmVh
bUludGVybmFsc0Z1bmN0aW9uczsKICNlbmRpZgogCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuY3BwCmluZGV4IDQxZmU2ZTQyZDVkMDdlMTZl
NzI3ZmQzOTA2MjBlYTZlMGFlZmEwOGQuLjM0NjBkYjM0ZGFlMDZlOWM4N2E5NGFiOWI3MzhhMTI0
YTMwNGZjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVK
U0J1aWx0aW5zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNC
dWlsdGlucy5jcHAKQEAgLTM3LDUgKzM3LDYgQEAKICNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUNv
bnRyb2xsZXJCdWlsdGlucy5jcHAiCiAjaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucy5jcHAiCiAjaW5jbHVkZSAiUmVhZGFibGVTdHJlYW1SZWFkZXJCdWlsdGlucy5jcHAi
CisjaW5jbHVkZSAiU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwIgogI2luY2x1ZGUgIldyaXRh
YmxlU3RyZWFtQnVpbHRpbnMuY3BwIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlucy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZUpTQnVpbHRpbnMuaAppbmRleCA0ZDE0MWZmMDJhM2U2MDJiZGJhYTU0Yjlk
NzIyYjdkMDE4MmU0Y2I0Li5iNDA1NWM5M2VkZDJmZTZhOTNkNjRhMjZkYWZjYTdjNmE4MzA0NTk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNCdWlsdGlu
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0J1aWx0aW5zLmgK
QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJCdWls
dGluc1dyYXBwZXIuaCIKICNpbmNsdWRlICJSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5z
V3JhcHBlci5oIgogI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtUmVhZGVyQnVpbHRpbnNXcmFwcGVy
LmgiCisjaW5jbHVkZSAiU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnNXcmFwcGVyLmgiCiAjaW5jbHVk
ZSAiV3JpdGFibGVTdHJlYW1CdWlsdGluc1dyYXBwZXIuaCIKICNlbmRpZgogCkBAIC01Niw2ICs1
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlckJ1aWx0
aW5zKCZ2bSkKICAgICAgICAgLCBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoJnZt
KQogICAgICAgICAsIG1fcmVhZGFibGVTdHJlYW1SZWFkZXJCdWlsdGlucygmdm0pCisgICAgICAg
ICwgbV9zdHJlYW1JbnRlcm5hbHNCdWlsdGlucygmdm0pCiAgICAgICAgICwgbV93cml0YWJsZVN0
cmVhbUJ1aWx0aW5zKCZ2bSkKICNlbmRpZgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC02
NCw2ICs2Niw3IEBAIHB1YmxpYzoKICAgICB7CiAjaWYgRU5BQkxFKFNUUkVBTVNfQVBJKQogICAg
ICAgICBtX3JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuZXhwb3J0TmFtZXMoKTsKKyAg
ICAgICAgbV9zdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5leHBvcnROYW1lcygpOwogI2VuZGlmCiAg
ICAgfQogI2lmIEVOQUJMRShTVFJFQU1TX0FQSSkKQEAgLTczLDYgKzc2LDcgQEAgcHVibGljOgog
ICAgIFJlYWRhYmxlU3RyZWFtQ29udHJvbGxlckJ1aWx0aW5zV3JhcHBlciYgcmVhZGFibGVTdHJl
YW1Db250cm9sbGVyQnVpbHRpbnMoKSB7IHJldHVybiBtX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxl
ckJ1aWx0aW5zOyB9CiAgICAgUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIm
IHJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoKSB7IHJldHVybiBtX3JlYWRhYmxlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnM7IH0KICAgICBSZWFkYWJsZVN0cmVhbVJlYWRlckJ1aWx0aW5z
V3JhcHBlciYgcmVhZGFibGVTdHJlYW1SZWFkZXJCdWlsdGlucygpIHsgcmV0dXJuIG1fcmVhZGFi
bGVTdHJlYW1SZWFkZXJCdWlsdGluczsgfQorICAgIFN0cmVhbUludGVybmFsc0J1aWx0aW5zV3Jh
cHBlciYgc3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoKSB7IHJldHVybiBtX3N0cmVhbUludGVybmFs
c0J1aWx0aW5zOyB9CiAgICAgV3JpdGFibGVTdHJlYW1CdWlsdGluc1dyYXBwZXImIHdyaXRhYmxl
U3RyZWFtQnVpbHRpbnMoKSB7IHJldHVybiBtX3dyaXRhYmxlU3RyZWFtQnVpbHRpbnM7IH0KICNl
bmRpZgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC04OCw2ICs5Miw3IEBAIHByaXZhdGU6
CiAgICAgUmVhZGFibGVTdHJlYW1Db250cm9sbGVyQnVpbHRpbnNXcmFwcGVyIG1fcmVhZGFibGVT
dHJlYW1Db250cm9sbGVyQnVpbHRpbnM7CiAgICAgUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWls
dGluc1dyYXBwZXIgbV9yZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zOwogICAgIFJlYWRh
YmxlU3RyZWFtUmVhZGVyQnVpbHRpbnNXcmFwcGVyIG1fcmVhZGFibGVTdHJlYW1SZWFkZXJCdWls
dGluczsKKyAgICBTdHJlYW1JbnRlcm5hbHNCdWlsdGluc1dyYXBwZXIgbV9zdHJlYW1JbnRlcm5h
bHNCdWlsdGluczsKICAgICBXcml0YWJsZVN0cmVhbUJ1aWx0aW5zV3JhcHBlciBtX3dyaXRhYmxl
U3RyZWFtQnVpbHRpbnM7CiAjZW5kaWYKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>