<?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>148118</bug_id>
          
          <creation_ts>2015-08-17 20:17:04 -0700</creation_ts>
          <short_desc>Introduce non-user-observable Promise functions to use Promises internally</short_desc>
          <delta_ts>2015-08-18 15:32:18 -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>JavaScriptCore</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>
          
          <blocked>148136</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1118383</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-17 20:17:04 -0700</bug_when>
    <thetext>Spawned from https://bugs.webkit.org/show_bug.cgi?id=147876</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118391</commentid>
    <comment_count>1</comment_count>
      <attachid>259230</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-17 20:35:00 -0700</bug_when>
    <thetext>Created attachment 259230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118564</commentid>
    <comment_count>2</comment_count>
      <attachid>259230</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-18 11:18:58 -0700</bug_when>
    <thetext>Comment on attachment 259230
Patch

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

r=me with suggestions.

&gt; Source/JavaScriptCore/builtins/PromiseConstructor.js:158
&gt; +    var remainingElementsCount = 1;

I think this would be easier to read if we started this at 0 and then check if the array length is 0 explicitly.
Below, we can do:
If (array length is zero): &quot;promiseCapability.@resolve.@call(undefined, values);&quot;
else: for (....) { }

(or switch the if/else)

&gt; Source/JavaScriptCore/runtime/JSPromiseDeferred.cpp:75
&gt; +static void callFunction(ExecState* exec, JSValue function, JSValue value)

This seems like it&apos;d get inlined but maybe you should explicitly mark it as inline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118568</commentid>
    <comment_count>3</comment_count>
      <attachid>259230</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-18 11:32:58 -0700</bug_when>
    <thetext>Comment on attachment 259230
Patch

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

Thank you for your review, Saam!

&gt;&gt; Source/JavaScriptCore/builtins/PromiseConstructor.js:158
&gt;&gt; +    var remainingElementsCount = 1;
&gt; 
&gt; I think this would be easier to read if we started this at 0 and then check if the array length is 0 explicitly.
&gt; Below, we can do:
&gt; If (array length is zero): &quot;promiseCapability.@resolve.@call(undefined, values);&quot;
&gt; else: for (....) { }
&gt; 
&gt; (or switch the if/else)

That&apos;s great idea!

Originally, this implementation corresponds to the spec&apos;s Promise.all implementation.
In Promise.all implementation, since we need to iterate the taken iterable parameter (this may not be an array, so we cannot perform iterable.length) by for-of (this is user-observable), we and the spec need to perform the current code.
But this privateAll does not have such a limitation; All access should not be user-observable. So we can just do so; checking the array.length === 0 before iterating the given value!

&gt;&gt; Source/JavaScriptCore/runtime/JSPromiseDeferred.cpp:75
&gt;&gt; +static void callFunction(ExecState* exec, JSValue function, JSValue value)
&gt; 
&gt; This seems like it&apos;d get inlined but maybe you should explicitly mark it as inline.

Sounds nice. I&apos;ll add `inline` to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118607</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-18 12:38:36 -0700</bug_when>
    <thetext>After seeing the code, I&apos;ve still found the problem; trapping the operation from the user side.
To avoid the problem, I&apos;ll

+ land this patch without @then. The problem of then will be solved in the different patch
+ create the new constructor/prototype instance for the internal promises https://bugs.webkit.org/show_bug.cgi?id=148136

So, at first, I&apos;ll land this patch without @then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118620</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-18 13:44:02 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; After seeing the code, I&apos;ve still found the problem; trapping the operation
&gt; from the user side.
&gt; To avoid the problem, I&apos;ll
&gt; 
&gt; + land this patch without @then. The problem of then will be solved in the
&gt; different patch
&gt; + create the new constructor/prototype instance for the internal promises
&gt; https://bugs.webkit.org/show_bug.cgi?id=148136
&gt; 
&gt; So, at first, I&apos;ll land this patch without @then.

I discussed with Saam offline and we decide to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118659</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-18 15:32:18 -0700</bug_when>
    <thetext>Committed r188603: &lt;http://trac.webkit.org/changeset/188603&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259230</attachid>
            <date>2015-08-17 20:35:00 -0700</date>
            <delta_ts>2015-08-18 11:18:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148118-20150817203458.patch</filename>
            <type>text/plain</type>
            <size>25690</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZTkzYzYwZDM0NDg1NzZjNjY4ZGVjZDZmOThmNzM4MjNhZjZhYmIxLi5iNzhiMmYwNDVjZjhhYjY0
MzA3ZDkwM2RhMTI4Nzg3NzI0ZDllNTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OSBAQAorMjAxNS0wOC0xNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2Ugbm9uLXVzZXItb2JzZXJ2YWJsZSBQcm9taXNlIGZ1
bmN0aW9ucyB0byB1c2UgUHJvbWlzZXMgaW50ZXJuYWxseQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MTE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG8gbGV2ZXJhZ2UgdGhlIFByb21pc2VzIGludGVy
bmFsbHkgKGxpa2UgRVM2IE1vZHVsZSBMb2FkZXJzKSwgd2UgYWRkCisgICAgICAgIHRoZSBzZXZl
cmFsIG5vbi11c2VyLW9ic2VydmFibGUgcHJpdmF0ZSBtZXRob2RzLCBsaWtlIEB0aGVuLCBAYWxs
LiBBbmQKKyAgICAgICAgcmVmYWN0b3IgdGhlIGV4aXN0aW5nIFByb21pc2VzIGltcGxlbWVudGF0
aW9uIHRvIG1ha2UgaXQgZWFzeSB0byB1c2UKKyAgICAgICAgaW50ZXJuYWxseS4KKworICAgICAg
ICBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBidWlsdGlucy9PcGVyYXRpb25zLlBy
b21pc2UuanM6CisgICAgICAgICgub25GdWxmaWxsZWQpOgorICAgICAgICAoLm9uUmVqZWN0ZWQp
OgorICAgICAgICAocHJvbWlzZVRoZW4pOgorICAgICAgICAqIGJ1aWx0aW5zL1Byb21pc2UucHJv
dG90eXBlLmpzOgorICAgICAgICAodGhlbik6CisgICAgICAgIChwcml2YXRlVGhlbik6CisgICAg
ICAgICgub25GdWxmaWxsZWQpOiBEZWxldGVkLgorICAgICAgICAoLm9uUmVqZWN0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL1Byb21pc2VDb25zdHJ1Y3Rvci5qczoKKyAgICAgICAg
KHByaXZhdGVBbGwubmV3UmVzb2x2ZUVsZW1lbnQpOgorICAgICAgICAocHJpdmF0ZUFsbCk6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnByb21pc2VDb25zdHJ1Y3Rvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpwcm9taXNlUHJvdG90eXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnByb21pc2VTdHJ1Y3R1cmUpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpKU1Byb21pc2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuY3BwOgorICAgICAgICAoSlNDOjpjYWxsRnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6cmVzb2x2ZSk6CisgICAgICAg
IChKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQ
cm9taXNlRGVmZXJyZWQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZVByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNQcm9taXNlUHJvdG90eXBlOjpKU1Byb21pc2VQcm90b3R5cGUpOgorICAgICAgICAo
SlNDOjpKU1Byb21pc2VQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5oOgorCiAyMDE1LTA4LTE2ICBCZW5qYW1pbiBQb3VsYWlu
ICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFVzZSAoeCArIHgpIGluc3Rl
YWQgb2YgKHggKiAyKSB3aGVuIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvT3BlcmF0aW9ucy5Qcm9taXNlLmpzIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL09wZXJhdGlvbnMuUHJvbWlzZS5qcwppbmRleCA2NmY5YzI1MTUzNTljN2E1
MTI1NGY5MzdmYzdmNTFjY2QxMzEyNDFkLi5kMGQ0MWQ0ZmIyYjllYzdmNzhkMWQ2MzdhMThhMWRh
YWNiYWZiYjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvT3Bl
cmF0aW9ucy5Qcm9taXNlLmpzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9P
cGVyYXRpb25zLlByb21pc2UuanMKQEAgLTIxOCwzICsyMTgsMjkgQEAgZnVuY3Rpb24gaW5pdGlh
bGl6ZVByb21pc2UoZXhlY3V0b3IpCiAKICAgICByZXR1cm4gdGhpczsKIH0KKworZnVuY3Rpb24g
cHJvbWlzZVRoZW4ocHJvbWlzZSwgY2FwYWJpbGl0eSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQp
Cit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCAhPT0g
ImZ1bmN0aW9uIikKKyAgICAgICAgb25GdWxmaWxsZWQgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHsg
cmV0dXJuIGFyZ3VtZW50OyB9OworCisgICAgaWYgKHR5cGVvZiBvblJlamVjdGVkICE9PSAiZnVu
Y3Rpb24iKQorICAgICAgICBvblJlamVjdGVkID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7IHRocm93
IGFyZ3VtZW50OyB9OworCisgICAgdmFyIGZ1bGZpbGxSZWFjdGlvbiA9IEBuZXdQcm9taXNlUmVh
Y3Rpb24oY2FwYWJpbGl0eSwgb25GdWxmaWxsZWQpOworICAgIHZhciByZWplY3RSZWFjdGlvbiA9
IEBuZXdQcm9taXNlUmVhY3Rpb24oY2FwYWJpbGl0eSwgb25SZWplY3RlZCk7CisKKyAgICB2YXIg
c3RhdGUgPSBwcm9taXNlLkBwcm9taXNlU3RhdGU7CisKKyAgICBpZiAoc3RhdGUgPT09IEBwcm9t
aXNlUGVuZGluZykgeworICAgICAgICBAcHV0QnlWYWxEaXJlY3QocHJvbWlzZS5AcHJvbWlzZUZ1
bGZpbGxSZWFjdGlvbnMsIHByb21pc2UuQHByb21pc2VGdWxmaWxsUmVhY3Rpb25zLmxlbmd0aCwg
ZnVsZmlsbFJlYWN0aW9uKQorICAgICAgICBAcHV0QnlWYWxEaXJlY3QocHJvbWlzZS5AcHJvbWlz
ZVJlamVjdFJlYWN0aW9ucywgcHJvbWlzZS5AcHJvbWlzZVJlamVjdFJlYWN0aW9ucy5sZW5ndGgs
IHJlamVjdFJlYWN0aW9uKQorICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEBwcm9taXNlRnVsZmls
bGVkKQorICAgICAgICBAZW5xdWV1ZUpvYihAcHJvbWlzZVJlYWN0aW9uSm9iLCBbZnVsZmlsbFJl
YWN0aW9uLCBwcm9taXNlLkBwcm9taXNlUmVzdWx0XSk7CisgICAgZWxzZSBpZiAoc3RhdGUgPT09
IEBwcm9taXNlUmVqZWN0ZWQpCisgICAgICAgIEBlbnF1ZXVlSm9iKEBwcm9taXNlUmVhY3Rpb25K
b2IsIFtyZWplY3RSZWFjdGlvbiwgcHJvbWlzZS5AcHJvbWlzZVJlc3VsdF0pOworCisgICAgcmV0
dXJuIGNhcGFiaWxpdHkuQHByb21pc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvUHJvbWlzZS5wcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvUHJvbWlzZS5wcm90b3R5cGUuanMKaW5kZXggODU2M2RmMGQ5MjdmYjIzMzk2
ODkzOWUxNDk0MjM5NmVjODVlNjVhYS4uYmEwMjJhYmE1YTBkNThkODVlZmVlMDc5YjM5YWNiYjEx
MzYyYmY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1Byb21p
c2UucHJvdG90eXBlLmpzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Qcm9t
aXNlLnByb3RvdHlwZS5qcwpAQCAtNDEsMjYgKzQxLDE5IEBAIGZ1bmN0aW9uIHRoZW4ob25GdWxm
aWxsZWQsIG9uUmVqZWN0ZWQpCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NjYyNAogICAgIHZhciBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7
CiAKLSAgICB2YXIgcmVzdWx0Q2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShjb25z
dHJ1Y3Rvcik7Ci0KLSAgICBpZiAodHlwZW9mIG9uRnVsZmlsbGVkICE9PSAiZnVuY3Rpb24iKQot
ICAgICAgICBvbkZ1bGZpbGxlZCA9IGZ1bmN0aW9uIChhcmd1bWVudCkgeyByZXR1cm4gYXJndW1l
bnQ7IH07Ci0KLSAgICBpZiAodHlwZW9mIG9uUmVqZWN0ZWQgIT09ICJmdW5jdGlvbiIpCi0gICAg
ICAgIG9uUmVqZWN0ZWQgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHsgdGhyb3cgYXJndW1lbnQ7IH07
Ci0KLSAgICB2YXIgZnVsZmlsbFJlYWN0aW9uID0gQG5ld1Byb21pc2VSZWFjdGlvbihyZXN1bHRD
YXBhYmlsaXR5LCBvbkZ1bGZpbGxlZCk7Ci0gICAgdmFyIHJlamVjdFJlYWN0aW9uID0gQG5ld1By
b21pc2VSZWFjdGlvbihyZXN1bHRDYXBhYmlsaXR5LCBvblJlamVjdGVkKTsKKyAgICByZXR1cm4g
QHByb21pc2VUaGVuKHRoaXMsIEBuZXdQcm9taXNlQ2FwYWJpbGl0eShjb25zdHJ1Y3RvciksIG9u
RnVsZmlsbGVkLCBvblJlamVjdGVkKTsKK30KIAotICAgIHZhciBzdGF0ZSA9IHRoaXMuQHByb21p
c2VTdGF0ZTsKK2Z1bmN0aW9uIHByaXZhdGVUaGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKQor
eworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiB0aGUgSlND
IGludGVybmFscy4KKyAgICAvLyBUaGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIHRha2UgY2FyZSBu
b3QgdG8gcGVyZm9ybSB0aGUgdXNlcgorICAgIC8vIG9ic2VydmFibGUgLyB0cmFwcGFibGUgb3Bl
cmF0aW9ucy4KKyAgICAvLworICAgIC8vIDEuIERvbid0IGxvb2sgdXAgdGhpcy5jb25zdHJ1Y3Rv
ciAvIEBAc3BlY2llcy4gQWx3YXlzIGNvbnN0cnVjdAorICAgIC8vICAgIHRoZSBwbGFpbiBQcm9t
aXNlIG9iamVjdC4KIAotICAgIGlmIChzdGF0ZSA9PT0gQHByb21pc2VQZW5kaW5nKSB7Ci0gICAg
ICAgIEBwdXRCeVZhbERpcmVjdCh0aGlzLkBwcm9taXNlRnVsZmlsbFJlYWN0aW9ucywgdGhpcy5A
cHJvbWlzZUZ1bGZpbGxSZWFjdGlvbnMubGVuZ3RoLCBmdWxmaWxsUmVhY3Rpb24pCi0gICAgICAg
IEBwdXRCeVZhbERpcmVjdCh0aGlzLkBwcm9taXNlUmVqZWN0UmVhY3Rpb25zLCB0aGlzLkBwcm9t
aXNlUmVqZWN0UmVhY3Rpb25zLmxlbmd0aCwgcmVqZWN0UmVhY3Rpb24pCi0gICAgfSBlbHNlIGlm
IChzdGF0ZSA9PT0gQHByb21pc2VGdWxmaWxsZWQpCi0gICAgICAgIEBlbnF1ZXVlSm9iKEBwcm9t
aXNlUmVhY3Rpb25Kb2IsIFtmdWxmaWxsUmVhY3Rpb24sIHRoaXMuQHByb21pc2VSZXN1bHRdKTsK
LSAgICBlbHNlIGlmIChzdGF0ZSA9PT0gQHByb21pc2VSZWplY3RlZCkKLSAgICAgICAgQGVucXVl
dWVKb2IoQHByb21pc2VSZWFjdGlvbkpvYiwgW3JlamVjdFJlYWN0aW9uLCB0aGlzLkBwcm9taXNl
UmVzdWx0XSk7CisgICAgInVzZSBzdHJpY3QiOwogCi0gICAgcmV0dXJuIHJlc3VsdENhcGFiaWxp
dHkuQHByb21pc2U7CisgICAgcmV0dXJuIEBwcm9taXNlVGhlbih0aGlzLCBAbmV3UHJvbWlzZURl
ZmVycmVkKCksIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Qcm9taXNlQ29uc3RydWN0b3IuanMgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUHJvbWlzZUNvbnN0cnVjdG9yLmpzCmluZGV4IDFmODNi
NDdmNzkwYTc1ZTViZjhjOTNkNWU2NjQ5NjE4Y2IxYWVjNjcuLmY2NjEwNzc0ZDAxZjIxNjIwNjI2
MGM3MDRkZmMzYTEwZTUzNDVlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9Qcm9taXNlQ29uc3RydWN0b3IuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL1Byb21pc2VDb25zdHJ1Y3Rvci5qcwpAQCAtMTM3LDMgKzEzNyw2NSBAQCBmdW5j
dGlvbiByZXNvbHZlKHZhbHVlKQogCiAgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkBwcm9t
aXNlOwogfQorCitmdW5jdGlvbiBwcml2YXRlQWxsKGFycmF5KQoreworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiB0aGUgSlNDIGludGVybmFscy4KKyAgICAv
LyBUaGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIHRha2UgY2FyZSBub3QgdG8gcGVyZm9ybSB0aGUg
dXNlcgorICAgIC8vIG9ic2VydmFibGUgLyB0cmFwcGFibGUgb3BlcmF0aW9ucy4KKyAgICAvLwor
ICAgIC8vIDEuIERvbid0IHVzZSBmb3Itb2YgYW5kIGl0ZXJhYmxlcy4gVGhpcyBmdW5jdGlvbiBv
bmx5IGFjY2VwdHMKKyAgICAvLyAgICB0aGUgZGVuc2UgYXJyYXkgb2YgdGhlIHByb21pc2VzLgor
ICAgIC8vIDIuIERvbid0IGxvb2sgdXAgdGhpcy5jb25zdHJ1Y3RvciAvIEBAc3BlY2llcy4gQWx3
YXlzIGNvbnN0cnVjdAorICAgIC8vICAgIHRoZSBwbGFpbiBQcm9taXNlIG9iamVjdC4KKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNl
RGVmZXJyZWQoKTsKKworICAgIHZhciB2YWx1ZXMgPSBbXTsKKyAgICB2YXIgaW5kZXggPSAwOwor
ICAgIHZhciByZW1haW5pbmdFbGVtZW50c0NvdW50ID0gMTsKKworICAgIGZ1bmN0aW9uIG5ld1Jl
c29sdmVFbGVtZW50KGluZGV4KQorICAgIHsKKyAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhcmd1bWVudCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKKyAgICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlOworCisgICAgICAgICAgICBA
cHV0QnlWYWxEaXJlY3QodmFsdWVzLCBpbmRleCwgYXJndW1lbnQpOworCisgICAgICAgICAgICAt
LXJlbWFpbmluZ0VsZW1lbnRzQ291bnQ7CisgICAgICAgICAgICBpZiAocmVtYWluaW5nRWxlbWVu
dHNDb3VudCA9PT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHku
QHJlc29sdmUuQGNhbGwodW5kZWZpbmVkLCB2YWx1ZXMpOworCisgICAgICAgICAgICByZXR1cm4g
dW5kZWZpbmVkOworICAgICAgICB9CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgZm9yICh2
YXIgaW5kZXggPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07CisgICAgICAgICAg
ICBAcHV0QnlWYWxEaXJlY3QodmFsdWVzLCBpbmRleCwgdW5kZWZpbmVkKTsKKworICAgICAgICAg
ICAgdmFyIG5leHRQcm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlRGVmZXJyZWQoKTsKKyAg
ICAgICAgICAgIG5leHRQcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbCh1bmRlZmluZWQs
IHZhbHVlKTsKKyAgICAgICAgICAgIHZhciBuZXh0UHJvbWlzZSA9IG5leHRQcm9taXNlQ2FwYWJp
bGl0eS5AcHJvbWlzZTsKKworICAgICAgICAgICAgdmFyIHJlc29sdmVFbGVtZW50ID0gbmV3UmVz
b2x2ZUVsZW1lbnQoaW5kZXgpOworICAgICAgICAgICAgKytyZW1haW5pbmdFbGVtZW50c0NvdW50
OworICAgICAgICAgICAgbmV4dFByb21pc2UuQHRoZW4ocmVzb2x2ZUVsZW1lbnQsIHByb21pc2VD
YXBhYmlsaXR5LkByZWplY3QpOworICAgICAgICB9CisKKyAgICAgICAgLS1yZW1haW5pbmdFbGVt
ZW50c0NvdW50OworICAgICAgICBpZiAocmVtYWluaW5nRWxlbWVudHNDb3VudCA9PT0gMCkKKyAg
ICAgICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCwgdmFs
dWVzKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5A
cmVqZWN0LkBjYWxsKHVuZGVmaW5lZCwgZXJyb3IpOworICAgIH0KKworICAgIHJldHVybiBwcm9t
aXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyNWFjZTkyNjkxODBhZGQ3M2M0ZWFlOThk
Mzg5NTc4ZTQ2YWViNTQ0Li42YjNhMjAyNzVhNzI4NzQ0ZTcyMjZmOTg3ZTQ2ZWRjNWNiZGM1ZjAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCkBAIC0zMzYsOSArMzM2LDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChWTSYgdm0p
CiAgICAgbV9yZWdFeHBQcm90b3R5cGUuc2V0KHZtLCB0aGlzLCBSZWdFeHBQcm90b3R5cGU6OmNy
ZWF0ZSh2bSwgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSwgZW1wdHlSZWdleCkpOwogICAgIG1fcmVnRXhwU3RydWN0dXJl
LnNldCh2bSwgdGhpcywgUmVnRXhwT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1f
cmVnRXhwUHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUodm0sICp0
aGlzKSk7Ci0gICAgCi0gICAgbV9wcm9taXNlUHJvdG90eXBlLnNldCh2bSwgdGhpcywgSlNQcm9t
aXNlUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNQcm9taXNlUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwotICAgIG1f
cHJvbWlzZVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTUHJvbWlzZTo6Y3JlYXRlU3RydWN0dXJl
KHZtLCB0aGlzLCBtX3Byb21pc2VQcm90b3R5cGUuZ2V0KCkpKTsKIAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKICAgICBtX3dhc21Nb2R1bGVTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU1dBU01N
b2R1bGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcykpOwpAQCAtMzk3LDEzICszOTQsMTEgQEAg
bV8gIyMgbG93ZXJOYW1lICMjIFByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmMKICAgICBtX3N5bnRheEVycm9yQ29uc3RydWN0b3Iuc2V0
KHZtLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIHRoaXMsIG5hdGl2
ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgQVNDSUlMaXRl
cmFsKCJTeW50YXhFcnJvciIpKSk7CiAgICAgbV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5zZXQodm0s
IHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgdGhpcywgbmF0aXZlRXJy
b3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCBBU0NJSUxpdGVyYWwo
IlR5cGVFcnJvciIpKSk7CiAgICAgbV9VUklFcnJvckNvbnN0cnVjdG9yLnNldCh2bSwgdGhpcywg
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVj
dHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsIEFTQ0lJTGl0ZXJhbCgiVVJJRXJy
b3IiKSkpOwotICAgIG1fcHJvbWlzZUNvbnN0cnVjdG9yLnNldCh2bSwgdGhpcywgSlNQcm9taXNl
Q29uc3RydWN0b3I6OmNyZWF0ZSh2bSwgSlNQcm9taXNlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fcHJvbWlzZVByb3Rv
dHlwZS5nZXQoKSkpOwogICAgIAogICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIG9iamVjdENv
bnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBmdW5j
dGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgbV9hcnJheVByb3RvdHlwZS0+cHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBh
cnJheUNvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgbV9yZWdFeHBQcm90b3R5cGUtPnB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvciwg
bV9yZWdFeHBDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotICAgIG1fcHJvbWlzZVByb3Rv
dHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmNv
bnN0cnVjdG9yLCBtX3Byb21pc2VDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogICAgIAog
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5PYmpl
Y3QsIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPkZ1bmN0aW9uLCBmdW5jdGlvbkNvbnN0cnVj
dG9yLCBEb250RW51bSk7CkBAIC00MTUsNyArNDEwLDYgQEAgbV8gIyMgbG93ZXJOYW1lICMjIFBy
b3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PmMKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
U3ludGF4RXJyb3IsIG1fc3ludGF4RXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwog
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5UeXBl
RXJyb3IsIG1fdHlwZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+VVJJRXJyb3IsIG1f
VVJJRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5Qcm9taXNlLCBtX3Byb21pc2VDb25z
dHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogICAgIAogICAgIAogI2RlZmluZSBQVVRfQ09OU1RS
VUNUT1JfRk9SX1NJTVBMRV9UWVBFKGNhcGl0YWxOYW1lLCBsb3dlck5hbWUsIHByb3Blck5hbWUs
IGluc3RhbmNlVHlwZSwganNOYW1lKSBcCkBAIC00OTEsNyArNDg1LDcgQEAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPiBqc05hbWUsIGxvd2VyTmFtZSAj
IyBDb25zdHJ1Y3QKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMt
PmFycmF5SXRlcmF0aW9uS2luZFZhbHVlUHJpdmF0ZU5hbWUsIGpzTnVtYmVyKEFycmF5SXRlcmF0
ZVZhbHVlKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9i
YWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YXJyYXlJdGVyYXRpb25LaW5kS2V5VmFs
dWVQcml2YXRlTmFtZSwganNOdW1iZXIoQXJyYXlJdGVyYXRlS2V5VmFsdWUpLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zeW1ib2xJdGVyYXRvclByaXZhdGVOYW1lKCks
IFN5bWJvbDo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKnZtLnByb3BlcnR5
TmFtZXMtPml0ZXJhdG9yU3ltYm9sLmltcGwoKSkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBS
ZWFkT25seSksCi0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5Q
cm9taXNlUHJpdmF0ZU5hbWUsIG1fcHJvbWlzZUNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5w
cm9wZXJ0eU5hbWVzLT5Qcm9taXNlUHJpdmF0ZU5hbWUsIHByb21pc2VDb25zdHJ1Y3RvciwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8odm0ucHJvcGVydHlOYW1lcy0+cHJvbWlzZVBlbmRpbmdQcml2YXRlTmFtZSwganNOdW1iZXIo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6U3RhdHVzOjpQZW5kaW5nKSksIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnByb21pc2VGdWxmaWxsZWRQcml2YXRl
TmFtZSgpLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNQcm9taXNlOjpTdGF0dXM6
OkZ1bGZpbGxlZCkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAg
IEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wcm9t
aXNlUmVqZWN0ZWRQcml2YXRlTmFtZSgpLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNQcm9taXNlOjpTdGF0dXM6OlJlamVjdGVkKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KSwKQEAgLTUwNyw2ICs1MDEsOCBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+IGpzTmFtZSwgbG93ZXJOYW1lICMjIENvbnN0cnVjdAogICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
Y3JlYXRlUmVzb2x2aW5nRnVuY3Rpb25zUHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRl
QnVpbHRpbkZ1bmN0aW9uKHZtLCBvcGVyYXRpb25zUHJvbWlzZUNyZWF0ZVJlc29sdmluZ0Z1bmN0
aW9uc0NvZGVHZW5lcmF0b3Iodm0pLCB0aGlzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkucHJvbWlzZVJlYWN0aW9uSm9iUHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6
Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBvcGVyYXRpb25zUHJvbWlzZVByb21pc2VSZWFjdGlv
bkpvYkNvZGVHZW5lcmF0b3Iodm0pLCB0aGlzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkucHJvbWlzZVJlc29sdmVUaGVuYWJsZUpvYlByaXZhdGVOYW1lKCksIEpTRnVu
Y3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgb3BlcmF0aW9uc1Byb21pc2VQcm9taXNl
UmVzb2x2ZVRoZW5hYmxlSm9iQ29kZUdlbmVyYXRvcih2bSksIHRoaXMpLCBEb250RW51bSB8IERv
bnREZWxldGUgfCBSZWFkT25seSksCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5uZXdQcm9taXNlRGVmZXJyZWRQcml2YXRlTmFtZSgp
LCBtX25ld1Byb21pc2VEZWZlcnJlZEZ1bmN0aW9uLmdldCgpLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSksCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5wcm9taXNlVGhlblByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246
OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgb3BlcmF0aW9uc1Byb21pc2VQcm9taXNlVGhlbkNv
ZGVHZW5lcmF0b3Iodm0pLCB0aGlzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
LAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uUHJpdmF0ZU5hbWUoKSwgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uT2JqZWN0OjpjcmVhdGUodm0sIHRoaXMsIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgfTsKICAgICBh
ZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xv
YmFscykpOwpAQCAtNzUwLDcgKzc0Niw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV90eXBlRXJyb3JDb25zdHJ1Y3Rvcik7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fVVJJRXJyb3JDb25zdHJ1Y3Rvcik7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fb2JqZWN0Q29uc3RydWN0b3IpOwotICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb21pc2VDb25zdHJ1Y3Rvcik7CiAKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9udWxsR2V0dGVyRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX251bGxTZXR0ZXJGdW5jdGlvbik7CkBAIC03NzAsNyArNzY1LDYg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5
UHJvdG90eXBlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9lcnJvclByb3Rv
dHlwZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcmF0b3JQcm90b3R5
cGUpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb21pc2VQcm90b3R5cGUp
OwogCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZGVidWdnZXJTY29wZVN0cnVj
dHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fd2l0aFNjb3BlU3RydWN0
dXJlKTsKQEAgLTgwNCw3ICs3OTgsNiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fY29uc29sZVN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fZG9sbGFyVk1TdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUpOwotICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb21pc2VTdHJ1Y3R1cmUpOwogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV93YXNtTW9kdWxlU3RydWN0
dXJlKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgKaW5kZXggOTk4NmJjZjYyNDVlMmNjNDY4MjBiMTMxMDJiMjM0MjkwMGVjM2Q3Yi4u
OTZkMjJmZjFmMTRlMjRiOGMxOGZmODZlYmYxYzU3NjIwZTNiZWFhNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC05OSw2ICs5OSw3IEBA
IHN0cnVjdCBIYXNoVGFibGU7CiAgICAgbWFjcm8oQm9vbGVhbiwgYm9vbGVhbiwgYm9vbGVhbk9i
amVjdCwgQm9vbGVhbk9iamVjdCwgQm9vbGVhbikgXAogICAgIG1hY3JvKE51bWJlciwgbnVtYmVy
LCBudW1iZXJPYmplY3QsIE51bWJlck9iamVjdCwgTnVtYmVyKSBcCiAgICAgbWFjcm8oRXJyb3Is
IGVycm9yLCBlcnJvciwgRXJyb3JJbnN0YW5jZSwgRXJyb3IpIFwKKyAgICBtYWNybyhKU1Byb21p
c2UsIHByb21pc2UsIHByb21pc2UsIEpTUHJvbWlzZSwgUHJvbWlzZSkgXAogICAgIG1hY3JvKEpT
QXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyLCBhcnJheUJ1ZmZlciwgSlNBcnJheUJ1ZmZlciwgQXJy
YXlCdWZmZXIpIFwKICAgICBERUZJTkVfU1RBTkRBUkRfQlVJTFRJTihtYWNybywgV2Vha01hcCwg
d2Vha01hcCkgXAogICAgIERFRklORV9TVEFOREFSRF9CVUlMVElOKG1hY3JvLCBXZWFrU2V0LCB3
ZWFrU2V0KSBcCkBAIC0xODMsNyArMTg0LDYgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJs
aWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgV3JpdGVCYXJyaWVyPE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3I+IG1fc3ludGF4RXJyb3JDb25zdHJ1Y3RvcjsKICAgICBXcml0ZUJhcnJp
ZXI8TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcj4gbV90eXBlRXJyb3JDb25zdHJ1Y3RvcjsKICAgICBX
cml0ZUJhcnJpZXI8TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcj4gbV9VUklFcnJvckNvbnN0cnVjdG9y
OwotICAgIFdyaXRlQmFycmllcjxKU1Byb21pc2VDb25zdHJ1Y3Rvcj4gbV9wcm9taXNlQ29uc3Ry
dWN0b3I7CiAgICAgV3JpdGVCYXJyaWVyPE9iamVjdENvbnN0cnVjdG9yPiBtX29iamVjdENvbnN0
cnVjdG9yOwogCiAgICAgV3JpdGVCYXJyaWVyPE51bGxHZXR0ZXJGdW5jdGlvbj4gbV9udWxsR2V0
dGVyRnVuY3Rpb247CkBAIC0yMDUsNyArMjA1LDYgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBw
dWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgV3JpdGVCYXJyaWVyPEFycmF5
UHJvdG90eXBlPiBtX2FycmF5UHJvdG90eXBlOwogICAgIFdyaXRlQmFycmllcjxSZWdFeHBQcm90
b3R5cGU+IG1fcmVnRXhwUHJvdG90eXBlOwogICAgIFdyaXRlQmFycmllcjxJdGVyYXRvclByb3Rv
dHlwZT4gbV9pdGVyYXRvclByb3RvdHlwZTsKLSAgICBXcml0ZUJhcnJpZXI8SlNQcm9taXNlUHJv
dG90eXBlPiBtX3Byb21pc2VQcm90b3R5cGU7CiAKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2RlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV93aXRoU2NvcGVTdHJ1Y3R1cmU7CkBAIC0yNDEsNyArMjQwLDYgQEAgY2xhc3MgSlNHbG9iYWxP
YmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlOwogICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1faXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmU7Ci0gICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9wcm9taXNlU3RydWN0dXJlOwogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dhc21Nb2R1bGVTdHJ1Y3R1cmU7
CiAjZW5kaWYKQEAgLTM4Niw3ICszODQsNiBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1Ymxp
YyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBOYXRpdmVFcnJvckNvbnN0cnVjdG9y
KiBzeW50YXhFcnJvckNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zeW50YXhFcnJvckNv
bnN0cnVjdG9yLmdldCgpOyB9CiAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciogdHlwZUVycm9y
Q29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5cGVFcnJvckNvbnN0cnVjdG9yLmdldCgp
OyB9CiAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciogVVJJRXJyb3JDb25zdHJ1Y3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fVVJJRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKTsgfQotICAgIEpTUHJvbWlz
ZUNvbnN0cnVjdG9yKiBwcm9taXNlQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3Byb21p
c2VDb25zdHJ1Y3Rvci5nZXQoKTsgfQogCiAgICAgTnVsbEdldHRlckZ1bmN0aW9uKiBudWxsR2V0
dGVyRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX251bGxHZXR0ZXJGdW5jdGlvbi5nZXQoKTsg
fQogICAgIE51bGxTZXR0ZXJGdW5jdGlvbiogbnVsbFNldHRlckZ1bmN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9udWxsU2V0dGVyRnVuY3Rpb24uZ2V0KCk7IH0KQEAgLTQxOCw3ICs0MTUsNiBAQCBj
bGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsK
ICAgICBSZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVnRXhwUHJvdG90eXBlLmdldCgpOyB9CiAgICAgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvclByb3RvdHlwZS5nZXQoKTsgfQogICAgIEl0ZXJh
dG9yUHJvdG90eXBlKiBpdGVyYXRvclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0
b3JQcm90b3R5cGUuZ2V0KCk7IH0KLSAgICBKU1Byb21pc2VQcm90b3R5cGUqIHByb21pc2VQcm90
b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb21pc2VQcm90b3R5cGUuZ2V0KCk7IH0KIAogICAg
IFN0cnVjdHVyZSogZGVidWdnZXJTY29wZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVi
dWdnZXJTY29wZVN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogd2l0aFNjb3BlU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV93aXRoU2NvcGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KQEAg
LTQ3NSw3ICs0NzEsNiBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0IHsKICAgICBTdHJ1Y3R1cmUqIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvclJlc3VsdFN0cnVjdHVyZS5nZXQoKTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3QgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmVPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1faXRlcmF0b3JSZXN1bHRTdHJ1Y3R1
cmUpOyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5nZXQoKTsgfQotICAgIFN0
cnVjdHVyZSogcHJvbWlzZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvbWlzZVN0cnVj
dHVyZS5nZXQoKTsgfQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBTdHJ1Y3R1cmUqIHdh
c21Nb2R1bGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3dhc21Nb2R1bGVTdHJ1Y3R1cmUu
Z2V0KCk7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCmluZGV4IDQ0ZTFlNzNjYWJhNTViMGJmNTQwOTJl
YzU4NGZlNjU3ZTU0NjFhZTUuLjI0M2JjNTI3YzQ2ZmZkNWVkYWQzNjRkNTIwMGZmOGVmOTQ2YzJk
ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNv
bnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21p
c2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5h
bWVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKQEAgLTgxLDYgKzgyLDcgQEAgdm9pZCBKU1Byb21p
c2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1Byb21pc2VQcm90b3R5cGUq
IHByb21pc2VQcm8KICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgQVNDSUlMaXRlcmFsKCJQ
cm9taXNlIikpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUsIHByb21pc2VQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERv
bnREZWxldGUpOworICAgIHB1dERpcmVjdEJ1aWx0aW5GdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KHZtLCBnbG9iYWxPYmplY3QoKSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYWxs
UHJpdmF0ZU5hbWUoKSwgcHJvbWlzZUNvbnN0cnVjdG9yUHJpdmF0ZUFsbENvZGVHZW5lcmF0b3Io
dm0pLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9CiAKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFByb21pc2UoRXhlY1N0YXRlKiBleGVj
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVm
ZXJyZWQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJy
ZWQuY3BwCmluZGV4IDZmMzU0MzIzNWJkOGEwOTM4NDE4ZmY3YWZmY2RkMDJiMTM1ODQ3NDcuLjAw
MGI2NDYyZGZjN2FhZDQyMDg0ZTJjOTZmZTMyZTc4MDdjNzAyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5jcHAKQEAgLTcyLDYg
KzcyLDI4IEBAIEpTUHJvbWlzZURlZmVycmVkOjpKU1Byb21pc2VEZWZlcnJlZChWTSYgdm0pCiB7
CiB9CiAKK3N0YXRpYyB2b2lkIGNhbGxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
ZnVuY3Rpb24sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOworICAg
IEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpOworCisgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJndW1lbnRzOworICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOworCisgICAgY2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmd1
bWVudHMpOworfQorCit2b2lkIEpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBjYWxsRnVuY3Rpb24oZXhlYywgbV9yZXNvbHZl
LmdldCgpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgcmVhc29uKQoreworICAgIGNhbGxGdW5jdGlvbihleGVjLCBt
X3JlamVjdC5nZXQoKSwgcmVhc29uKTsKK30KKwogdm9pZCBKU1Byb21pc2VEZWZlcnJlZDo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogcHJvbWlzZSwgSlNWYWx1ZSByZXNvbHZlLCBK
U1ZhbHVlIHJlamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlRGVmZXJyZWQuaAppbmRleCBk
ZWEwZDE3ZjliNDJjZWM2N2FjYzgyMzU1MDY1OTVkYjUxZTk0MTA3Li40YTBiNGI4NTY4YTQ3YmRk
OWZlMmMzOGY4NTA0NzZmMmRiOTFkYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb21pc2VEZWZlcnJlZC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvbWlzZURlZmVycmVkLmgKQEAgLTUwLDYgKzUwLDkgQEAgY2xhc3MgSlNQ
cm9taXNlRGVmZXJyZWQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBKU1ZhbHVlIHJlc29s
dmUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmUuZ2V0KCk7IH0KICAgICBKU1ZhbHVlIHJlamVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVqZWN0LmdldCgpOyB9CiAKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHJlc29sdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCByZWplY3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisKIHByaXZhdGU6CiAgICAg
SlNQcm9taXNlRGVmZXJyZWQoVk0mKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNP
YmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuY3BwCmluZGV4IGEwZjEwMjQzMjBjMTRiYjM2
NGU4MTAzNDM5MzVhZDc5M2E3ZGE0ODYuLjAyNjgzNzM0ODA3NWRhM2U0Nzg3YjRhMmRmNGNlZWVj
NTFjYTYxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9taXNlUHJvdG90eXBlLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTUHJvbWlzZVByb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5h
bWVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU0NCdWlsdGlucy5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCkBAIC01NCwxMCArNTUsOSBAQCBjb25zdCBDbGFz
c0luZm8gSlNQcm9taXNlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJQcm9taXNlUHJvdG90eXBlIiwg
JkpTTm9uRmluYWxPYgogQGVuZAogKi8KIAotSlNQcm9taXNlUHJvdG90eXBlKiBKU1Byb21pc2VQ
cm90b3R5cGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCitKU1Byb21pc2VQcm90b3R5cGUqIEpTUHJvbWlzZVByb3RvdHlwZTo6
Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTUHJvbWlzZVByb3RvdHlwZSogb2JqZWN0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNQcm9taXNlUHJvdG90eXBlPih2bS5oZWFw
KSkgSlNQcm9taXNlUHJvdG90eXBlKGV4ZWMsIHN0cnVjdHVyZSk7CisgICAgSlNQcm9taXNlUHJv
dG90eXBlKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1Byb21pc2VQcm90
b3R5cGU+KHZtLmhlYXApKSBKU1Byb21pc2VQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CiAgICAg
b2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgc3RydWN0dXJlKTsKICAgICByZXR1cm4gb2JqZWN0
OwogfQpAQCAtNjcsMTQgKzY3LDE1IEBAIFN0cnVjdHVyZSogSlNQcm9taXNlUHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1Byb21pc2VQ
cm90b3R5cGU6OkpTUHJvbWlzZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgIDogSlNOb25GaW5hbE9iamVjdChleGVjLT52bSgpLCBzdHJ1Y3R1cmUp
CitKU1Byb21pc2VQcm90b3R5cGU6OkpTUHJvbWlzZVByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIDogSlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQogewog
fQogCiB2b2lkIEpTUHJvbWlzZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTdHJ1
Y3R1cmUqKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBwdXREaXJlY3RC
dWlsdGluRnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbih2bSwgZ2xvYmFsT2JqZWN0KCksIHZtLnBy
b3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnRoZW5Qcml2YXRlTmFtZSgpLCBwcm9taXNlUHJv
dG90eXBlUHJpdmF0ZVRoZW5Db2RlR2VuZXJhdG9yKHZtKSwgUmVhZE9ubHkgfCBEb250RW51bSB8
IERvbnREZWxldGUpOwogfQogCiBib29sIEpTUHJvbWlzZVByb3RvdHlwZTo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2VQcm90b3R5cGUuaAppbmRleCA0NThkMTQxMTlkZGY5YWJl
MDc2M2I3NzczOWI0ZWE5Yjg1YzIxOTA2Li40ZTg3MWM3NTZjYzhlNzU3N2EwNzA0MTE1NjAzZjkz
ZTg1NTNlMWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VQcm90b3R5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b21pc2VQcm90b3R5cGUuaApAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBKU1Byb21pc2VQcm90b3R5
cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiAKLSAgICBz
dGF0aWMgSlNQcm9taXNlUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNQcm9taXNlUHJvdG90eXBlKiBjcmVhdGUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBE
RUNMQVJFX0lORk87CkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIEpTUHJvbWlzZVByb3RvdHlwZSA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
U3RydWN0dXJlKik7CiAKIHByaXZhdGU6Ci0gICAgSlNQcm9taXNlUHJvdG90eXBlKEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSopOworICAgIEpTUHJvbWlzZVByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSop
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiB9OwogCg==
</data>
<flag name="review"
          id="284394"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>