<?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>130530</bug_id>
          
          <creation_ts>2014-03-20 13:00:11 -0700</creation_ts>
          <short_desc>Update iOS input method code to use new cross-platform async functions</short_desc>
          <delta_ts>2014-03-20 14:18:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>992671</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-20 13:00:11 -0700</bug_when>
    <thetext>iOS used to have async IPC calls like insertText whose names were the same as sync Mac methods, confusingly. Now that we have async methods in cross-platform code, it only makes sense to delete identical iOS implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992702</commentid>
    <comment_count>1</comment_count>
      <attachid>227328</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-20 13:47:32 -0700</bug_when>
    <thetext>Created attachment 227328
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992713</commentid>
    <comment_count>2</comment_count>
      <attachid>227328</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-03-20 14:07:44 -0700</bug_when>
    <thetext>Comment on attachment 227328
proposed patch

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

Looks good.

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:1510
&gt; +    _page-&gt;insertTextAsync(aStringValue, EditingRange());

Are these methods implemented for both iOS and Mac?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992720</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-20 14:12:15 -0700</bug_when>
    <thetext>Yes, they are under PLATFORM(COCOA) in WebPage.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992726</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-20 14:18:29 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r165759&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227328</attachid>
            <date>2014-03-20 13:47:32 -0700</date>
            <delta_ts>2014-03-20 14:07:43 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>MergeWithIOS.txt</filename>
            <type>text/plain</type>
            <size>32340</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTk5MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE0LTAzLTIwICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBpT1MgaW5wdXQg
bWV0aG9kIGNvZGUgdG8gdXNlIG5ldyBjcm9zcy1wbGF0Zm9ybSBhc3luYyBmdW5jdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDUzMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1lcmdlIGlkZW50
aWNhbCBpT1MgYW5kIGNyb3NzLXBsYXRmb3JtIGZ1bmN0aW9ucy4KKworICAgICAgICBBbHNvIHRp
Z2h0ZW5lZCB1cCBpZmRlZnMsIGFuZCByZW1vdmVkIHN0dWIgaU9TIGltcGxlbWVudGF0aW9ucyBv
ZiBzeW5jIG1ldGhvZHMsCisgICAgICAgIHdoaWNoIGhvcGVmdWxseSB3b24ndCBiZSBldmVyIG5l
ZWRlZC4gVGhlIG9ubHkgdHJpY2t5IGNhc2UgaXMgc3luYyBjYW5jZWxDb21wb3NpdGlvbiwKKyAg
ICAgICAgd2lsbCBJJ2xsIGludmVzdGlnYXRlIHNlcGFyYXRlbHkuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0TWFya2VkVGV4
dDpzZWxlY3RlZFJhbmdlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHVubWFya1RleHRd
KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpbnNlcnRUZXh0Ol0pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmNhbmNlbENvbXBvc2l0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBh
Z2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjYW5jZWxDb21w
b3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5zZXJ0RGljdGF0ZWRU
ZXh0QXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmF0dHJpYnV0ZWRTdWJz
dHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjphdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjYW5jZWxDb21wb3NpdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omluc2VydERpY3RhdGVkVGV4dEFzeW5jKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJh
bmdlQXN5bmMpOgorCiAyMDE0LTAzLTIwICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdo
QGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSBBdG9taWNTdHJpbmcsIElkZW50aWZpZXIKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE2NTk3
MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtNjI4LDE2ICs2MjgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aW5kb3dBbmRWaWV3
RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGFjY2Vzc2liaWxpdHlWaWV3
Q29vcmRpbmF0ZXMpOwogICAgIHZvaWQgc2V0TWFpbkZyYW1lSXNTY3JvbGxhYmxlKGJvb2wpOwog
Ci0gICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJD
b3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgY29uc3QgRWRpdGluZ1Jhbmdl
JiBzZWxlY3Rpb25SYW5nZSwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudFJhbmdlKTsK
LSAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgIHZvaWQgY2FuY2VsQ29tcG9zaXRp
b24oKTsKLSAgICBib29sIGluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBFZGl0
aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpOwotICAgIHZvaWQgZ2V0TWFya2VkUmFuZ2UoRWRp
dGluZ1JhbmdlJik7Ci0gICAgdm9pZCBnZXRTZWxlY3RlZFJhbmdlKEVkaXRpbmdSYW5nZSYpOwot
ICAgIHVpbnQ2NF90IGNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQpOwotICAgIFdlYkNvcmU6OkludFJlY3QgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoY29u
c3QgRWRpdGluZ1JhbmdlJik7Ci0gICAgYm9vbCBleGVjdXRlS2V5cHJlc3NDb21tYW5kcyhjb25z
dCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpOwotCiAgICAgdm9pZCBzZW5kQ29t
cGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CiAgICAgYm9vbCBzaG91bGREZWxheVdp
bmRvd09yZGVyaW5nRm9yRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwogICAgIGJvb2wgYWNj
ZXB0c0ZpcnN0TW91c2UoaW50IGV2ZW50TnVtYmVyLCBjb25zdCBXZWJNb3VzZUV2ZW50Jik7CkBA
IC02NTMsMTIgKzY0MywyNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb21wb3NpdGlvbkFzeW5j
KGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5l
PiB1bmRlcmxpbmVzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlvblJhbmdlLCBjb25zdCBF
ZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpOwogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0
aW9uQXN5bmMoKTsKIAorICAgIHZvaWQgY2FuY2VsQ29tcG9zaXRpb24oKTsKKwogI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBib29sIGluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAg
ICAgdm9pZCBpbnNlcnREaWN0YXRlZFRleHRBc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRl
eHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7Ci0gICAgdm9p
ZCBnZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKGNvbnN0IEVkaXRpbmdSYW5nZSYsIEF0
dHJpYnV0ZWRTdHJpbmcmKTsKICAgICB2b2lkIGF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0
ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYsIFBhc3NSZWZQdHI8QXR0cmlidXRlZFN0
cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s+KTsKIAorI2lmICFVU0UoQVNZTkNfTlNURVhU
SU5QVVRDTElFTlQpCisgICAgYm9vbCBpbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudFJhbmdlKTsKKyAgICB2b2lkIHNldENvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJs
aW5lPiB1bmRlcmxpbmVzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlvblJhbmdlLCBjb25z
dCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpOworICAgIHZvaWQgY29uZmlybUNvbXBv
c2l0aW9uKCk7CisgICAgYm9vbCBpbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwor
ICAgIHZvaWQgZ2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShjb25zdCBFZGl0aW5nUmFu
Z2UmLCBBdHRyaWJ1dGVkU3RyaW5nJik7CisgICAgdm9pZCBnZXRNYXJrZWRSYW5nZShFZGl0aW5n
UmFuZ2UmKTsKKyAgICB2b2lkIGdldFNlbGVjdGVkUmFuZ2UoRWRpdGluZ1JhbmdlJik7CisgICAg
dWludDY0X3QgY2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCk7
CisgICAgV2ViQ29yZTo6SW50UmVjdCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShjb25zdCBF
ZGl0aW5nUmFuZ2UmKTsKKyAgICBib29sIGV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CisjZW5kaWYKKwogICAgIFdLVmlldyog
d2tWaWV3KCkgY29uc3Q7CiAgICAgdm9pZCBpbnRyaW5zaWNDb250ZW50U2l6ZURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRyaW5zaWNDb250ZW50U2l6ZSk7CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAxNjU5NzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTQxMCwxMyArMTQxMCwxMyBAQCAtICh2b2lkKXNldE1hcmtlZFRleHRTdHlsZTooTlNEaWN0
aW9uYXJ5CiAtICh2b2lkKXNldE1hcmtlZFRleHQ6KE5TU3RyaW5nICopbWFya2VkVGV4dCBzZWxl
Y3RlZFJhbmdlOihOU1JhbmdlKXNlbGVjdGVkUmFuZ2UKIHsKICAgICBfbWFya2VkVGV4dCA9IG1h
cmtlZFRleHQ7Ci0gICAgX3BhZ2UtPnNldENvbXBvc2l0aW9uKG1hcmtlZFRleHQsIFZlY3RvcjxX
ZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4oKSwgc2VsZWN0ZWRSYW5nZSwgRWRpdGluZ1Jh
bmdlKCkpOworICAgIF9wYWdlLT5zZXRDb21wb3NpdGlvbkFzeW5jKG1hcmtlZFRleHQsIFZlY3Rv
cjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4oKSwgc2VsZWN0ZWRSYW5nZSwgRWRpdGlu
Z1JhbmdlKCkpOwogfQogCiAtICh2b2lkKXVubWFya1RleHQKIHsKICAgICBfbWFya2VkVGV4dCA9
IG5pbDsKLSAgICBfcGFnZS0+Y29uZmlybUNvbXBvc2l0aW9uKCk7CisgICAgX3BhZ2UtPmNvbmZp
cm1Db21wb3NpdGlvbkFzeW5jKCk7CiB9CiAKIC0gKFVJVGV4dFBvc2l0aW9uICopYmVnaW5uaW5n
T2ZEb2N1bWVudApAQCAtMTUwNyw3ICsxNTA3LDcgQEAgLSAodm9pZClkZWxldGVCYWNrd2FyZAog
Ly8gSW5zZXJ0cyB0aGUgZ2l2ZW4gc3RyaW5nLCByZXBsYWNpbmcgYW55IHNlbGVjdGVkIG9yIG1h
cmtlZCB0ZXh0LgogLSAodm9pZClpbnNlcnRUZXh0OihOU1N0cmluZyAqKWFTdHJpbmdWYWx1ZQog
ewotICAgIF9wYWdlLT5pbnNlcnRUZXh0KGFTdHJpbmdWYWx1ZSwgRWRpdGluZ1JhbmdlKCkpOwor
ICAgIF9wYWdlLT5pbnNlcnRUZXh0QXN5bmMoYVN0cmluZ1ZhbHVlLCBFZGl0aW5nUmFuZ2UoKSk7
CiB9CiAKIC0gKEJPT0wpaGFzVGV4dApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDE2NTk3MikKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC05OSw2MyArOTksOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1lc0No
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBv
c2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1
bmRlcmxpbmUsIGNvbnN0IEVkaXRpbmdSYW5nZSYgc2VsZWN0aW9uUmFuZ2UsIGNvbnN0IEVkaXRp
bmdSYW5nZSYpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlvbih0ZXh0LCB1
bmRlcmxpbmUsIHNlbGVjdGlvblJhbmdlKSwgbV9wYWdlSUQpOwotfQotCi12b2lkIFdlYlBhZ2VQ
cm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZp
cm1Db21wb3NpdGlvbigpLCBtX3BhZ2VJRCk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5OjpjYW5j
ZWxDb21wb3NpdGlvbigpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLQotfQotCi1ib29sIFdl
YlBhZ2VQcm94eTo6aW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdS
YW5nZSYgcmVwbGFjZW1lbnRSYW5nZSkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
Okluc2VydFRleHQodGV4dCwgcmVwbGFjZW1lbnRSYW5nZSksIG1fcGFnZUlEKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OmdldE1hcmtlZFJhbmdlKEVkaXRpbmdS
YW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6
OmdldFNlbGVjdGVkUmFuZ2UoRWRpdGluZ1JhbmdlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi11aW50NjRfdCBXZWJQYWdlUHJveHk6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29u
c3QgSW50UG9pbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotSW50UmVjdCBXZWJQYWdlUHJveHk6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKGNvbnN0
IEVkaXRpbmdSYW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50
UmVjdCgpOwotfQotCi1ib29sIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCiBTdHJpbmcgV2ViUGFnZVByb3h5Ojpz
dHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAxNjU5NzIpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTUyLDYgKzE1Miw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRNYWluRnJhbWVJ
c1Njcm9sbGEKICAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0TWFpbkZy
YW1lSXNTY3JvbGxhYmxlKGlzU2Nyb2xsYWJsZSksIG1fcGFnZUlEKTsKIH0KIAorI2lmICFVU0Uo
QVNZTkNfTlNURVhUSU5QVVRDTElFTlQpCisKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5k
ZXJsaW5lcywgY29uc3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5nZSwgY29uc3QgRWRpdGlu
Z1JhbmdlJiByZXBsYWNlbWVudFJhbmdlKQogewogICAgIGlmICghaXNWYWxpZCgpKSB7CkBAIC0x
NzEsMTQgKzE3Myw2IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb24oKQog
ICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0
aW9uKCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb246OlJlcGx5KG1fZWRp
dG9yU3RhdGUpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpjYW5jZWxDb21w
b3NpdGlvbigpCi17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6Q2FuY2VsQ29tcG9zaXRpb24o
KSwgTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3NpdGlvbjo6UmVwbHkobV9lZGl0b3JT
dGF0ZSksIG1fcGFnZUlEKTsKLX0KLQogYm9vbCBXZWJQYWdlUHJveHk6Omluc2VydFRleHQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpCiB7
CiAgICAgaWYgKCFpc1ZhbGlkKCkpCkBAIC0yMjAsMzEgKzIxNCw2IEBAIGJvb2wgV2ViUGFnZVBy
b3h5OjppbnNlcnREaWN0YXRlZFRleHQoY28KICNlbmRpZgogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6aW5zZXJ0RGljdGF0ZWRUZXh0QXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBFZGl0
aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UsIGNvbnN0IFZlY3RvcjxUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2U+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNXaXRoUmFuZ2UpCi17Ci0jaWYgVVNFKERJ
Q1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4gZGljdGF0aW9uQWx0ZXJuYXRp
dmVzOwotCi0gICAgZm9yIChjb25zdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UmIGFsdGVybmF0
aXZlV2l0aFJhbmdlIDogZGljdGF0aW9uQWx0ZXJuYXRpdmVzV2l0aFJhbmdlKSB7Ci0gICAgICAg
IHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQgPSBtX3BhZ2VDbGllbnQuYWRkRGljdGF0aW9uQWx0
ZXJuYXRpdmVzKGFsdGVybmF0aXZlV2l0aFJhbmdlLmFsdGVybmF0aXZlcyk7Ci0gICAgICAgIGlm
IChkaWN0YXRpb25Db250ZXh0KQotICAgICAgICAgICAgZGljdGF0aW9uQWx0ZXJuYXRpdmVzLmFw
cGVuZChEaWN0YXRpb25BbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZVdpdGhSYW5nZS5yYW5nZS5sb2Nh
dGlvbiwgYWx0ZXJuYXRpdmVXaXRoUmFuZ2UucmFuZ2UubGVuZ3RoLCBkaWN0YXRpb25Db250ZXh0
KSk7Ci0gICAgfQotCi0gICAgaWYgKGRpY3RhdGlvbkFsdGVybmF0aXZlcy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaW5zZXJ0VGV4dEFzeW5jKHRleHQsIHJlcGxhY2VtZW50UmFuZ2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
Okluc2VydERpY3RhdGVkVGV4dEFzeW5jKHRleHQsIHJlcGxhY2VtZW50UmFuZ2UsIGRpY3RhdGlv
bkFsdGVybmF0aXZlcyksIG1fcGFnZUlEKTsKLSNlbHNlCi0gICAgaW5zZXJ0VGV4dEFzeW5jKHRl
eHQsIHJlcGxhY2VtZW50UmFuZ2UpOwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRNYXJrZWRSYW5nZShFZGl0aW5nUmFuZ2UmIHJlc3VsdCkKIHsKICAgICByZXN1bHQgPSBFZGl0
aW5nUmFuZ2UoKTsKQEAgLTI3NCwzMyArMjQzLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldEF0
dHJpYnV0ZWRTdWJzdHJpbgogICAgIHByb2Nlc3MoKS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZTo6R2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShyYW5nZSksIE1lc3NhZ2VzOjpXZWJQ
YWdlOjpHZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOjpSZXBseShyZXN1bHQpLCBtX3Bh
Z2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hh
cmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIHJhbmdlLCBQYXNzUmVmUHRyPEF0
dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrPiBjYWxsYmFjaykKLXsKLSAg
ICBpZiAoIWlzVmFsaWQoKSkgewotICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IGNhbGxiYWNr
LT5jYWxsYmFja0lEKCk7Ci0gICAgbV9hdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VD
YWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLQotICAgIHByb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpBdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VB
c3luYyhyYW5nZSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJv
eHk6OmF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKGNvbnN0IEF0dHJp
YnV0ZWRTdHJpbmcmIHN0cmluZywgY29uc3QgRWRpdGluZ1JhbmdlJiBhY3R1YWxSYW5nZSwgdWlu
dDY0X3QgY2FsbGJhY2tJRCkKLXsKLSAgICBNRVNTQUdFX0NIRUNLKGFjdHVhbFJhbmdlLmlzVmFs
aWQoKSk7Ci0KLSAgICBSZWZQdHI8QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2Fs
bGJhY2s+IGNhbGxiYWNrID0gbV9hdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxs
YmFja3MudGFrZShjYWxsYmFja0lEKTsKLSAgICBpZiAoIWNhbGxiYWNrKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBMb2cgZXJyb3Igb3IgYXNzZXJ0LgotICAgICAgICAvLyB0aGlzIGNhbiB2YWxpZGx5
IGhhcHBlbiBpZiBhIGxvYWQgaW52YWxpZGF0ZWQgdGhlIGNhbGxiYWNrLCB0aG91Z2gKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbGxiYWNrLT5wZXJmb3JtQ2FsbGJhY2tXaXRoUmV0
dXJuVmFsdWUoc3RyaW5nLCBhY3R1YWxSYW5nZSk7Ci19Ci0KIHVpbnQ2NF90IFdlYlBhZ2VQcm94
eTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBJbnRQb2ludCBwb2ludCkKIHsKICAgICBp
ZiAoIWlzVmFsaWQoKSkKQEAgLTMzMSw2ICsyNzMsNjggQEAgYm9vbCBXZWJQYWdlUHJveHk6OmV4
ZWN1dGVLZXlwcmVzc0NvbW1hbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyAh
VVNFKEFTWU5DX05TVEVYVElOUFVUQ0xJRU5UKQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y2FuY2Vs
Q29tcG9zaXRpb24oKQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBwcm9jZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkNhbmNlbENvbXBvc2l0
aW9uKCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb246OlJlcGx5KG1fZWRp
dG9yU3RhdGUpLCBtX3BhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjppbnNlcnREaWN0
YXRlZFRleHRBc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVw
bGFjZW1lbnRSYW5nZSwgY29uc3QgVmVjdG9yPFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGRp
Y3RhdGlvbkFsdGVybmF0aXZlc1dpdGhSYW5nZSkKK3sKKyNpZiBVU0UoRElDVEFUSU9OX0FMVEVS
TkFUSVZFUykKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXM7CisKKyAgICBm
b3IgKGNvbnN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZSYgYWx0ZXJuYXRpdmVXaXRoUmFuZ2Ug
OiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNXaXRoUmFuZ2UpIHsKKyAgICAgICAgdWludDY0X3QgZGlj
dGF0aW9uQ29udGV4dCA9IG1fcGFnZUNsaWVudC5hZGREaWN0YXRpb25BbHRlcm5hdGl2ZXMoYWx0
ZXJuYXRpdmVXaXRoUmFuZ2UuYWx0ZXJuYXRpdmVzKTsKKyAgICAgICAgaWYgKGRpY3RhdGlvbkNv
bnRleHQpCisgICAgICAgICAgICBkaWN0YXRpb25BbHRlcm5hdGl2ZXMuYXBwZW5kKERpY3RhdGlv
bkFsdGVybmF0aXZlKGFsdGVybmF0aXZlV2l0aFJhbmdlLnJhbmdlLmxvY2F0aW9uLCBhbHRlcm5h
dGl2ZVdpdGhSYW5nZS5yYW5nZS5sZW5ndGgsIGRpY3RhdGlvbkNvbnRleHQpKTsKKyAgICB9CisK
KyAgICBpZiAoZGljdGF0aW9uQWx0ZXJuYXRpdmVzLmlzRW1wdHkoKSkgeworICAgICAgICBpbnNl
cnRUZXh0QXN5bmModGV4dCwgcmVwbGFjZW1lbnRSYW5nZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0RGljdGF0
ZWRUZXh0QXN5bmModGV4dCwgcmVwbGFjZW1lbnRSYW5nZSwgZGljdGF0aW9uQWx0ZXJuYXRpdmVz
KSwgbV9wYWdlSUQpOworI2Vsc2UKKyAgICBpbnNlcnRUZXh0QXN5bmModGV4dCwgcmVwbGFjZW1l
bnRSYW5nZSk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmF0dHJpYnV0ZWRTdWJz
dHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgcmFuZ2UsIFBh
c3NSZWZQdHI8QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s+IGNhbGxi
YWNrKQoreworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5pbnZhbGlk
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKKyAgICBtX2F0dHJpYnV0ZWRTdHJpbmdGb3JDaGFy
YWN0ZXJSYW5nZUNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2spOworCisgICAgcHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFy
YWN0ZXJSYW5nZUFzeW5jKHJhbmdlLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOworfQorCit2b2lk
IFdlYlBhZ2VQcm94eTo6YXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2so
Y29uc3QgQXR0cmlidXRlZFN0cmluZyYgc3RyaW5nLCBjb25zdCBFZGl0aW5nUmFuZ2UmIGFjdHVh
bFJhbmdlLCB1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIE1FU1NBR0VfQ0hFQ0soYWN0dWFs
UmFuZ2UuaXNWYWxpZCgpKTsKKworICAgIFJlZlB0cjxBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFj
dGVyUmFuZ2VDYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2F0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0
ZXJSYW5nZUNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSUQpOworICAgIGlmICghY2FsbGJhY2spIHsK
KyAgICAgICAgLy8gRklYTUU6IExvZyBlcnJvciBvciBhc3NlcnQuCisgICAgICAgIC8vIHRoaXMg
Y2FuIHZhbGlkbHkgaGFwcGVuIGlmIGEgbG9hZCBpbnZhbGlkYXRlZCB0aGUgY2FsbGJhY2ssIHRo
b3VnaAorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxs
YmFja1dpdGhSZXR1cm5WYWx1ZShzdHJpbmcsIGFjdHVhbFJhbmdlKTsKK30KKwogU3RyaW5nIFdl
YlBhZ2VQcm94eTo6c3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpCiB7CiAgICAgU3RyaW5n
IHZhbHVlOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCShyZXZpc2lvbiAxNjU5NzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTcsOSArNDU3LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgc3luY0FwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9u
LCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCwgYm9vbCYgY29ycmVjdGlvbkFwcGxpZWQpOwog
ICAgIHZvaWQgcmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dCh1aW50NjRfdCBjYWxsYmFja0lE
KTsKICAgICB2b2lkIGdldEF1dG9jb3JyZWN0aW9uQ29udGV4dChTdHJpbmcmIGJlZm9yZVRleHQs
IFN0cmluZyYgbWFya2VkVGV4dCwgU3RyaW5nJiBzZWxlY3RlZFRleHQsIFN0cmluZyYgYWZ0ZXJU
ZXh0LCB1aW50NjRfdCYgbG9jYXRpb24sIHVpbnQ2NF90JiBsZW5ndGgpOwotICAgIHZvaWQgaW5z
ZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1l
bnRSYW5nZSk7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZl
Y3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgY29uc3QgRWRp
dGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5nZSk7Ci0gICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24o
KTsKICAgICB2b2lkIGdldFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpOwogICAgIHZvaWQgcmVxdWVz
dFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2b2lk
IHN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxlbWVudEF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKTsKQEAgLTUzOCwxNiArNTM1LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2Vu
ZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpOwogCi0jaWYgUExBVEZPUk0oTUFD
KQotICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdS
YW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgYm9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0
YXRlKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9y
PFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCBjb25zdCBFZGl0aW5n
UmFuZ2UmIHNlbGVjdGlvblJhbmdlLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFu
Z2UsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSk7Ci0gICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24o
RWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKLSAgICB2b2lkIGluc2VydERpY3RhdGVkVGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlPiYgZGljdGF0aW9uQWx0ZXJu
YXRpdmVMb2NhdGlvbnMsIGJvb2wmIGhhbmRsZWQsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSk7Ci0g
ICAgdm9pZCBpbnNlcnREaWN0YXRlZFRleHRBc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlPiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMpOwotICAg
IHZvaWQgZ2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShjb25zdCBFZGl0aW5nUmFuZ2Um
LCBBdHRyaWJ1dGVkU3RyaW5nJik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hh
cmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmLCB1aW50NjRfdCBjYWxsYmFja0lE
KTsKLSNlbmRpZgotCiAgICAgdm9pZCBpbnNlcnRUZXh0QXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpOwogICAgIHZvaWQgZ2V0TWFy
a2VkUmFuZ2VBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGdldFNlbGVjdGVk
UmFuZ2VBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKTsKQEAgLTU1NiwxMiArNTQzLDI0IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldENvbXBvc2l0aW9uQXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBW
ZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIGNvbnN0IEVk
aXRpbmdSYW5nZSYgc2VsZWN0aW9uUmFuZ2UsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1l
bnRSYW5nZSk7CiAgICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb25Bc3luYygpOwogCisjaWYgUExB
VEZPUk0oTUFDKQogICAgIHZvaWQgY2FuY2VsQ29tcG9zaXRpb24oRWRpdG9yU3RhdGUmIG5ld1N0
YXRlKTsKKyAgICB2b2lkIGluc2VydERpY3RhdGVkVGV4dEFzeW5jKGNvbnN0IFN0cmluZyYgdGV4
dCwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudFJhbmdlLCBjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9u
cyk7CisgICAgdm9pZCBhdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhj
b25zdCBFZGl0aW5nUmFuZ2UmLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKyNpZiAhVVNFKEFTWU5D
X05TVEVYVElOUFVUQ0xJRU5UKQorICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgYm9vbCYgaGFuZGxlZCwg
RWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0
cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxp
bmVzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlvblJhbmdlLCBjb25zdCBFZGl0aW5nUmFu
Z2UmIHJlcGxhY2VtZW50UmFuZ2UsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSk7CisgICAgdm9pZCBj
b25maXJtQ29tcG9zaXRpb24oRWRpdG9yU3RhdGUmIG5ld1N0YXRlKTsKKyAgICB2b2lkIGluc2Vy
dERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVw
bGFjZW1lbnRSYW5nZSwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZl
PiYgZGljdGF0aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMsIGJvb2wmIGhhbmRsZWQsIEVkaXRvclN0
YXRlJiBuZXdTdGF0ZSk7CisgICAgdm9pZCBnZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdl
KGNvbnN0IEVkaXRpbmdSYW5nZSYsIEF0dHJpYnV0ZWRTdHJpbmcmKTsKICAgICB2b2lkIGdldE1h
cmtlZFJhbmdlKEVkaXRpbmdSYW5nZSYpOwogICAgIHZvaWQgZ2V0U2VsZWN0ZWRSYW5nZShFZGl0
aW5nUmFuZ2UmKTsKICAgICB2b2lkIGNoYXJhY3RlckluZGV4Rm9yUG9pbnQoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQ2NF90JiByZXN1bHQpOwogICAgIHZvaWQgZmlyc3RSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2UoY29uc3QgRWRpdGluZ1JhbmdlJiwgV2ViQ29yZTo6SW50UmVjdCYg
cmVzdWx0UmVjdCk7CiAgICAgdm9pZCBleGVjdXRlS2V5cHJlc3NDb21tYW5kcyhjb25zdCBWZWN0
b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYsIGJvb2wmIGhhbmRsZWQsIEVkaXRvclN0YXRl
JiBuZXdTdGF0ZSk7CisjZW5kaWYKKyNlbmRpZgorCiAgICAgdm9pZCByZWFkU2VsZWN0aW9uRnJv
bVBhc3RlYm9hcmQoY29uc3QgV1RGOjpTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBib29sJiByZXN1
bHQpOwogICAgIHZvaWQgZ2V0U3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZChXVEY6OlN0cmlu
ZyYgc3RyaW5nVmFsdWUpOwogICAgIHZvaWQgZ2V0RGF0YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQo
Y29uc3QgV1RGOjpTdHJpbmcgcGFzdGVib2FyZFR5cGUsIFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBo
YW5kbGUsIHVpbnQ2NF90JiBzaXplKTsKQEAgLTc4Nyw3ICs3ODYsNyBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAgICAgYm9vbCBwZXJmb3JtRGVmYXVsdEJlaGF2aW9yRm9yS2V5RXZlbnQoY29uc3QgV2Vi
S2V5Ym9hcmRFdmVudCYpOwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgUExBVEZPUk0oTUFD
KQogICAgIGJvb2wgZXhlY3V0ZUtleXByZXNzQ29tbWFuZHNJbnRlcm5hbChjb25zdCBWZWN0b3I8
V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYsIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKICNl
bmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTY1OTcyKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTU2LDEwICs1Niw2IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewog
ICAgIFN5bmNBcHBseUF1dG9jb3JyZWN0aW9uKFN0cmluZyBjb3JyZWN0aW9uLCBTdHJpbmcgb3Jp
Z2luYWxUZXh0KSAtPiAoYm9vbCBhdXRvY29ycmVjdGlvbkFwcGxpZWQpCiAgICAgUmVxdWVzdEF1
dG9jb3JyZWN0aW9uQ29udGV4dCh1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIEdldEF1dG9jb3Jy
ZWN0aW9uQ29udGV4dCgpIC0+IChTdHJpbmcgYmVmb3JlQ29udGV4dCwgU3RyaW5nIG1hcmtlZFRl
eHQsIFN0cmluZyBzZWxlY3RlZFRleHQsIFN0cmluZyBhZnRlckNvbnRleHQsIHVpbnQ2NF90IGxv
Y2F0aW9uLCB1aW50NjRfdCBsZW5ndGgpIAotICAgICMgRklYTUU6IFVzZSBzaGFyZWQgQ09DT0Eg
dGV4dCBpbnB1dCBtZXRob2RzIGxpa2UgaW5zZXJ0VGV4dEFzeW5jLgotICAgIEluc2VydFRleHQo
U3RyaW5nIHRleHQsIFdlYktpdDo6RWRpdGluZ1JhbmdlIHJlcGxhY2VtZW50UmFuZ2UpCi0gICAg
U2V0Q29tcG9zaXRpb24oU3RyaW5nIHRleHQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVu
ZGVybGluZT4gdW5kZXJsaW5lcywgV2ViS2l0OjpFZGl0aW5nUmFuZ2Ugc2VsZWN0aW9uUmFuZ2Up
Ci0gICAgQ29uZmlybUNvbXBvc2l0aW9uKCkKICAgICBHZXRQb3NpdGlvbkluZm9ybWF0aW9uKFdl
YkNvcmU6OkludFBvaW50IHBvaW50KSAtPiAoV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbiBpbmZvcm1hdGlvbikKICAgICBSZXF1ZXN0UG9zaXRpb25JbmZvcm1hdGlvbihX
ZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKICAgICBTdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRB
dFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvaW50KQpAQCAtMjk1LDEzICsyOTEsNiBAQCBt
ZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBHZXREYXRhU2VsZWN0aW9u
Rm9yUGFzdGVib2FyZChTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkKICAgICBSZWFkU2VsZWN0aW9uRnJv
bVBhc3RlYm9hcmQoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAoYm9vbCByZXN1bHQpCiAKLSAg
ICAjIFRleHQgaW5wdXQuCi0gICAgQ2FuY2VsQ29tcG9zaXRpb24oKSAtPiAoV2ViS2l0OjpFZGl0
b3JTdGF0ZSBuZXdTdGF0ZSkKLSAgICBHZXRNYXJrZWRSYW5nZSgpIC0+IChXZWJLaXQ6OkVkaXRp
bmdSYW5nZSByYW5nZSkKLSAgICBHZXRTZWxlY3RlZFJhbmdlKCkgLT4gKFdlYktpdDo6RWRpdGlu
Z1JhbmdlIHJhbmdlKQotICAgIENoYXJhY3RlckluZGV4Rm9yUG9pbnQoV2ViQ29yZTo6SW50UG9p
bnQgcG9pbnQpIC0+ICh1aW50NjRfdCByZXN1bHQpCi0gICAgRmlyc3RSZWN0Rm9yQ2hhcmFjdGVy
UmFuZ2UoV2ViS2l0OjpFZGl0aW5nUmFuZ2UgcmFuZ2UpIC0+IChXZWJDb3JlOjpJbnRSZWN0IHJl
c3VsdFJlY3QpCi0gICAgRXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoVmVjdG9yPFdlYkNvcmU6Oktl
eXByZXNzQ29tbWFuZD4gc2F2ZWRDb21tYW5kcykgLT4gKGJvb2wgaGFuZGxlZCwgV2ViS2l0OjpF
ZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKICAgICBTaG91bGREZWxheVdpbmRvd09yZGVyaW5nRXZlbnQo
V2ViS2l0OjpXZWJNb3VzZUV2ZW50IGV2ZW50KSAtPiAoYm9vbCByZXN1bHQpCiAgICAgQWNjZXB0
c0ZpcnN0TW91c2UoaW50IGV2ZW50TnVtYmVyLCBXZWJLaXQ6OldlYk1vdXNlRXZlbnQgZXZlbnQp
IC0+IChib29sIHJlc3VsdCkKIApAQCAtMzE0LDE0ICszMDMsMjMgQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgQ29uZmlybUNvbXBvc2l0aW9uQXN5bmMoKQogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oTUFDKQorICAgIENhbmNlbENvbXBvc2l0aW9uKCkgLT4gKFdlYktp
dDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUpCisgICAgSW5zZXJ0RGljdGF0ZWRUZXh0QXN5bmMoU3Ry
aW5nIHRleHQsIFdlYktpdDo6RWRpdGluZ1JhbmdlIHJlcGxhY2VtZW50UmFuZ2UsIFZlY3RvcjxX
ZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZT4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzKQorICAg
IEF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKFdlYktpdDo6RWRpdGlu
Z1JhbmdlIHJhbmdlLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JN
KE1BQykgJiYgIVVTRShBU1lOQ19OU1RFWFRJTlBVVENMSUVOVCkKICAgICBJbnNlcnRUZXh0KFN0
cmluZyB0ZXh0LCBXZWJLaXQ6OkVkaXRpbmdSYW5nZSByZXBsYWNlbWVudFJhbmdlKSAtPiAoYm9v
bCBoYW5kbGVkLCBXZWJLaXQ6OkVkaXRvclN0YXRlIG5ld1N0YXRlKQogICAgIFNldENvbXBvc2l0
aW9uKFN0cmluZyB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVu
ZGVybGluZXMsIFdlYktpdDo6RWRpdGluZ1JhbmdlIHNlbGVjdGlvblJhbmdlLCBXZWJLaXQ6OkVk
aXRpbmdSYW5nZSByZXBsYWNlbWVudFJhbmdlKSAtPiAoV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdT
dGF0ZSkKICAgICBDb25maXJtQ29tcG9zaXRpb24oKSAtPiAoV2ViS2l0OjpFZGl0b3JTdGF0ZSBu
ZXdTdGF0ZSkKICAgICBJbnNlcnREaWN0YXRlZFRleHQoU3RyaW5nIHRleHQsIFdlYktpdDo6RWRp
dGluZ1JhbmdlIHJlcGxhY2VtZW50UmFuZ2UsIFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRl
cm5hdGl2ZT4gZGljdGF0aW9uQWx0ZXJuYXRpdmVzKSAtPiAoYm9vbCBoYW5kbGVkLCBXZWJLaXQ6
OkVkaXRvclN0YXRlIG5ld1N0YXRlKQotICAgIEluc2VydERpY3RhdGVkVGV4dEFzeW5jKFN0cmlu
ZyB0ZXh0LCBXZWJLaXQ6OkVkaXRpbmdSYW5nZSByZXBsYWNlbWVudFJhbmdlLCBWZWN0b3I8V2Vi
Q29yZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmU+IGRpY3RhdGlvbkFsdGVybmF0aXZlcykKICAgICBH
ZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKFdlYktpdDo6RWRpdGluZ1JhbmdlIHJhbmdl
KSAtPiAoV2ViS2l0OjpBdHRyaWJ1dGVkU3RyaW5nIHJlc3VsdCkKLSAgICBBdHRyaWJ1dGVkU3Vi
c3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhXZWJLaXQ6OkVkaXRpbmdSYW5nZSByYW5nZSwg
dWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgR2V0TWFya2VkUmFuZ2UoKSAtPiAoV2ViS2l0OjpF
ZGl0aW5nUmFuZ2UgcmFuZ2UpCisgICAgR2V0U2VsZWN0ZWRSYW5nZSgpIC0+IChXZWJLaXQ6OkVk
aXRpbmdSYW5nZSByYW5nZSkKKyAgICBDaGFyYWN0ZXJJbmRleEZvclBvaW50KFdlYkNvcmU6Oklu
dFBvaW50IHBvaW50KSAtPiAodWludDY0X3QgcmVzdWx0KQorICAgIEZpcnN0UmVjdEZvckNoYXJh
Y3RlclJhbmdlKFdlYktpdDo6RWRpdGluZ1JhbmdlIHJhbmdlKSAtPiAoV2ViQ29yZTo6SW50UmVj
dCByZXN1bHRSZWN0KQorICAgIEV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKFZlY3RvcjxXZWJDb3Jl
OjpLZXlwcmVzc0NvbW1hbmQ+IHNhdmVkQ29tbWFuZHMpIC0+IChib29sIGhhbmRsZWQsIFdlYktp
dDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUpCiAjZW5kaWYKKwogICAgIFNldE1pbmltdW1MYXlvdXRT
aXplKFdlYkNvcmU6OkludFNpemUgbWluaW11bUxheW91dFNpemUpCiAgICAgU2V0QXV0b1Npemlu
Z1Nob3VsZEV4cGFuZFRvVmlld0hlaWdodChib29sIHNob3VsZEV4cGFuZCkKIApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQkocmV2aXNpb24gMTY1OTcyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTIgKzExMCw2IEBAIHZv
aWQgV2ViUGFnZTo6cGxhdGZvcm1QcmVmZXJlbmNlc0RpZENoYW4KICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCi1ib29sIFdlYlBhZ2U6OmV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzSW50ZXJuYWwo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCBLZXlib2FyZEV2ZW50KikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogRmxvYXRT
aXplIFdlYlBhZ2U6OnZpZXdwb3J0U2NyZWVuU2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
dmlld3BvcnRTY3JlZW5TaXplOwpAQCAtMTY3LDY4ICsxNjEsNiBAQCB2b2lkIFdlYlBhZ2U6OnNl
bmRDb21wbGV4VGV4dElucHV0VG9QbHVnCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJD
b3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgY29uc3QgRWRpdGluZ1Jhbmdl
JiBzZWxlY3Rpb25SYW5nZSkKLXsKLSAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotCi0gICAgaWYgKGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgICAgIGZyYW1lLmVkaXRv
cigpLnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblJhbmdlLmxvY2F0
aW9uLCBzZWxlY3Rpb25SYW5nZS5sb2NhdGlvbiArIHNlbGVjdGlvblJhbmdlLmxlbmd0aCk7Ci19
Ci0KLXZvaWQgV2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKCkKLXsKLSAgICBGcmFtZSYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAg
IGZyYW1lLmVkaXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbigpOwotfQotCi12b2lkIFdlYlBhZ2U6
OmNhbmNlbENvbXBvc2l0aW9uKEVkaXRvclN0YXRlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYlBhZ2U6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlKQotewotICAgIEZyYW1lJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0g
ICAgCi0gICAgaWYgKHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlLmxvY2F0aW9uICE9IG5vdEZvdW5k
KSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IHJhbmdlRnJvbUVk
aXRpbmdSYW5nZShmcmFtZSwgcmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UpOwotICAgICAgICBpZiAo
cmVwbGFjZW1lbnRSYW5nZSkKLSAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIFNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7Ci0gICAgfQotICAgIAotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuaGFzQ29t
cG9zaXRpb24oKSkgewotICAgICAgICAvLyBBbiBpbnNlcnRUZXh0OiBtaWdodCBiZSBoYW5kbGVk
IGJ5IG90aGVyIHJlc3BvbmRlcnMgaW4gdGhlIGNoYWluIGlmIHdlIGRvbid0IGhhbmRsZSBpdC4K
LSAgICAgICAgLy8gT25lIGV4YW1wbGUgaXMgc3BhY2UgYmFyIHRoYXQgcmVzdWx0cyBpbiBzY3Jv
bGxpbmcgZG93biB0aGUgcGFnZS4KLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dCh0
ZXh0LCBudWxscHRyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuY29uZmly
bUNvbXBvc2l0aW9uKHRleHQpOwotfQotCi12b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlKEVk
aXRpbmdSYW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdl
OjpnZXRTZWxlY3RlZFJhbmdlKEVkaXRpbmdSYW5nZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50KEludFBvaW50LCB1
aW50NjRfdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShjb25zdCBFZGl0aW5nUmFuZ2UmLCBXZWJDb3JlOjpJ
bnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlBhZ2U6OmV4
ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1h
bmQ+JiwgYm9vbCYsIEVkaXRvclN0YXRlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
CiB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBG
bG9hdFBvaW50JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNp
b24gMTY1OTcyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNiArMjQ2LDggQEAgdm9pZCBXZWJQYWdl
OjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1ZwogICAgIH0KIH0KIAorI2lmICFVU0UoQVNZTkNf
TlNURVhUSU5QVVRDTElFTlQpCisKIHZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb24oY29uc3Qg
U3RyaW5nJiB0ZXh0LCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIGNv
bnN0IEVkaXRpbmdSYW5nZSYgc2VsZWN0aW9uUmFuZ2UsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVw
bGFjZW1lbnRFZGl0aW5nUmFuZ2UsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSkKIHsKICAgICBGcmFt
ZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OwpAQCAtMjcwLDEzICsyNzIsNiBAQCB2b2lkIFdlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbihF
ZGl0b3JTCiAgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwogfQogCi12b2lkIFdlYlBhZ2U6
OmNhbmNlbENvbXBvc2l0aW9uKEVkaXRvclN0YXRlJiBuZXdTdGF0ZSkKLXsKLSAgICBGcmFtZSYg
ZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwot
ICAgIGZyYW1lLmVkaXRvcigpLmNhbmNlbENvbXBvc2l0aW9uKCk7Ci0gICAgbmV3U3RhdGUgPSBl
ZGl0b3JTdGF0ZSgpOwotfQotCiB2b2lkIFdlYlBhZ2U6Omluc2VydFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50RWRpdGluZ1JhbmdlLCBib29s
JiBoYW5kbGVkLCBFZGl0b3JTdGF0ZSYgbmV3U3RhdGUpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKQEAgLTMxNCwy
MCArMzA5LDYgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgUwogICAg
IG5ld1N0YXRlID0gZWRpdG9yU3RhdGUoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjppbnNlcnREaWN0
YXRlZFRleHRBc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVw
bGFjZW1lbnRFZGl0aW5nUmFuZ2UsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRl
cm5hdGl2ZT4mIGRpY3RhdGlvbkFsdGVybmF0aXZlTG9jYXRpb25zKQotewotICAgIEZyYW1lJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0K
LSAgICBpZiAocmVwbGFjZW1lbnRFZGl0aW5nUmFuZ2UubG9jYXRpb24gIT0gbm90Rm91bmQpIHsK
LSAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gcmFuZ2VGcm9tRWRpdGlu
Z1JhbmdlKGZyYW1lLCByZXBsYWNlbWVudEVkaXRpbmdSYW5nZSk7Ci0gICAgICAgIGlmIChyZXBs
YWNlbWVudFJhbmdlKQotICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24ocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgU0VMX0RFRkFVTFRfQUZG
SU5JVFkpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIWZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0
aW9uKCkpOwotICAgIGZyYW1lLmVkaXRvcigpLmluc2VydERpY3RhdGVkVGV4dCh0ZXh0LCBkaWN0
YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucywgbnVsbHB0cik7Ci19Ci0KIHZvaWQgV2ViUGFnZTo6
Z2V0TWFya2VkUmFuZ2UoRWRpdGluZ1JhbmdlJiByZXN1bHQpCiB7CiAgICAgRnJhbWUmIGZyYW1l
ID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKQEAgLTM3
OSwzOSArMzYwLDYgQEAgdm9pZCBXZWJQYWdlOjpnZXRBdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbQog
ICAgIH0KIH0KIAotdm9pZCBXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVy
UmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdSYW5nZSwgdWludDY0X3QgY2Fs
bGJhY2tJRCkKLXsKLSAgICBBdHRyaWJ1dGVkU3RyaW5nIHJlc3VsdDsKLQotICAgIEZyYW1lJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0K
LSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpIHx8ICFzZWxlY3Rpb24u
aXNDb250ZW50RWRpdGFibGUoKSB8fCBzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKSkgewot
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJpYnV0ZWRTdHJpbmdGb3JD
aGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwgRWRpdGluZ1JhbmdlKCksIGNhbGxiYWNrSUQp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBy
YW5nZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7Ci0gICAgaWYgKCFyYW5n
ZSkgewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJpYnV0ZWRTdHJp
bmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwgRWRpdGluZ1JhbmdlKCksIGNhbGxi
YWNrSUQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3VsdC5zdHJpbmcgPSBb
V2ViSFRNTENvbnZlcnRlciBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpyYW5nZS5n
ZXQoKV07Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyaWJ1dGVkU3RyaW5nID0gcmVzdWx0
LnN0cmluZy5nZXQoKTsKLSAgICAKLSAgICAvLyBbV2ViSFRNTENvbnZlcnRlciBlZGl0aW5nQXR0
cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpdIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJhaWxpbmcg
Ci0gICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2hpY2ggYnJlYWtz
IHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFyOi8vcHJvYmxlbS81NDAwNTUxPgotICAgIC8v
IFRvIHdvcmsgYXJvdW5kIHRoaXMgd2UgdHJ1bmNhdGUgdGhlIHJlc3VsdGFudCBzdHJpbmcgdG8g
dGhlIGNvcnJlY3QgbGVuZ3RoLgotICAgIGlmIChbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdID4g
ZWRpdGluZ1JhbmdlLmxlbmd0aCkgewotICAgICAgICBBU1NFUlQoW2F0dHJpYnV0ZWRTdHJpbmcg
bGVuZ3RoXSA9PSBlZGl0aW5nUmFuZ2UubGVuZ3RoICsgMSk7Ci0gICAgICAgIEFTU0VSVChbW2F0
dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4OmVkaXRpbmdSYW5nZS5sZW5n
dGhdID09ICdcbicgfHwgW1thdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10gY2hhcmFjdGVyQXRJbmRl
eDplZGl0aW5nUmFuZ2UubGVuZ3RoXSA9PSAnICcpOwotICAgICAgICByZXN1bHQuc3RyaW5nID0g
W2F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5n
ZSgwLCBlZGl0aW5nUmFuZ2UubGVuZ3RoKV07Ci0gICAgfQotCi0gICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhy
ZXN1bHQsIEVkaXRpbmdSYW5nZShlZGl0aW5nUmFuZ2UubG9jYXRpb24sIFtyZXN1bHQuc3RyaW5n
IGxlbmd0aF0pLCBjYWxsYmFja0lEKSk7Ci19Ci0KIHZvaWQgV2ViUGFnZTo6Y2hhcmFjdGVySW5k
ZXhGb3JQb2ludChJbnRQb2ludCBwb2ludCwgdWludDY0X3QmIGluZGV4KQogewogICAgIGluZGV4
ID0gbm90Rm91bmQ7CkBAIC00NTIsNiArNDAwLDYyIEBAIHZvaWQgV2ViUGFnZTo6ZXhlY3V0ZUtl
eXByZXNzQ29tbWFuZHMoY28KICAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRlKCk7CiB9CiAKKyNl
bmRpZiAvLyAhVVNFKEFTWU5DX05TVEVYVElOUFVUQ0xJRU5UKQorCit2b2lkIFdlYlBhZ2U6OmNh
bmNlbENvbXBvc2l0aW9uKEVkaXRvclN0YXRlJiBuZXdTdGF0ZSkKK3sKKyAgICBGcmFtZSYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAg
IGZyYW1lLmVkaXRvcigpLmNhbmNlbENvbXBvc2l0aW9uKCk7CisgICAgbmV3U3RhdGUgPSBlZGl0
b3JTdGF0ZSgpOworfQorCit2b2lkIFdlYlBhZ2U6Omluc2VydERpY3RhdGVkVGV4dEFzeW5jKGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudEVkaXRpbmdS
YW5nZSwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkRpY3RhdGlvbkFsdGVybmF0aXZlPiYgZGljdGF0
aW9uQWx0ZXJuYXRpdmVMb2NhdGlvbnMpCit7CisgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKworICAgIGlmIChyZXBsYWNl
bWVudEVkaXRpbmdSYW5nZS5sb2NhdGlvbiAhPSBub3RGb3VuZCkgeworICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSByYW5nZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIHJl
cGxhY2VtZW50RWRpdGluZ1JhbmdlKTsKKyAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpCisg
ICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgIH0K
KworICAgIEFTU0VSVCghZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSk7CisgICAgZnJh
bWUuZWRpdG9yKCkuaW5zZXJ0RGljdGF0ZWRUZXh0KHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZl
TG9jYXRpb25zLCBudWxscHRyKTsKK30KKwordm9pZCBXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3Ry
aW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXRpbmdSYW5n
ZSwgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBBdHRyaWJ1dGVkU3RyaW5nIHJlc3VsdDsK
KworICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCk7CisKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgp
IHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCBzZWxlY3Rpb24uaXNJblBhc3N3
b3JkRmllbGQoKSkgeworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJp
YnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwgRWRpdGluZ1Jhbmdl
KCksIGNhbGxiYWNrSUQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSByYW5nZUZyb21FZGl0aW5nUmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7
CisgICAgaWYgKCFyYW5nZSkgeworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKHJlc3VsdCwgRWRpdGlu
Z1JhbmdlKCksIGNhbGxiYWNrSUQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJl
c3VsdC5zdHJpbmcgPSBbV2ViSFRNTENvbnZlcnRlciBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zy
b21SYW5nZTpyYW5nZS5nZXQoKV07CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyaWJ1dGVk
U3RyaW5nID0gcmVzdWx0LnN0cmluZy5nZXQoKTsKKyAgICAKKyAgICAvLyBbV2ViSFRNTENvbnZl
cnRlciBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpdIGluc2lzdHMgb24gaW5zZXJ0
aW5nIGEgdHJhaWxpbmcgCisgICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJp
bmcgd2hpY2ggYnJlYWtzIHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFyOi8vcHJvYmxlbS81
NDAwNTUxPgorICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMgd2UgdHJ1bmNhdGUgdGhlIHJlc3Vs
dGFudCBzdHJpbmcgdG8gdGhlIGNvcnJlY3QgbGVuZ3RoLgorICAgIGlmIChbYXR0cmlidXRlZFN0
cmluZyBsZW5ndGhdID4gZWRpdGluZ1JhbmdlLmxlbmd0aCkgeworICAgICAgICBBU1NFUlQoW2F0
dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSA9PSBlZGl0aW5nUmFuZ2UubGVuZ3RoICsgMSk7CisgICAg
ICAgIEFTU0VSVChbW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4OmVk
aXRpbmdSYW5nZS5sZW5ndGhdID09ICdcbicgfHwgW1thdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ10g
Y2hhcmFjdGVyQXRJbmRleDplZGl0aW5nUmFuZ2UubGVuZ3RoXSA9PSAnICcpOworICAgICAgICBy
ZXN1bHQuc3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21S
YW5nZTpOU01ha2VSYW5nZSgwLCBlZGl0aW5nUmFuZ2UubGVuZ3RoKV07CisgICAgfQorCisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVy
UmFuZ2VDYWxsYmFjayhyZXN1bHQsIEVkaXRpbmdSYW5nZShlZGl0aW5nUmFuZ2UubG9jYXRpb24s
IFtyZXN1bHQuc3RyaW5nIGxlbmd0aF0pLCBjYWxsYmFja0lEKSk7Cit9CisKIHN0YXRpYyBib29s
IGlzUG9zaXRpb25JblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIFJhbmdl
KiByYW5nZSkKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHBvc2l0aW9uUmFuZ2UgPSBtYWtlUmFuZ2Uo
cG9zaXRpb24sIHBvc2l0aW9uKTsK
</data>
<flag name="review"
          id="251584"
          type_id="1"
          status="+"
          setter="enrica"
    />
          </attachment>
      

    </bug>

</bugzilla>