<?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>131992</bug_id>
          
          <creation_ts>2014-04-22 09:47:47 -0700</creation_ts>
          <short_desc>Change Image Controls replacement to use selection and paste.</short_desc>
          <delta_ts>2014-04-29 14:54:56 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>132025</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>enrica</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1002929</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-22 09:47:47 -0700</bug_when>
    <thetext>Change Image Controls replacement to use selection and paste.

This is instead of the &quot;replace the render image behind the scenes&quot; implementation we use now.

With this we gain a much more robust/tested code path (copy/paste) and undo support.

We will end up modifying the DOM, which may or may not be a problem.  But probably not.

&lt;rdar://problem/16302722&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002940</commentid>
    <comment_count>1</comment_count>
      <attachid>229893</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-22 09:57:26 -0700</bug_when>
    <thetext>Created attachment 229893
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002949</commentid>
    <comment_count>2</comment_count>
      <attachid>229893</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-22 10:04:57 -0700</bug_when>
    <thetext>Comment on attachment 229893
Patch v1

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

&gt; Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp:110
&gt; +        while (parent) {
&gt; +            if (parent-&gt;isShadowRoot()) {

Surprised there&apos;s not already something to do this.

&gt; Source/WebCore/page/ContextMenuController.cpp:-1456
&gt; -void ContextMenuController::replaceControlledImage(PassRefPtr&lt;Image&gt; newImage)

Yayyyyy!

&gt; Source/WebKit/mac/Misc/WebSharingServicePickerController.mm:135
&gt; +    [pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeTIFF] owner:nil];

@[ NSPasteboardTypeTIFF ]

&gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h:60
&gt; +    WebPageProxy* page() const { return m_page; }

it looks to me like this should return a reference, no?

&gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:235
&gt;      RetainPtr&lt;CGImageSourceRef&gt; source = adoptCF(CGImageSourceCreateWithData((CFDataRef)[items objectAtIndex:0], NULL));
&gt;      RetainPtr&lt;CGImageRef&gt; image = adoptCF(CGImageSourceCreateImageAtIndex(source.get(), 0, NULL));

why are we still doing this part? do you really need to make a CGImageRef here and then not use it?

&gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:241
&gt; +    [pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeTIFF] owner:nil];

@[ NSPasteboardTypeTIFF ]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002987</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-22 10:39:45 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 229893 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=229893&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp:110
&gt; &gt; +        while (parent) {
&gt; &gt; +            if (parent-&gt;isShadowRoot()) {
&gt; 
&gt; Surprised there&apos;s not already something to do this.

I was too!  There probably should be, but I couldn&apos;t find it!

&gt; &gt; Source/WebCore/page/ContextMenuController.cpp:-1456
&gt; &gt; -void ContextMenuController::replaceControlledImage(PassRefPtr&lt;Image&gt; newImage)
&gt; 
&gt; Yayyyyy!

Yayyyy!
&gt; 
&gt; &gt; Source/WebKit/mac/Misc/WebSharingServicePickerController.mm:135
&gt; &gt; +    [pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeTIFF] owner:nil];
&gt; 
&gt; @[ NSPasteboardTypeTIFF ]

Indeed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h:60
&gt; &gt; +    WebPageProxy* page() const { return m_page; }
&gt; 
&gt; it looks to me like this should return a reference, no?

Probably!

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:235
&gt; &gt;      RetainPtr&lt;CGImageSourceRef&gt; source = adoptCF(CGImageSourceCreateWithData((CFDataRef)[items objectAtIndex:0], NULL));
&gt; &gt;      RetainPtr&lt;CGImageRef&gt; image = adoptCF(CGImageSourceCreateImageAtIndex(source.get(), 0, NULL));
&gt; 
&gt; why are we still doing this part? do you really need to make a CGImageRef here and then not use it?

To verify the data actually represents an image.  I think its necessary for now, can chat with you on IRC when you&apos;re around.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:241
&gt; &gt; +    [pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeTIFF] owner:nil];
&gt; 
&gt; @[ NSPasteboardTypeTIFF ]

Indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002994</commentid>
    <comment_count>4</comment_count>
      <attachid>229897</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-22 11:02:50 -0700</bug_when>
    <thetext>Created attachment 229897
Patch for landing maybe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003007</commentid>
    <comment_count>5</comment_count>
      <attachid>229897</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-22 11:34:04 -0700</bug_when>
    <thetext>Comment on attachment 229897
Patch for landing maybe.

Rejecting attachment 229897 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;build&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--build-style=release&apos;, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
ources/WebKit2/WebDatabaseManagerMessageReceiver.cpp -o /Volumes/Data/EWS/WebKit/WebKitBuild/WebKit2.build/Release/WebKit2.build/Objects-normal/x86_64/WebDatabaseManagerMessageReceiver.o

** BUILD FAILED **


The following build commands failed:
	CompileC /Volumes/Data/EWS/WebKit/WebKitBuild/WebKit2.build/Release/WebKit2.build/Objects-normal/x86_64/WebContextMenuProxyMac.o UIProcess/mac/WebContextMenuProxyMac.mm normal x86_64 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

Full output: http://webkit-queues.appspot.com/results/6463773594353664</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003014</commentid>
    <comment_count>6</comment_count>
      <attachid>229903</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-22 11:47:21 -0700</bug_when>
    <thetext>Created attachment 229903
Patch for landing hopefully</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003025</commentid>
    <comment_count>7</comment_count>
      <attachid>229903</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-22 12:22:56 -0700</bug_when>
    <thetext>Comment on attachment 229903
Patch for landing hopefully

Clearing flags on attachment: 229903

Committed r167674: &lt;http://trac.webkit.org/changeset/167674&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003026</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-22 12:22:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003071</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-22 14:57:33 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 132025</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005079</commentid>
    <comment_count>10</comment_count>
      <attachid>230407</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-29 13:12:25 -0700</bug_when>
    <thetext>Created attachment 230407
Patch with new approach - v1

This sends the data to the WebProcess along with the &quot;replace selection&quot; message, and uses a new WebProcess &quot;pasteboard override&quot; mechanism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005080</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-29 13:12:56 -0700</bug_when>
    <thetext>This is to avoid the normal &quot;pasteboard-related sync IPC&quot; that the first patch used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005085</commentid>
    <comment_count>12</comment_count>
      <attachid>230407</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-29 13:24:24 -0700</bug_when>
    <thetext>Comment on attachment 230407
Patch with new approach - v1

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

&gt; Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp:127
&gt; +
&gt; +        Frame* frame = document().frame();
&gt; +        if (!frame)
&gt; +            return;
&gt; +
&gt; +        Page* page = document().page();
&gt; +        if (!page)
&gt; +            return;

these should be before the while, no?

&gt; Source/WebKit/mac/Misc/WebSharingServicePickerController.mm:55
&gt; +static NSString *imageControlPasteboardName = @&quot;WebKitImageControlsPasteboard&quot;;

maybe add the s to the variable name

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPasteboardOverrides.h:45
&gt; +    void overriddenTypes(const String&amp; pasteboardName, Vector&lt;String&gt;&amp; types);

I think this should have a &quot;get&quot; prefix; or, return the types? why does it work this way?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:392
&gt; +    Vector&lt;char&gt; overrideBuffer;

maybe uint8_t here too?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:394
&gt; +        printf(&quot;Returning an override buffer!\n&quot;);

no.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005092</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-29 13:37:55 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 230407 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=230407&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp:127
&gt; &gt; +
&gt; &gt; +        Frame* frame = document().frame();
&gt; &gt; +        if (!frame)
&gt; &gt; +            return;
&gt; &gt; +
&gt; &gt; +        Page* page = document().page();
&gt; &gt; +        if (!page)
&gt; &gt; +            return;
&gt; 
&gt; these should be before the while, no?
&gt; 

Probably.

&gt; &gt; Source/WebKit/mac/Misc/WebSharingServicePickerController.mm:55
&gt; &gt; +static NSString *imageControlPasteboardName = @&quot;WebKitImageControlsPasteboard&quot;;
&gt; 
&gt; maybe add the s to the variable name

Okay.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPasteboardOverrides.h:45
&gt; &gt; +    void overriddenTypes(const String&amp; pasteboardName, Vector&lt;String&gt;&amp; types);
&gt; 
&gt; I think this should have a &quot;get&quot; prefix; or, return the types? why does it work this way?

It works this way simply because the only client works this way, too.  But that&apos;s not really a good reason.  Will change.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:392
&gt; &gt; +    Vector&lt;char&gt; overrideBuffer;
&gt; 
&gt; maybe uint8_t here too?

Either make it a Vector&lt;char&gt; here, or go add an additional constructor to SharedBuffer that takes Vector&lt;uint8_t&gt;  (there isn&apos;t one).

I prefer this way, but could be persuaded otherwise with a reason.

&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:394
&gt; &gt; +        printf(&quot;Returning an override buffer!\n&quot;);
&gt; 
&gt; no.

Awww.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005098</commentid>
    <comment_count>14</comment_count>
      <attachid>230411</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-04-29 13:56:59 -0700</bug_when>
    <thetext>Created attachment 230411
New approach, v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005111</commentid>
    <comment_count>15</comment_count>
      <attachid>230411</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-29 14:24:35 -0700</bug_when>
    <thetext>Comment on attachment 230411
New approach, v2

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

&gt; Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm:260
&gt; +    ASSERT(m_page);

Pass it in as - and store it as - a reference instead :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005134</commentid>
    <comment_count>16</comment_count>
      <attachid>230411</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-29 14:54:52 -0700</bug_when>
    <thetext>Comment on attachment 230411
New approach, v2

Clearing flags on attachment: 230411

Committed r167956: &lt;http://trac.webkit.org/changeset/167956&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005135</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-29 14:54:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229893</attachid>
            <date>2014-04-22 09:57:26 -0700</date>
            <delta_ts>2014-04-22 11:02:50 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>16789</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZTAxYzJlLi5hNjkzMWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTQtMDQtMjIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENoYW5nZSBJbWFnZSBDb250cm9scyByZXBsYWNlbWVudCB0byB1c2Ugc2VsZWN0aW9uIGFu
ZCBwYXN0ZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTYzMDI3MjI+IGFuZCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTkyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3ZlIGRl
bGV0ZWQgc3ltYm9sLgorCisgICAgICAgICogaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNC
dXR0b25FbGVtZW50TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ29udHJvbHNCdXR0
b25FbGVtZW50TWFjOjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKworICAgICAgICAqIHBhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6c2hvd0ltYWdlQ29udHJvbHNNZW51KTogU2VsZWN0IHRoZSBpbWFnZSBlbGVtZW50
CisgICAgICAgICAgYmVmb3JlIHNob3dpbmcgdGhlIG1lbnUuCisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0TWVudUNvbnRyb2xsZXI6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmg6CisKIDIwMTQtMDQtMjEgIEVy
aWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gaW1w
bGVtZW50IFdlYktpdERhdGFDdWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMDdiOWQ3YS4uOGZk
MTE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTI5ODYsMTAgKzI5ODYsNiBAQCBfX1pOSzdX
ZWJDb3JlMTJJY29uRGF0YWJhc2UyNHNob3VsZFN0b3BUaHJlYWRBY3Rpdml0eUV2CiBfX1pOSzdX
ZWJDb3JlMTJJY29uRGF0YWJhc2U5aXNFbmFibGVkRXYKICNlbmRpZgogCi0jaWYgRU5BQkxFKElN
QUdFX0NPTlRST0xTKQotX19aTjdXZWJDb3JlMjFDb250ZXh0TWVudUNvbnRyb2xsZXIyMnJlcGxh
Y2VDb250cm9sbGVkSW1hZ2VFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUltYWdlRUVFCi0jZW5kaWYK
LQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogX19aTjdXZWJDb3JlMTBJREJLZXlEYXRh
MTRzZXROdW1iZXJWYWx1ZUVkCiBfX1pON1dlYkNvcmUxMElEQktleURhdGE2ZGVjb2RlRVJOU18x
MktleWVkRGVjb2RlckVSUzBfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAppbmRleCAx
YjhiYzAwLi5lMTJlNjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9t
YWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAKQEAgLTMw
LDExICszMCwxNSBAQAogCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0
aW9uLmgiCiAjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk5LDggKzEwMywzMyBAQCBQ
YXNzUmVmUHRyPEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjPiBJbWFnZUNvbnRyb2xzQnV0
dG9uRWxlbWVudE1hYzo6bWF5YmVDcgogdm9pZCBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1h
Yzo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29u
dHJvbGxlcigpLnNob3dJbWFnZUNvbnRyb2xzTWVudShldmVudCk7CisgICAgICAgIC8vIEJlZm9y
ZSBzaG93aW5nIHRoZSBtZW51LCBjaGFuZ2UgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBy
ZXByZXNlbnRlZCBJbWFnZSBlbGVtZW50LgorICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQg
PSBwYXJlbnROb2RlKCk7CisgICAgICAgIEVsZW1lbnQqIGhvc3RFbGVtZW50ID0gbnVsbHB0cjsK
KyAgICAgICAgd2hpbGUgKHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNTaGFk
b3dSb290KCkpIHsKKyAgICAgICAgICAgICAgICBob3N0RWxlbWVudCA9IHN0YXRpY19jYXN0PFNo
YWRvd1Jvb3QqPihwYXJlbnQpLT5ob3N0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2Rl
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWhvc3RFbGVtZW50KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBBU1NFUlQoaXNIVE1MSW1hZ2VFbGVtZW50KGhvc3RFbGVtZW50KSk7
CisKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOworICAgICAgICBp
ZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFBhZ2UqIHBhZ2UgPSBk
b2N1bWVudCgpLnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIFBvc2l0aW9uKGhvc3RFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hv
ciksIFBvc2l0aW9uKGhvc3RFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9y
KSk7CisgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihyYW5nZS5nZXQoKSkpOworCisgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxl
cigpLnNob3dJbWFnZUNvbnRyb2xzTWVudShldmVudCk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDE3YWU0NTYuLjU0MjMxOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTE0
NTIsMjQgKzE0NTIsNiBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6c2hvd0ltYWdlQ29u
dHJvbHNNZW51KEV2ZW50KiBldmVudCkKICAgICBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50
KTsKICAgICBtX2NsaWVudC5zaG93Q29udGV4dE1lbnUoKTsKIH0KLQotdm9pZCBDb250ZXh0TWVu
dUNvbnRyb2xsZXI6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0cjxJbWFnZT4gbmV3
SW1hZ2UpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuaW5u
ZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUt
PnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzUmVuZGVySW1h
Z2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
SW1hZ2U+IHJlcGxhY2VkSW1hZ2UgPSBuZXcgQ2FjaGVkSW1hZ2UoVVJMOjpmYWtlVVJMV2l0aFJl
bGF0aXZlUGFydCgiaW1hZ2UiKSwgbmV3SW1hZ2UuZ2V0KCksIGZyYW1lLT5wYWdlKCktPnNlc3Np
b25JRCgpKTsKLSAgICB0b1JlbmRlckltYWdlKHJlbmRlcmVyKS0+aW1hZ2VSZXNvdXJjZSgpLnNl
dENhY2hlZEltYWdlKHJlcGxhY2VkSW1hZ2UuZ2V0KCkpOwotfQogI2VuZGlmCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5oCmluZGV4IDg1OGU4OTkuLjlhNGM0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuaApAQCAtNzEsNyArNzEsNiBAQCBwdWJsaWM6CiAKICNpZiBFTkFC
TEUoSU1BR0VfQ09OVFJPTFMpCiAgICAgdm9pZCBzaG93SW1hZ2VDb250cm9sc01lbnUoRXZlbnQq
KTsKLSAgICB2b2lkIHJlcGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0cjxJbWFnZT4pOwog
I2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNmJhMTQzNC4uZGQ2YzFmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA0LTIyICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgSW1hZ2UgQ29udHJvbHMg
cmVwbGFjZW1lbnQgdG8gdXNlIHNlbGVjdGlvbiBhbmQgcGFzdGUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzE2MzAyNzIyPiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMTk5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogTWlzYy9XZWJTaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIubW06CisgICAgICAg
ICgtW1dlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBzaGFyaW5nU2VydmljZTpkaWRT
aGFyZUl0ZW1zOl0pOiBXcml0ZSB0aGUKKyAgICAgICAgICByZXBsYWNlbWVudCBkYXRhIHRvIGEg
c3BlY2lhbCBwYXN0ZWJvYXJkLCB0aGVuIHJlcGxhY2UgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGZy
b20KKyAgICAgICAgICB0aGF0IHBhc3RlYm9hcmQuCisKIDIwMTQtMDQtMjEgIEVyaWMgQ2FybHNv
biAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gaW1wbGVtZW50IFdl
YktpdERhdGFDdWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViU2hhcmlu
Z1NlcnZpY2VQaWNrZXJDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJT
aGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIubW0KaW5kZXggMDI1YWFlMS4uOWJkNWJkMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJTaGFyaW5nU2VydmljZVBpY2tl
ckNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJTaGFyaW5nU2Vy
dmljZVBpY2tlckNvbnRyb2xsZXIubW0KQEAgLTMxLDYgKzMxLDEwIEBACiAjaW1wb3J0ICJXZWJW
aWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPEFwcEtpdC9OU1NoYXJpbmdTZXJ2aWNlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJh
bWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNv
cmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KIApA
QCAtNDgsNiArNTIsOCBAQCBAZW5kCiAKICNlbmRpZgogCitzdGF0aWMgTlNTdHJpbmcgKmltYWdl
Q29udHJvbFBhc3RlYm9hcmROYW1lID0gQCJXZWJLaXRJbWFnZUNvbnRyb2xzUGFzdGVib2FyZCI7
CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBAaW1wbGVtZW50YXRpb24gV2ViU2hhcmlu
Z1NlcnZpY2VQaWNrZXJDb250cm9sbGVyCkBAIC0xMjUsNyArMTMxLDEzIEBAIC0gKHZvaWQpc2hh
cmluZ1NlcnZpY2U6KE5TU2hhcmluZ1NlcnZpY2UgKilzaGFyaW5nU2VydmljZSBkaWRTaGFyZUl0
ZW1zOihOU0FycmF5CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYWdl
LT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS5yZXBsYWNlQ29udHJvbGxlZEltYWdlKGltYWdlLmdl
dCgpKTsKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3Rl
Ym9hcmRXaXRoTmFtZTppbWFnZUNvbnRyb2xQYXN0ZWJvYXJkTmFtZV07CisgICAgW3Bhc3RlYm9h
cmQgZGVjbGFyZVR5cGVzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpOU1Bhc3RlYm9hcmRUeXBl
VElGRl0gb3duZXI6bmlsXTsKKyAgICBbcGFzdGVib2FyZCBzZXREYXRhOltpdGVtcyBvYmplY3RB
dEluZGV4OjBdIGZvclR5cGU6TlNQYXN0ZWJvYXJkVHlwZVRJRkZdOworCisgICAgRnJhbWUmIGZy
YW1lID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICAgICAgZnJhbWUuZWRpdG9yKCku
cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGltYWdlQ29udHJvbFBhc3RlYm9hcmROYW1lKTsK
IAogICAgIFtzZWxmIGNsZWFyXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBmNDQ2NGJhLi44NDUyMjc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTQtMDQtMjIgIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5nZSBJbWFnZSBDb250cm9scyByZXBsYWNl
bWVudCB0byB1c2Ugc2VsZWN0aW9uIGFuZCBwYXN0ZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MTYzMDI3MjI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMx
OTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW06CisgICAgICAgICgtW1dLU2hh
cmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZSBzaGFyaW5nU2VydmljZTpkaWRTaGFyZUl0ZW1zOl0p
OiBXcml0ZSB0aGUKKyAgICAgICAgICByZXBsYWNlbWVudCBkYXRhIHRvIGEgc3BlY2lhbCBwYXN0
ZWJvYXJkLCB0aGVuIHJlcGxhY2UgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGZyb20KKyAgICAgICAg
ICB0aGF0IHBhc3RlYm9hcmQuCisKKyAgICAgICAgUmVtb3ZlIGFsbCBvdGhlciBjb2RlIHVzZWQg
dG8gc3VwcG9ydCB0aGUgb2xkIHJlcGxhY2VtZW50IG1lY2hhbmlzbToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpy
ZXBsYWNlQ29udHJvbGxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5
TWFjLmg6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlNYWM6OnBhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpyZXBsYWNlQ29udHJvbGxl
ZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4
dE1lbnUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudTo6cmVwbGFjZUNvbnRy
b2xsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNv
bnRleHRNZW51Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDE0LTA0LTIxICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIGltcGxl
bWVudCBXZWJLaXREYXRhQ3VlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCmluZGV4IGE4NTgwNjEuLjczMTgxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCkBAIC0zNDQ1LDE2ICszNDQ1LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmludGVybmFsU2hvd0NvbnRleHRNZW51KGNvbnN0IEludFBvaW50JiBtZW51TG9jYXRpb24sIGNv
bnN0IEMKICAgICBtX2NvbnRleHRNZW51Q2xpZW50LmNvbnRleHRNZW51RGlzbWlzc2VkKHRoaXMp
OwogfQogCi0jaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQotdm9pZCBXZWJQYWdlUHJveHk6OnJl
cGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG5ld0JpdG1h
cCkKLXsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBuZXdCaXRtYXA7Ci0g
ICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgYml0bWFwSGFuZGxlOwotICAgIGJpdG1hcC0+Y3Jl
YXRlSGFuZGxlKGJpdG1hcEhhbmRsZSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpSZXBsYWNlQ29udHJvbGxlZEltYWdlKGJpdG1hcEhhbmRsZSksIG1fcGFnZUlEKTsK
LX0KLSNlbmRpZgotCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
Y29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaXRlbSkKIHsKICAgICAvLyBBcHBsaWNhdGlv
biBjdXN0b20gaXRlbXMgZG9uJ3QgbmVlZCB0byByb3VuZC10cmlwIHRocm91Z2ggdG8gV2ViQ29y
ZSBpbiB0aGUgV2ViUHJvY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAppbmRleCA0YTBiYmQ3Li40MzhjMjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCkBAIC0xMDU5LDEwICsxMDU5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB0YWtl
U25hcHNob3QoV2ViQ29yZTo6SW50UmVjdCwgV2ViQ29yZTo6SW50U2l6ZSBiaXRtYXBTaXplLCBT
bmFwc2hvdE9wdGlvbnMsIEltYWdlQ2FsbGJhY2s6OkNhbGxiYWNrRnVuY3Rpb24pOwogCi0jaWYg
RU5BQkxFKElNQUdFX0NPTlRST0xTKQotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShQ
YXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOwotI2VuZGlmCi0KIHByaXZhdGU6CiAgICAgV2Vi
UGFnZVByb3h5KFBhZ2VDbGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCB1aW50NjRfdCBwYWdlSUQs
IGNvbnN0IFdlYlBhZ2VDb25maWd1cmF0aW9uJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxp
emUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4
dE1lbnVQcm94eU1hYy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0
TWVudVByb3h5TWFjLmgKaW5kZXggYjg3NDkzNi4uNzY3ZjdlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmgKQEAgLTU1
LDkgKzU1LDkgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQogICAgIHZv
aWQgY2xlYXJJbWFnZVNlcnZpY2VzTWVudSgpOwotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJ
bWFnZShDR0ltYWdlUmVmIG5ld0ltYWdlKTsKICNlbmRpZgogCisgICAgV2ViUGFnZVByb3h5KiBw
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9CiAgICAgTlNXaW5kb3cgKndpbmRvdygpIGNv
bnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCmluZGV4IGMyNzg2YzUuLjFmM2Q2ZjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJv
eHlNYWMubW0KQEAgLTU4LDYgKzU4LDggQEAgLSAoTlNNZW51ICopbWVudTsKIEBlbmQKICNlbmRp
ZgogCitzdGF0aWMgTlNTdHJpbmcgKmltYWdlQ29udHJvbFBhc3RlYm9hcmROYW1lID0gQCJXZWJL
aXRJbWFnZUNvbnRyb2xzUGFzdGVib2FyZCI7CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBAaW50ZXJmYWNlIFdLVXNlckRhdGFXcmFwcGVyIDogTlNPYmplY3QgewpAQCAtMjMxLDcgKzIz
MywxNSBAQCAtICh2b2lkKXNoYXJpbmdTZXJ2aWNlOihOU1NoYXJpbmdTZXJ2aWNlICopc2hhcmlu
Z1NlcnZpY2UgZGlkU2hhcmVJdGVtczooTlNBcnJheQogewogICAgIFJldGFpblB0cjxDR0ltYWdl
U291cmNlUmVmPiBzb3VyY2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoRGF0YSgo
Q0ZEYXRhUmVmKVtpdGVtcyBvYmplY3RBdEluZGV4OjBdLCBOVUxMKSk7CiAgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdElu
ZGV4KHNvdXJjZS5nZXQoKSwgMCwgTlVMTCkpOwotICAgIF9tZW51UHJveHktPnJlcGxhY2VDb250
cm9sbGVkSW1hZ2UoaW1hZ2UuZ2V0KCkpOworCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0
ZWJvYXJkV2l0aE5hbWU6aW1hZ2VDb250cm9sUGFzdGVib2FyZE5hbWVdOworICAgIFtwYXN0ZWJv
YXJkIGRlY2xhcmVUeXBlczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6TlNQYXN0ZWJvYXJkVHlw
ZVRJRkZdIG93bmVyOm5pbF07CisgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpbaXRlbXMgb2JqZWN0
QXRJbmRleDowXSBmb3JUeXBlOk5TUGFzdGVib2FyZFR5cGVUSUZGXTsKKyAgICAKKyAgICBfbWVu
dVByb3h5LT5wYWdlKCktPnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChpbWFnZUNvbnRyb2xQ
YXN0ZWJvYXJkTmFtZSk7CiB9CiAKIC0gKE5TV2luZG93ICopc2hhcmluZ1NlcnZpY2U6KE5TU2hh
cmluZ1NlcnZpY2UgKilzaGFyaW5nU2VydmljZSBzb3VyY2VXaW5kb3dGb3JTaGFyZUl0ZW1zOihO
U0FycmF5ICopaXRlbXMgc2hhcmluZ0NvbnRlbnRTY29wZTooTlNTaGFyaW5nQ29udGVudFNjb3Bl
ICopc2hhcmluZ0NvbnRlbnRTY29wZQpAQCAtNDMzLDE3ICs0NDMsNiBAQCBOU1dpbmRvdyAqV2Vi
Q29udGV4dE1lbnVQcm94eU1hYzo6d2luZG93KCkgY29uc3QKICAgICByZXR1cm4gW21fd2ViVmll
dyB3aW5kb3ddOwogfQogCi0jaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQotdm9pZCBXZWJDb250
ZXh0TWVudVByb3h5TWFjOjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKENHSW1hZ2VSZWYgbmV3SW1h
Z2UpCi17Ci0gICAgRmxvYXRTaXplIG5ld0ltYWdlU2l6ZShDR0ltYWdlR2V0V2lkdGgobmV3SW1h
Z2UpLCBDR0ltYWdlR2V0SGVpZ2h0KG5ld0ltYWdlKSk7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gbmV3Qml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoZXhwYW5k
ZWRJbnRTaXplKG5ld0ltYWdlU2l6ZSksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7
Ci0gICAgbmV3Qml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKS0+ZHJhd05hdGl2ZUltYWdl
KG5ld0ltYWdlLCBuZXdJbWFnZVNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIG5ld0ltYWdlU2l6ZSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG5ld0lt
YWdlU2l6ZSkpOwotCi0gICAgbV9wYWdlLT5yZXBsYWNlQ29udHJvbGxlZEltYWdlKG5ld0JpdG1h
cC5yZWxlYXNlKCkpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKaW5kZXggMDk4NjY5ZC4uMjhjZDM0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUu
Y3BwCkBAIC03NywxMyArNzcsNiBAQCB2b2lkIFdlYkNvbnRleHRNZW51OjppdGVtU2VsZWN0ZWQo
Y29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaXRlbSkKICAgICBtX3BhZ2UtPmNvcmVQYWdl
KCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpLmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKCZjb3Jl
SXRlbSk7CiB9CiAKLSNpZiBFTkFCTEUoSU1BR0VfQ09OVFJPTFMpCi12b2lkIFdlYkNvbnRleHRN
ZW51OjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKFBhc3NSZWZQdHI8SW1hZ2U+IG5ld0ltYWdlKQot
ewotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkucmVwbGFj
ZUNvbnRyb2xsZWRJbWFnZShuZXdJbWFnZSk7Ci19Ci0jZW5kaWYKLQogdm9pZCBXZWJDb250ZXh0
TWVudTo6bWVudUl0ZW1zV2l0aFVzZXJEYXRhKFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRh
PiAmbWVudUl0ZW1zLCBSZWZQdHI8QVBJOjpPYmplY3Q+JiB1c2VyRGF0YSkgY29uc3QKIHsKICAg
ICBDb250ZXh0TWVudUNvbnRyb2xsZXImIGNvbnRyb2xsZXIgPSBtX3BhZ2UtPmNvcmVQYWdlKCkt
PmNvbnRleHRNZW51Q29udHJvbGxlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuaAppbmRleCBkOWIxODgzLi5mYzYzYWZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUu
aApAQCAtNTAsMTAgKzUwLDYgQEAgcHVibGljOgogICAgIHZvaWQgaXRlbVNlbGVjdGVkKGNvbnN0
IFdlYkNvbnRleHRNZW51SXRlbURhdGEmKTsKICAgICBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVt
RGF0YT4gaXRlbXMoKSBjb25zdDsKIAotI2lmIEVOQUJMRShJTUFHRV9DT05UUk9MUykKLSAgICB2
b2lkIHJlcGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0cjxXZWJDb3JlOjpJbWFnZT4pOwot
I2VuZGlmCi0KIHByaXZhdGU6CiAgICAgV2ViQ29udGV4dE1lbnUoV2ViUGFnZSopOwogICAgIHZv
aWQgbWVudUl0ZW1zV2l0aFVzZXJEYXRhKFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYs
IFJlZlB0cjxBUEk6Ok9iamVjdD4mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBiZGJkNTU4Li5mODIzNWQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zMTE0LDE1ICsz
MTE0LDYgQEAgdm9pZCBXZWJQYWdlOjpkaWRTZWxlY3RJdGVtRnJvbUFjdGl2ZUNvbnRleHRNZW51
KGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmIGkKIH0KICNlbmRpZgogCi0jaWYgRU5BQkxF
KElNQUdFX0NPTlRST0xTKQotdm9pZCBXZWJQYWdlOjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKGNv
bnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBiaXRtYXBIYW5kbGUpCi17Ci0gICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoYml0bWFw
SGFuZGxlKTsKLSAgICBpZiAoYml0bWFwKQotICAgICAgICBtX2NvbnRleHRNZW51LT5yZXBsYWNl
Q29udHJvbGxlZEltYWdlKGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKSk7Ci19Ci0jZW5kaWYKLQogdm9p
ZCBXZWJQYWdlOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoRnJhbWUqIGZyYW1lLCBjb25zdCBT
dHJpbmcmIHRleHQpCiB7CiAgICAgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBkNjhkMmM3Li42
ZGYzNDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
QEAgLTc3MSwxMCArNzcxLDYgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKFdlYkNvcmU6OkZyYW1lJiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEm
KTsKIAogICAgIHZvaWQgZ2V0Qnl0ZWNvZGVQcm9maWxlKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwot
Ci0jaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJ
bWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpOwotI2VuZGlmCiAgICAgCiAgICAg
Ly8gU29tZSBwbGF0Zm9ybXMgcmVxdWlyZSBhY2Nlc3NpYmlsaXR5LWVuYWJsZWQgcHJvY2Vzc2Vz
IHRvIHNwaW4gdGhlIHJ1biBsb29wIHNvIHRoYXQgdGhlIFdlYlByb2Nlc3MgZG9lc24ndCBoYW5n
LgogICAgIC8vIFdoaWxlIHRoaXMgaXMgbm90IGlkZWFsLCBpdCBkb2VzIG5vdCBoYXZlIHRvIGJl
IGFwcGxpZWQgdG8gZXZlcnkgcGxhdGZvcm0gYXQgdGhlIG1vbWVudC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXgg
M2IwYWU3Ny4uYWI1YTRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTM2Miw4ICszNjIsNCBAQCBtZXNzYWdl
cyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBHZXRCeXRlY29kZVByb2ZpbGUodWlu
dDY0X3QgY2FsbGJhY2tJRCkKICAgICAKICAgICBUYWtlU25hcHNob3QoV2ViQ29yZTo6SW50UmVj
dCBzbmFwc2hvdFJlY3QsIFdlYkNvcmU6OkludFNpemUgYml0bWFwU2l6ZSwgdWludDMyX3Qgb3B0
aW9ucywgdWludDY0X3QgY2FsbGJhY2tJRCkKLQotI2lmIEVOQUJMRShJTUFHRV9DT05UUk9MUykK
LSAgICBSZXBsYWNlQ29udHJvbGxlZEltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUgbmV3Qml0bWFwSGFuZGxlKQotI2VuZGlmCiB9Cg==
</data>
<flag name="review"
          id="254261"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229897</attachid>
            <date>2014-04-22 11:02:50 -0700</date>
            <delta_ts>2014-04-22 11:47:21 -0700</delta_ts>
            <desc>Patch for landing maybe.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17379</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5M2FkMDgyLi4yYzc4YjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTQtMDQtMjIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENoYW5nZSBJbWFnZSBDb250cm9scyByZXBsYWNlbWVudCB0byB1c2Ugc2VsZWN0aW9uIGFu
ZCBwYXN0ZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTYzMDI3MjI+IGFuZCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTkyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgVGltIEhvcnRvbi4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBSZW1vdmUgZGVsZXRl
ZCBzeW1ib2wuCisKKyAgICAgICAgKiBodG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRv
bkVsZW1lbnRNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VDb250cm9sc0J1dHRvbkVs
ZW1lbnRNYWM6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorCisgICAgICAgICogcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9s
bGVyOjpzaG93SW1hZ2VDb250cm9sc01lbnUpOiBTZWxlY3QgdGhlIGltYWdlIGVsZW1lbnQKKyAg
ICAgICAgICBiZWZvcmUgc2hvd2luZyB0aGUgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6cmVwbGFjZUNvbnRyb2xsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaDoKKwogMjAxNC0wNC0yMiAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjE2NzY1OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZjIwM2I1Yi4uZDMx
MzQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTI5ODcsMTAgKzI5ODcsNiBAQCBfX1pOSzdX
ZWJDb3JlMTJJY29uRGF0YWJhc2UyNHNob3VsZFN0b3BUaHJlYWRBY3Rpdml0eUV2CiBfX1pOSzdX
ZWJDb3JlMTJJY29uRGF0YWJhc2U5aXNFbmFibGVkRXYKICNlbmRpZgogCi0jaWYgRU5BQkxFKElN
QUdFX0NPTlRST0xTKQotX19aTjdXZWJDb3JlMjFDb250ZXh0TWVudUNvbnRyb2xsZXIyMnJlcGxh
Y2VDb250cm9sbGVkSW1hZ2VFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUltYWdlRUVFCi0jZW5kaWYK
LQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogX19aTjdXZWJDb3JlMTBJREJLZXlEYXRh
MTRzZXROdW1iZXJWYWx1ZUVkCiBfX1pON1dlYkNvcmUxMElEQktleURhdGE2ZGVjb2RlRVJOU18x
MktleWVkRGVjb2RlckVSUzBfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAppbmRleCAx
YjhiYzAwLi5lMTJlNjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9t
YWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAKQEAgLTMw
LDExICszMCwxNSBAQAogCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0
aW9uLmgiCiAjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk5LDggKzEwMywzMyBAQCBQ
YXNzUmVmUHRyPEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjPiBJbWFnZUNvbnRyb2xzQnV0
dG9uRWxlbWVudE1hYzo6bWF5YmVDcgogdm9pZCBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1h
Yzo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29u
dHJvbGxlcigpLnNob3dJbWFnZUNvbnRyb2xzTWVudShldmVudCk7CisgICAgICAgIC8vIEJlZm9y
ZSBzaG93aW5nIHRoZSBtZW51LCBjaGFuZ2UgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBy
ZXByZXNlbnRlZCBJbWFnZSBlbGVtZW50LgorICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQg
PSBwYXJlbnROb2RlKCk7CisgICAgICAgIEVsZW1lbnQqIGhvc3RFbGVtZW50ID0gbnVsbHB0cjsK
KyAgICAgICAgd2hpbGUgKHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNTaGFk
b3dSb290KCkpIHsKKyAgICAgICAgICAgICAgICBob3N0RWxlbWVudCA9IHN0YXRpY19jYXN0PFNo
YWRvd1Jvb3QqPihwYXJlbnQpLT5ob3N0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2Rl
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWhvc3RFbGVtZW50KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBBU1NFUlQoaXNIVE1MSW1hZ2VFbGVtZW50KGhvc3RFbGVtZW50KSk7
CisKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOworICAgICAgICBp
ZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFBhZ2UqIHBhZ2UgPSBk
b2N1bWVudCgpLnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIFBvc2l0aW9uKGhvc3RFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hv
ciksIFBvc2l0aW9uKGhvc3RFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9y
KSk7CisgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihyYW5nZS5nZXQoKSkpOworCisgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxl
cigpLnNob3dJbWFnZUNvbnRyb2xzTWVudShldmVudCk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDE3YWU0NTYuLjU0MjMxOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTE0
NTIsMjQgKzE0NTIsNiBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6c2hvd0ltYWdlQ29u
dHJvbHNNZW51KEV2ZW50KiBldmVudCkKICAgICBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50
KTsKICAgICBtX2NsaWVudC5zaG93Q29udGV4dE1lbnUoKTsKIH0KLQotdm9pZCBDb250ZXh0TWVu
dUNvbnRyb2xsZXI6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0cjxJbWFnZT4gbmV3
SW1hZ2UpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuaW5u
ZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUt
PnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzUmVuZGVySW1h
Z2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
SW1hZ2U+IHJlcGxhY2VkSW1hZ2UgPSBuZXcgQ2FjaGVkSW1hZ2UoVVJMOjpmYWtlVVJMV2l0aFJl
bGF0aXZlUGFydCgiaW1hZ2UiKSwgbmV3SW1hZ2UuZ2V0KCksIGZyYW1lLT5wYWdlKCktPnNlc3Np
b25JRCgpKTsKLSAgICB0b1JlbmRlckltYWdlKHJlbmRlcmVyKS0+aW1hZ2VSZXNvdXJjZSgpLnNl
dENhY2hlZEltYWdlKHJlcGxhY2VkSW1hZ2UuZ2V0KCkpOwotfQogI2VuZGlmCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5oCmluZGV4IDg1OGU4OTkuLjlhNGM0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuaApAQCAtNzEsNyArNzEsNiBAQCBwdWJsaWM6CiAKICNpZiBFTkFC
TEUoSU1BR0VfQ09OVFJPTFMpCiAgICAgdm9pZCBzaG93SW1hZ2VDb250cm9sc01lbnUoRXZlbnQq
KTsKLSAgICB2b2lkIHJlcGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0cjxJbWFnZT4pOwog
I2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNmJhMTQzNC4uZWI3ZjZhNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA0LTIyICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgSW1hZ2UgQ29udHJvbHMg
cmVwbGFjZW1lbnQgdG8gdXNlIHNlbGVjdGlvbiBhbmQgcGFzdGUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzE2MzAyNzIyPiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMTk5MgorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAg
KiBNaXNjL1dlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1b
V2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIHNoYXJpbmdTZXJ2aWNlOmRpZFNoYXJl
SXRlbXM6XSk6IFdyaXRlIHRoZQorICAgICAgICAgIHJlcGxhY2VtZW50IGRhdGEgdG8gYSBzcGVj
aWFsIHBhc3RlYm9hcmQsIHRoZW4gcmVwbGFjZSB0aGUgY3VycmVudCBzZWxlY3Rpb24gZnJvbQor
ICAgICAgICAgIHRoYXQgcGFzdGVib2FyZC4KKwogMjAxNC0wNC0yMSAgRXJpYyBDYXJsc29uICA8
ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBpbXBsZW1lbnQgV2ViS2l0
RGF0YUN1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJTaGFyaW5nU2Vy
dmljZVBpY2tlckNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlNoYXJp
bmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlci5tbQppbmRleCAwMjVhYWUxLi45YjlhMDAyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29u
dHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlNoYXJpbmdTZXJ2aWNl
UGlja2VyQ29udHJvbGxlci5tbQpAQCAtMzEsNiArMzEsMTAgQEAKICNpbXBvcnQgIldlYlZpZXdJ
bnRlcm5hbC5oIgogI2ltcG9ydCA8QXBwS2l0L05TU2hhcmluZ1NlcnZpY2UuaD4KICNpbXBvcnQg
PFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogCkBAIC00
OCw2ICs1Miw4IEBAIEBlbmQKIAogI2VuZGlmCiAKK3N0YXRpYyBOU1N0cmluZyAqaW1hZ2VDb250
cm9sUGFzdGVib2FyZE5hbWUgPSBAIldlYktpdEltYWdlQ29udHJvbHNQYXN0ZWJvYXJkIjsKKwog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJTaGFyaW5nU2Vy
dmljZVBpY2tlckNvbnRyb2xsZXIKQEAgLTExOSwxMyArMTI1LDIxIEBAIC0gKHZvaWQpc2hhcmlu
Z1NlcnZpY2U6KE5TU2hhcmluZ1NlcnZpY2UgKilzaGFyaW5nU2VydmljZSBkaWRTaGFyZUl0ZW1z
OihOU0FycmF5CiAKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVNvdXJjZVJlZj4gc291cmNlID0gYWRv
cHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aERhdGEoKENGRGF0YVJlZilbaXRlbXMgb2JqZWN0
QXRJbmRleDowXSwgTlVMTCkpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0g
YWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KHNvdXJjZS5nZXQoKSwgMCwg
TlVMTCkpOwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNn
SW1hZ2UuZ2V0KCkpOworCisgICAgaWYgKCFjZ0ltYWdlKQorICAgICAgICByZXR1cm47CiAKICAg
ICBQYWdlKiBwYWdlID0gW19tZW51Q2xpZW50LT53ZWJWaWV3KCkgcGFnZV07CiAgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIo
KS5yZXBsYWNlQ29udHJvbGxlZEltYWdlKGltYWdlLmdldCgpKTsKKyAgICBOU1Bhc3RlYm9hcmQg
KnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTppbWFnZUNvbnRy
b2xQYXN0ZWJvYXJkTmFtZV07CisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOkBbIE5TUGFz
dGVib2FyZFR5cGVUSUZGIF0gb3duZXI6bmlsXTsKKyAgICBbcGFzdGVib2FyZCBzZXREYXRhOltp
dGVtcyBvYmplY3RBdEluZGV4OjBdIGZvclR5cGU6TlNQYXN0ZWJvYXJkVHlwZVRJRkZdOworCisg
ICAgRnJhbWUmIGZyYW1lID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICAgICAgZnJh
bWUuZWRpdG9yKCkucmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGltYWdlQ29udHJvbFBhc3Rl
Ym9hcmROYW1lKTsKIAogICAgIFtzZWxmIGNsZWFyXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjZmI0ZWM3
Li41NzMxYzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTQtMDQtMjIgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5nZSBJbWFnZSBDb250
cm9scyByZXBsYWNlbWVudCB0byB1c2Ugc2VsZWN0aW9uIGFuZCBwYXN0ZQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTYzMDI3MjI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxOTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbToKKyAgICAgICAg
KC1bV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlIHNoYXJpbmdTZXJ2aWNlOmRpZFNoYXJl
SXRlbXM6XSk6IFdyaXRlIHRoZQorICAgICAgICAgIHJlcGxhY2VtZW50IGRhdGEgdG8gYSBzcGVj
aWFsIHBhc3RlYm9hcmQsIHRoZW4gcmVwbGFjZSB0aGUgY3VycmVudCBzZWxlY3Rpb24gZnJvbQor
ICAgICAgICAgIHRoYXQgcGFzdGVib2FyZC4KKworICAgICAgICBSZW1vdmUgYWxsIG90aGVyIGNv
ZGUgdXNlZCB0byBzdXBwb3J0IHRoZSBvbGQgcmVwbGFjZW1lbnQgbWVjaGFuaXNtOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRN
ZW51UHJveHlNYWMuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6
cGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlNYWM6OnJlcGxhY2VD
b250cm9sbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJDb250ZXh0TWVudS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51OjpyZXBs
YWNlQ29udHJvbGxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViQ29udGV4dE1lbnUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2Up
OiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisKIDIwMTQtMDQt
MjIgIEV1bm1pIExlZSAgPGV1bm1pMTUubGVlQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxd
W1dLMl0gUmVtb3ZlIGR1cGxpY2F0ZWQgY29kZSB0byBzZXQgc2l6ZSB0byB0aGUgRHJhd2luZ0Fy
ZWEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGE4NTgw
NjEuLjczMTgxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CkBAIC0zNDQ1LDE2ICszNDQ1LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmludGVybmFsU2hvd0Nv
bnRleHRNZW51KGNvbnN0IEludFBvaW50JiBtZW51TG9jYXRpb24sIGNvbnN0IEMKICAgICBtX2Nv
bnRleHRNZW51Q2xpZW50LmNvbnRleHRNZW51RGlzbWlzc2VkKHRoaXMpOwogfQogCi0jaWYgRU5B
QkxFKElNQUdFX0NPTlRST0xTKQotdm9pZCBXZWJQYWdlUHJveHk6OnJlcGxhY2VDb250cm9sbGVk
SW1hZ2UoUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG5ld0JpdG1hcCkKLXsKLSAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBuZXdCaXRtYXA7Ci0gICAgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUgYml0bWFwSGFuZGxlOwotICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGJpdG1h
cEhhbmRsZSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXBsYWNl
Q29udHJvbGxlZEltYWdlKGJpdG1hcEhhbmRsZSksIG1fcGFnZUlEKTsKLX0KLSNlbmRpZgotCiB2
b2lkIFdlYlBhZ2VQcm94eTo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4
dE1lbnVJdGVtRGF0YSYgaXRlbSkKIHsKICAgICAvLyBBcHBsaWNhdGlvbiBjdXN0b20gaXRlbXMg
ZG9uJ3QgbmVlZCB0byByb3VuZC10cmlwIHRocm91Z2ggdG8gV2ViQ29yZSBpbiB0aGUgV2ViUHJv
Y2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA0YTBiYmQ3
Li40MzhjMjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0x
MDU5LDEwICsxMDU5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB0YWtlU25hcHNob3QoV2ViQ29y
ZTo6SW50UmVjdCwgV2ViQ29yZTo6SW50U2l6ZSBiaXRtYXBTaXplLCBTbmFwc2hvdE9wdGlvbnMs
IEltYWdlQ2FsbGJhY2s6OkNhbGxiYWNrRnVuY3Rpb24pOwogCi0jaWYgRU5BQkxFKElNQUdFX0NP
TlRST0xTKQotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShQYXNzUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4pOwotI2VuZGlmCi0KIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VD
bGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCB1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VD
b25maWd1cmF0aW9uJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmgK
aW5kZXggYjg3NDkzNi4uMzk3YmNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmgKQEAgLTU1LDkgKzU1LDkgQEAgcHVi
bGljOgogCiAjaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQogICAgIHZvaWQgY2xlYXJJbWFnZVNl
cnZpY2VzTWVudSgpOwotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShDR0ltYWdlUmVm
IG5ld0ltYWdlKTsKICNlbmRpZgogCisgICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgY29uc3QgeyBy
ZXR1cm4gKm1fcGFnZTsgfQogICAgIE5TV2luZG93ICp3aW5kb3coKSBjb25zdDsKIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbQppbmRleCBjMjc4NmM1Li5kZWEwMTJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCkBAIC01
OCw2ICs1OCw4IEBAIC0gKE5TTWVudSAqKW1lbnU7CiBAZW5kCiAjZW5kaWYKIAorc3RhdGljIE5T
U3RyaW5nICppbWFnZUNvbnRyb2xQYXN0ZWJvYXJkTmFtZSA9IEAiV2ViS2l0SW1hZ2VDb250cm9s
c1Bhc3RlYm9hcmQiOworCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGludGVyZmFjZSBX
S1VzZXJEYXRhV3JhcHBlciA6IE5TT2JqZWN0IHsKQEAgLTIzMSw3ICsyMzMsMTUgQEAgLSAodm9p
ZClzaGFyaW5nU2VydmljZTooTlNTaGFyaW5nU2VydmljZSAqKXNoYXJpbmdTZXJ2aWNlIGRpZFNo
YXJlSXRlbXM6KE5TQXJyYXkKIHsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVNvdXJjZVJlZj4gc291
cmNlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aERhdGEoKENGRGF0YVJlZilbaXRl
bXMgb2JqZWN0QXRJbmRleDowXSwgTlVMTCkpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBp
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRleChzb3VyY2UuZ2V0
KCksIDAsIE5VTEwpKTsKLSAgICBfbWVudVByb3h5LT5yZXBsYWNlQ29udHJvbGxlZEltYWdlKGlt
YWdlLmdldCgpKTsKKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIE5T
UGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1l
OmltYWdlQ29udHJvbFBhc3RlYm9hcmROYW1lXTsKKyAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlw
ZXM6QFsgTlNQYXN0ZWJvYXJkVHlwZVRJRkYgXSBvd25lcjpuaWxdOworICAgIFtwYXN0ZWJvYXJk
IHNldERhdGE6W2l0ZW1zIG9iamVjdEF0SW5kZXg6MF0gZm9yVHlwZTpOU1Bhc3RlYm9hcmRUeXBl
VElGRl07CisgICAgCisgICAgX21lbnVQcm94eS0+cGFnZSgpLnJlYWRTZWxlY3Rpb25Gcm9tUGFz
dGVib2FyZChpbWFnZUNvbnRyb2xQYXN0ZWJvYXJkTmFtZSk7CiB9CiAKIC0gKE5TV2luZG93ICop
c2hhcmluZ1NlcnZpY2U6KE5TU2hhcmluZ1NlcnZpY2UgKilzaGFyaW5nU2VydmljZSBzb3VyY2VX
aW5kb3dGb3JTaGFyZUl0ZW1zOihOU0FycmF5ICopaXRlbXMgc2hhcmluZ0NvbnRlbnRTY29wZToo
TlNTaGFyaW5nQ29udGVudFNjb3BlICopc2hhcmluZ0NvbnRlbnRTY29wZQpAQCAtMjQ5LDYgKzI1
OSw3IEBAIFdlYkNvbnRleHRNZW51UHJveHlNYWM6OldlYkNvbnRleHRNZW51UHJveHlNYWMoV0tW
aWV3KiB3ZWJWaWV3LCBXZWJQYWdlUHJveHkqIHBhCiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykK
ICAgICAsIG1fcGFnZShwYWdlKQogeworICAgIEFTU0VSVChtX3BhZ2UpOwogfQogCiBXZWJDb250
ZXh0TWVudVByb3h5TWFjOjp+V2ViQ29udGV4dE1lbnVQcm94eU1hYygpCkBAIC00MzMsMTcgKzQ0
NCw2IEBAIE5TV2luZG93ICpXZWJDb250ZXh0TWVudVByb3h5TWFjOjp3aW5kb3coKSBjb25zdAog
ICAgIHJldHVybiBbbV93ZWJWaWV3IHdpbmRvd107CiB9CiAKLSNpZiBFTkFCTEUoSU1BR0VfQ09O
VFJPTFMpCi12b2lkIFdlYkNvbnRleHRNZW51UHJveHlNYWM6OnJlcGxhY2VDb250cm9sbGVkSW1h
Z2UoQ0dJbWFnZVJlZiBuZXdJbWFnZSkKLXsKLSAgICBGbG9hdFNpemUgbmV3SW1hZ2VTaXplKENH
SW1hZ2VHZXRXaWR0aChuZXdJbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQobmV3SW1hZ2UpKTsKLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBuZXdCaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZVNoYXJlYWJsZShleHBhbmRlZEludFNpemUobmV3SW1hZ2VTaXplKSwgU2hhcmVhYmxlQml0
bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICBuZXdCaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCgpLT5kcmF3TmF0aXZlSW1hZ2UobmV3SW1hZ2UsIG5ld0ltYWdlU2l6ZSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbmV3SW1hZ2VTaXplKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgbmV3SW1hZ2VTaXplKSk7Ci0KLSAgICBtX3BhZ2UtPnJlcGxhY2VDb250
cm9sbGVkSW1hZ2UobmV3Qml0bWFwLnJlbGVhc2UoKSk7Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcAppbmRleCAwOTg2
NjlkLi4yOGNkMzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViQ29udGV4dE1lbnUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJDb250ZXh0TWVudS5jcHAKQEAgLTc3LDEzICs3Nyw2IEBAIHZvaWQgV2ViQ29udGV4
dE1lbnU6Oml0ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVtKQog
ICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkuY29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQoJmNvcmVJdGVtKTsKIH0KIAotI2lmIEVOQUJMRShJTUFHRV9DT05UUk9M
UykKLXZvaWQgV2ViQ29udGV4dE1lbnU6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0
cjxJbWFnZT4gbmV3SW1hZ2UpCi17Ci0gICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5jb250ZXh0TWVu
dUNvbnRyb2xsZXIoKS5yZXBsYWNlQ29udHJvbGxlZEltYWdlKG5ld0ltYWdlKTsKLX0KLSNlbmRp
ZgotCiB2b2lkIFdlYkNvbnRleHRNZW51OjptZW51SXRlbXNXaXRoVXNlckRhdGEoVmVjdG9yPFdl
YkNvbnRleHRNZW51SXRlbURhdGE+ICZtZW51SXRlbXMsIFJlZlB0cjxBUEk6Ok9iamVjdD4mIHVz
ZXJEYXRhKSBjb25zdAogewogICAgIENvbnRleHRNZW51Q29udHJvbGxlciYgY29udHJvbGxlciA9
IG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5oCmluZGV4IGQ5
YjE4ODMuLmZjNjNhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJDb250ZXh0TWVudS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJDb250ZXh0TWVudS5oCkBAIC01MCwxMCArNTAsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBpdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYpOwogICAgIFZlY3Rv
cjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBpdGVtcygpIGNvbnN0OwogCi0jaWYgRU5BQkxFKElN
QUdFX0NPTlRST0xTKQotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShQYXNzUmVmUHRy
PFdlYkNvcmU6OkltYWdlPik7Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBXZWJDb250ZXh0TWVu
dShXZWJQYWdlKik7CiAgICAgdm9pZCBtZW51SXRlbXNXaXRoVXNlckRhdGEoVmVjdG9yPFdlYkNv
bnRleHRNZW51SXRlbURhdGE+JiwgUmVmUHRyPEFQSTo6T2JqZWN0PiYpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGJkYmQ1NTgu
LmY4MjM1ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKQEAgLTMxMTQsMTUgKzMxMTQsNiBAQCB2b2lkIFdlYlBhZ2U6OmRpZFNlbGVjdEl0ZW1G
cm9tQWN0aXZlQ29udGV4dE1lbnUoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaQogfQog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoSU1BR0VfQ09OVFJPTFMpCi12b2lkIFdlYlBhZ2U6OnJlcGxh
Y2VDb250cm9sbGVkSW1hZ2UoY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGJpdG1hcEhh
bmRsZSkKLXsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZShiaXRtYXBIYW5kbGUpOwotICAgIGlmIChiaXRtYXApCi0gICAgICAgIG1f
Y29udGV4dE1lbnUtPnJlcGxhY2VDb250cm9sbGVkSW1hZ2UoYml0bWFwLT5jcmVhdGVJbWFnZSgp
KTsKLX0KLSNlbmRpZgotCiB2b2lkIFdlYlBhZ2U6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChG
cmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICBib29sIHNlbGVjdFJlcGxh
Y2VtZW50ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCmluZGV4IGQ2OGQyYzcuLjZkZjM0MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNzcxLDEwICs3NzEsNiBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudExvYWRlcj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIoV2Vi
Q29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJD
b3JlOjpTdWJzdGl0dXRlRGF0YSYpOwogCiAgICAgdm9pZCBnZXRCeXRlY29kZVByb2ZpbGUodWlu
dDY0X3QgY2FsbGJhY2tJRCk7Ci0KLSNpZiBFTkFCTEUoSU1BR0VfQ09OVFJPTFMpCi0gICAgdm9p
ZCByZXBsYWNlQ29udHJvbGxlZEltYWdlKGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7
Ci0jZW5kaWYKICAgICAKICAgICAvLyBTb21lIHBsYXRmb3JtcyByZXF1aXJlIGFjY2Vzc2liaWxp
dHktZW5hYmxlZCBwcm9jZXNzZXMgdG8gc3BpbiB0aGUgcnVuIGxvb3Agc28gdGhhdCB0aGUgV2Vi
UHJvY2VzcyBkb2Vzbid0IGhhbmcuCiAgICAgLy8gV2hpbGUgdGhpcyBpcyBub3QgaWRlYWwsIGl0
IGRvZXMgbm90IGhhdmUgdG8gYmUgYXBwbGllZCB0byBldmVyeSBwbGF0Zm9ybSBhdCB0aGUgbW9t
ZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgppbmRleCAzYjBhZTc3Li5hYjVhNGNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtMzYy
LDggKzM2Miw0IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIEdl
dEJ5dGVjb2RlUHJvZmlsZSh1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIAogICAgIFRha2VTbmFw
c2hvdChXZWJDb3JlOjpJbnRSZWN0IHNuYXBzaG90UmVjdCwgV2ViQ29yZTo6SW50U2l6ZSBiaXRt
YXBTaXplLCB1aW50MzJfdCBvcHRpb25zLCB1aW50NjRfdCBjYWxsYmFja0lEKQotCi0jaWYgRU5B
QkxFKElNQUdFX0NPTlRST0xTKQotICAgIFJlcGxhY2VDb250cm9sbGVkSW1hZ2UoV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBuZXdCaXRtYXBIYW5kbGUpCi0jZW5kaWYKIH0K
</data>
<flag name="commit-queue"
          id="254264"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229903</attachid>
            <date>2014-04-22 11:47:21 -0700</date>
            <delta_ts>2014-04-29 13:12:25 -0700</delta_ts>
            <desc>Patch for landing hopefully</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17464</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5M2FkMDgyLi4yYzc4YjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTQtMDQtMjIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENoYW5nZSBJbWFnZSBDb250cm9scyByZXBsYWNlbWVudCB0byB1c2Ugc2VsZWN0aW9uIGFu
ZCBwYXN0ZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTYzMDI3MjI+IGFuZCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTkyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgVGltIEhvcnRvbi4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBSZW1vdmUgZGVsZXRl
ZCBzeW1ib2wuCisKKyAgICAgICAgKiBodG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRv
bkVsZW1lbnRNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VDb250cm9sc0J1dHRvbkVs
ZW1lbnRNYWM6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorCisgICAgICAgICogcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9s
bGVyOjpzaG93SW1hZ2VDb250cm9sc01lbnUpOiBTZWxlY3QgdGhlIGltYWdlIGVsZW1lbnQKKyAg
ICAgICAgICBiZWZvcmUgc2hvd2luZyB0aGUgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6cmVwbGFjZUNvbnRyb2xsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaDoKKwogMjAxNC0wNC0yMiAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjE2NzY1OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZjIwM2I1Yi4uZDMx
MzQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTI5ODcsMTAgKzI5ODcsNiBAQCBfX1pOSzdX
ZWJDb3JlMTJJY29uRGF0YWJhc2UyNHNob3VsZFN0b3BUaHJlYWRBY3Rpdml0eUV2CiBfX1pOSzdX
ZWJDb3JlMTJJY29uRGF0YWJhc2U5aXNFbmFibGVkRXYKICNlbmRpZgogCi0jaWYgRU5BQkxFKElN
QUdFX0NPTlRST0xTKQotX19aTjdXZWJDb3JlMjFDb250ZXh0TWVudUNvbnRyb2xsZXIyMnJlcGxh
Y2VDb250cm9sbGVkSW1hZ2VFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUltYWdlRUVFCi0jZW5kaWYK
LQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogX19aTjdXZWJDb3JlMTBJREJLZXlEYXRh
MTRzZXROdW1iZXJWYWx1ZUVkCiBfX1pON1dlYkNvcmUxMElEQktleURhdGE2ZGVjb2RlRVJOU18x
MktleWVkRGVjb2RlckVSUzBfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAppbmRleCAx
YjhiYzAwLi5lMTJlNjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9t
YWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAKQEAgLTMw
LDExICszMCwxNSBAQAogCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0
aW9uLmgiCiAjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk5LDggKzEwMywzMyBAQCBQ
YXNzUmVmUHRyPEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjPiBJbWFnZUNvbnRyb2xzQnV0
dG9uRWxlbWVudE1hYzo6bWF5YmVDcgogdm9pZCBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1h
Yzo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29u
dHJvbGxlcigpLnNob3dJbWFnZUNvbnRyb2xzTWVudShldmVudCk7CisgICAgICAgIC8vIEJlZm9y
ZSBzaG93aW5nIHRoZSBtZW51LCBjaGFuZ2UgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBy
ZXByZXNlbnRlZCBJbWFnZSBlbGVtZW50LgorICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQg
PSBwYXJlbnROb2RlKCk7CisgICAgICAgIEVsZW1lbnQqIGhvc3RFbGVtZW50ID0gbnVsbHB0cjsK
KyAgICAgICAgd2hpbGUgKHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNTaGFk
b3dSb290KCkpIHsKKyAgICAgICAgICAgICAgICBob3N0RWxlbWVudCA9IHN0YXRpY19jYXN0PFNo
YWRvd1Jvb3QqPihwYXJlbnQpLT5ob3N0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2Rl
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWhvc3RFbGVtZW50KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBBU1NFUlQoaXNIVE1MSW1hZ2VFbGVtZW50KGhvc3RFbGVtZW50KSk7
CisKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpOworICAgICAgICBp
ZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFBhZ2UqIHBhZ2UgPSBk
b2N1bWVudCgpLnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIFBvc2l0aW9uKGhvc3RFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hv
ciksIFBvc2l0aW9uKGhvc3RFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9y
KSk7CisgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihyYW5nZS5nZXQoKSkpOworCisgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxl
cigpLnNob3dJbWFnZUNvbnRyb2xzTWVudShldmVudCk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDE3YWU0NTYuLjU0MjMxOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTE0
NTIsMjQgKzE0NTIsNiBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6c2hvd0ltYWdlQ29u
dHJvbHNNZW51KEV2ZW50KiBldmVudCkKICAgICBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50
KTsKICAgICBtX2NsaWVudC5zaG93Q29udGV4dE1lbnUoKTsKIH0KLQotdm9pZCBDb250ZXh0TWVu
dUNvbnRyb2xsZXI6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0cjxJbWFnZT4gbmV3
SW1hZ2UpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuaW5u
ZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUt
PnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzUmVuZGVySW1h
Z2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
SW1hZ2U+IHJlcGxhY2VkSW1hZ2UgPSBuZXcgQ2FjaGVkSW1hZ2UoVVJMOjpmYWtlVVJMV2l0aFJl
bGF0aXZlUGFydCgiaW1hZ2UiKSwgbmV3SW1hZ2UuZ2V0KCksIGZyYW1lLT5wYWdlKCktPnNlc3Np
b25JRCgpKTsKLSAgICB0b1JlbmRlckltYWdlKHJlbmRlcmVyKS0+aW1hZ2VSZXNvdXJjZSgpLnNl
dENhY2hlZEltYWdlKHJlcGxhY2VkSW1hZ2UuZ2V0KCkpOwotfQogI2VuZGlmCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5oCmluZGV4IDg1OGU4OTkuLjlhNGM0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuaApAQCAtNzEsNyArNzEsNiBAQCBwdWJsaWM6CiAKICNpZiBFTkFC
TEUoSU1BR0VfQ09OVFJPTFMpCiAgICAgdm9pZCBzaG93SW1hZ2VDb250cm9sc01lbnUoRXZlbnQq
KTsKLSAgICB2b2lkIHJlcGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0cjxJbWFnZT4pOwog
I2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNmJhMTQzNC4uZWI3ZjZhNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA0LTIyICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgSW1hZ2UgQ29udHJvbHMg
cmVwbGFjZW1lbnQgdG8gdXNlIHNlbGVjdGlvbiBhbmQgcGFzdGUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzE2MzAyNzIyPiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMTk5MgorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAg
KiBNaXNjL1dlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1b
V2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIHNoYXJpbmdTZXJ2aWNlOmRpZFNoYXJl
SXRlbXM6XSk6IFdyaXRlIHRoZQorICAgICAgICAgIHJlcGxhY2VtZW50IGRhdGEgdG8gYSBzcGVj
aWFsIHBhc3RlYm9hcmQsIHRoZW4gcmVwbGFjZSB0aGUgY3VycmVudCBzZWxlY3Rpb24gZnJvbQor
ICAgICAgICAgIHRoYXQgcGFzdGVib2FyZC4KKwogMjAxNC0wNC0yMSAgRXJpYyBDYXJsc29uICA8
ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBpbXBsZW1lbnQgV2ViS2l0
RGF0YUN1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJTaGFyaW5nU2Vy
dmljZVBpY2tlckNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlNoYXJp
bmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlci5tbQppbmRleCAwMjVhYWUxLi45YjlhMDAyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29u
dHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlNoYXJpbmdTZXJ2aWNl
UGlja2VyQ29udHJvbGxlci5tbQpAQCAtMzEsNiArMzEsMTAgQEAKICNpbXBvcnQgIldlYlZpZXdJ
bnRlcm5hbC5oIgogI2ltcG9ydCA8QXBwS2l0L05TU2hhcmluZ1NlcnZpY2UuaD4KICNpbXBvcnQg
PFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogCkBAIC00
OCw2ICs1Miw4IEBAIEBlbmQKIAogI2VuZGlmCiAKK3N0YXRpYyBOU1N0cmluZyAqaW1hZ2VDb250
cm9sUGFzdGVib2FyZE5hbWUgPSBAIldlYktpdEltYWdlQ29udHJvbHNQYXN0ZWJvYXJkIjsKKwog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJTaGFyaW5nU2Vy
dmljZVBpY2tlckNvbnRyb2xsZXIKQEAgLTExOSwxMyArMTI1LDIxIEBAIC0gKHZvaWQpc2hhcmlu
Z1NlcnZpY2U6KE5TU2hhcmluZ1NlcnZpY2UgKilzaGFyaW5nU2VydmljZSBkaWRTaGFyZUl0ZW1z
OihOU0FycmF5CiAKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVNvdXJjZVJlZj4gc291cmNlID0gYWRv
cHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aERhdGEoKENGRGF0YVJlZilbaXRlbXMgb2JqZWN0
QXRJbmRleDowXSwgTlVMTCkpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0g
YWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KHNvdXJjZS5nZXQoKSwgMCwg
TlVMTCkpOwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNn
SW1hZ2UuZ2V0KCkpOworCisgICAgaWYgKCFjZ0ltYWdlKQorICAgICAgICByZXR1cm47CiAKICAg
ICBQYWdlKiBwYWdlID0gW19tZW51Q2xpZW50LT53ZWJWaWV3KCkgcGFnZV07CiAgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIo
KS5yZXBsYWNlQ29udHJvbGxlZEltYWdlKGltYWdlLmdldCgpKTsKKyAgICBOU1Bhc3RlYm9hcmQg
KnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTppbWFnZUNvbnRy
b2xQYXN0ZWJvYXJkTmFtZV07CisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOkBbIE5TUGFz
dGVib2FyZFR5cGVUSUZGIF0gb3duZXI6bmlsXTsKKyAgICBbcGFzdGVib2FyZCBzZXREYXRhOltp
dGVtcyBvYmplY3RBdEluZGV4OjBdIGZvclR5cGU6TlNQYXN0ZWJvYXJkVHlwZVRJRkZdOworCisg
ICAgRnJhbWUmIGZyYW1lID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICAgICAgZnJh
bWUuZWRpdG9yKCkucmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGltYWdlQ29udHJvbFBhc3Rl
Ym9hcmROYW1lKTsKIAogICAgIFtzZWxmIGNsZWFyXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjZmI0ZWM3
Li41NzMxYzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTQtMDQtMjIgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5nZSBJbWFnZSBDb250
cm9scyByZXBsYWNlbWVudCB0byB1c2Ugc2VsZWN0aW9uIGFuZCBwYXN0ZQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTYzMDI3MjI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxOTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbToKKyAgICAgICAg
KC1bV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlIHNoYXJpbmdTZXJ2aWNlOmRpZFNoYXJl
SXRlbXM6XSk6IFdyaXRlIHRoZQorICAgICAgICAgIHJlcGxhY2VtZW50IGRhdGEgdG8gYSBzcGVj
aWFsIHBhc3RlYm9hcmQsIHRoZW4gcmVwbGFjZSB0aGUgY3VycmVudCBzZWxlY3Rpb24gZnJvbQor
ICAgICAgICAgIHRoYXQgcGFzdGVib2FyZC4KKworICAgICAgICBSZW1vdmUgYWxsIG90aGVyIGNv
ZGUgdXNlZCB0byBzdXBwb3J0IHRoZSBvbGQgcmVwbGFjZW1lbnQgbWVjaGFuaXNtOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRN
ZW51UHJveHlNYWMuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6
cGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlNYWM6OnJlcGxhY2VD
b250cm9sbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJDb250ZXh0TWVudS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51OjpyZXBs
YWNlQ29udHJvbGxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViQ29udGV4dE1lbnUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2Up
OiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisKIDIwMTQtMDQt
MjIgIEV1bm1pIExlZSAgPGV1bm1pMTUubGVlQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxd
W1dLMl0gUmVtb3ZlIGR1cGxpY2F0ZWQgY29kZSB0byBzZXQgc2l6ZSB0byB0aGUgRHJhd2luZ0Fy
ZWEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGE4NTgw
NjEuLjczMTgxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CkBAIC0zNDQ1LDE2ICszNDQ1LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmludGVybmFsU2hvd0Nv
bnRleHRNZW51KGNvbnN0IEludFBvaW50JiBtZW51TG9jYXRpb24sIGNvbnN0IEMKICAgICBtX2Nv
bnRleHRNZW51Q2xpZW50LmNvbnRleHRNZW51RGlzbWlzc2VkKHRoaXMpOwogfQogCi0jaWYgRU5B
QkxFKElNQUdFX0NPTlRST0xTKQotdm9pZCBXZWJQYWdlUHJveHk6OnJlcGxhY2VDb250cm9sbGVk
SW1hZ2UoUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG5ld0JpdG1hcCkKLXsKLSAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBuZXdCaXRtYXA7Ci0gICAgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUgYml0bWFwSGFuZGxlOwotICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGJpdG1h
cEhhbmRsZSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXBsYWNl
Q29udHJvbGxlZEltYWdlKGJpdG1hcEhhbmRsZSksIG1fcGFnZUlEKTsKLX0KLSNlbmRpZgotCiB2
b2lkIFdlYlBhZ2VQcm94eTo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4
dE1lbnVJdGVtRGF0YSYgaXRlbSkKIHsKICAgICAvLyBBcHBsaWNhdGlvbiBjdXN0b20gaXRlbXMg
ZG9uJ3QgbmVlZCB0byByb3VuZC10cmlwIHRocm91Z2ggdG8gV2ViQ29yZSBpbiB0aGUgV2ViUHJv
Y2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA0YTBiYmQ3
Li40MzhjMjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0x
MDU5LDEwICsxMDU5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB0YWtlU25hcHNob3QoV2ViQ29y
ZTo6SW50UmVjdCwgV2ViQ29yZTo6SW50U2l6ZSBiaXRtYXBTaXplLCBTbmFwc2hvdE9wdGlvbnMs
IEltYWdlQ2FsbGJhY2s6OkNhbGxiYWNrRnVuY3Rpb24pOwogCi0jaWYgRU5BQkxFKElNQUdFX0NP
TlRST0xTKQotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShQYXNzUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4pOwotI2VuZGlmCi0KIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VD
bGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCB1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VD
b25maWd1cmF0aW9uJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmgK
aW5kZXggYjg3NDkzNi4uMzk3YmNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLmgKQEAgLTU1LDkgKzU1LDkgQEAgcHVi
bGljOgogCiAjaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQogICAgIHZvaWQgY2xlYXJJbWFnZVNl
cnZpY2VzTWVudSgpOwotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShDR0ltYWdlUmVm
IG5ld0ltYWdlKTsKICNlbmRpZgogCisgICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgY29uc3QgeyBy
ZXR1cm4gKm1fcGFnZTsgfQogICAgIE5TV2luZG93ICp3aW5kb3coKSBjb25zdDsKIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbQppbmRleCBjMjc4NmM1Li4zYzE5YTVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCkBAIC01
Niw3ICs1NiwxMCBAQCBAaW50ZXJmYWNlIE5TU2hhcmluZ1NlcnZpY2VQaWNrZXIgKERldGFpbHMp
CiBAcHJvcGVydHkgTlNTaGFyaW5nU2VydmljZVBpY2tlclN0eWxlIHN0eWxlOwogLSAoTlNNZW51
ICopbWVudTsKIEBlbmQKLSNlbmRpZgorCitzdGF0aWMgTlNTdHJpbmcgKmltYWdlQ29udHJvbFBh
c3RlYm9hcmROYW1lID0gQCJXZWJLaXRJbWFnZUNvbnRyb2xzUGFzdGVib2FyZCI7CisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU1BR0VfQ09OVFJPTFMpCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC0yMzEsNyArMjM0LDE1IEBAIC0gKHZvaWQpc2hhcmluZ1NlcnZpY2U6KE5TU2hhcmluZ1Nl
cnZpY2UgKilzaGFyaW5nU2VydmljZSBkaWRTaGFyZUl0ZW1zOihOU0FycmF5CiB7CiAgICAgUmV0
YWluUHRyPENHSW1hZ2VTb3VyY2VSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNy
ZWF0ZVdpdGhEYXRhKChDRkRhdGFSZWYpW2l0ZW1zIG9iamVjdEF0SW5kZXg6MF0sIE5VTEwpKTsK
ICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VD
cmVhdGVJbWFnZUF0SW5kZXgoc291cmNlLmdldCgpLCAwLCBOVUxMKSk7Ci0gICAgX21lbnVQcm94
eS0+cmVwbGFjZUNvbnRyb2xsZWRJbWFnZShpbWFnZS5nZXQoKSk7CisKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQ
YXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTppbWFnZUNvbnRyb2xQYXN0ZWJvYXJkTmFtZV07
CisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOkBbIE5TUGFzdGVib2FyZFR5cGVUSUZGIF0g
b3duZXI6bmlsXTsKKyAgICBbcGFzdGVib2FyZCBzZXREYXRhOltpdGVtcyBvYmplY3RBdEluZGV4
OjBdIGZvclR5cGU6TlNQYXN0ZWJvYXJkVHlwZVRJRkZdOworICAgIAorICAgIF9tZW51UHJveHkt
PnBhZ2UoKS5yZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoaW1hZ2VDb250cm9sUGFzdGVib2Fy
ZE5hbWUpOwogfQogCiAtIChOU1dpbmRvdyAqKXNoYXJpbmdTZXJ2aWNlOihOU1NoYXJpbmdTZXJ2
aWNlICopc2hhcmluZ1NlcnZpY2Ugc291cmNlV2luZG93Rm9yU2hhcmVJdGVtczooTlNBcnJheSAq
KWl0ZW1zIHNoYXJpbmdDb250ZW50U2NvcGU6KE5TU2hhcmluZ0NvbnRlbnRTY29wZSAqKXNoYXJp
bmdDb250ZW50U2NvcGUKQEAgLTI0OSw2ICsyNjAsNyBAQCBXZWJDb250ZXh0TWVudVByb3h5TWFj
OjpXZWJDb250ZXh0TWVudVByb3h5TWFjKFdLVmlldyogd2ViVmlldywgV2ViUGFnZVByb3h5KiBw
YQogICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3BhZ2UocGFnZSkKIHsKKyAgICBB
U1NFUlQobV9wYWdlKTsKIH0KIAogV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6fldlYkNvbnRleHRN
ZW51UHJveHlNYWMoKQpAQCAtNDMzLDE3ICs0NDUsNiBAQCBOU1dpbmRvdyAqV2ViQ29udGV4dE1l
bnVQcm94eU1hYzo6d2luZG93KCkgY29uc3QKICAgICByZXR1cm4gW21fd2ViVmlldyB3aW5kb3dd
OwogfQogCi0jaWYgRU5BQkxFKElNQUdFX0NPTlRST0xTKQotdm9pZCBXZWJDb250ZXh0TWVudVBy
b3h5TWFjOjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKENHSW1hZ2VSZWYgbmV3SW1hZ2UpCi17Ci0g
ICAgRmxvYXRTaXplIG5ld0ltYWdlU2l6ZShDR0ltYWdlR2V0V2lkdGgobmV3SW1hZ2UpLCBDR0lt
YWdlR2V0SGVpZ2h0KG5ld0ltYWdlKSk7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbmV3
Qml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoZXhwYW5kZWRJbnRTaXpl
KG5ld0ltYWdlU2l6ZSksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Ci0gICAgbmV3
Qml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKS0+ZHJhd05hdGl2ZUltYWdlKG5ld0ltYWdl
LCBuZXdJbWFnZVNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIG5ld0ltYWdlU2l6ZSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG5ld0ltYWdlU2l6ZSkp
OwotCi0gICAgbV9wYWdlLT5yZXBsYWNlQ29udHJvbGxlZEltYWdlKG5ld0JpdG1hcC5yZWxlYXNl
KCkpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkNvbnRleHRNZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJDb250ZXh0TWVudS5jcHAKaW5kZXggMDk4NjY5ZC4uMjhjZDM0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCkBAIC03
NywxMyArNzcsNiBAQCB2b2lkIFdlYkNvbnRleHRNZW51OjppdGVtU2VsZWN0ZWQoY29uc3QgV2Vi
Q29udGV4dE1lbnVJdGVtRGF0YSYgaXRlbSkKICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmNvbnRl
eHRNZW51Q29udHJvbGxlcigpLmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKCZjb3JlSXRlbSk7CiB9
CiAKLSNpZiBFTkFCTEUoSU1BR0VfQ09OVFJPTFMpCi12b2lkIFdlYkNvbnRleHRNZW51OjpyZXBs
YWNlQ29udHJvbGxlZEltYWdlKFBhc3NSZWZQdHI8SW1hZ2U+IG5ld0ltYWdlKQotewotICAgIG1f
cGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkucmVwbGFjZUNvbnRyb2xs
ZWRJbWFnZShuZXdJbWFnZSk7Ci19Ci0jZW5kaWYKLQogdm9pZCBXZWJDb250ZXh0TWVudTo6bWVu
dUl0ZW1zV2l0aFVzZXJEYXRhKFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiAmbWVudUl0
ZW1zLCBSZWZQdHI8QVBJOjpPYmplY3Q+JiB1c2VyRGF0YSkgY29uc3QKIHsKICAgICBDb250ZXh0
TWVudUNvbnRyb2xsZXImIGNvbnRyb2xsZXIgPSBtX3BhZ2UtPmNvcmVQYWdlKCktPmNvbnRleHRN
ZW51Q29udHJvbGxlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkNvbnRleHRNZW51LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViQ29udGV4dE1lbnUuaAppbmRleCBkOWIxODgzLi5mYzYzYWZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuaApAQCAtNTAs
MTAgKzUwLDYgQEAgcHVibGljOgogICAgIHZvaWQgaXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRl
eHRNZW51SXRlbURhdGEmKTsKICAgICBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gaXRl
bXMoKSBjb25zdDsKIAotI2lmIEVOQUJMRShJTUFHRV9DT05UUk9MUykKLSAgICB2b2lkIHJlcGxh
Y2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0cjxXZWJDb3JlOjpJbWFnZT4pOwotI2VuZGlmCi0K
IHByaXZhdGU6CiAgICAgV2ViQ29udGV4dE1lbnUoV2ViUGFnZSopOwogICAgIHZvaWQgbWVudUl0
ZW1zV2l0aFVzZXJEYXRhKFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYsIFJlZlB0cjxB
UEk6Ok9iamVjdD4mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAppbmRleCBiZGJkNTU4Li5mODIzNWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zMTE0LDE1ICszMTE0LDYgQEAg
dm9pZCBXZWJQYWdlOjpkaWRTZWxlY3RJdGVtRnJvbUFjdGl2ZUNvbnRleHRNZW51KGNvbnN0IFdl
YkNvbnRleHRNZW51SXRlbURhdGEmIGkKIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKElNQUdFX0NP
TlRST0xTKQotdm9pZCBXZWJQYWdlOjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKGNvbnN0IFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlJiBiaXRtYXBIYW5kbGUpCi17Ci0gICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoYml0bWFwSGFuZGxlKTsK
LSAgICBpZiAoYml0bWFwKQotICAgICAgICBtX2NvbnRleHRNZW51LT5yZXBsYWNlQ29udHJvbGxl
ZEltYWdlKGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKSk7Ci19Ci0jZW5kaWYKLQogdm9pZCBXZWJQYWdl
OjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHRl
eHQpCiB7CiAgICAgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCA9IHRydWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBkNjhkMmM3Li42ZGYzNDBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTc3MSwx
MCArNzcxLDYgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2Fk
ZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEmKTsKIAogICAg
IHZvaWQgZ2V0Qnl0ZWNvZGVQcm9maWxlKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwotCi0jaWYgRU5B
QkxFKElNQUdFX0NPTlRST0xTKQotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShjb25z
dCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpOwotI2VuZGlmCiAgICAgCiAgICAgLy8gU29tZSBw
bGF0Zm9ybXMgcmVxdWlyZSBhY2Nlc3NpYmlsaXR5LWVuYWJsZWQgcHJvY2Vzc2VzIHRvIHNwaW4g
dGhlIHJ1biBsb29wIHNvIHRoYXQgdGhlIFdlYlByb2Nlc3MgZG9lc24ndCBoYW5nLgogICAgIC8v
IFdoaWxlIHRoaXMgaXMgbm90IGlkZWFsLCBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGFwcGxpZWQg
dG8gZXZlcnkgcGxhdGZvcm0gYXQgdGhlIG1vbWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggM2IwYWU3Ny4u
YWI1YTRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTM2Miw4ICszNjIsNCBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBHZXRCeXRlY29kZVByb2ZpbGUodWludDY0X3QgY2Fs
bGJhY2tJRCkKICAgICAKICAgICBUYWtlU25hcHNob3QoV2ViQ29yZTo6SW50UmVjdCBzbmFwc2hv
dFJlY3QsIFdlYkNvcmU6OkludFNpemUgYml0bWFwU2l6ZSwgdWludDMyX3Qgb3B0aW9ucywgdWlu
dDY0X3QgY2FsbGJhY2tJRCkKLQotI2lmIEVOQUJMRShJTUFHRV9DT05UUk9MUykKLSAgICBSZXBs
YWNlQ29udHJvbGxlZEltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgbmV3Qml0
bWFwSGFuZGxlKQotI2VuZGlmCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230407</attachid>
            <date>2014-04-29 13:12:25 -0700</date>
            <delta_ts>2014-04-29 13:56:59 -0700</delta_ts>
            <desc>Patch with new approach - v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>37188</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZjAwZjMxLi5jN2FkMTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTQtMDQtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENoYW5nZSBJbWFnZSBDb250cm9scyByZXBsYWNlbWVudCB0byB1c2Ugc2VsZWN0aW9uIGFu
ZCBwYXN0ZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTYzMDI3MjI+IGFuZCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTkyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3ZlIGRl
bGV0ZWQgc3ltYm9sLgorCisgICAgICAgICogaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNC
dXR0b25FbGVtZW50TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ29udHJvbHNCdXR0
b25FbGVtZW50TWFjOjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKworICAgICAgICAqIHBhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6c2hvd0ltYWdlQ29udHJvbHNNZW51KTogU2VsZWN0IHRoZSBpbWFnZSBlbGVtZW50
CisgICAgICAgICAgYmVmb3JlIHNob3dpbmcgdGhlIG1lbnUuCisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0TWVudUNvbnRyb2xsZXI6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmg6CisKIDIwMTQtMDQtMjggIENv
bW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIxNjc4NzEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDk5MDEzZjcu
LjFlYTA0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yMjksNiArMjI5LDcgQEAgX19aTjdX
ZWJDb3JlMTJSZW5kZXJXaWRnZXQ5c2V0V2lkZ2V0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzZXaWRn
ZXRFRUUKIF9fWk43V2ViQ29yZTEyU1FMUmVzdWx0Um93RQogX19aTjdXZWJDb3JlMTJTaGFyZWRC
dWZmZXIxMHdyYXBDRkRhdGFFUEs4X19DRkRhdGEKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVy
MTB3cmFwTlNEYXRhRVA2TlNEYXRhCitfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjExYWRvcHRW
ZWN0b3JFUk4zV1RGNlZlY3RvckljTG0wRU5TMV8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdX
ZWJDb3JlMTJTaGFyZWRCdWZmZXIxMmNyZWF0ZUNGRGF0YUV2CiBfX1pON1dlYkNvcmUxMlNoYXJl
ZEJ1ZmZlcjEyY3JlYXRlTlNEYXRhRXYKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMjRjcmVh
dGVXaXRoQ29udGVudHNPZkZpbGVFUktOM1dURjZTdHJpbmdFCkBAIC0yOTg2LDEwICsyOTg3LDYg
QEAgX19aTks3V2ViQ29yZTEySWNvbkRhdGFiYXNlMjRzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHlF
dgogX19aTks3V2ViQ29yZTEySWNvbkRhdGFiYXNlOWlzRW5hYmxlZEV2CiAjZW5kaWYKIAotI2lm
IEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotX19aTjdXZWJDb3JlMjFDb250ZXh0TWVudUNvbnRy
b2xsZXIyMnJlcGxhY2VDb250cm9sbGVkSW1hZ2VFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUltYWdl
RUVFCi0jZW5kaWYKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogX19aTjdXZWJDb3Jl
MTBJREJLZXlEYXRhMTRzZXROdW1iZXJWYWx1ZUVkCiBfX1pON1dlYkNvcmUxMElEQktleURhdGE2
ZGVjb2RlRVJOU18xMktleWVkRGVjb2RlckVSUzBfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFj
LmNwcAppbmRleCBlMGRiOTZkLi5jNzhmNjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1h
Yy5jcHAKQEAgLTMwLDExICszMCwxNSBAQAogCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cu
aCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisj
aW5jbHVkZSAiU2hhZG93Um9vdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk5LDgg
KzEwMywzMyBAQCBQYXNzUmVmUHRyPEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjPiBJbWFn
ZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYzo6bWF5YmVDcgogdm9pZCBJbWFnZUNvbnRyb2xzQnV0
dG9uRWxlbWVudE1hYzo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAg
aWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmNv
bnRleHRNZW51Q29udHJvbGxlcigpLnNob3dJbWFnZUNvbnRyb2xzTWVudShldmVudCk7CisgICAg
ICAgIC8vIEJlZm9yZSBzaG93aW5nIHRoZSBtZW51LCBjaGFuZ2UgdGhlIGN1cnJlbnQgc2VsZWN0
aW9uIHRvIHRoZSByZXByZXNlbnRlZCBJbWFnZSBlbGVtZW50LgorICAgICAgICBDb250YWluZXJO
b2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CisgICAgICAgIEVsZW1lbnQqIGhvc3RFbGVtZW50
ID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHBh
cmVudC0+aXNTaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgICAgICBob3N0RWxlbWVudCA9IHN0
YXRpY19jYXN0PFNoYWRvd1Jvb3QqPihwYXJlbnQpLT5ob3N0RWxlbWVudCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50
LT5wYXJlbnROb2RlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWhvc3RFbGVtZW50KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQoaXNIVE1MSW1hZ2VFbGVtZW50KGhv
c3RFbGVtZW50KSk7CisKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgp
OworICAgICAgICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFBh
Z2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIFBvc2l0aW9uKGhvc3RFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25J
c0JlZm9yZUFuY2hvciksIFBvc2l0aW9uKGhvc3RFbGVtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25J
c0FmdGVyQW5jaG9yKSk7CisgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbihyYW5nZS5nZXQoKSkpOworCisgICAgICAgIHBhZ2UtPmNvbnRleHRN
ZW51Q29udHJvbGxlcigpLnNob3dJbWFnZUNvbnRyb2xzTWVudShldmVudCk7CiAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IGQxZjQzZWEu
LjE2NDk1NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5jcHAKQEAgLTE0NTIsMjQgKzE0NTIsNiBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6
c2hvd0ltYWdlQ29udHJvbHNNZW51KEV2ZW50KiBldmVudCkKICAgICBoYW5kbGVDb250ZXh0TWVu
dUV2ZW50KGV2ZW50KTsKICAgICBtX2NsaWVudC5zaG93Q29udGV4dE1lbnUoKTsKIH0KLQotdm9p
ZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0
cjxJbWFnZT4gbmV3SW1hZ2UpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1fY29udGV4dC5oaXRUZXN0
UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0g
ICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXIt
PmlzUmVuZGVySW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkSW1hZ2U+IHJlcGxhY2VkSW1hZ2UgPSBuZXcgQ2FjaGVkSW1hZ2UoVVJMOjpm
YWtlVVJMV2l0aFJlbGF0aXZlUGFydCgiaW1hZ2UiKSwgbmV3SW1hZ2UuZ2V0KCksIGZyYW1lLT5w
YWdlKCktPnNlc3Npb25JRCgpKTsKLSAgICB0b1JlbmRlckltYWdlKHJlbmRlcmVyKS0+aW1hZ2VS
ZXNvdXJjZSgpLnNldENhY2hlZEltYWdlKHJlcGxhY2VkSW1hZ2UuZ2V0KCkpOwotfQogI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5oCmluZGV4IDc1YmUzNDYuLmM5OTY2OWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaApAQCAtNzEsNyArNzEsNiBAQCBwdWJsaWM6
CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKICAgICB2b2lkIHNob3dJbWFnZUNvbnRy
b2xzTWVudShFdmVudCopOwotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShQYXNzUmVm
UHRyPEltYWdlPik7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA2NTlj
NjUyLi4yMWJiNDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTQtMDQt
MjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5nZSBJ
bWFnZSBDb250cm9scyByZXBsYWNlbWVudCB0byB1c2Ugc2VsZWN0aW9uIGFuZCBwYXN0ZQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMTYzMDI3MjI+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxl
ci5tbToKKyAgICAgICAgKC1bV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIHNoYXJp
bmdTZXJ2aWNlOmRpZFNoYXJlSXRlbXM6XSk6IFdyaXRlIHRoZQorICAgICAgICAgIHJlcGxhY2Vt
ZW50IGRhdGEgdG8gYSBzcGVjaWFsIHBhc3RlYm9hcmQsIHRoZW4gcmVwbGFjZSB0aGUgY3VycmVu
dCBzZWxlY3Rpb24gZnJvbQorICAgICAgICAgIHRoYXQgcGFzdGVib2FyZC4KKwogMjAxNC0wNC0y
NyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtpT1MgV2ViS2l0Ml0g
QWRkIHN1cHBvcnQgZm9yIHRleHQgYXV0b3NpemluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJTaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIubW0gYi9Tb3VyY2Uv
V2ViS2l0L21hYy9NaXNjL1dlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlci5tbQppbmRl
eCA3ZGFiZGZkLi4wZTNkMzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dl
YlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlci5tbQpAQCAtMzEsNiArMzEs
MTAgQEAKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8QXBwS2l0L05TU2hh
cmluZ1NlcnZpY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvRWRpdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlv
bi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUGFnZS5oPgogCkBAIC00OCw2ICs1Miw4IEBAIEBlbmQKIAogI2VuZGlmCiAKK3N0
YXRpYyBOU1N0cmluZyAqaW1hZ2VDb250cm9sUGFzdGVib2FyZE5hbWUgPSBAIldlYktpdEltYWdl
Q29udHJvbHNQYXN0ZWJvYXJkIjsKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBs
ZW1lbnRhdGlvbiBXZWJTaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIKQEAgLTExOSwxMyAr
MTI1LDIxIEBAIC0gKHZvaWQpc2hhcmluZ1NlcnZpY2U6KE5TU2hhcmluZ1NlcnZpY2UgKilzaGFy
aW5nU2VydmljZSBkaWRTaGFyZUl0ZW1zOihOU0FycmF5CiAKICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVNvdXJjZVJlZj4gc291cmNlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aERhdGEo
KENGRGF0YVJlZilbaXRlbXMgb2JqZWN0QXRJbmRleDowXSwgTlVMTCkpOwogICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VB
dEluZGV4KHNvdXJjZS5nZXQoKSwgMCwgTlVMTCkpOwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Ug
PSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UuZ2V0KCkpOworCisgICAgaWYgKCFjZ0ltYWdl
KQorICAgICAgICByZXR1cm47CiAKICAgICBQYWdlKiBwYWdlID0gW19tZW51Q2xpZW50LT53ZWJW
aWV3KCkgcGFnZV07CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYWdl
LT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS5yZXBsYWNlQ29udHJvbGxlZEltYWdlKGltYWdlLmdl
dCgpKTsKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3Rl
Ym9hcmRXaXRoTmFtZTppbWFnZUNvbnRyb2xQYXN0ZWJvYXJkTmFtZV07CisgICAgW3Bhc3RlYm9h
cmQgZGVjbGFyZVR5cGVzOkBbIE5TUGFzdGVib2FyZFR5cGVUSUZGIF0gb3duZXI6bmlsXTsKKyAg
ICBbcGFzdGVib2FyZCBzZXREYXRhOltpdGVtcyBvYmplY3RBdEluZGV4OjBdIGZvclR5cGU6TlNQ
YXN0ZWJvYXJkVHlwZVRJRkZdOworCisgICAgRnJhbWUmIGZyYW1lID0gcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZS5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKKyAgICAgICAgZnJhbWUuZWRpdG9yKCkucmVhZFNlbGVjdGlvbkZyb21QYXN0
ZWJvYXJkKGltYWdlQ29udHJvbFBhc3RlYm9hcmROYW1lKTsKIAogICAgIFtzZWxmIGNsZWFyXTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCA0ZWUzMzFjLi5jZWNjMDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTYgQEAKKzIwMTQtMDQtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisg
ICAgICAgIENoYW5nZSBJbWFnZSBDb250cm9scyByZXBsYWNlbWVudCB0byB1c2Ugc2VsZWN0aW9u
IGFuZCBwYXN0ZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTYzMDI3MjI+IGFuZCBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTkyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgInBhc3RlYm9hcmQgb3ZlcnJp
ZGUiIG1lY2hhbmlzbSB3aGljaCBhbGxvd3MgV2ViS2l0IHRvIGtlZXAgcGFzdGVib2FyZCBjb250
ZW50IGxvY2FsCisgICAgICAgIHRvIHRoZSBXZWJQcm9jZXNzIGFuZCBhY2Nlc3MgaXQgdGhlcmUg
d2l0aG91dCBoYXZpbmcgdG8gbWVzc2FnZSB1cCB0byB0aGUgVUkgcHJvY2VzczoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6c2hhcmVkUGFz
dGVib2FyZE92ZXJyaWRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRPdmVycmlk
ZXM6OldlYlBhc3RlYm9hcmRPdmVycmlkZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJv
YXJkT3ZlcnJpZGVzOjphZGRPdmVycmlkZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9h
cmRPdmVycmlkZXM6OnJlbW92ZU92ZXJyaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVi
b2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRlblR5cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFz
dGVib2FyZE92ZXJyaWRlczo6Z2V0RGF0YUZvck92ZXJyaWRlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuaDogQWRkZWQuCisKKyAg
ICAgICAgQ2hhbmdlIHRoZSBwYXN0ZWJvYXJkIHN0cmF0ZWd5IHRvIGNvbnN1bHQgdGhlIHBhc3Rl
Ym9hcmQgb3ZlcnJpZGVzIGJlZm9yZSBjb25zdWx0aW5nIHRoZSBuYXRpdmUgcGFzdGVib2FyZDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0VHlwZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1ZmZlckZvclR5cGUp
OgorCisgICAgICAgIEFkZCAicmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YSIgd2hp
Y2ggdXNlcyB0aGUgbmV3IHBhc3RlYm9hcmQgb3ZlcnJpZGVzIG1lY2hhbmlzbQorICAgICAgICBh
bmQgdGhlbiBoYXMgV2ViQ29yZSBwZXJmb3JtIHRoZSByZXBsYWNlbWVudDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6cmVwbGFjZVNlbGVjdGlvblBhc3RlYm9h
cmROYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVwbGFjZVNlbGVjdGlvbldpdGhQ
YXN0ZWJvYXJkRGF0YSk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXBsYWNlU2VsZWN0aW9uV2l0
aFBhc3RlYm9hcmREYXRhKToKKworICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5oOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpw
YWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW06
CisgICAgICAgICgtW1dLU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZSBzaGFyaW5nU2Vydmlj
ZTpkaWRTaGFyZUl0ZW1zOl0pOiBVc2UgInJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERh
dGEiLgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudVByb3h5TWFjOjpXZWJDb250ZXh0
TWVudVByb3h5TWFjKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6
cmVwbGFjZUNvbnRyb2xsZWRJbWFnZSk6IERlbGV0ZWQuCisKKyAgICAgICAgUmVtYWluIG90aGVy
IHJlbW5hbnRzIG9mICJyZXBsYWNlQ29udHJvbGxlZEltYWdlIjoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXBs
YWNlQ29udHJvbGxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnU6OnJlcGxhY2VDb250cm9sbGVkSW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVu
dS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cmVwbGFjZUNvbnRyb2xsZWRJbWFnZSk6IERlbGV0ZWQuCisKKyAg
ICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTQtMDQtMjgg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEhpZGUgc2Vydmlj
ZSBjb250cm9scyBmb3Igc2VsZWN0aW9uIGJlaGluZCBhIHJ1bnRpbWUgc3dpdGNoCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDRhMjY5NzYuLmY0MzU5N2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0zNDkxLDE2
ICszNDkxLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmludGVybmFsU2hvd0NvbnRleHRNZW51KGNv
bnN0IEludFBvaW50JiBtZW51TG9jYXRpb24sIGNvbnN0IEMKICAgICBtX2NvbnRleHRNZW51Q2xp
ZW50LmNvbnRleHRNZW51RGlzbWlzc2VkKHRoaXMpOwogfQogCi0jaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpCi12b2lkIFdlYlBhZ2VQcm94eTo6cmVwbGFjZUNvbnRyb2xsZWRJbWFnZShQYXNz
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbmV3Qml0bWFwKQotewotICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGJpdG1hcCA9IG5ld0JpdG1hcDsKLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSBiaXRtYXBIYW5kbGU7Ci0gICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoYml0bWFwSGFuZGxlKTsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlcGxhY2VDb250cm9sbGVk
SW1hZ2UoYml0bWFwSGFuZGxlKSwgbV9wYWdlSUQpOwotfQotI2VuZGlmCi0KIHZvaWQgV2ViUGFn
ZVByb3h5Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1E
YXRhJiBpdGVtKQogewogICAgIC8vIEFwcGxpY2F0aW9uIGN1c3RvbSBpdGVtcyBkb24ndCBuZWVk
IHRvIHJvdW5kLXRyaXAgdGhyb3VnaCB0byBXZWJDb3JlIGluIHRoZSBXZWJQcm9jZXNzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGJlYzBkODUuLjYzNjljNmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTgwNyw2ICs4MDcs
MTAgQEAgcHVibGljOgogICAgIENvbG9yU3BhY2VEYXRhIGNvbG9yU3BhY2UoKTsKICNlbmRpZgog
CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgdm9pZCByZXBsYWNlU2VsZWN0aW9u
V2l0aFBhc3RlYm9hcmREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJik7CisjZW5kaWYKKwogICAgIHZvaWQgcGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKGRv
dWJsZSk7CiAgICAgdm9pZCBwYWdlWm9vbUZhY3RvckRpZENoYW5nZShkb3VibGUpOwogCkBAIC0x
MDU5LDEwICsxMDYzLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB0YWtlU25hcHNob3QoV2ViQ29y
ZTo6SW50UmVjdCwgV2ViQ29yZTo6SW50U2l6ZSBiaXRtYXBTaXplLCBTbmFwc2hvdE9wdGlvbnMs
IEltYWdlQ2FsbGJhY2s6OkNhbGxiYWNrRnVuY3Rpb24pOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpCi0gICAgdm9pZCByZXBsYWNlQ29udHJvbGxlZEltYWdlKFBhc3NSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPik7Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFn
ZUNsaWVudCYsIFdlYlByb2Nlc3NQcm94eSYsIHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFn
ZUNvbmZpZ3VyYXRpb24mKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFj
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMu
aAppbmRleCA0NjdmMDFmLi4xNTU3YzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMuaApAQCAtNTUsOSArNTUsOSBAQCBw
dWJsaWM6CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKICAgICB2b2lkIGNsZWFySW1h
Z2VTZXJ2aWNlc01lbnUoKTsKLSAgICB2b2lkIHJlcGxhY2VDb250cm9sbGVkSW1hZ2UoQ0dJbWFn
ZVJlZiBuZXdJbWFnZSk7CiAjZW5kaWYKIAorICAgIFdlYlBhZ2VQcm94eSYgcGFnZSgpIGNvbnN0
IHsgcmV0dXJuICptX3BhZ2U7IH0KICAgICBOU1dpbmRvdyAqd2luZG93KCkgY29uc3Q7CiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRl
eHRNZW51UHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRl
eHRNZW51UHJveHlNYWMubW0KaW5kZXggZGQ2YjMyYi4uNjdhNTZkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQogCisjaW1wb3J0ICJEYXRhUmVm
ZXJlbmNlLmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgogI2ltcG9ydCAiU2hhcmVhYmxl
Qml0bWFwLmgiCiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKQEAgLTU2LDcgKzU3LDggQEAg
QGludGVyZmFjZSBOU1NoYXJpbmdTZXJ2aWNlUGlja2VyIChEZXRhaWxzKQogQHByb3BlcnR5IE5T
U2hhcmluZ1NlcnZpY2VQaWNrZXJTdHlsZSBzdHlsZTsKIC0gKE5TTWVudSAqKW1lbnU7CiBAZW5k
Ci0jZW5kaWYKKworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMjI5LDkgKzIzMSwxNSBAQCAtICh2b2lkKXNoYXJpbmdT
ZXJ2aWNlOihOU1NoYXJpbmdTZXJ2aWNlICopc2hhcmluZ1NlcnZpY2Ugd2lsbFNoYXJlSXRlbXM6
KE5TQXJyYQogCiAtICh2b2lkKXNoYXJpbmdTZXJ2aWNlOihOU1NoYXJpbmdTZXJ2aWNlICopc2hh
cmluZ1NlcnZpY2UgZGlkU2hhcmVJdGVtczooTlNBcnJheSAqKWl0ZW1zCiB7Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VTb3VyY2VSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0
ZVdpdGhEYXRhKChDRkRhdGFSZWYpW2l0ZW1zIG9iamVjdEF0SW5kZXg6MF0sIE5VTEwpKTsKKyAg
ICBOU0RhdGEgKmRhdGEgPSBbaXRlbXMgb2JqZWN0QXRJbmRleDowXTsKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVNvdXJjZVJlZj4gc291cmNlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0
aERhdGEoKENGRGF0YVJlZilkYXRhLCBOVUxMKSk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KHNvdXJjZS5n
ZXQoKSwgMCwgTlVMTCkpOwotICAgIF9tZW51UHJveHktPnJlcGxhY2VDb250cm9sbGVkSW1hZ2Uo
aW1hZ2UuZ2V0KCkpOworCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCo+KFtkYXRhIGJ5dGVzXSksIFtkYXRhIGxlbmd0aF0pOworICAgIF9tZW51UHJveHktPnBhZ2Uo
KS5yZXBsYWNlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmREYXRhKE5TUGFzdGVib2FyZFR5cGVUSUZG
LCBkYXRhUmVmZXJlbmNlKTsKIH0KIAogLSAoTlNXaW5kb3cgKilzaGFyaW5nU2VydmljZTooTlNT
aGFyaW5nU2VydmljZSAqKXNoYXJpbmdTZXJ2aWNlIHNvdXJjZVdpbmRvd0ZvclNoYXJlSXRlbXM6
KE5TQXJyYXkgKilpdGVtcyBzaGFyaW5nQ29udGVudFNjb3BlOihOU1NoYXJpbmdDb250ZW50U2Nv
cGUgKilzaGFyaW5nQ29udGVudFNjb3BlCkBAIC0yNDksNiArMjU3LDcgQEAgV2ViQ29udGV4dE1l
bnVQcm94eU1hYzo6V2ViQ29udGV4dE1lbnVQcm94eU1hYyhXS1ZpZXcqIHdlYlZpZXcsIFdlYlBh
Z2VQcm94eSogcGEKICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQogICAgICwgbV9wYWdlKHBhZ2Up
CiB7CisgICAgQVNTRVJUKG1fcGFnZSk7CiB9CiAKIFdlYkNvbnRleHRNZW51UHJveHlNYWM6On5X
ZWJDb250ZXh0TWVudVByb3h5TWFjKCkKQEAgLTQzMywxNyArNDQyLDYgQEAgTlNXaW5kb3cgKldl
YkNvbnRleHRNZW51UHJveHlNYWM6OndpbmRvdygpIGNvbnN0CiAgICAgcmV0dXJuIFttX3dlYlZp
ZXcgd2luZG93XTsKIH0KIAotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotdm9pZCBXZWJD
b250ZXh0TWVudVByb3h5TWFjOjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKENHSW1hZ2VSZWYgbmV3
SW1hZ2UpCi17Ci0gICAgRmxvYXRTaXplIG5ld0ltYWdlU2l6ZShDR0ltYWdlR2V0V2lkdGgobmV3
SW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KG5ld0ltYWdlKSk7Ci0gICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gbmV3Qml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoZXhw
YW5kZWRJbnRTaXplKG5ld0ltYWdlU2l6ZSksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBo
YSk7Ci0gICAgbmV3Qml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKS0+ZHJhd05hdGl2ZUlt
YWdlKG5ld0ltYWdlLCBuZXdJbWFnZVNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIG5ld0ltYWdlU2l6ZSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG5l
d0ltYWdlU2l6ZSkpOwotCi0gICAgbV9wYWdlLT5yZXBsYWNlQ29udHJvbGxlZEltYWdlKG5ld0Jp
dG1hcC5yZWxlYXNlKCkpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1dlYlBhZ2VQcm94eU1hYy5tbQppbmRleCBjN2JiNTI4Li4yMTQ5YmY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQpAQCAtMzk1LDYgKzM5
NSwxMyBAQCBib29sIFdlYlBhZ2VQcm94eTo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lm
IEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQordm9pZCBXZWJQYWdlUHJveHk6OnJlcGxhY2VTZWxl
Y3Rpb25XaXRoUGFzdGVib2FyZERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmIGRhdGEpCit7CisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEodHlwZSwgZGF0YSksIG1fcGFn
ZUlEKTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0
aW9uLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgZHJhZ0ltYWdlSGFuZGxlLCBib29s
IGlzTGlua0RyYWcpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMjM4YzJlZC4uNDMzYmRiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzM1LDYgKzczNSw4
IEBACiAJCTUxMUQ4MjAxMTg1QkMyMTcwMDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFEODIw
MDE4NUJDMjE3MDAxQUVENTYgLyogU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwICovOyB9OwogCQk1
MTFGOEE3QjEzOEI0NjA5MDBBOTVGNDQgLyogU2VjSXRlbVNoaW1MaWJyYXJ5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGOEE3NzEzOEI0NjA5MDBB
OTVGNDQgLyogU2VjSXRlbVNoaW1MaWJyYXJ5LmggKi87IH07CiAJCTUxMUY4QTgxMTM4QjQ4NUQw
MEE5NUY0NCAvKiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGOEE3ODEzOEI0NjA5MDBBOTVGNDQgLyogU2VjSXRl
bVNoaW1MaWJyYXJ5Lm1tICovOyB9OworCQk1MTIxMjdDMzE5MDgyMzlBMDBEQUYzNUMgLyogV2Vi
UGFzdGVib2FyZE92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTIxMjdDMTE5MDgyMzlBMDBEQUYzNUMgLyogV2ViUGFzdGVib2FyZE92
ZXJyaWRlcy5jcHAgKi87IH07CisJCTUxMjEyN0M0MTkwODIzOUEwMERBRjM1QyAvKiBXZWJQYXN0
ZWJvYXJkT3ZlcnJpZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTIxMjdDMjE5MDgyMzlBMDBEQUYzNUMgLyogV2ViUGFzdGVib2FyZE92ZXJyaWRl
cy5oICovOyB9OwogCQk1MTIxNzQ2MDE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3Vy
Y2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEy
MTc0NUUxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmNwcCAqLzsgfTsKIAkJ
NTEyMTc0NjExNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTIxNzQ1RjE2NEMyMEUzMDAz
N0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuaCAqLzsgfTsKIAkJNTEyMTc0NjQxNjRDMjEzNzAw
MzdBNUMxIC8qIFdlYlJlc291cmNlQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjE3NDYyMTY0QzIxMzcwMDM3QTVDMSAvKiBXZWJSZXNv
dXJjZUJ1ZmZlci5jcHAgKi87IH07CkBAIC0yNTcyLDYgKzI1NzQsOCBAQAogCQk1MTFEODIwMDE4
NUJDMjE3MDAxQUVENTYgLyogU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFGOEE3NzEzOEI0NjA5MDBBOTVGNDQgLyogU2VjSXRl
bVNoaW1MaWJyYXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNlY0l0ZW1T
aGltTGlicmFyeS5oOyBwYXRoID0gLi4vLi4vV2ViUHJvY2Vzcy9tYWMvU2VjSXRlbVNoaW1MaWJy
YXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUY4QTc4MTM4QjQ2MDkwMEE5
NUY0NCAvKiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBTZWNJdGVtU2hpbUxpYnJhcnkubW07IHBhdGggPSAuLi8uLi9XZWJQcm9j
ZXNzL21hYy9TZWNJdGVtU2hpbUxpYnJhcnkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxMjEyN0MxMTkwODIzOUEwMERBRjM1QyAvKiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRPdmVy
cmlkZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTIxMjdDMjE5MDgyMzlB
MDBEQUYzNUMgLyogV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxMjE3NDVFMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFyZWFibGVSZXNv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjE3NDVGMTY0QzIwRTMw
MDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaGFyZWFibGVSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTIxNzQ2MjE2NEMyMTM3MDAzN0E1QzEgLyogV2ViUmVzb3VyY2VCdWZmZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVzb3VyY2VCdWZmZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI3NCw2ICs1Mjc4LDggQEAKIAkJCQkxQzhF
MjU2QTEyNzBERTM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCAqLywK
IAkJCQkzMTA5OTk3MTE0NkM3NTlCMDAyOURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNw
cCAqLywKIAkJCQkzMTA5OTk2ODE0NkM3MUY1MDAyOURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xp
ZW50LmggKi8sCisJCQkJNTEyMTI3QzExOTA4MjM5QTAwREFGMzVDIC8qIFdlYlBhc3RlYm9hcmRP
dmVycmlkZXMuY3BwICovLAorCQkJCTUxMjEyN0MyMTkwODIzOUEwMERBRjM1QyAvKiBXZWJQYXN0
ZWJvYXJkT3ZlcnJpZGVzLmggKi8sCiAJCQkJMUEzRTczNjAxMUNDMjY1OTAwN0JENTM5IC8qIFdl
YlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgKi8sCiAJCQkJMUEzRTczNUYxMUNDMjY1OTAwN0JENTM5
IC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llcy5oICovLAogCQkJCTMxRDU5MjlDMTY2RTA1RkYwMEU2
QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQuY3BwICovLApAQCAtNzA5OCw2ICs3MTA0LDcgQEAKIAkJ
CQkxQTNFNzM2MTExQ0MyNjU5MDA3QkQ1MzkgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUQ1OTI5RjE2NkUwNjAwMDBFNkJGMDIgLyogV2ViUGx1Z0luQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUM4NzAyRDEzMEI0OUEyMDAyQzEyNTcgLyogV2Vi
UGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTIxMjdDNDE5MDgy
MzlBMDBEQUYzNUMgLyogV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE4MzUzREIxODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBREY1OTFCMTg5MDUyOEUwMDQzQzE0NSAvKiBXS1dlYlZpZXdDb25maWd1
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzU3NDRGMDEyNjM4RkIzMDA2RjBGMTIgLyog
V2ViUG9wdXBJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTg1NzQsNiArODU4MSw3IEBACiAJCQkJ
QkMzMDY4MjUxMjVBNkI5NDAwRTcxMjc4IC8qIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUY3NTA2QjAxODU5MTYyQzAwRUMwRkY3IC8qIFdLV2Vi
UHJvY2Vzc1BsdWdJblNjcmlwdFdvcmxkLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNzVFNzQ5RUIx
ODBEQkI5ODAwMDg4QkE2IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEyMTI3QzMxOTA4MjM5QTAwREFGMzVDIC8qIFdl
YlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMDY2QkUxMjVB
NDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMxMTFCMTExMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlByb2Nlc3NQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTAzMkYxODE4MEY3M0JCMDA5NjFCQjcgLyogV2ViVG9EYXRh
YmFzZVByb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJp
ZGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFz
dGVib2FyZE92ZXJyaWRlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OGY2NTZkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKQEAgLTAsMCArMSwxMDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFzdGVib2Fy
ZE92ZXJyaWRlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUGFzdGVib2FyZE92ZXJy
aWRlcyYgV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6c2hhcmVkUGFzdGVib2FyZE92ZXJyaWRlcygp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYlBhc3RlYm9hcmRPdmVycmlkZXM+IHNo
YXJlZE92ZXJyaWRlczsKKyAgICByZXR1cm4gc2hhcmVkT3ZlcnJpZGVzOworfQorCitXZWJQYXN0
ZWJvYXJkT3ZlcnJpZGVzOjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzKCkKK3sKK30KKwordm9pZCBX
ZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjphZGRPdmVycmlkZShjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkK
K3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fb3ZlcnJpZGVzTWFwLmFkZChwYXN0ZWJvYXJkTmFt
ZSwgbnVsbHB0cik7CisKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8dWludDhfdD4+PiB0eXBlTWFw
ID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoTWFwPFN0cmluZywgVmVjdG9yPHVpbnQ4X3Q+Pj4oKTsK
KyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bW92ZSh0eXBlTWFwKTsK
KyAgICB9CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zZXQodHlwZSwgZGF0YSk7
Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6cmVtb3ZlT3ZlcnJpZGUoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGF1dG8g
aXQgPSBtX292ZXJyaWRlc01hcC5maW5kKHBhc3RlYm9hcmROYW1lKTsKKyAgICBpZiAoaXQgPT0g
bV9vdmVycmlkZXNNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChpdC0+
dmFsdWUpOworCisgICAgaXQtPnZhbHVlLT5yZW1vdmUodHlwZSk7CisKKyAgICAvLyBJZiB0aGlz
IHdhcyB0aGUgbGFzdCBvdmVycmlkZSBmb3IgdGhpcyBwYXN0ZWJvYXJkLCByZW1vdmUgaXRzIHJl
Y29yZCBjb21wbGV0ZWx5LgorICAgIGlmIChpdC0+dmFsdWUtPmlzRW1wdHkoKSkKKyAgICAgICAg
bV9vdmVycmlkZXNNYXAucmVtb3ZlKGl0KTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkT3ZlcnJp
ZGVzOjpvdmVycmlkZGVuVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9y
PFN0cmluZz4mIHR5cGVzKQoreworICAgIGF1dG8gaXQgPSBtX292ZXJyaWRlc01hcC5maW5kKHBh
c3RlYm9hcmROYW1lKTsKKyAgICBpZiAoaXQgPT0gbV9vdmVycmlkZXNNYXAuZW5kKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChpdC0+dmFsdWUpOworCisgICAgZm9yIChTdHJpbmcm
IHR5cGUgOiBpdC0+dmFsdWUtPmtleXMoKSkKKyAgICAgICAgdHlwZXMuYXBwZW5kKHR5cGUpOwor
fQorCitib29sIFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6OmdldERhdGFGb3JPdmVycmlkZShjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUsIFZlY3Rvcjx1aW50
OF90PiYgZGF0YSkgY29uc3QKK3sKKyAgICBhdXRvIHBhc3RlYm9hcmRJdGVyYXRvciA9IG1fb3Zl
cnJpZGVzTWFwLmZpbmQocGFzdGVib2FyZE5hbWUpOworICAgIGlmIChwYXN0ZWJvYXJkSXRlcmF0
b3IgPT0gbV9vdmVycmlkZXNNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gdHlwZUl0ZXJhdG9yID0gcGFzdGVib2FyZEl0ZXJhdG9yLT52YWx1ZS0+ZmluZCh0eXBl
KTsKKyAgICBpZiAodHlwZUl0ZXJhdG9yID09IHBhc3RlYm9hcmRJdGVyYXRvci0+dmFsdWUtPmVu
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkYXRhID0gdHlwZUl0ZXJhdG9yLT52
YWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVz
OjpnZXREYXRhRm9yT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3Qg
U3RyaW5nJiB0eXBlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGZvdW5kQnVmZmVyOworICAgIGlmICghZ2V0RGF0YUZvck92ZXJyaWRlKHBhc3RlYm9h
cmROYW1lLCB0eXBlLCBmb3VuZEJ1ZmZlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGRhdGEuY2xlYXIoKTsKKyAgICBkYXRhLnJlc2VydmVDYXBhY2l0eShmb3VuZEJ1ZmZlci5zaXpl
KCkpOworICAgIG1lbWNweShkYXRhLmRhdGEoKSwgZm91bmRCdWZmZXIuZGF0YSgpLCBmb3VuZEJ1
ZmZlci5zaXplKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43YWY4MjMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgKQEAg
LTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFzdGVib2FyZE92ZXJyaWRl
c19oCisjZGVmaW5lIFdlYlBhc3RlYm9hcmRPdmVycmlkZXNfaAorCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFz
dGVib2FyZE92ZXJyaWRlcyB7CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFdlYlBh
c3RlYm9hcmRPdmVycmlkZXM+OworcHVibGljOgorICAgIHN0YXRpYyBXZWJQYXN0ZWJvYXJkT3Zl
cnJpZGVzJiBzaGFyZWRQYXN0ZWJvYXJkT3ZlcnJpZGVzKCk7CisKKyAgICB2b2lkIGFkZE92ZXJy
aWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+Jik7CisgICAgdm9pZCByZW1vdmVPdmVycmlkZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUpOworCisgICAgdm9pZCBvdmVy
cmlkZGVuVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9yPFN0cmluZz4m
IHR5cGVzKTsKKworICAgIGJvb2wgZ2V0RGF0YUZvck92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgdHlwZSwgVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3Q7
CisgICAgYm9vbCBnZXREYXRhRm9yT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgY29uc3QgU3RyaW5nJiB0eXBlLCBWZWN0b3I8Y2hhcj4mKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzKCk7CisKKyAgICAvLyBUaGUgbV9vdmVycmlkZXNN
YXAgbWFwcyBzdHJpbmcgcGFzdGVib2FyZCBuYW1lcyB0byBwYXN0ZWJvYXJkIGVudHJpZXMuCisg
ICAgLy8gRWFjaCBwYXN0ZWJvYXJkIGVudHJ5IGlzIGEgbWFwIG9mIGEgc3RyaW5nIHR5cGUgdG8g
YSBkYXRhIGJ1ZmZlci4KKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEhhc2hN
YXA8U3RyaW5nLCBWZWN0b3I8dWludDhfdD4+Pj4gbV9vdmVycmlkZXNNYXA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlBhc3RlYm9hcmRPdmVycmlkZXNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDQ5N2Y3ZGMuLjM2M2NlMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTQxLDYgKzQxLDcgQEAK
ICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViSURC
RmFjdG9yeUJhY2tlbmQuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFz
dGVib2FyZE92ZXJyaWRlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KQEAg
LTM3NCwxMiArMzc1LDI3IEBAIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjpzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShQYWdlCiAKIHZvaWQgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpnZXRUeXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CisgICAgLy8gRmlyc3QgY2hlY2sgdGhlIG92ZXJyaWRl
cy4KKyAgICAvLyBUaGUgcHVycG9zZSBvZiB0aGUgb3ZlcnJpZGVzIGlzIHRvIGF2b2lkIG1lc3Nh
Z2luZyBiYWNrIHRvIHRoZSBVSSBwcm9jZXNzLgorICAgIC8vIFRoZXJlZm9yZSwgaWYgdGhlcmUg
YXJlIGFueSBvdmVycmlkZGVuIHR5cGVzLCB3ZSByZXR1cm4ganVzdCB0aG9zZS4KKyAgICBXZWJQ
YXN0ZWJvYXJkT3ZlcnJpZGVzOjpzaGFyZWRQYXN0ZWJvYXJkT3ZlcnJpZGVzKCkub3ZlcnJpZGRl
blR5cGVzKHBhc3RlYm9hcmROYW1lLCB0eXBlcyk7CisgICAgaWYgKCF0eXBlcy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpHZXRQYXN0ZWJv
YXJkVHlwZXMocGFzdGVib2FyZE5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWVzc2FnZXM6OldlYkNvbnRleHQ6OkdldFBhc3RlYm9hcmRUeXBl
czo6UmVwbHkodHlwZXMpLCAwKTsKIH0KIAogUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogeworICAgIC8vIEZp
cnN0IGNoZWNrIHRoZSBvdmVycmlkZXMuCisgICAgVmVjdG9yPGNoYXI+IG92ZXJyaWRlQnVmZmVy
OworICAgIGlmIChXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpzaGFyZWRQYXN0ZWJvYXJkT3ZlcnJp
ZGVzKCkuZ2V0RGF0YUZvck92ZXJyaWRlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSwg
b3ZlcnJpZGVCdWZmZXIpKSB7CisgICAgICAgIHByaW50ZigiUmV0dXJuaW5nIGFuIG92ZXJyaWRl
IGJ1ZmZlciFcbiIpOworICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcihv
dmVycmlkZUJ1ZmZlcik7CisgICAgfQorCisgICAgLy8gRmFsbGJhY2sgdG8gbWVzc2FnaW5nIHRo
ZSBVSSBwcm9jZXNzIGZvciBuYXRpdmUgcGFzdGVib2FyZCBjb250ZW50LgogICAgIFNoYXJlZE1l
bW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICB1aW50NjRfdCBzaXplID0gMDsKICAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViQ29udGV4dDo6R2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUs
IHBhc3RlYm9hcmRUeXBlKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCmluZGV4IGRmMDQ3YmUuLjI4Y2QzNGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNw
cApAQCAtNzcsMTMgKzc3LDYgQEAgdm9pZCBXZWJDb250ZXh0TWVudTo6aXRlbVNlbGVjdGVkKGNv
bnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmIGl0ZW0pCiAgICAgbV9wYWdlLT5jb3JlUGFnZSgp
LT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZCgmY29yZUl0
ZW0pOwogfQogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi12b2lkIFdlYkNvbnRleHRN
ZW51OjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKFBhc3NSZWZQdHI8SW1hZ2U+IG5ld0ltYWdlKQot
ewotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkucmVwbGFj
ZUNvbnRyb2xsZWRJbWFnZShuZXdJbWFnZSk7Ci19Ci0jZW5kaWYKLQogdm9pZCBXZWJDb250ZXh0
TWVudTo6bWVudUl0ZW1zV2l0aFVzZXJEYXRhKFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRh
PiAmbWVudUl0ZW1zLCBSZWZQdHI8QVBJOjpPYmplY3Q+JiB1c2VyRGF0YSkgY29uc3QKIHsKICAg
ICBDb250ZXh0TWVudUNvbnRyb2xsZXImIGNvbnRyb2xsZXIgPSBtX3BhZ2UtPmNvcmVQYWdlKCkt
PmNvbnRleHRNZW51Q29udHJvbGxlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuaAppbmRleCAzNTBmNzRiLi5mYzYzYWZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUu
aApAQCAtNTAsMTAgKzUwLDYgQEAgcHVibGljOgogICAgIHZvaWQgaXRlbVNlbGVjdGVkKGNvbnN0
IFdlYkNvbnRleHRNZW51SXRlbURhdGEmKTsKICAgICBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVt
RGF0YT4gaXRlbXMoKSBjb25zdDsKIAotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAg
IHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShQYXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7
Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBXZWJDb250ZXh0TWVudShXZWJQYWdlKik7CiAgICAg
dm9pZCBtZW51SXRlbXNXaXRoVXNlckRhdGEoVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+
JiwgUmVmUHRyPEFQSTo6T2JqZWN0PiYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDZmYjkzYjAuLjE1ODhlYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMxNjIsMTUg
KzMxNjIsNiBAQCB2b2lkIFdlYlBhZ2U6OmRpZFNlbGVjdEl0ZW1Gcm9tQWN0aXZlQ29udGV4dE1l
bnUoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaQogfQogI2VuZGlmCiAKLSNpZiBFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykKLXZvaWQgV2ViUGFnZTo6cmVwbGFjZUNvbnRyb2xsZWRJbWFn
ZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgYml0bWFwSGFuZGxlKQotewotICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGJp
dG1hcEhhbmRsZSk7Ci0gICAgaWYgKGJpdG1hcCkKLSAgICAgICAgbV9jb250ZXh0TWVudS0+cmVw
bGFjZUNvbnRyb2xsZWRJbWFnZShiaXRtYXAtPmNyZWF0ZUltYWdlKCkpOwotfQotI2VuZGlmCi0K
IHZvaWQgV2ViUGFnZTo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KEZyYW1lKiBmcmFtZSwgY29u
c3QgU3RyaW5nJiB0ZXh0KQogewogICAgIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQgPSB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNjY5Yzkx
NS4uMjgwOTAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCkBAIC01ODYsNiArNTg2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3VsZERlbGF5V2lu
ZG93T3JkZXJpbmdFdmVudChjb25zdCBXZWJLaXQ6OldlYk1vdXNlRXZlbnQmLCBib29sJiByZXN1
bHQpOwogICAgIHZvaWQgYWNjZXB0c0ZpcnN0TW91c2UoaW50IGV2ZW50TnVtYmVyLCBjb25zdCBX
ZWJLaXQ6OldlYk1vdXNlRXZlbnQmLCBib29sJiByZXN1bHQpOwogICAgIGJvb2wgcGVyZm9ybU5v
bkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OktleWJv
YXJkRXZlbnQqKTsKKworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgIHZvaWQgcmVw
bGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYpOworI2VuZGlmCisKICNlbGlmIFBMQVRGT1JNKEVGTCkKICAg
ICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5n
KTsKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBjb21wb3NpdGlv
blN0cmluZywgY29uc3QgV1RGOjpWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+
JiB1bmRlcmxpbmVzLCB1aW50NjRfdCBjdXJzb3JQb3NpdGlvbik7CkBAIC03NzIsMTAgKzc3Nyw2
IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyPiBjcmVh
dGVEb2N1bWVudExvYWRlcihXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhJik7CiAKICAgICB2b2lkIGdl
dEJ5dGVjb2RlUHJvZmlsZSh1aW50NjRfdCBjYWxsYmFja0lEKTsKLQotI2lmIEVOQUJMRShTRVJW
SUNFX0NPTlRST0xTKQotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShjb25zdCBTaGFy
ZWFibGVCaXRtYXA6OkhhbmRsZSYpOwotI2VuZGlmCiAgICAgCiAgICAgLy8gU29tZSBwbGF0Zm9y
bXMgcmVxdWlyZSBhY2Nlc3NpYmlsaXR5LWVuYWJsZWQgcHJvY2Vzc2VzIHRvIHNwaW4gdGhlIHJ1
biBsb29wIHNvIHRoYXQgdGhlIFdlYlByb2Nlc3MgZG9lc24ndCBoYW5nLgogICAgIC8vIFdoaWxl
IHRoaXMgaXMgbm90IGlkZWFsLCBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGFwcGxpZWQgdG8gZXZl
cnkgcGxhdGZvcm0gYXQgdGhlIG1vbWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggMGM2MDE4MC4uMzIzYWQz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KQEAgLTMwMyw2ICszMDMsMTAgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBM
ZWdhY3lSZWNlaXZlciB7CiAgICAgR2V0RGF0YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQoU3RyaW5n
IHBhc3RlYm9hcmRUeXBlKSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUs
IHVpbnQ2NF90IHNpemUpCiAgICAgUmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKFN0cmluZyBw
YXN0ZWJvYXJkTmFtZSkgLT4gKGJvb2wgcmVzdWx0KQogCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09O
VFJPTFMpCisgICAgUmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YShTdHJpbmcgdHlw
ZSwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCisjZW5kaWYKKwogICAgIFNob3VsZERlbGF5V2lu
ZG93T3JkZXJpbmdFdmVudChXZWJLaXQ6OldlYk1vdXNlRXZlbnQgZXZlbnQpIC0+IChib29sIHJl
c3VsdCkKICAgICBBY2NlcHRzRmlyc3RNb3VzZShpbnQgZXZlbnROdW1iZXIsIFdlYktpdDo6V2Vi
TW91c2VFdmVudCBldmVudCkgLT4gKGJvb2wgcmVzdWx0KQogCkBAIC0zNjMsOCArMzY3LDQgQEAg
bWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgR2V0Qnl0ZWNvZGVQcm9m
aWxlKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgCiAgICAgVGFrZVNuYXBzaG90KFdlYkNvcmU6
OkludFJlY3Qgc25hcHNob3RSZWN0LCBXZWJDb3JlOjpJbnRTaXplIGJpdG1hcFNpemUsIHVpbnQz
Ml90IG9wdGlvbnMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykKLSAgICBSZXBsYWNlQ29udHJvbGxlZEltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUgbmV3Qml0bWFwSGFuZGxlKQotI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggOWQ2MTU4
Yi4uYzdjNjJlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtNDUsNiArNDUsNyBAQAogI2ltcG9ydCAiV2ViSW1hZ2Uu
aCIKICNpbXBvcnQgIldlYkluc3BlY3Rvci5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5TWVzc2Fn
ZXMuaCIKKyNpbXBvcnQgIldlYlBhc3RlYm9hcmRPdmVycmlkZXMuaCIKICNpbXBvcnQgIldlYlBy
ZWZlcmVuY2VzU3RvcmUuaCIKICNpbXBvcnQgIldlYlByb2Nlc3MuaCIKICNpbXBvcnQgPFBERktp
dC9QREZLaXQuaD4KQEAgLTY3MCw2ICs2NzEsMjQgQEAgYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9u
RWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgS2V5Ym8K
ICAgICByZXR1cm4gZGlkUGVyZm9ybUFjdGlvbjsKIH0KIAorI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQorc3RhdGljIFN0cmluZyYgcmVwbGFjZVNlbGVjdGlvblBhc3RlYm9hcmROYW1lKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBzdHJpbmcoIlJlcGxhY2VTZWxl
Y3Rpb25QYXN0ZWJvYXJkIik7CisgICAgcmV0dXJuIHN0cmluZzsKK30KKwordm9pZCBXZWJQYWdl
OjpyZXBsYWNlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQoreworICAgIFdlYlBhc3RlYm9hcmRPdmVy
cmlkZXM6OnNoYXJlZFBhc3RlYm9hcmRPdmVycmlkZXMoKS5hZGRPdmVycmlkZShyZXBsYWNlU2Vs
ZWN0aW9uUGFzdGVib2FyZE5hbWUoKSwgdHlwZSwgZGF0YS52ZWN0b3IoKSk7CisKKyAgICBib29s
IHJlc3VsdDsKKyAgICByZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQocmVwbGFjZVNlbGVjdGlv
blBhc3RlYm9hcmROYW1lKCksIHJlc3VsdCk7CisKKyAgICBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVz
OjpzaGFyZWRQYXN0ZWJvYXJkT3ZlcnJpZGVzKCkucmVtb3ZlT3ZlcnJpZGUocmVwbGFjZVNlbGVj
dGlvblBhc3RlYm9hcmROYW1lKCksIHR5cGUpOworfQorI2VuZGlmCisKIGJvb2wgV2ViUGFnZTo6
cGVyZm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQm
KQogewogICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230411</attachid>
            <date>2014-04-29 13:56:59 -0700</date>
            <delta_ts>2014-04-29 14:54:51 -0700</delta_ts>
            <desc>New approach, v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>37044</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNGQ4YmYzLi5mOTgzZmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTQtMDQtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENoYW5nZSBJbWFnZSBDb250cm9scyByZXBsYWNlbWVudCB0byB1c2Ugc2VsZWN0aW9uIGFu
ZCBwYXN0ZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTYzMDI3MjI+IGFuZCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxOTkyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3ZlIGRl
bGV0ZWQgc3ltYm9sLgorCisgICAgICAgICogaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNC
dXR0b25FbGVtZW50TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQ29udHJvbHNCdXR0
b25FbGVtZW50TWFjOjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKworICAgICAgICAqIHBhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6c2hvd0ltYWdlQ29udHJvbHNNZW51KTogU2VsZWN0IHRoZSBpbWFnZSBlbGVtZW50
CisgICAgICAgICAgYmVmb3JlIHNob3dpbmcgdGhlIG1lbnUuCisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0TWVudUNvbnRyb2xsZXI6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmg6CisKIDIwMTQtMDQtMjkgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVtb3ZlIHdv
cmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNjU3ODcyNz4uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CmluZGV4IDVmNzJiOWUuLjE4OTBjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yMjksNiAr
MjI5LDcgQEAgX19aTjdXZWJDb3JlMTJSZW5kZXJXaWRnZXQ5c2V0V2lkZ2V0RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzZXaWRnZXRFRUUKIF9fWk43V2ViQ29yZTEyU1FMUmVzdWx0Um93RQogX19aTjdX
ZWJDb3JlMTJTaGFyZWRCdWZmZXIxMHdyYXBDRkRhdGFFUEs4X19DRkRhdGEKIF9fWk43V2ViQ29y
ZTEyU2hhcmVkQnVmZmVyMTB3cmFwTlNEYXRhRVA2TlNEYXRhCitfX1pON1dlYkNvcmUxMlNoYXJl
ZEJ1ZmZlcjExYWRvcHRWZWN0b3JFUk4zV1RGNlZlY3RvckljTG0wRU5TMV8xNUNyYXNoT25PdmVy
Zmxvd0VFRQogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMmNyZWF0ZUNGRGF0YUV2CiBfX1pO
N1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEyY3JlYXRlTlNEYXRhRXYKIF9fWk43V2ViQ29yZTEyU2hh
cmVkQnVmZmVyMjRjcmVhdGVXaXRoQ29udGVudHNPZkZpbGVFUktOM1dURjZTdHJpbmdFCkBAIC0y
OTg3LDEwICsyOTg4LDYgQEAgX19aTks3V2ViQ29yZTEySWNvbkRhdGFiYXNlMjRzaG91bGRTdG9w
VGhyZWFkQWN0aXZpdHlFdgogX19aTks3V2ViQ29yZTEySWNvbkRhdGFiYXNlOWlzRW5hYmxlZEV2
CiAjZW5kaWYKIAotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotX19aTjdXZWJDb3JlMjFD
b250ZXh0TWVudUNvbnRyb2xsZXIyMnJlcGxhY2VDb250cm9sbGVkSW1hZ2VFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfNUltYWdlRUVFCi0jZW5kaWYKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogX19aTjdXZWJDb3JlMTBJREJLZXlEYXRhMTRzZXROdW1iZXJWYWx1ZUVkCiBfX1pON1dlYkNv
cmUxMElEQktleURhdGE2ZGVjb2RlRVJOU18xMktleWVkRGVjb2RlckVSUzBfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1l
bnRNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNC
dXR0b25FbGVtZW50TWFjLmNwcAppbmRleCBlMGRiOTZkLi4xZTBjZjkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRN
YWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L21hYy9JbWFnZUNvbnRyb2xz
QnV0dG9uRWxlbWVudE1hYy5jcHAKQEAgLTMwLDExICszMCwxNSBAQAogCiAjaW5jbHVkZSAiQ29u
dGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTERpdkVsZW1l
bnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTk5LDggKzEwMywzMiBAQCBQYXNzUmVmUHRyPEltYWdlQ29udHJvbHNCdXR0b25F
bGVtZW50TWFjPiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYzo6bWF5YmVDcgogdm9pZCBJ
bWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYzo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAg
ICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLnNob3dJbWFnZUNvbnRyb2xzTWVu
dShldmVudCk7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKTsKKyAg
ICAgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBQYWdlKiBw
YWdlID0gZG9jdW1lbnQoKS5wYWdlKCk7CisgICAgICAgIGlmICghcGFnZSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7
CisgICAgICAgIEVsZW1lbnQqIGhvc3RFbGVtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUg
KHBhcmVudCkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+aXNTaGFkb3dSb290KCkpIHsKKyAg
ICAgICAgICAgICAgICBob3N0RWxlbWVudCA9IHN0YXRpY19jYXN0PFNoYWRvd1Jvb3QqPihwYXJl
bnQpLT5ob3N0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIWhvc3RFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBBU1NFUlQoaXNIVE1MSW1hZ2VFbGVtZW50KGhvc3RFbGVtZW50KSk7CisKKyAgICAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgUG9zaXRpb24oaG9z
dEVsZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSwgUG9zaXRpb24oaG9z
dEVsZW1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpKTsKKyAgICAgICAgZnJh
bWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlLmdldCgp
KSk7CisKKyAgICAgICAgcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkuc2hvd0ltYWdlQ29u
dHJvbHNNZW51KGV2ZW50KTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnRleHRNZW51Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51
Q29udHJvbGxlci5jcHAKaW5kZXggZDFmNDNlYS4uMTY0OTU1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMTQ1MiwyNCArMTQ1Miw2IEBA
IHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpzaG93SW1hZ2VDb250cm9sc01lbnUoRXZlbnQq
IGV2ZW50KQogICAgIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZlbnQpOwogICAgIG1fY2xpZW50
LnNob3dDb250ZXh0TWVudSgpOwogfQotCi12b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cmVw
bGFjZUNvbnRyb2xsZWRJbWFnZShQYXNzUmVmUHRyPEltYWdlPiBuZXdJbWFnZSkKLXsKLSAgICBO
b2RlKiBub2RlID0gbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUo
KTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lKiBmcmFtZSA9
IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAg
ICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNSZW5kZXJJbWFnZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gcmVwbGFjZWRJ
bWFnZSA9IG5ldyBDYWNoZWRJbWFnZShVUkw6OmZha2VVUkxXaXRoUmVsYXRpdmVQYXJ0KCJpbWFn
ZSIpLCBuZXdJbWFnZS5nZXQoKSwgZnJhbWUtPnBhZ2UoKS0+c2Vzc2lvbklEKCkpOwotICAgIHRv
UmVuZGVySW1hZ2UocmVuZGVyZXIpLT5pbWFnZVJlc291cmNlKCkuc2V0Q2FjaGVkSW1hZ2UocmVw
bGFjZWRJbWFnZS5nZXQoKSk7Ci19CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgKaW5kZXggNzViZTM0
Ni4uYzk5NjY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5oCkBAIC03MSw3ICs3MSw2IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRS
T0xTKQogICAgIHZvaWQgc2hvd0ltYWdlQ29udHJvbHNNZW51KEV2ZW50Kik7Ci0gICAgdm9pZCBy
ZXBsYWNlQ29udHJvbGxlZEltYWdlKFBhc3NSZWZQdHI8SW1hZ2U+KTsKICNlbmRpZgogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDY1OWM2NTIuLjIxYmI0MDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNC0wNC0yOSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIEltYWdlIENvbnRyb2xzIHJlcGxhY2VtZW50IHRv
IHVzZSBzZWxlY3Rpb24gYW5kIHBhc3RlCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNjMwMjcy
Mj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE5OTIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pc2MvV2Vi
U2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJTaGFyaW5n
U2VydmljZVBpY2tlckNvbnRyb2xsZXIgc2hhcmluZ1NlcnZpY2U6ZGlkU2hhcmVJdGVtczpdKTog
V3JpdGUgdGhlCisgICAgICAgICAgcmVwbGFjZW1lbnQgZGF0YSB0byBhIHNwZWNpYWwgcGFzdGVi
b2FyZCwgdGhlbiByZXBsYWNlIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmcm9tCisgICAgICAgICAg
dGhhdCBwYXN0ZWJvYXJkLgorCiAyMDE0LTA0LTI3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgW2lPUyBXZWJLaXQyXSBBZGQgc3VwcG9ydCBmb3IgdGV4dCBhdXRvc2l6
aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYlNoYXJpbmdTZXJ2aWNl
UGlja2VyQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViU2hhcmluZ1Nl
cnZpY2VQaWNrZXJDb250cm9sbGVyLm1tCmluZGV4IDdkYWJkZmQuLmI4NWQ2NTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9s
bGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViU2hhcmluZ1NlcnZpY2VQaWNr
ZXJDb250cm9sbGVyLm1tCkBAIC0zMSw2ICszMSwxMCBAQAogI2ltcG9ydCAiV2ViVmlld0ludGVy
bmFsLmgiCiAjaW1wb3J0IDxBcHBLaXQvTlNTaGFyaW5nU2VydmljZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9CaXRtYXBJbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbnRl
eHRNZW51Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAKQEAgLTQ4LDYg
KzUyLDggQEAgQGVuZAogCiAjZW5kaWYKIAorc3RhdGljIE5TU3RyaW5nICpzZXJ2aWNlQ29udHJv
bHNQYXN0ZWJvYXJkTmFtZSA9IEAiV2ViS2l0U2VydmljZUNvbnRyb2xzUGFzdGVib2FyZCI7CisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBAaW1wbGVtZW50YXRpb24gV2ViU2hhcmluZ1Nl
cnZpY2VQaWNrZXJDb250cm9sbGVyCkBAIC0xMTksMTMgKzEyNSwyMSBAQCAtICh2b2lkKXNoYXJp
bmdTZXJ2aWNlOihOU1NoYXJpbmdTZXJ2aWNlICopc2hhcmluZ1NlcnZpY2UgZGlkU2hhcmVJdGVt
czooTlNBcnJheQogCiAgICAgUmV0YWluUHRyPENHSW1hZ2VTb3VyY2VSZWY+IHNvdXJjZSA9IGFk
b3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZVdpdGhEYXRhKChDRkRhdGFSZWYpW2l0ZW1zIG9iamVj
dEF0SW5kZXg6MF0sIE5VTEwpKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9
IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRleChzb3VyY2UuZ2V0KCksIDAs
IE5VTEwpKTsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShj
Z0ltYWdlLmdldCgpKTsKKworICAgIGlmICghY2dJbWFnZSkKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgUGFnZSogcGFnZSA9IFtfbWVudUNsaWVudC0+d2ViVmlldygpIHBhZ2VdOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVy
KCkucmVwbGFjZUNvbnRyb2xsZWRJbWFnZShpbWFnZS5nZXQoKSk7CisgICAgTlNQYXN0ZWJvYXJk
ICpwYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6c2VydmljZUNv
bnRyb2xzUGFzdGVib2FyZE5hbWVdOworICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpAWyBO
U1Bhc3RlYm9hcmRUeXBlVElGRiBdIG93bmVyOm5pbF07CisgICAgW3Bhc3RlYm9hcmQgc2V0RGF0
YTpbaXRlbXMgb2JqZWN0QXRJbmRleDowXSBmb3JUeXBlOk5TUGFzdGVib2FyZFR5cGVUSUZGXTsK
KworICAgIEZyYW1lJiBmcmFtZSA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOworICAgIGlmICghZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgICAg
IGZyYW1lLmVkaXRvcigpLnJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChzZXJ2aWNlQ29udHJv
bHNQYXN0ZWJvYXJkTmFtZSk7CiAKICAgICBbc2VsZiBjbGVhcl07CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
NzI3ZGUwMS4uNjZmZDkxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE0LTA0LTI5
ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgSW1h
Z2UgQ29udHJvbHMgcmVwbGFjZW1lbnQgdG8gdXNlIHNlbGVjdGlvbiBhbmQgcGFzdGUKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzE2MzAyNzIyPiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzMTk5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBhICJwYXN0ZWJvYXJkIG92ZXJyaWRlIiBtZWNoYW5pc20gd2hp
Y2ggYWxsb3dzIFdlYktpdCB0byBrZWVwIHBhc3RlYm9hcmQgY29udGVudCBsb2NhbAorICAgICAg
ICB0byB0aGUgV2ViUHJvY2VzcyBhbmQgYWNjZXNzIGl0IHRoZXJlIHdpdGhvdXQgaGF2aW5nIHRv
IG1lc3NhZ2UgdXAgdG8gdGhlIFVJIHByb2Nlc3M6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhc3RlYm9hcmRPdmVycmlkZXM6OnNoYXJlZFBhc3RlYm9hcmRPdmVycmlkZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpXZWJQYXN0ZWJvYXJk
T3ZlcnJpZGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6YWRk
T3ZlcnJpZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpyZW1v
dmVPdmVycmlkZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRPdmVycmlkZXM6Om92
ZXJyaWRkZW5UeXBlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRPdmVycmlkZXM6
OmdldERhdGFGb3JPdmVycmlkZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmg6IEFkZGVkLgorCisgICAgICAgIENoYW5nZSB0aGUg
cGFzdGVib2FyZCBzdHJhdGVneSB0byBjb25zdWx0IHRoZSBwYXN0ZWJvYXJkIG92ZXJyaWRlcyBi
ZWZvcmUgY29uc3VsdGluZyB0aGUgbmF0aXZlIHBhc3RlYm9hcmQ6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFR5cGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKToKKworICAgICAgICBBZGQg
InJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEiIHdoaWNoIHVzZXMgdGhlIG5ldyBw
YXN0ZWJvYXJkIG92ZXJyaWRlcyBtZWNoYW5pc20KKyAgICAgICAgYW5kIHRoZW4gaGFzIFdlYkNv
cmUgcGVyZm9ybSB0aGUgcmVwbGFjZW1lbnQ6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OnJlcGxhY2VTZWxlY3Rpb25QYXN0ZWJvYXJkTmFtZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEpOgor
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YSk6
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6cGFnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tOgorICAgICAgICAoLVtXS1No
YXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUgc2hhcmluZ1NlcnZpY2U6ZGlkU2hhcmVJdGVtczpd
KTogVXNlICJyZXBsYWNlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmREYXRhIi4KKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU1hYzo6V2ViQ29udGV4dE1lbnVQcm94eU1hYyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlNYWM6OnJlcGxhY2VDb250cm9sbGVk
SW1hZ2UpOiBEZWxldGVkLgorCisgICAgICAgIFJlbWFpbiBvdGhlciByZW1uYW50cyBvZiAicmVw
bGFjZUNvbnRyb2xsZWRJbWFnZSI6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVwbGFjZUNvbnRyb2xsZWRJbWFn
ZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRleHRNZW51OjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE0LTA0LTI5ICBUaW0gSG9ydG9uICA8dGlt
b3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggY2QyNDVlOC4uNWMyYjlmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTM0ODQsMTYgKzM0
ODQsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJuYWxTaG93Q29udGV4dE1lbnUoY29uc3Qg
SW50UG9pbnQmIG1lbnVMb2NhdGlvbiwgY29uc3QgQwogICAgIG1fY29udGV4dE1lbnVDbGllbnQu
Y29udGV4dE1lbnVEaXNtaXNzZWQodGhpcyk7CiB9CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05U
Uk9MUykKLXZvaWQgV2ViUGFnZVByb3h5OjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKFBhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBuZXdCaXRtYXApCi17Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwID0gbmV3Qml0bWFwOwotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGJp
dG1hcEhhbmRsZTsKLSAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShiaXRtYXBIYW5kbGUpOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVwbGFjZUNvbnRyb2xsZWRJbWFn
ZShiaXRtYXBIYW5kbGUpLCBtX3BhZ2VJRCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBXZWJQYWdlUHJv
eHk6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEm
IGl0ZW0pCiB7CiAgICAgLy8gQXBwbGljYXRpb24gY3VzdG9tIGl0ZW1zIGRvbid0IG5lZWQgdG8g
cm91bmQtdHJpcCB0aHJvdWdoIHRvIFdlYkNvcmUgaW4gdGhlIFdlYlByb2Nlc3MuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggY2I4ZDMxMi4uYzc4NzMxNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtODEyLDYgKzgxMiwxMCBA
QCBwdWJsaWM6CiAgICAgQ29sb3JTcGFjZURhdGEgY29sb3JTcGFjZSgpOwogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRo
UGFzdGVib2FyZERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmKTsKKyNlbmRpZgorCiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoZG91Ymxl
KTsKICAgICB2b2lkIHBhZ2Vab29tRmFjdG9yRGlkQ2hhbmdlKGRvdWJsZSk7CiAKQEAgLTEwNjQs
MTAgKzEwNjgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHRha2VTbmFwc2hvdChXZWJDb3JlOjpJ
bnRSZWN0LCBXZWJDb3JlOjpJbnRTaXplIGJpdG1hcFNpemUsIFNuYXBzaG90T3B0aW9ucywgSW1h
Z2VDYWxsYmFjazo6Q2FsbGJhY2tGdW5jdGlvbik7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05U
Uk9MUykKLSAgICB2b2lkIHJlcGxhY2VDb250cm9sbGVkSW1hZ2UoUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+KTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xp
ZW50JiwgV2ViUHJvY2Vzc1Byb3h5JiwgdWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ29u
ZmlndXJhdGlvbiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oCmlu
ZGV4IDQ2N2YwMWYuLjE1NTdjN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oCkBAIC01NSw5ICs1NSw5IEBAIHB1Ymxp
YzoKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogICAgIHZvaWQgY2xlYXJJbWFnZVNl
cnZpY2VzTWVudSgpOwotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShDR0ltYWdlUmVm
IG5ld0ltYWdlKTsKICNlbmRpZgogCisgICAgV2ViUGFnZVByb3h5JiBwYWdlKCkgY29uc3QgeyBy
ZXR1cm4gKm1fcGFnZTsgfQogICAgIE5TV2luZG93ICp3aW5kb3coKSBjb25zdDsKIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbQppbmRleCBkZDZiMzJiLi42N2E1NmRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKKyNpbXBvcnQgIkRhdGFSZWZlcmVu
Y2UuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCiAjaW1wb3J0ICJTaGFyZWFibGVCaXRt
YXAuaCIKICNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5oIgpAQCAtNTYsNyArNTcsOCBAQCBAaW50
ZXJmYWNlIE5TU2hhcmluZ1NlcnZpY2VQaWNrZXIgKERldGFpbHMpCiBAcHJvcGVydHkgTlNTaGFy
aW5nU2VydmljZVBpY2tlclN0eWxlIHN0eWxlOwogLSAoTlNNZW51ICopbWVudTsKIEBlbmQKLSNl
bmRpZgorCisjZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCkBAIC0yMjksOSArMjMxLDE1IEBAIC0gKHZvaWQpc2hhcmluZ1NlcnZp
Y2U6KE5TU2hhcmluZ1NlcnZpY2UgKilzaGFyaW5nU2VydmljZSB3aWxsU2hhcmVJdGVtczooTlNB
cnJhCiAKIC0gKHZvaWQpc2hhcmluZ1NlcnZpY2U6KE5TU2hhcmluZ1NlcnZpY2UgKilzaGFyaW5n
U2VydmljZSBkaWRTaGFyZUl0ZW1zOihOU0FycmF5ICopaXRlbXMKIHsKLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVNvdXJjZVJlZj4gc291cmNlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0
aERhdGEoKENGRGF0YVJlZilbaXRlbXMgb2JqZWN0QXRJbmRleDowXSwgTlVMTCkpOworICAgIE5T
RGF0YSAqZGF0YSA9IFtpdGVtcyBvYmplY3RBdEluZGV4OjBdOworICAgIFJldGFpblB0cjxDR0lt
YWdlU291cmNlUmVmPiBzb3VyY2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoRGF0
YSgoQ0ZEYXRhUmVmKWRhdGEsIE5VTEwpKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1h
Z2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgoc291cmNlLmdldCgp
LCAwLCBOVUxMKSk7Ci0gICAgX21lbnVQcm94eS0+cmVwbGFjZUNvbnRyb2xsZWRJbWFnZShpbWFn
ZS5nZXQoKSk7CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBJUEM6
OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
W2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7CisgICAgX21lbnVQcm94eS0+cGFnZSgpLnJl
cGxhY2VTZWxlY3Rpb25XaXRoUGFzdGVib2FyZERhdGEoTlNQYXN0ZWJvYXJkVHlwZVRJRkYsIGRh
dGFSZWZlcmVuY2UpOwogfQogCiAtIChOU1dpbmRvdyAqKXNoYXJpbmdTZXJ2aWNlOihOU1NoYXJp
bmdTZXJ2aWNlICopc2hhcmluZ1NlcnZpY2Ugc291cmNlV2luZG93Rm9yU2hhcmVJdGVtczooTlNB
cnJheSAqKWl0ZW1zIHNoYXJpbmdDb250ZW50U2NvcGU6KE5TU2hhcmluZ0NvbnRlbnRTY29wZSAq
KXNoYXJpbmdDb250ZW50U2NvcGUKQEAgLTI0OSw2ICsyNTcsNyBAQCBXZWJDb250ZXh0TWVudVBy
b3h5TWFjOjpXZWJDb250ZXh0TWVudVByb3h5TWFjKFdLVmlldyogd2ViVmlldywgV2ViUGFnZVBy
b3h5KiBwYQogICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3BhZ2UocGFnZSkKIHsK
KyAgICBBU1NFUlQobV9wYWdlKTsKIH0KIAogV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6fldlYkNv
bnRleHRNZW51UHJveHlNYWMoKQpAQCAtNDMzLDE3ICs0NDIsNiBAQCBOU1dpbmRvdyAqV2ViQ29u
dGV4dE1lbnVQcm94eU1hYzo6d2luZG93KCkgY29uc3QKICAgICByZXR1cm4gW21fd2ViVmlldyB3
aW5kb3ddOwogfQogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi12b2lkIFdlYkNvbnRl
eHRNZW51UHJveHlNYWM6OnJlcGxhY2VDb250cm9sbGVkSW1hZ2UoQ0dJbWFnZVJlZiBuZXdJbWFn
ZSkKLXsKLSAgICBGbG9hdFNpemUgbmV3SW1hZ2VTaXplKENHSW1hZ2VHZXRXaWR0aChuZXdJbWFn
ZSksIENHSW1hZ2VHZXRIZWlnaHQobmV3SW1hZ2UpKTsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBuZXdCaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShleHBhbmRl
ZEludFNpemUobmV3SW1hZ2VTaXplKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsK
LSAgICBuZXdCaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpLT5kcmF3TmF0aXZlSW1hZ2Uo
bmV3SW1hZ2UsIG5ld0ltYWdlU2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgbmV3SW1hZ2VTaXplKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbmV3SW1h
Z2VTaXplKSk7Ci0KLSAgICBtX3BhZ2UtPnJlcGxhY2VDb250cm9sbGVkSW1hZ2UobmV3Qml0bWFw
LnJlbGVhc2UoKSk7Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2Vi
UGFnZVByb3h5TWFjLm1tCmluZGV4IGM3YmI1MjguLjIxNDliZjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC0zOTUsNiArMzk1LDEz
IEBAIGJvb2wgV2ViUGFnZVByb3h5OjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVwbGFjZVNlbGVjdGlv
bldpdGhQYXN0ZWJvYXJkRGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYgZGF0YSkKK3sKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
UmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0YSh0eXBlLCBkYXRhKSwgbV9wYWdlSUQp
OworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50UG9zaXRpb24s
IGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBkcmFnSW1hZ2VIYW5kbGUsIGJvb2wgaXNM
aW5rRHJhZykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAwYThiNGI5Li5iMjY5M2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MzUsNiArNzM1LDggQEAK
IAkJNTExRDgyMDExODVCQzIxNzAwMUFFRDU2IC8qIFNRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUQ4MjAwMTg1
QkMyMTcwMDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAgKi87IH07CiAJCTUxMUY4
QTdCMTM4QjQ2MDkwMEE5NUY0NCAvKiBTZWNJdGVtU2hpbUxpYnJhcnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUY4QTc3MTM4QjQ2MDkwMEE5NUY0
NCAvKiBTZWNJdGVtU2hpbUxpYnJhcnkuaCAqLzsgfTsKIAkJNTExRjhBODExMzhCNDg1RDAwQTk1
RjQ0IC8qIFNlY0l0ZW1TaGltTGlicmFyeS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUY4QTc4MTM4QjQ2MDkwMEE5NUY0NCAvKiBTZWNJdGVtU2hp
bUxpYnJhcnkubW0gKi87IH07CisJCTUxMjEyN0MzMTkwODIzOUEwMERBRjM1QyAvKiBXZWJQYXN0
ZWJvYXJkT3ZlcnJpZGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMjEyN0MxMTkwODIzOUEwMERBRjM1QyAvKiBXZWJQYXN0ZWJvYXJkT3ZlcnJp
ZGVzLmNwcCAqLzsgfTsKKwkJNTEyMTI3QzQxOTA4MjM5QTAwREFGMzVDIC8qIFdlYlBhc3RlYm9h
cmRPdmVycmlkZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMjEyN0MyMTkwODIzOUEwMERBRjM1QyAvKiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgg
Ki87IH07CiAJCTUxMjE3NDYwMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTIxNzQ1
RTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuY3BwICovOyB9OwogCQk1MTIx
NzQ2MTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjE3NDVGMTY0QzIwRTMwMDM3QTVD
MSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oICovOyB9OwogCQk1MTIxNzQ2NDE2NEMyMTM3MDAzN0E1
QzEgLyogV2ViUmVzb3VyY2VCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEyMTc0NjIxNjRDMjEzNzAwMzdBNUMxIC8qIFdlYlJlc291cmNl
QnVmZmVyLmNwcCAqLzsgfTsKQEAgLTI1ODAsNiArMjU4Miw4IEBACiAJCTUxMUQ4MjAwMTg1QkMy
MTcwMDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTUUxpdGVJREJUcmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxMUY4QTc3MTM4QjQ2MDkwMEE5NUY0NCAvKiBTZWNJdGVtU2hp
bUxpYnJhcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2VjSXRlbVNoaW1M
aWJyYXJ5Lmg7IHBhdGggPSAuLi8uLi9XZWJQcm9jZXNzL21hYy9TZWNJdGVtU2hpbUxpYnJhcnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRjhBNzgxMzhCNDYwOTAwQTk1RjQ0
IC8qIFNlY0l0ZW1TaGltTGlicmFyeS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IFNlY0l0ZW1TaGltTGlicmFyeS5tbTsgcGF0aCA9IC4uLy4uL1dlYlByb2Nlc3Mv
bWFjL1NlY0l0ZW1TaGltTGlicmFyeS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTEyMTI3QzExOTA4MjM5QTAwREFGMzVDIC8qIFdlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFzdGVib2FyZE92ZXJyaWRl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMjEyN0MyMTkwODIzOUEwMERB
RjM1QyAvKiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRPdmVycmlkZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTEyMTc0NUUxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlYWJsZVJlc291cmNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyMTc0NUYxNjRDMjBFMzAwMzdB
NUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNoYXJlYWJsZVJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
MjE3NDYyMTY0QzIxMzcwMDM3QTVDMSAvKiBXZWJSZXNvdXJjZUJ1ZmZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUJ1ZmZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mjk5LDYgKzUzMDMsOCBAQAogCQkJCTFDOEUyNTZB
MTI3MERFMzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovLAogCQkJ
CTMxMDk5OTcxMTQ2Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuY3BwICov
LAogCQkJCTMxMDk5OTY4MTQ2QzcxRjUwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQu
aCAqLywKKwkJCQk1MTIxMjdDMTE5MDgyMzlBMDBEQUYzNUMgLyogV2ViUGFzdGVib2FyZE92ZXJy
aWRlcy5jcHAgKi8sCisJCQkJNTEyMTI3QzIxOTA4MjM5QTAwREFGMzVDIC8qIFdlYlBhc3RlYm9h
cmRPdmVycmlkZXMuaCAqLywKIAkJCQkxQTNFNzM2MDExQ0MyNjU5MDA3QkQ1MzkgLyogV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcCAqLywKIAkJCQkxQTNFNzM1RjExQ0MyNjU5MDA3QkQ1MzkgLyog
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggKi8sCiAJCQkJMzFENTkyOUMxNjZFMDVGRjAwRTZCRjAy
IC8qIFdlYlBsdWdJbkNsaWVudC5jcHAgKi8sCkBAIC03MTM0LDYgKzcxNDAsNyBAQAogCQkJCTFB
M0U3MzYxMTFDQzI2NTkwMDdCRDUzOSAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxRDU5MjlGMTY2RTA2MDAwMEU2QkYwMiAvKiBXZWJQbHVnSW5DbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzg3MDJEMTMwQjQ5QTIwMDJDMTI1NyAvKiBXZWJQbHVn
aW5TaXRlRGF0YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMjEyN0M0MTkwODIzOUEw
MERBRjM1QyAvKiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTgzNTNEQjE4ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFERjU5MUIxODkwNTI4RTAwNDNDMTQ1IC8qIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTc0NEYwMTI2MzhGQjMwMDZGMEYxMiAvKiBXZWJQ
b3B1cEl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtODYxNCw2ICs4NjIxLDcgQEAKIAkJCQlCQzMw
NjgyNTEyNUE2Qjk0MDBFNzEyNzggLyogV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxRjc1MDZCMDE4NTkxNjJDMDBFQzBGRjcgLyogV0tXZWJQcm9j
ZXNzUGx1Z0luU2NyaXB0V29ybGQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3NUU3NDlFQjE4MERC
Qjk4MDAwODhCQTYgLyogV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTIxMjdDMzE5MDgyMzlBMDBEQUYzNUMgLyogV2ViUGFz
dGVib2FyZE92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMwNjZCRTEyNUE0NDIx
MDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzExMUIxMTExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc1Byb3h5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxMDMyRjE4MTgwRjczQkIwMDk2MUJCNyAvKiBXZWJUb0RhdGFiYXNl
UHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJv
YXJkT3ZlcnJpZGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTM1
MTMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkT3Zl
cnJpZGVzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVz
JiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpzaGFyZWRQYXN0ZWJvYXJkT3ZlcnJpZGVzKCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2ViUGFzdGVib2FyZE92ZXJyaWRlcz4gc2hhcmVk
T3ZlcnJpZGVzOworICAgIHJldHVybiBzaGFyZWRPdmVycmlkZXM7Cit9CisKK1dlYlBhc3RlYm9h
cmRPdmVycmlkZXM6OldlYlBhc3RlYm9hcmRPdmVycmlkZXMoKQoreworfQorCit2b2lkIFdlYlBh
c3RlYm9hcmRPdmVycmlkZXM6OmFkZE92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorewor
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9vdmVycmlkZXNNYXAuYWRkKHBhc3RlYm9hcmROYW1lLCBu
dWxscHRyKTsKKworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SGFzaE1hcDxTdHJpbmcsIFZlY3Rvcjx1aW50OF90Pj4+IHR5cGVNYXAgPSBz
dGQ6Om1ha2VfdW5pcXVlPEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8dWludDhfdD4+PigpOworICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjptb3ZlKHR5cGVNYXApOworICAg
IH0KKworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNldCh0eXBlLCBkYXRhKTsKK30K
Kwordm9pZCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpyZW1vdmVPdmVycmlkZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgYXV0byBpdCA9
IG1fb3ZlcnJpZGVzTWFwLmZpbmQocGFzdGVib2FyZE5hbWUpOworICAgIGlmIChpdCA9PSBtX292
ZXJyaWRlc01hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGl0LT52YWx1
ZSk7CisKKyAgICBpdC0+dmFsdWUtPnJlbW92ZSh0eXBlKTsKKworICAgIC8vIElmIHRoaXMgd2Fz
IHRoZSBsYXN0IG92ZXJyaWRlIGZvciB0aGlzIHBhc3RlYm9hcmQsIHJlbW92ZSBpdHMgcmVjb3Jk
IGNvbXBsZXRlbHkuCisgICAgaWYgKGl0LT52YWx1ZS0+aXNFbXB0eSgpKQorICAgICAgICBtX292
ZXJyaWRlc01hcC5yZW1vdmUoaXQpOworfQorCitWZWN0b3I8U3RyaW5nPiBXZWJQYXN0ZWJvYXJk
T3ZlcnJpZGVzOjpvdmVycmlkZGVuVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CisKKyAgICBhdXRvIGl0ID0gbV9vdmVycmlk
ZXNNYXAuZmluZChwYXN0ZWJvYXJkTmFtZSk7CisgICAgaWYgKGl0ID09IG1fb3ZlcnJpZGVzTWFw
LmVuZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgQVNTRVJUKGl0LT52YWx1ZSk7
CisKKyAgICBmb3IgKFN0cmluZyYgdHlwZSA6IGl0LT52YWx1ZS0+a2V5cygpKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKHR5cGUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBXZWJQ
YXN0ZWJvYXJkT3ZlcnJpZGVzOjpnZXREYXRhRm9yT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIGNv
bnN0Cit7CisgICAgYXV0byBwYXN0ZWJvYXJkSXRlcmF0b3IgPSBtX292ZXJyaWRlc01hcC5maW5k
KHBhc3RlYm9hcmROYW1lKTsKKyAgICBpZiAocGFzdGVib2FyZEl0ZXJhdG9yID09IG1fb3ZlcnJp
ZGVzTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHR5cGVJdGVy
YXRvciA9IHBhc3RlYm9hcmRJdGVyYXRvci0+dmFsdWUtPmZpbmQodHlwZSk7CisgICAgaWYgKHR5
cGVJdGVyYXRvciA9PSBwYXN0ZWJvYXJkSXRlcmF0b3ItPnZhbHVlLT5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgZGF0YSA9IHR5cGVJdGVyYXRvci0+dmFsdWU7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6Z2V0RGF0YUZvck92
ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgdHlwZSwg
VmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBmb3VuZEJ1
ZmZlcjsKKyAgICBpZiAoIWdldERhdGFGb3JPdmVycmlkZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwg
Zm91bmRCdWZmZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkYXRhLmNsZWFyKCk7
CisgICAgZGF0YS5yZXNlcnZlQ2FwYWNpdHkoZm91bmRCdWZmZXIuc2l6ZSgpKTsKKyAgICBtZW1j
cHkoZGF0YS5kYXRhKCksIGZvdW5kQnVmZmVyLmRhdGEoKSwgZm91bmRCdWZmZXIuc2l6ZSgpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2Fy
ZE92ZXJyaWRlcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDk3MmQ3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5oCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBhc3RlYm9hcmRPdmVycmlkZXNfaAorI2RlZmluZSBX
ZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhc3RlYm9hcmRPdmVycmlk
ZXMgeworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxXZWJQYXN0ZWJvYXJkT3ZlcnJp
ZGVzPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViUGFzdGVib2FyZE92ZXJyaWRlcyYgc2hhcmVk
UGFzdGVib2FyZE92ZXJyaWRlcygpOworCisgICAgdm9pZCBhZGRPdmVycmlkZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYpOworICAgIHZvaWQgcmVtb3ZlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG92ZXJyaWRk
ZW5UeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKKworICAgIGJvb2wgZ2V0RGF0
YUZvck92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYg
dHlwZSwgVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3Q7CisgICAgYm9vbCBnZXREYXRhRm9yT3ZlcnJp
ZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlLCBWZWN0
b3I8Y2hhcj4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVz
KCk7CisKKyAgICAvLyBUaGUgbV9vdmVycmlkZXNNYXAgbWFwcyBzdHJpbmcgcGFzdGVib2FyZCBu
YW1lcyB0byBwYXN0ZWJvYXJkIGVudHJpZXMuCisgICAgLy8gRWFjaCBwYXN0ZWJvYXJkIGVudHJ5
IGlzIGEgbWFwIG9mIGEgc3RyaW5nIHR5cGUgdG8gYSBkYXRhIGJ1ZmZlci4KKyAgICBIYXNoTWFw
PFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8dWludDhfdD4+
Pj4gbV9vdmVycmlkZXNNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFdlYlBhc3RlYm9hcmRPdmVycmlkZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuY3BwCmluZGV4IDQ5N2Y3ZGMuLjc4YTUzMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViSURCRmFjdG9yeUJhY2tlbmQuaCIKICNpbmNsdWRl
ICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5oIgogI2luY2x1
ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KQEAgLTM3NCwxMiArMzc1LDI1IEBAIFBhc3NSZWZQ
dHI8U3RvcmFnZU5hbWVzcGFjZT4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZShQYWdlCiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRUeXBlcyhW
ZWN0b3I8U3RyaW5nPiYgdHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Cisg
ICAgLy8gRmlyc3QgY2hlY2sgdGhlIG92ZXJyaWRlcy4KKyAgICAvLyBUaGUgcHVycG9zZSBvZiB0
aGUgb3ZlcnJpZGVzIGlzIHRvIGF2b2lkIG1lc3NhZ2luZyBiYWNrIHRvIHRoZSBVSSBwcm9jZXNz
LgorICAgIC8vIFRoZXJlZm9yZSwgaWYgdGhlcmUgYXJlIGFueSBvdmVycmlkZGVuIHR5cGVzLCB3
ZSByZXR1cm4ganVzdCB0aG9zZS4KKyAgICB0eXBlcyA9IFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6
OnNoYXJlZFBhc3RlYm9hcmRPdmVycmlkZXMoKS5vdmVycmlkZGVuVHlwZXMocGFzdGVib2FyZE5h
bWUpOworICAgIGlmICghdHlwZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKICAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViQ29udGV4dDo6R2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2Vz
OjpXZWJDb250ZXh0OjpHZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KHR5cGVzKSwgMCk7CiB9CiAK
IFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkKIHsKKyAgICAvLyBGaXJzdCBjaGVjayB0aGUgb3ZlcnJpZGVzLgor
ICAgIFZlY3RvcjxjaGFyPiBvdmVycmlkZUJ1ZmZlcjsKKyAgICBpZiAoV2ViUGFzdGVib2FyZE92
ZXJyaWRlczo6c2hhcmVkUGFzdGVib2FyZE92ZXJyaWRlcygpLmdldERhdGFGb3JPdmVycmlkZShw
YXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIG92ZXJyaWRlQnVmZmVyKSkKKyAgICAgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3Iob3ZlcnJpZGVCdWZmZXIpOworCisgICAg
Ly8gRmFsbGJhY2sgdG8gbWVzc2FnaW5nIHRoZSBVSSBwcm9jZXNzIGZvciBuYXRpdmUgcGFzdGVi
b2FyZCBjb250ZW50LgogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICB1aW50
NjRfdCBzaXplID0gMDsKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6R2V0UGFzdGVib2FyZEJ1
ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCmluZGV4
IGRmMDQ3YmUuLjI4Y2QzNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcApAQCAtNzcsMTMgKzc3LDYgQEAgdm9pZCBXZWJD
b250ZXh0TWVudTo6aXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmIGl0
ZW0pCiAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS5jb250
ZXh0TWVudUl0ZW1TZWxlY3RlZCgmY29yZUl0ZW0pOwogfQogCi0jaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpCi12b2lkIFdlYkNvbnRleHRNZW51OjpyZXBsYWNlQ29udHJvbGxlZEltYWdlKFBh
c3NSZWZQdHI8SW1hZ2U+IG5ld0ltYWdlKQotewotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCkucmVwbGFjZUNvbnRyb2xsZWRJbWFnZShuZXdJbWFnZSk7Ci19
Ci0jZW5kaWYKLQogdm9pZCBXZWJDb250ZXh0TWVudTo6bWVudUl0ZW1zV2l0aFVzZXJEYXRhKFZl
Y3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiAmbWVudUl0ZW1zLCBSZWZQdHI8QVBJOjpPYmpl
Y3Q+JiB1c2VyRGF0YSkgY29uc3QKIHsKICAgICBDb250ZXh0TWVudUNvbnRyb2xsZXImIGNvbnRy
b2xsZXIgPSBtX3BhZ2UtPmNvcmVQYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuaApp
bmRleCAzNTBmNzRiLi5mYzYzYWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuaApAQCAtNTAsMTAgKzUwLDYgQEAgcHVibGljOgog
ICAgIHZvaWQgaXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmKTsKICAg
ICBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gaXRlbXMoKSBjb25zdDsKIAotI2lmIEVO
QUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIHZvaWQgcmVwbGFjZUNvbnRyb2xsZWRJbWFnZShQ
YXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICBXZWJD
b250ZXh0TWVudShXZWJQYWdlKik7CiAgICAgdm9pZCBtZW51SXRlbXNXaXRoVXNlckRhdGEoVmVj
dG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiwgUmVmUHRyPEFQSTo6T2JqZWN0PiYpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4
IDZmYjkzYjAuLjE1ODhlYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKQEAgLTMxNjIsMTUgKzMxNjIsNiBAQCB2b2lkIFdlYlBhZ2U6OmRpZFNl
bGVjdEl0ZW1Gcm9tQWN0aXZlQ29udGV4dE1lbnUoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0
YSYgaQogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLXZvaWQgV2Vi
UGFnZTo6cmVwbGFjZUNvbnRyb2xsZWRJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSYgYml0bWFwSGFuZGxlKQotewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9
IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGJpdG1hcEhhbmRsZSk7Ci0gICAgaWYgKGJpdG1hcCkK
LSAgICAgICAgbV9jb250ZXh0TWVudS0+cmVwbGFjZUNvbnRyb2xsZWRJbWFnZShiaXRtYXAtPmNy
ZWF0ZUltYWdlKCkpOwotfQotI2VuZGlmCi0KIHZvaWQgV2ViUGFnZTo6cmVwbGFjZVNlbGVjdGlv
bldpdGhUZXh0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIGJvb2wg
c2VsZWN0UmVwbGFjZW1lbnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKaW5kZXggYmYyMGZkYS4uMzMyYjM0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01ODcsNiArNTg3LDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudChjb25zdCBXZWJLaXQ6
OldlYk1vdXNlRXZlbnQmLCBib29sJiByZXN1bHQpOwogICAgIHZvaWQgYWNjZXB0c0ZpcnN0TW91
c2UoaW50IGV2ZW50TnVtYmVyLCBjb25zdCBXZWJLaXQ6OldlYk1vdXNlRXZlbnQmLCBib29sJiBy
ZXN1bHQpOwogICAgIGJvb2wgcGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9yKGNv
bnN0IFN0cmluZyYsIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKKworI2lmIEVOQUJMRShTRVJW
SUNFX0NPTlRST0xTKQorICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkRGF0
YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOworI2VuZGlm
CisKICNlbGlmIFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25z
dCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nKTsKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNv
bnN0IFdURjo6U3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywgY29uc3QgV1RGOjpWZWN0b3I8V2Vi
Q29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCB1aW50NjRfdCBjdXJzb3JQ
b3NpdGlvbik7CkBAIC03NzMsMTAgKzc3OCw2IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1bWVudExvYWRlcihXZWJDb3JlOjpGcmFt
ZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1YnN0
aXR1dGVEYXRhJik7CiAKICAgICB2b2lkIGdldEJ5dGVjb2RlUHJvZmlsZSh1aW50NjRfdCBjYWxs
YmFja0lEKTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIHZvaWQgcmVwbGFj
ZUNvbnRyb2xsZWRJbWFnZShjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpOwotI2VuZGlm
CiAgICAgCiAgICAgLy8gU29tZSBwbGF0Zm9ybXMgcmVxdWlyZSBhY2Nlc3NpYmlsaXR5LWVuYWJs
ZWQgcHJvY2Vzc2VzIHRvIHNwaW4gdGhlIHJ1biBsb29wIHNvIHRoYXQgdGhlIFdlYlByb2Nlc3Mg
ZG9lc24ndCBoYW5nLgogICAgIC8vIFdoaWxlIHRoaXMgaXMgbm90IGlkZWFsLCBpdCBkb2VzIG5v
dCBoYXZlIHRvIGJlIGFwcGxpZWQgdG8gZXZlcnkgcGxhdGZvcm0gYXQgdGhlIG1vbWVudC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4KaW5kZXggMGM2MDE4MC4uMzIzYWQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTMwMyw2ICszMDMs
MTAgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgR2V0RGF0YVNl
bGVjdGlvbkZvclBhc3RlYm9hcmQoU3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAtPiAoV2ViS2l0OjpT
aGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVpbnQ2NF90IHNpemUpCiAgICAgUmVhZFNlbGVj
dGlvbkZyb21QYXN0ZWJvYXJkKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKGJvb2wgcmVzdWx0
KQogCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgUmVwbGFjZVNlbGVjdGlvbldp
dGhQYXN0ZWJvYXJkRGF0YShTdHJpbmcgdHlwZSwgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCisj
ZW5kaWYKKwogICAgIFNob3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudChXZWJLaXQ6OldlYk1v
dXNlRXZlbnQgZXZlbnQpIC0+IChib29sIHJlc3VsdCkKICAgICBBY2NlcHRzRmlyc3RNb3VzZShp
bnQgZXZlbnROdW1iZXIsIFdlYktpdDo6V2ViTW91c2VFdmVudCBldmVudCkgLT4gKGJvb2wgcmVz
dWx0KQogCkBAIC0zNjMsOCArMzY3LDQgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNl
aXZlciB7CiAgICAgR2V0Qnl0ZWNvZGVQcm9maWxlKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAg
CiAgICAgVGFrZVNuYXBzaG90KFdlYkNvcmU6OkludFJlY3Qgc25hcHNob3RSZWN0LCBXZWJDb3Jl
OjpJbnRTaXplIGJpdG1hcFNpemUsIHVpbnQzMl90IG9wdGlvbnMsIHVpbnQ2NF90IGNhbGxiYWNr
SUQpCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICBSZXBsYWNlQ29udHJvbGxl
ZEltYWdlKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgbmV3Qml0bWFwSGFuZGxlKQot
I2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KaW5kZXggOWQ2MTU4Yi4uYzdjNjJlNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtNDUsNiAr
NDUsNyBAQAogI2ltcG9ydCAiV2ViSW1hZ2UuaCIKICNpbXBvcnQgIldlYkluc3BlY3Rvci5oIgog
I2ltcG9ydCAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlBhc3RlYm9hcmRP
dmVycmlkZXMuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKICNpbXBvcnQgIldl
YlByb2Nlc3MuaCIKICNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KQEAgLTY3MCw2ICs2NzEsMjQg
QEAgYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgS2V5Ym8KICAgICByZXR1cm4gZGlkUGVyZm9ybUFjdGlvbjsK
IH0KIAorI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorc3RhdGljIFN0cmluZyYgcmVwbGFj
ZVNlbGVjdGlvblBhc3RlYm9hcmROYW1lKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPiBzdHJpbmcoIlJlcGxhY2VTZWxlY3Rpb25QYXN0ZWJvYXJkIik7CisgICAgcmV0dXJu
IHN0cmluZzsKK30KKwordm9pZCBXZWJQYWdlOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFBhc3RlYm9h
cmREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRh
KQoreworICAgIFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6OnNoYXJlZFBhc3RlYm9hcmRPdmVycmlk
ZXMoKS5hZGRPdmVycmlkZShyZXBsYWNlU2VsZWN0aW9uUGFzdGVib2FyZE5hbWUoKSwgdHlwZSwg
ZGF0YS52ZWN0b3IoKSk7CisKKyAgICBib29sIHJlc3VsdDsKKyAgICByZWFkU2VsZWN0aW9uRnJv
bVBhc3RlYm9hcmQocmVwbGFjZVNlbGVjdGlvblBhc3RlYm9hcmROYW1lKCksIHJlc3VsdCk7CisK
KyAgICBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpzaGFyZWRQYXN0ZWJvYXJkT3ZlcnJpZGVzKCku
cmVtb3ZlT3ZlcnJpZGUocmVwbGFjZVNlbGVjdGlvblBhc3RlYm9hcmROYW1lKCksIHR5cGUpOwor
fQorI2VuZGlmCisKIGJvb2wgV2ViUGFnZTo6cGVyZm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2
ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKQogewogICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>