<?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>78682</bug_id>
          
          <creation_ts>2012-02-15 01:34:45 -0800</creation_ts>
          <short_desc>[WebSocket] Move WebSocketChannel::FrameData into a separate header file</short_desc>
          <delta_ts>2012-02-20 06:55:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Kenichi Ishibashi">bashi</assigned_to>
          <cc>ap</cc>
    
    <cc>tkent</cc>
    
    <cc>toyoshim</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>557044</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-15 01:34:45 -0800</bug_when>
    <thetext>This brings flexibility to add classes which want to do something for incoming/outgoing frames (e.g. compression/decompression).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557045</commentid>
    <comment_count>1</comment_count>
      <attachid>127133</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-15 01:37:37 -0800</bug_when>
    <thetext>Created attachment 127133
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557056</commentid>
    <comment_count>2</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-15 01:45:33 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=127133) [details]
&gt; WIP patch

Yuta-san, could you take a look?

Some notes:
- Should WebSocketFrame be a class (not struct) and should I add setter/getter methods?
- I removed frameEnd field and added m_currentFrameEnd to WebSocketChannel. I ran layout tests, but not sure it is safe or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557102</commentid>
    <comment_count>3</comment_count>
      <attachid>127133</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2012-02-15 03:09:37 -0800</bug_when>
    <thetext>Comment on attachment 127133
WIP patch

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

I think your patch is in the right direction.

Re struct vs class, I guess current WebSocketFrame is simple enough to leave it as a struct.

&gt; Source/WebCore/websockets/WebSocketChannel.cpp:606
&gt; +    m_currentFrameEnd = p + maskingKeyLength + payloadLength;

Ending position of a frame has nothing to do with the channel&apos;s state, so it sounds strange to have it as a member variable.

Rather, I prefer to have it as an output parameter of parseFrame() function:

    parseFrame(WebSocketFrame&amp; frame, const char*&amp; frameEnd) { ... }

&gt; Source/WebCore/websockets/WebSocketChannel.cpp:978
&gt; +    frame.opCode = opCode;
&gt; +    frame.final = true;
&gt; +    frame.masked = true;
&gt; +    frame.payload = data;
&gt; +    frame.payloadLength = dataLength;

It&apos;s a bit risky to initialize a struct this way (consider the situation where you have added a new member but forget to fix here).

I think it&apos;s okay for structs to have a constructor. There are many examples in WebKit code base.

&gt; Source/WebCore/websockets/WebSocketFrame.h:46
&gt; +    static const OpCode OpCodeContinuation = 0x0;
&gt; +    static const OpCode OpCodeText = 0x1;
&gt; +    static const OpCode OpCodeBinary = 0x2;
&gt; +    static const OpCode OpCodeClose = 0x8;
&gt; +    static const OpCode OpCodePing = 0x9;
&gt; +    static const OpCode OpCodePong = 0xA;

You probably need to have defitions of these variables in .cpp file.

(According to my vague memory, Visual Studio didn&apos;t like to have a constant definition in class declaration, but I may be wrong. Try EWS if you are curious.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557178</commentid>
    <comment_count>4</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-15 05:20:13 -0800</bug_when>
    <thetext>Thank you for comments. I&apos;ll address your comment next week.

(In reply to comment #3)
&gt; (From update of attachment 127133 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127133&amp;action=review
&gt; 
&gt; I think your patch is in the right direction.
&gt; 
&gt; Re struct vs class, I guess current WebSocketFrame is simple enough to leave it as a struct.
&gt; 
&gt; &gt; Source/WebCore/websockets/WebSocketChannel.cpp:606
&gt; &gt; +    m_currentFrameEnd = p + maskingKeyLength + payloadLength;
&gt; 
&gt; Ending position of a frame has nothing to do with the channel&apos;s state, so it sounds strange to have it as a member variable.
&gt; 
&gt; Rather, I prefer to have it as an output parameter of parseFrame() function:
&gt; 
&gt;     parseFrame(WebSocketFrame&amp; frame, const char*&amp; frameEnd) { ... }
&gt; 
&gt; &gt; Source/WebCore/websockets/WebSocketChannel.cpp:978
&gt; &gt; +    frame.opCode = opCode;
&gt; &gt; +    frame.final = true;
&gt; &gt; +    frame.masked = true;
&gt; &gt; +    frame.payload = data;
&gt; &gt; +    frame.payloadLength = dataLength;
&gt; 
&gt; It&apos;s a bit risky to initialize a struct this way (consider the situation where you have added a new member but forget to fix here).
&gt; 
&gt; I think it&apos;s okay for structs to have a constructor. There are many examples in WebKit code base.
&gt; 
&gt; &gt; Source/WebCore/websockets/WebSocketFrame.h:46
&gt; &gt; +    static const OpCode OpCodeContinuation = 0x0;
&gt; &gt; +    static const OpCode OpCodeText = 0x1;
&gt; &gt; +    static const OpCode OpCodeBinary = 0x2;
&gt; &gt; +    static const OpCode OpCodeClose = 0x8;
&gt; &gt; +    static const OpCode OpCodePing = 0x9;
&gt; &gt; +    static const OpCode OpCodePong = 0xA;
&gt; 
&gt; You probably need to have defitions of these variables in .cpp file.
&gt; 
&gt; (According to my vague memory, Visual Studio didn&apos;t like to have a constant definition in class declaration, but I may be wrong. Try EWS if you are curious.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559980</commentid>
    <comment_count>5</comment_count>
      <attachid>127749</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-19 18:30:43 -0800</bug_when>
    <thetext>Created attachment 127749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559981</commentid>
    <comment_count>6</comment_count>
      <attachid>127133</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-19 18:36:46 -0800</bug_when>
    <thetext>Comment on attachment 127133
WIP patch

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

&gt;&gt;&gt; Source/WebCore/websockets/WebSocketChannel.cpp:606
&gt;&gt;&gt; +    m_currentFrameEnd = p + maskingKeyLength + payloadLength;
&gt;&gt; 
&gt;&gt; Ending position of a frame has nothing to do with the channel&apos;s state, so it sounds strange to have it as a member variable.
&gt;&gt; 
&gt;&gt; Rather, I prefer to have it as an output parameter of parseFrame() function:
&gt;&gt; 
&gt;&gt;     parseFrame(WebSocketFrame&amp; frame, const char*&amp; frameEnd) { ... }
&gt; 
&gt; 

Done.

&gt;&gt; Source/WebCore/websockets/WebSocketChannel.cpp:978
&gt;&gt; +    frame.payloadLength = dataLength;
&gt; 
&gt; It&apos;s a bit risky to initialize a struct this way (consider the situation where you have added a new member but forget to fix here).
&gt; 
&gt; I think it&apos;s okay for structs to have a constructor. There are many examples in WebKit code base.

Done.

&gt;&gt; Source/WebCore/websockets/WebSocketFrame.h:46
&gt;&gt; +    static const OpCode OpCodePong = 0xA;
&gt; 
&gt; You probably need to have defitions of these variables in .cpp file.
&gt; 
&gt; (According to my vague memory, Visual Studio didn&apos;t like to have a constant definition in class declaration, but I may be wrong. Try EWS if you are curious.)

It seems that I need to use enum hack here because g++ complained like below when I defined these variables in .cpp file:

WebKit/Source/WebCore/websockets/WebSocketChannel.cpp:654: error: &apos;WebCore::WebSocketFrame::OpCodeContinuation&apos; cannot appear in a constant-expression</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560101</commentid>
    <comment_count>7</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-20 01:19:11 -0800</bug_when>
    <thetext>Hi Kent-san, Alexey,

Could you review the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560122</commentid>
    <comment_count>8</comment_count>
      <attachid>127749</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-20 02:31:11 -0800</bug_when>
    <thetext>Comment on attachment 127749
Patch

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

&gt; Source/WebCore/websockets/WebSocketChannel.cpp:975
&gt; +    // Mask the frame.

The comment is not so helpful.
How about making a function to make a frame data if you&apos;d like to improve the readability of the code?

&gt; Source/WebCore/websockets/WebSocketChannel.cpp:1005
&gt; -    // Mask the frame.
&gt; -    size_t maskingKeyStart = frame.size();
&gt; -    frame.grow(frame.size() + maskingKeyWidthInBytes); // Add placeholder for masking key. Will be overwritten.
&gt; -    size_t payloadStart = frame.size();
&gt; -    frame.append(data, dataLength);
&gt; +    size_t maskingKeyStart = frameData.size();
&gt; +    frameData.grow(frameData.size() + maskingKeyWidthInBytes); // Add placeholder for masking key. Will be overwritten.
&gt; +    size_t payloadStart = frameData.size();
&gt; +    frameData.append(frame.payload, frame.payloadLength);
&gt;  
&gt; -    cryptographicallyRandomValues(frame.data() + maskingKeyStart, maskingKeyWidthInBytes);
&gt; -    for (size_t i = 0; i &lt; dataLength; ++i)
&gt; -        frame[payloadStart + i] ^= frame[maskingKeyStart + i % maskingKeyWidthInBytes];
&gt; +    cryptographicallyRandomValues(frameData.data() + maskingKeyStart, maskingKeyWidthInBytes);
&gt; +    for (size_t i = 0; i &lt; frame.payloadLength; ++i)
&gt; +        frameData[payloadStart + i] ^= frameData[maskingKeyStart + i % maskingKeyWidthInBytes];

Also, making a function to mask the frame data would improve readability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560151</commentid>
    <comment_count>9</comment_count>
      <attachid>127800</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-20 03:37:32 -0800</bug_when>
    <thetext>Created attachment 127800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560155</commentid>
    <comment_count>10</comment_count>
      <attachid>127749</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-02-20 03:46:28 -0800</bug_when>
    <thetext>Comment on attachment 127749
Patch

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

Kent-san,

Thank you for review. I added two functions. I have though about making WebSocketFrame to be a class and put these function as its member functions, but I just added them as static functions for now.

&gt;&gt; Source/WebCore/websockets/WebSocketChannel.cpp:975
&gt;&gt; +    // Mask the frame.
&gt; 
&gt; The comment is not so helpful.
&gt; How about making a function to make a frame data if you&apos;d like to improve the readability of the code?

I put the comment on wrong place.. Anyway, added makeFrameData() function.

&gt;&gt; Source/WebCore/websockets/WebSocketChannel.cpp:1005
&gt;&gt; +        frameData[payloadStart + i] ^= frameData[maskingKeyStart + i % maskingKeyWidthInBytes];
&gt; 
&gt; Also, making a function to mask the frame data would improve readability.

Added a function as appendMaskedFramePayload().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560218</commentid>
    <comment_count>11</comment_count>
      <attachid>127800</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-20 06:55:06 -0800</bug_when>
    <thetext>Comment on attachment 127800
Patch

Clearing flags on attachment: 127800

Committed r108240: &lt;http://trac.webkit.org/changeset/108240&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560219</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-20 06:55:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127133</attachid>
            <date>2012-02-15 01:37:37 -0800</date>
            <delta_ts>2012-02-19 18:36:46 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-78682-20120215183736.patch</filename>
            <type>text/plain</type>
            <size>23365</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3Nzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZmIxNmE1ZmY5
Yzk1MDljZjliYmUwZmY0MDg5ZTQxZmY0MDA1MWEzMS4uMmZlMDZmNWZkYTQ0Y2E2OThlYzU4N2U0
NTIxZGFjMGM3MDQ0ZmQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDgwNCw2ICs0ODA0LDcgQEAK
ICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3Bw
JywKICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIu
aCcsCiAgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25Qcm9jZXNzb3Iu
aCcsCisgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRGcmFtZS5oJywKICAgICAgICAg
ICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAnLAogICAgICAgICAgICAgJ3dl
YnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmgnLAogICAgICAgICAgICAgJ3dlYnNvY2tldHMv
V2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggODcyOGUxNmNjOWZhZTdkZmMzNTEwNDJh
NDIzNmFlMGIzNDUyYzNiNy4uMmY2MDg0MDA3YmNmOGI3OWZjZDBjMTE4NjQ5YWM1ZjRkYzY2MGNm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3Bw
CkBAIC04MSwxOCArODEsMTIgQEAgY29uc3Qgc2l6ZV90IHBheWxvYWRMZW5ndGhXaXRoVHdvQnl0
ZUV4dGVuZGVkTGVuZ3RoRmllbGQgPSAxMjY7CiBjb25zdCBzaXplX3QgcGF5bG9hZExlbmd0aFdp
dGhFaWdodEJ5dGVFeHRlbmRlZExlbmd0aEZpZWxkID0gMTI3OwogY29uc3Qgc2l6ZV90IG1hc2tp
bmdLZXlXaWR0aEluQnl0ZXMgPSA0OwogCi1jb25zdCBXZWJTb2NrZXRDaGFubmVsOjpPcENvZGUg
V2ViU29ja2V0Q2hhbm5lbDo6T3BDb2RlQ29udGludWF0aW9uID0gMHgwOwotY29uc3QgV2ViU29j
a2V0Q2hhbm5lbDo6T3BDb2RlIFdlYlNvY2tldENoYW5uZWw6Ok9wQ29kZVRleHQgPSAweDE7Ci1j
b25zdCBXZWJTb2NrZXRDaGFubmVsOjpPcENvZGUgV2ViU29ja2V0Q2hhbm5lbDo6T3BDb2RlQmlu
YXJ5ID0gMHgyOwotY29uc3QgV2ViU29ja2V0Q2hhbm5lbDo6T3BDb2RlIFdlYlNvY2tldENoYW5u
ZWw6Ok9wQ29kZUNsb3NlID0gMHg4OwotY29uc3QgV2ViU29ja2V0Q2hhbm5lbDo6T3BDb2RlIFdl
YlNvY2tldENoYW5uZWw6Ok9wQ29kZVBpbmcgPSAweDk7Ci1jb25zdCBXZWJTb2NrZXRDaGFubmVs
OjpPcENvZGUgV2ViU29ja2V0Q2hhbm5lbDo6T3BDb2RlUG9uZyA9IDB4QTsKLQogV2ViU29ja2V0
Q2hhbm5lbDo6V2ViU29ja2V0Q2hhbm5lbChEb2N1bWVudCogZG9jdW1lbnQsIFdlYlNvY2tldENo
YW5uZWxDbGllbnQqIGNsaWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBt
X2NsaWVudChjbGllbnQpCiAgICAgLCBtX2J1ZmZlcigwKQogICAgICwgbV9idWZmZXJTaXplKDAp
CisgICAgLCBtX2N1cnJlbnRGcmFtZUVuZCgwKQogICAgICwgbV9yZXN1bWVUaW1lcih0aGlzLCAm
V2ViU29ja2V0Q2hhbm5lbDo6cmVzdW1lVGltZXJGaXJlZCkKICAgICAsIG1fc3VzcGVuZGVkKGZh
bHNlKQogICAgICwgbV9jbG9zaW5nKGZhbHNlKQpAQCAtMTgzLDcgKzE3Nyw3IEBAIGJvb2wgV2Vi
U29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSkKIHsKICAg
ICBMT0coTmV0d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAgc2VuZCBhcnJheWJ1ZmZlciAlcCIs
IHRoaXMsICZiaW5hcnlEYXRhKTsKICAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlByb3RvY29sKTsK
LSAgICBlbnF1ZXVlUmF3RnJhbWUoT3BDb2RlQmluYXJ5LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oYmluYXJ5RGF0YS5kYXRhKCkpLCBiaW5hcnlEYXRhLmJ5dGVMZW5ndGgoKSk7CisgICAgZW5x
dWV1ZVJhd0ZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnksIHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihiaW5hcnlEYXRhLmRhdGEoKSksIGJpbmFyeURhdGEuYnl0ZUxlbmd0aCgpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTkxLDcgKzE4NSw3IEBAIGJvb2wgV2ViU29ja2V0
Q2hhbm5lbDo6c2VuZChjb25zdCBCbG9iJiBiaW5hcnlEYXRhKQogewogICAgIExPRyhOZXR3b3Jr
LCAiV2ViU29ja2V0Q2hhbm5lbCAlcCBzZW5kIGJsb2IgJXMiLCB0aGlzLCBiaW5hcnlEYXRhLnVy
bCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIEFTU0VSVCghbV91c2VIaXhpZTc2UHJv
dG9jb2wpOwotICAgIGVucXVldWVCbG9iRnJhbWUoT3BDb2RlQmluYXJ5LCBiaW5hcnlEYXRhKTsK
KyAgICBlbnF1ZXVlQmxvYkZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnksIGJpbmFy
eURhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xOTksNyArMTkzLDcgQEAgYm9vbCBX
ZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAg
ICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXRDaGFubmVsICVwIHNlbmQgYmluYXJ5ICVwICglZEIp
IiwgdGhpcywgZGF0YSwgbGVuZ3RoKTsKICAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlByb3RvY29s
KTsKLSAgICBlbnF1ZXVlUmF3RnJhbWUoT3BDb2RlQmluYXJ5LCBkYXRhLCBsZW5ndGgpOworICAg
IGVucXVldWVSYXdGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlQmluYXJ5LCBkYXRhLCBsZW5n
dGgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01MjcsNyArNTIxLDcgQEAgdm9pZCBXZWJT
b2NrZXRDaGFubmVsOjpzdGFydENsb3NpbmdIYW5kc2hha2UoaW50IGNvZGUsIGNvbnN0IFN0cmlu
ZyYgcmVhc29uKQogICAgICAgICAgICAgYnVmLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihsb3dC
eXRlKSk7CiAgICAgICAgICAgICBidWYuYXBwZW5kKHJlYXNvbi51dGY4KCkuZGF0YSgpLCByZWFz
b24udXRmOCgpLmxlbmd0aCgpKTsKICAgICAgICAgfQotICAgICAgICBlbnF1ZXVlUmF3RnJhbWUo
T3BDb2RlQ2xvc2UsIGJ1Zi5kYXRhKCksIGJ1Zi5zaXplKCkpOworICAgICAgICBlbnF1ZXVlUmF3
RnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZUNsb3NlLCBidWYuZGF0YSgpLCBidWYuc2l6ZSgp
KTsKICAgICB9CiAgICAgbV9jbG9zaW5nID0gdHJ1ZTsKICAgICBpZiAobV9jbGllbnQpCkBAIC01
NDIsNyArNTM2LDcgQEAgdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpjbG9zaW5nVGltZXJGaXJlZChU
aW1lcjxXZWJTb2NrZXRDaGFubmVsPiogdGltZXIpCiAgICAgICAgIG1faGFuZGxlLT5kaXNjb25u
ZWN0KCk7CiB9CiAKLVdlYlNvY2tldENoYW5uZWw6OlBhcnNlRnJhbWVSZXN1bHQgV2ViU29ja2V0
Q2hhbm5lbDo6cGFyc2VGcmFtZShGcmFtZURhdGEmIGZyYW1lKQorV2ViU29ja2V0Q2hhbm5lbDo6
UGFyc2VGcmFtZVJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpwYXJzZUZyYW1lKFdlYlNvY2tldEZy
YW1lJiBmcmFtZSkKIHsKICAgICBjb25zdCBjaGFyKiBwID0gbV9idWZmZXI7CiAgICAgY29uc3Qg
Y2hhciogYnVmZmVyRW5kID0gbV9idWZmZXIgKyBtX2J1ZmZlclNpemU7CkBAIC01NTcsNyArNTUx
LDcgQEAgV2ViU29ja2V0Q2hhbm5lbDo6UGFyc2VGcmFtZVJlc3VsdCBXZWJTb2NrZXRDaGFubmVs
OjpwYXJzZUZyYW1lKEZyYW1lRGF0YSYgZnJhbWUKICAgICBib29sIHJlc2VydmVkMSA9IGZpcnN0
Qnl0ZSAmIHJlc2VydmVkMUJpdDsKICAgICBib29sIHJlc2VydmVkMiA9IGZpcnN0Qnl0ZSAmIHJl
c2VydmVkMkJpdDsKICAgICBib29sIHJlc2VydmVkMyA9IGZpcnN0Qnl0ZSAmIHJlc2VydmVkM0Jp
dDsKLSAgICBPcENvZGUgb3BDb2RlID0gZmlyc3RCeXRlICYgb3BDb2RlTWFzazsKKyAgICBXZWJT
b2NrZXRGcmFtZTo6T3BDb2RlIG9wQ29kZSA9IGZpcnN0Qnl0ZSAmIG9wQ29kZU1hc2s7CiAKICAg
ICBib29sIG1hc2tlZCA9IHNlY29uZEJ5dGUgJiBtYXNrQml0OwogICAgIHVpbnQ2NF90IHBheWxv
YWRMZW5ndGg2NCA9IHNlY29uZEJ5dGUgJiBwYXlsb2FkTGVuZ3RoTWFzazsKQEAgLTYwOSw3ICs2
MDMsNyBAQCBXZWJTb2NrZXRDaGFubmVsOjpQYXJzZUZyYW1lUmVzdWx0IFdlYlNvY2tldENoYW5u
ZWw6OnBhcnNlRnJhbWUoRnJhbWVEYXRhJiBmcmFtZQogICAgIGZyYW1lLm1hc2tlZCA9IG1hc2tl
ZDsKICAgICBmcmFtZS5wYXlsb2FkID0gcCArIG1hc2tpbmdLZXlMZW5ndGg7CiAgICAgZnJhbWUu
cGF5bG9hZExlbmd0aCA9IHBheWxvYWRMZW5ndGg7Ci0gICAgZnJhbWUuZnJhbWVFbmQgPSBwICsg
bWFza2luZ0tleUxlbmd0aCArIHBheWxvYWRMZW5ndGg7CisgICAgbV9jdXJyZW50RnJhbWVFbmQg
PSBwICsgbWFza2luZ0tleUxlbmd0aCArIHBheWxvYWRMZW5ndGg7CiAgICAgcmV0dXJuIEZyYW1l
T0s7CiB9CiAKQEAgLTYxNywxMiArNjExLDE1IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0ZyYW1lKCkKIHsKICAgICBBU1NFUlQobV9idWZmZXIpOwogCi0gICAgRnJhbWVEYXRhIGZy
YW1lOworICAgIFdlYlNvY2tldEZyYW1lIGZyYW1lOwogICAgIGlmIChwYXJzZUZyYW1lKGZyYW1l
KSAhPSBGcmFtZU9LKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBBU1NFUlQobV9idWZm
ZXIgPCBtX2N1cnJlbnRGcmFtZUVuZCk7CisgICAgQVNTRVJUKG1fY3VycmVudEZyYW1lRW5kIDw9
IG1fYnVmZmVyICsgbV9idWZmZXJTaXplKTsKKwogICAgIC8vIFZhbGlkYXRlIHRoZSBmcmFtZSBk
YXRhLgotICAgIGlmIChpc1Jlc2VydmVkT3BDb2RlKGZyYW1lLm9wQ29kZSkpIHsKKyAgICBpZiAo
V2ViU29ja2V0RnJhbWU6OmlzUmVzZXJ2ZWRPcENvZGUoZnJhbWUub3BDb2RlKSkgewogICAgICAg
ICBmYWlsKCJVbnJlY29nbml6ZWQgZnJhbWUgb3Bjb2RlOiAiICsgU3RyaW5nOjpudW1iZXIoZnJh
bWUub3BDb2RlKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC02MzMsMzQgKzYz
MCwzNCBAQCBib29sIFdlYlNvY2tldENoYW5uZWw6OnByb2Nlc3NGcmFtZSgpCiAgICAgfQogCiAg
ICAgLy8gQWxsIGNvbnRyb2wgZnJhbWVzIG11c3Qgbm90IGJlIGZyYWdtZW50ZWQuCi0gICAgaWYg
KGlzQ29udHJvbE9wQ29kZShmcmFtZS5vcENvZGUpICYmICFmcmFtZS5maW5hbCkgeworICAgIGlm
IChXZWJTb2NrZXRGcmFtZTo6aXNDb250cm9sT3BDb2RlKGZyYW1lLm9wQ29kZSkgJiYgIWZyYW1l
LmZpbmFsKSB7CiAgICAgICAgIGZhaWwoIlJlY2VpdmVkIGZyYWdtZW50ZWQgY29udHJvbCBmcmFt
ZTogb3Bjb2RlID0gIiArIFN0cmluZzo6bnVtYmVyKGZyYW1lLm9wQ29kZSkpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gQWxsIGNvbnRyb2wgZnJhbWVzIG11c3QgaGF2
ZSBhIHBheWxvYWQgb2YgMTI1IGJ5dGVzIG9yIGxlc3MsIHdoaWNoIG1lYW5zIHRoZSBmcmFtZSBt
dXN0IG5vdCBjb250YWluCiAgICAgLy8gdGhlICJleHRlbmRlZCBwYXlsb2FkIGxlbmd0aCIgZmll
bGQuCi0gICAgaWYgKGlzQ29udHJvbE9wQ29kZShmcmFtZS5vcENvZGUpICYmIGZyYW1lLnBheWxv
YWRMZW5ndGggPiBtYXhQYXlsb2FkTGVuZ3RoV2l0aG91dEV4dGVuZGVkTGVuZ3RoRmllbGQpIHsK
KyAgICBpZiAoV2ViU29ja2V0RnJhbWU6OmlzQ29udHJvbE9wQ29kZShmcmFtZS5vcENvZGUpICYm
IGZyYW1lLnBheWxvYWRMZW5ndGggPiBtYXhQYXlsb2FkTGVuZ3RoV2l0aG91dEV4dGVuZGVkTGVu
Z3RoRmllbGQpIHsKICAgICAgICAgZmFpbCgiUmVjZWl2ZWQgY29udHJvbCBmcmFtZSBoYXZpbmcg
dG9vIGxvbmcgcGF5bG9hZDogIiArIFN0cmluZzo6bnVtYmVyKGZyYW1lLnBheWxvYWRMZW5ndGgp
ICsgIiBieXRlcyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gQSBu
ZXcgZGF0YSBmcmFtZSBpcyByZWNlaXZlZCBiZWZvcmUgdGhlIHByZXZpb3VzIGNvbnRpbnVvdXMg
ZnJhbWUgZmluaXNoZXMuCiAgICAgLy8gTm90ZSB0aGF0IGNvbnRyb2wgZnJhbWVzIGFyZSBhbGxv
d2VkIHRvIGNvbWUgaW4gdGhlIG1pZGRsZSBvZiBjb250aW51b3VzIGZyYW1lcy4KLSAgICBpZiAo
bV9oYXNDb250aW51b3VzRnJhbWUgJiYgZnJhbWUub3BDb2RlICE9IE9wQ29kZUNvbnRpbnVhdGlv
biAmJiAhaXNDb250cm9sT3BDb2RlKGZyYW1lLm9wQ29kZSkpIHsKKyAgICBpZiAobV9oYXNDb250
aW51b3VzRnJhbWUgJiYgZnJhbWUub3BDb2RlICE9IFdlYlNvY2tldEZyYW1lOjpPcENvZGVDb250
aW51YXRpb24gJiYgIVdlYlNvY2tldEZyYW1lOjppc0NvbnRyb2xPcENvZGUoZnJhbWUub3BDb2Rl
KSkgewogICAgICAgICBmYWlsKCJSZWNlaXZlZCBuZXcgZGF0YSBmcmFtZSBidXQgcHJldmlvdXMg
Y29udGludW91cyBmcmFtZSBpcyB1bmZpbmlzaGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgc3dpdGNoIChmcmFtZS5vcENvZGUpIHsKLSAgICBjYXNlIE9wQ29kZUNv
bnRpbnVhdGlvbjoKKyAgICBjYXNlIFdlYlNvY2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb246
CiAgICAgICAgIC8vIEFuIHVuZXhwZWN0ZWQgY29udGludWF0aW9uIGZyYW1lIGlzIHJlY2VpdmVk
IHdpdGhvdXQgYW55IGxlYWRpbmcgZnJhbWUuCiAgICAgICAgIGlmICghbV9oYXNDb250aW51b3Vz
RnJhbWUpIHsKICAgICAgICAgICAgIGZhaWwoIlJlY2VpdmVkIHVuZXhwZWN0ZWQgY29udGludWF0
aW9uIGZyYW1lLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIG1fY29udGludW91c0ZyYW1lRGF0YS5hcHBlbmQoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5
bG9hZExlbmd0aCk7Ci0gICAgICAgIHNraXBCdWZmZXIoZnJhbWUuZnJhbWVFbmQgLSBtX2J1ZmZl
cik7CisgICAgICAgIHNraXBCdWZmZXIobV9jdXJyZW50RnJhbWVFbmQgLSBtX2J1ZmZlcik7CiAg
ICAgICAgIGlmIChmcmFtZS5maW5hbCkgewogICAgICAgICAgICAgLy8gb25tZXNzYWdlIGhhbmRs
ZXIgbWF5IGV2ZW50dWFsbHkgY2FsbCB0aGUgb3RoZXIgbWV0aG9kcyBvZiB0aGlzIGNoYW5uZWws
CiAgICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgcHJldGVuZCB0aGF0IHdlIGhhdmUgZmluaXNo
ZWQgdG8gcmVhZCB0aGlzIGZyYW1lIGFuZApAQCAtNjcwLDcgKzY2Nyw3IEBAIGJvb2wgV2ViU29j
a2V0Q2hhbm5lbDo6cHJvY2Vzc0ZyYW1lKCkKICAgICAgICAgICAgIE93blB0cjxWZWN0b3I8Y2hh
cj4gPiBjb250aW51b3VzRnJhbWVEYXRhID0gYWRvcHRQdHIobmV3IFZlY3RvcjxjaGFyPik7CiAg
ICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZURhdGEuc3dhcCgqY29udGludW91c0ZyYW1lRGF0
YSk7CiAgICAgICAgICAgICBtX2hhc0NvbnRpbnVvdXNGcmFtZSA9IGZhbHNlOwotICAgICAgICAg
ICAgaWYgKG1fY29udGludW91c0ZyYW1lT3BDb2RlID09IE9wQ29kZVRleHQpIHsKKyAgICAgICAg
ICAgIGlmIChtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZSA9PSBXZWJTb2NrZXRGcmFtZTo6T3BDb2Rl
VGV4dCkgewogICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlOwogICAgICAgICAgICAgICAg
IGlmIChjb250aW51b3VzRnJhbWVEYXRhLT5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4KGNvbnRpbnVvdXNGcmFtZURhdGEtPmRhdGEoKSwgY29u
dGludW91c0ZyYW1lRGF0YS0+c2l6ZSgpKTsKQEAgLTY4MCw0OCArNjc3LDQ4IEBAIGJvb2wgV2Vi
U29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0ZyYW1lKCkKICAgICAgICAgICAgICAgICAgICAgZmFpbCgi
Q291bGQgbm90IGRlY29kZSBhIHRleHQgZnJhbWUgYXMgVVRGLTguIik7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2Uo
bWVzc2FnZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fY29udGludW91c0ZyYW1lT3BDb2Rl
ID09IE9wQ29kZUJpbmFyeSkKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jb250aW51b3VzRnJh
bWVPcENvZGUgPT0gV2ViU29ja2V0RnJhbWU6Ok9wQ29kZUJpbmFyeSkKICAgICAgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJpbmFyeURhdGEoY29udGludW91c0ZyYW1lRGF0YS5yZWxl
YXNlKCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBPcENvZGVUZXh0
OgorICAgIGNhc2UgV2ViU29ja2V0RnJhbWU6Ok9wQ29kZVRleHQ6CiAgICAgICAgIGlmIChmcmFt
ZS5maW5hbCkgewogICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2U7CiAgICAgICAgICAgICBpZiAo
ZnJhbWUucGF5bG9hZExlbmd0aCkKICAgICAgICAgICAgICAgICBtZXNzYWdlID0gU3RyaW5nOjpm
cm9tVVRGOChmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBtZXNzYWdlID0gIiI7Ci0gICAgICAgICAgICBza2lwQnVm
ZmVyKGZyYW1lLmZyYW1lRW5kIC0gbV9idWZmZXIpOworICAgICAgICAgICAgc2tpcEJ1ZmZlciht
X2N1cnJlbnRGcmFtZUVuZCAtIG1fYnVmZmVyKTsKICAgICAgICAgICAgIGlmIChtZXNzYWdlLmlz
TnVsbCgpKQogICAgICAgICAgICAgICAgIGZhaWwoIkNvdWxkIG5vdCBkZWNvZGUgYSB0ZXh0IGZy
YW1lIGFzIFVURi04LiIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG1fY2xp
ZW50LT5kaWRSZWNlaXZlTWVzc2FnZShtZXNzYWdlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIG1faGFzQ29udGludW91c0ZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fY29udGlu
dW91c0ZyYW1lT3BDb2RlID0gT3BDb2RlVGV4dDsKKyAgICAgICAgICAgIG1fY29udGludW91c0Zy
YW1lT3BDb2RlID0gV2ViU29ja2V0RnJhbWU6Ok9wQ29kZVRleHQ7CiAgICAgICAgICAgICBBU1NF
UlQobV9jb250aW51b3VzRnJhbWVEYXRhLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICBtX2NvbnRp
bnVvdXNGcmFtZURhdGEuYXBwZW5kKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgp
OwotICAgICAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAg
ICAgICAgICAgIHNraXBCdWZmZXIobV9jdXJyZW50RnJhbWVFbmQgLSBtX2J1ZmZlcik7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIE9wQ29kZUJpbmFyeToKKyAgICBjYXNl
IFdlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnk6CiAgICAgICAgIGlmIChmcmFtZS5maW5hbCkg
ewogICAgICAgICAgICAgT3duUHRyPFZlY3RvcjxjaGFyPiA+IGJpbmFyeURhdGEgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPGNoYXI+KGZyYW1lLnBheWxvYWRMZW5ndGgpKTsKICAgICAgICAgICAgIG1l
bWNweShiaW5hcnlEYXRhLT5kYXRhKCksIGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpOwotICAgICAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsK
KyAgICAgICAgICAgIHNraXBCdWZmZXIobV9jdXJyZW50RnJhbWVFbmQgLSBtX2J1ZmZlcik7CiAg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJpbmFyeURhdGEoYmluYXJ5RGF0YS5yZWxl
YXNlKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9oYXNDb250aW51b3VzRnJh
bWUgPSB0cnVlOwotICAgICAgICAgICAgbV9jb250aW51b3VzRnJhbWVPcENvZGUgPSBPcENvZGVC
aW5hcnk7CisgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZSA9IFdlYlNvY2tldEZy
YW1lOjpPcENvZGVCaW5hcnk7CiAgICAgICAgICAgICBBU1NFUlQobV9jb250aW51b3VzRnJhbWVE
YXRhLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZURhdGEuYXBwZW5k
KGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpOwotICAgICAgICAgICAgc2tpcEJ1
ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAgICAgICAgICAgIHNraXBCdWZmZXIo
bV9jdXJyZW50RnJhbWVFbmQgLSBtX2J1ZmZlcik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAKLSAgICBjYXNlIE9wQ29kZUNsb3NlOgorICAgIGNhc2UgV2ViU29ja2V0RnJhbWU6Ok9wQ29k
ZUNsb3NlOgogICAgICAgICBpZiAoZnJhbWUucGF5bG9hZExlbmd0aCA+PSAyKSB7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIGhpZ2hCeXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
ZnJhbWUucGF5bG9hZFswXSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxvd0J5dGUgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihmcmFtZS5wYXlsb2FkWzFdKTsKQEAgLTczMiw3ICs3
MjksNyBAQCBib29sIFdlYlNvY2tldENoYW5uZWw6OnByb2Nlc3NGcmFtZSgpCiAgICAgICAgICAg
ICBtX2Nsb3NlRXZlbnRSZWFzb24gPSBTdHJpbmc6OmZyb21VVEY4KCZmcmFtZS5wYXlsb2FkWzJd
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoIC0gMik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1f
Y2xvc2VFdmVudFJlYXNvbiA9ICIiOwotICAgICAgICBza2lwQnVmZmVyKGZyYW1lLmZyYW1lRW5k
IC0gbV9idWZmZXIpOworICAgICAgICBza2lwQnVmZmVyKG1fY3VycmVudEZyYW1lRW5kIC0gbV9i
dWZmZXIpOwogICAgICAgICBtX3JlY2VpdmVkQ2xvc2luZ0hhbmRzaGFrZSA9IHRydWU7CiAgICAg
ICAgIHN0YXJ0Q2xvc2luZ0hhbmRzaGFrZShtX2Nsb3NlRXZlbnRDb2RlLCBtX2Nsb3NlRXZlbnRS
ZWFzb24pOwogICAgICAgICBpZiAobV9jbG9zaW5nKSB7CkBAIC03NDEsMjAgKzczOCwyMCBAQCBi
b29sIFdlYlNvY2tldENoYW5uZWw6OnByb2Nlc3NGcmFtZSgpCiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAKLSAgICBjYXNlIE9wQ29kZVBpbmc6Ci0gICAgICAgIGVucXVldWVSYXdGcmFtZShP
cENvZGVQb25nLCBmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKLSAgICAgICAg
c2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAgICBjYXNlIFdlYlNvY2tl
dEZyYW1lOjpPcENvZGVQaW5nOgorICAgICAgICBlbnF1ZXVlUmF3RnJhbWUoV2ViU29ja2V0RnJh
bWU6Ok9wQ29kZVBvbmcsIGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpOworICAg
ICAgICBza2lwQnVmZmVyKG1fY3VycmVudEZyYW1lRW5kIC0gbV9idWZmZXIpOwogICAgICAgICBi
cmVhazsKIAotICAgIGNhc2UgT3BDb2RlUG9uZzoKKyAgICBjYXNlIFdlYlNvY2tldEZyYW1lOjpP
cENvZGVQb25nOgogICAgICAgICAvLyBBIHNlcnZlciBtYXkgc2VuZCBhIHBvbmcgaW4gcmVzcG9u
c2UgdG8gb3VyIHBpbmcsIG9yIGFuIHVuc29saWNpdGVkIHBvbmcgd2hpY2ggaXMgbm90IGFzc29j
aWF0ZWQgd2l0aAogICAgICAgICAvLyBhbnkgc3BlY2lmaWMgcGluZy4gRWl0aGVyIHdheSwgdGhl
cmUncyBub3RoaW5nIHRvIGRvIG9uIHJlY2VpcHQgb2YgcG9uZy4KLSAgICAgICAgc2tpcEJ1ZmZl
cihmcmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAgICAgICAgc2tpcEJ1ZmZlcihtX2N1cnJl
bnRGcmFtZUVuZCAtIG1fYnVmZmVyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0Ogog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5m
cmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAgICAgICAgc2tpcEJ1ZmZlcihtX2N1cnJlbnRGcmFtZUVu
ZCAtIG1fYnVmZmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC04NTUsMTQgKzg1Miwx
NCBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmVucXVldWVUZXh0RnJhbWUoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiAgICAgQVNTRVJUKCFtX3VzZUhpeGllNzZQcm90b2NvbCk7CiAgICAgQVNTRVJU
KG1fb3V0Z29pbmdGcmFtZVF1ZXVlU3RhdHVzID09IE91dGdvaW5nRnJhbWVRdWV1ZU9wZW4pOwog
ICAgIE93blB0cjxRdWV1ZWRGcmFtZT4gZnJhbWUgPSBhZG9wdFB0cihuZXcgUXVldWVkRnJhbWUp
OwotICAgIGZyYW1lLT5vcENvZGUgPSBPcENvZGVUZXh0OworICAgIGZyYW1lLT5vcENvZGUgPSBX
ZWJTb2NrZXRGcmFtZTo6T3BDb2RlVGV4dDsKICAgICBmcmFtZS0+ZnJhbWVUeXBlID0gUXVldWVk
RnJhbWVUeXBlU3RyaW5nOwogICAgIGZyYW1lLT5zdHJpbmdEYXRhID0gc3RyaW5nOwogICAgIG1f
b3V0Z29pbmdGcmFtZVF1ZXVlLmFwcGVuZChmcmFtZS5yZWxlYXNlKCkpOwogICAgIHByb2Nlc3NP
dXRnb2luZ0ZyYW1lUXVldWUoKTsKIH0KIAotdm9pZCBXZWJTb2NrZXRDaGFubmVsOjplbnF1ZXVl
UmF3RnJhbWUoT3BDb2RlIG9wQ29kZSwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5n
dGgpCit2b2lkIFdlYlNvY2tldENoYW5uZWw6OmVucXVldWVSYXdGcmFtZShXZWJTb2NrZXRGcmFt
ZTo6T3BDb2RlIG9wQ29kZSwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpCiB7
CiAgICAgQVNTRVJUKCFtX3VzZUhpeGllNzZQcm90b2NvbCk7CiAgICAgQVNTRVJUKG1fb3V0Z29p
bmdGcmFtZVF1ZXVlU3RhdHVzID09IE91dGdvaW5nRnJhbWVRdWV1ZU9wZW4pOwpAQCAtODc2LDcg
Kzg3Myw3IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZW5xdWV1ZVJhd0ZyYW1lKE9wQ29kZSBv
cENvZGUsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkCiAgICAgcHJvY2Vzc091dGdvaW5nRnJh
bWVRdWV1ZSgpOwogfQogCi12b2lkIFdlYlNvY2tldENoYW5uZWw6OmVucXVldWVCbG9iRnJhbWUo
T3BDb2RlIG9wQ29kZSwgY29uc3QgQmxvYiYgYmxvYikKK3ZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6
ZW5xdWV1ZUJsb2JGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlIG9wQ29kZSwgY29uc3QgQmxv
YiYgYmxvYikKIHsKICAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlByb3RvY29sKTsKICAgICBBU1NF
UlQobV9vdXRnb2luZ0ZyYW1lUXVldWVTdGF0dXMgPT0gT3V0Z29pbmdGcmFtZVF1ZXVlT3Blbik7
CkBAIC05NjcsNDQgKzk2NCw1MyBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmFib3J0T3V0Z29p
bmdGcmFtZVF1ZXVlKCkKICNlbmRpZgogfQogCi1ib29sIFdlYlNvY2tldENoYW5uZWw6OnNlbmRG
cmFtZShPcENvZGUgb3BDb2RlLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkK
K2Jvb2wgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGUg
b3BDb2RlLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKIHsKICAgICBBU1NF
UlQobV9oYW5kbGUpOwogICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOwogCi0gICAgVmVjdG9yPGNo
YXI+IGZyYW1lOwogICAgIEFTU0VSVCghKG9wQ29kZSAmIH5vcENvZGVNYXNrKSk7IC8vIENoZWNr
cyB3aGV0aGVyICJvcENvZGUiIGZpdHMgaW4gdGhlIHJhbmdlIG9mIG9wQ29kZXMuCi0gICAgZnJh
bWUuYXBwZW5kKGZpbmFsQml0IHwgb3BDb2RlKTsKLSAgICBpZiAoZGF0YUxlbmd0aCA8PSBtYXhQ
YXlsb2FkTGVuZ3RoV2l0aG91dEV4dGVuZGVkTGVuZ3RoRmllbGQpCi0gICAgICAgIGZyYW1lLmFw
cGVuZChtYXNrQml0IHwgZGF0YUxlbmd0aCk7Ci0gICAgZWxzZSBpZiAoZGF0YUxlbmd0aCA8PSAw
eEZGRkYpIHsKLSAgICAgICAgZnJhbWUuYXBwZW5kKG1hc2tCaXQgfCBwYXlsb2FkTGVuZ3RoV2l0
aFR3b0J5dGVFeHRlbmRlZExlbmd0aEZpZWxkKTsKLSAgICAgICAgZnJhbWUuYXBwZW5kKChkYXRh
TGVuZ3RoICYgMHhGRjAwKSA+PiA4KTsKLSAgICAgICAgZnJhbWUuYXBwZW5kKGRhdGFMZW5ndGgg
JiAweEZGKTsKKyAgICBXZWJTb2NrZXRGcmFtZSBmcmFtZTsKKyAgICBmcmFtZS5vcENvZGUgPSBv
cENvZGU7CisgICAgZnJhbWUuZmluYWwgPSB0cnVlOworICAgIGZyYW1lLm1hc2tlZCA9IHRydWU7
CisgICAgZnJhbWUucGF5bG9hZCA9IGRhdGE7CisgICAgZnJhbWUucGF5bG9hZExlbmd0aCA9IGRh
dGFMZW5ndGg7CisKKyAgICAvLyBGSVhNRTogT3B0aW9uYWwgY29tcHJlc3Npb24gY291bGQgaGFw
cGVuIGhlcmUuCisKKyAgICAvLyBNYXNrIHRoZSBmcmFtZS4KKyAgICBWZWN0b3I8Y2hhcj4gZnJh
bWVEYXRhOworICAgIGZyYW1lRGF0YS5hcHBlbmQoKGZyYW1lLmZpbmFsID8gZmluYWxCaXQgOiAw
KSB8IGZyYW1lLm9wQ29kZSk7CisgICAgaWYgKGZyYW1lLnBheWxvYWRMZW5ndGggPD0gbWF4UGF5
bG9hZExlbmd0aFdpdGhvdXRFeHRlbmRlZExlbmd0aEZpZWxkKQorICAgICAgICBmcmFtZURhdGEu
YXBwZW5kKG1hc2tCaXQgfCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKKyAgICBlbHNlIGlmIChmcmFt
ZS5wYXlsb2FkTGVuZ3RoIDw9IDB4RkZGRikgeworICAgICAgICBmcmFtZURhdGEuYXBwZW5kKG1h
c2tCaXQgfCBwYXlsb2FkTGVuZ3RoV2l0aFR3b0J5dGVFeHRlbmRlZExlbmd0aEZpZWxkKTsKKyAg
ICAgICAgZnJhbWVEYXRhLmFwcGVuZCgoZnJhbWUucGF5bG9hZExlbmd0aCAmIDB4RkYwMCkgPj4g
OCk7CisgICAgICAgIGZyYW1lRGF0YS5hcHBlbmQoZnJhbWUucGF5bG9hZExlbmd0aCAmIDB4RkYp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZyYW1lLmFwcGVuZChtYXNrQml0IHwgcGF5bG9hZExl
bmd0aFdpdGhFaWdodEJ5dGVFeHRlbmRlZExlbmd0aEZpZWxkKTsKKyAgICAgICAgZnJhbWVEYXRh
LmFwcGVuZChtYXNrQml0IHwgcGF5bG9hZExlbmd0aFdpdGhFaWdodEJ5dGVFeHRlbmRlZExlbmd0
aEZpZWxkKTsKICAgICAgICAgY2hhciBleHRlbmRlZFBheWxvYWRMZW5ndGhbOF07Ci0gICAgICAg
IHNpemVfdCByZW1haW5pbmcgPSBkYXRhTGVuZ3RoOworICAgICAgICBzaXplX3QgcmVtYWluaW5n
ID0gZnJhbWUucGF5bG9hZExlbmd0aDsKICAgICAgICAgLy8gRmlsbCB0aGUgbGVuZ3RoIGludG8g
ZXh0ZW5kZWRQYXlsb2FkTGVuZ3RoIGluIHRoZSBuZXR3b3JrIGJ5dGUgb3JkZXIuCiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgODsgKytpKSB7CiAgICAgICAgICAgICBleHRlbmRlZFBheWxv
YWRMZW5ndGhbNyAtIGldID0gcmVtYWluaW5nICYgMHhGRjsKICAgICAgICAgICAgIHJlbWFpbmlu
ZyA+Pj0gODsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoIXJlbWFpbmluZyk7Ci0gICAgICAg
IGZyYW1lLmFwcGVuZChleHRlbmRlZFBheWxvYWRMZW5ndGgsIDgpOworICAgICAgICBmcmFtZURh
dGEuYXBwZW5kKGV4dGVuZGVkUGF5bG9hZExlbmd0aCwgOCk7CiAgICAgfQogCi0gICAgLy8gTWFz
ayB0aGUgZnJhbWUuCi0gICAgc2l6ZV90IG1hc2tpbmdLZXlTdGFydCA9IGZyYW1lLnNpemUoKTsK
LSAgICBmcmFtZS5ncm93KGZyYW1lLnNpemUoKSArIG1hc2tpbmdLZXlXaWR0aEluQnl0ZXMpOyAv
LyBBZGQgcGxhY2Vob2xkZXIgZm9yIG1hc2tpbmcga2V5LiBXaWxsIGJlIG92ZXJ3cml0dGVuLgot
ICAgIHNpemVfdCBwYXlsb2FkU3RhcnQgPSBmcmFtZS5zaXplKCk7Ci0gICAgZnJhbWUuYXBwZW5k
KGRhdGEsIGRhdGFMZW5ndGgpOworICAgIHNpemVfdCBtYXNraW5nS2V5U3RhcnQgPSBmcmFtZURh
dGEuc2l6ZSgpOworICAgIGZyYW1lRGF0YS5ncm93KGZyYW1lRGF0YS5zaXplKCkgKyBtYXNraW5n
S2V5V2lkdGhJbkJ5dGVzKTsgLy8gQWRkIHBsYWNlaG9sZGVyIGZvciBtYXNraW5nIGtleS4gV2ls
bCBiZSBvdmVyd3JpdHRlbi4KKyAgICBzaXplX3QgcGF5bG9hZFN0YXJ0ID0gZnJhbWVEYXRhLnNp
emUoKTsKKyAgICBmcmFtZURhdGEuYXBwZW5kKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRM
ZW5ndGgpOwogCi0gICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoZnJhbWUuZGF0YSgp
ICsgbWFza2luZ0tleVN0YXJ0LCBtYXNraW5nS2V5V2lkdGhJbkJ5dGVzKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkKLSAgICAgICAgZnJhbWVbcGF5bG9hZFN0
YXJ0ICsgaV0gXj0gZnJhbWVbbWFza2luZ0tleVN0YXJ0ICsgaSAlIG1hc2tpbmdLZXlXaWR0aElu
Qnl0ZXNdOworICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKGZyYW1lRGF0YS5kYXRh
KCkgKyBtYXNraW5nS2V5U3RhcnQsIG1hc2tpbmdLZXlXaWR0aEluQnl0ZXMpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZnJhbWUucGF5bG9hZExlbmd0aDsgKytpKQorICAgICAgICBmcmFt
ZURhdGFbcGF5bG9hZFN0YXJ0ICsgaV0gXj0gZnJhbWVEYXRhW21hc2tpbmdLZXlTdGFydCArIGkg
JSBtYXNraW5nS2V5V2lkdGhJbkJ5dGVzXTsKIAotICAgIHJldHVybiBtX2hhbmRsZS0+c2VuZChm
cmFtZS5kYXRhKCksIGZyYW1lLnNpemUoKSk7CisgICAgcmV0dXJuIG1faGFuZGxlLT5zZW5kKGZy
YW1lRGF0YS5kYXRhKCksIGZyYW1lRGF0YS5zaXplKCkpOwogfQogCiBib29sIFdlYlNvY2tldENo
YW5uZWw6OnNlbmRGcmFtZUhpeGllNzYoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5n
dGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5u
ZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4
IDczZmM1MmRhNGUzZDYwY2MxZjE1ZjBiMWI0MDFiODM4MTM4OGZlZGMuLjcyODM1OTc3ZDI5MWM0
OWNlMTNmZjIxODUyYWNhNTIwZTNlM2QzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMvV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiU29ja2V0
U3RyZWFtSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWwuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldlYlNvY2tldEZyYW1lLmgiCiAj
aW5jbHVkZSAiV2ViU29ja2V0SGFuZHNoYWtlLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTEyOCwzOCArMTI5LDEzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzdGFydENsb3NpbmdIYW5kc2hha2UoaW50IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVh
c29uKTsKICAgICB2b2lkIGNsb3NpbmdUaW1lckZpcmVkKFRpbWVyPFdlYlNvY2tldENoYW5uZWw+
Kik7CiAKLSAgICAvLyBIeWJpLTEwIG9wY29kZXMuCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQg
T3BDb2RlOwotICAgIHN0YXRpYyBjb25zdCBPcENvZGUgT3BDb2RlQ29udGludWF0aW9uOwotICAg
IHN0YXRpYyBjb25zdCBPcENvZGUgT3BDb2RlVGV4dDsKLSAgICBzdGF0aWMgY29uc3QgT3BDb2Rl
IE9wQ29kZUJpbmFyeTsKLSAgICBzdGF0aWMgY29uc3QgT3BDb2RlIE9wQ29kZUNsb3NlOwotICAg
IHN0YXRpYyBjb25zdCBPcENvZGUgT3BDb2RlUGluZzsKLSAgICBzdGF0aWMgY29uc3QgT3BDb2Rl
IE9wQ29kZVBvbmc7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc05vbkNvbnRyb2xPcENvZGUoT3BDb2Rl
IG9wQ29kZSkgeyByZXR1cm4gb3BDb2RlID09IE9wQ29kZUNvbnRpbnVhdGlvbiB8fCBvcENvZGUg
PT0gT3BDb2RlVGV4dCB8fCBvcENvZGUgPT0gT3BDb2RlQmluYXJ5OyB9Ci0gICAgc3RhdGljIGJv
b2wgaXNDb250cm9sT3BDb2RlKE9wQ29kZSBvcENvZGUpIHsgcmV0dXJuIG9wQ29kZSA9PSBPcENv
ZGVDbG9zZSB8fCBvcENvZGUgPT0gT3BDb2RlUGluZyB8fCBvcENvZGUgPT0gT3BDb2RlUG9uZzsg
fQotICAgIHN0YXRpYyBib29sIGlzUmVzZXJ2ZWRPcENvZGUoT3BDb2RlIG9wQ29kZSkgeyByZXR1
cm4gIWlzTm9uQ29udHJvbE9wQ29kZShvcENvZGUpICYmICFpc0NvbnRyb2xPcENvZGUob3BDb2Rl
KTsgfQotCiAgICAgZW51bSBQYXJzZUZyYW1lUmVzdWx0IHsKICAgICAgICAgRnJhbWVPSywKICAg
ICAgICAgRnJhbWVJbmNvbXBsZXRlLAogICAgICAgICBGcmFtZUVycm9yCiAgICAgfTsKIAotICAg
IHN0cnVjdCBGcmFtZURhdGEgewotICAgICAgICBPcENvZGUgb3BDb2RlOwotICAgICAgICBib29s
IGZpbmFsOwotICAgICAgICBib29sIHJlc2VydmVkMTsKLSAgICAgICAgYm9vbCByZXNlcnZlZDI7
Ci0gICAgICAgIGJvb2wgcmVzZXJ2ZWQzOwotICAgICAgICBib29sIG1hc2tlZDsKLSAgICAgICAg
Y29uc3QgY2hhciogcGF5bG9hZDsKLSAgICAgICAgc2l6ZV90IHBheWxvYWRMZW5ndGg7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIGZyYW1lRW5kOwotICAgIH07Ci0KLSAgICBQYXJzZUZyYW1lUmVzdWx0
IHBhcnNlRnJhbWUoRnJhbWVEYXRhJik7IC8vIE1heSBtb2RpZnkgcGFydCBvZiBtX2J1ZmZlciB0
byB1bm1hc2sgdGhlIGZyYW1lLgorICAgIFBhcnNlRnJhbWVSZXN1bHQgcGFyc2VGcmFtZShXZWJT
b2NrZXRGcmFtZSYpOyAvLyBNYXkgbW9kaWZ5IHBhcnQgb2YgbV9idWZmZXIgdG8gdW5tYXNrIHRo
ZSBmcmFtZS4KIAogICAgIGJvb2wgcHJvY2Vzc0ZyYW1lKCk7CiAgICAgYm9vbCBwcm9jZXNzRnJh
bWVIaXhpZTc2KCk7CkBAIC0xODAsNyArMTU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgUXVldWVk
RnJhbWVUeXBlQmxvYgogICAgIH07CiAgICAgc3RydWN0IFF1ZXVlZEZyYW1lIHsKLSAgICAgICAg
T3BDb2RlIG9wQ29kZTsKKyAgICAgICAgV2ViU29ja2V0RnJhbWU6Ok9wQ29kZSBvcENvZGU7CiAg
ICAgICAgIFF1ZXVlZEZyYW1lVHlwZSBmcmFtZVR5cGU7CiAgICAgICAgIC8vIE9ubHkgb25lIG9m
IHRoZSBmb2xsb3dpbmcgaXRlbXMgaXMgdXNlZCwgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiBm
cmFtZVR5cGUuCiAgICAgICAgIFN0cmluZyBzdHJpbmdEYXRhOwpAQCAtMTg4LDggKzE2NCw4IEBA
IHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxCbG9iPiBibG9iRGF0YTsKICAgICB9OwogICAgIHZv
aWQgZW5xdWV1ZVRleHRGcmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGVucXVldWVSYXdG
cmFtZShPcENvZGUsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKTsKLSAgICB2
b2lkIGVucXVldWVCbG9iRnJhbWUoT3BDb2RlLCBjb25zdCBCbG9iJik7CisgICAgdm9pZCBlbnF1
ZXVlUmF3RnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZSwgY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IGRhdGFMZW5ndGgpOworICAgIHZvaWQgZW5xdWV1ZUJsb2JGcmFtZShXZWJTb2NrZXRGcmFt
ZTo6T3BDb2RlLCBjb25zdCBCbG9iJik7CiAKICAgICB2b2lkIHByb2Nlc3NPdXRnb2luZ0ZyYW1l
UXVldWUoKTsKICAgICB2b2lkIGFib3J0T3V0Z29pbmdGcmFtZVF1ZXVlKCk7CkBAIC0yMDgsNyAr
MTg0LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIElmIHlvdSBhcmUgZ29pbmcgdG8gc2VuZCBhIGh5
YmktMTAgZnJhbWUsIHlvdSBuZWVkIHRvIHVzZSB0aGUgb3V0Z29pbmcgZnJhbWUgcXVldWUKICAg
ICAvLyBpbnN0ZWFkIG9mIGNhbGwgc2VuZEZyYW1lKCkgZGlyZWN0bHkuCi0gICAgYm9vbCBzZW5k
RnJhbWUoT3BDb2RlLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCk7CisgICAg
Ym9vbCBzZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZSwgY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGRhdGFMZW5ndGgpOwogICAgIGJvb2wgc2VuZEZyYW1lSGl4aWU3Nihjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCk7CiAKICNpZiBFTkFCTEUoQkxPQikKQEAgLTIyNiw2
ICsyMDIsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IG1faGFu
ZGxlOwogICAgIGNoYXIqIG1fYnVmZmVyOwogICAgIHNpemVfdCBtX2J1ZmZlclNpemU7CisgICAg
Y29uc3QgY2hhciogbV9jdXJyZW50RnJhbWVFbmQ7CiAKICAgICBUaW1lcjxXZWJTb2NrZXRDaGFu
bmVsPiBtX3Jlc3VtZVRpbWVyOwogICAgIGJvb2wgbV9zdXNwZW5kZWQ7CkBAIC0yNDIsNyArMjE5
LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFByaXZhdGUgbWVtYmVycyBvbmx5IGZvciBoeWJpLTEw
IHByb3RvY29sLgogICAgIGJvb2wgbV9oYXNDb250aW51b3VzRnJhbWU7Ci0gICAgT3BDb2RlIG1f
Y29udGludW91c0ZyYW1lT3BDb2RlOworICAgIFdlYlNvY2tldEZyYW1lOjpPcENvZGUgbV9jb250
aW51b3VzRnJhbWVPcENvZGU7CiAgICAgVmVjdG9yPGNoYXI+IG1fY29udGludW91c0ZyYW1lRGF0
YTsKICAgICB1bnNpZ25lZCBzaG9ydCBtX2Nsb3NlRXZlbnRDb2RlOwogICAgIFN0cmluZyBtX2Ns
b3NlRXZlbnRSZWFzb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldEZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEZyYW1l
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTc1YzQwMjhlM2ExYmEzNDIxNDQ4ZDkxYjE1YzZlOGYwMWI2ODkxNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0RnJh
bWUuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU29ja2V0RnJhbWVfaAorI2RlZmluZSBX
ZWJTb2NrZXRGcmFtZV9oCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RydWN0IFdlYlNvY2tldEZyYW1lIHsKKyAgICAvLyBSRkM2NDU1IG9wY29k
ZXMuCisgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgT3BDb2RlOworICAgIHN0YXRpYyBjb25zdCBP
cENvZGUgT3BDb2RlQ29udGludWF0aW9uID0gMHgwOworICAgIHN0YXRpYyBjb25zdCBPcENvZGUg
T3BDb2RlVGV4dCA9IDB4MTsKKyAgICBzdGF0aWMgY29uc3QgT3BDb2RlIE9wQ29kZUJpbmFyeSA9
IDB4MjsKKyAgICBzdGF0aWMgY29uc3QgT3BDb2RlIE9wQ29kZUNsb3NlID0gMHg4OworICAgIHN0
YXRpYyBjb25zdCBPcENvZGUgT3BDb2RlUGluZyA9IDB4OTsKKyAgICBzdGF0aWMgY29uc3QgT3BD
b2RlIE9wQ29kZVBvbmcgPSAweEE7CisKKyAgICBzdGF0aWMgYm9vbCBpc05vbkNvbnRyb2xPcENv
ZGUoT3BDb2RlIG9wQ29kZSkgeyByZXR1cm4gb3BDb2RlID09IE9wQ29kZUNvbnRpbnVhdGlvbiB8
fCBvcENvZGUgPT0gT3BDb2RlVGV4dCB8fCBvcENvZGUgPT0gT3BDb2RlQmluYXJ5OyB9CisgICAg
c3RhdGljIGJvb2wgaXNDb250cm9sT3BDb2RlKE9wQ29kZSBvcENvZGUpIHsgcmV0dXJuIG9wQ29k
ZSA9PSBPcENvZGVDbG9zZSB8fCBvcENvZGUgPT0gT3BDb2RlUGluZyB8fCBvcENvZGUgPT0gT3BD
b2RlUG9uZzsgfQorICAgIHN0YXRpYyBib29sIGlzUmVzZXJ2ZWRPcENvZGUoT3BDb2RlIG9wQ29k
ZSkgeyByZXR1cm4gIWlzTm9uQ29udHJvbE9wQ29kZShvcENvZGUpICYmICFpc0NvbnRyb2xPcENv
ZGUob3BDb2RlKTsgfQorCisgICAgT3BDb2RlIG9wQ29kZTsKKyAgICBib29sIGZpbmFsOworICAg
IGJvb2wgcmVzZXJ2ZWQxOworICAgIGJvb2wgcmVzZXJ2ZWQyOworICAgIGJvb2wgcmVzZXJ2ZWQz
OworICAgIGJvb2wgbWFza2VkOworICAgIGNvbnN0IGNoYXIqIHBheWxvYWQ7CisgICAgc2l6ZV90
IHBheWxvYWRMZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNlbmRpZiAvLyBXZWJTb2NrZXRGcmFtZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127749</attachid>
            <date>2012-02-19 18:30:43 -0800</date>
            <delta_ts>2012-02-20 03:46:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78682-20120220113042.patch</filename>
            <type>text/plain</type>
            <size>31229</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ5OGEwYWRlYTVkMDA1
N2YzNGU1OGIyYWRmNDUyNDQ4ZmIyZTFkNi4uNjUwMGMzYzc5Yjg1YjJkOGI3YmU2ZTc0MTdkMTMz
ZTdmYWQ5Y2E5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAyLTE5ICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbV2ViU29ja2V0
XSBNb3ZlIFdlYlNvY2tldENoYW5uZWw6OkZyYW1lRGF0YSBpbnRvIGEgc2VwYXJhdGUgaGVhZGVy
IGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4
NjgyCisKKyAgICAgICAgRXh0cmFjdCBXZWJTb2NrZXRDaGFubmVsOjpGcmFtZURhdGEgYXMgV2Vi
U29ja2V0RnJhbWUuIFRoaXMgYnJpbmdzCisgICAgICAgIGZsZXhpYmlsaXR5IHRvIGFkZCBjbGFz
c2VzIHdoaWNoIHdhbnQgdG8gZG8gc29tZXRoaW5nIGZvcgorICAgICAgICBpbmNvbWluZy9vdXRn
b2luZyBmcmFtZXMgKGUuZy4gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbikuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBi
ZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZCBX
ZWJTb2NrZXRGcmFtZS4KKyAgICAgICAgKiBUYXJnZXQucHJpOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
IERpdHRvLgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHA6IE1vZGlm
aWVkIHRvIHVzZSBXZWJTb2NrZXRGcmFtZSBpbnN0ZWFkIG9mIEZyYW1lRGF0YS4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpzdGFydENsb3NpbmdIYW5kc2hha2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cGFyc2VGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzRnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6ZW5xdWV1ZVRleHRGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjplbnF1ZXVlUmF3RnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6ZW5xdWV1ZUJsb2JGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXRDaGFubmVsOjpzZW5kRnJhbWUpOgorICAgICAgICAqIHdlYnNvY2tldHMv
V2ViU29ja2V0Q2hhbm5lbC5oOiBSZW1vdmVkIEZyYW1lRGF0YS4KKyAgICAgICAgKFdlYlNvY2tl
dENoYW5uZWwpOgorICAgICAgICAoUXVldWVkRnJhbWUpOgorICAgICAgICAqIHdlYnNvY2tldHMv
V2ViU29ja2V0RnJhbWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YlNvY2tldEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc05vbkNv
bnRyb2xPcENvZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6OmlzQ29udHJv
bE9wQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6aXNSZXNlcnZlZE9w
Q29kZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6V2ViU29ja2V0RnJhbWUp
OgorCiAyMDEyLTAyLTE5ICBBbmRyZWFzIEtsaW5nICA8YXdlc29tZWtsaW5nQGFwcGxlLmNvbT4K
IAogICAgICAgICBNYWtlIENTU1ZhbHVlIHdyYXBwZXIgZ2V0dGVycyByZXR1cm4gdW5pcXVlIG9i
amVjdHMgZXZlcnkgdGltZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDE2YzZl
ZDFmODBhNDVjMTc3Njg2ODkyMTYwNzQ0ODFkYjA5NDg5MTQuLmZiNTMwOGEwMDM1MGM1MmRlMjFj
MjE2NjdhNDNlYTRmMDAwMDkwOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
NDMzNCw2ICs0MzM0LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuaCBcCiAJU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25Qcm9jZXNzb3IuaCBcCisJU291
cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRGcmFtZS5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmggXAogCVNvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMvV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNTk4YWYx
NmMwZjRlOTNjYzljZjJlOTBmMjgyYWE0ZTg4ZGFkOTE4Yi4uZTdlMDk5YTY1NDI4MjEzMTdmM2Zj
ODIyYzk2ZGZkYjk4NzgzODMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zNjY2LDYgKzM2NjYsNyBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCX1NPQ0tFVFM9MSkgewogICAgICAgICB3ZWJzb2Nr
ZXRzL1dlYlNvY2tldENoYW5uZWxDbGllbnQuaCBcCiAgICAgICAgIHdlYnNvY2tldHMvV2ViU29j
a2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5oIFwKICAgICAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRF
eHRlbnNpb25Qcm9jZXNzb3IuaCBcCisgICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0RnJhbWUu
aCBcCiAgICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmggXAogICAgICAgICB3
ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QuaCBcCiAgICAgICAgIHdlYnNvY2tl
dHMvV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNmQx
ZDI4OGRlYmI4ZmIyODQ2ODc3NmNlMTM2MTliY2NlNTg5MDczNC4uZGQzYzI3MjM5MDg5MGZiMjNh
OGY5MzE1MzE5ZmUzYzhkN2RkMzA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDgxNCw2ICs0ODE0
LDcgQEAKICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNo
ZXIuY3BwJywKICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3Bh
dGNoZXIuaCcsCiAgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25Qcm9j
ZXNzb3IuaCcsCisgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRGcmFtZS5oJywKICAg
ICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAnLAogICAgICAgICAg
ICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmgnLAogICAgICAgICAgICAgJ3dlYnNv
Y2tldHMvV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA5MDlhMmYzYmI1MzZlMzA0MTdhN2M3
ODgwNWJlNjI2YmFhMTA3NDdmLi41MjEyNGY0M2QyMGY2Yzk2ZTNkOTRmNjRmZjcxMGU2NmFhMDQx
OTliIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpA
QCAtNzM0MzgsNiArNzM0MzgsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cd2Vic29ja2V0c1xXZWJTb2NrZXRGcmFtZS5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFdlYlNv
Y2tldEhhbmRzaGFrZS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDkxY2Q0MzI2ZmUxODg1
ZjY2YmU4Njc3OTc1YTlmNDc3MTM1MmEwNmIuLjJjN2FkNDgwNDFiMDljZjFkZDA4NmEwZjJlNzdj
YTMzZjEzYWM3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEzNjUsNiArMTM2NSw3IEBACiAJCTRBMUU3MTk2MTRFMTAxRjkw
MDYyNkY5RCAvKiBKU0hUTUxTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTFFNzE5NDE0RTEwMUY5MDA2MjZGOUQgLyogSlNIVE1M
U2hhZG93RWxlbWVudC5oICovOyB9OwogCQk0QTFFNzFBNTE0RTEwNkFDMDA2MjZGOUQgLyogSlNT
aGFkb3dSb290LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRBMUU3MUEzMTRFMTA2QUMwMDYyNkY5RCAvKiBKU1NoYWRvd1Jvb3QuY3BwICovOyB9Owog
CQk0QTFFNzFBNjE0RTEwNkFDMDA2MjZGOUQgLyogSlNTaGFkb3dSb290LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTFFNzFBNDE0RTEwNkFDMDA2MjZG
OUQgLyogSlNTaGFkb3dSb290LmggKi87IH07CisJCTRBNEEyMzQ2MTRGMUUxNDQwMDQ2RkJGMSAv
KiBXZWJTb2NrZXRGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEE0QTIzNDUxNEYxRTE0NDAwNDZGQkYxIC8qIFdlYlNvY2tldEZyYW1lLmggKi87
IH07CiAJCTRBNkU5RkMzMTNDMTdEMUQwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVZhbHVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNkU5RkMxMTND
MTdEMUQwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVZhbHVlLmNwcCAqLzsgfTsKIAkJNEE2RTlGQzQx
M0MxN0QxRDAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNkU5RkMyMTNDMTdEMUQwMDQ2QTdGOCAvKiBG
b250RmVhdHVyZVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNEE2RTlGQzcxM0MxN0Q1NzAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlU2V0dGlu
Z3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE2
RTlGQzUxM0MxN0Q1NzAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwICovOyB9OwpA
QCAtODIyMyw2ICs4MjI0LDcgQEAKIAkJNEExRTcxOTQxNEUxMDFGOTAwNjI2RjlEIC8qIEpTSFRN
TFNoYWRvd0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1M
U2hhZG93RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTFFNzFBMzE0
RTEwNkFDMDA2MjZGOUQgLyogSlNTaGFkb3dSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTU2hhZG93Um9vdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTRBMUU3MUE0MTRFMTA2QUMwMDYyNkY5RCAvKiBKU1NoYWRvd1Jvb3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTaGFkb3dSb290Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTRBNEEyMzQ1MTRGMUUxNDQwMDQ2RkJGMSAvKiBXZWJTb2NrZXRGcmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTb2NrZXRGcmFtZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTZFOUZDMTEzQzE3RDFEMDA0NkE3RjggLyog
Rm9udEZlYXR1cmVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGb250RmVhdHVyZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE2
RTlGQzIxM0MxN0QxRDAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEZlYXR1cmVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0QTZFOUZDNTEzQzE3RDU3MDA0NkE3RjggLyogRm9udEZlYXR1cmVTZXR0
aW5ncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmVhdHVy
ZVNldHRpbmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0ODMzLDYgKzE0
ODM1LDcgQEAKIAkJCQk0QTk1N0YwMzE0RTI0MTEwMDA0OURCRkIgLyogV2ViU29ja2V0RXh0ZW5z
aW9uRGlzcGF0Y2hlci5jcHAgKi8sCiAJCQkJNEE5NTdGMDQxNEUyNDExMDAwNDlEQkZCIC8qIFdl
YlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuaCAqLywKIAkJCQk0QURFMjVGOTE0RTNCQjRDMDA0
QzIyMTMgLyogV2ViU29ja2V0RXh0ZW5zaW9uUHJvY2Vzc29yLmggKi8sCisJCQkJNEE0QTIzNDUx
NEYxRTE0NDAwNDZGQkYxIC8qIFdlYlNvY2tldEZyYW1lLmggKi8sCiAJCQkJNTFBQkFFNDIxMDQz
QUI0QTAwOEM1MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5jcHAgKi8sCiAJCQkJNTFBQkFFNDMx
MDQzQUI0QTAwOEM1MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5oICovLAogCQkJCTc2MzdDNTQw
MTEyRTdCNzQwMDNENkNEQyAvKiBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0LmNwcCAqLywKQEAg
LTI0MTk1LDYgKzI0MTk4LDcgQEAKIAkJCQk1MTBENEE1MDEwMzE3N0EyMDA0OUVBNTQgLyogV2Vi
U29ja2V0Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEE5NTdGMDcxNEUyNDEz
MDAwNDlEQkZCIC8qIFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTRBREUyNUZBMTRFM0JCNEMwMDRDMjIxMyAvKiBXZWJTb2NrZXRFeHRlbnNpb25Qcm9j
ZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTRBNEEyMzQ2MTRGMUUxNDQwMDQ2RkJGMSAvKiBX
ZWJTb2NrZXRGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFNDUxMDQzQUI0QTAwOEM1
MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzYzN0M1NDMx
MTJFN0I3RTAwM0Q2Q0RDIC8qIFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTc2N0Y5OUMwMTFBMTE5NTYwMDgwQzUxRCAvKiBXZWJTb2NrZXRIYW5kc2hha2VS
ZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXRDaGFubmVsLmNwcAppbmRleCA4NzI4ZTE2Y2M5ZmFlN2RmYzM1MTA0MmE0MjM2YWUw
YjM0NTJjM2I3Li5mYzkzZjgxYzUyOWIwMWUyOTZhZGY1MzA3MDZkOGZkNzkyMWQ2MjA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTgx
LDEzICs4MSw2IEBAIGNvbnN0IHNpemVfdCBwYXlsb2FkTGVuZ3RoV2l0aFR3b0J5dGVFeHRlbmRl
ZExlbmd0aEZpZWxkID0gMTI2OwogY29uc3Qgc2l6ZV90IHBheWxvYWRMZW5ndGhXaXRoRWlnaHRC
eXRlRXh0ZW5kZWRMZW5ndGhGaWVsZCA9IDEyNzsKIGNvbnN0IHNpemVfdCBtYXNraW5nS2V5V2lk
dGhJbkJ5dGVzID0gNDsKIAotY29uc3QgV2ViU29ja2V0Q2hhbm5lbDo6T3BDb2RlIFdlYlNvY2tl
dENoYW5uZWw6Ok9wQ29kZUNvbnRpbnVhdGlvbiA9IDB4MDsKLWNvbnN0IFdlYlNvY2tldENoYW5u
ZWw6Ok9wQ29kZSBXZWJTb2NrZXRDaGFubmVsOjpPcENvZGVUZXh0ID0gMHgxOwotY29uc3QgV2Vi
U29ja2V0Q2hhbm5lbDo6T3BDb2RlIFdlYlNvY2tldENoYW5uZWw6Ok9wQ29kZUJpbmFyeSA9IDB4
MjsKLWNvbnN0IFdlYlNvY2tldENoYW5uZWw6Ok9wQ29kZSBXZWJTb2NrZXRDaGFubmVsOjpPcENv
ZGVDbG9zZSA9IDB4ODsKLWNvbnN0IFdlYlNvY2tldENoYW5uZWw6Ok9wQ29kZSBXZWJTb2NrZXRD
aGFubmVsOjpPcENvZGVQaW5nID0gMHg5OwotY29uc3QgV2ViU29ja2V0Q2hhbm5lbDo6T3BDb2Rl
IFdlYlNvY2tldENoYW5uZWw6Ok9wQ29kZVBvbmcgPSAweEE7Ci0KIFdlYlNvY2tldENoYW5uZWw6
OldlYlNvY2tldENoYW5uZWwoRG9jdW1lbnQqIGRvY3VtZW50LCBXZWJTb2NrZXRDaGFubmVsQ2xp
ZW50KiBjbGllbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9jbGllbnQo
Y2xpZW50KQpAQCAtMTgzLDcgKzE3Niw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChj
b25zdCBBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSkKIHsKICAgICBMT0coTmV0d29yaywgIldlYlNv
Y2tldENoYW5uZWwgJXAgc2VuZCBhcnJheWJ1ZmZlciAlcCIsIHRoaXMsICZiaW5hcnlEYXRhKTsK
ICAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlByb3RvY29sKTsKLSAgICBlbnF1ZXVlUmF3RnJhbWUo
T3BDb2RlQmluYXJ5LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYmluYXJ5RGF0YS5kYXRhKCkp
LCBiaW5hcnlEYXRhLmJ5dGVMZW5ndGgoKSk7CisgICAgZW5xdWV1ZVJhd0ZyYW1lKFdlYlNvY2tl
dEZyYW1lOjpPcENvZGVCaW5hcnksIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihiaW5hcnlEYXRh
LmRhdGEoKSksIGJpbmFyeURhdGEuYnl0ZUxlbmd0aCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMTkxLDcgKzE4NCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBC
bG9iJiBiaW5hcnlEYXRhKQogewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAl
cCBzZW5kIGJsb2IgJXMiLCB0aGlzLCBiaW5hcnlEYXRhLnVybCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwogICAgIEFTU0VSVCghbV91c2VIaXhpZTc2UHJvdG9jb2wpOwotICAgIGVucXVldWVC
bG9iRnJhbWUoT3BDb2RlQmluYXJ5LCBiaW5hcnlEYXRhKTsKKyAgICBlbnF1ZXVlQmxvYkZyYW1l
KFdlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnksIGJpbmFyeURhdGEpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0xOTksNyArMTkyLDcgQEAgYm9vbCBXZWJTb2NrZXRDaGFubmVsOjpzZW5k
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgTE9HKE5ldHdvcmssICJXZWJT
b2NrZXRDaGFubmVsICVwIHNlbmQgYmluYXJ5ICVwICglZEIpIiwgdGhpcywgZGF0YSwgbGVuZ3Ro
KTsKICAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlByb3RvY29sKTsKLSAgICBlbnF1ZXVlUmF3RnJh
bWUoT3BDb2RlQmluYXJ5LCBkYXRhLCBsZW5ndGgpOworICAgIGVucXVldWVSYXdGcmFtZShXZWJT
b2NrZXRGcmFtZTo6T3BDb2RlQmluYXJ5LCBkYXRhLCBsZW5ndGgpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC01MjcsNyArNTIwLDcgQEAgdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpzdGFydENs
b3NpbmdIYW5kc2hha2UoaW50IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uKQogICAgICAgICAg
ICAgYnVmLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihsb3dCeXRlKSk7CiAgICAgICAgICAgICBi
dWYuYXBwZW5kKHJlYXNvbi51dGY4KCkuZGF0YSgpLCByZWFzb24udXRmOCgpLmxlbmd0aCgpKTsK
ICAgICAgICAgfQotICAgICAgICBlbnF1ZXVlUmF3RnJhbWUoT3BDb2RlQ2xvc2UsIGJ1Zi5kYXRh
KCksIGJ1Zi5zaXplKCkpOworICAgICAgICBlbnF1ZXVlUmF3RnJhbWUoV2ViU29ja2V0RnJhbWU6
Ok9wQ29kZUNsb3NlLCBidWYuZGF0YSgpLCBidWYuc2l6ZSgpKTsKICAgICB9CiAgICAgbV9jbG9z
aW5nID0gdHJ1ZTsKICAgICBpZiAobV9jbGllbnQpCkBAIC01NDIsNyArNTM1LDcgQEAgdm9pZCBX
ZWJTb2NrZXRDaGFubmVsOjpjbG9zaW5nVGltZXJGaXJlZChUaW1lcjxXZWJTb2NrZXRDaGFubmVs
PiogdGltZXIpCiAgICAgICAgIG1faGFuZGxlLT5kaXNjb25uZWN0KCk7CiB9CiAKLVdlYlNvY2tl
dENoYW5uZWw6OlBhcnNlRnJhbWVSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6cGFyc2VGcmFtZShG
cmFtZURhdGEmIGZyYW1lKQorV2ViU29ja2V0Q2hhbm5lbDo6UGFyc2VGcmFtZVJlc3VsdCBXZWJT
b2NrZXRDaGFubmVsOjpwYXJzZUZyYW1lKFdlYlNvY2tldEZyYW1lJiBmcmFtZSwgY29uc3QgY2hh
ciomIGZyYW1lRW5kKQogewogICAgIGNvbnN0IGNoYXIqIHAgPSBtX2J1ZmZlcjsKICAgICBjb25z
dCBjaGFyKiBidWZmZXJFbmQgPSBtX2J1ZmZlciArIG1fYnVmZmVyU2l6ZTsKQEAgLTU1Nyw3ICs1
NTAsNyBAQCBXZWJTb2NrZXRDaGFubmVsOjpQYXJzZUZyYW1lUmVzdWx0IFdlYlNvY2tldENoYW5u
ZWw6OnBhcnNlRnJhbWUoRnJhbWVEYXRhJiBmcmFtZQogICAgIGJvb2wgcmVzZXJ2ZWQxID0gZmly
c3RCeXRlICYgcmVzZXJ2ZWQxQml0OwogICAgIGJvb2wgcmVzZXJ2ZWQyID0gZmlyc3RCeXRlICYg
cmVzZXJ2ZWQyQml0OwogICAgIGJvb2wgcmVzZXJ2ZWQzID0gZmlyc3RCeXRlICYgcmVzZXJ2ZWQz
Qml0OwotICAgIE9wQ29kZSBvcENvZGUgPSBmaXJzdEJ5dGUgJiBvcENvZGVNYXNrOworICAgIHVu
c2lnbmVkIGNoYXIgb3BDb2RlID0gZmlyc3RCeXRlICYgb3BDb2RlTWFzazsKIAogICAgIGJvb2wg
bWFza2VkID0gc2Vjb25kQnl0ZSAmIG1hc2tCaXQ7CiAgICAgdWludDY0X3QgcGF5bG9hZExlbmd0
aDY0ID0gc2Vjb25kQnl0ZSAmIHBheWxvYWRMZW5ndGhNYXNrOwpAQCAtNjAxLDcgKzU5NCw3IEBA
IFdlYlNvY2tldENoYW5uZWw6OlBhcnNlRnJhbWVSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6cGFy
c2VGcmFtZShGcmFtZURhdGEmIGZyYW1lCiAgICAgICAgICAgICBwYXlsb2FkW2ldIF49IG1hc2tp
bmdLZXlbaSAlIG1hc2tpbmdLZXlXaWR0aEluQnl0ZXNdOyAvLyBVbm1hc2sgdGhlIHBheWxvYWQu
CiAgICAgfQogCi0gICAgZnJhbWUub3BDb2RlID0gb3BDb2RlOworICAgIGZyYW1lLm9wQ29kZSA9
IHN0YXRpY19jYXN0PFdlYlNvY2tldEZyYW1lOjpPcENvZGU+KG9wQ29kZSk7CiAgICAgZnJhbWUu
ZmluYWwgPSBmaW5hbDsKICAgICBmcmFtZS5yZXNlcnZlZDEgPSByZXNlcnZlZDE7CiAgICAgZnJh
bWUucmVzZXJ2ZWQyID0gcmVzZXJ2ZWQyOwpAQCAtNjA5LDcgKzYwMiw3IEBAIFdlYlNvY2tldENo
YW5uZWw6OlBhcnNlRnJhbWVSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6cGFyc2VGcmFtZShGcmFt
ZURhdGEmIGZyYW1lCiAgICAgZnJhbWUubWFza2VkID0gbWFza2VkOwogICAgIGZyYW1lLnBheWxv
YWQgPSBwICsgbWFza2luZ0tleUxlbmd0aDsKICAgICBmcmFtZS5wYXlsb2FkTGVuZ3RoID0gcGF5
bG9hZExlbmd0aDsKLSAgICBmcmFtZS5mcmFtZUVuZCA9IHAgKyBtYXNraW5nS2V5TGVuZ3RoICsg
cGF5bG9hZExlbmd0aDsKKyAgICBmcmFtZUVuZCA9IHAgKyBtYXNraW5nS2V5TGVuZ3RoICsgcGF5
bG9hZExlbmd0aDsKICAgICByZXR1cm4gRnJhbWVPSzsKIH0KIApAQCAtNjE3LDEyICs2MTAsMTYg
QEAgYm9vbCBXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzRnJhbWUoKQogewogICAgIEFTU0VSVCht
X2J1ZmZlcik7CiAKLSAgICBGcmFtZURhdGEgZnJhbWU7Ci0gICAgaWYgKHBhcnNlRnJhbWUoZnJh
bWUpICE9IEZyYW1lT0spCisgICAgV2ViU29ja2V0RnJhbWUgZnJhbWU7CisgICAgY29uc3QgY2hh
ciogZnJhbWVFbmQ7CisgICAgaWYgKHBhcnNlRnJhbWUoZnJhbWUsIGZyYW1lRW5kKSAhPSBGcmFt
ZU9LKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBBU1NFUlQobV9idWZmZXIgPCBmcmFt
ZUVuZCk7CisgICAgQVNTRVJUKGZyYW1lRW5kIDw9IG1fYnVmZmVyICsgbV9idWZmZXJTaXplKTsK
KwogICAgIC8vIFZhbGlkYXRlIHRoZSBmcmFtZSBkYXRhLgotICAgIGlmIChpc1Jlc2VydmVkT3BD
b2RlKGZyYW1lLm9wQ29kZSkpIHsKKyAgICBpZiAoV2ViU29ja2V0RnJhbWU6OmlzUmVzZXJ2ZWRP
cENvZGUoZnJhbWUub3BDb2RlKSkgewogICAgICAgICBmYWlsKCJVbnJlY29nbml6ZWQgZnJhbWUg
b3Bjb2RlOiAiICsgU3RyaW5nOjpudW1iZXIoZnJhbWUub3BDb2RlKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CkBAIC02MzMsMzQgKzYzMCwzNCBAQCBib29sIFdlYlNvY2tldENoYW5u
ZWw6OnByb2Nlc3NGcmFtZSgpCiAgICAgfQogCiAgICAgLy8gQWxsIGNvbnRyb2wgZnJhbWVzIG11
c3Qgbm90IGJlIGZyYWdtZW50ZWQuCi0gICAgaWYgKGlzQ29udHJvbE9wQ29kZShmcmFtZS5vcENv
ZGUpICYmICFmcmFtZS5maW5hbCkgeworICAgIGlmIChXZWJTb2NrZXRGcmFtZTo6aXNDb250cm9s
T3BDb2RlKGZyYW1lLm9wQ29kZSkgJiYgIWZyYW1lLmZpbmFsKSB7CiAgICAgICAgIGZhaWwoIlJl
Y2VpdmVkIGZyYWdtZW50ZWQgY29udHJvbCBmcmFtZTogb3Bjb2RlID0gIiArIFN0cmluZzo6bnVt
YmVyKGZyYW1lLm9wQ29kZSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
Ly8gQWxsIGNvbnRyb2wgZnJhbWVzIG11c3QgaGF2ZSBhIHBheWxvYWQgb2YgMTI1IGJ5dGVzIG9y
IGxlc3MsIHdoaWNoIG1lYW5zIHRoZSBmcmFtZSBtdXN0IG5vdCBjb250YWluCiAgICAgLy8gdGhl
ICJleHRlbmRlZCBwYXlsb2FkIGxlbmd0aCIgZmllbGQuCi0gICAgaWYgKGlzQ29udHJvbE9wQ29k
ZShmcmFtZS5vcENvZGUpICYmIGZyYW1lLnBheWxvYWRMZW5ndGggPiBtYXhQYXlsb2FkTGVuZ3Ro
V2l0aG91dEV4dGVuZGVkTGVuZ3RoRmllbGQpIHsKKyAgICBpZiAoV2ViU29ja2V0RnJhbWU6Omlz
Q29udHJvbE9wQ29kZShmcmFtZS5vcENvZGUpICYmIGZyYW1lLnBheWxvYWRMZW5ndGggPiBtYXhQ
YXlsb2FkTGVuZ3RoV2l0aG91dEV4dGVuZGVkTGVuZ3RoRmllbGQpIHsKICAgICAgICAgZmFpbCgi
UmVjZWl2ZWQgY29udHJvbCBmcmFtZSBoYXZpbmcgdG9vIGxvbmcgcGF5bG9hZDogIiArIFN0cmlu
Zzo6bnVtYmVyKGZyYW1lLnBheWxvYWRMZW5ndGgpICsgIiBieXRlcyIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gQSBuZXcgZGF0YSBmcmFtZSBpcyByZWNlaXZlZCBi
ZWZvcmUgdGhlIHByZXZpb3VzIGNvbnRpbnVvdXMgZnJhbWUgZmluaXNoZXMuCiAgICAgLy8gTm90
ZSB0aGF0IGNvbnRyb2wgZnJhbWVzIGFyZSBhbGxvd2VkIHRvIGNvbWUgaW4gdGhlIG1pZGRsZSBv
ZiBjb250aW51b3VzIGZyYW1lcy4KLSAgICBpZiAobV9oYXNDb250aW51b3VzRnJhbWUgJiYgZnJh
bWUub3BDb2RlICE9IE9wQ29kZUNvbnRpbnVhdGlvbiAmJiAhaXNDb250cm9sT3BDb2RlKGZyYW1l
Lm9wQ29kZSkpIHsKKyAgICBpZiAobV9oYXNDb250aW51b3VzRnJhbWUgJiYgZnJhbWUub3BDb2Rl
ICE9IFdlYlNvY2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb24gJiYgIVdlYlNvY2tldEZyYW1l
Ojppc0NvbnRyb2xPcENvZGUoZnJhbWUub3BDb2RlKSkgewogICAgICAgICBmYWlsKCJSZWNlaXZl
ZCBuZXcgZGF0YSBmcmFtZSBidXQgcHJldmlvdXMgY29udGludW91cyBmcmFtZSBpcyB1bmZpbmlz
aGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoIChmcmFt
ZS5vcENvZGUpIHsKLSAgICBjYXNlIE9wQ29kZUNvbnRpbnVhdGlvbjoKKyAgICBjYXNlIFdlYlNv
Y2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb246CiAgICAgICAgIC8vIEFuIHVuZXhwZWN0ZWQg
Y29udGludWF0aW9uIGZyYW1lIGlzIHJlY2VpdmVkIHdpdGhvdXQgYW55IGxlYWRpbmcgZnJhbWUu
CiAgICAgICAgIGlmICghbV9oYXNDb250aW51b3VzRnJhbWUpIHsKICAgICAgICAgICAgIGZhaWwo
IlJlY2VpdmVkIHVuZXhwZWN0ZWQgY29udGludWF0aW9uIGZyYW1lLiIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIG1fY29udGludW91c0ZyYW1lRGF0YS5h
cHBlbmQoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCk7Ci0gICAgICAgIHNraXBC
dWZmZXIoZnJhbWUuZnJhbWVFbmQgLSBtX2J1ZmZlcik7CisgICAgICAgIHNraXBCdWZmZXIoZnJh
bWVFbmQgLSBtX2J1ZmZlcik7CiAgICAgICAgIGlmIChmcmFtZS5maW5hbCkgewogICAgICAgICAg
ICAgLy8gb25tZXNzYWdlIGhhbmRsZXIgbWF5IGV2ZW50dWFsbHkgY2FsbCB0aGUgb3RoZXIgbWV0
aG9kcyBvZiB0aGlzIGNoYW5uZWwsCiAgICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgcHJldGVu
ZCB0aGF0IHdlIGhhdmUgZmluaXNoZWQgdG8gcmVhZCB0aGlzIGZyYW1lIGFuZApAQCAtNjcwLDcg
KzY2Nyw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0ZyYW1lKCkKICAgICAgICAg
ICAgIE93blB0cjxWZWN0b3I8Y2hhcj4gPiBjb250aW51b3VzRnJhbWVEYXRhID0gYWRvcHRQdHIo
bmV3IFZlY3RvcjxjaGFyPik7CiAgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZURhdGEuc3dh
cCgqY29udGludW91c0ZyYW1lRGF0YSk7CiAgICAgICAgICAgICBtX2hhc0NvbnRpbnVvdXNGcmFt
ZSA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKG1fY29udGludW91c0ZyYW1lT3BDb2RlID09IE9w
Q29kZVRleHQpIHsKKyAgICAgICAgICAgIGlmIChtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZSA9PSBX
ZWJTb2NrZXRGcmFtZTo6T3BDb2RlVGV4dCkgewogICAgICAgICAgICAgICAgIFN0cmluZyBtZXNz
YWdlOwogICAgICAgICAgICAgICAgIGlmIChjb250aW51b3VzRnJhbWVEYXRhLT5zaXplKCkpCiAg
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4KGNvbnRpbnVvdXNG
cmFtZURhdGEtPmRhdGEoKSwgY29udGludW91c0ZyYW1lRGF0YS0+c2l6ZSgpKTsKQEAgLTY4MCw0
OCArNjc3LDQ4IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0ZyYW1lKCkKICAgICAg
ICAgICAgICAgICAgICAgZmFpbCgiQ291bGQgbm90IGRlY29kZSBhIHRleHQgZnJhbWUgYXMgVVRG
LTguIik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlkUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Y29udGludW91c0ZyYW1lT3BDb2RlID09IE9wQ29kZUJpbmFyeSkKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9jb250aW51b3VzRnJhbWVPcENvZGUgPT0gV2ViU29ja2V0RnJhbWU6Ok9wQ29kZUJp
bmFyeSkKICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJpbmFyeURhdGEoY29u
dGludW91c0ZyYW1lRGF0YS5yZWxlYXNlKCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
Ci0gICAgY2FzZSBPcENvZGVUZXh0OgorICAgIGNhc2UgV2ViU29ja2V0RnJhbWU6Ok9wQ29kZVRl
eHQ6CiAgICAgICAgIGlmIChmcmFtZS5maW5hbCkgewogICAgICAgICAgICAgU3RyaW5nIG1lc3Nh
Z2U7CiAgICAgICAgICAgICBpZiAoZnJhbWUucGF5bG9hZExlbmd0aCkKICAgICAgICAgICAgICAg
ICBtZXNzYWdlID0gU3RyaW5nOjpmcm9tVVRGOChmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2Fk
TGVuZ3RoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBtZXNzYWdlID0gIiI7
Ci0gICAgICAgICAgICBza2lwQnVmZmVyKGZyYW1lLmZyYW1lRW5kIC0gbV9idWZmZXIpOworICAg
ICAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVmZmVyKTsKICAgICAgICAgICAgIGlm
IChtZXNzYWdlLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGZhaWwoIkNvdWxkIG5vdCBkZWNv
ZGUgYSB0ZXh0IGZyYW1lIGFzIFVURi04LiIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZShtZXNzYWdlKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIG1faGFzQ29udGludW91c0ZyYW1lID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG1fY29udGludW91c0ZyYW1lT3BDb2RlID0gT3BDb2RlVGV4dDsKKyAgICAgICAgICAgIG1f
Y29udGludW91c0ZyYW1lT3BDb2RlID0gV2ViU29ja2V0RnJhbWU6Ok9wQ29kZVRleHQ7CiAgICAg
ICAgICAgICBBU1NFUlQobV9jb250aW51b3VzRnJhbWVEYXRhLmlzRW1wdHkoKSk7CiAgICAgICAg
ICAgICBtX2NvbnRpbnVvdXNGcmFtZURhdGEuYXBwZW5kKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBh
eWxvYWRMZW5ndGgpOwotICAgICAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1f
YnVmZmVyKTsKKyAgICAgICAgICAgIHNraXBCdWZmZXIoZnJhbWVFbmQgLSBtX2J1ZmZlcik7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIE9wQ29kZUJpbmFyeToKKyAgICBj
YXNlIFdlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnk6CiAgICAgICAgIGlmIChmcmFtZS5maW5h
bCkgewogICAgICAgICAgICAgT3duUHRyPFZlY3RvcjxjaGFyPiA+IGJpbmFyeURhdGEgPSBhZG9w
dFB0cihuZXcgVmVjdG9yPGNoYXI+KGZyYW1lLnBheWxvYWRMZW5ndGgpKTsKICAgICAgICAgICAg
IG1lbWNweShiaW5hcnlEYXRhLT5kYXRhKCksIGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRM
ZW5ndGgpOwotICAgICAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVy
KTsKKyAgICAgICAgICAgIHNraXBCdWZmZXIoZnJhbWVFbmQgLSBtX2J1ZmZlcik7CiAgICAgICAg
ICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJpbmFyeURhdGEoYmluYXJ5RGF0YS5yZWxlYXNlKCkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9oYXNDb250aW51b3VzRnJhbWUgPSB0
cnVlOwotICAgICAgICAgICAgbV9jb250aW51b3VzRnJhbWVPcENvZGUgPSBPcENvZGVCaW5hcnk7
CisgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZSA9IFdlYlNvY2tldEZyYW1lOjpP
cENvZGVCaW5hcnk7CiAgICAgICAgICAgICBBU1NFUlQobV9jb250aW51b3VzRnJhbWVEYXRhLmlz
RW1wdHkoKSk7CiAgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZURhdGEuYXBwZW5kKGZyYW1l
LnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpOwotICAgICAgICAgICAgc2tpcEJ1ZmZlcihm
cmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAgICAgICAgICAgIHNraXBCdWZmZXIoZnJhbWVF
bmQgLSBtX2J1ZmZlcik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIE9w
Q29kZUNsb3NlOgorICAgIGNhc2UgV2ViU29ja2V0RnJhbWU6Ok9wQ29kZUNsb3NlOgogICAgICAg
ICBpZiAoZnJhbWUucGF5bG9hZExlbmd0aCA+PSAyKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGhpZ2hCeXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZnJhbWUucGF5bG9hZFsw
XSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxvd0J5dGUgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihmcmFtZS5wYXlsb2FkWzFdKTsKQEAgLTczMiw3ICs3MjksNyBAQCBib29sIFdl
YlNvY2tldENoYW5uZWw6OnByb2Nlc3NGcmFtZSgpCiAgICAgICAgICAgICBtX2Nsb3NlRXZlbnRS
ZWFzb24gPSBTdHJpbmc6OmZyb21VVEY4KCZmcmFtZS5wYXlsb2FkWzJdLCBmcmFtZS5wYXlsb2Fk
TGVuZ3RoIC0gMik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fY2xvc2VFdmVudFJlYXNv
biA9ICIiOwotICAgICAgICBza2lwQnVmZmVyKGZyYW1lLmZyYW1lRW5kIC0gbV9idWZmZXIpOwor
ICAgICAgICBza2lwQnVmZmVyKGZyYW1lRW5kIC0gbV9idWZmZXIpOwogICAgICAgICBtX3JlY2Vp
dmVkQ2xvc2luZ0hhbmRzaGFrZSA9IHRydWU7CiAgICAgICAgIHN0YXJ0Q2xvc2luZ0hhbmRzaGFr
ZShtX2Nsb3NlRXZlbnRDb2RlLCBtX2Nsb3NlRXZlbnRSZWFzb24pOwogICAgICAgICBpZiAobV9j
bG9zaW5nKSB7CkBAIC03NDEsMjAgKzczOCwyMCBAQCBib29sIFdlYlNvY2tldENoYW5uZWw6OnBy
b2Nlc3NGcmFtZSgpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIE9wQ29k
ZVBpbmc6Ci0gICAgICAgIGVucXVldWVSYXdGcmFtZShPcENvZGVQb25nLCBmcmFtZS5wYXlsb2Fk
LCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKLSAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVu
ZCAtIG1fYnVmZmVyKTsKKyAgICBjYXNlIFdlYlNvY2tldEZyYW1lOjpPcENvZGVQaW5nOgorICAg
ICAgICBlbnF1ZXVlUmF3RnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZVBvbmcsIGZyYW1lLnBh
eWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpOworICAgICAgICBza2lwQnVmZmVyKGZyYW1lRW5k
IC0gbV9idWZmZXIpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgT3BDb2RlUG9uZzoKKyAg
ICBjYXNlIFdlYlNvY2tldEZyYW1lOjpPcENvZGVQb25nOgogICAgICAgICAvLyBBIHNlcnZlciBt
YXkgc2VuZCBhIHBvbmcgaW4gcmVzcG9uc2UgdG8gb3VyIHBpbmcsIG9yIGFuIHVuc29saWNpdGVk
IHBvbmcgd2hpY2ggaXMgbm90IGFzc29jaWF0ZWQgd2l0aAogICAgICAgICAvLyBhbnkgc3BlY2lm
aWMgcGluZy4gRWl0aGVyIHdheSwgdGhlcmUncyBub3RoaW5nIHRvIGRvIG9uIHJlY2VpcHQgb2Yg
cG9uZy4KLSAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAg
ICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVmZmVyKTsKICAgICAgICAgYnJlYWs7CiAK
ICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgc2tp
cEJ1ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAgICAgICAgc2tpcEJ1ZmZlcihm
cmFtZUVuZCAtIG1fYnVmZmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC04NTUsMTQg
Kzg1MiwxNCBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmVucXVldWVUZXh0RnJhbWUoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiAgICAgQVNTRVJUKCFtX3VzZUhpeGllNzZQcm90b2NvbCk7CiAgICAg
QVNTRVJUKG1fb3V0Z29pbmdGcmFtZVF1ZXVlU3RhdHVzID09IE91dGdvaW5nRnJhbWVRdWV1ZU9w
ZW4pOwogICAgIE93blB0cjxRdWV1ZWRGcmFtZT4gZnJhbWUgPSBhZG9wdFB0cihuZXcgUXVldWVk
RnJhbWUpOwotICAgIGZyYW1lLT5vcENvZGUgPSBPcENvZGVUZXh0OworICAgIGZyYW1lLT5vcENv
ZGUgPSBXZWJTb2NrZXRGcmFtZTo6T3BDb2RlVGV4dDsKICAgICBmcmFtZS0+ZnJhbWVUeXBlID0g
UXVldWVkRnJhbWVUeXBlU3RyaW5nOwogICAgIGZyYW1lLT5zdHJpbmdEYXRhID0gc3RyaW5nOwog
ICAgIG1fb3V0Z29pbmdGcmFtZVF1ZXVlLmFwcGVuZChmcmFtZS5yZWxlYXNlKCkpOwogICAgIHBy
b2Nlc3NPdXRnb2luZ0ZyYW1lUXVldWUoKTsKIH0KIAotdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpl
bnF1ZXVlUmF3RnJhbWUoT3BDb2RlIG9wQ29kZSwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRh
dGFMZW5ndGgpCit2b2lkIFdlYlNvY2tldENoYW5uZWw6OmVucXVldWVSYXdGcmFtZShXZWJTb2Nr
ZXRGcmFtZTo6T3BDb2RlIG9wQ29kZSwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5n
dGgpCiB7CiAgICAgQVNTRVJUKCFtX3VzZUhpeGllNzZQcm90b2NvbCk7CiAgICAgQVNTRVJUKG1f
b3V0Z29pbmdGcmFtZVF1ZXVlU3RhdHVzID09IE91dGdvaW5nRnJhbWVRdWV1ZU9wZW4pOwpAQCAt
ODc2LDcgKzg3Myw3IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZW5xdWV1ZVJhd0ZyYW1lKE9w
Q29kZSBvcENvZGUsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkCiAgICAgcHJvY2Vzc091dGdv
aW5nRnJhbWVRdWV1ZSgpOwogfQogCi12b2lkIFdlYlNvY2tldENoYW5uZWw6OmVucXVldWVCbG9i
RnJhbWUoT3BDb2RlIG9wQ29kZSwgY29uc3QgQmxvYiYgYmxvYikKK3ZvaWQgV2ViU29ja2V0Q2hh
bm5lbDo6ZW5xdWV1ZUJsb2JGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlIG9wQ29kZSwgY29u
c3QgQmxvYiYgYmxvYikKIHsKICAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlByb3RvY29sKTsKICAg
ICBBU1NFUlQobV9vdXRnb2luZ0ZyYW1lUXVldWVTdGF0dXMgPT0gT3V0Z29pbmdGcmFtZVF1ZXVl
T3Blbik7CkBAIC05NjcsNDQgKzk2NCw0NyBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmFib3J0
T3V0Z29pbmdGcmFtZVF1ZXVlKCkKICNlbmRpZgogfQogCi1ib29sIFdlYlNvY2tldENoYW5uZWw6
OnNlbmRGcmFtZShPcENvZGUgb3BDb2RlLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxl
bmd0aCkKK2Jvb2wgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZEZyYW1lKFdlYlNvY2tldEZyYW1lOjpP
cENvZGUgb3BDb2RlLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkKIHsKICAg
ICBBU1NFUlQobV9oYW5kbGUpOwogICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOwogCi0gICAgVmVj
dG9yPGNoYXI+IGZyYW1lOwogICAgIEFTU0VSVCghKG9wQ29kZSAmIH5vcENvZGVNYXNrKSk7IC8v
IENoZWNrcyB3aGV0aGVyICJvcENvZGUiIGZpdHMgaW4gdGhlIHJhbmdlIG9mIG9wQ29kZXMuCi0g
ICAgZnJhbWUuYXBwZW5kKGZpbmFsQml0IHwgb3BDb2RlKTsKLSAgICBpZiAoZGF0YUxlbmd0aCA8
PSBtYXhQYXlsb2FkTGVuZ3RoV2l0aG91dEV4dGVuZGVkTGVuZ3RoRmllbGQpCi0gICAgICAgIGZy
YW1lLmFwcGVuZChtYXNrQml0IHwgZGF0YUxlbmd0aCk7Ci0gICAgZWxzZSBpZiAoZGF0YUxlbmd0
aCA8PSAweEZGRkYpIHsKLSAgICAgICAgZnJhbWUuYXBwZW5kKG1hc2tCaXQgfCBwYXlsb2FkTGVu
Z3RoV2l0aFR3b0J5dGVFeHRlbmRlZExlbmd0aEZpZWxkKTsKLSAgICAgICAgZnJhbWUuYXBwZW5k
KChkYXRhTGVuZ3RoICYgMHhGRjAwKSA+PiA4KTsKLSAgICAgICAgZnJhbWUuYXBwZW5kKGRhdGFM
ZW5ndGggJiAweEZGKTsKKyAgICBXZWJTb2NrZXRGcmFtZSBmcmFtZShvcENvZGUsIHRydWUsIHRy
dWUsIGRhdGEsIGRhdGFMZW5ndGgpOworCisgICAgLy8gTWFzayB0aGUgZnJhbWUuCisgICAgVmVj
dG9yPGNoYXI+IGZyYW1lRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Qnl0ZSA9IChmcmFt
ZS5maW5hbCA/IGZpbmFsQml0IDogMCkgfCBmcmFtZS5vcENvZGU7CisgICAgZnJhbWVEYXRhLmFw
cGVuZChmaXJzdEJ5dGUpOworICAgIGlmIChmcmFtZS5wYXlsb2FkTGVuZ3RoIDw9IG1heFBheWxv
YWRMZW5ndGhXaXRob3V0RXh0ZW5kZWRMZW5ndGhGaWVsZCkKKyAgICAgICAgZnJhbWVEYXRhLmFw
cGVuZChtYXNrQml0IHwgZnJhbWUucGF5bG9hZExlbmd0aCk7CisgICAgZWxzZSBpZiAoZnJhbWUu
cGF5bG9hZExlbmd0aCA8PSAweEZGRkYpIHsKKyAgICAgICAgZnJhbWVEYXRhLmFwcGVuZChtYXNr
Qml0IHwgcGF5bG9hZExlbmd0aFdpdGhUd29CeXRlRXh0ZW5kZWRMZW5ndGhGaWVsZCk7CisgICAg
ICAgIGZyYW1lRGF0YS5hcHBlbmQoKGZyYW1lLnBheWxvYWRMZW5ndGggJiAweEZGMDApID4+IDgp
OworICAgICAgICBmcmFtZURhdGEuYXBwZW5kKGZyYW1lLnBheWxvYWRMZW5ndGggJiAweEZGKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBmcmFtZS5hcHBlbmQobWFza0JpdCB8IHBheWxvYWRMZW5n
dGhXaXRoRWlnaHRCeXRlRXh0ZW5kZWRMZW5ndGhGaWVsZCk7CisgICAgICAgIGZyYW1lRGF0YS5h
cHBlbmQobWFza0JpdCB8IHBheWxvYWRMZW5ndGhXaXRoRWlnaHRCeXRlRXh0ZW5kZWRMZW5ndGhG
aWVsZCk7CiAgICAgICAgIGNoYXIgZXh0ZW5kZWRQYXlsb2FkTGVuZ3RoWzhdOwotICAgICAgICBz
aXplX3QgcmVtYWluaW5nID0gZGF0YUxlbmd0aDsKKyAgICAgICAgc2l6ZV90IHJlbWFpbmluZyA9
IGZyYW1lLnBheWxvYWRMZW5ndGg7CiAgICAgICAgIC8vIEZpbGwgdGhlIGxlbmd0aCBpbnRvIGV4
dGVuZGVkUGF5bG9hZExlbmd0aCBpbiB0aGUgbmV0d29yayBieXRlIG9yZGVyLgogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgICAgZXh0ZW5kZWRQYXlsb2Fk
TGVuZ3RoWzcgLSBpXSA9IHJlbWFpbmluZyAmIDB4RkY7CiAgICAgICAgICAgICByZW1haW5pbmcg
Pj49IDg7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKCFyZW1haW5pbmcpOwotICAgICAgICBm
cmFtZS5hcHBlbmQoZXh0ZW5kZWRQYXlsb2FkTGVuZ3RoLCA4KTsKKyAgICAgICAgZnJhbWVEYXRh
LmFwcGVuZChleHRlbmRlZFBheWxvYWRMZW5ndGgsIDgpOwogICAgIH0KIAotICAgIC8vIE1hc2sg
dGhlIGZyYW1lLgotICAgIHNpemVfdCBtYXNraW5nS2V5U3RhcnQgPSBmcmFtZS5zaXplKCk7Ci0g
ICAgZnJhbWUuZ3JvdyhmcmFtZS5zaXplKCkgKyBtYXNraW5nS2V5V2lkdGhJbkJ5dGVzKTsgLy8g
QWRkIHBsYWNlaG9sZGVyIGZvciBtYXNraW5nIGtleS4gV2lsbCBiZSBvdmVyd3JpdHRlbi4KLSAg
ICBzaXplX3QgcGF5bG9hZFN0YXJ0ID0gZnJhbWUuc2l6ZSgpOwotICAgIGZyYW1lLmFwcGVuZChk
YXRhLCBkYXRhTGVuZ3RoKTsKKyAgICBzaXplX3QgbWFza2luZ0tleVN0YXJ0ID0gZnJhbWVEYXRh
LnNpemUoKTsKKyAgICBmcmFtZURhdGEuZ3JvdyhmcmFtZURhdGEuc2l6ZSgpICsgbWFza2luZ0tl
eVdpZHRoSW5CeXRlcyk7IC8vIEFkZCBwbGFjZWhvbGRlciBmb3IgbWFza2luZyBrZXkuIFdpbGwg
YmUgb3ZlcndyaXR0ZW4uCisgICAgc2l6ZV90IHBheWxvYWRTdGFydCA9IGZyYW1lRGF0YS5zaXpl
KCk7CisgICAgZnJhbWVEYXRhLmFwcGVuZChmcmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVu
Z3RoKTsKIAotICAgIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKGZyYW1lLmRhdGEoKSAr
IG1hc2tpbmdLZXlTdGFydCwgbWFza2luZ0tleVdpZHRoSW5CeXRlcyk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpCi0gICAgICAgIGZyYW1lW3BheWxvYWRTdGFy
dCArIGldIF49IGZyYW1lW21hc2tpbmdLZXlTdGFydCArIGkgJSBtYXNraW5nS2V5V2lkdGhJbkJ5
dGVzXTsKKyAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhmcmFtZURhdGEuZGF0YSgp
ICsgbWFza2luZ0tleVN0YXJ0LCBtYXNraW5nS2V5V2lkdGhJbkJ5dGVzKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZyYW1lLnBheWxvYWRMZW5ndGg7ICsraSkKKyAgICAgICAgZnJhbWVE
YXRhW3BheWxvYWRTdGFydCArIGldIF49IGZyYW1lRGF0YVttYXNraW5nS2V5U3RhcnQgKyBpICUg
bWFza2luZ0tleVdpZHRoSW5CeXRlc107CiAKLSAgICByZXR1cm4gbV9oYW5kbGUtPnNlbmQoZnJh
bWUuZGF0YSgpLCBmcmFtZS5zaXplKCkpOworICAgIHJldHVybiBtX2hhbmRsZS0+c2VuZChmcmFt
ZURhdGEuZGF0YSgpLCBmcmFtZURhdGEuc2l6ZSgpKTsKIH0KIAogYm9vbCBXZWJTb2NrZXRDaGFu
bmVsOjpzZW5kRnJhbWVIaXhpZTc2KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3Ro
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVs
LmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaAppbmRleCA3
M2ZjNTJkYTRlM2Q2MGNjMWYxNWYwYjFiNDAxYjgzODEzODhmZWRjLi40YmIyOGM5ZjJiMDVhZjM0
OTk3YmUwN2E2MmYxMmJjNGU5ODM1ODE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRz
L1dlYlNvY2tldENoYW5uZWwuaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudC5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXRGcmFtZS5oIgogI2lu
Y2x1ZGUgIldlYlNvY2tldEhhbmRzaGFrZS5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMjgsMzggKzEyOSwxMyBAQCBwcml2YXRlOgogICAg
IHZvaWQgc3RhcnRDbG9zaW5nSGFuZHNoYWtlKGludCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNv
bik7CiAgICAgdm9pZCBjbG9zaW5nVGltZXJGaXJlZChUaW1lcjxXZWJTb2NrZXRDaGFubmVsPiop
OwogCi0gICAgLy8gSHliaS0xMCBvcGNvZGVzLgotICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IE9w
Q29kZTsKLSAgICBzdGF0aWMgY29uc3QgT3BDb2RlIE9wQ29kZUNvbnRpbnVhdGlvbjsKLSAgICBz
dGF0aWMgY29uc3QgT3BDb2RlIE9wQ29kZVRleHQ7Ci0gICAgc3RhdGljIGNvbnN0IE9wQ29kZSBP
cENvZGVCaW5hcnk7Ci0gICAgc3RhdGljIGNvbnN0IE9wQ29kZSBPcENvZGVDbG9zZTsKLSAgICBz
dGF0aWMgY29uc3QgT3BDb2RlIE9wQ29kZVBpbmc7Ci0gICAgc3RhdGljIGNvbnN0IE9wQ29kZSBP
cENvZGVQb25nOwotCi0gICAgc3RhdGljIGJvb2wgaXNOb25Db250cm9sT3BDb2RlKE9wQ29kZSBv
cENvZGUpIHsgcmV0dXJuIG9wQ29kZSA9PSBPcENvZGVDb250aW51YXRpb24gfHwgb3BDb2RlID09
IE9wQ29kZVRleHQgfHwgb3BDb2RlID09IE9wQ29kZUJpbmFyeTsgfQotICAgIHN0YXRpYyBib29s
IGlzQ29udHJvbE9wQ29kZShPcENvZGUgb3BDb2RlKSB7IHJldHVybiBvcENvZGUgPT0gT3BDb2Rl
Q2xvc2UgfHwgb3BDb2RlID09IE9wQ29kZVBpbmcgfHwgb3BDb2RlID09IE9wQ29kZVBvbmc7IH0K
LSAgICBzdGF0aWMgYm9vbCBpc1Jlc2VydmVkT3BDb2RlKE9wQ29kZSBvcENvZGUpIHsgcmV0dXJu
ICFpc05vbkNvbnRyb2xPcENvZGUob3BDb2RlKSAmJiAhaXNDb250cm9sT3BDb2RlKG9wQ29kZSk7
IH0KLQogICAgIGVudW0gUGFyc2VGcmFtZVJlc3VsdCB7CiAgICAgICAgIEZyYW1lT0ssCiAgICAg
ICAgIEZyYW1lSW5jb21wbGV0ZSwKICAgICAgICAgRnJhbWVFcnJvcgogICAgIH07CiAKLSAgICBz
dHJ1Y3QgRnJhbWVEYXRhIHsKLSAgICAgICAgT3BDb2RlIG9wQ29kZTsKLSAgICAgICAgYm9vbCBm
aW5hbDsKLSAgICAgICAgYm9vbCByZXNlcnZlZDE7Ci0gICAgICAgIGJvb2wgcmVzZXJ2ZWQyOwot
ICAgICAgICBib29sIHJlc2VydmVkMzsKLSAgICAgICAgYm9vbCBtYXNrZWQ7Ci0gICAgICAgIGNv
bnN0IGNoYXIqIHBheWxvYWQ7Ci0gICAgICAgIHNpemVfdCBwYXlsb2FkTGVuZ3RoOwotICAgICAg
ICBjb25zdCBjaGFyKiBmcmFtZUVuZDsKLSAgICB9OwotCi0gICAgUGFyc2VGcmFtZVJlc3VsdCBw
YXJzZUZyYW1lKEZyYW1lRGF0YSYpOyAvLyBNYXkgbW9kaWZ5IHBhcnQgb2YgbV9idWZmZXIgdG8g
dW5tYXNrIHRoZSBmcmFtZS4KKyAgICBQYXJzZUZyYW1lUmVzdWx0IHBhcnNlRnJhbWUoV2ViU29j
a2V0RnJhbWUmLCBjb25zdCBjaGFyKiYgZnJhbWVFbmQpOyAvLyBNYXkgbW9kaWZ5IHBhcnQgb2Yg
bV9idWZmZXIgdG8gdW5tYXNrIHRoZSBmcmFtZS4KIAogICAgIGJvb2wgcHJvY2Vzc0ZyYW1lKCk7
CiAgICAgYm9vbCBwcm9jZXNzRnJhbWVIaXhpZTc2KCk7CkBAIC0xODAsNyArMTU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgUXVldWVkRnJhbWVUeXBlQmxvYgogICAgIH07CiAgICAgc3RydWN0IFF1
ZXVlZEZyYW1lIHsKLSAgICAgICAgT3BDb2RlIG9wQ29kZTsKKyAgICAgICAgV2ViU29ja2V0RnJh
bWU6Ok9wQ29kZSBvcENvZGU7CiAgICAgICAgIFF1ZXVlZEZyYW1lVHlwZSBmcmFtZVR5cGU7CiAg
ICAgICAgIC8vIE9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXRlbXMgaXMgdXNlZCwgYWNjb3Jk
aW5nIHRvIHRoZSB2YWx1ZSBvZiBmcmFtZVR5cGUuCiAgICAgICAgIFN0cmluZyBzdHJpbmdEYXRh
OwpAQCAtMTg4LDggKzE2NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxCbG9iPiBibG9i
RGF0YTsKICAgICB9OwogICAgIHZvaWQgZW5xdWV1ZVRleHRGcmFtZShjb25zdCBTdHJpbmcmKTsK
LSAgICB2b2lkIGVucXVldWVSYXdGcmFtZShPcENvZGUsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBkYXRhTGVuZ3RoKTsKLSAgICB2b2lkIGVucXVldWVCbG9iRnJhbWUoT3BDb2RlLCBjb25zdCBC
bG9iJik7CisgICAgdm9pZCBlbnF1ZXVlUmF3RnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZSwg
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpOworICAgIHZvaWQgZW5xdWV1ZUJs
b2JGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlLCBjb25zdCBCbG9iJik7CiAKICAgICB2b2lk
IHByb2Nlc3NPdXRnb2luZ0ZyYW1lUXVldWUoKTsKICAgICB2b2lkIGFib3J0T3V0Z29pbmdGcmFt
ZVF1ZXVlKCk7CkBAIC0yMDgsNyArMTg0LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIElmIHlvdSBh
cmUgZ29pbmcgdG8gc2VuZCBhIGh5YmktMTAgZnJhbWUsIHlvdSBuZWVkIHRvIHVzZSB0aGUgb3V0
Z29pbmcgZnJhbWUgcXVldWUKICAgICAvLyBpbnN0ZWFkIG9mIGNhbGwgc2VuZEZyYW1lKCkgZGly
ZWN0bHkuCi0gICAgYm9vbCBzZW5kRnJhbWUoT3BDb2RlLCBjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3QgZGF0YUxlbmd0aCk7CisgICAgYm9vbCBzZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29k
ZSwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgpOwogICAgIGJvb2wgc2VuZEZy
YW1lSGl4aWU3Nihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCk7CiAKICNpZiBF
TkFCTEUoQkxPQikKQEAgLTI0Miw3ICsyMTgsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gUHJpdmF0
ZSBtZW1iZXJzIG9ubHkgZm9yIGh5YmktMTAgcHJvdG9jb2wuCiAgICAgYm9vbCBtX2hhc0NvbnRp
bnVvdXNGcmFtZTsKLSAgICBPcENvZGUgbV9jb250aW51b3VzRnJhbWVPcENvZGU7CisgICAgV2Vi
U29ja2V0RnJhbWU6Ok9wQ29kZSBtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZTsKICAgICBWZWN0b3I8
Y2hhcj4gbV9jb250aW51b3VzRnJhbWVEYXRhOwogICAgIHVuc2lnbmVkIHNob3J0IG1fY2xvc2VF
dmVudENvZGU7CiAgICAgU3RyaW5nIG1fY2xvc2VFdmVudFJlYXNvbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0RnJhbWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0RnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWRkN2FiOThjMmVkMTQ2
ZjE1NjdmMGE5MWE3NzMxOGQ2OTJjNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvd2Vic29ja2V0cy9XZWJTb2NrZXRGcmFtZS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJTb2NrZXRGcmFtZV9oCisjZGVmaW5lIFdlYlNvY2tldEZyYW1lX2gKKworI2lmIEVOQUJMRShX
RUJfU09DS0VUUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgV2ViU29ja2V0RnJh
bWUgeworICAgIC8vIFJGQzY0NTUgb3Bjb2Rlcy4KKyAgICBlbnVtIE9wQ29kZSB7CisgICAgICAg
IE9wQ29kZUNvbnRpbnVhdGlvbiA9IDB4MCwKKyAgICAgICAgT3BDb2RlVGV4dCA9IDB4MSwKKyAg
ICAgICAgT3BDb2RlQmluYXJ5ID0gMHgyLAorICAgICAgICBPcENvZGVDbG9zZSA9IDB4OCwKKyAg
ICAgICAgT3BDb2RlUGluZyA9IDB4OSwKKyAgICAgICAgT3BDb2RlUG9uZyA9IDB4QSwKKyAgICAg
ICAgT3BDb2RlSW52YWxpZCA9IDB4MTAKKyAgICB9OworCisgICAgc3RhdGljIGJvb2wgaXNOb25D
b250cm9sT3BDb2RlKE9wQ29kZSBvcENvZGUpIHsgcmV0dXJuIG9wQ29kZSA9PSBPcENvZGVDb250
aW51YXRpb24gfHwgb3BDb2RlID09IE9wQ29kZVRleHQgfHwgb3BDb2RlID09IE9wQ29kZUJpbmFy
eTsgfQorICAgIHN0YXRpYyBib29sIGlzQ29udHJvbE9wQ29kZShPcENvZGUgb3BDb2RlKSB7IHJl
dHVybiBvcENvZGUgPT0gT3BDb2RlQ2xvc2UgfHwgb3BDb2RlID09IE9wQ29kZVBpbmcgfHwgb3BD
b2RlID09IE9wQ29kZVBvbmc7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1Jlc2VydmVkT3BDb2RlKE9w
Q29kZSBvcENvZGUpIHsgcmV0dXJuICFpc05vbkNvbnRyb2xPcENvZGUob3BDb2RlKSAmJiAhaXND
b250cm9sT3BDb2RlKG9wQ29kZSk7IH0KKworICAgIFdlYlNvY2tldEZyYW1lKE9wQ29kZSBvcENv
ZGUgPSBPcENvZGVJbnZhbGlkLCBib29sIGZpbmFsID0gZmFsc2UsIGJvb2wgbWFza2VkID0gZmFs
c2UsIGNvbnN0IGNoYXIqIHBheWxvYWQgPSAwLCBzaXplX3QgcGF5bG9hZExlbmd0aCA9IDApCisg
ICAgICAgIDogb3BDb2RlKG9wQ29kZSkKKyAgICAgICAgLCBmaW5hbChmaW5hbCkKKyAgICAgICAg
LCByZXNlcnZlZDEoZmFsc2UpCisgICAgICAgICwgcmVzZXJ2ZWQyKGZhbHNlKQorICAgICAgICAs
IHJlc2VydmVkMyhmYWxzZSkKKyAgICAgICAgLCBtYXNrZWQobWFza2VkKQorICAgICAgICAsIHBh
eWxvYWQocGF5bG9hZCkKKyAgICAgICAgLCBwYXlsb2FkTGVuZ3RoKHBheWxvYWRMZW5ndGgpCisg
ICAgeworICAgIH0KKworICAgIE9wQ29kZSBvcENvZGU7CisgICAgYm9vbCBmaW5hbDsKKyAgICBi
b29sIHJlc2VydmVkMTsKKyAgICBib29sIHJlc2VydmVkMjsKKyAgICBib29sIHJlc2VydmVkMzsK
KyAgICBib29sIG1hc2tlZDsKKyAgICBjb25zdCBjaGFyKiBwYXlsb2FkOworICAgIHNpemVfdCBw
YXlsb2FkTGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9TT0NLRVRTKQorCisjZW5kaWYgLy8gV2ViU29ja2V0RnJhbWVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127800</attachid>
            <date>2012-02-20 03:37:32 -0800</date>
            <delta_ts>2012-02-20 06:55:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78682-20120220203730.patch</filename>
            <type>text/plain</type>
            <size>31750</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODQ0ZDU5NDNkOTk4MmZj
MGIxMjRkZDkwMmE1N2UzODVhMmM5YTFmZS4uYWI3NTM1MTBlNWUxODdlNTU0NGRlMWUxMjM0NjU0
NTFjNzBhZTc2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAyLTIwICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbV2ViU29ja2V0
XSBNb3ZlIFdlYlNvY2tldENoYW5uZWw6OkZyYW1lRGF0YSBpbnRvIGEgc2VwYXJhdGUgaGVhZGVy
IGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4
NjgyCisKKyAgICAgICAgRXh0cmFjdCBXZWJTb2NrZXRDaGFubmVsOjpGcmFtZURhdGEgYXMgV2Vi
U29ja2V0RnJhbWUuIFRoaXMgYnJpbmdzCisgICAgICAgIGZsZXhpYmlsaXR5IHRvIGFkZCBjbGFz
c2VzIHdoaWNoIHdhbnQgdG8gZG8gc29tZXRoaW5nIGZvcgorICAgICAgICBpbmNvbWluZy9vdXRn
b2luZyBmcmFtZXMgKGUuZy4gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbikuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBi
ZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZFdl
YlNvY2tldEZyYW1lLmgKKyAgICAgICAgKiBUYXJnZXQucHJpOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
IERpdHRvLgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHA6IE1vZGlm
aWVkIHRvIHVzZSBXZWJTb2NrZXRGcmFtZSBpbnN0ZWFkIG9mIEZyYW1lRGF0YQorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpzZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OnN0YXJ0Q2xvc2luZ0hhbmRzaGFrZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwYXJzZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OnByb2Nlc3NGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjplbnF1ZXVlVGV4dEZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYlNvY2tldENoYW5uZWw6OmVucXVldWVSYXdGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXRDaGFubmVsOjplbnF1ZXVlQmxvYkZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGVuZE1hc2tlZEZyYW1lUGF5bG9hZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
bWFrZUZyYW1lRGF0YSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5l
bDo6c2VuZEZyYW1lKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaDog
UmVtb3ZlZCBGcmFtZURhdGEuCisgICAgICAgIChXZWJTb2NrZXRDaGFubmVsKToKKyAgICAgICAg
KFF1ZXVlZEZyYW1lKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldEZyYW1lLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJTb2NrZXRGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXRGcmFtZTo6aXNOb25Db250cm9sT3BDb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlNvY2tldEZyYW1lOjppc0NvbnRyb2xPcENvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0RnJhbWU6OmlzUmVzZXJ2ZWRPcENvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0RnJhbWU6OldlYlNvY2tldEZyYW1lKToKKwogMjAxMi0wMi0yMCAgQWxl
eGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IFtTdHlsZXNdIGJveC1zaGFkb3cgYW5kIC13ZWJraXQtYm94LXNoYWRvdyBwcm9wZXJ0
aWVzIGFyZSBub3QgY29uc2lkZXJlZCBjb2xvci1hd2FyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggZjIwYTQwODdkZjkyMmYyZTgwZGY2Njg4Mjc1ZDI4NmViMWZjMWY2Zi4uMjM5
MTg3NWEwZGVjM2RhYjk2OGM5NjI5MTgxNmM0YzBhZGI0MDk5ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC00MzM3LDYgKzQzMzcsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0
Y2hlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvblBy
b2Nlc3Nvci5oIFwKKwlTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEZyYW1lLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaCBcCiAJU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0LmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQppbmRleCBmYmViY2I1N2M3OWNlNWUwN2VhYWI1ZGEyNDQwYmRlMGU4ZmNlM2I1Li5jMzE5
MGU0NWI5OGFlODE1ODhiZGM1N2QwMDJiNmY2Mjg5MGIzNzU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM2
NjgsNiArMzY2OCw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJfU09DS0VUUz0xKSB7
CiAgICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oIFwKICAgICAgICAg
d2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmggXAogICAgICAgICB3ZWJz
b2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvblByb2Nlc3Nvci5oIFwKKyAgICAgICAgd2Vic29ja2V0
cy9XZWJTb2NrZXRGcmFtZS5oIFwKICAgICAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hh
a2UuaCBcCiAgICAgICAgIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdC5oIFwK
ICAgICAgICAgd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZS5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCBiMzM3YzA5OGExY2JmZGI0ZTZjYzhkYWE5ZjA1ZGIyOWY2NzNhMWRkLi42
YzJhNmQ4NjkzY2JiNTA3MzRlMzU1ZDI1NjU3NjM2N2UyNjM4Nzg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC00ODE2LDYgKzQ4MTYsNyBAQAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0
RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAnLAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29j
a2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5oJywKICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNv
Y2tldEV4dGVuc2lvblByb2Nlc3Nvci5oJywKKyAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNv
Y2tldEZyYW1lLmgnLAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtl
LmNwcCcsCiAgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaCcsCiAg
ICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0LmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDdkNjVl
ZGJjN2I4Y2RmYTM4NTcwNTM2MGViN2Q4N2Q4YTM4YTM4ZWQuLjYyZGNkY2MzNWFhNzRlOWIwZGQ2
ZmJmMTg2ZTliZjhiMjFkYTI4NDUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCkBAIC03MzQ1OCw2ICs3MzQ1OCwxMCBAQAogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFdlYlNvY2tldEZy
YW1lLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHdlYnNvY2tldHNcV2ViU29ja2V0SGFuZHNoYWtlLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNTllODdmNzBlNTM4YjdiODVmM2ZkMDZhM2RiNDlkYjg2M2Q4ZjgzNi4uOTkwZjQwNTUxNzFj
YWM0NWVjYWNhMTY0ZGMwZWEyNzljYjc3NjExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM2NSw2ICsxMzY1LDcgQEAKIAkJ
NEExRTcxOTYxNEUxMDFGOTAwNjI2RjlEIC8qIEpTSFRNTFNoYWRvd0VsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMUU3MTk0MTRFMTAxRjkw
MDYyNkY5RCAvKiBKU0hUTUxTaGFkb3dFbGVtZW50LmggKi87IH07CiAJCTRBMUU3MUE1MTRFMTA2
QUMwMDYyNkY5RCAvKiBKU1NoYWRvd1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEExRTcxQTMxNEUxMDZBQzAwNjI2RjlEIC8qIEpTU2hhZG93
Um9vdC5jcHAgKi87IH07CiAJCTRBMUU3MUE2MTRFMTA2QUMwMDYyNkY5RCAvKiBKU1NoYWRvd1Jv
b3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMUU3
MUE0MTRFMTA2QUMwMDYyNkY5RCAvKiBKU1NoYWRvd1Jvb3QuaCAqLzsgfTsKKwkJNEE0QTIzNDYx
NEYxRTE0NDAwNDZGQkYxIC8qIFdlYlNvY2tldEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTRBMjM0NTE0RjFFMTQ0MDA0NkZCRjEgLyogV2Vi
U29ja2V0RnJhbWUuaCAqLzsgfTsKIAkJNEE2RTlGQzMxM0MxN0QxRDAwNDZBN0Y4IC8qIEZvbnRG
ZWF0dXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEE2RTlGQzExM0MxN0QxRDAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlVmFsdWUuY3BwICov
OyB9OwogCQk0QTZFOUZDNDEzQzE3RDFEMDA0NkE3RjggLyogRm9udEZlYXR1cmVWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE2RTlGQzIxM0Mx
N0QxRDAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0QTZFOUZDNzEzQzE3RDU3MDA0NkE3RjggLyog
Rm9udEZlYXR1cmVTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QTZFOUZDNTEzQzE3RDU3MDA0NkE3RjggLyogRm9udEZlYXR1cmVTZXR0
aW5ncy5jcHAgKi87IH07CkBAIC04MjI4LDYgKzgyMjksNyBAQAogCQk0QTFFNzE5NDE0RTEwMUY5
MDA2MjZGOUQgLyogSlNIVE1MU2hhZG93RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0hUTUxTaGFkb3dFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTRBMUU3MUEzMTRFMTA2QUMwMDYyNkY5RCAvKiBKU1NoYWRvd1Jvb3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTaGFkb3dSb290LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEExRTcxQTQxNEUxMDZBQzAwNjI2RjlEIC8qIEpTU2hh
ZG93Um9vdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NoYWRvd1Jvb3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEE0QTIzNDUxNEYxRTE0NDAwNDZGQkYx
IC8qIFdlYlNvY2tldEZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlNvY2tldEZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNkU5RkMxMTND
MTdEMUQwMDQ2QTdGOCAvKiBGb250RmVhdHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGZWF0dXJlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0QTZFOUZDMjEzQzE3RDFEMDA0NkE3RjggLyogRm9udEZlYXR1cmVWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RmVhdHVyZVZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNkU5RkM1MTNDMTdENTcwMDQ2QTdGOCAv
KiBGb250RmVhdHVyZVNldHRpbmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTQ4NDcsNiArMTQ4NDksNyBAQAogCQkJCTRBOTU3RjAzMTRFMjQxMTAwMDQ5REJGQiAv
KiBXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcCAqLywKIAkJCQk0QTk1N0YwNDE0RTI0
MTEwMDA0OURCRkIgLyogV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5oICovLAogCQkJCTRB
REUyNUY5MTRFM0JCNEMwMDRDMjIxMyAvKiBXZWJTb2NrZXRFeHRlbnNpb25Qcm9jZXNzb3IuaCAq
LywKKwkJCQk0QTRBMjM0NTE0RjFFMTQ0MDA0NkZCRjEgLyogV2ViU29ja2V0RnJhbWUuaCAqLywK
IAkJCQk1MUFCQUU0MjEwNDNBQjRBMDA4QzUyNjAgLyogV2ViU29ja2V0SGFuZHNoYWtlLmNwcCAq
LywKIAkJCQk1MUFCQUU0MzEwNDNBQjRBMDA4QzUyNjAgLyogV2ViU29ja2V0SGFuZHNoYWtlLmgg
Ki8sCiAJCQkJNzYzN0M1NDAxMTJFN0I3NDAwM0Q2Q0RDIC8qIFdlYlNvY2tldEhhbmRzaGFrZVJl
cXVlc3QuY3BwICovLApAQCAtMjQyMTIsNiArMjQyMTUsNyBAQAogCQkJCTRBRTAyQUJFMTRFOEE5
RDIwMEJDM0JBNyAvKiBXZWJTb2NrZXREZWZsYXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEE5
NTdGMDcxNEUyNDEzMDAwNDlEQkZCIC8qIFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTRBREUyNUZBMTRFM0JCNEMwMDRDMjIxMyAvKiBXZWJTb2NrZXRF
eHRlbnNpb25Qcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTRBNEEyMzQ2MTRGMUUxNDQw
MDQ2RkJGMSAvKiBXZWJTb2NrZXRGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFNDUx
MDQzQUI0QTAwOEM1MjYwIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzYzN0M1NDMxMTJFN0I3RTAwM0Q2Q0RDIC8qIFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc2N0Y5OUMwMTFBMTE5NTYwMDgwQzUxRCAvKiBXZWJTb2Nr
ZXRIYW5kc2hha2VSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwIGIvU291cmNlL1dlYkNvcmUv
d2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAppbmRleCA4NzI4ZTE2Y2M5ZmFlN2RmYzM1
MTA0MmE0MjM2YWUwYjM0NTJjM2I3Li4xYzQ3OGU2NzUyMzBmNGJkNzJmYjVjMzFjMDlhNGZlNzM2
NzQzYWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENo
YW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5l
bC5jcHAKQEAgLTgxLDEzICs4MSw2IEBAIGNvbnN0IHNpemVfdCBwYXlsb2FkTGVuZ3RoV2l0aFR3
b0J5dGVFeHRlbmRlZExlbmd0aEZpZWxkID0gMTI2OwogY29uc3Qgc2l6ZV90IHBheWxvYWRMZW5n
dGhXaXRoRWlnaHRCeXRlRXh0ZW5kZWRMZW5ndGhGaWVsZCA9IDEyNzsKIGNvbnN0IHNpemVfdCBt
YXNraW5nS2V5V2lkdGhJbkJ5dGVzID0gNDsKIAotY29uc3QgV2ViU29ja2V0Q2hhbm5lbDo6T3BD
b2RlIFdlYlNvY2tldENoYW5uZWw6Ok9wQ29kZUNvbnRpbnVhdGlvbiA9IDB4MDsKLWNvbnN0IFdl
YlNvY2tldENoYW5uZWw6Ok9wQ29kZSBXZWJTb2NrZXRDaGFubmVsOjpPcENvZGVUZXh0ID0gMHgx
OwotY29uc3QgV2ViU29ja2V0Q2hhbm5lbDo6T3BDb2RlIFdlYlNvY2tldENoYW5uZWw6Ok9wQ29k
ZUJpbmFyeSA9IDB4MjsKLWNvbnN0IFdlYlNvY2tldENoYW5uZWw6Ok9wQ29kZSBXZWJTb2NrZXRD
aGFubmVsOjpPcENvZGVDbG9zZSA9IDB4ODsKLWNvbnN0IFdlYlNvY2tldENoYW5uZWw6Ok9wQ29k
ZSBXZWJTb2NrZXRDaGFubmVsOjpPcENvZGVQaW5nID0gMHg5OwotY29uc3QgV2ViU29ja2V0Q2hh
bm5lbDo6T3BDb2RlIFdlYlNvY2tldENoYW5uZWw6Ok9wQ29kZVBvbmcgPSAweEE7Ci0KIFdlYlNv
Y2tldENoYW5uZWw6OldlYlNvY2tldENoYW5uZWwoRG9jdW1lbnQqIGRvY3VtZW50LCBXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAg
ICwgbV9jbGllbnQoY2xpZW50KQpAQCAtMTgzLDcgKzE3Niw3IEBAIGJvb2wgV2ViU29ja2V0Q2hh
bm5lbDo6c2VuZChjb25zdCBBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSkKIHsKICAgICBMT0coTmV0
d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAgc2VuZCBhcnJheWJ1ZmZlciAlcCIsIHRoaXMsICZi
aW5hcnlEYXRhKTsKICAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlByb3RvY29sKTsKLSAgICBlbnF1
ZXVlUmF3RnJhbWUoT3BDb2RlQmluYXJ5LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYmluYXJ5
RGF0YS5kYXRhKCkpLCBiaW5hcnlEYXRhLmJ5dGVMZW5ndGgoKSk7CisgICAgZW5xdWV1ZVJhd0Zy
YW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnksIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihiaW5hcnlEYXRhLmRhdGEoKSksIGJpbmFyeURhdGEuYnl0ZUxlbmd0aCgpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMTkxLDcgKzE4NCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6
c2VuZChjb25zdCBCbG9iJiBiaW5hcnlEYXRhKQogewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29j
a2V0Q2hhbm5lbCAlcCBzZW5kIGJsb2IgJXMiLCB0aGlzLCBiaW5hcnlEYXRhLnVybCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIEFTU0VSVCghbV91c2VIaXhpZTc2UHJvdG9jb2wpOwot
ICAgIGVucXVldWVCbG9iRnJhbWUoT3BDb2RlQmluYXJ5LCBiaW5hcnlEYXRhKTsKKyAgICBlbnF1
ZXVlQmxvYkZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnksIGJpbmFyeURhdGEpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xOTksNyArMTkyLDcgQEAgYm9vbCBXZWJTb2NrZXRD
aGFubmVsOjpzZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgTE9HKE5l
dHdvcmssICJXZWJTb2NrZXRDaGFubmVsICVwIHNlbmQgYmluYXJ5ICVwICglZEIpIiwgdGhpcywg
ZGF0YSwgbGVuZ3RoKTsKICAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlByb3RvY29sKTsKLSAgICBl
bnF1ZXVlUmF3RnJhbWUoT3BDb2RlQmluYXJ5LCBkYXRhLCBsZW5ndGgpOworICAgIGVucXVldWVS
YXdGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlQmluYXJ5LCBkYXRhLCBsZW5ndGgpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC01MjcsNyArNTIwLDcgQEAgdm9pZCBXZWJTb2NrZXRDaGFu
bmVsOjpzdGFydENsb3NpbmdIYW5kc2hha2UoaW50IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29u
KQogICAgICAgICAgICAgYnVmLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihsb3dCeXRlKSk7CiAg
ICAgICAgICAgICBidWYuYXBwZW5kKHJlYXNvbi51dGY4KCkuZGF0YSgpLCByZWFzb24udXRmOCgp
Lmxlbmd0aCgpKTsKICAgICAgICAgfQotICAgICAgICBlbnF1ZXVlUmF3RnJhbWUoT3BDb2RlQ2xv
c2UsIGJ1Zi5kYXRhKCksIGJ1Zi5zaXplKCkpOworICAgICAgICBlbnF1ZXVlUmF3RnJhbWUoV2Vi
U29ja2V0RnJhbWU6Ok9wQ29kZUNsb3NlLCBidWYuZGF0YSgpLCBidWYuc2l6ZSgpKTsKICAgICB9
CiAgICAgbV9jbG9zaW5nID0gdHJ1ZTsKICAgICBpZiAobV9jbGllbnQpCkBAIC01NDIsNyArNTM1
LDcgQEAgdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpjbG9zaW5nVGltZXJGaXJlZChUaW1lcjxXZWJT
b2NrZXRDaGFubmVsPiogdGltZXIpCiAgICAgICAgIG1faGFuZGxlLT5kaXNjb25uZWN0KCk7CiB9
CiAKLVdlYlNvY2tldENoYW5uZWw6OlBhcnNlRnJhbWVSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6
cGFyc2VGcmFtZShGcmFtZURhdGEmIGZyYW1lKQorV2ViU29ja2V0Q2hhbm5lbDo6UGFyc2VGcmFt
ZVJlc3VsdCBXZWJTb2NrZXRDaGFubmVsOjpwYXJzZUZyYW1lKFdlYlNvY2tldEZyYW1lJiBmcmFt
ZSwgY29uc3QgY2hhciomIGZyYW1lRW5kKQogewogICAgIGNvbnN0IGNoYXIqIHAgPSBtX2J1ZmZl
cjsKICAgICBjb25zdCBjaGFyKiBidWZmZXJFbmQgPSBtX2J1ZmZlciArIG1fYnVmZmVyU2l6ZTsK
QEAgLTU1Nyw3ICs1NTAsNyBAQCBXZWJTb2NrZXRDaGFubmVsOjpQYXJzZUZyYW1lUmVzdWx0IFdl
YlNvY2tldENoYW5uZWw6OnBhcnNlRnJhbWUoRnJhbWVEYXRhJiBmcmFtZQogICAgIGJvb2wgcmVz
ZXJ2ZWQxID0gZmlyc3RCeXRlICYgcmVzZXJ2ZWQxQml0OwogICAgIGJvb2wgcmVzZXJ2ZWQyID0g
Zmlyc3RCeXRlICYgcmVzZXJ2ZWQyQml0OwogICAgIGJvb2wgcmVzZXJ2ZWQzID0gZmlyc3RCeXRl
ICYgcmVzZXJ2ZWQzQml0OwotICAgIE9wQ29kZSBvcENvZGUgPSBmaXJzdEJ5dGUgJiBvcENvZGVN
YXNrOworICAgIHVuc2lnbmVkIGNoYXIgb3BDb2RlID0gZmlyc3RCeXRlICYgb3BDb2RlTWFzazsK
IAogICAgIGJvb2wgbWFza2VkID0gc2Vjb25kQnl0ZSAmIG1hc2tCaXQ7CiAgICAgdWludDY0X3Qg
cGF5bG9hZExlbmd0aDY0ID0gc2Vjb25kQnl0ZSAmIHBheWxvYWRMZW5ndGhNYXNrOwpAQCAtNjAx
LDcgKzU5NCw3IEBAIFdlYlNvY2tldENoYW5uZWw6OlBhcnNlRnJhbWVSZXN1bHQgV2ViU29ja2V0
Q2hhbm5lbDo6cGFyc2VGcmFtZShGcmFtZURhdGEmIGZyYW1lCiAgICAgICAgICAgICBwYXlsb2Fk
W2ldIF49IG1hc2tpbmdLZXlbaSAlIG1hc2tpbmdLZXlXaWR0aEluQnl0ZXNdOyAvLyBVbm1hc2sg
dGhlIHBheWxvYWQuCiAgICAgfQogCi0gICAgZnJhbWUub3BDb2RlID0gb3BDb2RlOworICAgIGZy
YW1lLm9wQ29kZSA9IHN0YXRpY19jYXN0PFdlYlNvY2tldEZyYW1lOjpPcENvZGU+KG9wQ29kZSk7
CiAgICAgZnJhbWUuZmluYWwgPSBmaW5hbDsKICAgICBmcmFtZS5yZXNlcnZlZDEgPSByZXNlcnZl
ZDE7CiAgICAgZnJhbWUucmVzZXJ2ZWQyID0gcmVzZXJ2ZWQyOwpAQCAtNjA5LDcgKzYwMiw3IEBA
IFdlYlNvY2tldENoYW5uZWw6OlBhcnNlRnJhbWVSZXN1bHQgV2ViU29ja2V0Q2hhbm5lbDo6cGFy
c2VGcmFtZShGcmFtZURhdGEmIGZyYW1lCiAgICAgZnJhbWUubWFza2VkID0gbWFza2VkOwogICAg
IGZyYW1lLnBheWxvYWQgPSBwICsgbWFza2luZ0tleUxlbmd0aDsKICAgICBmcmFtZS5wYXlsb2Fk
TGVuZ3RoID0gcGF5bG9hZExlbmd0aDsKLSAgICBmcmFtZS5mcmFtZUVuZCA9IHAgKyBtYXNraW5n
S2V5TGVuZ3RoICsgcGF5bG9hZExlbmd0aDsKKyAgICBmcmFtZUVuZCA9IHAgKyBtYXNraW5nS2V5
TGVuZ3RoICsgcGF5bG9hZExlbmd0aDsKICAgICByZXR1cm4gRnJhbWVPSzsKIH0KIApAQCAtNjE3
LDEyICs2MTAsMTYgQEAgYm9vbCBXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzRnJhbWUoKQogewog
ICAgIEFTU0VSVChtX2J1ZmZlcik7CiAKLSAgICBGcmFtZURhdGEgZnJhbWU7Ci0gICAgaWYgKHBh
cnNlRnJhbWUoZnJhbWUpICE9IEZyYW1lT0spCisgICAgV2ViU29ja2V0RnJhbWUgZnJhbWU7Cisg
ICAgY29uc3QgY2hhciogZnJhbWVFbmQ7CisgICAgaWYgKHBhcnNlRnJhbWUoZnJhbWUsIGZyYW1l
RW5kKSAhPSBGcmFtZU9LKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBBU1NFUlQobV9i
dWZmZXIgPCBmcmFtZUVuZCk7CisgICAgQVNTRVJUKGZyYW1lRW5kIDw9IG1fYnVmZmVyICsgbV9i
dWZmZXJTaXplKTsKKwogICAgIC8vIFZhbGlkYXRlIHRoZSBmcmFtZSBkYXRhLgotICAgIGlmIChp
c1Jlc2VydmVkT3BDb2RlKGZyYW1lLm9wQ29kZSkpIHsKKyAgICBpZiAoV2ViU29ja2V0RnJhbWU6
OmlzUmVzZXJ2ZWRPcENvZGUoZnJhbWUub3BDb2RlKSkgewogICAgICAgICBmYWlsKCJVbnJlY29n
bml6ZWQgZnJhbWUgb3Bjb2RlOiAiICsgU3RyaW5nOjpudW1iZXIoZnJhbWUub3BDb2RlKSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC02MzMsMzQgKzYzMCwzNCBAQCBib29sIFdl
YlNvY2tldENoYW5uZWw6OnByb2Nlc3NGcmFtZSgpCiAgICAgfQogCiAgICAgLy8gQWxsIGNvbnRy
b2wgZnJhbWVzIG11c3Qgbm90IGJlIGZyYWdtZW50ZWQuCi0gICAgaWYgKGlzQ29udHJvbE9wQ29k
ZShmcmFtZS5vcENvZGUpICYmICFmcmFtZS5maW5hbCkgeworICAgIGlmIChXZWJTb2NrZXRGcmFt
ZTo6aXNDb250cm9sT3BDb2RlKGZyYW1lLm9wQ29kZSkgJiYgIWZyYW1lLmZpbmFsKSB7CiAgICAg
ICAgIGZhaWwoIlJlY2VpdmVkIGZyYWdtZW50ZWQgY29udHJvbCBmcmFtZTogb3Bjb2RlID0gIiAr
IFN0cmluZzo6bnVtYmVyKGZyYW1lLm9wQ29kZSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCiAgICAgLy8gQWxsIGNvbnRyb2wgZnJhbWVzIG11c3QgaGF2ZSBhIHBheWxvYWQgb2Yg
MTI1IGJ5dGVzIG9yIGxlc3MsIHdoaWNoIG1lYW5zIHRoZSBmcmFtZSBtdXN0IG5vdCBjb250YWlu
CiAgICAgLy8gdGhlICJleHRlbmRlZCBwYXlsb2FkIGxlbmd0aCIgZmllbGQuCi0gICAgaWYgKGlz
Q29udHJvbE9wQ29kZShmcmFtZS5vcENvZGUpICYmIGZyYW1lLnBheWxvYWRMZW5ndGggPiBtYXhQ
YXlsb2FkTGVuZ3RoV2l0aG91dEV4dGVuZGVkTGVuZ3RoRmllbGQpIHsKKyAgICBpZiAoV2ViU29j
a2V0RnJhbWU6OmlzQ29udHJvbE9wQ29kZShmcmFtZS5vcENvZGUpICYmIGZyYW1lLnBheWxvYWRM
ZW5ndGggPiBtYXhQYXlsb2FkTGVuZ3RoV2l0aG91dEV4dGVuZGVkTGVuZ3RoRmllbGQpIHsKICAg
ICAgICAgZmFpbCgiUmVjZWl2ZWQgY29udHJvbCBmcmFtZSBoYXZpbmcgdG9vIGxvbmcgcGF5bG9h
ZDogIiArIFN0cmluZzo6bnVtYmVyKGZyYW1lLnBheWxvYWRMZW5ndGgpICsgIiBieXRlcyIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gQSBuZXcgZGF0YSBmcmFtZSBp
cyByZWNlaXZlZCBiZWZvcmUgdGhlIHByZXZpb3VzIGNvbnRpbnVvdXMgZnJhbWUgZmluaXNoZXMu
CiAgICAgLy8gTm90ZSB0aGF0IGNvbnRyb2wgZnJhbWVzIGFyZSBhbGxvd2VkIHRvIGNvbWUgaW4g
dGhlIG1pZGRsZSBvZiBjb250aW51b3VzIGZyYW1lcy4KLSAgICBpZiAobV9oYXNDb250aW51b3Vz
RnJhbWUgJiYgZnJhbWUub3BDb2RlICE9IE9wQ29kZUNvbnRpbnVhdGlvbiAmJiAhaXNDb250cm9s
T3BDb2RlKGZyYW1lLm9wQ29kZSkpIHsKKyAgICBpZiAobV9oYXNDb250aW51b3VzRnJhbWUgJiYg
ZnJhbWUub3BDb2RlICE9IFdlYlNvY2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb24gJiYgIVdl
YlNvY2tldEZyYW1lOjppc0NvbnRyb2xPcENvZGUoZnJhbWUub3BDb2RlKSkgewogICAgICAgICBm
YWlsKCJSZWNlaXZlZCBuZXcgZGF0YSBmcmFtZSBidXQgcHJldmlvdXMgY29udGludW91cyBmcmFt
ZSBpcyB1bmZpbmlzaGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
c3dpdGNoIChmcmFtZS5vcENvZGUpIHsKLSAgICBjYXNlIE9wQ29kZUNvbnRpbnVhdGlvbjoKKyAg
ICBjYXNlIFdlYlNvY2tldEZyYW1lOjpPcENvZGVDb250aW51YXRpb246CiAgICAgICAgIC8vIEFu
IHVuZXhwZWN0ZWQgY29udGludWF0aW9uIGZyYW1lIGlzIHJlY2VpdmVkIHdpdGhvdXQgYW55IGxl
YWRpbmcgZnJhbWUuCiAgICAgICAgIGlmICghbV9oYXNDb250aW51b3VzRnJhbWUpIHsKICAgICAg
ICAgICAgIGZhaWwoIlJlY2VpdmVkIHVuZXhwZWN0ZWQgY29udGludWF0aW9uIGZyYW1lLiIpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIG1fY29udGludW91
c0ZyYW1lRGF0YS5hcHBlbmQoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCk7Ci0g
ICAgICAgIHNraXBCdWZmZXIoZnJhbWUuZnJhbWVFbmQgLSBtX2J1ZmZlcik7CisgICAgICAgIHNr
aXBCdWZmZXIoZnJhbWVFbmQgLSBtX2J1ZmZlcik7CiAgICAgICAgIGlmIChmcmFtZS5maW5hbCkg
ewogICAgICAgICAgICAgLy8gb25tZXNzYWdlIGhhbmRsZXIgbWF5IGV2ZW50dWFsbHkgY2FsbCB0
aGUgb3RoZXIgbWV0aG9kcyBvZiB0aGlzIGNoYW5uZWwsCiAgICAgICAgICAgICAvLyBzbyB3ZSBz
aG91bGQgcHJldGVuZCB0aGF0IHdlIGhhdmUgZmluaXNoZWQgdG8gcmVhZCB0aGlzIGZyYW1lIGFu
ZApAQCAtNjcwLDcgKzY2Nyw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0ZyYW1l
KCkKICAgICAgICAgICAgIE93blB0cjxWZWN0b3I8Y2hhcj4gPiBjb250aW51b3VzRnJhbWVEYXRh
ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxjaGFyPik7CiAgICAgICAgICAgICBtX2NvbnRpbnVvdXNG
cmFtZURhdGEuc3dhcCgqY29udGludW91c0ZyYW1lRGF0YSk7CiAgICAgICAgICAgICBtX2hhc0Nv
bnRpbnVvdXNGcmFtZSA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKG1fY29udGludW91c0ZyYW1l
T3BDb2RlID09IE9wQ29kZVRleHQpIHsKKyAgICAgICAgICAgIGlmIChtX2NvbnRpbnVvdXNGcmFt
ZU9wQ29kZSA9PSBXZWJTb2NrZXRGcmFtZTo6T3BDb2RlVGV4dCkgewogICAgICAgICAgICAgICAg
IFN0cmluZyBtZXNzYWdlOwogICAgICAgICAgICAgICAgIGlmIChjb250aW51b3VzRnJhbWVEYXRh
LT5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4
KGNvbnRpbnVvdXNGcmFtZURhdGEtPmRhdGEoKSwgY29udGludW91c0ZyYW1lRGF0YS0+c2l6ZSgp
KTsKQEAgLTY4MCw0OCArNjc3LDQ4IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0Zy
YW1lKCkKICAgICAgICAgICAgICAgICAgICAgZmFpbCgiQ291bGQgbm90IGRlY29kZSBhIHRleHQg
ZnJhbWUgYXMgVVRGLTguIik7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKG1fY29udGludW91c0ZyYW1lT3BDb2RlID09IE9wQ29kZUJpbmFyeSkKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9jb250aW51b3VzRnJhbWVPcENvZGUgPT0gV2ViU29ja2V0RnJh
bWU6Ok9wQ29kZUJpbmFyeSkKICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJp
bmFyeURhdGEoY29udGludW91c0ZyYW1lRGF0YS5yZWxlYXNlKCkpOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogCi0gICAgY2FzZSBPcENvZGVUZXh0OgorICAgIGNhc2UgV2ViU29ja2V0RnJh
bWU6Ok9wQ29kZVRleHQ6CiAgICAgICAgIGlmIChmcmFtZS5maW5hbCkgewogICAgICAgICAgICAg
U3RyaW5nIG1lc3NhZ2U7CiAgICAgICAgICAgICBpZiAoZnJhbWUucGF5bG9hZExlbmd0aCkKICAg
ICAgICAgICAgICAgICBtZXNzYWdlID0gU3RyaW5nOjpmcm9tVVRGOChmcmFtZS5wYXlsb2FkLCBm
cmFtZS5wYXlsb2FkTGVuZ3RoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBt
ZXNzYWdlID0gIiI7Ci0gICAgICAgICAgICBza2lwQnVmZmVyKGZyYW1lLmZyYW1lRW5kIC0gbV9i
dWZmZXIpOworICAgICAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVmZmVyKTsKICAg
ICAgICAgICAgIGlmIChtZXNzYWdlLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGZhaWwoIkNv
dWxkIG5vdCBkZWNvZGUgYSB0ZXh0IGZyYW1lIGFzIFVURi04LiIpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZShtZXNzYWdlKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1faGFzQ29udGludW91c0ZyYW1lID0gdHJ1
ZTsKLSAgICAgICAgICAgIG1fY29udGludW91c0ZyYW1lT3BDb2RlID0gT3BDb2RlVGV4dDsKKyAg
ICAgICAgICAgIG1fY29udGludW91c0ZyYW1lT3BDb2RlID0gV2ViU29ja2V0RnJhbWU6Ok9wQ29k
ZVRleHQ7CiAgICAgICAgICAgICBBU1NFUlQobV9jb250aW51b3VzRnJhbWVEYXRhLmlzRW1wdHko
KSk7CiAgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZURhdGEuYXBwZW5kKGZyYW1lLnBheWxv
YWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpOwotICAgICAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5m
cmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAgICAgICAgICAgIHNraXBCdWZmZXIoZnJhbWVFbmQgLSBt
X2J1ZmZlcik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIE9wQ29kZUJp
bmFyeToKKyAgICBjYXNlIFdlYlNvY2tldEZyYW1lOjpPcENvZGVCaW5hcnk6CiAgICAgICAgIGlm
IChmcmFtZS5maW5hbCkgewogICAgICAgICAgICAgT3duUHRyPFZlY3RvcjxjaGFyPiA+IGJpbmFy
eURhdGEgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGNoYXI+KGZyYW1lLnBheWxvYWRMZW5ndGgpKTsK
ICAgICAgICAgICAgIG1lbWNweShiaW5hcnlEYXRhLT5kYXRhKCksIGZyYW1lLnBheWxvYWQsIGZy
YW1lLnBheWxvYWRMZW5ndGgpOwotICAgICAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVu
ZCAtIG1fYnVmZmVyKTsKKyAgICAgICAgICAgIHNraXBCdWZmZXIoZnJhbWVFbmQgLSBtX2J1ZmZl
cik7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJpbmFyeURhdGEoYmluYXJ5RGF0
YS5yZWxlYXNlKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9oYXNDb250aW51
b3VzRnJhbWUgPSB0cnVlOwotICAgICAgICAgICAgbV9jb250aW51b3VzRnJhbWVPcENvZGUgPSBP
cENvZGVCaW5hcnk7CisgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZSA9IFdlYlNv
Y2tldEZyYW1lOjpPcENvZGVCaW5hcnk7CiAgICAgICAgICAgICBBU1NFUlQobV9jb250aW51b3Vz
RnJhbWVEYXRhLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICBtX2NvbnRpbnVvdXNGcmFtZURhdGEu
YXBwZW5kKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpOwotICAgICAgICAgICAg
c2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAgICAgICAgICAgIHNraXBC
dWZmZXIoZnJhbWVFbmQgLSBtX2J1ZmZlcik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAK
LSAgICBjYXNlIE9wQ29kZUNsb3NlOgorICAgIGNhc2UgV2ViU29ja2V0RnJhbWU6Ok9wQ29kZUNs
b3NlOgogICAgICAgICBpZiAoZnJhbWUucGF5bG9hZExlbmd0aCA+PSAyKSB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIGhpZ2hCeXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZnJh
bWUucGF5bG9hZFswXSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxvd0J5dGUgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihmcmFtZS5wYXlsb2FkWzFdKTsKQEAgLTczMiw3ICs3Mjks
NyBAQCBib29sIFdlYlNvY2tldENoYW5uZWw6OnByb2Nlc3NGcmFtZSgpCiAgICAgICAgICAgICBt
X2Nsb3NlRXZlbnRSZWFzb24gPSBTdHJpbmc6OmZyb21VVEY4KCZmcmFtZS5wYXlsb2FkWzJdLCBm
cmFtZS5wYXlsb2FkTGVuZ3RoIC0gMik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fY2xv
c2VFdmVudFJlYXNvbiA9ICIiOwotICAgICAgICBza2lwQnVmZmVyKGZyYW1lLmZyYW1lRW5kIC0g
bV9idWZmZXIpOworICAgICAgICBza2lwQnVmZmVyKGZyYW1lRW5kIC0gbV9idWZmZXIpOwogICAg
ICAgICBtX3JlY2VpdmVkQ2xvc2luZ0hhbmRzaGFrZSA9IHRydWU7CiAgICAgICAgIHN0YXJ0Q2xv
c2luZ0hhbmRzaGFrZShtX2Nsb3NlRXZlbnRDb2RlLCBtX2Nsb3NlRXZlbnRSZWFzb24pOwogICAg
ICAgICBpZiAobV9jbG9zaW5nKSB7CkBAIC03NDEsMjAgKzczOCwyMCBAQCBib29sIFdlYlNvY2tl
dENoYW5uZWw6OnByb2Nlc3NGcmFtZSgpCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAg
ICBjYXNlIE9wQ29kZVBpbmc6Ci0gICAgICAgIGVucXVldWVSYXdGcmFtZShPcENvZGVQb25nLCBm
cmFtZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKTsKLSAgICAgICAgc2tpcEJ1ZmZlcihm
cmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAgICBjYXNlIFdlYlNvY2tldEZyYW1lOjpPcENv
ZGVQaW5nOgorICAgICAgICBlbnF1ZXVlUmF3RnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZVBv
bmcsIGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpOworICAgICAgICBza2lwQnVm
ZmVyKGZyYW1lRW5kIC0gbV9idWZmZXIpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgT3BD
b2RlUG9uZzoKKyAgICBjYXNlIFdlYlNvY2tldEZyYW1lOjpPcENvZGVQb25nOgogICAgICAgICAv
LyBBIHNlcnZlciBtYXkgc2VuZCBhIHBvbmcgaW4gcmVzcG9uc2UgdG8gb3VyIHBpbmcsIG9yIGFu
IHVuc29saWNpdGVkIHBvbmcgd2hpY2ggaXMgbm90IGFzc29jaWF0ZWQgd2l0aAogICAgICAgICAv
LyBhbnkgc3BlY2lmaWMgcGluZy4gRWl0aGVyIHdheSwgdGhlcmUncyBub3RoaW5nIHRvIGRvIG9u
IHJlY2VpcHQgb2YgcG9uZy4KLSAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1f
YnVmZmVyKTsKKyAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVmZmVyKTsKICAgICAg
ICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgc2tpcEJ1ZmZlcihmcmFtZS5mcmFtZUVuZCAtIG1fYnVmZmVyKTsKKyAgICAgICAg
c2tpcEJ1ZmZlcihmcmFtZUVuZCAtIG1fYnVmZmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC04NTUsMTQgKzg1MiwxNCBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmVucXVldWVUZXh0
RnJhbWUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgQVNTRVJUKCFtX3VzZUhpeGllNzZQcm90
b2NvbCk7CiAgICAgQVNTRVJUKG1fb3V0Z29pbmdGcmFtZVF1ZXVlU3RhdHVzID09IE91dGdvaW5n
RnJhbWVRdWV1ZU9wZW4pOwogICAgIE93blB0cjxRdWV1ZWRGcmFtZT4gZnJhbWUgPSBhZG9wdFB0
cihuZXcgUXVldWVkRnJhbWUpOwotICAgIGZyYW1lLT5vcENvZGUgPSBPcENvZGVUZXh0OworICAg
IGZyYW1lLT5vcENvZGUgPSBXZWJTb2NrZXRGcmFtZTo6T3BDb2RlVGV4dDsKICAgICBmcmFtZS0+
ZnJhbWVUeXBlID0gUXVldWVkRnJhbWVUeXBlU3RyaW5nOwogICAgIGZyYW1lLT5zdHJpbmdEYXRh
ID0gc3RyaW5nOwogICAgIG1fb3V0Z29pbmdGcmFtZVF1ZXVlLmFwcGVuZChmcmFtZS5yZWxlYXNl
KCkpOwogICAgIHByb2Nlc3NPdXRnb2luZ0ZyYW1lUXVldWUoKTsKIH0KIAotdm9pZCBXZWJTb2Nr
ZXRDaGFubmVsOjplbnF1ZXVlUmF3RnJhbWUoT3BDb2RlIG9wQ29kZSwgY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGRhdGFMZW5ndGgpCit2b2lkIFdlYlNvY2tldENoYW5uZWw6OmVucXVldWVSYXdG
cmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2RlIG9wQ29kZSwgY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IGRhdGFMZW5ndGgpCiB7CiAgICAgQVNTRVJUKCFtX3VzZUhpeGllNzZQcm90b2NvbCk7CiAg
ICAgQVNTRVJUKG1fb3V0Z29pbmdGcmFtZVF1ZXVlU3RhdHVzID09IE91dGdvaW5nRnJhbWVRdWV1
ZU9wZW4pOwpAQCAtODc2LDcgKzg3Myw3IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZW5xdWV1
ZVJhd0ZyYW1lKE9wQ29kZSBvcENvZGUsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkCiAgICAg
cHJvY2Vzc091dGdvaW5nRnJhbWVRdWV1ZSgpOwogfQogCi12b2lkIFdlYlNvY2tldENoYW5uZWw6
OmVucXVldWVCbG9iRnJhbWUoT3BDb2RlIG9wQ29kZSwgY29uc3QgQmxvYiYgYmxvYikKK3ZvaWQg
V2ViU29ja2V0Q2hhbm5lbDo6ZW5xdWV1ZUJsb2JGcmFtZShXZWJTb2NrZXRGcmFtZTo6T3BDb2Rl
IG9wQ29kZSwgY29uc3QgQmxvYiYgYmxvYikKIHsKICAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlBy
b3RvY29sKTsKICAgICBBU1NFUlQobV9vdXRnb2luZ0ZyYW1lUXVldWVTdGF0dXMgPT0gT3V0Z29p
bmdGcmFtZVF1ZXVlT3Blbik7CkBAIC05NjcsNDQgKzk2NCw1NSBAQCB2b2lkIFdlYlNvY2tldENo
YW5uZWw6OmFib3J0T3V0Z29pbmdGcmFtZVF1ZXVlKCkKICNlbmRpZgogfQogCi1ib29sIFdlYlNv
Y2tldENoYW5uZWw6OnNlbmRGcmFtZShPcENvZGUgb3BDb2RlLCBjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3QgZGF0YUxlbmd0aCkKK3N0YXRpYyB2b2lkIGFwcGVuZE1hc2tlZEZyYW1lUGF5bG9hZChj
b25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUsIFZlY3RvcjxjaGFyPiYgZnJhbWVEYXRhKQogewot
ICAgIEFTU0VSVChtX2hhbmRsZSk7Ci0gICAgQVNTRVJUKCFtX3N1c3BlbmRlZCk7CisgICAgc2l6
ZV90IG1hc2tpbmdLZXlTdGFydCA9IGZyYW1lRGF0YS5zaXplKCk7CisgICAgZnJhbWVEYXRhLmdy
b3coZnJhbWVEYXRhLnNpemUoKSArIG1hc2tpbmdLZXlXaWR0aEluQnl0ZXMpOyAvLyBBZGQgcGxh
Y2Vob2xkZXIgZm9yIG1hc2tpbmcga2V5LiBXaWxsIGJlIG92ZXJ3cml0dGVuLgorICAgIHNpemVf
dCBwYXlsb2FkU3RhcnQgPSBmcmFtZURhdGEuc2l6ZSgpOworICAgIGZyYW1lRGF0YS5hcHBlbmQo
ZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCk7CisKKyAgICBjcnlwdG9ncmFwaGlj
YWxseVJhbmRvbVZhbHVlcyhmcmFtZURhdGEuZGF0YSgpICsgbWFza2luZ0tleVN0YXJ0LCBtYXNr
aW5nS2V5V2lkdGhJbkJ5dGVzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lLnBh
eWxvYWRMZW5ndGg7ICsraSkKKyAgICAgICAgZnJhbWVEYXRhW3BheWxvYWRTdGFydCArIGldIF49
IGZyYW1lRGF0YVttYXNraW5nS2V5U3RhcnQgKyBpICUgbWFza2luZ0tleVdpZHRoSW5CeXRlc107
Cit9CiAKLSAgICBWZWN0b3I8Y2hhcj4gZnJhbWU7Ci0gICAgQVNTRVJUKCEob3BDb2RlICYgfm9w
Q29kZU1hc2spKTsgLy8gQ2hlY2tzIHdoZXRoZXIgIm9wQ29kZSIgZml0cyBpbiB0aGUgcmFuZ2Ug
b2Ygb3BDb2Rlcy4KLSAgICBmcmFtZS5hcHBlbmQoZmluYWxCaXQgfCBvcENvZGUpOwotICAgIGlm
IChkYXRhTGVuZ3RoIDw9IG1heFBheWxvYWRMZW5ndGhXaXRob3V0RXh0ZW5kZWRMZW5ndGhGaWVs
ZCkKLSAgICAgICAgZnJhbWUuYXBwZW5kKG1hc2tCaXQgfCBkYXRhTGVuZ3RoKTsKLSAgICBlbHNl
IGlmIChkYXRhTGVuZ3RoIDw9IDB4RkZGRikgewotICAgICAgICBmcmFtZS5hcHBlbmQobWFza0Jp
dCB8IHBheWxvYWRMZW5ndGhXaXRoVHdvQnl0ZUV4dGVuZGVkTGVuZ3RoRmllbGQpOwotICAgICAg
ICBmcmFtZS5hcHBlbmQoKGRhdGFMZW5ndGggJiAweEZGMDApID4+IDgpOwotICAgICAgICBmcmFt
ZS5hcHBlbmQoZGF0YUxlbmd0aCAmIDB4RkYpOworc3RhdGljIHZvaWQgbWFrZUZyYW1lRGF0YShj
b25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUsIFZlY3RvcjxjaGFyPiYgZnJhbWVEYXRhKQorewor
ICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RCeXRlID0gKGZyYW1lLmZpbmFsID8gZmluYWxCaXQgOiAw
KSB8IGZyYW1lLm9wQ29kZTsKKyAgICBmcmFtZURhdGEuYXBwZW5kKGZpcnN0Qnl0ZSk7CisgICAg
aWYgKGZyYW1lLnBheWxvYWRMZW5ndGggPD0gbWF4UGF5bG9hZExlbmd0aFdpdGhvdXRFeHRlbmRl
ZExlbmd0aEZpZWxkKQorICAgICAgICBmcmFtZURhdGEuYXBwZW5kKG1hc2tCaXQgfCBmcmFtZS5w
YXlsb2FkTGVuZ3RoKTsKKyAgICBlbHNlIGlmIChmcmFtZS5wYXlsb2FkTGVuZ3RoIDw9IDB4RkZG
RikgeworICAgICAgICBmcmFtZURhdGEuYXBwZW5kKG1hc2tCaXQgfCBwYXlsb2FkTGVuZ3RoV2l0
aFR3b0J5dGVFeHRlbmRlZExlbmd0aEZpZWxkKTsKKyAgICAgICAgZnJhbWVEYXRhLmFwcGVuZCgo
ZnJhbWUucGF5bG9hZExlbmd0aCAmIDB4RkYwMCkgPj4gOCk7CisgICAgICAgIGZyYW1lRGF0YS5h
cHBlbmQoZnJhbWUucGF5bG9hZExlbmd0aCAmIDB4RkYpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGZyYW1lLmFwcGVuZChtYXNrQml0IHwgcGF5bG9hZExlbmd0aFdpdGhFaWdodEJ5dGVFeHRlbmRl
ZExlbmd0aEZpZWxkKTsKKyAgICAgICAgZnJhbWVEYXRhLmFwcGVuZChtYXNrQml0IHwgcGF5bG9h
ZExlbmd0aFdpdGhFaWdodEJ5dGVFeHRlbmRlZExlbmd0aEZpZWxkKTsKICAgICAgICAgY2hhciBl
eHRlbmRlZFBheWxvYWRMZW5ndGhbOF07Ci0gICAgICAgIHNpemVfdCByZW1haW5pbmcgPSBkYXRh
TGVuZ3RoOworICAgICAgICBzaXplX3QgcmVtYWluaW5nID0gZnJhbWUucGF5bG9hZExlbmd0aDsK
ICAgICAgICAgLy8gRmlsbCB0aGUgbGVuZ3RoIGludG8gZXh0ZW5kZWRQYXlsb2FkTGVuZ3RoIGlu
IHRoZSBuZXR3b3JrIGJ5dGUgb3JkZXIuCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsg
KytpKSB7CiAgICAgICAgICAgICBleHRlbmRlZFBheWxvYWRMZW5ndGhbNyAtIGldID0gcmVtYWlu
aW5nICYgMHhGRjsKICAgICAgICAgICAgIHJlbWFpbmluZyA+Pj0gODsKICAgICAgICAgfQogICAg
ICAgICBBU1NFUlQoIXJlbWFpbmluZyk7Ci0gICAgICAgIGZyYW1lLmFwcGVuZChleHRlbmRlZFBh
eWxvYWRMZW5ndGgsIDgpOworICAgICAgICBmcmFtZURhdGEuYXBwZW5kKGV4dGVuZGVkUGF5bG9h
ZExlbmd0aCwgOCk7CiAgICAgfQogCi0gICAgLy8gTWFzayB0aGUgZnJhbWUuCi0gICAgc2l6ZV90
IG1hc2tpbmdLZXlTdGFydCA9IGZyYW1lLnNpemUoKTsKLSAgICBmcmFtZS5ncm93KGZyYW1lLnNp
emUoKSArIG1hc2tpbmdLZXlXaWR0aEluQnl0ZXMpOyAvLyBBZGQgcGxhY2Vob2xkZXIgZm9yIG1h
c2tpbmcga2V5LiBXaWxsIGJlIG92ZXJ3cml0dGVuLgotICAgIHNpemVfdCBwYXlsb2FkU3RhcnQg
PSBmcmFtZS5zaXplKCk7Ci0gICAgZnJhbWUuYXBwZW5kKGRhdGEsIGRhdGFMZW5ndGgpOworICAg
IGFwcGVuZE1hc2tlZEZyYW1lUGF5bG9hZChmcmFtZSwgZnJhbWVEYXRhKTsKK30KKworYm9vbCBX
ZWJTb2NrZXRDaGFubmVsOjpzZW5kRnJhbWUoV2ViU29ja2V0RnJhbWU6Ok9wQ29kZSBvcENvZGUs
IGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQoreworICAgIEFTU0VSVChtX2hh
bmRsZSk7CisgICAgQVNTRVJUKCFtX3N1c3BlbmRlZCk7CiAKLSAgICBjcnlwdG9ncmFwaGljYWxs
eVJhbmRvbVZhbHVlcyhmcmFtZS5kYXRhKCkgKyBtYXNraW5nS2V5U3RhcnQsIG1hc2tpbmdLZXlX
aWR0aEluQnl0ZXMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytp
KQotICAgICAgICBmcmFtZVtwYXlsb2FkU3RhcnQgKyBpXSBePSBmcmFtZVttYXNraW5nS2V5U3Rh
cnQgKyBpICUgbWFza2luZ0tleVdpZHRoSW5CeXRlc107CisgICAgQVNTRVJUKCEob3BDb2RlICYg
fm9wQ29kZU1hc2spKTsgLy8gQ2hlY2tzIHdoZXRoZXIgIm9wQ29kZSIgZml0cyBpbiB0aGUgcmFu
Z2Ugb2Ygb3BDb2Rlcy4KKyAgICBXZWJTb2NrZXRGcmFtZSBmcmFtZShvcENvZGUsIHRydWUsIHRy
dWUsIGRhdGEsIGRhdGFMZW5ndGgpOworICAgIFZlY3RvcjxjaGFyPiBmcmFtZURhdGE7CisgICAg
bWFrZUZyYW1lRGF0YShmcmFtZSwgZnJhbWVEYXRhKTsKIAotICAgIHJldHVybiBtX2hhbmRsZS0+
c2VuZChmcmFtZS5kYXRhKCksIGZyYW1lLnNpemUoKSk7CisgICAgcmV0dXJuIG1faGFuZGxlLT5z
ZW5kKGZyYW1lRGF0YS5kYXRhKCksIGZyYW1lRGF0YS5zaXplKCkpOwogfQogCiBib29sIFdlYlNv
Y2tldENoYW5uZWw6OnNlbmRGcmFtZUhpeGllNzYoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRh
dGFMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dENoYW5uZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5o
CmluZGV4IDczZmM1MmRhNGUzZDYwY2MxZjE1ZjBiMWI0MDFiODM4MTM4OGZlZGMuLjRiYjI4Yzlm
MmIwNWFmMzQ5OTdiZTA3YTYyZjEyYmM0ZTk4MzU4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAi
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWwuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldlYlNvY2tldEZyYW1l
LmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0SGFuZHNoYWtlLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVl
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTEyOCwzOCArMTI5LDEzIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzdGFydENsb3NpbmdIYW5kc2hha2UoaW50IGNvZGUsIGNvbnN0IFN0cmlu
ZyYgcmVhc29uKTsKICAgICB2b2lkIGNsb3NpbmdUaW1lckZpcmVkKFRpbWVyPFdlYlNvY2tldENo
YW5uZWw+Kik7CiAKLSAgICAvLyBIeWJpLTEwIG9wY29kZXMuCi0gICAgdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgT3BDb2RlOwotICAgIHN0YXRpYyBjb25zdCBPcENvZGUgT3BDb2RlQ29udGludWF0aW9u
OwotICAgIHN0YXRpYyBjb25zdCBPcENvZGUgT3BDb2RlVGV4dDsKLSAgICBzdGF0aWMgY29uc3Qg
T3BDb2RlIE9wQ29kZUJpbmFyeTsKLSAgICBzdGF0aWMgY29uc3QgT3BDb2RlIE9wQ29kZUNsb3Nl
OwotICAgIHN0YXRpYyBjb25zdCBPcENvZGUgT3BDb2RlUGluZzsKLSAgICBzdGF0aWMgY29uc3Qg
T3BDb2RlIE9wQ29kZVBvbmc7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc05vbkNvbnRyb2xPcENvZGUo
T3BDb2RlIG9wQ29kZSkgeyByZXR1cm4gb3BDb2RlID09IE9wQ29kZUNvbnRpbnVhdGlvbiB8fCBv
cENvZGUgPT0gT3BDb2RlVGV4dCB8fCBvcENvZGUgPT0gT3BDb2RlQmluYXJ5OyB9Ci0gICAgc3Rh
dGljIGJvb2wgaXNDb250cm9sT3BDb2RlKE9wQ29kZSBvcENvZGUpIHsgcmV0dXJuIG9wQ29kZSA9
PSBPcENvZGVDbG9zZSB8fCBvcENvZGUgPT0gT3BDb2RlUGluZyB8fCBvcENvZGUgPT0gT3BDb2Rl
UG9uZzsgfQotICAgIHN0YXRpYyBib29sIGlzUmVzZXJ2ZWRPcENvZGUoT3BDb2RlIG9wQ29kZSkg
eyByZXR1cm4gIWlzTm9uQ29udHJvbE9wQ29kZShvcENvZGUpICYmICFpc0NvbnRyb2xPcENvZGUo
b3BDb2RlKTsgfQotCiAgICAgZW51bSBQYXJzZUZyYW1lUmVzdWx0IHsKICAgICAgICAgRnJhbWVP
SywKICAgICAgICAgRnJhbWVJbmNvbXBsZXRlLAogICAgICAgICBGcmFtZUVycm9yCiAgICAgfTsK
IAotICAgIHN0cnVjdCBGcmFtZURhdGEgewotICAgICAgICBPcENvZGUgb3BDb2RlOwotICAgICAg
ICBib29sIGZpbmFsOwotICAgICAgICBib29sIHJlc2VydmVkMTsKLSAgICAgICAgYm9vbCByZXNl
cnZlZDI7Ci0gICAgICAgIGJvb2wgcmVzZXJ2ZWQzOwotICAgICAgICBib29sIG1hc2tlZDsKLSAg
ICAgICAgY29uc3QgY2hhciogcGF5bG9hZDsKLSAgICAgICAgc2l6ZV90IHBheWxvYWRMZW5ndGg7
Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZyYW1lRW5kOwotICAgIH07Ci0KLSAgICBQYXJzZUZyYW1l
UmVzdWx0IHBhcnNlRnJhbWUoRnJhbWVEYXRhJik7IC8vIE1heSBtb2RpZnkgcGFydCBvZiBtX2J1
ZmZlciB0byB1bm1hc2sgdGhlIGZyYW1lLgorICAgIFBhcnNlRnJhbWVSZXN1bHQgcGFyc2VGcmFt
ZShXZWJTb2NrZXRGcmFtZSYsIGNvbnN0IGNoYXIqJiBmcmFtZUVuZCk7IC8vIE1heSBtb2RpZnkg
cGFydCBvZiBtX2J1ZmZlciB0byB1bm1hc2sgdGhlIGZyYW1lLgogCiAgICAgYm9vbCBwcm9jZXNz
RnJhbWUoKTsKICAgICBib29sIHByb2Nlc3NGcmFtZUhpeGllNzYoKTsKQEAgLTE4MCw3ICsxNTYs
NyBAQCBwcml2YXRlOgogICAgICAgICBRdWV1ZWRGcmFtZVR5cGVCbG9iCiAgICAgfTsKICAgICBz
dHJ1Y3QgUXVldWVkRnJhbWUgewotICAgICAgICBPcENvZGUgb3BDb2RlOworICAgICAgICBXZWJT
b2NrZXRGcmFtZTo6T3BDb2RlIG9wQ29kZTsKICAgICAgICAgUXVldWVkRnJhbWVUeXBlIGZyYW1l
VHlwZTsKICAgICAgICAgLy8gT25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyBpdGVtcyBpcyB1c2Vk
LCBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIGZyYW1lVHlwZS4KICAgICAgICAgU3RyaW5nIHN0
cmluZ0RhdGE7CkBAIC0xODgsOCArMTY0LDggQEAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEJs
b2I+IGJsb2JEYXRhOwogICAgIH07CiAgICAgdm9pZCBlbnF1ZXVlVGV4dEZyYW1lKGNvbnN0IFN0
cmluZyYpOwotICAgIHZvaWQgZW5xdWV1ZVJhd0ZyYW1lKE9wQ29kZSwgY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGRhdGFMZW5ndGgpOwotICAgIHZvaWQgZW5xdWV1ZUJsb2JGcmFtZShPcENvZGUs
IGNvbnN0IEJsb2ImKTsKKyAgICB2b2lkIGVucXVldWVSYXdGcmFtZShXZWJTb2NrZXRGcmFtZTo6
T3BDb2RlLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCk7CisgICAgdm9pZCBl
bnF1ZXVlQmxvYkZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGUsIGNvbnN0IEJsb2ImKTsKIAog
ICAgIHZvaWQgcHJvY2Vzc091dGdvaW5nRnJhbWVRdWV1ZSgpOwogICAgIHZvaWQgYWJvcnRPdXRn
b2luZ0ZyYW1lUXVldWUoKTsKQEAgLTIwOCw3ICsxODQsNyBAQCBwcml2YXRlOgogCiAgICAgLy8g
SWYgeW91IGFyZSBnb2luZyB0byBzZW5kIGEgaHliaS0xMCBmcmFtZSwgeW91IG5lZWQgdG8gdXNl
IHRoZSBvdXRnb2luZyBmcmFtZSBxdWV1ZQogICAgIC8vIGluc3RlYWQgb2YgY2FsbCBzZW5kRnJh
bWUoKSBkaXJlY3RseS4KLSAgICBib29sIHNlbmRGcmFtZShPcENvZGUsIGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBkYXRhTGVuZ3RoKTsKKyAgICBib29sIHNlbmRGcmFtZShXZWJTb2NrZXRGcmFt
ZTo6T3BDb2RlLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCk7CiAgICAgYm9v
bCBzZW5kRnJhbWVIaXhpZTc2KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKTsK
IAogI2lmIEVOQUJMRShCTE9CKQpAQCAtMjQyLDcgKzIxOCw3IEBAIHByaXZhdGU6CiAKICAgICAv
LyBQcml2YXRlIG1lbWJlcnMgb25seSBmb3IgaHliaS0xMCBwcm90b2NvbC4KICAgICBib29sIG1f
aGFzQ29udGludW91c0ZyYW1lOwotICAgIE9wQ29kZSBtX2NvbnRpbnVvdXNGcmFtZU9wQ29kZTsK
KyAgICBXZWJTb2NrZXRGcmFtZTo6T3BDb2RlIG1fY29udGludW91c0ZyYW1lT3BDb2RlOwogICAg
IFZlY3RvcjxjaGFyPiBtX2NvbnRpbnVvdXNGcmFtZURhdGE7CiAgICAgdW5zaWduZWQgc2hvcnQg
bV9jbG9zZUV2ZW50Q29kZTsKICAgICBTdHJpbmcgbV9jbG9zZUV2ZW50UmVhc29uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRGcmFtZS5oIGIvU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRGcmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5ZGQ3YWI5
OGMyZWQxNDZmMTU2N2YwYTkxYTc3MzE4ZDY5MmM2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEZyYW1lLmgKQEAgLTAsMCArMSw4MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlNvY2tldEZyYW1lX2gKKyNkZWZpbmUgV2ViU29ja2V0RnJhbWVfaAorCisjaWYg
RU5BQkxFKFdFQl9TT0NLRVRTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBXZWJT
b2NrZXRGcmFtZSB7CisgICAgLy8gUkZDNjQ1NSBvcGNvZGVzLgorICAgIGVudW0gT3BDb2RlIHsK
KyAgICAgICAgT3BDb2RlQ29udGludWF0aW9uID0gMHgwLAorICAgICAgICBPcENvZGVUZXh0ID0g
MHgxLAorICAgICAgICBPcENvZGVCaW5hcnkgPSAweDIsCisgICAgICAgIE9wQ29kZUNsb3NlID0g
MHg4LAorICAgICAgICBPcENvZGVQaW5nID0gMHg5LAorICAgICAgICBPcENvZGVQb25nID0gMHhB
LAorICAgICAgICBPcENvZGVJbnZhbGlkID0gMHgxMAorICAgIH07CisKKyAgICBzdGF0aWMgYm9v
bCBpc05vbkNvbnRyb2xPcENvZGUoT3BDb2RlIG9wQ29kZSkgeyByZXR1cm4gb3BDb2RlID09IE9w
Q29kZUNvbnRpbnVhdGlvbiB8fCBvcENvZGUgPT0gT3BDb2RlVGV4dCB8fCBvcENvZGUgPT0gT3BD
b2RlQmluYXJ5OyB9CisgICAgc3RhdGljIGJvb2wgaXNDb250cm9sT3BDb2RlKE9wQ29kZSBvcENv
ZGUpIHsgcmV0dXJuIG9wQ29kZSA9PSBPcENvZGVDbG9zZSB8fCBvcENvZGUgPT0gT3BDb2RlUGlu
ZyB8fCBvcENvZGUgPT0gT3BDb2RlUG9uZzsgfQorICAgIHN0YXRpYyBib29sIGlzUmVzZXJ2ZWRP
cENvZGUoT3BDb2RlIG9wQ29kZSkgeyByZXR1cm4gIWlzTm9uQ29udHJvbE9wQ29kZShvcENvZGUp
ICYmICFpc0NvbnRyb2xPcENvZGUob3BDb2RlKTsgfQorCisgICAgV2ViU29ja2V0RnJhbWUoT3BD
b2RlIG9wQ29kZSA9IE9wQ29kZUludmFsaWQsIGJvb2wgZmluYWwgPSBmYWxzZSwgYm9vbCBtYXNr
ZWQgPSBmYWxzZSwgY29uc3QgY2hhciogcGF5bG9hZCA9IDAsIHNpemVfdCBwYXlsb2FkTGVuZ3Ro
ID0gMCkKKyAgICAgICAgOiBvcENvZGUob3BDb2RlKQorICAgICAgICAsIGZpbmFsKGZpbmFsKQor
ICAgICAgICAsIHJlc2VydmVkMShmYWxzZSkKKyAgICAgICAgLCByZXNlcnZlZDIoZmFsc2UpCisg
ICAgICAgICwgcmVzZXJ2ZWQzKGZhbHNlKQorICAgICAgICAsIG1hc2tlZChtYXNrZWQpCisgICAg
ICAgICwgcGF5bG9hZChwYXlsb2FkKQorICAgICAgICAsIHBheWxvYWRMZW5ndGgocGF5bG9hZExl
bmd0aCkKKyAgICB7CisgICAgfQorCisgICAgT3BDb2RlIG9wQ29kZTsKKyAgICBib29sIGZpbmFs
OworICAgIGJvb2wgcmVzZXJ2ZWQxOworICAgIGJvb2wgcmVzZXJ2ZWQyOworICAgIGJvb2wgcmVz
ZXJ2ZWQzOworICAgIGJvb2wgbWFza2VkOworICAgIGNvbnN0IGNoYXIqIHBheWxvYWQ7CisgICAg
c2l6ZV90IHBheWxvYWRMZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNlbmRpZiAvLyBXZWJTb2NrZXRGcmFtZV9o
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>