<?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>107951</bug_id>
          
          <creation_ts>2013-01-25 07:36:51 -0800</creation_ts>
          <short_desc>Web Inspector: [Canvas] support instrumenting canvases in iframes (backend side)</short_desc>
          <delta_ts>2013-01-30 03:08:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>108064</blocked>
    
    <blocked>108319</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Adaikin">aandrey</reporter>
          <assigned_to name="Andrey Adaikin">aandrey</assigned_to>
          <cc>apavlov</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rniwa</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>816586</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2013-01-25 07:36:51 -0800</bug_when>
    <thetext>Accept optional FrameId argument for captureFrame and startCapturing commands. Add event to the protocol to inform about instrumented canvas context creation.

Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816593</commentid>
    <comment_count>1</comment_count>
      <attachid>184750</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2013-01-25 07:47:13 -0800</bug_when>
    <thetext>Created attachment 184750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816628</commentid>
    <comment_count>2</comment_count>
      <attachid>184750</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-25 08:40:27 -0800</bug_when>
    <thetext>Comment on attachment 184750
Patch

Attachment 184750 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16097828

New failing tests:
inspector/profiler/canvas2d/canvas2d-profiler-capturing-basics.html
inspector/profiler/canvas2d/canvas-has-uninstrumented-canvases.html
inspector/profiler/canvas2d/canvas-stack-trace.html
inspector/profiler/webgl/webgl-profiler-get-error.html
inspector/profiler/canvas2d/canvas2d-gradient-capturing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816728</commentid>
    <comment_count>3</comment_count>
      <attachid>184750</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-25 10:38:43 -0800</bug_when>
    <thetext>Comment on attachment 184750
Patch

Attachment 184750 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16120399

New failing tests:
inspector/profiler/canvas2d/canvas2d-profiler-capturing-basics.html
inspector/profiler/webgl/webgl-profiler-get-error.html
inspector/profiler/canvas2d/canvas2d-gradient-capturing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816786</commentid>
    <comment_count>4</comment_count>
      <attachid>184750</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-25 11:32:00 -0800</bug_when>
    <thetext>Comment on attachment 184750
Patch

Attachment 184750 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16122431

New failing tests:
inspector/profiler/canvas2d/canvas2d-profiler-capturing-basics.html
inspector/profiler/webgl/webgl-profiler-get-error.html
inspector/profiler/canvas2d/canvas2d-gradient-capturing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817593</commentid>
    <comment_count>5</comment_count>
      <attachid>184750</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-28 01:16:16 -0800</bug_when>
    <thetext>Comment on attachment 184750
Patch

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

&gt; Source/WebCore/inspector/Inspector.json:3382
&gt; +                &quot;name&quot;: &quot;frameWithCanvases&quot;,

Consider renaming - event should tell us what exactly is happening

&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:132
&gt; +            if (m_framesWithUninstrumentedCanvases.contains(frame)) {

What if the frame was destroyed and re-created at same address? You should track frame&apos;s lifetime and make a cleanup.

&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:190
&gt; +    InjectedScriptCanvasModule module = injectedScriptCanvasModule(errorString, traceLogId);

This nice refactoring seems to be a separate change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817596</commentid>
    <comment_count>6</comment_count>
      <attachid>184750</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2013-01-28 01:22:34 -0800</bug_when>
    <thetext>Comment on attachment 184750
Patch

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

&gt;&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:132
&gt;&gt; +            if (m_framesWithUninstrumentedCanvases.contains(frame)) {
&gt; 
&gt; What if the frame was destroyed and re-created at same address? You should track frame&apos;s lifetime and make a cleanup.

I do track frameNavigated and frameDetached. Is this not enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817603</commentid>
    <comment_count>7</comment_count>
      <attachid>184750</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-28 01:32:56 -0800</bug_when>
    <thetext>Comment on attachment 184750
Patch

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

&gt;&gt;&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:132
&gt;&gt;&gt; +            if (m_framesWithUninstrumentedCanvases.contains(frame)) {
&gt;&gt; 
&gt;&gt; What if the frame was destroyed and re-created at same address? You should track frame&apos;s lifetime and make a cleanup.
&gt; 
&gt; I do track frameNavigated and frameDetached. Is this not enough?

Why is the comment on no defering then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817677</commentid>
    <comment_count>8</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2013-01-28 04:07:26 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 184750 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184750&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:132
&gt; &gt;&gt;&gt; +            if (m_framesWithUninstrumentedCanvases.contains(frame)) {
&gt; &gt;&gt; 
&gt; &gt;&gt; What if the frame was destroyed and re-created at same address? You should track frame&apos;s lifetime and make a cleanup.
&gt; &gt; 
&gt; &gt; I do track frameNavigated and frameDetached. Is this not enough?
&gt; 
&gt; Why is the comment on no defering then?

I&apos;m just being too cautious (maybe without a good reason here) not to use-after-free. I dont want to deref a pointer, since I dont know it&apos;s ownership policy.

Is it safe to deref a Frame*, provided that I remove pointers on frameDetached?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817702</commentid>
    <comment_count>9</comment_count>
      <attachid>184972</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2013-01-28 05:18:33 -0800</bug_when>
    <thetext>Created attachment 184972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818777</commentid>
    <comment_count>10</comment_count>
      <attachid>184972</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-29 03:04:44 -0800</bug_when>
    <thetext>Comment on attachment 184972
Patch

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

&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:284
&gt;      ScriptProfiler::visitNodeWrappers(&amp;nodeVisitor);

What are you trying to do here? You should not depend on profiler. Do you want to traverse frame tree and collect all the canvases using querySelectorAll?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818789</commentid>
    <comment_count>11</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2013-01-29 03:17:42 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 184972 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184972&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:284
&gt; &gt;      ScriptProfiler::visitNodeWrappers(&amp;nodeVisitor);
&gt; 
&gt; What are you trying to do here? You should not depend on profiler. Do you want to traverse frame tree and collect all the canvases using querySelectorAll?

I want those canvases as well as ones that are not attached to the DOM tree (yet).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818802</commentid>
    <comment_count>12</comment_count>
      <attachid>184972</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-29 03:34:10 -0800</bug_when>
    <thetext>Comment on attachment 184972
Patch

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

&gt;&gt;&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:284
&gt;&gt;&gt;      ScriptProfiler::visitNodeWrappers(&amp;nodeVisitor);
&gt;&gt; 
&gt;&gt; What are you trying to do here? You should not depend on profiler. Do you want to traverse frame tree and collect all the canvases using querySelectorAll?
&gt; 
&gt; I want those canvases as well as ones that are not attached to the DOM tree (yet).

Why would you want that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818812</commentid>
    <comment_count>13</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2013-01-29 03:46:32 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 184972 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184972&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:284
&gt; &gt;&gt;&gt;      ScriptProfiler::visitNodeWrappers(&amp;nodeVisitor);
&gt; &gt;&gt; 
&gt; &gt;&gt; What are you trying to do here? You should not depend on profiler. Do you want to traverse frame tree and collect all the canvases using querySelectorAll?
&gt; &gt; 
&gt; &gt; I want those canvases as well as ones that are not attached to the DOM tree (yet).
&gt; 
&gt; Why would you want that?

1) To instrument canvases that are not in the DOM. It&apos;s quite common to create a temp canvas to render some part of the scene and then discard it.

2) To handle the case when we would enable CanvasAgent between a canvas context is created and it is appended to the DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818829</commentid>
    <comment_count>14</comment_count>
      <attachid>184972</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-29 04:34:00 -0800</bug_when>
    <thetext>Comment on attachment 184972
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/inspector/InspectorCanvasAgent.cpp:284
&gt;&gt;&gt;&gt;&gt;      ScriptProfiler::visitNodeWrappers(&amp;nodeVisitor);
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; What are you trying to do here? You should not depend on profiler. Do you want to traverse frame tree and collect all the canvases using querySelectorAll?
&gt;&gt;&gt; 
&gt;&gt;&gt; I want those canvases as well as ones that are not attached to the DOM tree (yet).
&gt;&gt; 
&gt;&gt; Why would you want that?
&gt; 
&gt; 1) To instrument canvases that are not in the DOM. It&apos;s quite common to create a temp canvas to render some part of the scene and then discard it.
&gt; 
&gt; 2) To handle the case when we would enable CanvasAgent between a canvas context is created and it is appended to the DOM.

Iterating over bindings to achieve that sounds like an overkill. It is a shame we need to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818835</commentid>
    <comment_count>15</comment_count>
      <attachid>184972</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-29 04:45:17 -0800</bug_when>
    <thetext>Comment on attachment 184972
Patch

Clearing flags on attachment: 184972

Committed r141098: &lt;http://trac.webkit.org/changeset/141098&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818836</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-29 04:45:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184750</attachid>
            <date>2013-01-25 07:47:13 -0800</date>
            <delta_ts>2013-01-28 05:18:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107951-20130125194403.patch</filename>
            <type>text/plain</type>
            <size>27627</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNjgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdiOWZmZGVhZmI2NDg1
MzQxMTk2YjU3MDE4YzMyNDRlNzkxYTQ5YS4uZWE2NWE4ZjU5MWI0YWE3YzkxZmE5N2UyNThlZWFi
ZGMwYjZlNTdjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAxLTI1ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtDYW52YXNdIHN1cHBvcnQgaW5zdHJ1bWVudGluZyBjYW52YXNlcyBpbiBpZnJhbWVzIChi
YWNrZW5kIHNpZGUpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDc5NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBY2NlcHQgb3B0aW9uYWwgRnJhbWVJZCBhcmd1bWVudCBmb3IgY2FwdHVyZUZyYW1lIGFu
ZCBzdGFydENhcHR1cmluZyBjb21tYW5kcy4KKyAgICAgICAgQWRkIGV2ZW50IHRvIHRoZSBwcm90
b2NvbCB0byBpbmZvcm0gYWJvdXQgaW5zdHJ1bWVudGVkIGNhbnZhcyBjb250ZXh0IGNyZWF0aW9u
LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRyb3BUcmFjZUxvZyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6aGFzVW5pbnN0cnVtZW50ZWRDYW52YXNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FwdHVyZUZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydENhcHR1cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RvcENhcHR1cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Z2V0VHJhY2VMb2cpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcGxheVRyYWNlTG9nKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRSZXNvdXJjZUluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldFJlc291cmNlU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OndyYXBDYW52YXMyRFJlbmRlcmlu
Z0NvbnRleHRGb3JJbnN0cnVtZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OndyYXBXZWJHTFJlbmRlcmluZ0NvbnRleHRGb3JJbnN0cnVtZW50YXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6Om5vdGlmeVJlbmRlcmlu
Z0NvbnRleHRXYXNXcmFwcGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kRnJhbWVzV2l0aFVuaW5z
dHJ1bWVudGVkQ2FudmFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OmZyYW1lTmF2aWdhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0Fn
ZW50OjpmcmFtZURldGFjaGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
QWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3JDYW52YXNBZ2VudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVE
ZXRhY2hlZEZyb21QYXJlbnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkQ29tbWl0TG9hZEltcGwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50
Ojphc3NlcnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmFz
c2VydERvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFn
ZW50Lmg6CisgICAgICAgIChJbnNwZWN0b3JQYWdlQWdlbnQpOgorCiAyMDEzLTAxLTI0ICBab2x0
YW4gQXJ2YWkgIDx6YXJ2YWlAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJlbW92aW5nIGRl
bGV0ZWQgZmlsZXMgZnJvbSBXZWJDb3JlL1RhcmdldC5wcmkgYWZ0ZXIgcjE0MDM5OS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCA2MWZhZGQ0NTFkYzU4YTE3YzRi
Yjg5MmMzNGEzZjM2NTRjMjE3OTJjLi42MGM5MTc4N2RmMGQ1MDgxMGVmNTA1MmJjMzQ5NmI5OTdh
NTMwOWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpz
b24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0zMzEy
LDE1ICszMzEyLDIzIEBACiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICJuYW1lIjogImNhcHR1cmVGcmFtZSIsCisgICAgICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWVJZCIsICIkcmVmIjog
Ik5ldHdvcmsuRnJhbWVJZCIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZGVu
dGlmaWVyIG9mIHRoZSBmcmFtZSBjb250YWluaW5nIGRvY3VtZW50IHdob3NlIGNhbnZhc2VzIGFy
ZSB0byBiZSBjYXB0dXJlZC4gSWYgb21pdHRlZCwgbWFpbiBmcmFtZSBpcyBhc3N1bWVkLiIgfQor
ICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJhY2VMb2dJZCIsICIkcmVmIjogIlRyYWNlTG9nSWQi
IH0KLSAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJh
Y2VMb2dJZCIsICIkcmVmIjogIlRyYWNlTG9nSWQiLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmll
ciBvZiB0aGUgdHJhY2UgbG9nIGNvbnRhaW5pbmcgY2FwdHVyZWQgY2FudmFzIGNhbGxzLiIgfQor
ICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlN0YXJ0
cyAob3IgY29udGludWVzKSBhIGNhbnZhcyBmcmFtZSBjYXB0dXJpbmcgd2hpY2ggd2lsbCBiZSBz
dG9wcGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIG5leHQgZnJhbWUgaXMgcHJlcGFyZWQuIgog
ICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAibmFtZSI6ICJz
dGFydENhcHR1cmluZyIsCisgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWVJZCIsICIkcmVmIjogIk5ldHdvcmsuRnJhbWVJ
ZCIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZGVudGlmaWVyIG9mIHRoZSBm
cmFtZSBjb250YWluaW5nIGRvY3VtZW50IHdob3NlIGNhbnZhc2VzIGFyZSB0byBiZSBjYXB0dXJl
ZC4gSWYgb21pdHRlZCwgbWFpbiBmcmFtZSBpcyBhc3N1bWVkLiIgfQorICAgICAgICAgICAgICAg
IF0sCiAgICAgICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidHJhY2VMb2dJZCIsICIkcmVmIjogIlRyYWNlTG9nSWQiIH0KLSAgICAgICAgICAg
ICAgICBdCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJhY2VMb2dJZCIsICIkcmVm
IjogIlRyYWNlTG9nSWQiLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBvZiB0aGUgdHJhY2Ug
bG9nIGNvbnRhaW5pbmcgY2FwdHVyZWQgY2FudmFzIGNhbGxzLiIgfQorICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlN0YXJ0cyAob3IgY29udGludWVz
KSBjb25zZWN1dGl2ZSBjYW52YXMgZnJhbWVzIGNhcHR1cmluZy4gVGhlIGNhcHR1cmluZyBpcyBz
dG9wcGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHN0b3BDYXB0dXJpbmcgY29tbWFuZC4iCiAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogInN0b3BD
YXB0dXJpbmciLApAQCAtMzM2OSw3ICszMzc3LDE1IEBACiAgICAgICAgICAgICAgICAgXQogICAg
ICAgICAgICAgfQogICAgICAgICBdLAotICAgICAgICAiZXZlbnRzIjogW10KKyAgICAgICAgImV2
ZW50cyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJmcmFtZVdp
dGhDYW52YXNlcyIsCisgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWVJZCIsICIkcmVmIjogIk5ldHdvcmsuRnJhbWVJZCIs
ICJkZXNjcmlwdGlvbiI6ICJJZGVudGlmaWVyIG9mIHRoZSBmcmFtZSBjb250YWluaW5nIGEgY2Fu
dmFzIHdoaWNoIGNvbnRleHQgaXMgcmVhZHkgZm9yIGluc3RydW1lbnRhdGlvbi4iIH0KKyAgICAg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVu
IGFuIGluc3RydW1lbnRlZCBjYW52YXMgY29udGV4dCBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBn
aXZlbiBmcmFtZS4iCisgICAgICAgICAgICB9CisgICAgICAgIF0KICAgICB9LAogICAgIHsKICAg
ICAgICAgImRvbWFpbiI6ICJJbnB1dCIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAppbmRleCBiMjEwZTRiNDY1MWJkOWE2NDU4OTY5ZjEy
YzMwMGUwMDgxY2QwN2YzLi5mMGEwZGQ1ZDVlZTkxZTgwMWE3M2JhNTZkOTE2OTFlMjQ0ZjY2ODEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2Vu
dC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDYW52YXNBZ2VudC5o
IgogCiAjaW5jbHVkZSAiQmluZGluZ1Zpc2l0b3JzLmgiCisjaW5jbHVkZSAiRE9NV2luZG93Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1ZGUgIkluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQYWdl
QWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3RydW1l
bnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC00OSwxNSArNTEsMjEgQEAKICNp
bmNsdWRlICJTY3JpcHRQcm9maWxlci5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAKK3Vz
aW5nIFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpDYW52YXM6OlJlc291cmNlSW5mbzsKK3VzaW5nIFdl
YkNvcmU6OlR5cGVCdWlsZGVyOjpDYW52YXM6OlJlc291cmNlU3RhdGU7Cit1c2luZyBXZWJDb3Jl
OjpUeXBlQnVpbGRlcjo6Q2FudmFzOjpUcmFjZUxvZzsKK3VzaW5nIFdlYkNvcmU6OlR5cGVCdWls
ZGVyOjpDYW52YXM6OlRyYWNlTG9nSWQ7Cit1c2luZyBXZWJDb3JlOjpUeXBlQnVpbGRlcjo6TmV0
d29yazo6RnJhbWVJZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgQ2FudmFz
QWdlbnRTdGF0ZSB7CiBzdGF0aWMgY29uc3QgY2hhciBjYW52YXNBZ2VudEVuYWJsZWRbXSA9ICJj
YW52YXNBZ2VudEVuYWJsZWQiOwogfTsKIAotSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3BlY3Rv
ckNhbnZhc0FnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvckNvbXBvc2l0ZVN0YXRlKiBzdGF0ZSwgUGFnZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitJbnNwZWN0b3JDYW52YXNBZ2VudDo6SW5z
cGVjdG9yQ2FudmFzQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGUqIHN0YXRlLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBh
Z2VBZ2VudCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAg
ICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+KCJDYW52YXMiLCBp
bnN0cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSkKLSAgICAsIG1faW5zcGVjdGVkUGFnZShwYWdlKQor
ICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50KQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9l
bmFibGVkKGZhbHNlKQpAQCAtMTA4LDcgKzExNiw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcqKQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpk
cm9wVHJhY2VMb2coRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNl
TG9nSWQpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JUcmFjZUxvZ0lkKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lk
KTsKKyAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZShlcnJvclN0cmluZywgdHJhY2VMb2dJZCk7CiAgICAgaWYgKCFtb2R1bGUu
aGFzTm9WYWx1ZSgpKQogICAgICAgICBtb2R1bGUuZHJvcFRyYWNlTG9nKGVycm9yU3RyaW5nLCB0
cmFjZUxvZ0lkKTsKIH0KQEAgLTExNywxMzMgKzEyNSwxNDkgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6aGFzVW5pbnN0cnVtZW50ZWRDYW52YXNlcyhFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcsIGIKIHsKICAgICBpZiAoIWNoZWNrSXNFbmFibGVkKGVycm9yU3RyaW5nKSkKICAgICAgICAg
cmV0dXJuOwotICAgICpyZXN1bHQgPSBtX2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2Vz
LmNvbnRhaW5zKG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpOworICAgICpyZXN1bHQgPSBm
YWxzZTsKKyAgICBpZiAoIW1fZnJhbWVzV2l0aFVuaW5zdHJ1bWVudGVkQ2FudmFzZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIC8vIERvIG5vdCBkZXJlZiBGcmFtZSoga2V5cyBpbiB0aGUgSGFzaFNl
dCEKKyAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3BhZ2VBZ2VudC0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAg
ICAgICBpZiAobV9mcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcy5jb250YWlucyhmcmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICAqcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6Y2FwdHVyZUZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU3Ry
aW5nKiB0cmFjZUxvZ0lkKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FwdHVyZUZyYW1l
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgRnJhbWVJZCogZnJhbWVJZCwgVHJhY2VM
b2dJZCogdHJhY2VMb2dJZCkKIHsKLSAgICBpZiAoIWNoZWNrSXNFbmFibGVkKGVycm9yU3RyaW5n
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5X
b3JsZFNjcmlwdFN0YXRlKG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpOwotICAgIEluamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxl
Ojptb2R1bGVGb3JTdGF0ZShtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgc2NyaXB0U3RhdGUpOwot
ICAgIGlmIChtb2R1bGUuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgICplcnJvclN0cmluZyA9ICJJ
bnNwZWN0ZWQgZnJhbWUgaGFzIGdvbmUiOworICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lSWQgPyBt
X3BhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsICpmcmFtZUlkKSA6IG1fcGFnZUFn
ZW50LT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIG1vZHVsZS5jYXB0dXJlRnJhbWUoZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQpOworICAg
IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlKGVycm9yU3RyaW5nLCBtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOworICAgIGlm
ICghbW9kdWxlLmhhc05vVmFsdWUoKSkKKyAgICAgICAgbW9kdWxlLmNhcHR1cmVGcmFtZShlcnJv
clN0cmluZywgdHJhY2VMb2dJZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0
YXJ0Q2FwdHVyaW5nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU3RyaW5nKiB0cmFjZUxvZ0lk
KQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRDYXB0dXJpbmcoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBjb25zdCBGcmFtZUlkKiBmcmFtZUlkLCBUcmFjZUxvZ0lkKiB0cmFjZUxv
Z0lkKQogewotICAgIGlmICghY2hlY2tJc0VuYWJsZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gbWFpbldvcmxkU2NyaXB0U3Rh
dGUobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSk7Ci0gICAgSW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGUgbW9kdWxlID0gSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6Om1vZHVsZUZvclN0
YXRlKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBzY3JpcHRTdGF0ZSk7Ci0gICAgaWYgKG1vZHVs
ZS5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgKmVycm9yU3RyaW5nID0gIkluc3BlY3RlZCBmcmFt
ZSBoYXMgZ29uZSI7CisgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVJZCA/IG1fcGFnZUFnZW50LT5h
c3NlcnRGcmFtZShlcnJvclN0cmluZywgKmZyYW1lSWQpIDogbV9wYWdlQWdlbnQtPm1haW5GcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbW9kdWxl
LnN0YXJ0Q2FwdHVyaW5nKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKKyAgICBJbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZShlcnJv
clN0cmluZywgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKKyAgICBpZiAoIW1vZHVsZS5o
YXNOb1ZhbHVlKCkpCisgICAgICAgIG1vZHVsZS5zdGFydENhcHR1cmluZyhlcnJvclN0cmluZywg
dHJhY2VMb2dJZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BDYXB0dXJp
bmcoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQpCiB7
Ci0gICAgaWYgKCFjaGVja0lzRW5hYmxlZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsK
LSAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlwdENh
bnZhc01vZHVsZUZvclRyYWNlTG9nSWQoZXJyb3JTdHJpbmcsIHRyYWNlTG9nSWQpOworICAgIElu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKICAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVl
KCkpCiAgICAgICAgIG1vZHVsZS5zdG9wQ2FwdHVyaW5nKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lk
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Z2V0VHJhY2VMb2coRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIGNvbnN0IGludCogc3Rh
cnRPZmZzZXQsIGNvbnN0IGludCogbWF4TGVuZ3RoLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNhbnZh
czo6VHJhY2VMb2c+JiB0cmFjZUxvZykKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldFRy
YWNlTG9nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lk
LCBjb25zdCBpbnQqIHN0YXJ0T2Zmc2V0LCBjb25zdCBpbnQqIG1heExlbmd0aCwgUmVmUHRyPFRy
YWNlTG9nPiYgdHJhY2VMb2cpCiB7Ci0gICAgaWYgKCFjaGVja0lzRW5hYmxlZChlcnJvclN0cmlu
ZykpCi0gICAgICAgIHJldHVybjsKLSAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1
bGUgPSBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZUZvclRyYWNlTG9nSWQoZXJyb3JTdHJpbmcs
IHRyYWNlTG9nSWQpOworICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IGlu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKICAgICBp
ZiAoIW1vZHVsZS5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIG1vZHVsZS50cmFjZUxvZyhlcnJvclN0
cmluZywgdHJhY2VMb2dJZCwgc3RhcnRPZmZzZXQsIG1heExlbmd0aCwgJnRyYWNlTG9nKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVwbGF5VHJhY2VMb2coRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIGludCBzdGVwTm8sIFJlZlB0
cjxUeXBlQnVpbGRlcjo6Q2FudmFzOjpSZXNvdXJjZVN0YXRlPiYgcmVzdWx0KQordm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6cmVwbGF5VHJhY2VMb2coRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIGludCBzdGVwTm8sIFJlZlB0cjxSZXNvdXJjZVN0
YXRlPiYgcmVzdWx0KQogewotICAgIGlmICghY2hlY2tJc0VuYWJsZWQoZXJyb3JTdHJpbmcpKQot
ICAgICAgICByZXR1cm47Ci0gICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0g
aW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JUcmFjZUxvZ0lkKGVycm9yU3RyaW5nLCB0cmFj
ZUxvZ0lkKTsKKyAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZShlcnJvclN0cmluZywgdHJhY2VMb2dJZCk7CiAgICAgaWYgKCFt
b2R1bGUuaGFzTm9WYWx1ZSgpKQogICAgICAgICBtb2R1bGUucmVwbGF5VHJhY2VMb2coZXJyb3JT
dHJpbmcsIHRyYWNlTG9nSWQsIHN0ZXBObywgJnJlc3VsdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmdldFJlc291cmNlSW5mbyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVzb3VyY2VJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDYW52YXM6OlJlc291
cmNlSW5mbz4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldFJlc291cmNl
SW5mbyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVzb3VyY2VJZCwg
UmVmUHRyPFJlc291cmNlSW5mbz4mIHJlc3VsdCkKIHsKLSAgICBpZiAoIWNoZWNrSXNFbmFibGVk
KGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEluamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlIG1vZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlRm9yVHJhY2VMb2dJZChl
cnJvclN0cmluZywgcmVzb3VyY2VJZCk7CisgICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUg
bW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUoZXJyb3JTdHJpbmcsIHJlc291cmNl
SWQpOwogICAgIGlmICghbW9kdWxlLmhhc05vVmFsdWUoKSkKICAgICAgICAgbW9kdWxlLnJlc291
cmNlSW5mbyhlcnJvclN0cmluZywgcmVzb3VyY2VJZCwgJnJlc3VsdCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmdldFJlc291cmNlU3RhdGUoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIGNvbnN0IFN0cmluZyYgcmVzb3VyY2VJZCwg
UmVmUHRyPFR5cGVCdWlsZGVyOjpDYW52YXM6OlJlc291cmNlU3RhdGU+JiByZXN1bHQpCit2b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRSZXNvdXJjZVN0YXRlKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBjb25zdCBTdHJpbmcmIHJlc291cmNl
SWQsIFJlZlB0cjxSZXNvdXJjZVN0YXRlPiYgcmVzdWx0KQogewotICAgIGlmICghY2hlY2tJc0Vu
YWJsZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47Ci0gICAgSW5qZWN0ZWRTY3JpcHRD
YW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JUcmFjZUxv
Z0lkKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsKKyAgICBJbmplY3RlZFNjcmlwdENhbnZhc01v
ZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZShlcnJvclN0cmluZywgdHJh
Y2VMb2dJZCk7CiAgICAgaWYgKCFtb2R1bGUuaGFzTm9WYWx1ZSgpKQogICAgICAgICBtb2R1bGUu
cmVzb3VyY2VTdGF0ZShlcnJvclN0cmluZywgdHJhY2VMb2dJZCwgcmVzb3VyY2VJZCwgJnJlc3Vs
dCk7CiB9CiAKIFNjcmlwdE9iamVjdCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d3JhcENhbnZhczJE
UmVuZGVyaW5nQ29udGV4dEZvckluc3RydW1lbnRhdGlvbihjb25zdCBTY3JpcHRPYmplY3QmIGNv
bnRleHQpCiB7Ci0gICAgaWYgKGNvbnRleHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIEluamVjdGVkU2Ny
aXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKCZlcnJv
ciwgY29udGV4dCk7CisgICAgaWYgKG1vZHVsZS5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVy
biBTY3JpcHRPYmplY3QoKTsKLSAgICB9Ci0gICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUg
bW9kdWxlID0gSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6Om1vZHVsZUZvclN0YXRlKG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLCBjb250ZXh0LnNjcmlwdFN0YXRlKCkpOwotICAgIGlmIChtb2R1
bGUuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiBtb2R1bGUud3JhcENh
bnZhczJEQ29udGV4dChjb250ZXh0KTsKKyAgICByZXR1cm4gbm90aWZ5UmVuZGVyaW5nQ29udGV4
dFdhc1dyYXBwZWQobW9kdWxlLndyYXBDYW52YXMyRENvbnRleHQoY29udGV4dCkpOworCiB9CiAK
ICNpZiBFTkFCTEUoV0VCR0wpCiBTY3JpcHRPYmplY3QgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Ondy
YXBXZWJHTFJlbmRlcmluZ0NvbnRleHRGb3JJbnN0cnVtZW50YXRpb24oY29uc3QgU2NyaXB0T2Jq
ZWN0JiBnbENvbnRleHQpCiB7Ci0gICAgaWYgKGdsQ29udGV4dC5oYXNOb1ZhbHVlKCkpIHsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTY3JpcHRPYmplY3Qo
KTsKLSAgICB9Ci0gICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gSW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGU6Om1vZHVsZUZvclN0YXRlKG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLCBnbENvbnRleHQuc2NyaXB0U3RhdGUoKSk7Ci0gICAgaWYgKG1vZHVsZS5oYXNOb1ZhbHVl
KCkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgRXJyb3JTdHJpbmcgZXJy
b3I7CisgICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3Jp
cHRDYW52YXNNb2R1bGUoJmVycm9yLCBnbENvbnRleHQpOworICAgIGlmIChtb2R1bGUuaGFzTm9W
YWx1ZSgpKQogICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7Ci0gICAgfQotICAgIHJldHVy
biBtb2R1bGUud3JhcFdlYkdMQ29udGV4dChnbENvbnRleHQpOworICAgIHJldHVybiBub3RpZnlS
ZW5kZXJpbmdDb250ZXh0V2FzV3JhcHBlZChtb2R1bGUud3JhcFdlYkdMQ29udGV4dChnbENvbnRl
eHQpKTsKIH0KICNlbmRpZgogCi1JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6aW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVGb3JUcmFjZUxvZ0lkKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkKQorU2NyaXB0T2Jq
ZWN0IEluc3BlY3RvckNhbnZhc0FnZW50Ojpub3RpZnlSZW5kZXJpbmdDb250ZXh0V2FzV3JhcHBl
ZChjb25zdCBTY3JpcHRPYmplY3QmIHdyYXBwZWRDb250ZXh0KQogewotICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2Ny
aXB0Rm9yT2JqZWN0SWQodHJhY2VMb2dJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05v
VmFsdWUoKSkgewotICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW5zcGVjdGVkIGZyYW1lIGhhcyBn
b25lIjsKKyAgICBBU1NFUlQobV9mcm9udGVuZCk7CisgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlID0gd3JhcHBlZENvbnRleHQuc2NyaXB0U3RhdGUoKTsKKyAgICBET01XaW5kb3cqIGRvbVdp
bmRvdyA9IHNjcmlwdFN0YXRlID8gZG9tV2luZG93RnJvbVNjcmlwdFN0YXRlKHNjcmlwdFN0YXRl
KSA6IDA7CisgICAgRnJhbWUqIGZyYW1lID0gZG9tV2luZG93ID8gZG9tV2luZG93LT5mcmFtZSgp
IDogMDsKKyAgICBTdHJpbmcgZnJhbWVJZCA9IG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKTsK
KyAgICBpZiAoIWZyYW1lSWQuaXNFbXB0eSgpKQorICAgICAgICBtX2Zyb250ZW5kLT5mcmFtZVdp
dGhDYW52YXNlcyhmcmFtZUlkKTsKKyAgICByZXR1cm4gd3JhcHBlZENvbnRleHQ7Cit9CisKK0lu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIEluc3BlY3RvckNhbnZhc0FnZW50OjppbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSkKK3sKKyAgICBpZiAoIWNoZWNrSXNFbmFibGVkKGVycm9yU3RyaW5nKSkKICAg
ICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKCk7Ci0gICAgfQotICAgIElu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlOjptb2R1bGVGb3JTdGF0ZShtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgaW5qZWN0ZWRTY3Jp
cHQuc2NyaXB0U3RhdGUoKSk7CisgICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxl
ID0gSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGU6Om1vZHVsZUZvclN0YXRlKG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLCBzY3JpcHRTdGF0ZSk7CiAgICAgaWYgKG1vZHVsZS5oYXNOb1ZhbHVlKCkp
IHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICplcnJvclN0cmluZyA9
ICJJbnRlcm5hbCBlcnJvcjogbm8gQ2FudmFzIG1vZHVsZSI7Ci0gICAgICAgIHJldHVybiBJbmpl
Y3RlZFNjcmlwdENhbnZhc01vZHVsZSgpOwogICAgIH0KICAgICByZXR1cm4gbW9kdWxlOwogfQog
CitJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBJbnNwZWN0b3JDYW52YXNBZ2VudDo6aW5qZWN0
ZWRTY3JpcHRDYW52YXNNb2R1bGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTY3Jp
cHRPYmplY3QmIHNjcmlwdE9iamVjdCkKK3sKKyAgICBpZiAoIWNoZWNrSXNFbmFibGVkKGVycm9y
U3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKCk7Cisg
ICAgaWYgKHNjcmlwdE9iamVjdC5oYXNOb1ZhbHVlKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICplcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogb3JpZ2lu
YWwgU2NyaXB0T2JqZWN0IGhhcyBubyB2YWx1ZSI7CisgICAgICAgIHJldHVybiBJbmplY3RlZFNj
cmlwdENhbnZhc01vZHVsZSgpOworICAgIH0KKyAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRDYW52
YXNNb2R1bGUoZXJyb3JTdHJpbmcsIHNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpKTsKK30KKwor
SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCkKK3sKKyAgICBpZiAoIWNoZWNrSXNFbmFibGVkKGVycm9yU3RyaW5nKSkKKyAg
ICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKCk7CisgICAgSW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+aW5qZWN0ZWRT
Y3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05v
VmFsdWUoKSkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW5zcGVjdGVkIGZyYW1lIGhhcyBn
b25lIjsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKCk7CisgICAg
fQorICAgIHJldHVybiBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZShlcnJvclN0cmluZywgaW5q
ZWN0ZWRTY3JpcHQuc2NyaXB0U3RhdGUoKSk7Cit9CisKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OmZpbmRGcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcygpCiB7CiAgICAgY2xhc3Mg
Tm9kZVZpc2l0b3IgOiBwdWJsaWMgV3JhcHBlZE5vZGVWaXNpdG9yIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIE5vZGVWaXNpdG9yKFBhZ2UqIHBhZ2UsIEZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENh
bnZhc2VzJiBoYXNVbmluc3RydW1lbnRlZENhbnZhc2VzUmVzdWx0cykKKyAgICAgICAgTm9kZVZp
c2l0b3IoUGFnZSogcGFnZSwgSGFzaFNldDxGcmFtZSo+JiByZXN1bHQpCiAgICAgICAgICAgICA6
IG1fcGFnZShwYWdlKQotICAgICAgICAgICAgLCBtX2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENh
bnZhc2VzKGhhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXNSZXN1bHRzKQorICAgICAgICAgICAgLCBt
X2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2VzKHJlc3VsdCkKICAgICAgICAgewogICAg
ICAgICB9CiAKQEAgLTI2MywxMCArMjg3LDE3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmZpbmRGcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcygpCiAKICAgICBwcml2YXRlOgog
ICAgICAgICBQYWdlKiBtX3BhZ2U7Ci0gICAgICAgIEZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENh
bnZhc2VzJiBtX2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2VzOwotICAgIH0gbm9kZVZp
c2l0b3IobV9pbnNwZWN0ZWRQYWdlLCBtX2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2Vz
KTsKKyAgICAgICAgSGFzaFNldDxGcmFtZSo+JiBtX2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENh
bnZhc2VzOworICAgIH0gbm9kZVZpc2l0b3IobV9wYWdlQWdlbnQtPnBhZ2UoKSwgbV9mcmFtZXNX
aXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcyk7CiAKKyAgICBtX2ZyYW1lc1dpdGhVbmluc3RydW1l
bnRlZENhbnZhc2VzLmNsZWFyKCk7CiAgICAgU2NyaXB0UHJvZmlsZXI6OnZpc2l0Tm9kZVdyYXBw
ZXJzKCZub2RlVmlzaXRvcik7CisKKyAgICBmb3IgKEhhc2hTZXQ8RnJhbWUqPjo6aXRlcmF0b3Ig
aXQgPSBtX2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2VzLmJlZ2luKCk7IGl0ICE9IG1f
ZnJhbWVzV2l0aFVuaW5zdHJ1bWVudGVkQ2FudmFzZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAg
U3RyaW5nIGZyYW1lSWQgPSBtX3BhZ2VBZ2VudC0+ZnJhbWVJZCgqaXQpOworICAgICAgICBpZiAo
IWZyYW1lSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9mcm9udGVuZC0+ZnJhbWVXaXRoQ2Fu
dmFzZXMoZnJhbWVJZCk7CisgICAgfQogfQogCiBib29sIEluc3BlY3RvckNhbnZhc0FnZW50Ojpj
aGVja0lzRW5hYmxlZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpIGNvbnN0CkBAIC0yNzcsMTEg
KzMwOCwyNCBAQCBib29sIEluc3BlY3RvckNhbnZhc0FnZW50OjpjaGVja0lzRW5hYmxlZChFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNldCgpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjpmcmFtZU5hdmlnYXRlZChGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFtX2VuYWJsZWQpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZnJhbWUgPT0gbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgp
KQorICAgICAgICBtX2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2VzLmNsZWFyKCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIHdoaWxlIChmcmFtZSkgeworICAgICAgICAgICAgbV9mcmFtZXNX
aXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcy5yZW1vdmUoZnJhbWUpOworICAgICAgICAgICAgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZnJhbWVEZXRhY2hlZChGcmFtZSogZnJhbWUp
CiB7Ci0gICAgbV9mcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcy5jbGVhcigpOwogICAg
IGlmIChtX2VuYWJsZWQpCi0gICAgICAgIGZpbmRGcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52
YXNlcygpOworICAgICAgICBtX2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2VzLnJlbW92
ZShmcmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmgKaW5kZXggNjczN2Y2NTI1MmI5MDRl
Nzk4N2NlMGQ5YzNhODNhZmM2YmVmMTkxMi4uMWNmMWI1OGY2YWU3OTU2ZGYxNTAxNWNlZmY0ZmQw
OTNkMzNkZjQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhc0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhc0FnZW50LmgKQEAgLTQ3LDE4ICs0NywxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBGcmFtZTsKIGNsYXNzIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlOwogY2xhc3MgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyOworY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zcGVj
dG9yU3RhdGU7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwotY2xhc3MgUGFnZTsKIGNsYXNz
IFNjcmlwdE9iamVjdDsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIElu
c3BlY3RvckNhbnZhc0FnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudDxJbnNwZWN0b3JD
YW52YXNBZ2VudD4sIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FudmFzQ29t
bWFuZEhhbmRsZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckNh
bnZhc0FnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGUqIHN0YXRlLCBQYWdlKiBwYWdlLCBJbmplY3RlZFNj
cmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJbnNwZWN0b3JDYW52YXNBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckNvbXBvc2l0ZVN0YXRlKiBzdGF0ZSwgSW5zcGVjdG9y
UGFnZUFnZW50KiBwYWdlQWdlbnQsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JD
YW52YXNBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSwgcGFnZSwgaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yQ2FudmFz
QWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgc3RhdGUsIHBhZ2VBZ2VudCwgaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKSk7CiAgICAgfQogICAgIH5JbnNwZWN0b3JDYW52YXNBZ2VudCgpOwogCkBAIC02
Nyw3ICs2Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwogCiAgICAg
Ly8gQ2FsbGVkIGZyb20gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCi0gICAgdm9pZCByZXNldCgp
OworICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoRnJhbWUqKTsKKyAgICB2b2lkIGZyYW1lRGV0YWNo
ZWQoRnJhbWUqKTsKIAogICAgIC8vIENhbGxlZCBmcm9tIEluc3BlY3RvckNhbnZhc0luc3RydW1l
bnRhdGlvbgogICAgIFNjcmlwdE9iamVjdCB3cmFwQ2FudmFzMkRSZW5kZXJpbmdDb250ZXh0Rm9y
SW5zdHJ1bWVudGF0aW9uKGNvbnN0IFNjcmlwdE9iamVjdCYpOwpAQCAtODAsOCArODEsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKTsKICAgICB2aXJ0
dWFsIHZvaWQgZHJvcFRyYWNlTG9nKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJik7CiAgICAg
dmlydHVhbCB2b2lkIGhhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXMoRXJyb3JTdHJpbmcqLCBib29s
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGNhcHR1cmVGcmFtZShFcnJvclN0cmluZyosIFN0cmluZyop
OwotICAgIHZpcnR1YWwgdm9pZCBzdGFydENhcHR1cmluZyhFcnJvclN0cmluZyosIFN0cmluZyop
OworICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlRnJhbWUoRXJyb3JTdHJpbmcqLCBjb25zdCBUeXBl
QnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCosIFR5cGVCdWlsZGVyOjpDYW52YXM6OlRyYWNlTG9n
SWQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRDYXB0dXJpbmcoRXJyb3JTdHJpbmcqLCBjb25z
dCBUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZCosIFR5cGVCdWlsZGVyOjpDYW52YXM6OlRy
YWNlTG9nSWQqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcENhcHR1cmluZyhFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBnZXRUcmFjZUxvZyhFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYsIGNvbnN0IGludCosIGNvbnN0IGludCosIFJlZlB0cjxUeXBlQnVp
bGRlcjo6Q2FudmFzOjpUcmFjZUxvZz4mKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwbGF5VHJhY2VM
b2coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBpbnQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6
Q2FudmFzOjpSZXNvdXJjZVN0YXRlPiYpOwpAQCAtODksMTggKzkwLDIxIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UmVzb3VyY2VTdGF0ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q2FudmFzOjpSZXNvdXJjZVN0
YXRlPiYpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3RvckNhbnZhc0FnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqLCBJbnNwZWN0b3JDb21wb3NpdGVTdGF0ZSosIFBhZ2UqLCBJbmplY3RlZFNjcmlw
dE1hbmFnZXIqKTsKKyAgICBJbnNwZWN0b3JDYW52YXNBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGUqLCBJbnNwZWN0b3JQYWdlQWdlbnQqLCBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqKTsKKworICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIGluamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlKEVycm9yU3RyaW5nKiwgU2NyaXB0U3RhdGUqKTsKKyAgICBJ
bmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZShFcnJv
clN0cmluZyosIGNvbnN0IFNjcmlwdE9iamVjdCYpOworICAgIEluamVjdGVkU2NyaXB0Q2FudmFz
TW9kdWxlIGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJik7CiAKLSAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBpbmplY3RlZFNjcmlwdENh
bnZhc01vZHVsZUZvclRyYWNlTG9nSWQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIGZpbmRGcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcygpOwogICAgIGJvb2wg
Y2hlY2tJc0VuYWJsZWQoRXJyb3JTdHJpbmcqKSBjb25zdDsKKyAgICBTY3JpcHRPYmplY3Qgbm90
aWZ5UmVuZGVyaW5nQ29udGV4dFdhc1dyYXBwZWQoY29uc3QgU2NyaXB0T2JqZWN0Jik7CiAKLSAg
ICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CisgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VB
Z2VudDsKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OwogICAgIEluc3BlY3RvckZyb250ZW5kOjpDYW52YXMqIG1fZnJvbnRlbmQ7CiAgICAgYm9vbCBt
X2VuYWJsZWQ7Ci0gICAgdHlwZWRlZiBIYXNoU2V0PEZyYW1lKj4gRnJhbWVzV2l0aFVuaW5zdHJ1
bWVudGVkQ2FudmFzZXM7Ci0gICAgRnJhbWVzV2l0aFVuaW5zdHJ1bWVudGVkQ2FudmFzZXMgbV9m
cmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlczsKKyAgICBIYXNoU2V0PEZyYW1lKj4gbV9m
cmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAppbmRleCAyZTVlNWQzYTVmZDE1OTJlNzI4NzY4Y2M5MmI3ZTNkYWE1YjAyM2U2Li4zNmQw
NWJkODZhODhhYjA4MTNjMWEzMDJhMTM5MjFlZDU5ZjZlOGRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xNTQsNyArMTU0LDcg
QEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJ
bnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckMKICAgICBtX2FnZW50cy5hcHBlbmQoSW5zcGVjdG9y
V29ya2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUu
Z2V0KCkpKTsKICNlbmRpZgogCi0gICAgbV9hZ2VudHMuYXBwZW5kKEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBw
YWdlLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQoKSkpOworICAgIG1fYWdlbnRzLmFwcGVu
ZChJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQo
KSwgbV9zdGF0ZS5nZXQoKSwgcGFnZUFnZW50LCBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5nZXQo
KSkpOwogCiAgICAgbV9hZ2VudHMuYXBwZW5kKEluc3BlY3RvcklucHV0QWdlbnQ6OmNyZWF0ZSht
X2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmNwcAppbmRleCAzYTFlNzlkOWU4MzRlNTRlMWI2YmY4MWRhMmU2OGNlZjc4ZWRkNjNhLi5kMjkz
MjllOGRhY2EwYTBjMWE3OTM3OGQ1OTNiM2M4M2UyMTNkYzE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtOTAy
LDYgKzkwMiw4IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsb2FkRXZlbnRGaXJl
ZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVuCiAKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUqIGZyYW1lKQogeworICAgIGlmIChJbnNw
ZWN0b3JDYW52YXNBZ2VudCogY2FudmFzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNw
ZWN0b3JDYW52YXNBZ2VudCgpKQorICAgICAgICBjYW52YXNBZ2VudC0+ZnJhbWVEZXRhY2hlZChm
cmFtZSk7CiAgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy0+aW5zcGVjdG9yUGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZnJh
bWVEZXRhY2hlZChmcmFtZSk7CiB9CkBAIC05MzcsMTAgKzkzOSwxMCBAQCB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkQ29tbWl0TG9hZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudAogICAgICAgICBpZiAoSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQqIGxheWVyVHJl
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQoKSkK
ICAgICAgICAgICAgIGxheWVyVHJlZUFnZW50LT5yZXNldCgpOwogI2VuZGlmCi0gICAgICAgIGlm
IChJbnNwZWN0b3JDYW52YXNBZ2VudCogY2FudmFzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LT5pbnNwZWN0b3JDYW52YXNBZ2VudCgpKQotICAgICAgICAgICAgY2FudmFzQWdlbnQtPnJlc2V0
KCk7CiAgICAgICAgIGluc3BlY3RvckFnZW50LT5kaWRDb21taXRMb2FkKCk7CiAgICAgfQorICAg
IGlmIChJbnNwZWN0b3JDYW52YXNBZ2VudCogY2FudmFzQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdl
bnRzLT5pbnNwZWN0b3JDYW52YXNBZ2VudCgpKQorICAgICAgICBjYW52YXNBZ2VudC0+ZnJhbWVO
YXZpZ2F0ZWQobG9hZGVyLT5mcmFtZSgpKTsKICAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKICAg
ICAgICAgcGFnZUFnZW50LT5mcmFtZU5hdmlnYXRlZChsb2FkZXIpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCBjNDdiNWUyYzVi
NjQxZGM3YTc5NDBmYmRiZDQwYzQ1MzZiNzdlNjdkLi4xZWRhNjZmMGRmYTU0Mjg0MDMwNzI4ZWEw
YWE0ODhmMGFjMGUyOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcApAQCAtODczLDEyICs4NzMsMTEgQEAgU3RyaW5nIEluc3BlY3RvclBh
Z2VBZ2VudDo6bG9hZGVySWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICByZXR1cm4gaWRl
bnRpZmllcjsKIH0KIAotRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RnJhbWUoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTdHJpbmcgZnJhbWVJZCkKK0ZyYW1lKiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmFzc2VydEZyYW1lKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBmcmFtZUlkKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lRm9ySWQoZnJhbWVJZCk7
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgKmVycm9yU3RyaW5nID0gIk5vIGZyYW1lIGZvciBn
aXZlbiBpZCBmb3VuZCI7Ci0KICAgICByZXR1cm4gZnJhbWU7CiB9CiAKQEAgLTg4OSw3ICs4ODgs
NiBAQCBEb2N1bWVudExvYWRlciogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExv
YWRlcihFcnJvclN0cmluZyogZXJyb3JTdHJpbgogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVu
dExvYWRlciA9IGZyYW1lTG9hZGVyID8gZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCkgOiAw
OwogICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCiAgICAgICAgICplcnJvclN0cmluZyA9ICJObyBk
b2N1bWVudExvYWRlciBmb3IgZ2l2ZW4gZnJhbWUgZm91bmQiOwotCiAgICAgcmV0dXJuIGRvY3Vt
ZW50TG9hZGVyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmgKaW5kZXggOTczZTE1YzJhZjZhNzYxNjhlN2U1MjljNTNlNmNkN2QwNDE0ZjhlNS4u
NzAzNWE5Nzg2YzBjNzhmNGI2NWZlNGEzMmQyZGEzZDE3YTlhZjRmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtMTY0LDcgKzE2NCw3IEBA
IHB1YmxpYzoKICAgICBGcmFtZSogZnJhbWVGb3JJZChjb25zdCBTdHJpbmcmIGZyYW1lSWQpOwog
ICAgIFN0cmluZyBmcmFtZUlkKEZyYW1lKik7CiAgICAgU3RyaW5nIGxvYWRlcklkKERvY3VtZW50
TG9hZGVyKik7Ci0gICAgRnJhbWUqIGFzc2VydEZyYW1lKEVycm9yU3RyaW5nKiwgU3RyaW5nIGZy
YW1lSWQpOworICAgIEZyYW1lKiBhc3NlcnRGcmFtZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCk7CiAgICAgU3RyaW5nIHNjcmlwdFByZXByb2Nlc3NvcigpIHsgcmV0dXJuIG1f
c2NyaXB0UHJlcHJvY2Vzc29yOyB9CiAgICAgc3RhdGljIERvY3VtZW50TG9hZGVyKiBhc3NlcnRE
b2N1bWVudExvYWRlcihFcnJvclN0cmluZyosIEZyYW1lKik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184972</attachid>
            <date>2013-01-28 05:18:33 -0800</date>
            <delta_ts>2013-01-29 04:45:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107951-20130128171519.patch</filename>
            <type>text/plain</type>
            <size>21197</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGVkOWY1YTRjYTY3ZmQ5
YjA3Nzg0NTg5MTEzNjdjZGZhYTczNDE4MC4uMzQxMjZmM2RhMzc4MjU3MWZiMjU2OWFiMWViMGYw
ZWY1MGFhNzIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQzIEBACiAyMDEzLTAxLTI4ICBBbmRy
ZXkgQWRhaWtpbiAgPGFhbmRyZXlAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFtDYW52YXNdIHN1cHBvcnQgaW5zdHJ1bWVudGluZyBjYW52YXNlcyBpbiBpZnJhbWVzIChi
YWNrZW5kIHNpZGUpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDc5NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBY2NlcHQgb3B0aW9uYWwgRnJhbWVJZCBhcmd1bWVudCBmb3IgY2FwdHVyZUZyYW1lIGFu
ZCBzdGFydENhcHR1cmluZyBjb21tYW5kcy4KKyAgICAgICAgQWRkIGV2ZW50IHRvIHRoZSBwcm90
b2NvbCB0byBpbmZvcm0gYWJvdXQgaW5zdHJ1bWVudGVkIGNhbnZhcyBjb250ZXh0IGNyZWF0aW9u
LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6Omhhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhcHR1cmVGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRDYXB0dXJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldFRyYWNlTG9nKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpyZXBsYXlUcmFjZUxvZyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Z2V0UmVzb3VyY2VJbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRSZXNvdXJjZVN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojp3cmFwQ2FudmFzMkRSZW5kZXJp
bmdDb250ZXh0Rm9ySW5zdHJ1bWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhc0FnZW50Ojp3cmFwV2ViR0xSZW5kZXJpbmdDb250ZXh0Rm9ySW5zdHJ1bWVudGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpub3RpZnlSZW5kZXJp
bmdDb250ZXh0V2FzV3JhcHBlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kRnJhbWVzV2l0aFVuaW5zdHJ1bWVudGVkQ2Fu
dmFzZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1lTmF2
aWdhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpmcmFtZURl
dGFjaGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3JDYW52YXNBZ2VudCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXRhY2hlZEZyb21Q
YXJlbnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkQ29tbWl0TG9hZEltcGwpOgorCisyMDEzLTAxLTI4ICBBbmRyZXkgQWRhaWtpbiAgPGFhbmRy
ZXlAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtDYW52YXNdIHJlZmFj
dG9yaW5nIGluIENhbnZhc0FnZW50IHRvIHJlZHVjZSBjb2RlIGR1cHMKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODA2NAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KaW5kZXggZWMwMjdlMWIxNWQ2MDdkNmI5ZmQ3NzBkY2Fh
NTk3YWMzMTFkZmQwYS4uN2NhOWM2YWU5ODBlM2RhOTJkNmFlMzI3YWI0N2NlZGMwODIwOTM5NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgpAQCAtMzMyOCwxNSArMzMy
OCwyMyBAQAogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAi
bmFtZSI6ICJjYXB0dXJlRnJhbWUiLAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwor
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZyYW1lSWQiLCAiJHJlZiI6ICJOZXR3b3Jr
LkZyYW1lSWQiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBv
ZiB0aGUgZnJhbWUgY29udGFpbmluZyBkb2N1bWVudCB3aG9zZSBjYW52YXNlcyBhcmUgdG8gYmUg
Y2FwdHVyZWQuIElmIG9taXR0ZWQsIG1haW4gZnJhbWUgaXMgYXNzdW1lZC4iIH0KKyAgICAgICAg
ICAgICAgICBdLAogICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRyYWNlTG9nSWQiLCAiJHJlZiI6ICJUcmFjZUxvZ0lkIiB9Ci0gICAg
ICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyYWNlTG9nSWQi
LCAiJHJlZiI6ICJUcmFjZUxvZ0lkIiwgImRlc2NyaXB0aW9uIjogIklkZW50aWZpZXIgb2YgdGhl
IHRyYWNlIGxvZyBjb250YWluaW5nIGNhcHR1cmVkIGNhbnZhcyBjYWxscy4iIH0KKyAgICAgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydHMgKG9yIGNv
bnRpbnVlcykgYSBjYW52YXMgZnJhbWUgY2FwdHVyaW5nIHdoaWNoIHdpbGwgYmUgc3RvcHBlZCBh
dXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBuZXh0IGZyYW1lIGlzIHByZXBhcmVkLiIKICAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIm5hbWUiOiAic3RhcnRDYXB0
dXJpbmciLAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImZyYW1lSWQiLCAiJHJlZiI6ICJOZXR3b3JrLkZyYW1lSWQiLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBvZiB0aGUgZnJhbWUgY29u
dGFpbmluZyBkb2N1bWVudCB3aG9zZSBjYW52YXNlcyBhcmUgdG8gYmUgY2FwdHVyZWQuIElmIG9t
aXR0ZWQsIG1haW4gZnJhbWUgaXMgYXNzdW1lZC4iIH0KKyAgICAgICAgICAgICAgICBdLAogICAg
ICAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InRyYWNlTG9nSWQiLCAiJHJlZiI6ICJUcmFjZUxvZ0lkIiB9Ci0gICAgICAgICAgICAgICAgXQor
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyYWNlTG9nSWQiLCAiJHJlZiI6ICJUcmFj
ZUxvZ0lkIiwgImRlc2NyaXB0aW9uIjogIklkZW50aWZpZXIgb2YgdGhlIHRyYWNlIGxvZyBjb250
YWluaW5nIGNhcHR1cmVkIGNhbnZhcyBjYWxscy4iIH0KKyAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydHMgKG9yIGNvbnRpbnVlcykgY29uc2Vj
dXRpdmUgY2FudmFzIGZyYW1lcyBjYXB0dXJpbmcuIFRoZSBjYXB0dXJpbmcgaXMgc3RvcHBlZCBi
eSB0aGUgY29ycmVzcG9uZGluZyBzdG9wQ2FwdHVyaW5nIGNvbW1hbmQuIgogICAgICAgICAgICAg
fSwKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAibmFtZSI6ICJzdG9wQ2FwdHVyaW5n
IiwKQEAgLTMzODUsNyArMzM5MywxNSBAQAogICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAg
IH0KICAgICAgICAgXSwKLSAgICAgICAgImV2ZW50cyI6IFtdCisgICAgICAgICJldmVudHMiOiBb
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAiY29udGV4dENyZWF0ZWQi
LAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImZyYW1lSWQiLCAiJHJlZiI6ICJOZXR3b3JrLkZyYW1lSWQiLCAiZGVzY3JpcHRp
b24iOiAiSWRlbnRpZmllciBvZiB0aGUgZnJhbWUgY29udGFpbmluZyBhIGNhbnZhcyB3aXRoIGEg
Y29udGV4dC4iIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJGaXJlZCB3aGVuIGEgY2FudmFzIGNvbnRleHQgaGFzIGJlZW4gY3JlYXRlZCBpbiB0
aGUgZ2l2ZW4gZnJhbWUuIFRoZSBjb250ZXh0IG1heSBub3QgYmUgaW5zdHJ1bWVudGVkIChzZWUg
aGFzVW5pbnN0cnVtZW50ZWRDYW52YXNlcyBjb21tYW5kKS4iCisgICAgICAgICAgICB9CisgICAg
ICAgIF0KICAgICB9LAogICAgIHsKICAgICAgICAgImRvbWFpbiI6ICJJbnB1dCIsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAppbmRleCA4
MzQ1OGFkMDQ4N2E5NmU5NmNmZGYwNTQ4MmI2ZWE2YzViMmVkYzJmLi5jYWMzOTc2NjFlYzVjMzVk
NmIyNDU4MjY2MGI1ZGVjODU0MDExMjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
ICJJbnNwZWN0b3JDYW52YXNBZ2VudC5oIgogCiAjaW5jbHVkZSAiQmluZGluZ1Zpc2l0b3JzLmgi
CisjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJI
VE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNDIsNiArNDMs
NyBAQAogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmgiCiAjaW5jbHVkZSAi
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0
ZS5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJQYWdlLmgi
CkBAIC00OSwxNSArNTEsMjEgQEAKICNpbmNsdWRlICJTY3JpcHRQcm9maWxlci5oIgogI2luY2x1
ZGUgIlNjcmlwdFN0YXRlLmgiCiAKK3VzaW5nIFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpDYW52YXM6
OlJlc291cmNlSW5mbzsKK3VzaW5nIFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpDYW52YXM6OlJlc291
cmNlU3RhdGU7Cit1c2luZyBXZWJDb3JlOjpUeXBlQnVpbGRlcjo6Q2FudmFzOjpUcmFjZUxvZzsK
K3VzaW5nIFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpDYW52YXM6OlRyYWNlTG9nSWQ7Cit1c2luZyBX
ZWJDb3JlOjpUeXBlQnVpbGRlcjo6TmV0d29yazo6RnJhbWVJZDsKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBuYW1lc3BhY2UgQ2FudmFzQWdlbnRTdGF0ZSB7CiBzdGF0aWMgY29uc3QgY2hhciBj
YW52YXNBZ2VudEVuYWJsZWRbXSA9ICJjYW52YXNBZ2VudEVuYWJsZWQiOwogfTsKIAotSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6Okluc3BlY3RvckNhbnZhc0FnZW50KEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckNvbXBvc2l0ZVN0YXRlKiBzdGF0ZSwgUGFn
ZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCitJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdlbnQoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yQ29tcG9zaXRlU3RhdGUqIHN0YXRl
LCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBp
bmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgOiBJbnNwZWN0b3JCYXNlQWdlbnQ8SW5zcGVjdG9y
Q2FudmFzQWdlbnQ+KCJDYW52YXMiLCBpbnN0cnVtZW50aW5nQWdlbnRzLCBzdGF0ZSkKLSAgICAs
IG1faW5zcGVjdGVkUGFnZShwYWdlKQorICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50KQogICAg
ICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwg
bV9mcm9udGVuZCgwKQogICAgICwgbV9lbmFibGVkKGZhbHNlKQpAQCAtMTE3LDE5ICsxMjUsMjUg
QEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6aGFzVW5pbnN0cnVtZW50ZWRDYW52YXNlcyhF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGIKIHsKICAgICBpZiAoIWNoZWNrSXNFbmFibGVkKGVy
cm9yU3RyaW5nKSkKICAgICAgICAgcmV0dXJuOwotICAgICpyZXN1bHQgPSBtX2ZyYW1lc1dpdGhV
bmluc3RydW1lbnRlZENhbnZhc2VzLmNvbnRhaW5zKG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1l
KCkpOworICAgICpyZXN1bHQgPSAhbV9mcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcy5p
c0VtcHR5KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhcHR1cmVGcmFtZShF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFN0cmluZyogdHJhY2VMb2dJZCkKK3ZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmNhcHR1cmVGcmFtZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNv
bnN0IEZyYW1lSWQqIGZyYW1lSWQsIFRyYWNlTG9nSWQqIHRyYWNlTG9nSWQpCiB7Ci0gICAgSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGUoZXJyb3JTdHJpbmcsIG1haW5Xb3JsZFNjcmlwdFN0YXRlKG1faW5zcGVjdGVkUGFnZS0+bWFp
bkZyYW1lKCkpKTsKKyAgICBGcmFtZSogZnJhbWUgPSBmcmFtZUlkID8gbV9wYWdlQWdlbnQtPmFz
c2VydEZyYW1lKGVycm9yU3RyaW5nLCAqZnJhbWVJZCkgOiBtX3BhZ2VBZ2VudC0+bWFpbkZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlIG1vZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKGVycm9yU3Ry
aW5nLCBtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOwogICAgIGlmICghbW9kdWxlLmhhc05v
VmFsdWUoKSkKICAgICAgICAgbW9kdWxlLmNhcHR1cmVGcmFtZShlcnJvclN0cmluZywgdHJhY2VM
b2dJZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0YXJ0Q2FwdHVyaW5nKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgU3RyaW5nKiB0cmFjZUxvZ0lkKQordm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6c3RhcnRDYXB0dXJpbmcoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBj
b25zdCBGcmFtZUlkKiBmcmFtZUlkLCBUcmFjZUxvZ0lkKiB0cmFjZUxvZ0lkKQogewotICAgIElu
amVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlKGVycm9yU3RyaW5nLCBtYWluV29ybGRTY3JpcHRTdGF0ZShtX2luc3BlY3RlZFBhZ2UtPm1h
aW5GcmFtZSgpKSk7CisgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVJZCA/IG1fcGFnZUFnZW50LT5h
c3NlcnRGcmFtZShlcnJvclN0cmluZywgKmZyYW1lSWQpIDogbV9wYWdlQWdlbnQtPm1haW5GcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBJbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZShlcnJvclN0
cmluZywgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKICAgICBpZiAoIW1vZHVsZS5oYXNO
b1ZhbHVlKCkpCiAgICAgICAgIG1vZHVsZS5zdGFydENhcHR1cmluZyhlcnJvclN0cmluZywgdHJh
Y2VMb2dJZCk7CiB9CkBAIC0xNDEsMjggKzE1NSwyOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpzdG9wQ2FwdHVyaW5nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JgogICAgICAgICBtb2R1bGUuc3RvcENhcHR1cmluZyhlcnJvclN0cmluZywgdHJhY2VMb2dJZCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmdldFRyYWNlTG9nKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBjb25zdCBpbnQqIHN0YXJ0
T2Zmc2V0LCBjb25zdCBpbnQqIG1heExlbmd0aCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDYW52YXM6
OlRyYWNlTG9nPiYgdHJhY2VMb2cpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRUcmFj
ZUxvZyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCwg
Y29uc3QgaW50KiBzdGFydE9mZnNldCwgY29uc3QgaW50KiBtYXhMZW5ndGgsIFJlZlB0cjxUcmFj
ZUxvZz4mIHRyYWNlTG9nKQogewogICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVs
ZSA9IGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lkKTsK
ICAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIG1vZHVsZS50cmFjZUxvZyhl
cnJvclN0cmluZywgdHJhY2VMb2dJZCwgc3RhcnRPZmZzZXQsIG1heExlbmd0aCwgJnRyYWNlTG9n
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVwbGF5VHJhY2VMb2coRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIGludCBzdGVwTm8s
IFJlZlB0cjxUeXBlQnVpbGRlcjo6Q2FudmFzOjpSZXNvdXJjZVN0YXRlPiYgcmVzdWx0KQordm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVwbGF5VHJhY2VMb2coRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHRyYWNlTG9nSWQsIGludCBzdGVwTm8sIFJlZlB0cjxSZXNv
dXJjZVN0YXRlPiYgcmVzdWx0KQogewogICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1v
ZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlKGVycm9yU3RyaW5nLCB0cmFjZUxvZ0lk
KTsKICAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIG1vZHVsZS5yZXBsYXlU
cmFjZUxvZyhlcnJvclN0cmluZywgdHJhY2VMb2dJZCwgc3RlcE5vLCAmcmVzdWx0KTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Z2V0UmVzb3VyY2VJbmZvKEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXNvdXJjZUlkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNhbnZhczo6UmVzb3VyY2VJbmZvPiYgcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6Z2V0UmVzb3VyY2VJbmZvKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiByZXNvdXJjZUlkLCBSZWZQdHI8UmVzb3VyY2VJbmZvPiYgcmVzdWx0KQogewogICAgIEluamVj
dGVkU2NyaXB0Q2FudmFzTW9kdWxlIG1vZHVsZSA9IGluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxl
KGVycm9yU3RyaW5nLCByZXNvdXJjZUlkKTsKICAgICBpZiAoIW1vZHVsZS5oYXNOb1ZhbHVlKCkp
CiAgICAgICAgIG1vZHVsZS5yZXNvdXJjZUluZm8oZXJyb3JTdHJpbmcsIHJlc291cmNlSWQsICZy
ZXN1bHQpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpnZXRSZXNvdXJjZVN0YXRl
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0cmFjZUxvZ0lkLCBjb25z
dCBTdHJpbmcmIHJlc291cmNlSWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q2FudmFzOjpSZXNvdXJj
ZVN0YXRlPiYgcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Z2V0UmVzb3VyY2VT
dGF0ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHJhY2VMb2dJZCwg
Y29uc3QgU3RyaW5nJiByZXNvdXJjZUlkLCBSZWZQdHI8UmVzb3VyY2VTdGF0ZT4mIHJlc3VsdCkK
IHsKICAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3RlZFNjcmlw
dENhbnZhc01vZHVsZShlcnJvclN0cmluZywgdHJhY2VMb2dJZCk7CiAgICAgaWYgKCFtb2R1bGUu
aGFzTm9WYWx1ZSgpKQpAQCAtMTc1LDcgKzE4OSw3IEBAIFNjcmlwdE9iamVjdCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6d3JhcENhbnZhczJEUmVuZGVyaW5nQ29udGV4dEZvckluc3RydW1lbnRhdGlv
CiAgICAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgbW9kdWxlID0gaW5qZWN0ZWRTY3JpcHRD
YW52YXNNb2R1bGUoJmVycm9yLCBjb250ZXh0KTsKICAgICBpZiAobW9kdWxlLmhhc05vVmFsdWUo
KSkKICAgICAgICAgcmV0dXJuIFNjcmlwdE9iamVjdCgpOwotICAgIHJldHVybiBtb2R1bGUud3Jh
cENhbnZhczJEQ29udGV4dChjb250ZXh0KTsKKyAgICByZXR1cm4gbm90aWZ5UmVuZGVyaW5nQ29u
dGV4dFdhc1dyYXBwZWQobW9kdWxlLndyYXBDYW52YXMyRENvbnRleHQoY29udGV4dCkpOwogfQog
CiAjaWYgRU5BQkxFKFdFQkdMKQpAQCAtMTg1LDEwICsxOTksMjIgQEAgU2NyaXB0T2JqZWN0IElu
c3BlY3RvckNhbnZhc0FnZW50Ojp3cmFwV2ViR0xSZW5kZXJpbmdDb250ZXh0Rm9ySW5zdHJ1bWVu
dGF0aW9uKGMKICAgICBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZSBtb2R1bGUgPSBpbmplY3Rl
ZFNjcmlwdENhbnZhc01vZHVsZSgmZXJyb3IsIGdsQ29udGV4dCk7CiAgICAgaWYgKG1vZHVsZS5o
YXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBTY3JpcHRPYmplY3QoKTsKLSAgICByZXR1cm4g
bW9kdWxlLndyYXBXZWJHTENvbnRleHQoZ2xDb250ZXh0KTsKKyAgICByZXR1cm4gbm90aWZ5UmVu
ZGVyaW5nQ29udGV4dFdhc1dyYXBwZWQobW9kdWxlLndyYXBXZWJHTENvbnRleHQoZ2xDb250ZXh0
KSk7CiB9CiAjZW5kaWYKIAorU2NyaXB0T2JqZWN0IEluc3BlY3RvckNhbnZhc0FnZW50Ojpub3Rp
ZnlSZW5kZXJpbmdDb250ZXh0V2FzV3JhcHBlZChjb25zdCBTY3JpcHRPYmplY3QmIHdyYXBwZWRD
b250ZXh0KQoreworICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKKyAgICBTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUgPSB3cmFwcGVkQ29udGV4dC5zY3JpcHRTdGF0ZSgpOworICAgIERPTVdpbmRvdyog
ZG9tV2luZG93ID0gc2NyaXB0U3RhdGUgPyBkb21XaW5kb3dGcm9tU2NyaXB0U3RhdGUoc2NyaXB0
U3RhdGUpIDogMDsKKyAgICBGcmFtZSogZnJhbWUgPSBkb21XaW5kb3cgPyBkb21XaW5kb3ctPmZy
YW1lKCkgOiAwOworICAgIFN0cmluZyBmcmFtZUlkID0gbV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJh
bWUpOworICAgIGlmICghZnJhbWVJZC5pc0VtcHR5KCkpCisgICAgICAgIG1fZnJvbnRlbmQtPmNv
bnRleHRDcmVhdGVkKGZyYW1lSWQpOworICAgIHJldHVybiB3cmFwcGVkQ29udGV4dDsKK30KKwog
SW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmluamVjdGVk
U2NyaXB0Q2FudmFzTW9kdWxlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlKQogewogICAgIGlmICghY2hlY2tJc0VuYWJsZWQoZXJyb3JTdHJpbmcpKQpA
QCAtMjUyLDkgKzI3OCwxNiBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kRnJhbWVz
V2l0aFVuaW5zdHJ1bWVudGVkQ2FudmFzZXMoKQogICAgIHByaXZhdGU6CiAgICAgICAgIFBhZ2Uq
IG1fcGFnZTsKICAgICAgICAgSGFzaFNldDxGcmFtZSo+JiBtX2ZyYW1lc1dpdGhVbmluc3RydW1l
bnRlZENhbnZhc2VzOwotICAgIH0gbm9kZVZpc2l0b3IobV9pbnNwZWN0ZWRQYWdlLCBtX2ZyYW1l
c1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2VzKTsKKyAgICB9IG5vZGVWaXNpdG9yKG1fcGFnZUFn
ZW50LT5wYWdlKCksIG1fZnJhbWVzV2l0aFVuaW5zdHJ1bWVudGVkQ2FudmFzZXMpOwogCisgICAg
bV9mcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlcy5jbGVhcigpOwogICAgIFNjcmlwdFBy
b2ZpbGVyOjp2aXNpdE5vZGVXcmFwcGVycygmbm9kZVZpc2l0b3IpOworCisgICAgZm9yIChIYXNo
U2V0PEZyYW1lKj46Oml0ZXJhdG9yIGl0ID0gbV9mcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52
YXNlcy5iZWdpbigpOyBpdCAhPSBtX2ZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2VzLmVu
ZCgpOyArK2l0KSB7CisgICAgICAgIFN0cmluZyBmcmFtZUlkID0gbV9wYWdlQWdlbnQtPmZyYW1l
SWQoKml0KTsKKyAgICAgICAgaWYgKCFmcmFtZUlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1f
ZnJvbnRlbmQtPmNvbnRleHRDcmVhdGVkKGZyYW1lSWQpOworICAgIH0KIH0KIAogYm9vbCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6Y2hlY2tJc0VuYWJsZWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
KSBjb25zdApAQCAtMjY1LDExICsyOTgsMjQgQEAgYm9vbCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
Y2hlY2tJc0VuYWJsZWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzZXQoKQordm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRnJhbWUqIGZyYW1lKQoreworICAg
IGlmICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGZyYW1lID09IG1fcGFn
ZUFnZW50LT5tYWluRnJhbWUoKSkKKyAgICAgICAgbV9mcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRD
YW52YXNlcy5jbGVhcigpOworICAgIGVsc2UgeworICAgICAgICB3aGlsZSAoZnJhbWUpIHsKKyAg
ICAgICAgICAgIG1fZnJhbWVzV2l0aFVuaW5zdHJ1bWVudGVkQ2FudmFzZXMucmVtb3ZlKGZyYW1l
KTsKKyAgICAgICAgICAgIGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1lRGV0
YWNoZWQoRnJhbWUqIGZyYW1lKQogewotICAgIG1fZnJhbWVzV2l0aFVuaW5zdHJ1bWVudGVkQ2Fu
dmFzZXMuY2xlYXIoKTsKICAgICBpZiAobV9lbmFibGVkKQotICAgICAgICBmaW5kRnJhbWVzV2l0
aFVuaW5zdHJ1bWVudGVkQ2FudmFzZXMoKTsKKyAgICAgICAgbV9mcmFtZXNXaXRoVW5pbnN0cnVt
ZW50ZWRDYW52YXNlcy5yZW1vdmUoZnJhbWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCmlu
ZGV4IDE1YTQ2NDNlY2RlODAyMThiNmUzMThjODQ0Mzc1NWQ4NmUyZDc0YTkuLjFjZjFiNThmNmFl
Nzk1NmRmMTUwMTVjZWZmNGZkMDkzZDMzZGY0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCkBAIC00NywxOCArNDcsMTggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRnJhbWU7CiBjbGFzcyBJbmplY3RlZFNjcmlwdENhbnZhc01v
ZHVsZTsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKK2NsYXNzIEluc3BlY3RvclBhZ2VB
Z2VudDsKIGNsYXNzIEluc3BlY3RvclN0YXRlOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsK
LWNsYXNzIFBhZ2U7CiBjbGFzcyBTY3JpcHRPYmplY3Q7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwogCiBjbGFzcyBJbnNwZWN0b3JDYW52YXNBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JC
YXNlQWdlbnQ8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+LCBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNhbnZhc0NvbW1hbmRIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxJbnNwZWN0b3JDYW52YXNBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckNvbXBvc2l0ZVN0YXRlKiBzdGF0ZSwgUGFn
ZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+IGNyZWF0ZShJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JDb21wb3NpdGVTdGF0
ZSogc3RhdGUsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbmplY3RlZFNjcmlwdE1h
bmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgSW5zcGVjdG9yQ2FudmFzQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgc3RhdGUs
IHBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluc3BlY3RvckNhbnZhc0FnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIHN0YXRlLCBwYWdl
QWdlbnQsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOwogICAgIH0KICAgICB+SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQoKTsKIApAQCAtNjcsNyArNjcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlc3RvcmUoKTsKIAogICAgIC8vIENhbGxlZCBmcm9tIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bgotICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKEZyYW1lKik7Cisg
ICAgdm9pZCBmcmFtZURldGFjaGVkKEZyYW1lKik7CiAKICAgICAvLyBDYWxsZWQgZnJvbSBJbnNw
ZWN0b3JDYW52YXNJbnN0cnVtZW50YXRpb24KICAgICBTY3JpcHRPYmplY3Qgd3JhcENhbnZhczJE
UmVuZGVyaW5nQ29udGV4dEZvckluc3RydW1lbnRhdGlvbihjb25zdCBTY3JpcHRPYmplY3QmKTsK
QEAgLTgwLDggKzgxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9y
U3RyaW5nKik7CiAgICAgdmlydHVhbCB2b2lkIGRyb3BUcmFjZUxvZyhFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgdm9pZCBoYXNVbmluc3RydW1lbnRlZENhbnZhc2Vz
KEVycm9yU3RyaW5nKiwgYm9vbCopOwotICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlRnJhbWUoRXJy
b3JTdHJpbmcqLCBTdHJpbmcqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRDYXB0dXJpbmcoRXJy
b3JTdHJpbmcqLCBTdHJpbmcqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZUZyYW1lKEVycm9y
U3RyaW5nKiwgY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQqLCBUeXBlQnVpbGRl
cjo6Q2FudmFzOjpUcmFjZUxvZ0lkKik7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0Q2FwdHVyaW5n
KEVycm9yU3RyaW5nKiwgY29uc3QgVHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkZyYW1lSWQqLCBUeXBl
QnVpbGRlcjo6Q2FudmFzOjpUcmFjZUxvZ0lkKik7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BDYXB0
dXJpbmcoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0
VHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBpbnQqLCBjb25zdCBp
bnQqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNhbnZhczo6VHJhY2VMb2c+Jik7CiAgICAgdmlydHVh
bCB2b2lkIHJlcGxheVRyYWNlTG9nKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgaW50LCBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkNhbnZhczo6UmVzb3VyY2VTdGF0ZT4mKTsKQEAgLTg5LDcgKzkw
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNvdXJjZVN0YXRlKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpD
YW52YXM6OlJlc291cmNlU3RhdGU+Jik7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yQ2FudmFz
QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvckNvbXBvc2l0ZVN0YXRlKiwgUGFn
ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAgIEluc3BlY3RvckNhbnZhc0FnZW50KElu
c3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JDb21wb3NpdGVTdGF0ZSosIEluc3BlY3RvclBh
Z2VBZ2VudCosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRD
YW52YXNNb2R1bGUgaW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUoRXJyb3JTdHJpbmcqLCBTY3Jp
cHRTdGF0ZSopOwogICAgIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlIGluamVjdGVkU2NyaXB0
Q2FudmFzTW9kdWxlKEVycm9yU3RyaW5nKiwgY29uc3QgU2NyaXB0T2JqZWN0Jik7CkBAIC05Nyw4
ICs5OCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmRGcmFtZXNXaXRoVW5pbnN0cnVtZW50
ZWRDYW52YXNlcygpOwogICAgIGJvb2wgY2hlY2tJc0VuYWJsZWQoRXJyb3JTdHJpbmcqKSBjb25z
dDsKKyAgICBTY3JpcHRPYmplY3Qgbm90aWZ5UmVuZGVyaW5nQ29udGV4dFdhc1dyYXBwZWQoY29u
c3QgU2NyaXB0T2JqZWN0Jik7CiAKLSAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CisgICAgSW5z
cGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIEluc3BlY3RvckZyb250ZW5kOjpDYW52YXMq
IG1fZnJvbnRlbmQ7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggOWYzOTJhMDcxNGQwOWJlODQ2
MDg0MWIzMWZiZGVmZDNjYmFjMmFjOS4uODViY2E3ODVhMDM4ZTYwNDg2ZDQ5M2YyNjQzMGJjZDFi
OThlZDVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3Bl
Y3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAg
ICAgbV9hZ2VudHMuYXBwZW5kKEluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGUobV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpKSk7CiAjZW5kaWYKIAotICAgIG1fYWdl
bnRzLmFwcGVuZChJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQoKSwgcGFnZSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
Z2V0KCkpKTsKKyAgICBtX2FnZW50cy5hcHBlbmQoSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNyZWF0
ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2VBZ2VudCwg
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKTsKIAogICAgIG1fYWdlbnRzLmFwcGVuZChJ
bnNwZWN0b3JJbnB1dEFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBt
X3N0YXRlLmdldCgpLCBwYWdlKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggM2ExZTc5ZDllODM0ZTU0ZTFi
NmJmODFkYTJlNjhjZWY3OGVkZDYzYS4uZDI5MzI5ZThkYWNhMGEwYzFhNzkzNzhkNTkzYjNjODNl
MjEzZGMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTkwMiw2ICs5MDIsOCBAQCB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6bG9hZEV2ZW50RmlyZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbgogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXRhY2hlZEZy
b21QYXJlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEZy
YW1lKiBmcmFtZSkKIHsKKyAgICBpZiAoSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGNhbnZhc0FnZW50
ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ2FudmFzQWdlbnQoKSkKKyAgICAgICAg
Y2FudmFzQWdlbnQtPmZyYW1lRGV0YWNoZWQoZnJhbWUpOwogICAgIGlmIChJbnNwZWN0b3JQYWdl
QWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2Vu
dCgpKQogICAgICAgICBwYWdlQWdlbnQtPmZyYW1lRGV0YWNoZWQoZnJhbWUpOwogfQpAQCAtOTM3
LDEwICs5MzksMTAgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENvbW1pdExv
YWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnQKICAgICAgICAgaWYgKEluc3Bl
Y3RvckxheWVyVHJlZUFnZW50KiBsYXllclRyZWVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMt
Pmluc3BlY3RvckxheWVyVHJlZUFnZW50KCkpCiAgICAgICAgICAgICBsYXllclRyZWVBZ2VudC0+
cmVzZXQoKTsKICNlbmRpZgotICAgICAgICBpZiAoSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGNhbnZh
c0FnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ2FudmFzQWdlbnQoKSkKLSAg
ICAgICAgICAgIGNhbnZhc0FnZW50LT5yZXNldCgpOwogICAgICAgICBpbnNwZWN0b3JBZ2VudC0+
ZGlkQ29tbWl0TG9hZCgpOwogICAgIH0KKyAgICBpZiAoSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGNh
bnZhc0FnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ2FudmFzQWdlbnQoKSkK
KyAgICAgICAgY2FudmFzQWdlbnQtPmZyYW1lTmF2aWdhdGVkKGxvYWRlci0+ZnJhbWUoKSk7CiAg
ICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy0+aW5zcGVjdG9yUGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZnJhbWVOYXZpZ2F0
ZWQobG9hZGVyKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3MGYzNThhNDczZTA3MDFiYjVhNGE0N2NkNmMzYzk4ODlm
ZGMwY2Y2Li5jMWZiNWE0OWQ5YWFiZmJlNWIyZGE5ZTc5ODk2M2Y1NTc1NzNlMjRlIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTMtMDEtMjggIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogW0NhbnZhc10gc3VwcG9ydCBpbnN0
cnVtZW50aW5nIGNhbnZhc2VzIGluIGlmcmFtZXMgKGJhY2tlbmQgc2lkZSkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzk1MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0dWIgQ2FudmFzIGRpc3BhdGNo
ZXIgZm9yIG5vdyB0byBzaWxlbmNlIGFsZXJ0cyBpbiB0ZXN0cy4KKworICAgICAgICAqIGluc3Bl
Y3Rvci9wcm9maWxlci9jYW52YXMtcHJvZmlsZXItdGVzdC5qczoKKyAgICAgICAgKGluaXRpYWxp
emVfQ2FudmFzV2ViR0xQcm9maWxlclRlc3QuSW5zcGVjdG9yVGVzdC5lbmFibGVDYW52YXNBZ2Vu
dC5JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ2FudmFzRGlzcGF0Y2hlcik6CisKIDIwMTMtMDEt
MjggIFpvbHRhbiBBcnZhaSAgPHphcnZhaUBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgW1F0
XSBVbnJldmlld2VkIHJlYmFzZWxpbmUgYWZ0ZXIgcjE0MDgyMS4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9jYW52YXMtcHJvZmlsZXItdGVzdC5qcyBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9jYW52YXMtcHJvZmlsZXItdGVzdC5qcwppbmRleCA0
NDdmMzE0OGU3MDJjZThiNDg3YTc2OGU1YjMyZGY5NGI3Y2M3NTFjLi45Yzg4NjY1ZGI4OTMxMjM0
YTE3NDg2OTI1MGJjODQ3NTA1ZTEyNzQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvcHJvZmlsZXIvY2FudmFzLXByb2ZpbGVyLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3Byb2ZpbGVyL2NhbnZhcy1wcm9maWxlci10ZXN0LmpzCkBAIC0yLDYgKzIsMTMgQEAg
dmFyIGluaXRpYWxpemVfQ2FudmFzV2ViR0xQcm9maWxlclRlc3QgPSBmdW5jdGlvbigpIHsKIAog
SW5zcGVjdG9yVGVzdC5lbmFibGVDYW52YXNBZ2VudCA9IGZ1bmN0aW9uKGNhbGxiYWNrKQogewor
ICAgIHZhciBkaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5fZG9tYWluRGlzcGF0Y2hlcnNb
IkNhbnZhcyJdOworICAgIGlmICghZGlzcGF0Y2hlcikgeworICAgICAgICBJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ2FudmFzRGlzcGF0Y2hlcih7CisgICAgICAgICAgICBjb250ZXh0Q3JlYXRl
ZDogZnVuY3Rpb24oKSB7fQorICAgICAgICB9KTsKKyAgICB9CisKICAgICBmdW5jdGlvbiBjYW52
YXNBZ2VudEVuYWJsZWQoZXJyb3IpCiAgICAgewogICAgICAgICBpZiAoIWVycm9yKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>