<?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>103930</bug_id>
          
          <creation_ts>2012-12-03 14:38:14 -0800</creation_ts>
          <short_desc>[BlackBerry] Store rendered regions in pixel contents coordinates</short_desc>
          <delta_ts>2012-12-04 05:06:42 -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>WebKit BlackBerry</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>
          <dependson>103924</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jakob Petsovits">jpetsovits</reporter>
          <assigned_to name="Jakob Petsovits">jpetsovits</assigned_to>
          <cc>mifenton</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>781895</commentid>
    <comment_count>0</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-12-03 14:38:14 -0800</bug_when>
    <thetext>Currently, the rendered region of a tile is stored in coordinates relative to the tile origin. This brings no benefits whatsoever and causes a lot of unnecessary transformations, together with the potential of incorrectly transforming rendered regions.

By storing the rendered region as what it is (actual pixel coordinates relative to the page origin), everything is more compact, easier to understand and easier to use with other existing functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781896</commentid>
    <comment_count>1</comment_count>
      <attachid>177336</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-12-03 14:42:18 -0800</bug_when>
    <thetext>Created attachment 177336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781903</commentid>
    <comment_count>2</comment_count>
      <attachid>177336</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-12-03 14:49:44 -0800</bug_when>
    <thetext>Comment on attachment 177336
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781957</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-03 15:35:21 -0800</bug_when>
    <thetext>Attachment 177336 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/blackberry/Api/BackingStore....&quot; exit_code: 1
Source/WebKit/blackberry/Api/BackingStore.cpp:1456:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/blackberry/Api/BackingStore.cpp:1602:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/blackberry/Api/BackingStore.cpp:1634:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit/blackberry/Api/BackingStore.cpp:2221:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782006</commentid>
    <comment_count>4</comment_count>
      <attachid>177365</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-12-03 16:14:07 -0800</bug_when>
    <thetext>Created attachment 177365
Patch

With much love to the stylebot for punishing me for Adam&apos;s weird argument passing style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782007</commentid>
    <comment_count>5</comment_count>
      <attachid>177365</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-12-03 16:15:20 -0800</bug_when>
    <thetext>Comment on attachment 177365
Patch

Wait, no, that didn&apos;t work. I thought I had Rob added to the ChangeLog for his previous review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782009</commentid>
    <comment_count>6</comment_count>
      <attachid>177366</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-12-03 16:16:29 -0800</bug_when>
    <thetext>Created attachment 177366
Patch

There we go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782011</commentid>
    <comment_count>7</comment_count>
      <attachid>177366</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-12-03 16:17:22 -0800</bug_when>
    <thetext>Comment on attachment 177366
Patch

Reviewed by Rob above, with only the style changes that the bot requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782275</commentid>
    <comment_count>8</comment_count>
      <attachid>177366</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-03 23:39:38 -0800</bug_when>
    <thetext>Comment on attachment 177366
Patch

Rejecting attachment 177366 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
it line 152.

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;, &apos;--force-update&apos;]&quot; exit_code: 2
Updating OpenSource
From http://git.chromium.org/external/Webkit
 + 47362e2...11ff3a0 HEAD       -&gt; origin/HEAD  (forced update)
error: Ref refs/remotes/origin/master is at 11ff3a04a1253c816672777de9904bb4958f6164 but expected 47362e29d772f5dceffea68840d001b228849649
 ! 47362e2...11ff3a0 master     -&gt; origin/master  (unable to update local ref)
Died at Tools/Scripts/update-webkit line 152.

Full output: http://queues.webkit.org/results/15133278</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782471</commentid>
    <comment_count>9</comment_count>
      <attachid>177366</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-04 05:06:37 -0800</bug_when>
    <thetext>Comment on attachment 177366
Patch

Clearing flags on attachment: 177366

Committed r136503: &lt;http://trac.webkit.org/changeset/136503&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782472</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-04 05:06:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177336</attachid>
            <date>2012-12-03 14:42:18 -0800</date>
            <delta_ts>2012-12-03 16:14:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103930-20121203173934.patch</filename>
            <type>text/plain</type>
            <size>40852</size>
            <attacher name="Jakob Petsovits">jpetsovits</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Mzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpp
bmRleCAxN2RkN2QyOGY0MzIwNmI1OWFmYzJiZjJlMTVlMDMwZmQxMThmMzcxLi41YzFiNWQ5NTE3
M2IxNzUwYjhkZTY3NzVmN2NmMTE1OWZmODFjZTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMi0xMi0wNCAgSmFrb2IgUGV0c292aXRzICA8anBl
dHNvdml0c0ByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBTdG9yZSByZW5kZXJlZCBy
ZWdpb25zIGluIHBpeGVsIGNvbnRlbnRzIGNvb3JkaW5hdGVzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTMwCisgICAgICAgIFBSIDI1MzQ5Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBJbnRlcm5hbGx5
IHJldmlld2VkIGJ5IEFkYW0gVHJlYXQuCisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIHJlbmRl
cmVkIHJlZ2lvbiBvZiBhIHRpbGUgdXNlZCB0byBiZQorICAgICAgICBzdG9yZWQgaW4gY29vcmRp
bmF0ZXMgcmVsYXRpdmUgdG8gdGhlIHRpbGUgb3JpZ2luLgorICAgICAgICBUaGlzIGJyaW5ncyBu
byBiZW5lZml0cyB3aGF0c29ldmVyIGFuZCBjYXVzZXMgYSBsb3QKKyAgICAgICAgb2YgdW5uZWNl
c3NhcnkgdHJhbnNmb3JtYXRpb25zLCB0b2dldGhlciB3aXRoIHRoZQorICAgICAgICBwb3RlbnRp
YWwgb2YgaW5jb3JyZWN0bHkgdHJhbnNmb3JtaW5nIHJlbmRlcmVkIHJlZ2lvbnMuCisKKyAgICAg
ICAgQnkgc3RvcmluZyB0aGUgcmVuZGVyZWQgcmVnaW9uIGFzIHdoYXQgaXQgaXMsCisgICAgICAg
IGV2ZXJ5dGhpbmcgaXMgbW9yZSBjb21wYWN0LCBlYXNpZXIgdG8gdW5kZXJzdGFuZAorICAgICAg
ICBhbmQgZWFzaWVyIHRvIHVzZSB3aXRoIG90aGVyIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuCisK
KyAgICAgICAgKiBBcGkvQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6Y2xlYXJBbmRVcGRhdGVUaWxlT2ZOb3RSZW5kZXJl
ZFJlZ2lvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZh
dGU6OmlzQ3VycmVudFZpc2libGVKb2IpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpC
YWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXJWaXNpYmxlQ29udGVudHMpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpjb3B5UHJldmlvdXNDb250
ZW50c1RvVGlsZUJ1ZmZlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdT
dG9yZVByaXZhdGU6OmJsaXRWaXNpYmxlQ29udGVudHMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpjb21wb3NpdGVDb250ZW50cyk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRUaWxlUmVjdCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OmlzVGls
ZVZpc2libGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2
YXRlOjp2aXNpYmxlVGlsZXNSZWN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFj
a2luZ1N0b3JlUHJpdmF0ZTo6dGlsZVZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp0aWxlQ29udGVudHNSZWN0KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRl
VGlsZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRl
Ojp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24pOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tUGl4ZWxDb250ZW50
c1RvVGlsZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2
YXRlOjp0cmFuc2Zvcm1DaGFuZ2VkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFj
a2luZ1N0b3JlUHJpdmF0ZTo6YmxpdFRvV2luZG93KToKKyAgICAgICAgKiBBcGkvQmFja2luZ1N0
b3JlX3AuaDoKKyAgICAgICAgKEJhY2tpbmdTdG9yZVByaXZhdGUpOgorICAgICAgICAqIFdlYktp
dFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OlRpbGVCdWZmZXI6OnN1cmZhY2VSZWN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6VGlsZUJ1ZmZlcjo6cGl4ZWxDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VGlsZUJ1ZmZlcjo6aXNSZW5kZXJlZCk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRpbGVCdWZmZXI6Om5vdFJlbmRlcmVkUmVnaW9uKToK
KyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuaDoKKyAgICAgICAgKFRp
bGVCdWZmZXIpOgorCiAyMDEyLTEyLTAzICBKYWtvYiBQZXRzb3ZpdHMgIDxqcGV0c292aXRzQHJp
bS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIFJlZmFjdG9yIHRoZSBiYWNraW5nc3RvcmUg
dG8gc3dhcCBmdWxsIGdlb21ldHJpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggOWNhYzI5MGNkMmRiMTgxMTQ3ZDU4MDJmZGVmMDcwZjY4
M2E2YTcyYS4uMzJiOTIxOTJiOWYyOTRjZjcyZTVlNGUyMjlhMmQzNjU5NzQxYTAwYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAtOTAyLDE1
ICs5MDIsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmNsZWFyQW5kVXBkYXRlVGlsZU9m
Tm90UmVuZGVyZWRSZWdpb24oY29uc3QgVGlsZUluZGV4JgogICAgIGlmICghdGlsZUJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRmluZCB0aGUgb3JpZ2luIG9mIHRoaXMgdGlsZS4K
LSAgICBQbGF0Zm9ybTo6SW50UG9pbnQgb3JpZ2luID0gZ2VvbWV0cnktPm9yaWdpbk9mVGlsZShp
bmRleCk7Ci0KLSAgICAvLyBNYXAgdG8gdGlsZSBjb29yZGluYXRlcy4KLSAgICBQbGF0Zm9ybTo6
SW50UmVjdFJlZ2lvbiB0cmFuc2xhdGVkUmVnaW9uKHRpbGVOb3RSZW5kZXJlZFJlZ2lvbik7Ci0g
ICAgdHJhbnNsYXRlZFJlZ2lvbi5tb3ZlKC1vcmlnaW4ueCgpLCAtb3JpZ2luLnkoKSk7Ci0KICAg
ICAvLyBJZiB0aGUgcmVnaW9uIGluIHF1ZXN0aW9uIGlzIGFscmVhZHkgbWFya2VkIGFzIG5vdCBy
ZW5kZXJlZCwgcmV0dXJuIGVhcmx5Ci0gICAgaWYgKFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpp
bnRlcnNlY3RSZWdpb25zKHRpbGVCdWZmZXItPnJlbmRlcmVkUmVnaW9uKCksIHRyYW5zbGF0ZWRS
ZWdpb24pLmlzRW1wdHkoKSkKKyAgICBpZiAoUGxhdGZvcm06OkludFJlY3RSZWdpb246OmludGVy
c2VjdFJlZ2lvbnModGlsZUJ1ZmZlci0+cmVuZGVyZWRSZWdpb24oKSwgdGlsZU5vdFJlbmRlcmVk
UmVnaW9uKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENsZWFyIHRoZSB0
aWxlIG9mIHRoaXMgcmVnaW9uLiBUaGUgYmFjayBidWZmZXIgcmVnaW9uIGlzIGludmFsaWQgYW55
d2F5LCBidXQgdGhlIGZyb250CkBAIC05MjcsNyArOTIwLDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQ
cml2YXRlOjpjbGVhckFuZFVwZGF0ZVRpbGVPZk5vdFJlbmRlcmVkUmVnaW9uKGNvbnN0IFRpbGVJ
bmRleCYKIAogICAgIFBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgp
LT5kaXNwYXRjaFN5bmNNZXNzYWdlKAogICAgICAgICBQbGF0Zm9ybTo6Y3JlYXRlTWV0aG9kQ2Fs
bE1lc3NhZ2UoJkJhY2tpbmdTdG9yZVByaXZhdGU6OmNsZWFyUmVuZGVyZWRSZWdpb24sCi0gICAg
ICAgICAgICB0aGlzLCB0aWxlQnVmZmVyLCB0cmFuc2xhdGVkUmVnaW9uKSk7CisgICAgICAgICAg
ICB0aGlzLCB0aWxlQnVmZmVyLCB0aWxlTm90UmVuZGVyZWRSZWdpb24pKTsKIH0KIAogdm9pZCBC
YWNraW5nU3RvcmVQcml2YXRlOjpjbGVhclJlbmRlcmVkUmVnaW9uKFRpbGVCdWZmZXIqIHRpbGVC
dWZmZXIsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZWdpb24pCkBAIC05NTYsMTUg
Kzk0OSw5IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6aXNDdXJyZW50VmlzaWJsZUpvYihj
b25zdCBUaWxlSW5kZXgmIGluZGV4LCBUaWxlQnVmZmVyCiAgICAgSW50UmVjdExpc3QgdGlsZU5v
dFJlbmRlcmVkUmVnaW9uUmVjdHMgPSB0aWxlQnVmZmVyLT5ub3RSZW5kZXJlZFJlZ2lvbigpLnJl
Y3RzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVOb3RSZW5kZXJlZFJlZ2lv
blJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRpbGVOb3RS
ZW5kZXJlZFJlZ2lvblJlY3QgPSB0aWxlTm90UmVuZGVyZWRSZWdpb25SZWN0cy5hdChpKTsKLQot
ICAgICAgICAvLyBNYXAgdG8gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCi0gICAg
ICAgIHRpbGVOb3RSZW5kZXJlZFJlZ2lvblJlY3QubW92ZSh0aWxlT3JpZ2luLngoKSwgdGlsZU9y
aWdpbi55KCkpOwotCi0gICAgICAgIGlmICghbV9yZW5kZXJRdWV1ZS0+aXNDdXJyZW50UmVndWxh
clJlbmRlckpvYih0aWxlTm90UmVuZGVyZWRSZWdpb25SZWN0KSkKKyAgICAgICAgaWYgKCFtX3Jl
bmRlclF1ZXVlLT5pc0N1cnJlbnRSZWd1bGFyUmVuZGVySm9iKHRpbGVOb3RSZW5kZXJlZFJlZ2lv
blJlY3RzLmF0KGkpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA2MywxMCArMTA1MCw2IEBAIGJvb2wgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6cmVuZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQogICAgIC8vIHRp
bGUgbWF0cml4IHVwZGF0aW5nIHdpdGggYmFja2luZ3N0b3JlIHVwZGF0ZXMKICAgICB1cGRhdGVU
aWxlTWF0cml4SWZOZWVkZWQoKTsKIAotICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBt
YXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXMocmVjdCk7Ci0gICAgaWYgKHRpbGVSZWN0
TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogI2lmIERFQlVHX0JBQ0tJ
TkdTVE9SRQogICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbENyaXRpY2Fs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhY2tpbmdTdG9yZVByaXZhdGU6OnJlbmRl
ciByZWN0PSglZCwlZCAlZHglZCksIG1fc3VzcGVuZEJhY2tpbmdTdG9yZVVwZGF0ZXMgPSAlcyIs
CkBAIC0xMDc4LDYgKzEwNjEsMTAgQEAgYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIo
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpCiAgICAgVGlsZU1hcCBvbGRUaWxlTWFwID0g
Y3VycmVudFN0YXRlLT50aWxlTWFwKCk7CiAgICAgZG91YmxlIGN1cnJlbnRTY2FsZSA9IGN1cnJl
bnRTdGF0ZS0+c2NhbGUoKTsKIAorICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBtYXBG
cm9tUGl4ZWxDb250ZW50c1RvVGlsZXMocmVjdCwgY3VycmVudFN0YXRlKTsKKyAgICBpZiAodGls
ZVJlY3RMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgQmFja2lu
Z1N0b3JlR2VvbWV0cnkqIG5ld0dlb21ldHJ5ID0gbmV3IEJhY2tpbmdTdG9yZUdlb21ldHJ5Owog
ICAgIG5ld0dlb21ldHJ5LT5zZXRTY2FsZShjdXJyZW50U3RhdGUtPnNjYWxlKCkpOwogICAgIG5l
d0dlb21ldHJ5LT5zZXROdW1iZXJPZlRpbGVzV2lkZShjdXJyZW50U3RhdGUtPm51bWJlck9mVGls
ZXNXaWRlKCkpOwpAQCAtMTA4OCwxMyArMTA3NSw5IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6cmVuZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdGlsZVJlY3RMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIFRpbGVSZWN0
IHRpbGVSZWN0ID0gdGlsZVJlY3RMaXN0W2ldOwogICAgICAgICBUaWxlSW5kZXggaW5kZXggPSB0
aWxlUmVjdC5maXJzdDsKLSAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlUaWxlUmVjdCA9
IHRpbGVSZWN0LnNlY29uZDsKKyAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlSZWN0ID0g
dGlsZVJlY3Quc2Vjb25kOwogICAgICAgICBUaWxlQnVmZmVyKiBmcm9udEJ1ZmZlciA9IG9sZFRp
bGVNYXAuZ2V0KGluZGV4KTsKIAotICAgICAgICAvLyBUaGlzIGRpcnR5IHRpbGUgcmVjdCBpcyBp
biB0aWxlIGNvb3JkaW5hdGVzLCBidXQgaXQgbmVlZHMgdG8gYmUgaW4KLSAgICAgICAgLy8gdHJh
bnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCi0gICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0
IGRpcnR5UmVjdCA9IG1hcEZyb21UaWxlc1RvVHJhbnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCk7
Ci0KICAgICAgICAgaWYgKCFTdXJmYWNlUG9vbDo6Z2xvYmFsU3VyZmFjZVBvb2woKS0+aGFzQmFj
a0J1ZmZlcigpKSB7CiAgICAgICAgICAgICBuZXdHZW9tZXRyeS0+c2V0VGlsZU1hcChuZXdUaWxl
TWFwKTsKICAgICAgICAgICAgIGFkb3B0QXNGcm9udFN0YXRlKG5ld0dlb21ldHJ5KTsgLy8gdGhp
cyBzaG91bGQgZ2V0IHVzIGF0IGxlYXN0IG9uZSBtb3JlLgpAQCAtMTExNSw4ICsxMDk4LDYgQEAg
Ym9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIoY29uc3QgUGxhdGZvcm06OkludFJlY3Qm
IHJlY3QpCiAgICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2Ugc2hvdWxkIGNsaXAgdGhlIGNvbnRl
bnRzIHNpemUgYW5kIHJlbmRlciB0aGUgY29udGVudC4KICAgICAgICAgICAgIGRpcnR5UmVjdC5p
bnRlcnNlY3QoZXhwYW5kZWRDb250ZW50c1JlY3QoKSk7CiAKLSAgICAgICAgICAgIGRpcnR5VGls
ZVJlY3QuaW50ZXJzZWN0KHRpbGVDb250ZW50c1JlY3QoaW5kZXgsIGV4cGFuZGVkQ29udGVudHNS
ZWN0KCksIGN1cnJlbnRTdGF0ZSkpOwotCiAgICAgICAgICAgICAvLyBXZSBwcm9iYWJseSBoYXZl
IGV4dHJhIHRpbGVzIHNpbmNlIHRoZSBjb250ZW50cyBzaXplIGlzIHNvIHNtYWxsLgogICAgICAg
ICAgICAgLy8gU2F2ZSBzb21lIGN5Y2xlcyBoZXJlLi4uCiAgICAgICAgICAgICBpZiAoZGlydHlS
ZWN0LmlzRW1wdHkoKSkKQEAgLTExMzIsNyArMTExMywxMCBAQCBib29sIEJhY2tpbmdTdG9yZVBy
aXZhdGU6OnJlbmRlcihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkKICAgICAgICAgaWYg
KCFiYWNrQnVmZmVyLT5iYWNrZ3JvdW5kUGFpbnRlZCgpKQogICAgICAgICAgICAgYmFja0J1ZmZl
ci0+cGFpbnRCYWNrZ3JvdW5kKCk7CiAKKyAgICAgICAgUGxhdGZvcm06OkludFBvaW50IHRpbGVP
cmlnaW4gPSBjdXJyZW50U3RhdGUtPm9yaWdpbk9mVGlsZShpbmRleCk7CiAgICAgICAgIGJhY2tC
dWZmZXItPnNldExhc3RSZW5kZXJTY2FsZShjdXJyZW50U2NhbGUpOworICAgICAgICBiYWNrQnVm
ZmVyLT5zZXRMYXN0UmVuZGVyT3JpZ2luKHRpbGVPcmlnaW4pOworICAgICAgICBiYWNrQnVmZmVy
LT5jbGVhclJlbmRlcmVkUmVnaW9uKCk7CiAKICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCdWZmZXIqIG5hdGl2ZUJ1ZmZlciA9IGJhY2tCdWZmZXItPm5hdGl2ZUJ1ZmZl
cigpOwogCkBAIC0xMTQzLDIwICsxMTI3LDE2IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
cmVuZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQogICAgICAgICAgICAgU3VyZmFj
ZVBvb2w6Omdsb2JhbFN1cmZhY2VQb29sKCktPndhaXRGb3JCdWZmZXIoYmFja0J1ZmZlcik7CiAK
ICAgICAgICAgLy8gTW9kaWZ5IHRoZSBidWZmZXIgb25seSBhZnRlciB3ZSd2ZSB3YWl0ZWQgZm9y
IGl0IHRvIGJlY29tZSBhdmFpbGFibGUgYWJvdmUuCi0gICAgICAgIFBsYXRmb3JtOjpJbnRQb2lu
dCB0aWxlT3JpZ2luID0gY3VycmVudFN0YXRlLT5vcmlnaW5PZlRpbGUoaW5kZXgpOwogICAgICAg
ICBib29sIGZyb250QnVmZmVySGFzVXNhYmxlQ29udGVudHMgPSBjdXJyZW50U3RhdGUtPmlzVGls
ZUNvcnJlc3BvbmRpbmdUb0J1ZmZlcihpbmRleCwgZnJvbnRCdWZmZXIpOwogICAgICAgICBpZiAo
ZnJvbnRCdWZmZXJIYXNVc2FibGVDb250ZW50cykKLSAgICAgICAgICAgIGNvcHlQcmV2aW91c0Nv
bnRlbnRzVG9UaWxlQnVmZmVyKGRpcnR5VGlsZVJlY3QsIGJhY2tCdWZmZXIsIGZyb250QnVmZmVy
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFja0J1ZmZlci0+Y2xlYXJSZW5kZXJlZFJl
Z2lvbigpOworICAgICAgICAgICAgY29weVByZXZpb3VzQ29udGVudHNUb1RpbGVCdWZmZXIoZGly
dHlSZWN0LCBiYWNrQnVmZmVyLCBmcm9udEJ1ZmZlcik7CiAKICAgICAgICAgLy8gRklYTUU6IG1v
ZGlmeSByZW5kZXIgdG8gdGFrZSBhIFZlY3RvcjxJbnRSZWN0PiBwYXJhbWV0ZXIgc28gd2UncmUg
bm90IHJlY3JlYXRpbmcKICAgICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG9uIHRoZSBzdGFjayBl
YWNoIHRpbWUuCiAgICAgICAgIHJlbmRlckNvbnRlbnRzKG5hdGl2ZUJ1ZmZlciwgdGlsZU9yaWdp
biwgZGlydHlSZWN0KTsKIAogICAgICAgICAvLyBBZGQgdGhlIG5ld2x5IHJlbmRlcmVkIHJlZ2lv
biB0byB0aGUgdGlsZSBzbyBpdCBjYW4ga2VlcCB0cmFjayBmb3IgYmxpdHMuCi0gICAgICAgIGJh
Y2tCdWZmZXItPmFkZFJlbmRlcmVkUmVnaW9uKGRpcnR5VGlsZVJlY3QpOwotICAgICAgICBiYWNr
QnVmZmVyLT5zZXRMYXN0UmVuZGVyT3JpZ2luKHRpbGVPcmlnaW4pOworICAgICAgICBiYWNrQnVm
ZmVyLT5hZGRSZW5kZXJlZFJlZ2lvbihkaXJ0eVJlY3QpOwogCiAgICAgICAgIC8vIFRoYW5rcyB0
byB0aGUgY29weVByZXZpb3VzQ29udGVudHNUb0JhY2tTdXJmYWNlT2ZUaWxlKCkgY2FsbCBhYm92
ZSwgd2Uga25vdyB0aGF0CiAgICAgICAgIC8vIHRoZSByZW5kZXJlZCByZWdpb24gb2YgdGhlIGJh
Y2sgYnVmZmVyIGNvbnRhaW5zIHRoZSByZW5kZXJlZCByZWdpb24gb2YgdGhlIGZyb250IGJ1ZmZl
ci4KQEAgLTExODEsNyArMTE2MSw3IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVxdWVz
dExheW91dElmTmVlZGVkKCkgY29uc3QKIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVuZGVy
VmlzaWJsZUNvbnRlbnRzKCkKIHsKICAgICB1cGRhdGVUaWxlTWF0cml4SWZOZWVkZWQoKTsKLSAg
ICBQbGF0Zm9ybTo6SW50UmVjdCByZW5kZXJSZWN0ID0gc2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9X
aW5kb3coKSA/IHZpc2libGVDb250ZW50c1JlY3QoKSA6IHZpc2libGVUaWxlc1JlY3QoKTsKKyAg
ICBQbGF0Zm9ybTo6SW50UmVjdCByZW5kZXJSZWN0ID0gc2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9X
aW5kb3coKSA/IHZpc2libGVDb250ZW50c1JlY3QoKSA6IHZpc2libGVUaWxlc1JlY3QoZnJvbnRT
dGF0ZSgpKTsKICAgICBpZiAocmVuZGVyKHJlbmRlclJlY3QpKSB7CiAgICAgICAgIG1fcmVuZGVy
UXVldWUtPmNsZWFyKHJlbmRlclJlY3QsIHRydWUgLypjbGVhclJlZ3VsYXJSZW5kZXJKb2JzKi8p
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMDgsMjEgKzExODgsMjEgQEAgdm9pZCBCYWNr
aW5nU3RvcmVQcml2YXRlOjpjb3B5UHJldmlvdXNDb250ZW50c1RvQmFja1N1cmZhY2VPZldpbmRv
dygpCiAgICAgd2luZG93QmFja0J1ZmZlclN0YXRlKCktPmFkZEJsaXR0ZWRSZWdpb24ocHJldmlv
dXNDb250ZW50c1JlZ2lvbik7CiB9CiAKLXZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6Y29weVBy
ZXZpb3VzQ29udGVudHNUb1RpbGVCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGV4Y2x1
ZGVSZWN0LCBUaWxlQnVmZmVyKiBkc3RUaWxlQnVmZmVyLCBUaWxlQnVmZmVyKiBzcmNUaWxlQnVm
ZmVyKQordm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpjb3B5UHJldmlvdXNDb250ZW50c1RvVGls
ZUJ1ZmZlcihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgZXhjbHVkZUNvbnRlbnRzUmVjdCwgVGls
ZUJ1ZmZlciogZHN0VGlsZUJ1ZmZlciwgVGlsZUJ1ZmZlciogc3JjVGlsZUJ1ZmZlcikKIHsKICAg
ICBBU1NFUlQoZHN0VGlsZUJ1ZmZlcik7CiAgICAgQVNTRVJUKHNyY1RpbGVCdWZmZXIpOwogCi0g
ICAgZHN0VGlsZUJ1ZmZlci0+Y2xlYXJSZW5kZXJlZFJlZ2lvbigpOwotCiAgICAgUGxhdGZvcm06
OkludFJlY3RSZWdpb24gcHJldmlvdXNDb250ZW50c1JlZ2lvbgotICAgICAgICA9IFBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMoc3JjVGlsZUJ1ZmZlci0+cmVuZGVyZWRS
ZWdpb24oKSwgZXhjbHVkZVJlY3QpOworICAgICAgICA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9u
OjpzdWJ0cmFjdFJlZ2lvbnMoc3JjVGlsZUJ1ZmZlci0+cmVuZGVyZWRSZWdpb24oKSwgZXhjbHVk
ZUNvbnRlbnRzUmVjdCk7CiAKICAgICBJbnRSZWN0TGlzdCBwcmV2aW91c0NvbnRlbnRzUmVjdHMg
PSBwcmV2aW91c0NvbnRlbnRzUmVnaW9uLnJlY3RzKCk7CisKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHByZXZpb3VzQ29udGVudHNSZWN0cy5zaXplKCk7ICsraSkgewogICAgICAgICBQbGF0
Zm9ybTo6SW50UmVjdCBwcmV2aW91c0NvbnRlbnRzUmVjdCA9IHByZXZpb3VzQ29udGVudHNSZWN0
cy5hdChpKTsKICAgICAgICAgZHN0VGlsZUJ1ZmZlci0+YWRkUmVuZGVyZWRSZWdpb24ocHJldmlv
dXNDb250ZW50c1JlY3QpOwogCisgICAgICAgIHByZXZpb3VzQ29udGVudHNSZWN0Lm1vdmUoLXNy
Y1RpbGVCdWZmZXItPmxhc3RSZW5kZXJPcmlnaW4oKS54KCksIC1zcmNUaWxlQnVmZmVyLT5sYXN0
UmVuZGVyT3JpZ2luKCkueSgpKTsKICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpibGl0VG9CdWZmZXIoCiAgICAgICAgICAgICBkc3RUaWxlQnVmZmVyLT5uYXRpdmVCdWZm
ZXIoKSwgcHJldmlvdXNDb250ZW50c1JlY3QsCiAgICAgICAgICAgICBzcmNUaWxlQnVmZmVyLT5u
YXRpdmVCdWZmZXIoKSwgcHJldmlvdXNDb250ZW50c1JlY3QpOwpAQCAtMTM5Miw0MyArMTM3Miwz
MSBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRWaXNpYmxlQ29udGVudHMoYm9vbCBm
b3JjZSkKICAgICAgICAgfQogCiAgICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiB0aWxlIHJlY3Rz
IHRoYXQgbWFrZXVwIHRoZSBjb250ZW50LgotICAgICAgICBUaWxlUmVjdExpc3QgdGlsZVJlY3RM
aXN0ID0gbWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb1RpbGVzKGNsaXBwZWRUcmFuc2Zvcm1l
ZFNyY1JlY3QsIGN1cnJlbnRTdGF0ZSk7CisgICAgICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExp
c3QgPSBtYXBGcm9tUGl4ZWxDb250ZW50c1RvVGlsZXMoY2xpcHBlZFRyYW5zZm9ybWVkU3JjUmVj
dCwgY3VycmVudFN0YXRlKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlUmVj
dExpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFRpbGVSZWN0IHRpbGVSZWN0ID0gdGls
ZVJlY3RMaXN0W2ldOwogICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gdGlsZVJlY3QuZmly
c3Q7Ci0gICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVRpbGVSZWN0ID0gdGlsZVJl
Y3Quc2Vjb25kOwotICAgICAgICAgICAgVGlsZUJ1ZmZlciogdGlsZUJ1ZmZlciA9IGN1cnJlbnRN
YXAuZ2V0KGluZGV4KTsKLQotICAgICAgICAgICAgLy8gVGhpcyBkaXJ0eSByZWN0IGlzIGluIHRp
bGUgY29vcmRpbmF0ZXMsIGJ1dCBpdCBuZWVkcyB0byBiZSBpbgotICAgICAgICAgICAgLy8gdHJh
bnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBQbGF0Zm9ybTo6SW50
UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHModGlsZVJl
Y3QsIGN1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVJl
Y3QgPSB0aWxlUmVjdC5zZWNvbmQ7CiAKICAgICAgICAgICAgIC8vIERvbid0IGNsaXAgdG8gY29u
dGVudHMgaWYgaXQgaXMgZW1wdHkgc28gd2UgY2FuIHN0aWxsIHBhaW50IGRlZmF1bHQgYmFja2dy
b3VuZC4KICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRDb250ZW50c1JlY3QuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNob3VsZCBjbGlwIHRoZSBjb250
ZW50cyBzaXplIGFuZCBibGl0LgogICAgICAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3Qo
dHJhbnNmb3JtZWRDb250ZW50c1JlY3QpOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgcHJvYmFi
bHkgaGF2ZSBleHRyYSB0aWxlcyBzaW5jZSB0aGUgY29udGVudHMgc2l6ZSBpcyBzbyBzbWFsbC4K
LSAgICAgICAgICAgICAgICAvLyBTYXZlIHNvbWUgY3ljbGVzIGhlcmUuLi4KLSAgICAgICAgICAg
ICAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIFNhdmUgc29tZSBjeWNsZXMgaGVy
ZS4uLgorICAgICAgICAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKICAgICAgICAgICAgIC8vIE5vdywgdGhpcyBkaXJ0eSByZWN0IGlzIGlu
IHRyYW5zZm9ybWVkIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZQogICAgICAgICAgICAgLy8g
dHJhbnNmb3JtZWQgY29udGVudHMsIGJ1dCB1bHRpbWF0ZWx5IGl0IG5lZWRzIHRvIGJlIHRyYW5z
Zm9ybWVkCiAgICAgICAgICAgICAvLyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgdmlld3Bv
cnQuCiAgICAgICAgICAgICBkaXJ0eVJlY3QubW92ZSgtb3JpZ2luLngoKSwgLW9yaWdpbi55KCkp
OwogCi0gICAgICAgICAgICAvLyBTYXZlIHNvbWUgY3ljbGVzIGhlcmUuLi4KLSAgICAgICAgICAg
IGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpIHx8IGRpcnR5VGlsZVJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBUaWxlUmVjdCB3aG9sZVRpbGVS
ZWN0OwotICAgICAgICAgICAgd2hvbGVUaWxlUmVjdC5maXJzdCA9IGluZGV4OwotICAgICAgICAg
ICAgd2hvbGVUaWxlUmVjdC5zZWNvbmQgPSB0aGlzLT50aWxlUmVjdCgpOworICAgICAgICAgICAg
VGlsZUJ1ZmZlciogdGlsZUJ1ZmZlciA9IGN1cnJlbnRNYXAuZ2V0KGluZGV4KTsKIAogICAgICAg
ICAgICAgYm9vbCBpc1RpbGVDb3JyZXNwb25kaW5nVG9CdWZmZXIgPSBjdXJyZW50U3RhdGUtPmlz
VGlsZUNvcnJlc3BvbmRpbmdUb0J1ZmZlcihpbmRleCwgdGlsZUJ1ZmZlcik7Ci0gICAgICAgICAg
ICBib29sIHJlbmRlcmVkID0gdGlsZUJ1ZmZlciAmJiB0aWxlQnVmZmVyLT5pc1JlbmRlcmVkKGRp
cnR5VGlsZVJlY3QsIGN1cnJlbnRTY2FsZSk7CisgICAgICAgICAgICBib29sIHJlbmRlcmVkID0g
dGlsZUJ1ZmZlciAmJiB0aWxlQnVmZmVyLT5pc1JlbmRlcmVkKHRpbGVSZWN0LnNlY29uZCwgY3Vy
cmVudFNjYWxlKTsKICAgICAgICAgICAgIGJvb2wgcGFpbnRDaGVja2VyZWQgPSAhaXNUaWxlQ29y
cmVzcG9uZGluZ1RvQnVmZmVyIHx8ICFyZW5kZXJlZDsKIAogICAgICAgICAgICAgaWYgKHBhaW50
Q2hlY2tlcmVkKSB7CkBAIC0xNDg1LDIwICsxNDUzLDE4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJp
dmF0ZTo6YmxpdFZpc2libGVDb250ZW50cyhib29sIGZvcmNlKQogICAgICAgICAgICAgICAgICAg
ICBibGl0VG9XaW5kb3coZGlydHlSZWN0VCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZpc2libGVUaWxlQnVmZmVyLT5uYXRpdmVCdWZmZXIoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpcnR5VGlsZVJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZSAvKmJsZW5kKi8sIDI1NSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlNvdXJjZUNvcHksIDI1NSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChpc1RpbGVDb3JyZXNw
b25kaW5nVG9CdWZmZXIpIHsKICAgICAgICAgICAgICAgICAvLyBJbnRlcnNlY3QgdGhlIHJlbmRl
cmVkIHJlZ2lvbi4KICAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiByZW5k
ZXJlZFJlZ2lvbiA9IHRpbGVCdWZmZXItPnJlbmRlcmVkUmVnaW9uKCk7CiAgICAgICAgICAgICAg
ICAgSW50UmVjdExpc3QgZGlydHlSZW5kZXJlZFJlY3RzID0gcmVuZGVyZWRSZWdpb24ucmVjdHMo
KTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRpcnR5UmVuZGVyZWRS
ZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBUaWxlUmVjdCB0aWxlUmVj
dDsKLSAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3QuZmlyc3QgPSBpbmRleDsKLSAgICAgICAg
ICAgICAgICAgICAgdGlsZVJlY3Quc2Vjb25kID0gaW50ZXJzZWN0aW9uKGRpcnR5VGlsZVJlY3Qs
IGRpcnR5UmVuZGVyZWRSZWN0cy5hdChpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aWxl
UmVjdC5zZWNvbmQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAw
OyBqIDwgZGlydHlSZW5kZXJlZFJlY3RzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAg
ICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5UmVuZGVyZWRSZWN0ID0gaW50ZXJzZWN0aW9uKHRp
bGVSZWN0LnNlY29uZCwgZGlydHlSZW5kZXJlZFJlY3RzLmF0KGopKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGRpcnR5UmVuZGVyZWRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAvLyBCbGl0IHRoZSByZW5kZXJl
ZCBwYXJ0cy4KLSAgICAgICAgICAgICAgICAgICAgYmxpdFRpbGVSZWN0KHRpbGVCdWZmZXIsIHRp
bGVSZWN0LCBvcmlnaW4sIHRyYW5zZm9ybWF0aW9uLCBjdXJyZW50U3RhdGUpOworICAgICAgICAg
ICAgICAgICAgICBibGl0VGlsZVJlY3QodGlsZUJ1ZmZlciwgZGlydHlSZW5kZXJlZFJlY3QsIG9y
aWdpbiwgdHJhbnNmb3JtYXRpb24sIGN1cnJlbnRTdGF0ZSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJsaXR0ZWRUaWxlcy5hcHBlbmQodGlsZUJ1ZmZlcik7CiAgICAgICAg
ICAgICB9CkBAIC0xNjAxLDM2ICsxNTY3LDMwIEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
Y29tcG9zaXRlQ29udGVudHMoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlciogbGF5ZXJSZW5kZXJlCiAg
ICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdDaGVja2VyYm9hcmRQYXR0ZXJuKHRyYW5zZm9ybSwg
bV93ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoV2ViQ29yZTo6SW50UmVj
dChjaGVja2VyZWRSZWN0cy5hdChpKSkpKTsKIAogICAgIC8vIEdldCB0aGUgbGlzdCBvZiB0aWxl
IHJlY3RzIHRoYXQgbWFrZXVwIHRoZSBjb250ZW50LgotICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVj
dExpc3QgPSBtYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXModHJhbnNmb3JtZWRDb250
ZW50cywgY3VycmVudFN0YXRlKTsKKyAgICBUaWxlUmVjdExpc3QgdGlsZVJlY3RMaXN0ID0gbWFw
RnJvbVBpeGVsQ29udGVudHNUb1RpbGVzKHRyYW5zZm9ybWVkQ29udGVudHMsIGN1cnJlbnRTdGF0
ZSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlUmVjdExpc3Quc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3QgPSB0aWxlUmVjdExpc3RbaV07CiAgICAgICAg
IFRpbGVJbmRleCBpbmRleCA9IHRpbGVSZWN0LmZpcnN0OwotICAgICAgICBQbGF0Zm9ybTo6SW50
UmVjdCBkaXJ0eVRpbGVSZWN0ID0gdGlsZVJlY3Quc2Vjb25kOworICAgICAgICBQbGF0Zm9ybTo6
SW50UmVjdCBkaXJ0eVJlY3QgPSB0aWxlUmVjdC5zZWNvbmQ7CiAgICAgICAgIFRpbGVCdWZmZXIq
IHRpbGVCdWZmZXIgPSBjdXJyZW50TWFwLmdldChpbmRleCk7CiAKLSAgICAgICAgLy8gVGhpcyBk
aXJ0eSByZWN0IGlzIGluIHRpbGUgY29vcmRpbmF0ZXMsIGJ1dCBpdCBuZWVkcyB0byBiZSBpbgot
ICAgICAgICAvLyB0cmFuc2Zvcm1lZCBjb250ZW50cyBjb29yZGluYXRlcy4KLSAgICAgICAgUGxh
dGZvcm06OkludFJlY3QgZGlydHlSZWN0ID0gbWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRl
bnRzKHRpbGVSZWN0LCBjdXJyZW50U3RhdGUpOwotCi0gICAgICAgIGlmICghZGlydHlSZWN0Lmlu
dGVyc2VjdHModHJhbnNmb3JtZWRDb250ZW50cykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQog
ICAgICAgICBpZiAoIXRpbGVCdWZmZXIgfHwgIWN1cnJlbnRTdGF0ZS0+aXNUaWxlQ29ycmVzcG9u
ZGluZ1RvQnVmZmVyKGluZGV4LCB0aWxlQnVmZmVyKSkKICAgICAgICAgICAgIGxheWVyUmVuZGVy
ZXItPmRyYXdDaGVja2VyYm9hcmRQYXR0ZXJuKHRyYW5zZm9ybSwgbV93ZWJQYWdlLT5kLT5tYXBG
cm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoUGxhdGZvcm06OkZsb2F0UmVjdChkaXJ0eVJlY3QpKSk7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgVGlsZVJlY3Qgd2hvbGVUaWxlUmVjdDsKLSAg
ICAgICAgICAgIHdob2xlVGlsZVJlY3QuZmlyc3QgPSBpbmRleDsKLSAgICAgICAgICAgIHdob2xl
VGlsZVJlY3Quc2Vjb25kID0gdGhpcy0+dGlsZVJlY3QoKTsKLQotICAgICAgICAgICAgUGxhdGZv
cm06OkludFJlY3Qgd2hvbGVSZWN0ID0gbWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRlbnRz
KHdob2xlVGlsZVJlY3QsIGN1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICBQbGF0Zm9ybTo6SW50
UG9pbnQgdGlsZU9yaWdpbiA9IHRpbGVCdWZmZXItPmxhc3RSZW5kZXJPcmlnaW4oKTsKKyAgICAg
ICAgICAgIFBsYXRmb3JtOjpGbG9hdFJlY3QgdGlsZURvY3VtZW50Q29udGVudHNSZWN0ID0gbV93
ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoUGxhdGZvcm06OkZsb2F0UmVj
dCh0aWxlQnVmZmVyLT5waXhlbENvbnRlbnRzUmVjdCgpKSk7CiAKLSAgICAgICAgICAgIGxheWVy
UmVuZGVyZXItPmNvbXBvc2l0ZUJ1ZmZlcih0cmFuc2Zvcm0sIG1fd2ViUGFnZS0+ZC0+bWFwRnJv
bVRyYW5zZm9ybWVkRmxvYXRSZWN0KFBsYXRmb3JtOjpGbG9hdFJlY3Qod2hvbGVSZWN0KSksIHRp
bGVCdWZmZXItPm5hdGl2ZUJ1ZmZlcigpLCBjb250ZW50c09wYXF1ZSwgMS4wZik7CisgICAgICAg
ICAgICBsYXllclJlbmRlcmVyLT5jb21wb3NpdGVCdWZmZXIodHJhbnNmb3JtLCB0aWxlRG9jdW1l
bnRDb250ZW50c1JlY3QsIHRpbGVCdWZmZXItPm5hdGl2ZUJ1ZmZlcigpLCBjb250ZW50c09wYXF1
ZSwgMS4wZik7CiAgICAgICAgICAgICBjb21wb3NpdGVkVGlsZXMuYXBwZW5kKHRpbGVCdWZmZXIp
OwotICAgICAgICAgICAgLy8gSW50ZXJzZWN0IHRoZSByZW5kZXJlZCByZWdpb24uCi0gICAgICAg
ICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBub3RSZW5kZXJlZFJlZ2lvbiA9IFBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMoZGlydHlUaWxlUmVjdCwgdGlsZUJ1ZmZl
ci0+cmVuZGVyZWRSZWdpb24oKSk7CisKKyAgICAgICAgICAgIC8vIEludGVyc2VjdCB0aGUgcmVu
ZGVyZWQgcmVnaW9uIGFuZCBjbGVhciB1bnJlbmRlcmVkIHBhcnRzLgorICAgICAgICAgICAgUGxh
dGZvcm06OkludFJlY3RSZWdpb24gbm90UmVuZGVyZWRSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVj
dFJlZ2lvbjo6c3VidHJhY3RSZWdpb25zKGRpcnR5UmVjdCwgdGlsZUJ1ZmZlci0+cmVuZGVyZWRS
ZWdpb24oKSk7CiAgICAgICAgICAgICBJbnRSZWN0TGlzdCBub3RSZW5kZXJlZFJlY3RzID0gbm90
UmVuZGVyZWRSZWdpb24ucmVjdHMoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbm90UmVuZGVyZWRSZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBsYXllclJl
bmRlcmVyLT5kcmF3Q2hlY2tlcmJvYXJkUGF0dGVybih0cmFuc2Zvcm0sIG1fd2ViUGFnZS0+ZC0+
bWFwRnJvbVRyYW5zZm9ybWVkRmxvYXRSZWN0KFBsYXRmb3JtOjpGbG9hdFJlY3Qobm90UmVuZGVy
ZWRSZWN0cy5hdChpKSkpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm90
UmVuZGVyZWRSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpJ
bnRSZWN0IHRpbGVTdXJmYWNlUmVjdCA9IG5vdFJlbmRlcmVkUmVjdHMuYXQoaSk7CisgICAgICAg
ICAgICAgICAgdGlsZVN1cmZhY2VSZWN0Lm1vdmUoLXRpbGVPcmlnaW4ueCgpLCAtdGlsZU9yaWdp
bi55KCkpOworICAgICAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdDaGVja2VyYm9hcmRQ
YXR0ZXJuKHRyYW5zZm9ybSwgbV93ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJl
Y3QoUGxhdGZvcm06OkZsb2F0UmVjdCh0aWxlU3VyZmFjZVJlY3QpKSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2MzksNyArMTU5OSw3IEBAIHZvaWQgQmFja2luZ1N0
b3JlUHJpdmF0ZTo6Y29tcG9zaXRlQ29udGVudHMoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlciogbGF5
ZXJSZW5kZXJlCiAjZW5kaWYKIAogUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6YmxpdFRpbGVSZWN0KFRpbGVCdWZmZXIqIHRpbGVCdWZmZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUaWxlUmVjdCYgdGlsZVJl
Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgdGlsZVBpeGVsQ29udGVudHNSZWN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGxhdGZvcm06
OkludFBvaW50JiBvcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFj
a2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KQpAQCAtMTY0NywzMyArMTYwNywzMiBAQCBQbGF0
Zm9ybTo6SW50UmVjdCBCYWNraW5nU3RvcmVQcml2YXRlOjpibGl0VGlsZVJlY3QoVGlsZUJ1ZmZl
ciogdGlsZUJ1ZmZlciwKICAgICBpZiAoIW1fd2ViUGFnZS0+aXNWaXNpYmxlKCkgfHwgIWlzQWN0
aXZlKCkgfHwgIXRpbGVCdWZmZXIpCiAgICAgICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdCgp
OwogCi0gICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlUaWxlUmVjdCA9IHRpbGVSZWN0LnNlY29u
ZDsKLQotICAgIC8vIFRoaXMgZGlydHkgcmVjdCBpcyBpbiB0aWxlIGNvb3JkaW5hdGVzLCBidXQg
aXQgbmVlZHMgdG8gYmUgaW4KLSAgICAvLyB0cmFuc2Zvcm1lZCBjb250ZW50cyBjb29yZGluYXRl
cy4KLSAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9tVGlsZXNUb1RyYW5z
Zm9ybWVkQ29udGVudHModGlsZVJlY3QsIGdlb21ldHJ5KTsKKyAgICBQbGF0Zm9ybTo6SW50UmVj
dCBzcmNSZWN0ID0gdGlsZVBpeGVsQ29udGVudHNSZWN0OworICAgIFBsYXRmb3JtOjpJbnRQb2lu
dCB0aWxlT3JpZ2luID0gdGlsZUJ1ZmZlci0+bGFzdFJlbmRlck9yaWdpbigpOworICAgIHNyY1Jl
Y3QubW92ZSgtdGlsZU9yaWdpbi54KCksIC10aWxlT3JpZ2luLnkoKSk7CiAKICAgICAvLyBOb3cs
IHRoaXMgZGlydHkgcmVjdCBpcyBpbiB0cmFuc2Zvcm1lZCBjb29yZGluYXRlcyByZWxhdGl2ZSB0
byB0aGUKICAgICAvLyB0cmFuc2Zvcm1lZCBjb250ZW50cywgYnV0IHVsdGltYXRlbHkgaXQgbmVl
ZHMgdG8gYmUgdHJhbnNmb3JtZWQKICAgICAvLyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUg
dmlld3BvcnQuCi0gICAgZGlydHlSZWN0Lm1vdmUoLW9yaWdpbi54KCksIC1vcmlnaW4ueSgpKTsK
LSAgICBkaXJ0eVJlY3QgPSBtYXRyaXgubWFwUmVjdChkaXJ0eVJlY3QpOworICAgIFBsYXRmb3Jt
OjpJbnRSZWN0IGRzdFJlY3QgPSB0aWxlUGl4ZWxDb250ZW50c1JlY3Q7CisgICAgZHN0UmVjdC5t
b3ZlKC1vcmlnaW4ueCgpLCAtb3JpZ2luLnkoKSk7CisgICAgZHN0UmVjdCA9IG1hdHJpeC5tYXBS
ZWN0KGRzdFJlY3QpOwogCiAgICAgaWYgKCFtYXRyaXguaXNJZGVudGl0eSgpKSB7Ci0gICAgICAg
IC8vIEJlY2F1c2Ugb2Ygcm91bmRpbmcgaXQgaXMgcG9zc2libGUgdGhhdCBkaXJ0eVJlY3QgY291
bGQgYmUgb2ZmLWJ5LW9uZSBsYXJnZXIKKyAgICAgICAgLy8gQmVjYXVzZSBvZiByb3VuZGluZyBp
dCBpcyBwb3NzaWJsZSB0aGF0IGRzdFJlY3QgY291bGQgYmUgb2ZmLWJ5LW9uZSBsYXJnZXIKICAg
ICAgICAgLy8gdGhhbiB0aGUgc3VyZmFjZSBzaXplIG9mIHRoZSBkc3QgYnVmZmVyLiBXZSBwcmV2
ZW50IHRoaXMgaGVyZSwgYnkgY2xhbXBpbmcKICAgICAgICAgLy8gaXQgdG8gZW5zdXJlIHRoYXQg
Y2FuJ3QgaGFwcGVuLgotICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KFBsYXRmb3JtOjpJbnRS
ZWN0KFBsYXRmb3JtOjpJbnRQb2ludCgwLCAwKSwgc3VyZmFjZVNpemUoKSkpOworICAgICAgICBk
c3RSZWN0LmludGVyc2VjdChQbGF0Zm9ybTo6SW50UmVjdChQbGF0Zm9ybTo6SW50UG9pbnQoMCwg
MCksIHN1cmZhY2VTaXplKCkpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWRpcnR5UmVjdC5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVCghZGlydHlUaWxlUmVjdC5pc0VtcHR5KCkpOwotICAgIGlmIChk
aXJ0eVJlY3QuaXNFbXB0eSgpIHx8IGRpcnR5VGlsZVJlY3QuaXNFbXB0eSgpKQorICAgIEFTU0VS
VCghZHN0UmVjdC5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghc3JjUmVjdC5pc0VtcHR5KCkpOwor
ICAgIGlmIChkc3RSZWN0LmlzRW1wdHkoKSB8fCBzcmNSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIFBsYXRmb3JtOjpJbnRSZWN0KCk7CiAKLSAgICBibGl0VG9XaW5kb3coZGlydHlSZWN0
LCB0aWxlQnVmZmVyLT5uYXRpdmVCdWZmZXIoKSwgZGlydHlUaWxlUmVjdCwKLSAgICAgICAgICAg
ICAgICAgZmFsc2UgLypibGVuZCovLCAyNTUpOwotICAgIHJldHVybiBkaXJ0eVJlY3Q7CisgICAg
YmxpdFRvV2luZG93KGRzdFJlY3QsIHRpbGVCdWZmZXItPm5hdGl2ZUJ1ZmZlcigpLCBzcmNSZWN0
LAorICAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlNvdXJj
ZUNvcHksIDI1NSk7CisgICAgcmV0dXJuIGRzdFJlY3Q7CiB9CiAKIHZvaWQgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6YmxpdEhvcml6b250YWxTY3JvbGxiYXIoKQpAQCAtMTY5MiwxMiArMTY1MSw5IEBA
IHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6YmxpdFZlcnRpY2FsU2Nyb2xsYmFyKCkKICAgICBt
X3dlYlBhZ2UtPmNsaWVudCgpLT5kcmF3VmVydGljYWxTY3JvbGxiYXIoKTsKIH0KIAotYm9vbCBC
YWNraW5nU3RvcmVQcml2YXRlOjppc1RpbGVWaXNpYmxlKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgp
IGNvbnN0Citib29sIEJhY2tpbmdTdG9yZVByaXZhdGU6OmlzVGlsZVZpc2libGUoY29uc3QgVGls
ZUluZGV4JiBpbmRleCwgQmFja2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAogewot
ICAgIFRpbGVSZWN0IHRpbGVSZWN0OwotICAgIHRpbGVSZWN0LmZpcnN0ID0gaW5kZXg7Ci0gICAg
dGlsZVJlY3Quc2Vjb25kID0gdGhpcy0+dGlsZVJlY3QoKTsKLSAgICByZXR1cm4gbWFwRnJvbVRp
bGVzVG9UcmFuc2Zvcm1lZENvbnRlbnRzKHRpbGVSZWN0KS5pbnRlcnNlY3RzKHZpc2libGVDb250
ZW50c1JlY3QoKSk7CisgICAgcmV0dXJuIGlzVGlsZVZpc2libGUoZ2VvbWV0cnktPm9yaWdpbk9m
VGlsZShpbmRleCkpOwogfQogCiBib29sIEJhY2tpbmdTdG9yZVByaXZhdGU6OmlzVGlsZVZpc2li
bGUoY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBvcmlnaW4pIGNvbnN0CkBAIC0xNzA1LDM3ICsx
NjYxLDMxIEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6aXNUaWxlVmlzaWJsZShjb25zdCBQ
bGF0Zm9ybTo6SW50UG9pbnQmIG9yaWdpbikgY29uc3QKICAgICByZXR1cm4gUGxhdGZvcm06Oklu
dFJlY3Qob3JpZ2luLCB0aWxlU2l6ZSgpKS5pbnRlcnNlY3RzKHZpc2libGVDb250ZW50c1JlY3Qo
KSk7CiB9CiAKLVBsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVU
aWxlc1JlY3QoKSBjb25zdAorUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
dmlzaWJsZVRpbGVzUmVjdChCYWNraW5nU3RvcmVHZW9tZXRyeSogZ2VvbWV0cnkpIGNvbnN0CiB7
Ci0gICAgQmFja2luZ1N0b3JlR2VvbWV0cnkqIGN1cnJlbnRTdGF0ZSA9IGZyb250U3RhdGUoKTsK
LSAgICBUaWxlTWFwIGN1cnJlbnRNYXAgPSBjdXJyZW50U3RhdGUtPnRpbGVNYXAoKTsKKyAgICBU
aWxlTWFwIHRpbGVNYXAgPSBnZW9tZXRyeS0+dGlsZU1hcCgpOwogCiAgICAgUGxhdGZvcm06Oklu
dFJlY3QgcmVjdDsKLSAgICBUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFw
LmVuZCgpOwotICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFw
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlUmVjdCB0aWxlUmVjdDsK
LSAgICAgICAgdGlsZVJlY3QuZmlyc3QgPSBpdC0+a2V5OwotICAgICAgICB0aWxlUmVjdC5zZWNv
bmQgPSB0aGlzLT50aWxlUmVjdCgpOwotICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCB0aWxlID0g
bWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRlbnRzKHRpbGVSZWN0KTsKLSAgICAgICAgaWYg
KHRpbGUuaW50ZXJzZWN0cyh2aXNpYmxlQ29udGVudHNSZWN0KCkpKQotICAgICAgICAgICAgcmVj
dCA9IFBsYXRmb3JtOjp1bmlvbk9mUmVjdHMocmVjdCwgdGlsZSk7CisgICAgVGlsZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gdGlsZU1hcC5lbmQoKTsKKyAgICBmb3IgKFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gdGlsZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgUGxhdGZvcm06OkludFJlY3QgdGlsZVBpeGVsQ29udGVudHNSZWN0KGdlb21ldHJ5LT5vcmln
aW5PZlRpbGUoaXQtPmtleSksIHRpbGVTaXplKCkpOworICAgICAgICBpZiAodGlsZVBpeGVsQ29u
dGVudHNSZWN0LmludGVyc2VjdHModmlzaWJsZUNvbnRlbnRzUmVjdCgpKSkKKyAgICAgICAgICAg
IHJlY3QgPSBQbGF0Zm9ybTo6dW5pb25PZlJlY3RzKHJlY3QsIHRpbGVQaXhlbENvbnRlbnRzUmVj
dCk7CiAgICAgfQogICAgIHJldHVybiByZWN0OwogfQogCiBQbGF0Zm9ybTo6SW50UmVjdCBCYWNr
aW5nU3RvcmVQcml2YXRlOjp0aWxlVmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBUaWxlSW5kZXgm
IGluZGV4LCBCYWNraW5nU3RvcmVHZW9tZXRyeSogZ2VvbWV0cnkpIGNvbnN0CiB7Ci0gICAgaWYg
KCFpc1RpbGVWaXNpYmxlKGluZGV4KSkKKyAgICBpZiAoIWlzVGlsZVZpc2libGUoaW5kZXgsIGdl
b21ldHJ5KSkKICAgICAgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRSZWN0KCk7CiAKICAgICByZXR1
cm4gdGlsZUNvbnRlbnRzUmVjdChpbmRleCwgdmlzaWJsZUNvbnRlbnRzUmVjdCgpLCBnZW9tZXRy
eSk7CiB9CiAKLVBsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OnRpbGVDb250
ZW50c1JlY3QoY29uc3QgVGlsZUluZGV4JiBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYg
Y29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQmFja2luZ1N0b3JlR2VvbWV0cnkqIHN0YXRlKSBjb25zdAorUGxhdGZvcm06Oklu
dFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dGlsZUNvbnRlbnRzUmVjdChjb25zdCBUaWxlSW5k
ZXgmIGluZGV4LCBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcGl4ZWxDb250ZW50c1JlY3QsIEJh
Y2tpbmdTdG9yZUdlb21ldHJ5KiBzdGF0ZSkgY29uc3QKIHsKLSAgICBUaWxlUmVjdExpc3QgdGls
ZVJlY3RMaXN0ID0gbWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb1RpbGVzKGNvbnRlbnRzLCBz
dGF0ZSk7CisgICAgVGlsZVJlY3RMaXN0IHRpbGVSZWN0TGlzdCA9IG1hcEZyb21QaXhlbENvbnRl
bnRzVG9UaWxlcyhwaXhlbENvbnRlbnRzUmVjdCwgc3RhdGUpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGlsZVJlY3RMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIFRpbGVSZWN0IHRp
bGVSZWN0ID0gdGlsZVJlY3RMaXN0W2ldOwogICAgICAgICBpZiAoaW5kZXggPT0gdGlsZVJlY3Qu
Zmlyc3QpCkBAIC0xNzk1LDcgKzE3NDUsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVw
ZGF0ZVRpbGVzKGJvb2wgdXBkYXRlVmlzaWJsZSwgYm9vbCBpbW1lZGlhdGUpCiAKICAgICBUaWxl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXJyZW50TWFwLmVuZCgpOwogICAgIGZvciAoVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaXQtPmtleSk7
CisgICAgICAgIGJvb2wgaXNWaXNpYmxlID0gaXNUaWxlVmlzaWJsZShpdC0+a2V5LCBjdXJyZW50
U3RhdGUpOwogICAgICAgICBpZiAoIXVwZGF0ZVZpc2libGUgJiYgaXNWaXNpYmxlKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIHVwZGF0ZVRpbGUoY3VycmVudFN0YXRlLT5vcmlnaW5P
ZlRpbGUoaXQtPmtleSksIGltbWVkaWF0ZSk7CkBAIC0xODIwLDcgKzE3NzAsNyBAQCB2b2lkIEJh
Y2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzRm9yU2Nyb2xsT3JOb3RSZW5kZXJlZFJlZ2lv
bihib29sIGNoZWNrTG9hZAogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBj
dXJyZW50TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBUaWxlSW5kZXgg
aW5kZXggPSBpdC0+a2V5OwogICAgICAgICBUaWxlQnVmZmVyKiB0aWxlQnVmZmVyID0gaXQtPnZh
bHVlOwotICAgICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaW5kZXgpOworICAg
ICAgICBib29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaW5kZXgsIGN1cnJlbnRTdGF0ZSk7
CiAgICAgICAgIFBsYXRmb3JtOjpJbnRQb2ludCB0aWxlT3JpZ2luID0gY3VycmVudFN0YXRlLT5v
cmlnaW5PZlRpbGUoaW5kZXgpOwogICAgICAgICAvLyBUaGUgcmVjdCBpbiB0cmFuc2Zvcm1lZCBj
b250ZW50cyBjb29yZGluYXRlcy4KICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgcmVjdCh0aWxl
T3JpZ2luLCB0aWxlU2l6ZSgpKTsKQEAgLTE4NzEsNTcgKzE4MjEsNyBAQCB2b2lkIEJhY2tpbmdT
dG9yZVByaXZhdGU6OnVwZGF0ZVRpbGUoY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBvcmlnaW4s
IGJvb2wgaW1tZQogICAgICAgICBtX3JlbmRlclF1ZXVlLT5hZGRUb1F1ZXVlKGpvYlR5cGUsIHVw
ZGF0ZVJlY3QpOwogfQogCi1QbGF0Zm9ybTo6SW50UmVjdCBCYWNraW5nU3RvcmVQcml2YXRlOjpt
YXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHMoY29uc3QgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6VGlsZVJlY3QmIHRpbGVSZWN0KSBjb25zdAotewotICAgIHJldHVybiBtYXBGcm9tVGlsZXNU
b1RyYW5zZm9ybWVkQ29udGVudHModGlsZVJlY3QsIGZyb250U3RhdGUoKSk7Ci19Ci0KLVBsYXRm
b3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6Om1hcEZyb21UaWxlc1RvVHJhbnNmb3Jt
ZWRDb250ZW50cyhjb25zdCBCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdCYgdGlsZVJlY3Qs
IEJhY2tpbmdTdG9yZUdlb21ldHJ5KiBnZW9tZXRyeSkgY29uc3QKLXsKLSAgICBUaWxlSW5kZXgg
aW5kZXggPSB0aWxlUmVjdC5maXJzdDsKLSAgICBQbGF0Zm9ybTo6SW50UmVjdCByZWN0ID0gdGls
ZVJlY3Quc2Vjb25kOwotICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIHRpbGUgaW5jbHVkaW5nIHRo
ZSBiYWNraW5nIHN0b3JlIG9mZnNldC4KLSAgICBjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQgb3Jp
Z2luT2ZUaWxlID0gZ2VvbWV0cnktPm9yaWdpbk9mVGlsZShpbmRleCk7Ci0gICAgcmVjdC5tb3Zl
KG9yaWdpbk9mVGlsZS54KCksIG9yaWdpbk9mVGlsZS55KCkpOwotICAgIHJldHVybiByZWN0Owot
fQotCi1CYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdExpc3QgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb0Fic29sdXRlVGlsZUJvdW5kYXJpZXMoY29u
c3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3dlYlBhZ2Ut
PmlzVmlzaWJsZSgpIHx8ICFpc0FjdGl2ZSgpKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gVGlsZVJlY3RMaXN0KCk7Ci0gICAgfQotCi0gICAgVGlsZVJl
Y3RMaXN0IHRpbGVSZWN0TGlzdDsKLSAgICBpbnQgZmlyc3RYT2Zmc2V0ID0gcmVjdC54KCkgLyB0
aWxlV2lkdGgoKTsKLSAgICBpbnQgZmlyc3RZT2Zmc2V0ID0gcmVjdC55KCkgLyB0aWxlSGVpZ2h0
KCk7Ci0gICAgaW50IGxhc3RYT2Zmc2V0ID0gKHJlY3QucmlnaHQoKSAtIDEpIC8gdGlsZVdpZHRo
KCk7Ci0gICAgaW50IGxhc3RZT2Zmc2V0ID0gKHJlY3QuYm90dG9tKCkgLSAxKSAvIHRpbGVIZWln
aHQoKTsKLSAgICBmb3IgKGludCBpID0gZmlyc3RYT2Zmc2V0OyBpIDw9IGxhc3RYT2Zmc2V0OyAr
K2kpIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IGZpcnN0WU9mZnNldDsgaiA8PSBsYXN0WU9mZnNl
dDsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgZHN0WCA9IChpID09IGZpcnN0WE9mZnNl
dCkgPyByZWN0LngoKSA6IGkgKiB0aWxlV2lkdGgoKTsKLSAgICAgICAgICAgIGNvbnN0IGludCBk
c3RZID0gKGogPT0gZmlyc3RZT2Zmc2V0KSA/IHJlY3QueSgpIDogaiAqIHRpbGVIZWlnaHQoKTsK
LSAgICAgICAgICAgIGNvbnN0IGludCBkc3RSaWdodCA9IChpID09IGxhc3RYT2Zmc2V0KSA/IHJl
Y3QucmlnaHQoKSA6IChpICsgMSkgKiB0aWxlV2lkdGgoKTsKLSAgICAgICAgICAgIGNvbnN0IGlu
dCBkc3RCb3R0b20gPSAoaiA9PSBsYXN0WU9mZnNldCkgPyByZWN0LmJvdHRvbSgpIDogKGogKyAx
KSAqIHRpbGVIZWlnaHQoKTsKLSAgICAgICAgICAgIGNvbnN0IGludCBzcmNYID0gZHN0WCAlIHRp
bGVXaWR0aCgpOwotICAgICAgICAgICAgY29uc3QgaW50IHNyY1kgPSBkc3RZICUgdGlsZUhlaWdo
dCgpOwotICAgICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgICAgICB0aWxlUmVj
dC5maXJzdCA9IFRpbGVJbmRleChpLCBqKTsKLSAgICAgICAgICAgIHRpbGVSZWN0LnNlY29uZCA9
IFBsYXRmb3JtOjpJbnRSZWN0KHNyY1gsIHNyY1ksIGRzdFJpZ2h0IC0gZHN0WCwgZHN0Qm90dG9t
IC0gZHN0WSk7Ci0gICAgICAgICAgICB0aWxlUmVjdExpc3QuYXBwZW5kKHRpbGVSZWN0KTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGlsZVJlY3RMaXN0OwotfQotCi0KLUJhY2tpbmdT
dG9yZVByaXZhdGU6OlRpbGVSZWN0TGlzdCBCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tVHJh
bnNmb3JtZWRDb250ZW50c1RvVGlsZXMoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UaWxlcyhyZWN0
LCBmcm9udFN0YXRlKCkpOwotfQotCi1CYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdExpc3Qg
QmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb1RpbGVzKGNv
bnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0LCBCYWNraW5nU3RvcmVHZW9tZXRyeSogZ2VvbWV0
cnkpIGNvbnN0CitCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdExpc3QgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6bWFwRnJvbVBpeGVsQ29udGVudHNUb1RpbGVzKGNvbnN0IFBsYXRmb3JtOjpJbnRS
ZWN0JiByZWN0LCBCYWNraW5nU3RvcmVHZW9tZXRyeSogZ2VvbWV0cnkpIGNvbnN0CiB7CiAgICAg
VGlsZU1hcCB0aWxlTWFwID0gZ2VvbWV0cnktPnRpbGVNYXAoKTsKIApAQCAtMTkzMywxMyArMTgz
Myw4IEBAIEJhY2tpbmdTdG9yZVByaXZhdGU6OlRpbGVSZWN0TGlzdCBCYWNraW5nU3RvcmVQcml2
YXRlOjptYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50CiAgICAgICAgIC8vIE5lZWQgdG8gbWFwIHRo
ZSByZWN0IHRvIHRpbGUgY29vcmRpbmF0ZXMuCiAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHIg
PSByZWN0OwogCi0gICAgICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIHRpbGUgaW5jbHVkaW5nIHRo
ZSBiYWNraW5nIHN0b3JlIG9mZnNldC4KLSAgICAgICAgY29uc3QgUGxhdGZvcm06OkludFBvaW50
IG9yaWdpbk9mVGlsZSA9IGdlb21ldHJ5LT5vcmlnaW5PZlRpbGUoaW5kZXgpOwotCi0gICAgICAg
IHIubW92ZSgtKG9yaWdpbk9mVGlsZS54KCkpLCAtKG9yaWdpbk9mVGlsZS55KCkpKTsKLQogICAg
ICAgICAvLyBEbyB3ZSBpbnRlcnNlY3QgdGhlIGN1cnJlbnQgdGlsZSBvciBubz8KLSAgICAgICAg
ci5pbnRlcnNlY3QoUGxhdGZvcm06OkludFJlY3QoUGxhdGZvcm06OkludFBvaW50KDAsIDApLCB0
aWxlU2l6ZSgpKSk7CisgICAgICAgIHIuaW50ZXJzZWN0KFBsYXRmb3JtOjpJbnRSZWN0KGdlb21l
dHJ5LT5vcmlnaW5PZlRpbGUoaW5kZXgpLCB0aWxlU2l6ZSgpKSk7CiAgICAgICAgIGlmIChyLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xOTk4LDE2ICsxODkzLDE1IEBA
IHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dHJhbnNmb3JtQ2hhbmdlZCgpCiAgICAgICAgICAg
ICBtX3Zpc2libGVUaWxlQnVmZmVyUmVjdCA9IHZpc2libGVDb250ZW50c1JlY3QoKTsgLy8gQ2Fj
aGUgdGhpcyBmb3IgYmxpdFZpc2libGVDb250ZW50cy4KIAogICAgICAgICAvLyBBZGQgdGhlIGN1
cnJlbnRseSB2aXNpYmxlIHRpbGVzIHRvIHRoZSByZW5kZXIgcXVldWUgYXMgdmlzaWJsZSB6b29t
IGpvYnMuCi0gICAgICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBtYXBGcm9tVHJhbnNm
b3JtZWRDb250ZW50c1RvVGlsZXModmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKKyAgICAgICAgVGls
ZVJlY3RMaXN0IHRpbGVSZWN0TGlzdCA9IG1hcEZyb21QaXhlbENvbnRlbnRzVG9UaWxlcyh2aXNp
YmxlQ29udGVudHNSZWN0KCksIGN1cnJlbnRTdGF0ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGlsZVJlY3RMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBUaWxlUmVj
dCB0aWxlUmVjdCA9IHRpbGVSZWN0TGlzdFtpXTsKICAgICAgICAgICAgIFRpbGVJbmRleCBpbmRl
eCA9IHRpbGVSZWN0LmZpcnN0OwotICAgICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlU
aWxlUmVjdCA9IHRpbGVSZWN0LnNlY29uZDsKKyAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0
IGRpcnR5UmVjdCA9IHRpbGVSZWN0LnNlY29uZDsKICAgICAgICAgICAgIFRpbGVCdWZmZXIqIHRp
bGVCdWZmZXIgPSBjdXJyZW50TWFwLmdldChpbmRleCk7CiAKICAgICAgICAgICAgIC8vIEludmFs
aWRhdGUgdGhlIHdob2xlIHJlY3QuCi0gICAgICAgICAgICB0aWxlUmVjdC5zZWNvbmQgPSB0aGlz
LT50aWxlUmVjdCgpOwotICAgICAgICAgICAgUGxhdGZvcm06OkludFJlY3Qgd2hvbGVSZWN0ID0g
bWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRlbnRzKHRpbGVSZWN0KTsKKyAgICAgICAgICAg
IFBsYXRmb3JtOjpJbnRSZWN0IHdob2xlUmVjdChjdXJyZW50U3RhdGUtPm9yaWdpbk9mVGlsZShp
bmRleCksIHRpbGVTaXplKCkpOwogICAgICAgICAgICAgbV9yZW5kZXJRdWV1ZS0+YWRkVG9RdWV1
ZShSZW5kZXJRdWV1ZTo6VmlzaWJsZVpvb20sIHdob2xlUmVjdCk7CiAKICAgICAgICAgICAgIGlm
ICghdGlsZUJ1ZmZlcikKQEAgLTIwMTYsMTcgKzE5MTAsMjAgQEAgdm9pZCBCYWNraW5nU3RvcmVQ
cml2YXRlOjp0cmFuc2Zvcm1DaGFuZ2VkKCkKICAgICAgICAgICAgIC8vIENvcHkgdGhlIHZpc2li
bGUgY29udGVudHMgaW50byB0aGUgdmlzaWJsZVRpbGVCdWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZQog
ICAgICAgICAgICAgLy8gYW55IGN1cnJlbnQgdmlzaWJsZSB6b29tIGpvYnMuCiAgICAgICAgICAg
ICBpZiAoIWhhc0N1cnJlbnRWaXNpYmxlWm9vbUpvYikgeworICAgICAgICAgICAgICAgIFBsYXRm
b3JtOjpJbnRSZWN0IHRpbGVTcmNSZWN0ID0gZGlydHlSZWN0OworICAgICAgICAgICAgICAgIFBs
YXRmb3JtOjpJbnRQb2ludCB0aWxlT3JpZ2luID0gY3VycmVudFN0YXRlLT5vcmlnaW5PZlRpbGUo
aW5kZXgpOworICAgICAgICAgICAgICAgIHRpbGVTcmNSZWN0Lm1vdmUoLXRpbGVPcmlnaW4ueCgp
LCAtdGlsZU9yaWdpbi55KCkpOworCiAgICAgICAgICAgICAgICAgLy8gTWFwIHRvIHRoZSBkZXN0
aW5hdGlvbidzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpJ
bnRQb2ludCBkaWZmZXJlbmNlID0gY3VycmVudFN0YXRlLT5vcmlnaW5PZlRpbGUoaW5kZXgpIC0g
bV92aXNpYmxlVGlsZUJ1ZmZlclJlY3QubG9jYXRpb24oKTsKLSAgICAgICAgICAgICAgICBQbGF0
Zm9ybTo6SW50U2l6ZSBvZmZzZXQgPSBQbGF0Zm9ybTo6SW50U2l6ZShkaWZmZXJlbmNlLngoKSwg
ZGlmZmVyZW5jZS55KCkpOwotICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5
UmVjdCA9IGRpcnR5VGlsZVJlY3Q7Ci0gICAgICAgICAgICAgICAgZGlydHlSZWN0Lm1vdmUob2Zm
c2V0LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgUGxhdGZvcm06
OkludFBvaW50IHZpc2libGVUaWxlT3JpZ2luID0gbV92aXNpYmxlVGlsZUJ1ZmZlclJlY3QubG9j
YXRpb24oKTsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCB2aXNpYmxlVGlsZURz
dFJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgICAgICAgICAgdmlzaWJsZVRpbGVEc3RSZWN0Lm1v
dmUoLXZpc2libGVUaWxlT3JpZ2luLngoKSwgLXZpc2libGVUaWxlT3JpZ2luLnkoKSk7CiAKICAg
ICAgICAgICAgICAgICBUaWxlQnVmZmVyKiB2aXNpYmxlVGlsZUJ1ZmZlciA9IFN1cmZhY2VQb29s
OjpnbG9iYWxTdXJmYWNlUG9vbCgpLT52aXNpYmxlVGlsZUJ1ZmZlcigpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVCh2aXNpYmxlVGlsZUJ1ZmZlci0+c2l6ZSgpID09IFBsYXRmb3JtOjpJbnRTaXpl
KG1fd2ViUGFnZS0+ZC0+dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKSkpOwogICAgICAgICAgICAg
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6YmxpdFRvQnVmZmVyKAotICAgICAg
ICAgICAgICAgICAgICB2aXNpYmxlVGlsZUJ1ZmZlci0+bmF0aXZlQnVmZmVyKCksIGRpcnR5UmVj
dCwKLSAgICAgICAgICAgICAgICAgICAgdGlsZUJ1ZmZlci0+bmF0aXZlQnVmZmVyKCksIGRpcnR5
VGlsZVJlY3QpOworICAgICAgICAgICAgICAgICAgICB2aXNpYmxlVGlsZUJ1ZmZlci0+bmF0aXZl
QnVmZmVyKCksIHZpc2libGVUaWxlRHN0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgdGlsZUJ1
ZmZlci0+bmF0aXZlQnVmZmVyKCksIHRpbGVTcmNSZWN0KTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KQEAgLTIxNTEsMTEgKzIwNDgsNiBAQCBQbGF0Zm9ybTo6SW50U2l6ZSBCYWNr
aW5nU3RvcmVQcml2YXRlOjp0aWxlU2l6ZSgpCiAgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRTaXpl
KHRpbGVXaWR0aCgpLCB0aWxlSGVpZ2h0KCkpOwogfQogCi1QbGF0Zm9ybTo6SW50UmVjdCBCYWNr
aW5nU3RvcmVQcml2YXRlOjp0aWxlUmVjdCgpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRS
ZWN0KDAsIDAsIHRpbGVXaWR0aCgpLCB0aWxlSGVpZ2h0KCkpOwotfQotCiB2b2lkIEJhY2tpbmdT
dG9yZVByaXZhdGU6OnJlbmRlckNvbnRlbnRzKFBsYXRmb3JtOjpHcmFwaGljczo6RHJhd2FibGUq
IGRyYXdhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBQbGF0Zm9ybTo6SW50UmVjdCYgY29udGVudHNSZWN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVzdGluYXRpb25T
aXplKSBjb25zdApAQCAtMjMyNiw3ICsyMjE4LDcgQEAgc3RhdGljIHZvaWQgZHJhd0RlYnVnUmVj
dChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogZHN0QnVmZmVyLCBjb24K
IHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6YmxpdFRvV2luZG93KGNvbnN0IFBsYXRmb3JtOjpJ
bnRSZWN0JiBkc3RSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIHNyY0J1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBsYXRmb3JtOjpJ
bnRSZWN0JiBzcmNSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBibGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QmxlbmRNb2RlIGJsZW5kTW9kZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZ2xvYmFsQWxwaGEp
CiB7CiAgICAgQVNTRVJUKEJsYWNrQmVycnk6OlBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFk
TWVzc2FnZUNsaWVudCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CkBAIC0yMzQyLDEwICsyMjM0LDYg
QEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpibGl0VG9XaW5kb3coY29uc3QgUGxhdGZvcm06
OkludFJlY3QmIGRzdFJlY3QsCiAgICAgICAgICAgICAiRW1wdHkgd2luZG93IGJ1ZmZlciwgY291
bGRuJ3QgYmxpdFRvV2luZG93Iik7CiAgICAgfQogCi0gICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCbGVuZE1vZGUgYmxlbmRNb2RlID0gYmxlbmQKLSAgICAgICAgPyBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlNvdXJjZU92ZXIKLSAgICAgICAgOiBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlNvdXJjZUNvcHk7Ci0KICAgICBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OmJsaXRUb0J1ZmZlcihkc3RCdWZmZXIsIGRzdFJlY3QsIHNyY0J1ZmZl
ciwgc3JjUmVjdCwgYmxlbmRNb2RlLCBnbG9iYWxBbHBoYSk7CiAKICNpZiBERUJVR19GQVRfRklO
R0VSUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3Rv
cmVfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmVfcC5oCmlu
ZGV4IGZlYmM1MTVjNDk2N2RjY2NhNzU1NDk1Y2Q3NDM4YjgzNzk2NTcyOTkuLjkxNTRhMjM0NDU5
OTMxMzU0Y2RlMjg1MzI4ODEyMzZjZWM1Yjg5YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0JhY2tpbmdTdG9yZV9wLmgKQEAgLTIxNCw4ICsyMTQsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwYWludERlZmF1bHRCYWNrZ3JvdW5kKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBk
c3RSZWN0LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3NvciosIGJvb2wgZmx1
c2gpOwogICAgIHZvaWQgYmxpdE9uSWRsZSgpOwogCi0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8VGls
ZUluZGV4LCBQbGF0Zm9ybTo6SW50UmVjdD4gVGlsZVJlY3Q7Ci0gICAgUGxhdGZvcm06OkludFJl
Y3QgYmxpdFRpbGVSZWN0KFRpbGVCdWZmZXIqLCBjb25zdCBUaWxlUmVjdCYsIGNvbnN0IFBsYXRm
b3JtOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgQmFj
a2luZ1N0b3JlR2VvbWV0cnkqKTsKKyAgICBQbGF0Zm9ybTo6SW50UmVjdCBibGl0VGlsZVJlY3Qo
VGlsZUJ1ZmZlciosIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiwgY29uc3QgUGxhdGZvcm06Oklu
dFBvaW50JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBCYWNraW5nU3Rv
cmVHZW9tZXRyeSopOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIC8v
IFVzZSBpbnN0ZWFkIG9mIGJsaXRWaXNpYmxlQ29udGVudHMoKSBpZiB5b3UgbmVlZCBtb3JlIGNv
bnRyb2wgb3ZlcgpAQCAtMjM4LDExICsyMzcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgYmxpdFZl
cnRpY2FsU2Nyb2xsYmFyKCk7CiAKICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHRpbGUgaW5k
ZXggaXMgY3VycmVudGx5IHZpc2libGUgb3Igbm90LgotICAgIGJvb2wgaXNUaWxlVmlzaWJsZShj
b25zdCBUaWxlSW5kZXgmKSBjb25zdDsKKyAgICBib29sIGlzVGlsZVZpc2libGUoY29uc3QgVGls
ZUluZGV4JiwgQmFja2luZ1N0b3JlR2VvbWV0cnkqKSBjb25zdDsKICAgICBib29sIGlzVGlsZVZp
c2libGUoY29uc3QgUGxhdGZvcm06OkludFBvaW50JikgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5z
IGEgcmVjdCB0aGF0IGlzIHRoZSB1bmlvbiBvZiBhbGwgdGlsZXMgdGhhdCBhcmUgdmlzaWJsZS4K
LSAgICBQbGF0Zm9ybTo6SW50UmVjdCB2aXNpYmxlVGlsZXNSZWN0KCkgY29uc3Q7CisgICAgUGxh
dGZvcm06OkludFJlY3QgdmlzaWJsZVRpbGVzUmVjdChCYWNraW5nU3RvcmVHZW9tZXRyeSopIGNv
bnN0OwogCiAgICAgLy8gVXNlZCB0byBjbGlwIHRvIHRoZSB2aXNpYmxlIGNvbnRlbnQgZm9yIGlu
c3RhbmNlLgogICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRpbGVWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IFRpbGVJbmRleCYsIEJhY2tpbmdTdG9yZUdlb21ldHJ5KikgY29uc3Q7CkBAIC0yNjcsMTMg
KzI2Niw5IEBAIHB1YmxpYzoKICAgICAvLyBVcGRhdGUgYW4gaW5kaXZpZHVhbCB0aWxlLgogICAg
IHZvaWQgdXBkYXRlVGlsZShjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIHRpbGVPcmlnaW4sIGJv
b2wgaW1tZWRpYXRlKTsKIAotICAgIFBsYXRmb3JtOjpJbnRSZWN0IG1hcEZyb21UaWxlc1RvVHJh
bnNmb3JtZWRDb250ZW50cyhjb25zdCBUaWxlUmVjdCYpIGNvbnN0OwotICAgIFBsYXRmb3JtOjpJ
bnRSZWN0IG1hcEZyb21UaWxlc1RvVHJhbnNmb3JtZWRDb250ZW50cyhjb25zdCBUaWxlUmVjdCYs
IEJhY2tpbmdTdG9yZUdlb21ldHJ5KikgY29uc3Q7Ci0KKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxU
aWxlSW5kZXgsIFBsYXRmb3JtOjpJbnRSZWN0PiBUaWxlUmVjdDsKICAgICB0eXBlZGVmIFdURjo6
VmVjdG9yPFRpbGVSZWN0PiBUaWxlUmVjdExpc3Q7Ci0gICAgVGlsZVJlY3RMaXN0IG1hcEZyb21U
cmFuc2Zvcm1lZENvbnRlbnRzVG9BYnNvbHV0ZVRpbGVCb3VuZGFyaWVzKGNvbnN0IFBsYXRmb3Jt
OjpJbnRSZWN0JikgY29uc3Q7Ci0gICAgVGlsZVJlY3RMaXN0IG1hcEZyb21UcmFuc2Zvcm1lZENv
bnRlbnRzVG9UaWxlcyhjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYpIGNvbnN0OwotICAgIFRpbGVS
ZWN0TGlzdCBtYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXMoY29uc3QgUGxhdGZvcm06
OkludFJlY3QmLCBCYWNraW5nU3RvcmVHZW9tZXRyeSopIGNvbnN0OworICAgIFRpbGVSZWN0TGlz
dCBtYXBGcm9tUGl4ZWxDb250ZW50c1RvVGlsZXMoY29uc3QgUGxhdGZvcm06OkludFJlY3QmLCBC
YWNraW5nU3RvcmVHZW9tZXRyeSopIGNvbnN0OwogCiAgICAgdm9pZCBzZXRUaWxlTWF0cml4TmVl
ZHNVcGRhdGUoKSB7IG1fdGlsZU1hdHJpeE5lZWRzVXBkYXRlID0gdHJ1ZTsgfQogICAgIHZvaWQg
dXBkYXRlVGlsZU1hdHJpeElmTmVlZGVkKCk7CkBAIC0zMDksMTMgKzMwNCwxMiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGludCB0aWxlV2lkdGgoKTsKICAgICBzdGF0aWMgaW50IHRpbGVIZWlnaHQo
KTsKICAgICBzdGF0aWMgUGxhdGZvcm06OkludFNpemUgdGlsZVNpemUoKTsKLSAgICBzdGF0aWMg
UGxhdGZvcm06OkludFJlY3QgdGlsZVJlY3QoKTsKIAogICAgIC8vIFRoaXMgdGFrZXMgdHJhbnNm
b3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCiAgICAgdm9pZCByZW5kZXJDb250ZW50cyhCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciosIGNvbnN0IFBsYXRmb3JtOjpJbnRQ
b2ludCYgc3VyZmFjZU9mZnNldCwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGNvbnRlbnRzUmVj
dCkgY29uc3Q7CiAgICAgdm9pZCByZW5kZXJDb250ZW50cyhQbGF0Zm9ybTo6R3JhcGhpY3M6OkRy
YXdhYmxlKiAvKmRyYXdhYmxlKi8sIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiAvKmNvbnRlbnRz
UmVjdCovLCBjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgLypkZXN0aW5hdGlvblNpemUqLykgY29u
c3Q7CiAKLSAgICB2b2lkIGJsaXRUb1dpbmRvdyhjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgZHN0
UmVjdCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIHNyY0J1
ZmZlciwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHNyY1JlY3QsIGJvb2wgYmxlbmQsIHVuc2ln
bmVkIGNoYXIgZ2xvYmFsQWxwaGEpOworICAgIHZvaWQgYmxpdFRvV2luZG93KGNvbnN0IFBsYXRm
b3JtOjpJbnRSZWN0JiBkc3RSZWN0LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OkJ1ZmZlciogc3JjQnVmZmVyLCBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgc3JjUmVjdCwg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCbGVuZE1vZGUsIHVuc2lnbmVkIGNoYXIg
Z2xvYmFsQWxwaGEpOwogICAgIHZvaWQgZmlsbFdpbmRvdyhQbGF0Zm9ybTo6R3JhcGhpY3M6OkZp
bGxQYXR0ZXJuLCBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgZHN0UmVjdCwgY29uc3QgUGxhdGZv
cm06OkludFBvaW50JiBjb250ZW50c09yaWdpbiwgZG91YmxlIGNvbnRlbnRzU2NhbGUpOwogCiAg
ICAgV2ViQ29yZTo6Q29sb3Igd2ViUGFnZUJhY2tncm91bmRDb2xvclVzZXJJbnRlcmZhY2VUaHJl
YWQoKSBjb25zdDsgLy8gdXNlIFdlYlNldHRpbmdzOjpiYWNrZ3JvdW5kQ29sb3IoKSBmb3IgdGhl
IFdlYktpdCB0aHJlYWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5jcHAKaW5kZXggNjA0YWRiY2U1MTU4ZTMy
M2UwYjE3ZWVjOGMwZjkzZTAxOWNlY2ZjNC4uZDFhZjc4Mjk5YTIwZjM0YzllZTAwMzgzMzA2YTZl
YzYyODUzMzVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5jcHAKQEAgLTUzLDE5ICs1MywyNCBAQCBQ
bGF0Zm9ybTo6SW50U2l6ZSBUaWxlQnVmZmVyOjpzaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9z
aXplOwogfQogCi1QbGF0Zm9ybTo6SW50UmVjdCBUaWxlQnVmZmVyOjpyZWN0KCkgY29uc3QKK1Bs
YXRmb3JtOjpJbnRSZWN0IFRpbGVCdWZmZXI6OnN1cmZhY2VSZWN0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gUGxhdGZvcm06OkludFJlY3QoUGxhdGZvcm06OkludFBvaW50Ojp6ZXJvKCksIG1fc2l6
ZSk7CiB9CiAKK1BsYXRmb3JtOjpJbnRSZWN0IFRpbGVCdWZmZXI6OnBpeGVsQ29udGVudHNSZWN0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGxhdGZvcm06OkludFJlY3QobV9sYXN0UmVuZGVyT3Jp
Z2luLCBtX3NpemUpOworfQorCiBib29sIFRpbGVCdWZmZXI6OmlzUmVuZGVyZWQoZG91YmxlIHNj
YWxlKSBjb25zdAogewotICAgIHJldHVybiBpc1JlbmRlcmVkKHJlY3QoKSwgc2NhbGUpOworICAg
IHJldHVybiBpc1JlbmRlcmVkKHBpeGVsQ29udGVudHNSZWN0KCksIHNjYWxlKTsKIH0KIAotYm9v
bCBUaWxlQnVmZmVyOjppc1JlbmRlcmVkKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiBj
b250ZW50cywgZG91YmxlIHNjYWxlKSBjb25zdAorYm9vbCBUaWxlQnVmZmVyOjppc1JlbmRlcmVk
KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiBwaXhlbENvbnRlbnRzUmVnaW9uLCBkb3Vi
bGUgc2NhbGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbGFzdFJlbmRlclNjYWxlID09IHNjYWxl
ICYmIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMoY29udGVudHMsIG1f
cmVuZGVyZWRSZWdpb24pLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9sYXN0UmVuZGVyU2NhbGUg
PT0gc2NhbGUgJiYgUGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9ucyhwaXhl
bENvbnRlbnRzUmVnaW9uLCBtX3JlbmRlcmVkUmVnaW9uKS5pc0VtcHR5KCk7CiB9CiAKIHZvaWQg
VGlsZUJ1ZmZlcjo6Y2xlYXJSZW5kZXJlZFJlZ2lvbihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdFJl
Z2lvbiYgcmVnaW9uKQpAQCAtOTAsNyArOTUsNyBAQCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBU
aWxlQnVmZmVyOjpyZW5kZXJlZFJlZ2lvbigpIGNvbnN0CiAKIFBsYXRmb3JtOjpJbnRSZWN0UmVn
aW9uIFRpbGVCdWZmZXI6Om5vdFJlbmRlcmVkUmVnaW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
UGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9ucyhyZWN0KCksIHJlbmRlcmVk
UmVnaW9uKCkpOworICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RS
ZWdpb25zKHBpeGVsQ29udGVudHNSZWN0KCksIG1fcmVuZGVyZWRSZWdpb24pOwogfQogCiBQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogVGlsZUJ1ZmZlcjo6bmF0aXZlQnVmZmVyKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tp
bmdTdG9yZVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Jh
Y2tpbmdTdG9yZVRpbGUuaAppbmRleCA2MjUwNWI3OWViODlhMTZmODkwZWFhZDNjNTBhMGRhZDhm
OGIwYjc3Li4yMGRkNGI4MzFmNGZmOGY0OGE3MGMxYmQyZjM0NzEzMDkxODZjM2FmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVU
aWxlLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2lu
Z1N0b3JlVGlsZS5oCkBAIC03Miw3ICs3Miw4IEBAIGNsYXNzIFRpbGVCdWZmZXIgewogICAgICAg
ICBUaWxlQnVmZmVyKGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJik7CiAgICAgICAgIH5UaWxlQnVm
ZmVyKCk7CiAgICAgICAgIFBsYXRmb3JtOjpJbnRTaXplIHNpemUoKSBjb25zdDsKLSAgICAgICAg
UGxhdGZvcm06OkludFJlY3QgcmVjdCgpIGNvbnN0OworICAgICAgICBQbGF0Zm9ybTo6SW50UmVj
dCBzdXJmYWNlUmVjdCgpIGNvbnN0OworICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBwaXhlbENv
bnRlbnRzUmVjdCgpIGNvbnN0OwogCiAgICAgICAgIFBsYXRmb3JtOjpJbnRQb2ludCBsYXN0UmVu
ZGVyT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UmVuZGVyT3JpZ2luOyB9CiAgICAgICAg
IHZvaWQgc2V0TGFzdFJlbmRlck9yaWdpbihjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIG9yaWdp
bikgeyBtX2xhc3RSZW5kZXJPcmlnaW4gPSBvcmlnaW47IH0KQEAgLTgwLDcgKzgxLDcgQEAgY2xh
c3MgVGlsZUJ1ZmZlciB7CiAgICAgICAgIHZvaWQgc2V0TGFzdFJlbmRlclNjYWxlKGRvdWJsZSBz
Y2FsZSkgeyBtX2xhc3RSZW5kZXJTY2FsZSA9IHNjYWxlOyB9CiAKICAgICAgICAgYm9vbCBpc1Jl
bmRlcmVkKGRvdWJsZSBzY2FsZSkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNSZW5kZXJlZChjb25z
dCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYgY29udGVudHMsIGRvdWJsZSBzY2FsZSkgY29uc3Q7
CisgICAgICAgIGJvb2wgaXNSZW5kZXJlZChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYg
cGl4ZWxDb250ZW50c1JlZ2lvbiwgZG91YmxlIHNjYWxlKSBjb25zdDsKICAgICAgICAgdm9pZCBj
bGVhclJlbmRlcmVkUmVnaW9uKCk7CiAgICAgICAgIHZvaWQgY2xlYXJSZW5kZXJlZFJlZ2lvbihj
b25zdCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYpOwogICAgICAgICB2b2lkIGFkZFJlbmRlcmVk
UmVnaW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177365</attachid>
            <date>2012-12-03 16:14:07 -0800</date>
            <delta_ts>2012-12-03 16:16:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103930-20121203191123.patch</filename>
            <type>text/plain</type>
            <size>41100</size>
            <attacher name="Jakob Petsovits">jpetsovits</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Mzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpp
bmRleCAxN2RkN2QyOGY0MzIwNmI1OWFmYzJiZjJlMTVlMDMwZmQxMThmMzcxLi41YzFiNWQ5NTE3
M2IxNzUwYjhkZTY3NzVmN2NmMTE1OWZmODFjZTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMi0xMi0wNCAgSmFrb2IgUGV0c292aXRzICA8anBl
dHNvdml0c0ByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBTdG9yZSByZW5kZXJlZCBy
ZWdpb25zIGluIHBpeGVsIGNvbnRlbnRzIGNvb3JkaW5hdGVzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTMwCisgICAgICAgIFBSIDI1MzQ5Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBJbnRlcm5hbGx5
IHJldmlld2VkIGJ5IEFkYW0gVHJlYXQuCisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIHJlbmRl
cmVkIHJlZ2lvbiBvZiBhIHRpbGUgdXNlZCB0byBiZQorICAgICAgICBzdG9yZWQgaW4gY29vcmRp
bmF0ZXMgcmVsYXRpdmUgdG8gdGhlIHRpbGUgb3JpZ2luLgorICAgICAgICBUaGlzIGJyaW5ncyBu
byBiZW5lZml0cyB3aGF0c29ldmVyIGFuZCBjYXVzZXMgYSBsb3QKKyAgICAgICAgb2YgdW5uZWNl
c3NhcnkgdHJhbnNmb3JtYXRpb25zLCB0b2dldGhlciB3aXRoIHRoZQorICAgICAgICBwb3RlbnRp
YWwgb2YgaW5jb3JyZWN0bHkgdHJhbnNmb3JtaW5nIHJlbmRlcmVkIHJlZ2lvbnMuCisKKyAgICAg
ICAgQnkgc3RvcmluZyB0aGUgcmVuZGVyZWQgcmVnaW9uIGFzIHdoYXQgaXQgaXMsCisgICAgICAg
IGV2ZXJ5dGhpbmcgaXMgbW9yZSBjb21wYWN0LCBlYXNpZXIgdG8gdW5kZXJzdGFuZAorICAgICAg
ICBhbmQgZWFzaWVyIHRvIHVzZSB3aXRoIG90aGVyIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuCisK
KyAgICAgICAgKiBBcGkvQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6Y2xlYXJBbmRVcGRhdGVUaWxlT2ZOb3RSZW5kZXJl
ZFJlZ2lvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZh
dGU6OmlzQ3VycmVudFZpc2libGVKb2IpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpC
YWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXJWaXNpYmxlQ29udGVudHMpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpjb3B5UHJldmlvdXNDb250
ZW50c1RvVGlsZUJ1ZmZlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdT
dG9yZVByaXZhdGU6OmJsaXRWaXNpYmxlQ29udGVudHMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpjb21wb3NpdGVDb250ZW50cyk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRUaWxlUmVjdCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OmlzVGls
ZVZpc2libGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2
YXRlOjp2aXNpYmxlVGlsZXNSZWN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFj
a2luZ1N0b3JlUHJpdmF0ZTo6dGlsZVZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp0aWxlQ29udGVudHNSZWN0KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRl
VGlsZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRl
Ojp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24pOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tUGl4ZWxDb250ZW50
c1RvVGlsZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2
YXRlOjp0cmFuc2Zvcm1DaGFuZ2VkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFj
a2luZ1N0b3JlUHJpdmF0ZTo6YmxpdFRvV2luZG93KToKKyAgICAgICAgKiBBcGkvQmFja2luZ1N0
b3JlX3AuaDoKKyAgICAgICAgKEJhY2tpbmdTdG9yZVByaXZhdGUpOgorICAgICAgICAqIFdlYktp
dFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OlRpbGVCdWZmZXI6OnN1cmZhY2VSZWN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6VGlsZUJ1ZmZlcjo6cGl4ZWxDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VGlsZUJ1ZmZlcjo6aXNSZW5kZXJlZCk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRpbGVCdWZmZXI6Om5vdFJlbmRlcmVkUmVnaW9uKToK
KyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuaDoKKyAgICAgICAgKFRp
bGVCdWZmZXIpOgorCiAyMDEyLTEyLTAzICBKYWtvYiBQZXRzb3ZpdHMgIDxqcGV0c292aXRzQHJp
bS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIFJlZmFjdG9yIHRoZSBiYWNraW5nc3RvcmUg
dG8gc3dhcCBmdWxsIGdlb21ldHJpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggOWNhYzI5MGNkMmRiMTgxMTQ3ZDU4MDJmZGVmMDcwZjY4
M2E2YTcyYS4uOGY4YzNiOGMxZTdlZDE5MmI2YTJiNGU4ZGU4MDJkOGZmYjhiY2U2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAtOTAyLDE1
ICs5MDIsOCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmNsZWFyQW5kVXBkYXRlVGlsZU9m
Tm90UmVuZGVyZWRSZWdpb24oY29uc3QgVGlsZUluZGV4JgogICAgIGlmICghdGlsZUJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRmluZCB0aGUgb3JpZ2luIG9mIHRoaXMgdGlsZS4K
LSAgICBQbGF0Zm9ybTo6SW50UG9pbnQgb3JpZ2luID0gZ2VvbWV0cnktPm9yaWdpbk9mVGlsZShp
bmRleCk7Ci0KLSAgICAvLyBNYXAgdG8gdGlsZSBjb29yZGluYXRlcy4KLSAgICBQbGF0Zm9ybTo6
SW50UmVjdFJlZ2lvbiB0cmFuc2xhdGVkUmVnaW9uKHRpbGVOb3RSZW5kZXJlZFJlZ2lvbik7Ci0g
ICAgdHJhbnNsYXRlZFJlZ2lvbi5tb3ZlKC1vcmlnaW4ueCgpLCAtb3JpZ2luLnkoKSk7Ci0KICAg
ICAvLyBJZiB0aGUgcmVnaW9uIGluIHF1ZXN0aW9uIGlzIGFscmVhZHkgbWFya2VkIGFzIG5vdCBy
ZW5kZXJlZCwgcmV0dXJuIGVhcmx5Ci0gICAgaWYgKFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpp
bnRlcnNlY3RSZWdpb25zKHRpbGVCdWZmZXItPnJlbmRlcmVkUmVnaW9uKCksIHRyYW5zbGF0ZWRS
ZWdpb24pLmlzRW1wdHkoKSkKKyAgICBpZiAoUGxhdGZvcm06OkludFJlY3RSZWdpb246OmludGVy
c2VjdFJlZ2lvbnModGlsZUJ1ZmZlci0+cmVuZGVyZWRSZWdpb24oKSwgdGlsZU5vdFJlbmRlcmVk
UmVnaW9uKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENsZWFyIHRoZSB0
aWxlIG9mIHRoaXMgcmVnaW9uLiBUaGUgYmFjayBidWZmZXIgcmVnaW9uIGlzIGludmFsaWQgYW55
d2F5LCBidXQgdGhlIGZyb250CkBAIC05MjcsNyArOTIwLDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQ
cml2YXRlOjpjbGVhckFuZFVwZGF0ZVRpbGVPZk5vdFJlbmRlcmVkUmVnaW9uKGNvbnN0IFRpbGVJ
bmRleCYKIAogICAgIFBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgp
LT5kaXNwYXRjaFN5bmNNZXNzYWdlKAogICAgICAgICBQbGF0Zm9ybTo6Y3JlYXRlTWV0aG9kQ2Fs
bE1lc3NhZ2UoJkJhY2tpbmdTdG9yZVByaXZhdGU6OmNsZWFyUmVuZGVyZWRSZWdpb24sCi0gICAg
ICAgICAgICB0aGlzLCB0aWxlQnVmZmVyLCB0cmFuc2xhdGVkUmVnaW9uKSk7CisgICAgICAgICAg
ICB0aGlzLCB0aWxlQnVmZmVyLCB0aWxlTm90UmVuZGVyZWRSZWdpb24pKTsKIH0KIAogdm9pZCBC
YWNraW5nU3RvcmVQcml2YXRlOjpjbGVhclJlbmRlcmVkUmVnaW9uKFRpbGVCdWZmZXIqIHRpbGVC
dWZmZXIsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZWdpb24pCkBAIC05NTYsMTUg
Kzk0OSw5IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6aXNDdXJyZW50VmlzaWJsZUpvYihj
b25zdCBUaWxlSW5kZXgmIGluZGV4LCBUaWxlQnVmZmVyCiAgICAgSW50UmVjdExpc3QgdGlsZU5v
dFJlbmRlcmVkUmVnaW9uUmVjdHMgPSB0aWxlQnVmZmVyLT5ub3RSZW5kZXJlZFJlZ2lvbigpLnJl
Y3RzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVOb3RSZW5kZXJlZFJlZ2lv
blJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRpbGVOb3RS
ZW5kZXJlZFJlZ2lvblJlY3QgPSB0aWxlTm90UmVuZGVyZWRSZWdpb25SZWN0cy5hdChpKTsKLQot
ICAgICAgICAvLyBNYXAgdG8gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCi0gICAg
ICAgIHRpbGVOb3RSZW5kZXJlZFJlZ2lvblJlY3QubW92ZSh0aWxlT3JpZ2luLngoKSwgdGlsZU9y
aWdpbi55KCkpOwotCi0gICAgICAgIGlmICghbV9yZW5kZXJRdWV1ZS0+aXNDdXJyZW50UmVndWxh
clJlbmRlckpvYih0aWxlTm90UmVuZGVyZWRSZWdpb25SZWN0KSkKKyAgICAgICAgaWYgKCFtX3Jl
bmRlclF1ZXVlLT5pc0N1cnJlbnRSZWd1bGFyUmVuZGVySm9iKHRpbGVOb3RSZW5kZXJlZFJlZ2lv
blJlY3RzLmF0KGkpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA2MywxMCArMTA1MCw2IEBAIGJvb2wgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6cmVuZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQogICAgIC8vIHRp
bGUgbWF0cml4IHVwZGF0aW5nIHdpdGggYmFja2luZ3N0b3JlIHVwZGF0ZXMKICAgICB1cGRhdGVU
aWxlTWF0cml4SWZOZWVkZWQoKTsKIAotICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBt
YXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXMocmVjdCk7Ci0gICAgaWYgKHRpbGVSZWN0
TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogI2lmIERFQlVHX0JBQ0tJ
TkdTVE9SRQogICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbENyaXRpY2Fs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhY2tpbmdTdG9yZVByaXZhdGU6OnJlbmRl
ciByZWN0PSglZCwlZCAlZHglZCksIG1fc3VzcGVuZEJhY2tpbmdTdG9yZVVwZGF0ZXMgPSAlcyIs
CkBAIC0xMDc4LDYgKzEwNjEsMTAgQEAgYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIo
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpCiAgICAgVGlsZU1hcCBvbGRUaWxlTWFwID0g
Y3VycmVudFN0YXRlLT50aWxlTWFwKCk7CiAgICAgZG91YmxlIGN1cnJlbnRTY2FsZSA9IGN1cnJl
bnRTdGF0ZS0+c2NhbGUoKTsKIAorICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBtYXBG
cm9tUGl4ZWxDb250ZW50c1RvVGlsZXMocmVjdCwgY3VycmVudFN0YXRlKTsKKyAgICBpZiAodGls
ZVJlY3RMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgQmFja2lu
Z1N0b3JlR2VvbWV0cnkqIG5ld0dlb21ldHJ5ID0gbmV3IEJhY2tpbmdTdG9yZUdlb21ldHJ5Owog
ICAgIG5ld0dlb21ldHJ5LT5zZXRTY2FsZShjdXJyZW50U3RhdGUtPnNjYWxlKCkpOwogICAgIG5l
d0dlb21ldHJ5LT5zZXROdW1iZXJPZlRpbGVzV2lkZShjdXJyZW50U3RhdGUtPm51bWJlck9mVGls
ZXNXaWRlKCkpOwpAQCAtMTA4OCwxMyArMTA3NSw5IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6cmVuZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdGlsZVJlY3RMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIFRpbGVSZWN0
IHRpbGVSZWN0ID0gdGlsZVJlY3RMaXN0W2ldOwogICAgICAgICBUaWxlSW5kZXggaW5kZXggPSB0
aWxlUmVjdC5maXJzdDsKLSAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlUaWxlUmVjdCA9
IHRpbGVSZWN0LnNlY29uZDsKKyAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlSZWN0ID0g
dGlsZVJlY3Quc2Vjb25kOwogICAgICAgICBUaWxlQnVmZmVyKiBmcm9udEJ1ZmZlciA9IG9sZFRp
bGVNYXAuZ2V0KGluZGV4KTsKIAotICAgICAgICAvLyBUaGlzIGRpcnR5IHRpbGUgcmVjdCBpcyBp
biB0aWxlIGNvb3JkaW5hdGVzLCBidXQgaXQgbmVlZHMgdG8gYmUgaW4KLSAgICAgICAgLy8gdHJh
bnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCi0gICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0
IGRpcnR5UmVjdCA9IG1hcEZyb21UaWxlc1RvVHJhbnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCk7
Ci0KICAgICAgICAgaWYgKCFTdXJmYWNlUG9vbDo6Z2xvYmFsU3VyZmFjZVBvb2woKS0+aGFzQmFj
a0J1ZmZlcigpKSB7CiAgICAgICAgICAgICBuZXdHZW9tZXRyeS0+c2V0VGlsZU1hcChuZXdUaWxl
TWFwKTsKICAgICAgICAgICAgIGFkb3B0QXNGcm9udFN0YXRlKG5ld0dlb21ldHJ5KTsgLy8gdGhp
cyBzaG91bGQgZ2V0IHVzIGF0IGxlYXN0IG9uZSBtb3JlLgpAQCAtMTExNSw4ICsxMDk4LDYgQEAg
Ym9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIoY29uc3QgUGxhdGZvcm06OkludFJlY3Qm
IHJlY3QpCiAgICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2Ugc2hvdWxkIGNsaXAgdGhlIGNvbnRl
bnRzIHNpemUgYW5kIHJlbmRlciB0aGUgY29udGVudC4KICAgICAgICAgICAgIGRpcnR5UmVjdC5p
bnRlcnNlY3QoZXhwYW5kZWRDb250ZW50c1JlY3QoKSk7CiAKLSAgICAgICAgICAgIGRpcnR5VGls
ZVJlY3QuaW50ZXJzZWN0KHRpbGVDb250ZW50c1JlY3QoaW5kZXgsIGV4cGFuZGVkQ29udGVudHNS
ZWN0KCksIGN1cnJlbnRTdGF0ZSkpOwotCiAgICAgICAgICAgICAvLyBXZSBwcm9iYWJseSBoYXZl
IGV4dHJhIHRpbGVzIHNpbmNlIHRoZSBjb250ZW50cyBzaXplIGlzIHNvIHNtYWxsLgogICAgICAg
ICAgICAgLy8gU2F2ZSBzb21lIGN5Y2xlcyBoZXJlLi4uCiAgICAgICAgICAgICBpZiAoZGlydHlS
ZWN0LmlzRW1wdHkoKSkKQEAgLTExMzIsNyArMTExMywxMCBAQCBib29sIEJhY2tpbmdTdG9yZVBy
aXZhdGU6OnJlbmRlcihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkKICAgICAgICAgaWYg
KCFiYWNrQnVmZmVyLT5iYWNrZ3JvdW5kUGFpbnRlZCgpKQogICAgICAgICAgICAgYmFja0J1ZmZl
ci0+cGFpbnRCYWNrZ3JvdW5kKCk7CiAKKyAgICAgICAgUGxhdGZvcm06OkludFBvaW50IHRpbGVP
cmlnaW4gPSBjdXJyZW50U3RhdGUtPm9yaWdpbk9mVGlsZShpbmRleCk7CiAgICAgICAgIGJhY2tC
dWZmZXItPnNldExhc3RSZW5kZXJTY2FsZShjdXJyZW50U2NhbGUpOworICAgICAgICBiYWNrQnVm
ZmVyLT5zZXRMYXN0UmVuZGVyT3JpZ2luKHRpbGVPcmlnaW4pOworICAgICAgICBiYWNrQnVmZmVy
LT5jbGVhclJlbmRlcmVkUmVnaW9uKCk7CiAKICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpCdWZmZXIqIG5hdGl2ZUJ1ZmZlciA9IGJhY2tCdWZmZXItPm5hdGl2ZUJ1ZmZl
cigpOwogCkBAIC0xMTQzLDIwICsxMTI3LDE2IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
cmVuZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQogICAgICAgICAgICAgU3VyZmFj
ZVBvb2w6Omdsb2JhbFN1cmZhY2VQb29sKCktPndhaXRGb3JCdWZmZXIoYmFja0J1ZmZlcik7CiAK
ICAgICAgICAgLy8gTW9kaWZ5IHRoZSBidWZmZXIgb25seSBhZnRlciB3ZSd2ZSB3YWl0ZWQgZm9y
IGl0IHRvIGJlY29tZSBhdmFpbGFibGUgYWJvdmUuCi0gICAgICAgIFBsYXRmb3JtOjpJbnRQb2lu
dCB0aWxlT3JpZ2luID0gY3VycmVudFN0YXRlLT5vcmlnaW5PZlRpbGUoaW5kZXgpOwogICAgICAg
ICBib29sIGZyb250QnVmZmVySGFzVXNhYmxlQ29udGVudHMgPSBjdXJyZW50U3RhdGUtPmlzVGls
ZUNvcnJlc3BvbmRpbmdUb0J1ZmZlcihpbmRleCwgZnJvbnRCdWZmZXIpOwogICAgICAgICBpZiAo
ZnJvbnRCdWZmZXJIYXNVc2FibGVDb250ZW50cykKLSAgICAgICAgICAgIGNvcHlQcmV2aW91c0Nv
bnRlbnRzVG9UaWxlQnVmZmVyKGRpcnR5VGlsZVJlY3QsIGJhY2tCdWZmZXIsIGZyb250QnVmZmVy
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFja0J1ZmZlci0+Y2xlYXJSZW5kZXJlZFJl
Z2lvbigpOworICAgICAgICAgICAgY29weVByZXZpb3VzQ29udGVudHNUb1RpbGVCdWZmZXIoZGly
dHlSZWN0LCBiYWNrQnVmZmVyLCBmcm9udEJ1ZmZlcik7CiAKICAgICAgICAgLy8gRklYTUU6IG1v
ZGlmeSByZW5kZXIgdG8gdGFrZSBhIFZlY3RvcjxJbnRSZWN0PiBwYXJhbWV0ZXIgc28gd2UncmUg
bm90IHJlY3JlYXRpbmcKICAgICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG9uIHRoZSBzdGFjayBl
YWNoIHRpbWUuCiAgICAgICAgIHJlbmRlckNvbnRlbnRzKG5hdGl2ZUJ1ZmZlciwgdGlsZU9yaWdp
biwgZGlydHlSZWN0KTsKIAogICAgICAgICAvLyBBZGQgdGhlIG5ld2x5IHJlbmRlcmVkIHJlZ2lv
biB0byB0aGUgdGlsZSBzbyBpdCBjYW4ga2VlcCB0cmFjayBmb3IgYmxpdHMuCi0gICAgICAgIGJh
Y2tCdWZmZXItPmFkZFJlbmRlcmVkUmVnaW9uKGRpcnR5VGlsZVJlY3QpOwotICAgICAgICBiYWNr
QnVmZmVyLT5zZXRMYXN0UmVuZGVyT3JpZ2luKHRpbGVPcmlnaW4pOworICAgICAgICBiYWNrQnVm
ZmVyLT5hZGRSZW5kZXJlZFJlZ2lvbihkaXJ0eVJlY3QpOwogCiAgICAgICAgIC8vIFRoYW5rcyB0
byB0aGUgY29weVByZXZpb3VzQ29udGVudHNUb0JhY2tTdXJmYWNlT2ZUaWxlKCkgY2FsbCBhYm92
ZSwgd2Uga25vdyB0aGF0CiAgICAgICAgIC8vIHRoZSByZW5kZXJlZCByZWdpb24gb2YgdGhlIGJh
Y2sgYnVmZmVyIGNvbnRhaW5zIHRoZSByZW5kZXJlZCByZWdpb24gb2YgdGhlIGZyb250IGJ1ZmZl
ci4KQEAgLTExODEsNyArMTE2MSw3IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVxdWVz
dExheW91dElmTmVlZGVkKCkgY29uc3QKIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVuZGVy
VmlzaWJsZUNvbnRlbnRzKCkKIHsKICAgICB1cGRhdGVUaWxlTWF0cml4SWZOZWVkZWQoKTsKLSAg
ICBQbGF0Zm9ybTo6SW50UmVjdCByZW5kZXJSZWN0ID0gc2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9X
aW5kb3coKSA/IHZpc2libGVDb250ZW50c1JlY3QoKSA6IHZpc2libGVUaWxlc1JlY3QoKTsKKyAg
ICBQbGF0Zm9ybTo6SW50UmVjdCByZW5kZXJSZWN0ID0gc2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9X
aW5kb3coKSA/IHZpc2libGVDb250ZW50c1JlY3QoKSA6IHZpc2libGVUaWxlc1JlY3QoZnJvbnRT
dGF0ZSgpKTsKICAgICBpZiAocmVuZGVyKHJlbmRlclJlY3QpKSB7CiAgICAgICAgIG1fcmVuZGVy
UXVldWUtPmNsZWFyKHJlbmRlclJlY3QsIHRydWUgLypjbGVhclJlZ3VsYXJSZW5kZXJKb2JzKi8p
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMDgsMjEgKzExODgsMjEgQEAgdm9pZCBCYWNr
aW5nU3RvcmVQcml2YXRlOjpjb3B5UHJldmlvdXNDb250ZW50c1RvQmFja1N1cmZhY2VPZldpbmRv
dygpCiAgICAgd2luZG93QmFja0J1ZmZlclN0YXRlKCktPmFkZEJsaXR0ZWRSZWdpb24ocHJldmlv
dXNDb250ZW50c1JlZ2lvbik7CiB9CiAKLXZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6Y29weVBy
ZXZpb3VzQ29udGVudHNUb1RpbGVCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGV4Y2x1
ZGVSZWN0LCBUaWxlQnVmZmVyKiBkc3RUaWxlQnVmZmVyLCBUaWxlQnVmZmVyKiBzcmNUaWxlQnVm
ZmVyKQordm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpjb3B5UHJldmlvdXNDb250ZW50c1RvVGls
ZUJ1ZmZlcihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgZXhjbHVkZUNvbnRlbnRzUmVjdCwgVGls
ZUJ1ZmZlciogZHN0VGlsZUJ1ZmZlciwgVGlsZUJ1ZmZlciogc3JjVGlsZUJ1ZmZlcikKIHsKICAg
ICBBU1NFUlQoZHN0VGlsZUJ1ZmZlcik7CiAgICAgQVNTRVJUKHNyY1RpbGVCdWZmZXIpOwogCi0g
ICAgZHN0VGlsZUJ1ZmZlci0+Y2xlYXJSZW5kZXJlZFJlZ2lvbigpOwotCiAgICAgUGxhdGZvcm06
OkludFJlY3RSZWdpb24gcHJldmlvdXNDb250ZW50c1JlZ2lvbgotICAgICAgICA9IFBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMoc3JjVGlsZUJ1ZmZlci0+cmVuZGVyZWRS
ZWdpb24oKSwgZXhjbHVkZVJlY3QpOworICAgICAgICA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9u
OjpzdWJ0cmFjdFJlZ2lvbnMoc3JjVGlsZUJ1ZmZlci0+cmVuZGVyZWRSZWdpb24oKSwgZXhjbHVk
ZUNvbnRlbnRzUmVjdCk7CiAKICAgICBJbnRSZWN0TGlzdCBwcmV2aW91c0NvbnRlbnRzUmVjdHMg
PSBwcmV2aW91c0NvbnRlbnRzUmVnaW9uLnJlY3RzKCk7CisKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHByZXZpb3VzQ29udGVudHNSZWN0cy5zaXplKCk7ICsraSkgewogICAgICAgICBQbGF0
Zm9ybTo6SW50UmVjdCBwcmV2aW91c0NvbnRlbnRzUmVjdCA9IHByZXZpb3VzQ29udGVudHNSZWN0
cy5hdChpKTsKICAgICAgICAgZHN0VGlsZUJ1ZmZlci0+YWRkUmVuZGVyZWRSZWdpb24ocHJldmlv
dXNDb250ZW50c1JlY3QpOwogCisgICAgICAgIHByZXZpb3VzQ29udGVudHNSZWN0Lm1vdmUoLXNy
Y1RpbGVCdWZmZXItPmxhc3RSZW5kZXJPcmlnaW4oKS54KCksIC1zcmNUaWxlQnVmZmVyLT5sYXN0
UmVuZGVyT3JpZ2luKCkueSgpKTsKICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpibGl0VG9CdWZmZXIoCiAgICAgICAgICAgICBkc3RUaWxlQnVmZmVyLT5uYXRpdmVCdWZm
ZXIoKSwgcHJldmlvdXNDb250ZW50c1JlY3QsCiAgICAgICAgICAgICBzcmNUaWxlQnVmZmVyLT5u
YXRpdmVCdWZmZXIoKSwgcHJldmlvdXNDb250ZW50c1JlY3QpOwpAQCAtMTM5Miw0MyArMTM3Miwz
MSBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRWaXNpYmxlQ29udGVudHMoYm9vbCBm
b3JjZSkKICAgICAgICAgfQogCiAgICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiB0aWxlIHJlY3Rz
IHRoYXQgbWFrZXVwIHRoZSBjb250ZW50LgotICAgICAgICBUaWxlUmVjdExpc3QgdGlsZVJlY3RM
aXN0ID0gbWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb1RpbGVzKGNsaXBwZWRUcmFuc2Zvcm1l
ZFNyY1JlY3QsIGN1cnJlbnRTdGF0ZSk7CisgICAgICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExp
c3QgPSBtYXBGcm9tUGl4ZWxDb250ZW50c1RvVGlsZXMoY2xpcHBlZFRyYW5zZm9ybWVkU3JjUmVj
dCwgY3VycmVudFN0YXRlKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlUmVj
dExpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFRpbGVSZWN0IHRpbGVSZWN0ID0gdGls
ZVJlY3RMaXN0W2ldOwogICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gdGlsZVJlY3QuZmly
c3Q7Ci0gICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVRpbGVSZWN0ID0gdGlsZVJl
Y3Quc2Vjb25kOwotICAgICAgICAgICAgVGlsZUJ1ZmZlciogdGlsZUJ1ZmZlciA9IGN1cnJlbnRN
YXAuZ2V0KGluZGV4KTsKLQotICAgICAgICAgICAgLy8gVGhpcyBkaXJ0eSByZWN0IGlzIGluIHRp
bGUgY29vcmRpbmF0ZXMsIGJ1dCBpdCBuZWVkcyB0byBiZSBpbgotICAgICAgICAgICAgLy8gdHJh
bnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBQbGF0Zm9ybTo6SW50
UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHModGlsZVJl
Y3QsIGN1cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVJl
Y3QgPSB0aWxlUmVjdC5zZWNvbmQ7CiAKICAgICAgICAgICAgIC8vIERvbid0IGNsaXAgdG8gY29u
dGVudHMgaWYgaXQgaXMgZW1wdHkgc28gd2UgY2FuIHN0aWxsIHBhaW50IGRlZmF1bHQgYmFja2dy
b3VuZC4KICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRDb250ZW50c1JlY3QuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNob3VsZCBjbGlwIHRoZSBjb250
ZW50cyBzaXplIGFuZCBibGl0LgogICAgICAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3Qo
dHJhbnNmb3JtZWRDb250ZW50c1JlY3QpOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgcHJvYmFi
bHkgaGF2ZSBleHRyYSB0aWxlcyBzaW5jZSB0aGUgY29udGVudHMgc2l6ZSBpcyBzbyBzbWFsbC4K
LSAgICAgICAgICAgICAgICAvLyBTYXZlIHNvbWUgY3ljbGVzIGhlcmUuLi4KLSAgICAgICAgICAg
ICAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIFNhdmUgc29tZSBjeWNsZXMgaGVy
ZS4uLgorICAgICAgICAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKICAgICAgICAgICAgIC8vIE5vdywgdGhpcyBkaXJ0eSByZWN0IGlzIGlu
IHRyYW5zZm9ybWVkIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZQogICAgICAgICAgICAgLy8g
dHJhbnNmb3JtZWQgY29udGVudHMsIGJ1dCB1bHRpbWF0ZWx5IGl0IG5lZWRzIHRvIGJlIHRyYW5z
Zm9ybWVkCiAgICAgICAgICAgICAvLyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgdmlld3Bv
cnQuCiAgICAgICAgICAgICBkaXJ0eVJlY3QubW92ZSgtb3JpZ2luLngoKSwgLW9yaWdpbi55KCkp
OwogCi0gICAgICAgICAgICAvLyBTYXZlIHNvbWUgY3ljbGVzIGhlcmUuLi4KLSAgICAgICAgICAg
IGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpIHx8IGRpcnR5VGlsZVJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBUaWxlUmVjdCB3aG9sZVRpbGVS
ZWN0OwotICAgICAgICAgICAgd2hvbGVUaWxlUmVjdC5maXJzdCA9IGluZGV4OwotICAgICAgICAg
ICAgd2hvbGVUaWxlUmVjdC5zZWNvbmQgPSB0aGlzLT50aWxlUmVjdCgpOworICAgICAgICAgICAg
VGlsZUJ1ZmZlciogdGlsZUJ1ZmZlciA9IGN1cnJlbnRNYXAuZ2V0KGluZGV4KTsKIAogICAgICAg
ICAgICAgYm9vbCBpc1RpbGVDb3JyZXNwb25kaW5nVG9CdWZmZXIgPSBjdXJyZW50U3RhdGUtPmlz
VGlsZUNvcnJlc3BvbmRpbmdUb0J1ZmZlcihpbmRleCwgdGlsZUJ1ZmZlcik7Ci0gICAgICAgICAg
ICBib29sIHJlbmRlcmVkID0gdGlsZUJ1ZmZlciAmJiB0aWxlQnVmZmVyLT5pc1JlbmRlcmVkKGRp
cnR5VGlsZVJlY3QsIGN1cnJlbnRTY2FsZSk7CisgICAgICAgICAgICBib29sIHJlbmRlcmVkID0g
dGlsZUJ1ZmZlciAmJiB0aWxlQnVmZmVyLT5pc1JlbmRlcmVkKHRpbGVSZWN0LnNlY29uZCwgY3Vy
cmVudFNjYWxlKTsKICAgICAgICAgICAgIGJvb2wgcGFpbnRDaGVja2VyZWQgPSAhaXNUaWxlQ29y
cmVzcG9uZGluZ1RvQnVmZmVyIHx8ICFyZW5kZXJlZDsKIAogICAgICAgICAgICAgaWYgKHBhaW50
Q2hlY2tlcmVkKSB7CkBAIC0xNDgyLDIzICsxNDUwLDE4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJp
dmF0ZTo6YmxpdFZpc2libGVDb250ZW50cyhib29sIGZvcmNlKQogICAgICAgICAgICAgICAgICAg
ICAgICAgZGlydHlSZWN0VC5pbnRlcnNlY3QoUGxhdGZvcm06OkludFJlY3QoUGxhdGZvcm06Oklu
dFBvaW50KDAsIDApLCBzdXJmYWNlU2l6ZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICBibGl0VG9XaW5kb3coZGlydHlSZWN0VCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVUaWxlQnVmZmVyLT5uYXRpdmVCdWZmZXIoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnR5VGlsZVJlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKmJsZW5kKi8sIDI1NSk7CisgICAgICAg
ICAgICAgICAgICAgIGJsaXRUb1dpbmRvdyhkaXJ0eVJlY3RULCB2aXNpYmxlVGlsZUJ1ZmZlci0+
bmF0aXZlQnVmZmVyKCksIGRpcnR5VGlsZVJlY3QsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6U291cmNlQ29weSwgMjU1KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKGlzVGlsZUNvcnJlc3BvbmRpbmdUb0J1ZmZlcikgewogICAgICAgICAgICAgICAg
IC8vIEludGVyc2VjdCB0aGUgcmVuZGVyZWQgcmVnaW9uLgogICAgICAgICAgICAgICAgIFBsYXRm
b3JtOjpJbnRSZWN0UmVnaW9uIHJlbmRlcmVkUmVnaW9uID0gdGlsZUJ1ZmZlci0+cmVuZGVyZWRS
ZWdpb24oKTsKICAgICAgICAgICAgICAgICBJbnRSZWN0TGlzdCBkaXJ0eVJlbmRlcmVkUmVjdHMg
PSByZW5kZXJlZFJlZ2lvbi5yZWN0cygpOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZGlydHlSZW5kZXJlZFJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFRpbGVSZWN0IHRpbGVSZWN0OwotICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC5m
aXJzdCA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC5zZWNvbmQgPSBpbnRl
cnNlY3Rpb24oZGlydHlUaWxlUmVjdCwgZGlydHlSZW5kZXJlZFJlY3RzLmF0KGkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRpbGVSZWN0LnNlY29uZC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBkaXJ0eVJlbmRlcmVkUmVjdHMuc2l6ZSgpOyAr
K2opIHsKKyAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlSZW5kZXJl
ZFJlY3QgPSBpbnRlcnNlY3Rpb24odGlsZVJlY3Quc2Vjb25kLCBkaXJ0eVJlbmRlcmVkUmVjdHMu
YXQoaikpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGlydHlSZW5kZXJlZFJlY3QuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIEJsaXQgdGhlIHJlbmRlcmVkIHBhcnRzLgotICAgICAgICAgICAgICAgICAgICBibGl0
VGlsZVJlY3QodGlsZUJ1ZmZlciwgdGlsZVJlY3QsIG9yaWdpbiwgdHJhbnNmb3JtYXRpb24sIGN1
cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJsaXRUaWxlUmVjdCh0aWxlQnVmZmVy
LCBkaXJ0eVJlbmRlcmVkUmVjdCwgb3JpZ2luLCB0cmFuc2Zvcm1hdGlvbiwgY3VycmVudFN0YXRl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYmxpdHRlZFRpbGVzLmFwcGVu
ZCh0aWxlQnVmZmVyKTsKICAgICAgICAgICAgIH0KQEAgLTE2MDEsMzYgKzE1NjQsMzAgQEAgdm9p
ZCBCYWNraW5nU3RvcmVQcml2YXRlOjpjb21wb3NpdGVDb250ZW50cyhXZWJDb3JlOjpMYXllclJl
bmRlcmVyKiBsYXllclJlbmRlcmUKICAgICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd0NoZWNrZXJi
b2FyZFBhdHRlcm4odHJhbnNmb3JtLCBtX3dlYlBhZ2UtPmQtPm1hcEZyb21UcmFuc2Zvcm1lZEZs
b2F0UmVjdChXZWJDb3JlOjpJbnRSZWN0KGNoZWNrZXJlZFJlY3RzLmF0KGkpKSkpOwogCiAgICAg
Ly8gR2V0IHRoZSBsaXN0IG9mIHRpbGUgcmVjdHMgdGhhdCBtYWtldXAgdGhlIGNvbnRlbnQuCi0g
ICAgVGlsZVJlY3RMaXN0IHRpbGVSZWN0TGlzdCA9IG1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRz
VG9UaWxlcyh0cmFuc2Zvcm1lZENvbnRlbnRzLCBjdXJyZW50U3RhdGUpOworICAgIFRpbGVSZWN0
TGlzdCB0aWxlUmVjdExpc3QgPSBtYXBGcm9tUGl4ZWxDb250ZW50c1RvVGlsZXModHJhbnNmb3Jt
ZWRDb250ZW50cywgY3VycmVudFN0YXRlKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRp
bGVSZWN0TGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlUmVjdCB0aWxlUmVjdCA9IHRp
bGVSZWN0TGlzdFtpXTsKICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gdGlsZVJlY3QuZmlyc3Q7
Ci0gICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5VGlsZVJlY3QgPSB0aWxlUmVjdC5zZWNv
bmQ7CisgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5UmVjdCA9IHRpbGVSZWN0LnNlY29u
ZDsKICAgICAgICAgVGlsZUJ1ZmZlciogdGlsZUJ1ZmZlciA9IGN1cnJlbnRNYXAuZ2V0KGluZGV4
KTsKIAotICAgICAgICAvLyBUaGlzIGRpcnR5IHJlY3QgaXMgaW4gdGlsZSBjb29yZGluYXRlcywg
YnV0IGl0IG5lZWRzIHRvIGJlIGluCi0gICAgICAgIC8vIHRyYW5zZm9ybWVkIGNvbnRlbnRzIGNv
b3JkaW5hdGVzLgotICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9t
VGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHModGlsZVJlY3QsIGN1cnJlbnRTdGF0ZSk7Ci0KLSAg
ICAgICAgaWYgKCFkaXJ0eVJlY3QuaW50ZXJzZWN0cyh0cmFuc2Zvcm1lZENvbnRlbnRzKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgIGlmICghdGlsZUJ1ZmZlciB8fCAhY3VycmVu
dFN0YXRlLT5pc1RpbGVDb3JyZXNwb25kaW5nVG9CdWZmZXIoaW5kZXgsIHRpbGVCdWZmZXIpKQog
ICAgICAgICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd0NoZWNrZXJib2FyZFBhdHRlcm4odHJhbnNm
b3JtLCBtX3dlYlBhZ2UtPmQtPm1hcEZyb21UcmFuc2Zvcm1lZEZsb2F0UmVjdChQbGF0Zm9ybTo6
RmxvYXRSZWN0KGRpcnR5UmVjdCkpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBUaWxl
UmVjdCB3aG9sZVRpbGVSZWN0OwotICAgICAgICAgICAgd2hvbGVUaWxlUmVjdC5maXJzdCA9IGlu
ZGV4OwotICAgICAgICAgICAgd2hvbGVUaWxlUmVjdC5zZWNvbmQgPSB0aGlzLT50aWxlUmVjdCgp
OwotCi0gICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCB3aG9sZVJlY3QgPSBtYXBGcm9tVGls
ZXNUb1RyYW5zZm9ybWVkQ29udGVudHMod2hvbGVUaWxlUmVjdCwgY3VycmVudFN0YXRlKTsKKyAg
ICAgICAgICAgIFBsYXRmb3JtOjpJbnRQb2ludCB0aWxlT3JpZ2luID0gdGlsZUJ1ZmZlci0+bGFz
dFJlbmRlck9yaWdpbigpOworICAgICAgICAgICAgUGxhdGZvcm06OkZsb2F0UmVjdCB0aWxlRG9j
dW1lbnRDb250ZW50c1JlY3QgPSBtX3dlYlBhZ2UtPmQtPm1hcEZyb21UcmFuc2Zvcm1lZEZsb2F0
UmVjdChQbGF0Zm9ybTo6RmxvYXRSZWN0KHRpbGVCdWZmZXItPnBpeGVsQ29udGVudHNSZWN0KCkp
KTsKIAotICAgICAgICAgICAgbGF5ZXJSZW5kZXJlci0+Y29tcG9zaXRlQnVmZmVyKHRyYW5zZm9y
bSwgbV93ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoUGxhdGZvcm06OkZs
b2F0UmVjdCh3aG9sZVJlY3QpKSwgdGlsZUJ1ZmZlci0+bmF0aXZlQnVmZmVyKCksIGNvbnRlbnRz
T3BhcXVlLCAxLjBmKTsKKyAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPmNvbXBvc2l0ZUJ1ZmZl
cih0cmFuc2Zvcm0sIHRpbGVEb2N1bWVudENvbnRlbnRzUmVjdCwgdGlsZUJ1ZmZlci0+bmF0aXZl
QnVmZmVyKCksIGNvbnRlbnRzT3BhcXVlLCAxLjBmKTsKICAgICAgICAgICAgIGNvbXBvc2l0ZWRU
aWxlcy5hcHBlbmQodGlsZUJ1ZmZlcik7Ci0gICAgICAgICAgICAvLyBJbnRlcnNlY3QgdGhlIHJl
bmRlcmVkIHJlZ2lvbi4KLSAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIG5vdFJl
bmRlcmVkUmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9ucyhk
aXJ0eVRpbGVSZWN0LCB0aWxlQnVmZmVyLT5yZW5kZXJlZFJlZ2lvbigpKTsKKworICAgICAgICAg
ICAgLy8gSW50ZXJzZWN0IHRoZSByZW5kZXJlZCByZWdpb24gYW5kIGNsZWFyIHVucmVuZGVyZWQg
cGFydHMuCisgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBub3RSZW5kZXJlZFJl
Z2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMoZGlydHlSZWN0
LCB0aWxlQnVmZmVyLT5yZW5kZXJlZFJlZ2lvbigpKTsKICAgICAgICAgICAgIEludFJlY3RMaXN0
IG5vdFJlbmRlcmVkUmVjdHMgPSBub3RSZW5kZXJlZFJlZ2lvbi5yZWN0cygpOwotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub3RSZW5kZXJlZFJlY3RzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdDaGVja2VyYm9hcmRQYXR0ZXJuKHRy
YW5zZm9ybSwgbV93ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoUGxhdGZv
cm06OkZsb2F0UmVjdChub3RSZW5kZXJlZFJlY3RzLmF0KGkpKSkpOworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBub3RSZW5kZXJlZFJlY3RzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgdGlsZVN1cmZhY2VSZWN0ID0gbm90UmVuZGVy
ZWRSZWN0cy5hdChpKTsKKyAgICAgICAgICAgICAgICB0aWxlU3VyZmFjZVJlY3QubW92ZSgtdGls
ZU9yaWdpbi54KCksIC10aWxlT3JpZ2luLnkoKSk7CisgICAgICAgICAgICAgICAgbGF5ZXJSZW5k
ZXJlci0+ZHJhd0NoZWNrZXJib2FyZFBhdHRlcm4odHJhbnNmb3JtLCBtX3dlYlBhZ2UtPmQtPm1h
cEZyb21UcmFuc2Zvcm1lZEZsb2F0UmVjdChQbGF0Zm9ybTo6RmxvYXRSZWN0KHRpbGVTdXJmYWNl
UmVjdCkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzOSw0MSAr
MTU5NiwzOSBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmNvbXBvc2l0ZUNvbnRlbnRzKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXIqIGxheWVyUmVuZGVyZQogI2VuZGlmCiAKIFBsYXRmb3JtOjpJ
bnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRUaWxlUmVjdChUaWxlQnVmZmVyKiB0aWxl
QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGlsZVJlY3QmIHRpbGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBvcmlnaW4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja2luZ1N0b3JlR2VvbWV0cnkq
IGdlb21ldHJ5KQorICAgIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiB0aWxlUGl4ZWxDb250ZW50
c1JlY3QsCisgICAgY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBvcmlnaW4sCisgICAgY29uc3Qg
V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwKKyAgICBCYWNraW5nU3RvcmVH
ZW9tZXRyeSogZ2VvbWV0cnkpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UtPmlzVmlzaWJsZSgpIHx8
ICFpc0FjdGl2ZSgpIHx8ICF0aWxlQnVmZmVyKQogICAgICAgICByZXR1cm4gUGxhdGZvcm06Oklu
dFJlY3QoKTsKIAotICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5VGlsZVJlY3QgPSB0aWxlUmVj
dC5zZWNvbmQ7Ci0KLSAgICAvLyBUaGlzIGRpcnR5IHJlY3QgaXMgaW4gdGlsZSBjb29yZGluYXRl
cywgYnV0IGl0IG5lZWRzIHRvIGJlIGluCi0gICAgLy8gdHJhbnNmb3JtZWQgY29udGVudHMgY29v
cmRpbmF0ZXMuCi0gICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlSZWN0ID0gbWFwRnJvbVRpbGVz
VG9UcmFuc2Zvcm1lZENvbnRlbnRzKHRpbGVSZWN0LCBnZW9tZXRyeSk7CisgICAgUGxhdGZvcm06
OkludFJlY3Qgc3JjUmVjdCA9IHRpbGVQaXhlbENvbnRlbnRzUmVjdDsKKyAgICBQbGF0Zm9ybTo6
SW50UG9pbnQgdGlsZU9yaWdpbiA9IHRpbGVCdWZmZXItPmxhc3RSZW5kZXJPcmlnaW4oKTsKKyAg
ICBzcmNSZWN0Lm1vdmUoLXRpbGVPcmlnaW4ueCgpLCAtdGlsZU9yaWdpbi55KCkpOwogCiAgICAg
Ly8gTm93LCB0aGlzIGRpcnR5IHJlY3QgaXMgaW4gdHJhbnNmb3JtZWQgY29vcmRpbmF0ZXMgcmVs
YXRpdmUgdG8gdGhlCiAgICAgLy8gdHJhbnNmb3JtZWQgY29udGVudHMsIGJ1dCB1bHRpbWF0ZWx5
IGl0IG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVkCiAgICAgLy8gY29vcmRpbmF0ZXMgcmVsYXRpdmUg
dG8gdGhlIHZpZXdwb3J0LgotICAgIGRpcnR5UmVjdC5tb3ZlKC1vcmlnaW4ueCgpLCAtb3JpZ2lu
LnkoKSk7Ci0gICAgZGlydHlSZWN0ID0gbWF0cml4Lm1hcFJlY3QoZGlydHlSZWN0KTsKKyAgICBQ
bGF0Zm9ybTo6SW50UmVjdCBkc3RSZWN0ID0gdGlsZVBpeGVsQ29udGVudHNSZWN0OworICAgIGRz
dFJlY3QubW92ZSgtb3JpZ2luLngoKSwgLW9yaWdpbi55KCkpOworICAgIGRzdFJlY3QgPSBtYXRy
aXgubWFwUmVjdChkc3RSZWN0KTsKIAogICAgIGlmICghbWF0cml4LmlzSWRlbnRpdHkoKSkgewot
ICAgICAgICAvLyBCZWNhdXNlIG9mIHJvdW5kaW5nIGl0IGlzIHBvc3NpYmxlIHRoYXQgZGlydHlS
ZWN0IGNvdWxkIGJlIG9mZi1ieS1vbmUgbGFyZ2VyCisgICAgICAgIC8vIEJlY2F1c2Ugb2Ygcm91
bmRpbmcgaXQgaXMgcG9zc2libGUgdGhhdCBkc3RSZWN0IGNvdWxkIGJlIG9mZi1ieS1vbmUgbGFy
Z2VyCiAgICAgICAgIC8vIHRoYW4gdGhlIHN1cmZhY2Ugc2l6ZSBvZiB0aGUgZHN0IGJ1ZmZlci4g
V2UgcHJldmVudCB0aGlzIGhlcmUsIGJ5IGNsYW1waW5nCiAgICAgICAgIC8vIGl0IHRvIGVuc3Vy
ZSB0aGF0IGNhbid0IGhhcHBlbi4KLSAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChQbGF0Zm9y
bTo6SW50UmVjdChQbGF0Zm9ybTo6SW50UG9pbnQoMCwgMCksIHN1cmZhY2VTaXplKCkpKTsKKyAg
ICAgICAgZHN0UmVjdC5pbnRlcnNlY3QoUGxhdGZvcm06OkludFJlY3QoUGxhdGZvcm06OkludFBv
aW50KDAsIDApLCBzdXJmYWNlU2l6ZSgpKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKCFkaXJ0eVJl
Y3QuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIWRpcnR5VGlsZVJlY3QuaXNFbXB0eSgpKTsKLSAg
ICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSB8fCBkaXJ0eVRpbGVSZWN0LmlzRW1wdHkoKSkKKyAg
ICBBU1NFUlQoIWRzdFJlY3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIXNyY1JlY3QuaXNFbXB0
eSgpKTsKKyAgICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkgfHwgc3JjUmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdCgpOwogCi0gICAgYmxpdFRvV2luZG93KGRp
cnR5UmVjdCwgdGlsZUJ1ZmZlci0+bmF0aXZlQnVmZmVyKCksIGRpcnR5VGlsZVJlY3QsCi0gICAg
ICAgICAgICAgICAgIGZhbHNlIC8qYmxlbmQqLywgMjU1KTsKLSAgICByZXR1cm4gZGlydHlSZWN0
OworICAgIGJsaXRUb1dpbmRvdyhkc3RSZWN0LCB0aWxlQnVmZmVyLT5uYXRpdmVCdWZmZXIoKSwg
c3JjUmVjdCwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpTb3VyY2VDb3B5LCAyNTUp
OworICAgIHJldHVybiBkc3RSZWN0OwogfQogCiB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmJs
aXRIb3Jpem9udGFsU2Nyb2xsYmFyKCkKQEAgLTE2OTIsMTIgKzE2NDcsOSBAQCB2b2lkIEJhY2tp
bmdTdG9yZVByaXZhdGU6OmJsaXRWZXJ0aWNhbFNjcm9sbGJhcigpCiAgICAgbV93ZWJQYWdlLT5j
bGllbnQoKS0+ZHJhd1ZlcnRpY2FsU2Nyb2xsYmFyKCk7CiB9CiAKLWJvb2wgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6aXNUaWxlVmlzaWJsZShjb25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAorYm9v
bCBCYWNraW5nU3RvcmVQcml2YXRlOjppc1RpbGVWaXNpYmxlKGNvbnN0IFRpbGVJbmRleCYgaW5k
ZXgsIEJhY2tpbmdTdG9yZUdlb21ldHJ5KiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBUaWxlUmVj
dCB0aWxlUmVjdDsKLSAgICB0aWxlUmVjdC5maXJzdCA9IGluZGV4OwotICAgIHRpbGVSZWN0LnNl
Y29uZCA9IHRoaXMtPnRpbGVSZWN0KCk7Ci0gICAgcmV0dXJuIG1hcEZyb21UaWxlc1RvVHJhbnNm
b3JtZWRDb250ZW50cyh0aWxlUmVjdCkuaW50ZXJzZWN0cyh2aXNpYmxlQ29udGVudHNSZWN0KCkp
OworICAgIHJldHVybiBpc1RpbGVWaXNpYmxlKGdlb21ldHJ5LT5vcmlnaW5PZlRpbGUoaW5kZXgp
KTsKIH0KIAogYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjppc1RpbGVWaXNpYmxlKGNvbnN0IFBs
YXRmb3JtOjpJbnRQb2ludCYgb3JpZ2luKSBjb25zdApAQCAtMTcwNSwzNyArMTY1NywzMSBAQCBi
b29sIEJhY2tpbmdTdG9yZVByaXZhdGU6OmlzVGlsZVZpc2libGUoY29uc3QgUGxhdGZvcm06Oklu
dFBvaW50JiBvcmlnaW4pIGNvbnN0CiAgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRSZWN0KG9yaWdp
biwgdGlsZVNpemUoKSkuaW50ZXJzZWN0cyh2aXNpYmxlQ29udGVudHNSZWN0KCkpOwogfQogCi1Q
bGF0Zm9ybTo6SW50UmVjdCBCYWNraW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlVGlsZXNSZWN0KCkg
Y29uc3QKK1BsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVUaWxl
c1JlY3QoQmFja2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAogewotICAgIEJhY2tp
bmdTdG9yZUdlb21ldHJ5KiBjdXJyZW50U3RhdGUgPSBmcm9udFN0YXRlKCk7Ci0gICAgVGlsZU1h
cCBjdXJyZW50TWFwID0gY3VycmVudFN0YXRlLT50aWxlTWFwKCk7CisgICAgVGlsZU1hcCB0aWxl
TWFwID0gZ2VvbWV0cnktPnRpbGVNYXAoKTsKIAogICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3Q7
Ci0gICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKLSAg
ICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHRp
bGVSZWN0LmZpcnN0ID0gaXQtPmtleTsKLSAgICAgICAgdGlsZVJlY3Quc2Vjb25kID0gdGhpcy0+
dGlsZVJlY3QoKTsKLSAgICAgICAgUGxhdGZvcm06OkludFJlY3QgdGlsZSA9IG1hcEZyb21UaWxl
c1RvVHJhbnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCk7Ci0gICAgICAgIGlmICh0aWxlLmludGVy
c2VjdHModmlzaWJsZUNvbnRlbnRzUmVjdCgpKSkKLSAgICAgICAgICAgIHJlY3QgPSBQbGF0Zm9y
bTo6dW5pb25PZlJlY3RzKHJlY3QsIHRpbGUpOworICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHRpbGVNYXAuZW5kKCk7CisgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IHRpbGVNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFBsYXRmb3Jt
OjpJbnRSZWN0IHRpbGVQaXhlbENvbnRlbnRzUmVjdChnZW9tZXRyeS0+b3JpZ2luT2ZUaWxlKGl0
LT5rZXkpLCB0aWxlU2l6ZSgpKTsKKyAgICAgICAgaWYgKHRpbGVQaXhlbENvbnRlbnRzUmVjdC5p
bnRlcnNlY3RzKHZpc2libGVDb250ZW50c1JlY3QoKSkpCisgICAgICAgICAgICByZWN0ID0gUGxh
dGZvcm06OnVuaW9uT2ZSZWN0cyhyZWN0LCB0aWxlUGl4ZWxDb250ZW50c1JlY3QpOwogICAgIH0K
ICAgICByZXR1cm4gcmVjdDsKIH0KIAogUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJp
dmF0ZTo6dGlsZVZpc2libGVDb250ZW50c1JlY3QoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgQmFj
a2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmICghaXNUaWxlVmlz
aWJsZShpbmRleCkpCisgICAgaWYgKCFpc1RpbGVWaXNpYmxlKGluZGV4LCBnZW9tZXRyeSkpCiAg
ICAgICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdCgpOwogCiAgICAgcmV0dXJuIHRpbGVDb250
ZW50c1JlY3QoaW5kZXgsIHZpc2libGVDb250ZW50c1JlY3QoKSwgZ2VvbWV0cnkpOwogfQogCi1Q
bGF0Zm9ybTo6SW50UmVjdCBCYWNraW5nU3RvcmVQcml2YXRlOjp0aWxlQ29udGVudHNSZWN0KGNv
bnN0IFRpbGVJbmRleCYgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGNvbnRlbnRzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJh
Y2tpbmdTdG9yZUdlb21ldHJ5KiBzdGF0ZSkgY29uc3QKK1BsYXRmb3JtOjpJbnRSZWN0IEJhY2tp
bmdTdG9yZVByaXZhdGU6OnRpbGVDb250ZW50c1JlY3QoY29uc3QgVGlsZUluZGV4JiBpbmRleCwg
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmIHBpeGVsQ29udGVudHNSZWN0LCBCYWNraW5nU3RvcmVH
ZW9tZXRyeSogc3RhdGUpIGNvbnN0CiB7Ci0gICAgVGlsZVJlY3RMaXN0IHRpbGVSZWN0TGlzdCA9
IG1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UaWxlcyhjb250ZW50cywgc3RhdGUpOworICAg
IFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBtYXBGcm9tUGl4ZWxDb250ZW50c1RvVGlsZXMo
cGl4ZWxDb250ZW50c1JlY3QsIHN0YXRlKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRp
bGVSZWN0TGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlUmVjdCB0aWxlUmVjdCA9IHRp
bGVSZWN0TGlzdFtpXTsKICAgICAgICAgaWYgKGluZGV4ID09IHRpbGVSZWN0LmZpcnN0KQpAQCAt
MTc5NSw3ICsxNzQxLDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhi
b29sIHVwZGF0ZVZpc2libGUsIGJvb2wgaW1tZWRpYXRlKQogCiAgICAgVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0LT5rZXkpOworICAgICAgICBi
b29sIGlzVmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaXQtPmtleSwgY3VycmVudFN0YXRlKTsKICAg
ICAgICAgaWYgKCF1cGRhdGVWaXNpYmxlICYmIGlzVmlzaWJsZSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB1cGRhdGVUaWxlKGN1cnJlbnRTdGF0ZS0+b3JpZ2luT2ZUaWxlKGl0LT5r
ZXkpLCBpbW1lZGlhdGUpOwpAQCAtMTgyMCw3ICsxNzY2LDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQ
cml2YXRlOjp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24oYm9vbCBjaGVj
a0xvYWQKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQt
PmtleTsKICAgICAgICAgVGlsZUJ1ZmZlciogdGlsZUJ1ZmZlciA9IGl0LT52YWx1ZTsKLSAgICAg
ICAgYm9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4KTsKKyAgICAgICAgYm9vbCBp
c1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4LCBjdXJyZW50U3RhdGUpOwogICAgICAgICBQ
bGF0Zm9ybTo6SW50UG9pbnQgdGlsZU9yaWdpbiA9IGN1cnJlbnRTdGF0ZS0+b3JpZ2luT2ZUaWxl
KGluZGV4KTsKICAgICAgICAgLy8gVGhlIHJlY3QgaW4gdHJhbnNmb3JtZWQgY29udGVudHMgY29v
cmRpbmF0ZXMuCiAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3QodGlsZU9yaWdpbiwgdGls
ZVNpemUoKSk7CkBAIC0xODcxLDU3ICsxODE3LDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRl
Ojp1cGRhdGVUaWxlKGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgb3JpZ2luLCBib29sIGltbWUK
ICAgICAgICAgbV9yZW5kZXJRdWV1ZS0+YWRkVG9RdWV1ZShqb2JUeXBlLCB1cGRhdGVSZWN0KTsK
IH0KIAotUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRpbGVz
VG9UcmFuc2Zvcm1lZENvbnRlbnRzKGNvbnN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OlRpbGVSZWN0
JiB0aWxlUmVjdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1l
ZENvbnRlbnRzKHRpbGVSZWN0LCBmcm9udFN0YXRlKCkpOwotfQotCi1QbGF0Zm9ybTo6SW50UmVj
dCBCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHMo
Y29uc3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6VGlsZVJlY3QmIHRpbGVSZWN0LCBCYWNraW5nU3Rv
cmVHZW9tZXRyeSogZ2VvbWV0cnkpIGNvbnN0Ci17Ci0gICAgVGlsZUluZGV4IGluZGV4ID0gdGls
ZVJlY3QuZmlyc3Q7Ci0gICAgUGxhdGZvcm06OkludFJlY3QgcmVjdCA9IHRpbGVSZWN0LnNlY29u
ZDsKLSAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSB0aWxlIGluY2x1ZGluZyB0aGUgYmFja2luZyBz
dG9yZSBvZmZzZXQuCi0gICAgY29uc3QgUGxhdGZvcm06OkludFBvaW50IG9yaWdpbk9mVGlsZSA9
IGdlb21ldHJ5LT5vcmlnaW5PZlRpbGUoaW5kZXgpOwotICAgIHJlY3QubW92ZShvcmlnaW5PZlRp
bGUueCgpLCBvcmlnaW5PZlRpbGUueSgpKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotQmFja2lu
Z1N0b3JlUHJpdmF0ZTo6VGlsZVJlY3RMaXN0IEJhY2tpbmdTdG9yZVByaXZhdGU6Om1hcEZyb21U
cmFuc2Zvcm1lZENvbnRlbnRzVG9BYnNvbHV0ZVRpbGVCb3VuZGFyaWVzKGNvbnN0IFBsYXRmb3Jt
OjpJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIGlmICghbV93ZWJQYWdlLT5pc1Zpc2libGUo
KSB8fCAhaXNBY3RpdmUoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIFRpbGVSZWN0TGlzdCgpOwotICAgIH0KLQotICAgIFRpbGVSZWN0TGlzdCB0aWxl
UmVjdExpc3Q7Ci0gICAgaW50IGZpcnN0WE9mZnNldCA9IHJlY3QueCgpIC8gdGlsZVdpZHRoKCk7
Ci0gICAgaW50IGZpcnN0WU9mZnNldCA9IHJlY3QueSgpIC8gdGlsZUhlaWdodCgpOwotICAgIGlu
dCBsYXN0WE9mZnNldCA9IChyZWN0LnJpZ2h0KCkgLSAxKSAvIHRpbGVXaWR0aCgpOwotICAgIGlu
dCBsYXN0WU9mZnNldCA9IChyZWN0LmJvdHRvbSgpIC0gMSkgLyB0aWxlSGVpZ2h0KCk7Ci0gICAg
Zm9yIChpbnQgaSA9IGZpcnN0WE9mZnNldDsgaSA8PSBsYXN0WE9mZnNldDsgKytpKSB7Ci0gICAg
ICAgIGZvciAoaW50IGogPSBmaXJzdFlPZmZzZXQ7IGogPD0gbGFzdFlPZmZzZXQ7ICsraikgewot
ICAgICAgICAgICAgY29uc3QgaW50IGRzdFggPSAoaSA9PSBmaXJzdFhPZmZzZXQpID8gcmVjdC54
KCkgOiBpICogdGlsZVdpZHRoKCk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgZHN0WSA9IChqID09
IGZpcnN0WU9mZnNldCkgPyByZWN0LnkoKSA6IGogKiB0aWxlSGVpZ2h0KCk7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQgZHN0UmlnaHQgPSAoaSA9PSBsYXN0WE9mZnNldCkgPyByZWN0LnJpZ2h0KCkg
OiAoaSArIDEpICogdGlsZVdpZHRoKCk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgZHN0Qm90dG9t
ID0gKGogPT0gbGFzdFlPZmZzZXQpID8gcmVjdC5ib3R0b20oKSA6IChqICsgMSkgKiB0aWxlSGVp
Z2h0KCk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgc3JjWCA9IGRzdFggJSB0aWxlV2lkdGgoKTsK
LSAgICAgICAgICAgIGNvbnN0IGludCBzcmNZID0gZHN0WSAlIHRpbGVIZWlnaHQoKTsKLSAgICAg
ICAgICAgIFRpbGVSZWN0IHRpbGVSZWN0OwotICAgICAgICAgICAgdGlsZVJlY3QuZmlyc3QgPSBU
aWxlSW5kZXgoaSwgaik7Ci0gICAgICAgICAgICB0aWxlUmVjdC5zZWNvbmQgPSBQbGF0Zm9ybTo6
SW50UmVjdChzcmNYLCBzcmNZLCBkc3RSaWdodCAtIGRzdFgsIGRzdEJvdHRvbSAtIGRzdFkpOwot
ICAgICAgICAgICAgdGlsZVJlY3RMaXN0LmFwcGVuZCh0aWxlUmVjdCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIHRpbGVSZWN0TGlzdDsKLX0KLQotCi1CYWNraW5nU3RvcmVQcml2YXRl
OjpUaWxlUmVjdExpc3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29u
dGVudHNUb1RpbGVzKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAg
IHJldHVybiBtYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXMocmVjdCwgZnJvbnRTdGF0
ZSgpKTsKLX0KLQotQmFja2luZ1N0b3JlUHJpdmF0ZTo6VGlsZVJlY3RMaXN0IEJhY2tpbmdTdG9y
ZVByaXZhdGU6Om1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UaWxlcyhjb25zdCBQbGF0Zm9y
bTo6SW50UmVjdCYgcmVjdCwgQmFja2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAor
QmFja2luZ1N0b3JlUHJpdmF0ZTo6VGlsZVJlY3RMaXN0IEJhY2tpbmdTdG9yZVByaXZhdGU6Om1h
cEZyb21QaXhlbENvbnRlbnRzVG9UaWxlcyhjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCwg
QmFja2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAogewogICAgIFRpbGVNYXAgdGls
ZU1hcCA9IGdlb21ldHJ5LT50aWxlTWFwKCk7CiAKQEAgLTE5MzMsMTMgKzE4MjksOCBAQCBCYWNr
aW5nU3RvcmVQcml2YXRlOjpUaWxlUmVjdExpc3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJv
bVRyYW5zZm9ybWVkQ29udGVudAogICAgICAgICAvLyBOZWVkIHRvIG1hcCB0aGUgcmVjdCB0byB0
aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByID0gcmVjdDsKIAot
ICAgICAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSB0aWxlIGluY2x1ZGluZyB0aGUgYmFja2luZyBz
dG9yZSBvZmZzZXQuCi0gICAgICAgIGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCBvcmlnaW5PZlRp
bGUgPSBnZW9tZXRyeS0+b3JpZ2luT2ZUaWxlKGluZGV4KTsKLQotICAgICAgICByLm1vdmUoLShv
cmlnaW5PZlRpbGUueCgpKSwgLShvcmlnaW5PZlRpbGUueSgpKSk7Ci0KICAgICAgICAgLy8gRG8g
d2UgaW50ZXJzZWN0IHRoZSBjdXJyZW50IHRpbGUgb3Igbm8/Ci0gICAgICAgIHIuaW50ZXJzZWN0
KFBsYXRmb3JtOjpJbnRSZWN0KFBsYXRmb3JtOjpJbnRQb2ludCgwLCAwKSwgdGlsZVNpemUoKSkp
OworICAgICAgICByLmludGVyc2VjdChQbGF0Zm9ybTo6SW50UmVjdChnZW9tZXRyeS0+b3JpZ2lu
T2ZUaWxlKGluZGV4KSwgdGlsZVNpemUoKSkpOwogICAgICAgICBpZiAoci5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTk5OCwxNiArMTg4OSwxNSBAQCB2b2lkIEJhY2tp
bmdTdG9yZVByaXZhdGU6OnRyYW5zZm9ybUNoYW5nZWQoKQogICAgICAgICAgICAgbV92aXNpYmxl
VGlsZUJ1ZmZlclJlY3QgPSB2aXNpYmxlQ29udGVudHNSZWN0KCk7IC8vIENhY2hlIHRoaXMgZm9y
IGJsaXRWaXNpYmxlQ29udGVudHMuCiAKICAgICAgICAgLy8gQWRkIHRoZSBjdXJyZW50bHkgdmlz
aWJsZSB0aWxlcyB0byB0aGUgcmVuZGVyIHF1ZXVlIGFzIHZpc2libGUgem9vbSBqb2JzLgotICAg
ICAgICBUaWxlUmVjdExpc3QgdGlsZVJlY3RMaXN0ID0gbWFwRnJvbVRyYW5zZm9ybWVkQ29udGVu
dHNUb1RpbGVzKHZpc2libGVDb250ZW50c1JlY3QoKSk7CisgICAgICAgIFRpbGVSZWN0TGlzdCB0
aWxlUmVjdExpc3QgPSBtYXBGcm9tUGl4ZWxDb250ZW50c1RvVGlsZXModmlzaWJsZUNvbnRlbnRz
UmVjdCgpLCBjdXJyZW50U3RhdGUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRp
bGVSZWN0TGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Qg
PSB0aWxlUmVjdExpc3RbaV07CiAgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSB0aWxlUmVj
dC5maXJzdDsKLSAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5VGlsZVJlY3QgPSB0
aWxlUmVjdC5zZWNvbmQ7CisgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVJlY3Qg
PSB0aWxlUmVjdC5zZWNvbmQ7CiAgICAgICAgICAgICBUaWxlQnVmZmVyKiB0aWxlQnVmZmVyID0g
Y3VycmVudE1hcC5nZXQoaW5kZXgpOwogCiAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSB3
aG9sZSByZWN0LgotICAgICAgICAgICAgdGlsZVJlY3Quc2Vjb25kID0gdGhpcy0+dGlsZVJlY3Qo
KTsKLSAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHdob2xlUmVjdCA9IG1hcEZyb21UaWxl
c1RvVHJhbnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCk7CisgICAgICAgICAgICBQbGF0Zm9ybTo6
SW50UmVjdCB3aG9sZVJlY3QoY3VycmVudFN0YXRlLT5vcmlnaW5PZlRpbGUoaW5kZXgpLCB0aWxl
U2l6ZSgpKTsKICAgICAgICAgICAgIG1fcmVuZGVyUXVldWUtPmFkZFRvUXVldWUoUmVuZGVyUXVl
dWU6OlZpc2libGVab29tLCB3aG9sZVJlY3QpOwogCiAgICAgICAgICAgICBpZiAoIXRpbGVCdWZm
ZXIpCkBAIC0yMDE2LDE3ICsxOTA2LDIwIEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dHJh
bnNmb3JtQ2hhbmdlZCgpCiAgICAgICAgICAgICAvLyBDb3B5IHRoZSB2aXNpYmxlIGNvbnRlbnRz
IGludG8gdGhlIHZpc2libGVUaWxlQnVmZmVyIGlmIHdlIGRvbid0IGhhdmUKICAgICAgICAgICAg
IC8vIGFueSBjdXJyZW50IHZpc2libGUgem9vbSBqb2JzLgogICAgICAgICAgICAgaWYgKCFoYXND
dXJyZW50VmlzaWJsZVpvb21Kb2IpIHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVj
dCB0aWxlU3JjUmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50
UG9pbnQgdGlsZU9yaWdpbiA9IGN1cnJlbnRTdGF0ZS0+b3JpZ2luT2ZUaWxlKGluZGV4KTsKKyAg
ICAgICAgICAgICAgICB0aWxlU3JjUmVjdC5tb3ZlKC10aWxlT3JpZ2luLngoKSwgLXRpbGVPcmln
aW4ueSgpKTsKKwogICAgICAgICAgICAgICAgIC8vIE1hcCB0byB0aGUgZGVzdGluYXRpb24ncyBj
b29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UG9pbnQgZGlm
ZmVyZW5jZSA9IGN1cnJlbnRTdGF0ZS0+b3JpZ2luT2ZUaWxlKGluZGV4KSAtIG1fdmlzaWJsZVRp
bGVCdWZmZXJSZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm06OkludFNp
emUgb2Zmc2V0ID0gUGxhdGZvcm06OkludFNpemUoZGlmZmVyZW5jZS54KCksIGRpZmZlcmVuY2Uu
eSgpKTsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVJlY3QgPSBkaXJ0
eVRpbGVSZWN0OwotICAgICAgICAgICAgICAgIGRpcnR5UmVjdC5tb3ZlKG9mZnNldC53aWR0aCgp
LCBvZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRQb2ludCB2
aXNpYmxlVGlsZU9yaWdpbiA9IG1fdmlzaWJsZVRpbGVCdWZmZXJSZWN0LmxvY2F0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgdmlzaWJsZVRpbGVEc3RSZWN0ID0gZGly
dHlSZWN0OworICAgICAgICAgICAgICAgIHZpc2libGVUaWxlRHN0UmVjdC5tb3ZlKC12aXNpYmxl
VGlsZU9yaWdpbi54KCksIC12aXNpYmxlVGlsZU9yaWdpbi55KCkpOwogCiAgICAgICAgICAgICAg
ICAgVGlsZUJ1ZmZlciogdmlzaWJsZVRpbGVCdWZmZXIgPSBTdXJmYWNlUG9vbDo6Z2xvYmFsU3Vy
ZmFjZVBvb2woKS0+dmlzaWJsZVRpbGVCdWZmZXIoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
dmlzaWJsZVRpbGVCdWZmZXItPnNpemUoKSA9PSBQbGF0Zm9ybTo6SW50U2l6ZShtX3dlYlBhZ2Ut
PmQtPnRyYW5zZm9ybWVkVmlld3BvcnRTaXplKCkpKTsKICAgICAgICAgICAgICAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmJsaXRUb0J1ZmZlcigKLSAgICAgICAgICAgICAgICAg
ICAgdmlzaWJsZVRpbGVCdWZmZXItPm5hdGl2ZUJ1ZmZlcigpLCBkaXJ0eVJlY3QsCi0gICAgICAg
ICAgICAgICAgICAgIHRpbGVCdWZmZXItPm5hdGl2ZUJ1ZmZlcigpLCBkaXJ0eVRpbGVSZWN0KTsK
KyAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVRpbGVCdWZmZXItPm5hdGl2ZUJ1ZmZlcigpLCB2
aXNpYmxlVGlsZURzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgIHRpbGVCdWZmZXItPm5hdGl2
ZUJ1ZmZlcigpLCB0aWxlU3JjUmVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC0yMTUxLDExICsyMDQ0LDYgQEAgUGxhdGZvcm06OkludFNpemUgQmFja2luZ1N0b3JlUHJp
dmF0ZTo6dGlsZVNpemUoKQogICAgIHJldHVybiBQbGF0Zm9ybTo6SW50U2l6ZSh0aWxlV2lkdGgo
KSwgdGlsZUhlaWdodCgpKTsKIH0KIAotUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJp
dmF0ZTo6dGlsZVJlY3QoKQotewotICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdCgwLCAwLCB0
aWxlV2lkdGgoKSwgdGlsZUhlaWdodCgpKTsKLX0KLQogdm9pZCBCYWNraW5nU3RvcmVQcml2YXRl
OjpyZW5kZXJDb250ZW50cyhQbGF0Zm9ybTo6R3JhcGhpY3M6OkRyYXdhYmxlKiBkcmF3YWJsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGxhdGZvcm06
OkludFJlY3QmIGNvbnRlbnRzUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlc3RpbmF0aW9uU2l6ZSkgY29uc3QK
QEAgLTIzMjQsMTAgKzIyMTIsMTAgQEAgc3RhdGljIHZvaWQgZHJhd0RlYnVnUmVjdChCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogZHN0QnVmZmVyLCBjb24KICNlbmRpZgog
CiB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRUb1dpbmRvdyhjb25zdCBQbGF0Zm9ybTo6
SW50UmVjdCYgZHN0UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBzcmNCdWZmZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6
SW50UmVjdCYgc3JjUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgYmxlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGdsb2JhbEFscGhhKQorICAgIGNvbnN0IFBsYXRmb3JtOjpHcmFwaGljczo6QnVm
ZmVyKiBzcmNCdWZmZXIsCisgICAgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHNyY1JlY3QsCisg
ICAgUGxhdGZvcm06OkdyYXBoaWNzOjpCbGVuZE1vZGUgYmxlbmRNb2RlLAorICAgIHVuc2lnbmVk
IGNoYXIgZ2xvYmFsQWxwaGEpCiB7CiAgICAgQVNTRVJUKEJsYWNrQmVycnk6OlBsYXRmb3JtOjp1
c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CiAK
QEAgLTIzNDIsMTAgKzIyMzAsNiBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRUb1dp
bmRvdyhjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgZHN0UmVjdCwKICAgICAgICAgICAgICJFbXB0
eSB3aW5kb3cgYnVmZmVyLCBjb3VsZG4ndCBibGl0VG9XaW5kb3ciKTsKICAgICB9CiAKLSAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJsZW5kTW9kZSBibGVuZE1vZGUgPSBibGVu
ZAotICAgICAgICA/IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlT3Zlcgot
ICAgICAgICA6IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlQ29weTsKLQog
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6YmxpdFRvQnVmZmVyKGRzdEJ1ZmZl
ciwgZHN0UmVjdCwgc3JjQnVmZmVyLCBzcmNSZWN0LCBibGVuZE1vZGUsIGdsb2JhbEFscGhhKTsK
IAogI2lmIERFQlVHX0ZBVF9GSU5HRVJTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0JhY2tpbmdTdG9yZV9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L0JhY2tpbmdTdG9yZV9wLmgKaW5kZXggZmViYzUxNWM0OTY3ZGNjY2E3NTU0OTVjZDc0MzhiODM3
OTY1NzI5OS4uOTE1NGEyMzQ0NTk5MzEzNTRjZGUyODUzMjg4MTIzNmNlYzViODlhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmVfcC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlX3AuaApAQCAtMjE0LDgg
KzIxNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50RGVmYXVsdEJhY2tncm91bmQoY29uc3Qg
UGxhdGZvcm06OkludFJlY3QmIGRzdFJlY3QsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpWaWV3cG9y
dEFjY2Vzc29yKiwgYm9vbCBmbHVzaCk7CiAgICAgdm9pZCBibGl0T25JZGxlKCk7CiAKLSAgICB0
eXBlZGVmIHN0ZDo6cGFpcjxUaWxlSW5kZXgsIFBsYXRmb3JtOjpJbnRSZWN0PiBUaWxlUmVjdDsK
LSAgICBQbGF0Zm9ybTo6SW50UmVjdCBibGl0VGlsZVJlY3QoVGlsZUJ1ZmZlciosIGNvbnN0IFRp
bGVSZWN0JiwgY29uc3QgUGxhdGZvcm06OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBCYWNraW5nU3RvcmVHZW9tZXRyeSopOworICAgIFBsYXRmb3JtOjpJ
bnRSZWN0IGJsaXRUaWxlUmVjdChUaWxlQnVmZmVyKiwgY29uc3QgUGxhdGZvcm06OkludFJlY3Qm
LCBjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIEJhY2tpbmdTdG9yZUdlb21ldHJ5Kik7CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgLy8gVXNlIGluc3RlYWQgb2YgYmxpdFZpc2libGVDb250ZW50cygp
IGlmIHlvdSBuZWVkIG1vcmUgY29udHJvbCBvdmVyCkBAIC0yMzgsMTEgKzIzNywxMSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBibGl0VmVydGljYWxTY3JvbGxiYXIoKTsKIAogICAgIC8vIFJldHVybnMg
d2hldGhlciB0aGUgdGlsZSBpbmRleCBpcyBjdXJyZW50bHkgdmlzaWJsZSBvciBub3QuCi0gICAg
Ym9vbCBpc1RpbGVWaXNpYmxlKGNvbnN0IFRpbGVJbmRleCYpIGNvbnN0OworICAgIGJvb2wgaXNU
aWxlVmlzaWJsZShjb25zdCBUaWxlSW5kZXgmLCBCYWNraW5nU3RvcmVHZW9tZXRyeSopIGNvbnN0
OwogICAgIGJvb2wgaXNUaWxlVmlzaWJsZShjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmKSBjb25z
dDsKIAogICAgIC8vIFJldHVybnMgYSByZWN0IHRoYXQgaXMgdGhlIHVuaW9uIG9mIGFsbCB0aWxl
cyB0aGF0IGFyZSB2aXNpYmxlLgotICAgIFBsYXRmb3JtOjpJbnRSZWN0IHZpc2libGVUaWxlc1Jl
Y3QoKSBjb25zdDsKKyAgICBQbGF0Zm9ybTo6SW50UmVjdCB2aXNpYmxlVGlsZXNSZWN0KEJhY2tp
bmdTdG9yZUdlb21ldHJ5KikgY29uc3Q7CiAKICAgICAvLyBVc2VkIHRvIGNsaXAgdG8gdGhlIHZp
c2libGUgY29udGVudCBmb3IgaW5zdGFuY2UuCiAgICAgUGxhdGZvcm06OkludFJlY3QgdGlsZVZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgVGlsZUluZGV4JiwgQmFja2luZ1N0b3JlR2VvbWV0cnkq
KSBjb25zdDsKQEAgLTI2NywxMyArMjY2LDkgQEAgcHVibGljOgogICAgIC8vIFVwZGF0ZSBhbiBp
bmRpdmlkdWFsIHRpbGUuCiAgICAgdm9pZCB1cGRhdGVUaWxlKGNvbnN0IFBsYXRmb3JtOjpJbnRQ
b2ludCYgdGlsZU9yaWdpbiwgYm9vbCBpbW1lZGlhdGUpOwogCi0gICAgUGxhdGZvcm06OkludFJl
Y3QgbWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRlbnRzKGNvbnN0IFRpbGVSZWN0JikgY29u
c3Q7Ci0gICAgUGxhdGZvcm06OkludFJlY3QgbWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRl
bnRzKGNvbnN0IFRpbGVSZWN0JiwgQmFja2luZ1N0b3JlR2VvbWV0cnkqKSBjb25zdDsKLQorICAg
IHR5cGVkZWYgc3RkOjpwYWlyPFRpbGVJbmRleCwgUGxhdGZvcm06OkludFJlY3Q+IFRpbGVSZWN0
OwogICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8VGlsZVJlY3Q+IFRpbGVSZWN0TGlzdDsKLSAgICBU
aWxlUmVjdExpc3QgbWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb0Fic29sdXRlVGlsZUJvdW5k
YXJpZXMoY29uc3QgUGxhdGZvcm06OkludFJlY3QmKSBjb25zdDsKLSAgICBUaWxlUmVjdExpc3Qg
bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb1RpbGVzKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0
JikgY29uc3Q7Ci0gICAgVGlsZVJlY3RMaXN0IG1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRzVG9U
aWxlcyhjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYsIEJhY2tpbmdTdG9yZUdlb21ldHJ5KikgY29u
c3Q7CisgICAgVGlsZVJlY3RMaXN0IG1hcEZyb21QaXhlbENvbnRlbnRzVG9UaWxlcyhjb25zdCBQ
bGF0Zm9ybTo6SW50UmVjdCYsIEJhY2tpbmdTdG9yZUdlb21ldHJ5KikgY29uc3Q7CiAKICAgICB2
b2lkIHNldFRpbGVNYXRyaXhOZWVkc1VwZGF0ZSgpIHsgbV90aWxlTWF0cml4TmVlZHNVcGRhdGUg
PSB0cnVlOyB9CiAgICAgdm9pZCB1cGRhdGVUaWxlTWF0cml4SWZOZWVkZWQoKTsKQEAgLTMwOSwx
MyArMzA0LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW50IHRpbGVXaWR0aCgpOwogICAgIHN0
YXRpYyBpbnQgdGlsZUhlaWdodCgpOwogICAgIHN0YXRpYyBQbGF0Zm9ybTo6SW50U2l6ZSB0aWxl
U2l6ZSgpOwotICAgIHN0YXRpYyBQbGF0Zm9ybTo6SW50UmVjdCB0aWxlUmVjdCgpOwogCiAgICAg
Ly8gVGhpcyB0YWtlcyB0cmFuc2Zvcm1lZCBjb250ZW50cyBjb29yZGluYXRlcy4KICAgICB2b2lk
IHJlbmRlckNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiwg
Y29uc3QgUGxhdGZvcm06OkludFBvaW50JiBzdXJmYWNlT2Zmc2V0LCBjb25zdCBQbGF0Zm9ybTo6
SW50UmVjdCYgY29udGVudHNSZWN0KSBjb25zdDsKICAgICB2b2lkIHJlbmRlckNvbnRlbnRzKFBs
YXRmb3JtOjpHcmFwaGljczo6RHJhd2FibGUqIC8qZHJhd2FibGUqLywgY29uc3QgUGxhdGZvcm06
OkludFJlY3QmIC8qY29udGVudHNSZWN0Ki8sIGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiAvKmRl
c3RpbmF0aW9uU2l6ZSovKSBjb25zdDsKIAotICAgIHZvaWQgYmxpdFRvV2luZG93KGNvbnN0IFBs
YXRmb3JtOjpJbnRSZWN0JiBkc3RSZWN0LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OkJ1ZmZlciogc3JjQnVmZmVyLCBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgc3JjUmVj
dCwgYm9vbCBibGVuZCwgdW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSk7CisgICAgdm9pZCBibGl0
VG9XaW5kb3coY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGRzdFJlY3QsIGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBzcmNCdWZmZXIsIGNvbnN0IFBsYXRmb3Jt
OjpJbnRSZWN0JiBzcmNSZWN0LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJsZW5k
TW9kZSwgdW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSk7CiAgICAgdm9pZCBmaWxsV2luZG93KFBs
YXRmb3JtOjpHcmFwaGljczo6RmlsbFBhdHRlcm4sIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBk
c3RSZWN0LCBjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIGNvbnRlbnRzT3JpZ2luLCBkb3VibGUg
Y29udGVudHNTY2FsZSk7CiAKICAgICBXZWJDb3JlOjpDb2xvciB3ZWJQYWdlQmFja2dyb3VuZENv
bG9yVXNlckludGVyZmFjZVRocmVhZCgpIGNvbnN0OyAvLyB1c2UgV2ViU2V0dGluZ3M6OmJhY2tn
cm91bmRDb2xvcigpIGZvciB0aGUgV2ViS2l0IHRocmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVUaWxlLmNwcApp
bmRleCA2MDRhZGJjZTUxNThlMzIzZTBiMTdlZWM4YzBmOTNlMDE5Y2VjZmM0Li5kMWFmNzgyOTlh
MjBmMzRjOWVlMDAzODMzMDZhNmVjNjI4NTMzNWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVUaWxlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVUaWxlLmNwcApA
QCAtNTMsMTkgKzUzLDI0IEBAIFBsYXRmb3JtOjpJbnRTaXplIFRpbGVCdWZmZXI6OnNpemUoKSBj
b25zdAogICAgIHJldHVybiBtX3NpemU7CiB9CiAKLVBsYXRmb3JtOjpJbnRSZWN0IFRpbGVCdWZm
ZXI6OnJlY3QoKSBjb25zdAorUGxhdGZvcm06OkludFJlY3QgVGlsZUJ1ZmZlcjo6c3VyZmFjZVJl
Y3QoKSBjb25zdAogewogICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdChQbGF0Zm9ybTo6SW50
UG9pbnQ6Onplcm8oKSwgbV9zaXplKTsKIH0KIAorUGxhdGZvcm06OkludFJlY3QgVGlsZUJ1ZmZl
cjo6cGl4ZWxDb250ZW50c1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBQbGF0Zm9ybTo6SW50
UmVjdChtX2xhc3RSZW5kZXJPcmlnaW4sIG1fc2l6ZSk7Cit9CisKIGJvb2wgVGlsZUJ1ZmZlcjo6
aXNSZW5kZXJlZChkb3VibGUgc2NhbGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzUmVuZGVyZWQo
cmVjdCgpLCBzY2FsZSk7CisgICAgcmV0dXJuIGlzUmVuZGVyZWQocGl4ZWxDb250ZW50c1JlY3Qo
KSwgc2NhbGUpOwogfQogCi1ib29sIFRpbGVCdWZmZXI6OmlzUmVuZGVyZWQoY29uc3QgUGxhdGZv
cm06OkludFJlY3RSZWdpb24mIGNvbnRlbnRzLCBkb3VibGUgc2NhbGUpIGNvbnN0Citib29sIFRp
bGVCdWZmZXI6OmlzUmVuZGVyZWQoY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mIHBpeGVs
Q29udGVudHNSZWdpb24sIGRvdWJsZSBzY2FsZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9sYXN0
UmVuZGVyU2NhbGUgPT0gc2NhbGUgJiYgUGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRyYWN0
UmVnaW9ucyhjb250ZW50cywgbV9yZW5kZXJlZFJlZ2lvbikuaXNFbXB0eSgpOworICAgIHJldHVy
biBtX2xhc3RSZW5kZXJTY2FsZSA9PSBzY2FsZSAmJiBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6
c3VidHJhY3RSZWdpb25zKHBpeGVsQ29udGVudHNSZWdpb24sIG1fcmVuZGVyZWRSZWdpb24pLmlz
RW1wdHkoKTsKIH0KIAogdm9pZCBUaWxlQnVmZmVyOjpjbGVhclJlbmRlcmVkUmVnaW9uKGNvbnN0
IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZWdpb24pCkBAIC05MCw3ICs5NSw3IEBAIFBsYXRm
b3JtOjpJbnRSZWN0UmVnaW9uIFRpbGVCdWZmZXI6OnJlbmRlcmVkUmVnaW9uKCkgY29uc3QKIAog
UGxhdGZvcm06OkludFJlY3RSZWdpb24gVGlsZUJ1ZmZlcjo6bm90UmVuZGVyZWRSZWdpb24oKSBj
b25zdAogewotICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RSZWdp
b25zKHJlY3QoKSwgcmVuZGVyZWRSZWdpb24oKSk7CisgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRS
ZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMocGl4ZWxDb250ZW50c1JlY3QoKSwgbV9yZW5kZXJl
ZFJlZ2lvbik7CiB9CiAKIFBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBUaWxlQnVmZmVyOjpu
YXRpdmVCdWZmZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5oIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5oCmluZGV4IDYyNTA1Yjc5ZWI4OWEx
NmY4OTBlYWFkM2M1MGEwZGFkOGY4YjBiNzcuLjIwZGQ0YjgzMWY0ZmY4ZjQ4YTcwYzFiZDJmMzQ3
MTMwOTE4NmMzYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVUaWxlLmgKQEAgLTcyLDcgKzcyLDggQEAgY2xhc3Mg
VGlsZUJ1ZmZlciB7CiAgICAgICAgIFRpbGVCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFNpemUm
KTsKICAgICAgICAgflRpbGVCdWZmZXIoKTsKICAgICAgICAgUGxhdGZvcm06OkludFNpemUgc2l6
ZSgpIGNvbnN0OwotICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByZWN0KCkgY29uc3Q7CisgICAg
ICAgIFBsYXRmb3JtOjpJbnRSZWN0IHN1cmZhY2VSZWN0KCkgY29uc3Q7CisgICAgICAgIFBsYXRm
b3JtOjpJbnRSZWN0IHBpeGVsQ29udGVudHNSZWN0KCkgY29uc3Q7CiAKICAgICAgICAgUGxhdGZv
cm06OkludFBvaW50IGxhc3RSZW5kZXJPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2xhc3RSZW5k
ZXJPcmlnaW47IH0KICAgICAgICAgdm9pZCBzZXRMYXN0UmVuZGVyT3JpZ2luKGNvbnN0IFBsYXRm
b3JtOjpJbnRQb2ludCYgb3JpZ2luKSB7IG1fbGFzdFJlbmRlck9yaWdpbiA9IG9yaWdpbjsgfQpA
QCAtODAsNyArODEsNyBAQCBjbGFzcyBUaWxlQnVmZmVyIHsKICAgICAgICAgdm9pZCBzZXRMYXN0
UmVuZGVyU2NhbGUoZG91YmxlIHNjYWxlKSB7IG1fbGFzdFJlbmRlclNjYWxlID0gc2NhbGU7IH0K
IAogICAgICAgICBib29sIGlzUmVuZGVyZWQoZG91YmxlIHNjYWxlKSBjb25zdDsKLSAgICAgICAg
Ym9vbCBpc1JlbmRlcmVkKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiBjb250ZW50cywg
ZG91YmxlIHNjYWxlKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1JlbmRlcmVkKGNvbnN0IFBsYXRm
b3JtOjpJbnRSZWN0UmVnaW9uJiBwaXhlbENvbnRlbnRzUmVnaW9uLCBkb3VibGUgc2NhbGUpIGNv
bnN0OwogICAgICAgICB2b2lkIGNsZWFyUmVuZGVyZWRSZWdpb24oKTsKICAgICAgICAgdm9pZCBj
bGVhclJlbmRlcmVkUmVnaW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJik7CiAgICAg
ICAgIHZvaWQgYWRkUmVuZGVyZWRSZWdpb24oY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24m
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177366</attachid>
            <date>2012-12-03 16:16:29 -0800</date>
            <delta_ts>2012-12-04 05:06:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103930-20121203191345.patch</filename>
            <type>text/plain</type>
            <size>41094</size>
            <attacher name="Jakob Petsovits">jpetsovits</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Mzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpp
bmRleCAxN2RkN2QyOGY0MzIwNmI1OWFmYzJiZjJlMTVlMDMwZmQxMThmMzcxLi5iMDk1YTk3OTE0
N2ZkYTE0YjcyODQ0ZmQ2YzRjZGZhMDFhNmZjZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMi0xMi0wNCAgSmFrb2IgUGV0c292aXRzICA8anBl
dHNvdml0c0ByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBTdG9yZSByZW5kZXJlZCBy
ZWdpb25zIGluIHBpeGVsIGNvbnRlbnRzIGNvb3JkaW5hdGVzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTMwCisgICAgICAgIFBSIDI1MzQ5Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IFJvYiBCdWlzLgorICAgICAgICBJbnRlcm5hbGx5IHJldmll
d2VkIGJ5IEFkYW0gVHJlYXQuCisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIHJlbmRlcmVkIHJl
Z2lvbiBvZiBhIHRpbGUgdXNlZCB0byBiZQorICAgICAgICBzdG9yZWQgaW4gY29vcmRpbmF0ZXMg
cmVsYXRpdmUgdG8gdGhlIHRpbGUgb3JpZ2luLgorICAgICAgICBUaGlzIGJyaW5ncyBubyBiZW5l
Zml0cyB3aGF0c29ldmVyIGFuZCBjYXVzZXMgYSBsb3QKKyAgICAgICAgb2YgdW5uZWNlc3Nhcnkg
dHJhbnNmb3JtYXRpb25zLCB0b2dldGhlciB3aXRoIHRoZQorICAgICAgICBwb3RlbnRpYWwgb2Yg
aW5jb3JyZWN0bHkgdHJhbnNmb3JtaW5nIHJlbmRlcmVkIHJlZ2lvbnMuCisKKyAgICAgICAgQnkg
c3RvcmluZyB0aGUgcmVuZGVyZWQgcmVnaW9uIGFzIHdoYXQgaXQgaXMsCisgICAgICAgIGV2ZXJ5
dGhpbmcgaXMgbW9yZSBjb21wYWN0LCBlYXNpZXIgdG8gdW5kZXJzdGFuZAorICAgICAgICBhbmQg
ZWFzaWVyIHRvIHVzZSB3aXRoIG90aGVyIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAg
ICAgKiBBcGkvQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
QmFja2luZ1N0b3JlUHJpdmF0ZTo6Y2xlYXJBbmRVcGRhdGVUaWxlT2ZOb3RSZW5kZXJlZFJlZ2lv
bik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6Omlz
Q3VycmVudFZpc2libGVKb2IpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5n
U3RvcmVQcml2YXRlOjpyZW5kZXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNr
aW5nU3RvcmVQcml2YXRlOjpyZW5kZXJWaXNpYmxlQ29udGVudHMpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpjb3B5UHJldmlvdXNDb250ZW50c1Rv
VGlsZUJ1ZmZlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVBy
aXZhdGU6OmJsaXRWaXNpYmxlQ29udGVudHMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpCYWNraW5nU3RvcmVQcml2YXRlOjpjb21wb3NpdGVDb250ZW50cyk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRUaWxlUmVjdCk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OmlzVGlsZVZpc2li
bGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp2
aXNpYmxlVGlsZXNSZWN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0
b3JlUHJpdmF0ZTo6dGlsZVZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp0aWxlQ29udGVudHNSZWN0KToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXMp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRh
dGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24pOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjptYXBGcm9tUGl4ZWxDb250ZW50c1RvVGls
ZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp0
cmFuc2Zvcm1DaGFuZ2VkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0
b3JlUHJpdmF0ZTo6YmxpdFRvV2luZG93KToKKyAgICAgICAgKiBBcGkvQmFja2luZ1N0b3JlX3Au
aDoKKyAgICAgICAgKEJhY2tpbmdTdG9yZVByaXZhdGUpOgorICAgICAgICAqIFdlYktpdFN1cHBv
cnQvQmFja2luZ1N0b3JlVGlsZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRp
bGVCdWZmZXI6OnN1cmZhY2VSZWN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VGls
ZUJ1ZmZlcjo6cGl4ZWxDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6VGlsZUJ1ZmZlcjo6aXNSZW5kZXJlZCk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OlRpbGVCdWZmZXI6Om5vdFJlbmRlcmVkUmVnaW9uKToKKyAgICAg
ICAgKiBXZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZVRpbGUuaDoKKyAgICAgICAgKFRpbGVCdWZm
ZXIpOgorCiAyMDEyLTEyLTAzICBKYWtvYiBQZXRzb3ZpdHMgIDxqcGV0c292aXRzQHJpbS5jb20+
CiAKICAgICAgICAgW0JsYWNrQmVycnldIFJlZmFjdG9yIHRoZSBiYWNraW5nc3RvcmUgdG8gc3dh
cCBmdWxsIGdlb21ldHJpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tp
bmdTdG9yZS5jcHAKaW5kZXggOWNhYzI5MGNkMmRiMTgxMTQ3ZDU4MDJmZGVmMDcwZjY4M2E2YTcy
YS4uOGY4YzNiOGMxZTdlZDE5MmI2YTJiNGU4ZGU4MDJkOGZmYjhiY2U2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAtOTAyLDE1ICs5MDIs
OCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmNsZWFyQW5kVXBkYXRlVGlsZU9mTm90UmVu
ZGVyZWRSZWdpb24oY29uc3QgVGlsZUluZGV4JgogICAgIGlmICghdGlsZUJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgLy8gRmluZCB0aGUgb3JpZ2luIG9mIHRoaXMgdGlsZS4KLSAgICBQ
bGF0Zm9ybTo6SW50UG9pbnQgb3JpZ2luID0gZ2VvbWV0cnktPm9yaWdpbk9mVGlsZShpbmRleCk7
Ci0KLSAgICAvLyBNYXAgdG8gdGlsZSBjb29yZGluYXRlcy4KLSAgICBQbGF0Zm9ybTo6SW50UmVj
dFJlZ2lvbiB0cmFuc2xhdGVkUmVnaW9uKHRpbGVOb3RSZW5kZXJlZFJlZ2lvbik7Ci0gICAgdHJh
bnNsYXRlZFJlZ2lvbi5tb3ZlKC1vcmlnaW4ueCgpLCAtb3JpZ2luLnkoKSk7Ci0KICAgICAvLyBJ
ZiB0aGUgcmVnaW9uIGluIHF1ZXN0aW9uIGlzIGFscmVhZHkgbWFya2VkIGFzIG5vdCByZW5kZXJl
ZCwgcmV0dXJuIGVhcmx5Ci0gICAgaWYgKFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjppbnRlcnNl
Y3RSZWdpb25zKHRpbGVCdWZmZXItPnJlbmRlcmVkUmVnaW9uKCksIHRyYW5zbGF0ZWRSZWdpb24p
LmlzRW1wdHkoKSkKKyAgICBpZiAoUGxhdGZvcm06OkludFJlY3RSZWdpb246OmludGVyc2VjdFJl
Z2lvbnModGlsZUJ1ZmZlci0+cmVuZGVyZWRSZWdpb24oKSwgdGlsZU5vdFJlbmRlcmVkUmVnaW9u
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENsZWFyIHRoZSB0aWxlIG9m
IHRoaXMgcmVnaW9uLiBUaGUgYmFjayBidWZmZXIgcmVnaW9uIGlzIGludmFsaWQgYW55d2F5LCBi
dXQgdGhlIGZyb250CkBAIC05MjcsNyArOTIwLDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRl
OjpjbGVhckFuZFVwZGF0ZVRpbGVPZk5vdFJlbmRlcmVkUmVnaW9uKGNvbnN0IFRpbGVJbmRleCYK
IAogICAgIFBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5kaXNw
YXRjaFN5bmNNZXNzYWdlKAogICAgICAgICBQbGF0Zm9ybTo6Y3JlYXRlTWV0aG9kQ2FsbE1lc3Nh
Z2UoJkJhY2tpbmdTdG9yZVByaXZhdGU6OmNsZWFyUmVuZGVyZWRSZWdpb24sCi0gICAgICAgICAg
ICB0aGlzLCB0aWxlQnVmZmVyLCB0cmFuc2xhdGVkUmVnaW9uKSk7CisgICAgICAgICAgICB0aGlz
LCB0aWxlQnVmZmVyLCB0aWxlTm90UmVuZGVyZWRSZWdpb24pKTsKIH0KIAogdm9pZCBCYWNraW5n
U3RvcmVQcml2YXRlOjpjbGVhclJlbmRlcmVkUmVnaW9uKFRpbGVCdWZmZXIqIHRpbGVCdWZmZXIs
IGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZWdpb24pCkBAIC05NTYsMTUgKzk0OSw5
IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6aXNDdXJyZW50VmlzaWJsZUpvYihjb25zdCBU
aWxlSW5kZXgmIGluZGV4LCBUaWxlQnVmZmVyCiAgICAgSW50UmVjdExpc3QgdGlsZU5vdFJlbmRl
cmVkUmVnaW9uUmVjdHMgPSB0aWxlQnVmZmVyLT5ub3RSZW5kZXJlZFJlZ2lvbigpLnJlY3RzKCk7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVOb3RSZW5kZXJlZFJlZ2lvblJlY3Rz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRpbGVOb3RSZW5kZXJl
ZFJlZ2lvblJlY3QgPSB0aWxlTm90UmVuZGVyZWRSZWdpb25SZWN0cy5hdChpKTsKLQotICAgICAg
ICAvLyBNYXAgdG8gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCi0gICAgICAgIHRp
bGVOb3RSZW5kZXJlZFJlZ2lvblJlY3QubW92ZSh0aWxlT3JpZ2luLngoKSwgdGlsZU9yaWdpbi55
KCkpOwotCi0gICAgICAgIGlmICghbV9yZW5kZXJRdWV1ZS0+aXNDdXJyZW50UmVndWxhclJlbmRl
ckpvYih0aWxlTm90UmVuZGVyZWRSZWdpb25SZWN0KSkKKyAgICAgICAgaWYgKCFtX3JlbmRlclF1
ZXVlLT5pc0N1cnJlbnRSZWd1bGFyUmVuZGVySm9iKHRpbGVOb3RSZW5kZXJlZFJlZ2lvblJlY3Rz
LmF0KGkpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTA2MywxMCArMTA1MCw2IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6cmVuZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQogICAgIC8vIHRpbGUgbWF0
cml4IHVwZGF0aW5nIHdpdGggYmFja2luZ3N0b3JlIHVwZGF0ZXMKICAgICB1cGRhdGVUaWxlTWF0
cml4SWZOZWVkZWQoKTsKIAotICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBtYXBGcm9t
VHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXMocmVjdCk7Ci0gICAgaWYgKHRpbGVSZWN0TGlzdC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogI2lmIERFQlVHX0JBQ0tJTkdTVE9S
RQogICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbENyaXRpY2FsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIkJhY2tpbmdTdG9yZVByaXZhdGU6OnJlbmRlciByZWN0
PSglZCwlZCAlZHglZCksIG1fc3VzcGVuZEJhY2tpbmdTdG9yZVVwZGF0ZXMgPSAlcyIsCkBAIC0x
MDc4LDYgKzEwNjEsMTAgQEAgYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIoY29uc3Qg
UGxhdGZvcm06OkludFJlY3QmIHJlY3QpCiAgICAgVGlsZU1hcCBvbGRUaWxlTWFwID0gY3VycmVu
dFN0YXRlLT50aWxlTWFwKCk7CiAgICAgZG91YmxlIGN1cnJlbnRTY2FsZSA9IGN1cnJlbnRTdGF0
ZS0+c2NhbGUoKTsKIAorICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBtYXBGcm9tUGl4
ZWxDb250ZW50c1RvVGlsZXMocmVjdCwgY3VycmVudFN0YXRlKTsKKyAgICBpZiAodGlsZVJlY3RM
aXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgQmFja2luZ1N0b3Jl
R2VvbWV0cnkqIG5ld0dlb21ldHJ5ID0gbmV3IEJhY2tpbmdTdG9yZUdlb21ldHJ5OwogICAgIG5l
d0dlb21ldHJ5LT5zZXRTY2FsZShjdXJyZW50U3RhdGUtPnNjYWxlKCkpOwogICAgIG5ld0dlb21l
dHJ5LT5zZXROdW1iZXJPZlRpbGVzV2lkZShjdXJyZW50U3RhdGUtPm51bWJlck9mVGlsZXNXaWRl
KCkpOwpAQCAtMTA4OCwxMyArMTA3NSw5IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVu
ZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdGlsZVJlY3RMaXN0LnNpemUoKTsgKytpKSB7CiAgICAgICAgIFRpbGVSZWN0IHRpbGVS
ZWN0ID0gdGlsZVJlY3RMaXN0W2ldOwogICAgICAgICBUaWxlSW5kZXggaW5kZXggPSB0aWxlUmVj
dC5maXJzdDsKLSAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlUaWxlUmVjdCA9IHRpbGVS
ZWN0LnNlY29uZDsKKyAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlSZWN0ID0gdGlsZVJl
Y3Quc2Vjb25kOwogICAgICAgICBUaWxlQnVmZmVyKiBmcm9udEJ1ZmZlciA9IG9sZFRpbGVNYXAu
Z2V0KGluZGV4KTsKIAotICAgICAgICAvLyBUaGlzIGRpcnR5IHRpbGUgcmVjdCBpcyBpbiB0aWxl
IGNvb3JkaW5hdGVzLCBidXQgaXQgbmVlZHMgdG8gYmUgaW4KLSAgICAgICAgLy8gdHJhbnNmb3Jt
ZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCi0gICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5
UmVjdCA9IG1hcEZyb21UaWxlc1RvVHJhbnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCk7Ci0KICAg
ICAgICAgaWYgKCFTdXJmYWNlUG9vbDo6Z2xvYmFsU3VyZmFjZVBvb2woKS0+aGFzQmFja0J1ZmZl
cigpKSB7CiAgICAgICAgICAgICBuZXdHZW9tZXRyeS0+c2V0VGlsZU1hcChuZXdUaWxlTWFwKTsK
ICAgICAgICAgICAgIGFkb3B0QXNGcm9udFN0YXRlKG5ld0dlb21ldHJ5KTsgLy8gdGhpcyBzaG91
bGQgZ2V0IHVzIGF0IGxlYXN0IG9uZSBtb3JlLgpAQCAtMTExNSw4ICsxMDk4LDYgQEAgYm9vbCBC
YWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3Qp
CiAgICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2Ugc2hvdWxkIGNsaXAgdGhlIGNvbnRlbnRzIHNp
emUgYW5kIHJlbmRlciB0aGUgY29udGVudC4KICAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNl
Y3QoZXhwYW5kZWRDb250ZW50c1JlY3QoKSk7CiAKLSAgICAgICAgICAgIGRpcnR5VGlsZVJlY3Qu
aW50ZXJzZWN0KHRpbGVDb250ZW50c1JlY3QoaW5kZXgsIGV4cGFuZGVkQ29udGVudHNSZWN0KCks
IGN1cnJlbnRTdGF0ZSkpOwotCiAgICAgICAgICAgICAvLyBXZSBwcm9iYWJseSBoYXZlIGV4dHJh
IHRpbGVzIHNpbmNlIHRoZSBjb250ZW50cyBzaXplIGlzIHNvIHNtYWxsLgogICAgICAgICAgICAg
Ly8gU2F2ZSBzb21lIGN5Y2xlcyBoZXJlLi4uCiAgICAgICAgICAgICBpZiAoZGlydHlSZWN0Lmlz
RW1wdHkoKSkKQEAgLTExMzIsNyArMTExMywxMCBAQCBib29sIEJhY2tpbmdTdG9yZVByaXZhdGU6
OnJlbmRlcihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkKICAgICAgICAgaWYgKCFiYWNr
QnVmZmVyLT5iYWNrZ3JvdW5kUGFpbnRlZCgpKQogICAgICAgICAgICAgYmFja0J1ZmZlci0+cGFp
bnRCYWNrZ3JvdW5kKCk7CiAKKyAgICAgICAgUGxhdGZvcm06OkludFBvaW50IHRpbGVPcmlnaW4g
PSBjdXJyZW50U3RhdGUtPm9yaWdpbk9mVGlsZShpbmRleCk7CiAgICAgICAgIGJhY2tCdWZmZXIt
PnNldExhc3RSZW5kZXJTY2FsZShjdXJyZW50U2NhbGUpOworICAgICAgICBiYWNrQnVmZmVyLT5z
ZXRMYXN0UmVuZGVyT3JpZ2luKHRpbGVPcmlnaW4pOworICAgICAgICBiYWNrQnVmZmVyLT5jbGVh
clJlbmRlcmVkUmVnaW9uKCk7CiAKICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpCdWZmZXIqIG5hdGl2ZUJ1ZmZlciA9IGJhY2tCdWZmZXItPm5hdGl2ZUJ1ZmZlcigpOwog
CkBAIC0xMTQzLDIwICsxMTI3LDE2IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVuZGVy
KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQogICAgICAgICAgICAgU3VyZmFjZVBvb2w6
Omdsb2JhbFN1cmZhY2VQb29sKCktPndhaXRGb3JCdWZmZXIoYmFja0J1ZmZlcik7CiAKICAgICAg
ICAgLy8gTW9kaWZ5IHRoZSBidWZmZXIgb25seSBhZnRlciB3ZSd2ZSB3YWl0ZWQgZm9yIGl0IHRv
IGJlY29tZSBhdmFpbGFibGUgYWJvdmUuCi0gICAgICAgIFBsYXRmb3JtOjpJbnRQb2ludCB0aWxl
T3JpZ2luID0gY3VycmVudFN0YXRlLT5vcmlnaW5PZlRpbGUoaW5kZXgpOwogICAgICAgICBib29s
IGZyb250QnVmZmVySGFzVXNhYmxlQ29udGVudHMgPSBjdXJyZW50U3RhdGUtPmlzVGlsZUNvcnJl
c3BvbmRpbmdUb0J1ZmZlcihpbmRleCwgZnJvbnRCdWZmZXIpOwogICAgICAgICBpZiAoZnJvbnRC
dWZmZXJIYXNVc2FibGVDb250ZW50cykKLSAgICAgICAgICAgIGNvcHlQcmV2aW91c0NvbnRlbnRz
VG9UaWxlQnVmZmVyKGRpcnR5VGlsZVJlY3QsIGJhY2tCdWZmZXIsIGZyb250QnVmZmVyKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYmFja0J1ZmZlci0+Y2xlYXJSZW5kZXJlZFJlZ2lvbigp
OworICAgICAgICAgICAgY29weVByZXZpb3VzQ29udGVudHNUb1RpbGVCdWZmZXIoZGlydHlSZWN0
LCBiYWNrQnVmZmVyLCBmcm9udEJ1ZmZlcik7CiAKICAgICAgICAgLy8gRklYTUU6IG1vZGlmeSBy
ZW5kZXIgdG8gdGFrZSBhIFZlY3RvcjxJbnRSZWN0PiBwYXJhbWV0ZXIgc28gd2UncmUgbm90IHJl
Y3JlYXRpbmcKICAgICAgICAgLy8gR3JhcGhpY3NDb250ZXh0IG9uIHRoZSBzdGFjayBlYWNoIHRp
bWUuCiAgICAgICAgIHJlbmRlckNvbnRlbnRzKG5hdGl2ZUJ1ZmZlciwgdGlsZU9yaWdpbiwgZGly
dHlSZWN0KTsKIAogICAgICAgICAvLyBBZGQgdGhlIG5ld2x5IHJlbmRlcmVkIHJlZ2lvbiB0byB0
aGUgdGlsZSBzbyBpdCBjYW4ga2VlcCB0cmFjayBmb3IgYmxpdHMuCi0gICAgICAgIGJhY2tCdWZm
ZXItPmFkZFJlbmRlcmVkUmVnaW9uKGRpcnR5VGlsZVJlY3QpOwotICAgICAgICBiYWNrQnVmZmVy
LT5zZXRMYXN0UmVuZGVyT3JpZ2luKHRpbGVPcmlnaW4pOworICAgICAgICBiYWNrQnVmZmVyLT5h
ZGRSZW5kZXJlZFJlZ2lvbihkaXJ0eVJlY3QpOwogCiAgICAgICAgIC8vIFRoYW5rcyB0byB0aGUg
Y29weVByZXZpb3VzQ29udGVudHNUb0JhY2tTdXJmYWNlT2ZUaWxlKCkgY2FsbCBhYm92ZSwgd2Ug
a25vdyB0aGF0CiAgICAgICAgIC8vIHRoZSByZW5kZXJlZCByZWdpb24gb2YgdGhlIGJhY2sgYnVm
ZmVyIGNvbnRhaW5zIHRoZSByZW5kZXJlZCByZWdpb24gb2YgdGhlIGZyb250IGJ1ZmZlci4KQEAg
LTExODEsNyArMTE2MSw3IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVxdWVzdExheW91
dElmTmVlZGVkKCkgY29uc3QKIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVuZGVyVmlzaWJs
ZUNvbnRlbnRzKCkKIHsKICAgICB1cGRhdGVUaWxlTWF0cml4SWZOZWVkZWQoKTsKLSAgICBQbGF0
Zm9ybTo6SW50UmVjdCByZW5kZXJSZWN0ID0gc2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9XaW5kb3co
KSA/IHZpc2libGVDb250ZW50c1JlY3QoKSA6IHZpc2libGVUaWxlc1JlY3QoKTsKKyAgICBQbGF0
Zm9ybTo6SW50UmVjdCByZW5kZXJSZWN0ID0gc2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9XaW5kb3co
KSA/IHZpc2libGVDb250ZW50c1JlY3QoKSA6IHZpc2libGVUaWxlc1JlY3QoZnJvbnRTdGF0ZSgp
KTsKICAgICBpZiAocmVuZGVyKHJlbmRlclJlY3QpKSB7CiAgICAgICAgIG1fcmVuZGVyUXVldWUt
PmNsZWFyKHJlbmRlclJlY3QsIHRydWUgLypjbGVhclJlZ3VsYXJSZW5kZXJKb2JzKi8pOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMDgsMjEgKzExODgsMjEgQEAgdm9pZCBCYWNraW5nU3Rv
cmVQcml2YXRlOjpjb3B5UHJldmlvdXNDb250ZW50c1RvQmFja1N1cmZhY2VPZldpbmRvdygpCiAg
ICAgd2luZG93QmFja0J1ZmZlclN0YXRlKCktPmFkZEJsaXR0ZWRSZWdpb24ocHJldmlvdXNDb250
ZW50c1JlZ2lvbik7CiB9CiAKLXZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6Y29weVByZXZpb3Vz
Q29udGVudHNUb1RpbGVCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGV4Y2x1ZGVSZWN0
LCBUaWxlQnVmZmVyKiBkc3RUaWxlQnVmZmVyLCBUaWxlQnVmZmVyKiBzcmNUaWxlQnVmZmVyKQor
dm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpjb3B5UHJldmlvdXNDb250ZW50c1RvVGlsZUJ1ZmZl
cihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgZXhjbHVkZUNvbnRlbnRzUmVjdCwgVGlsZUJ1ZmZl
ciogZHN0VGlsZUJ1ZmZlciwgVGlsZUJ1ZmZlciogc3JjVGlsZUJ1ZmZlcikKIHsKICAgICBBU1NF
UlQoZHN0VGlsZUJ1ZmZlcik7CiAgICAgQVNTRVJUKHNyY1RpbGVCdWZmZXIpOwogCi0gICAgZHN0
VGlsZUJ1ZmZlci0+Y2xlYXJSZW5kZXJlZFJlZ2lvbigpOwotCiAgICAgUGxhdGZvcm06OkludFJl
Y3RSZWdpb24gcHJldmlvdXNDb250ZW50c1JlZ2lvbgotICAgICAgICA9IFBsYXRmb3JtOjpJbnRS
ZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMoc3JjVGlsZUJ1ZmZlci0+cmVuZGVyZWRSZWdpb24o
KSwgZXhjbHVkZVJlY3QpOworICAgICAgICA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpzdWJ0
cmFjdFJlZ2lvbnMoc3JjVGlsZUJ1ZmZlci0+cmVuZGVyZWRSZWdpb24oKSwgZXhjbHVkZUNvbnRl
bnRzUmVjdCk7CiAKICAgICBJbnRSZWN0TGlzdCBwcmV2aW91c0NvbnRlbnRzUmVjdHMgPSBwcmV2
aW91c0NvbnRlbnRzUmVnaW9uLnJlY3RzKCk7CisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByZXZpb3VzQ29udGVudHNSZWN0cy5zaXplKCk7ICsraSkgewogICAgICAgICBQbGF0Zm9ybTo6
SW50UmVjdCBwcmV2aW91c0NvbnRlbnRzUmVjdCA9IHByZXZpb3VzQ29udGVudHNSZWN0cy5hdChp
KTsKICAgICAgICAgZHN0VGlsZUJ1ZmZlci0+YWRkUmVuZGVyZWRSZWdpb24ocHJldmlvdXNDb250
ZW50c1JlY3QpOwogCisgICAgICAgIHByZXZpb3VzQ29udGVudHNSZWN0Lm1vdmUoLXNyY1RpbGVC
dWZmZXItPmxhc3RSZW5kZXJPcmlnaW4oKS54KCksIC1zcmNUaWxlQnVmZmVyLT5sYXN0UmVuZGVy
T3JpZ2luKCkueSgpKTsKICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpi
bGl0VG9CdWZmZXIoCiAgICAgICAgICAgICBkc3RUaWxlQnVmZmVyLT5uYXRpdmVCdWZmZXIoKSwg
cHJldmlvdXNDb250ZW50c1JlY3QsCiAgICAgICAgICAgICBzcmNUaWxlQnVmZmVyLT5uYXRpdmVC
dWZmZXIoKSwgcHJldmlvdXNDb250ZW50c1JlY3QpOwpAQCAtMTM5Miw0MyArMTM3MiwzMSBAQCB2
b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRWaXNpYmxlQ29udGVudHMoYm9vbCBmb3JjZSkK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIEdldCB0aGUgbGlzdCBvZiB0aWxlIHJlY3RzIHRoYXQg
bWFrZXVwIHRoZSBjb250ZW50LgotICAgICAgICBUaWxlUmVjdExpc3QgdGlsZVJlY3RMaXN0ID0g
bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb1RpbGVzKGNsaXBwZWRUcmFuc2Zvcm1lZFNyY1Jl
Y3QsIGN1cnJlbnRTdGF0ZSk7CisgICAgICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBt
YXBGcm9tUGl4ZWxDb250ZW50c1RvVGlsZXMoY2xpcHBlZFRyYW5zZm9ybWVkU3JjUmVjdCwgY3Vy
cmVudFN0YXRlKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlUmVjdExpc3Qu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFRpbGVSZWN0IHRpbGVSZWN0ID0gdGlsZVJlY3RM
aXN0W2ldOwogICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gdGlsZVJlY3QuZmlyc3Q7Ci0g
ICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVRpbGVSZWN0ID0gdGlsZVJlY3Quc2Vj
b25kOwotICAgICAgICAgICAgVGlsZUJ1ZmZlciogdGlsZUJ1ZmZlciA9IGN1cnJlbnRNYXAuZ2V0
KGluZGV4KTsKLQotICAgICAgICAgICAgLy8gVGhpcyBkaXJ0eSByZWN0IGlzIGluIHRpbGUgY29v
cmRpbmF0ZXMsIGJ1dCBpdCBuZWVkcyB0byBiZSBpbgotICAgICAgICAgICAgLy8gdHJhbnNmb3Jt
ZWQgY29udGVudHMgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBk
aXJ0eVJlY3QgPSBtYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHModGlsZVJlY3QsIGN1
cnJlbnRTdGF0ZSk7CisgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVJlY3QgPSB0
aWxlUmVjdC5zZWNvbmQ7CiAKICAgICAgICAgICAgIC8vIERvbid0IGNsaXAgdG8gY29udGVudHMg
aWYgaXQgaXMgZW1wdHkgc28gd2UgY2FuIHN0aWxsIHBhaW50IGRlZmF1bHQgYmFja2dyb3VuZC4K
ICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRDb250ZW50c1JlY3QuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNob3VsZCBjbGlwIHRoZSBjb250ZW50cyBz
aXplIGFuZCBibGl0LgogICAgICAgICAgICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QodHJhbnNm
b3JtZWRDb250ZW50c1JlY3QpOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgcHJvYmFibHkgaGF2
ZSBleHRyYSB0aWxlcyBzaW5jZSB0aGUgY29udGVudHMgc2l6ZSBpcyBzbyBzbWFsbC4KLSAgICAg
ICAgICAgICAgICAvLyBTYXZlIHNvbWUgY3ljbGVzIGhlcmUuLi4KLSAgICAgICAgICAgICAgICBp
ZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIFNhdmUgc29tZSBjeWNsZXMgaGVyZS4uLgor
ICAgICAgICAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKICAgICAgICAgICAgIC8vIE5vdywgdGhpcyBkaXJ0eSByZWN0IGlzIGluIHRyYW5z
Zm9ybWVkIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZQogICAgICAgICAgICAgLy8gdHJhbnNm
b3JtZWQgY29udGVudHMsIGJ1dCB1bHRpbWF0ZWx5IGl0IG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVk
CiAgICAgICAgICAgICAvLyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQuCiAg
ICAgICAgICAgICBkaXJ0eVJlY3QubW92ZSgtb3JpZ2luLngoKSwgLW9yaWdpbi55KCkpOwogCi0g
ICAgICAgICAgICAvLyBTYXZlIHNvbWUgY3ljbGVzIGhlcmUuLi4KLSAgICAgICAgICAgIGlmIChk
aXJ0eVJlY3QuaXNFbXB0eSgpIHx8IGRpcnR5VGlsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBUaWxlUmVjdCB3aG9sZVRpbGVSZWN0Owot
ICAgICAgICAgICAgd2hvbGVUaWxlUmVjdC5maXJzdCA9IGluZGV4OwotICAgICAgICAgICAgd2hv
bGVUaWxlUmVjdC5zZWNvbmQgPSB0aGlzLT50aWxlUmVjdCgpOworICAgICAgICAgICAgVGlsZUJ1
ZmZlciogdGlsZUJ1ZmZlciA9IGN1cnJlbnRNYXAuZ2V0KGluZGV4KTsKIAogICAgICAgICAgICAg
Ym9vbCBpc1RpbGVDb3JyZXNwb25kaW5nVG9CdWZmZXIgPSBjdXJyZW50U3RhdGUtPmlzVGlsZUNv
cnJlc3BvbmRpbmdUb0J1ZmZlcihpbmRleCwgdGlsZUJ1ZmZlcik7Ci0gICAgICAgICAgICBib29s
IHJlbmRlcmVkID0gdGlsZUJ1ZmZlciAmJiB0aWxlQnVmZmVyLT5pc1JlbmRlcmVkKGRpcnR5VGls
ZVJlY3QsIGN1cnJlbnRTY2FsZSk7CisgICAgICAgICAgICBib29sIHJlbmRlcmVkID0gdGlsZUJ1
ZmZlciAmJiB0aWxlQnVmZmVyLT5pc1JlbmRlcmVkKHRpbGVSZWN0LnNlY29uZCwgY3VycmVudFNj
YWxlKTsKICAgICAgICAgICAgIGJvb2wgcGFpbnRDaGVja2VyZWQgPSAhaXNUaWxlQ29ycmVzcG9u
ZGluZ1RvQnVmZmVyIHx8ICFyZW5kZXJlZDsKIAogICAgICAgICAgICAgaWYgKHBhaW50Q2hlY2tl
cmVkKSB7CkBAIC0xNDgyLDIzICsxNDUwLDE4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
YmxpdFZpc2libGVDb250ZW50cyhib29sIGZvcmNlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ZGlydHlSZWN0VC5pbnRlcnNlY3QoUGxhdGZvcm06OkludFJlY3QoUGxhdGZvcm06OkludFBvaW50
KDAsIDApLCBzdXJmYWNlU2l6ZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICBibGl0VG9XaW5kb3coZGlydHlSZWN0VCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZpc2libGVUaWxlQnVmZmVyLT5uYXRpdmVCdWZmZXIoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnR5VGlsZVJlY3QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKmJsZW5kKi8sIDI1NSk7CisgICAgICAgICAgICAg
ICAgICAgIGJsaXRUb1dpbmRvdyhkaXJ0eVJlY3RULCB2aXNpYmxlVGlsZUJ1ZmZlci0+bmF0aXZl
QnVmZmVyKCksIGRpcnR5VGlsZVJlY3QsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6
U291cmNlQ29weSwgMjU1KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzVGlsZUNvcnJlc3BvbmRpbmdUb0J1ZmZlcikgewogICAgICAgICAgICAgICAgIC8vIElu
dGVyc2VjdCB0aGUgcmVuZGVyZWQgcmVnaW9uLgogICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpJ
bnRSZWN0UmVnaW9uIHJlbmRlcmVkUmVnaW9uID0gdGlsZUJ1ZmZlci0+cmVuZGVyZWRSZWdpb24o
KTsKICAgICAgICAgICAgICAgICBJbnRSZWN0TGlzdCBkaXJ0eVJlbmRlcmVkUmVjdHMgPSByZW5k
ZXJlZFJlZ2lvbi5yZWN0cygpOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZGlydHlSZW5kZXJlZFJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFRpbGVSZWN0IHRpbGVSZWN0OwotICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC5maXJzdCA9
IGluZGV4OwotICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC5zZWNvbmQgPSBpbnRlcnNlY3Rp
b24oZGlydHlUaWxlUmVjdCwgZGlydHlSZW5kZXJlZFJlY3RzLmF0KGkpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRpbGVSZWN0LnNlY29uZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBkaXJ0eVJlbmRlcmVkUmVjdHMuc2l6ZSgpOyArK2opIHsK
KyAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlSZW5kZXJlZFJlY3Qg
PSBpbnRlcnNlY3Rpb24odGlsZVJlY3Quc2Vjb25kLCBkaXJ0eVJlbmRlcmVkUmVjdHMuYXQoaikp
OworICAgICAgICAgICAgICAgICAgICBpZiAoZGlydHlSZW5kZXJlZFJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEJsaXQgdGhlIHJlbmRlcmVkIHBhcnRzLgotICAgICAgICAgICAgICAgICAgICBibGl0VGlsZVJl
Y3QodGlsZUJ1ZmZlciwgdGlsZVJlY3QsIG9yaWdpbiwgdHJhbnNmb3JtYXRpb24sIGN1cnJlbnRT
dGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJsaXRUaWxlUmVjdCh0aWxlQnVmZmVyLCBkaXJ0
eVJlbmRlcmVkUmVjdCwgb3JpZ2luLCB0cmFuc2Zvcm1hdGlvbiwgY3VycmVudFN0YXRlKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYmxpdHRlZFRpbGVzLmFwcGVuZCh0aWxl
QnVmZmVyKTsKICAgICAgICAgICAgIH0KQEAgLTE2MDEsMzYgKzE1NjQsMzAgQEAgdm9pZCBCYWNr
aW5nU3RvcmVQcml2YXRlOjpjb21wb3NpdGVDb250ZW50cyhXZWJDb3JlOjpMYXllclJlbmRlcmVy
KiBsYXllclJlbmRlcmUKICAgICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd0NoZWNrZXJib2FyZFBh
dHRlcm4odHJhbnNmb3JtLCBtX3dlYlBhZ2UtPmQtPm1hcEZyb21UcmFuc2Zvcm1lZEZsb2F0UmVj
dChXZWJDb3JlOjpJbnRSZWN0KGNoZWNrZXJlZFJlY3RzLmF0KGkpKSkpOwogCiAgICAgLy8gR2V0
IHRoZSBsaXN0IG9mIHRpbGUgcmVjdHMgdGhhdCBtYWtldXAgdGhlIGNvbnRlbnQuCi0gICAgVGls
ZVJlY3RMaXN0IHRpbGVSZWN0TGlzdCA9IG1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UaWxl
cyh0cmFuc2Zvcm1lZENvbnRlbnRzLCBjdXJyZW50U3RhdGUpOworICAgIFRpbGVSZWN0TGlzdCB0
aWxlUmVjdExpc3QgPSBtYXBGcm9tUGl4ZWxDb250ZW50c1RvVGlsZXModHJhbnNmb3JtZWRDb250
ZW50cywgY3VycmVudFN0YXRlKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVSZWN0
TGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlUmVjdCB0aWxlUmVjdCA9IHRpbGVSZWN0
TGlzdFtpXTsKICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gdGlsZVJlY3QuZmlyc3Q7Ci0gICAg
ICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5VGlsZVJlY3QgPSB0aWxlUmVjdC5zZWNvbmQ7Cisg
ICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5UmVjdCA9IHRpbGVSZWN0LnNlY29uZDsKICAg
ICAgICAgVGlsZUJ1ZmZlciogdGlsZUJ1ZmZlciA9IGN1cnJlbnRNYXAuZ2V0KGluZGV4KTsKIAot
ICAgICAgICAvLyBUaGlzIGRpcnR5IHJlY3QgaXMgaW4gdGlsZSBjb29yZGluYXRlcywgYnV0IGl0
IG5lZWRzIHRvIGJlIGluCi0gICAgICAgIC8vIHRyYW5zZm9ybWVkIGNvbnRlbnRzIGNvb3JkaW5h
dGVzLgotICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9tVGlsZXNU
b1RyYW5zZm9ybWVkQ29udGVudHModGlsZVJlY3QsIGN1cnJlbnRTdGF0ZSk7Ci0KLSAgICAgICAg
aWYgKCFkaXJ0eVJlY3QuaW50ZXJzZWN0cyh0cmFuc2Zvcm1lZENvbnRlbnRzKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCiAgICAgICAgIGlmICghdGlsZUJ1ZmZlciB8fCAhY3VycmVudFN0YXRl
LT5pc1RpbGVDb3JyZXNwb25kaW5nVG9CdWZmZXIoaW5kZXgsIHRpbGVCdWZmZXIpKQogICAgICAg
ICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd0NoZWNrZXJib2FyZFBhdHRlcm4odHJhbnNmb3JtLCBt
X3dlYlBhZ2UtPmQtPm1hcEZyb21UcmFuc2Zvcm1lZEZsb2F0UmVjdChQbGF0Zm9ybTo6RmxvYXRS
ZWN0KGRpcnR5UmVjdCkpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBUaWxlUmVjdCB3
aG9sZVRpbGVSZWN0OwotICAgICAgICAgICAgd2hvbGVUaWxlUmVjdC5maXJzdCA9IGluZGV4Owot
ICAgICAgICAgICAgd2hvbGVUaWxlUmVjdC5zZWNvbmQgPSB0aGlzLT50aWxlUmVjdCgpOwotCi0g
ICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCB3aG9sZVJlY3QgPSBtYXBGcm9tVGlsZXNUb1Ry
YW5zZm9ybWVkQ29udGVudHMod2hvbGVUaWxlUmVjdCwgY3VycmVudFN0YXRlKTsKKyAgICAgICAg
ICAgIFBsYXRmb3JtOjpJbnRQb2ludCB0aWxlT3JpZ2luID0gdGlsZUJ1ZmZlci0+bGFzdFJlbmRl
ck9yaWdpbigpOworICAgICAgICAgICAgUGxhdGZvcm06OkZsb2F0UmVjdCB0aWxlRG9jdW1lbnRD
b250ZW50c1JlY3QgPSBtX3dlYlBhZ2UtPmQtPm1hcEZyb21UcmFuc2Zvcm1lZEZsb2F0UmVjdChQ
bGF0Zm9ybTo6RmxvYXRSZWN0KHRpbGVCdWZmZXItPnBpeGVsQ29udGVudHNSZWN0KCkpKTsKIAot
ICAgICAgICAgICAgbGF5ZXJSZW5kZXJlci0+Y29tcG9zaXRlQnVmZmVyKHRyYW5zZm9ybSwgbV93
ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoUGxhdGZvcm06OkZsb2F0UmVj
dCh3aG9sZVJlY3QpKSwgdGlsZUJ1ZmZlci0+bmF0aXZlQnVmZmVyKCksIGNvbnRlbnRzT3BhcXVl
LCAxLjBmKTsKKyAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPmNvbXBvc2l0ZUJ1ZmZlcih0cmFu
c2Zvcm0sIHRpbGVEb2N1bWVudENvbnRlbnRzUmVjdCwgdGlsZUJ1ZmZlci0+bmF0aXZlQnVmZmVy
KCksIGNvbnRlbnRzT3BhcXVlLCAxLjBmKTsKICAgICAgICAgICAgIGNvbXBvc2l0ZWRUaWxlcy5h
cHBlbmQodGlsZUJ1ZmZlcik7Ci0gICAgICAgICAgICAvLyBJbnRlcnNlY3QgdGhlIHJlbmRlcmVk
IHJlZ2lvbi4KLSAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIG5vdFJlbmRlcmVk
UmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9ucyhkaXJ0eVRp
bGVSZWN0LCB0aWxlQnVmZmVyLT5yZW5kZXJlZFJlZ2lvbigpKTsKKworICAgICAgICAgICAgLy8g
SW50ZXJzZWN0IHRoZSByZW5kZXJlZCByZWdpb24gYW5kIGNsZWFyIHVucmVuZGVyZWQgcGFydHMu
CisgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBub3RSZW5kZXJlZFJlZ2lvbiA9
IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMoZGlydHlSZWN0LCB0aWxl
QnVmZmVyLT5yZW5kZXJlZFJlZ2lvbigpKTsKICAgICAgICAgICAgIEludFJlY3RMaXN0IG5vdFJl
bmRlcmVkUmVjdHMgPSBub3RSZW5kZXJlZFJlZ2lvbi5yZWN0cygpOwotICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBub3RSZW5kZXJlZFJlY3RzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdDaGVja2VyYm9hcmRQYXR0ZXJuKHRyYW5zZm9y
bSwgbV93ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoUGxhdGZvcm06OkZs
b2F0UmVjdChub3RSZW5kZXJlZFJlY3RzLmF0KGkpKSkpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBub3RSZW5kZXJlZFJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgUGxhdGZvcm06OkludFJlY3QgdGlsZVN1cmZhY2VSZWN0ID0gbm90UmVuZGVyZWRSZWN0
cy5hdChpKTsKKyAgICAgICAgICAgICAgICB0aWxlU3VyZmFjZVJlY3QubW92ZSgtdGlsZU9yaWdp
bi54KCksIC10aWxlT3JpZ2luLnkoKSk7CisgICAgICAgICAgICAgICAgbGF5ZXJSZW5kZXJlci0+
ZHJhd0NoZWNrZXJib2FyZFBhdHRlcm4odHJhbnNmb3JtLCBtX3dlYlBhZ2UtPmQtPm1hcEZyb21U
cmFuc2Zvcm1lZEZsb2F0UmVjdChQbGF0Zm9ybTo6RmxvYXRSZWN0KHRpbGVTdXJmYWNlUmVjdCkp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMTYzOSw0MSArMTU5Niwz
OSBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmNvbXBvc2l0ZUNvbnRlbnRzKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXIqIGxheWVyUmVuZGVyZQogI2VuZGlmCiAKIFBsYXRmb3JtOjpJbnRSZWN0
IEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRUaWxlUmVjdChUaWxlQnVmZmVyKiB0aWxlQnVmZmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVGlsZVJlY3QmIHRpbGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBvcmlnaW4sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja2luZ1N0b3JlR2VvbWV0cnkqIGdlb21l
dHJ5KQorICAgIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiB0aWxlUGl4ZWxDb250ZW50c1JlY3Qs
CisgICAgY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBvcmlnaW4sCisgICAgY29uc3QgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwKKyAgICBCYWNraW5nU3RvcmVHZW9tZXRy
eSogZ2VvbWV0cnkpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UtPmlzVmlzaWJsZSgpIHx8ICFpc0Fj
dGl2ZSgpIHx8ICF0aWxlQnVmZmVyKQogICAgICAgICByZXR1cm4gUGxhdGZvcm06OkludFJlY3Qo
KTsKIAotICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5VGlsZVJlY3QgPSB0aWxlUmVjdC5zZWNv
bmQ7Ci0KLSAgICAvLyBUaGlzIGRpcnR5IHJlY3QgaXMgaW4gdGlsZSBjb29yZGluYXRlcywgYnV0
IGl0IG5lZWRzIHRvIGJlIGluCi0gICAgLy8gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0
ZXMuCi0gICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlSZWN0ID0gbWFwRnJvbVRpbGVzVG9UcmFu
c2Zvcm1lZENvbnRlbnRzKHRpbGVSZWN0LCBnZW9tZXRyeSk7CisgICAgUGxhdGZvcm06OkludFJl
Y3Qgc3JjUmVjdCA9IHRpbGVQaXhlbENvbnRlbnRzUmVjdDsKKyAgICBQbGF0Zm9ybTo6SW50UG9p
bnQgdGlsZU9yaWdpbiA9IHRpbGVCdWZmZXItPmxhc3RSZW5kZXJPcmlnaW4oKTsKKyAgICBzcmNS
ZWN0Lm1vdmUoLXRpbGVPcmlnaW4ueCgpLCAtdGlsZU9yaWdpbi55KCkpOwogCiAgICAgLy8gTm93
LCB0aGlzIGRpcnR5IHJlY3QgaXMgaW4gdHJhbnNmb3JtZWQgY29vcmRpbmF0ZXMgcmVsYXRpdmUg
dG8gdGhlCiAgICAgLy8gdHJhbnNmb3JtZWQgY29udGVudHMsIGJ1dCB1bHRpbWF0ZWx5IGl0IG5l
ZWRzIHRvIGJlIHRyYW5zZm9ybWVkCiAgICAgLy8gY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhl
IHZpZXdwb3J0LgotICAgIGRpcnR5UmVjdC5tb3ZlKC1vcmlnaW4ueCgpLCAtb3JpZ2luLnkoKSk7
Ci0gICAgZGlydHlSZWN0ID0gbWF0cml4Lm1hcFJlY3QoZGlydHlSZWN0KTsKKyAgICBQbGF0Zm9y
bTo6SW50UmVjdCBkc3RSZWN0ID0gdGlsZVBpeGVsQ29udGVudHNSZWN0OworICAgIGRzdFJlY3Qu
bW92ZSgtb3JpZ2luLngoKSwgLW9yaWdpbi55KCkpOworICAgIGRzdFJlY3QgPSBtYXRyaXgubWFw
UmVjdChkc3RSZWN0KTsKIAogICAgIGlmICghbWF0cml4LmlzSWRlbnRpdHkoKSkgewotICAgICAg
ICAvLyBCZWNhdXNlIG9mIHJvdW5kaW5nIGl0IGlzIHBvc3NpYmxlIHRoYXQgZGlydHlSZWN0IGNv
dWxkIGJlIG9mZi1ieS1vbmUgbGFyZ2VyCisgICAgICAgIC8vIEJlY2F1c2Ugb2Ygcm91bmRpbmcg
aXQgaXMgcG9zc2libGUgdGhhdCBkc3RSZWN0IGNvdWxkIGJlIG9mZi1ieS1vbmUgbGFyZ2VyCiAg
ICAgICAgIC8vIHRoYW4gdGhlIHN1cmZhY2Ugc2l6ZSBvZiB0aGUgZHN0IGJ1ZmZlci4gV2UgcHJl
dmVudCB0aGlzIGhlcmUsIGJ5IGNsYW1waW5nCiAgICAgICAgIC8vIGl0IHRvIGVuc3VyZSB0aGF0
IGNhbid0IGhhcHBlbi4KLSAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChQbGF0Zm9ybTo6SW50
UmVjdChQbGF0Zm9ybTo6SW50UG9pbnQoMCwgMCksIHN1cmZhY2VTaXplKCkpKTsKKyAgICAgICAg
ZHN0UmVjdC5pbnRlcnNlY3QoUGxhdGZvcm06OkludFJlY3QoUGxhdGZvcm06OkludFBvaW50KDAs
IDApLCBzdXJmYWNlU2l6ZSgpKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKCFkaXJ0eVJlY3QuaXNF
bXB0eSgpKTsKLSAgICBBU1NFUlQoIWRpcnR5VGlsZVJlY3QuaXNFbXB0eSgpKTsKLSAgICBpZiAo
ZGlydHlSZWN0LmlzRW1wdHkoKSB8fCBkaXJ0eVRpbGVSZWN0LmlzRW1wdHkoKSkKKyAgICBBU1NF
UlQoIWRzdFJlY3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIXNyY1JlY3QuaXNFbXB0eSgpKTsK
KyAgICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkgfHwgc3JjUmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdCgpOwogCi0gICAgYmxpdFRvV2luZG93KGRpcnR5UmVj
dCwgdGlsZUJ1ZmZlci0+bmF0aXZlQnVmZmVyKCksIGRpcnR5VGlsZVJlY3QsCi0gICAgICAgICAg
ICAgICAgIGZhbHNlIC8qYmxlbmQqLywgMjU1KTsKLSAgICByZXR1cm4gZGlydHlSZWN0OworICAg
IGJsaXRUb1dpbmRvdyhkc3RSZWN0LCB0aWxlQnVmZmVyLT5uYXRpdmVCdWZmZXIoKSwgc3JjUmVj
dCwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpTb3VyY2VDb3B5LCAyNTUpOworICAg
IHJldHVybiBkc3RSZWN0OwogfQogCiB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRIb3Jp
em9udGFsU2Nyb2xsYmFyKCkKQEAgLTE2OTIsMTIgKzE2NDcsOSBAQCB2b2lkIEJhY2tpbmdTdG9y
ZVByaXZhdGU6OmJsaXRWZXJ0aWNhbFNjcm9sbGJhcigpCiAgICAgbV93ZWJQYWdlLT5jbGllbnQo
KS0+ZHJhd1ZlcnRpY2FsU2Nyb2xsYmFyKCk7CiB9CiAKLWJvb2wgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6aXNUaWxlVmlzaWJsZShjb25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAorYm9vbCBCYWNr
aW5nU3RvcmVQcml2YXRlOjppc1RpbGVWaXNpYmxlKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIEJh
Y2tpbmdTdG9yZUdlb21ldHJ5KiBnZW9tZXRyeSkgY29uc3QKIHsKLSAgICBUaWxlUmVjdCB0aWxl
UmVjdDsKLSAgICB0aWxlUmVjdC5maXJzdCA9IGluZGV4OwotICAgIHRpbGVSZWN0LnNlY29uZCA9
IHRoaXMtPnRpbGVSZWN0KCk7Ci0gICAgcmV0dXJuIG1hcEZyb21UaWxlc1RvVHJhbnNmb3JtZWRD
b250ZW50cyh0aWxlUmVjdCkuaW50ZXJzZWN0cyh2aXNpYmxlQ29udGVudHNSZWN0KCkpOworICAg
IHJldHVybiBpc1RpbGVWaXNpYmxlKGdlb21ldHJ5LT5vcmlnaW5PZlRpbGUoaW5kZXgpKTsKIH0K
IAogYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjppc1RpbGVWaXNpYmxlKGNvbnN0IFBsYXRmb3Jt
OjpJbnRQb2ludCYgb3JpZ2luKSBjb25zdApAQCAtMTcwNSwzNyArMTY1NywzMSBAQCBib29sIEJh
Y2tpbmdTdG9yZVByaXZhdGU6OmlzVGlsZVZpc2libGUoY29uc3QgUGxhdGZvcm06OkludFBvaW50
JiBvcmlnaW4pIGNvbnN0CiAgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRSZWN0KG9yaWdpbiwgdGls
ZVNpemUoKSkuaW50ZXJzZWN0cyh2aXNpYmxlQ29udGVudHNSZWN0KCkpOwogfQogCi1QbGF0Zm9y
bTo6SW50UmVjdCBCYWNraW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlVGlsZXNSZWN0KCkgY29uc3QK
K1BsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVUaWxlc1JlY3Qo
QmFja2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAogewotICAgIEJhY2tpbmdTdG9y
ZUdlb21ldHJ5KiBjdXJyZW50U3RhdGUgPSBmcm9udFN0YXRlKCk7Ci0gICAgVGlsZU1hcCBjdXJy
ZW50TWFwID0gY3VycmVudFN0YXRlLT50aWxlTWFwKCk7CisgICAgVGlsZU1hcCB0aWxlTWFwID0g
Z2VvbWV0cnktPnRpbGVNYXAoKTsKIAogICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3Q7Ci0gICAg
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKLSAgICBmb3Ig
KFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHRpbGVSZWN0
LmZpcnN0ID0gaXQtPmtleTsKLSAgICAgICAgdGlsZVJlY3Quc2Vjb25kID0gdGhpcy0+dGlsZVJl
Y3QoKTsKLSAgICAgICAgUGxhdGZvcm06OkludFJlY3QgdGlsZSA9IG1hcEZyb21UaWxlc1RvVHJh
bnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCk7Ci0gICAgICAgIGlmICh0aWxlLmludGVyc2VjdHMo
dmlzaWJsZUNvbnRlbnRzUmVjdCgpKSkKLSAgICAgICAgICAgIHJlY3QgPSBQbGF0Zm9ybTo6dW5p
b25PZlJlY3RzKHJlY3QsIHRpbGUpOworICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHRpbGVNYXAuZW5kKCk7CisgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRp
bGVNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFBsYXRmb3JtOjpJbnRS
ZWN0IHRpbGVQaXhlbENvbnRlbnRzUmVjdChnZW9tZXRyeS0+b3JpZ2luT2ZUaWxlKGl0LT5rZXkp
LCB0aWxlU2l6ZSgpKTsKKyAgICAgICAgaWYgKHRpbGVQaXhlbENvbnRlbnRzUmVjdC5pbnRlcnNl
Y3RzKHZpc2libGVDb250ZW50c1JlY3QoKSkpCisgICAgICAgICAgICByZWN0ID0gUGxhdGZvcm06
OnVuaW9uT2ZSZWN0cyhyZWN0LCB0aWxlUGl4ZWxDb250ZW50c1JlY3QpOwogICAgIH0KICAgICBy
ZXR1cm4gcmVjdDsKIH0KIAogUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
dGlsZVZpc2libGVDb250ZW50c1JlY3QoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgQmFja2luZ1N0
b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAogewotICAgIGlmICghaXNUaWxlVmlzaWJsZShp
bmRleCkpCisgICAgaWYgKCFpc1RpbGVWaXNpYmxlKGluZGV4LCBnZW9tZXRyeSkpCiAgICAgICAg
IHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdCgpOwogCiAgICAgcmV0dXJuIHRpbGVDb250ZW50c1Jl
Y3QoaW5kZXgsIHZpc2libGVDb250ZW50c1JlY3QoKSwgZ2VvbWV0cnkpOwogfQogCi1QbGF0Zm9y
bTo6SW50UmVjdCBCYWNraW5nU3RvcmVQcml2YXRlOjp0aWxlQ29udGVudHNSZWN0KGNvbnN0IFRp
bGVJbmRleCYgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGNvbnRlbnRzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2tpbmdT
dG9yZUdlb21ldHJ5KiBzdGF0ZSkgY29uc3QKK1BsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9y
ZVByaXZhdGU6OnRpbGVDb250ZW50c1JlY3QoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29uc3Qg
UGxhdGZvcm06OkludFJlY3QmIHBpeGVsQ29udGVudHNSZWN0LCBCYWNraW5nU3RvcmVHZW9tZXRy
eSogc3RhdGUpIGNvbnN0CiB7Ci0gICAgVGlsZVJlY3RMaXN0IHRpbGVSZWN0TGlzdCA9IG1hcEZy
b21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UaWxlcyhjb250ZW50cywgc3RhdGUpOworICAgIFRpbGVS
ZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBtYXBGcm9tUGl4ZWxDb250ZW50c1RvVGlsZXMocGl4ZWxD
b250ZW50c1JlY3QsIHN0YXRlKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVSZWN0
TGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBUaWxlUmVjdCB0aWxlUmVjdCA9IHRpbGVSZWN0
TGlzdFtpXTsKICAgICAgICAgaWYgKGluZGV4ID09IHRpbGVSZWN0LmZpcnN0KQpAQCAtMTc5NSw3
ICsxNzQxLDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVUaWxlcyhib29sIHVw
ZGF0ZVZpc2libGUsIGJvb2wgaW1tZWRpYXRlKQogCiAgICAgVGlsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gY3VycmVudE1hcC5lbmQoKTsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Ym9vbCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGl0LT5rZXkpOworICAgICAgICBib29sIGlz
VmlzaWJsZSA9IGlzVGlsZVZpc2libGUoaXQtPmtleSwgY3VycmVudFN0YXRlKTsKICAgICAgICAg
aWYgKCF1cGRhdGVWaXNpYmxlICYmIGlzVmlzaWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB1cGRhdGVUaWxlKGN1cnJlbnRTdGF0ZS0+b3JpZ2luT2ZUaWxlKGl0LT5rZXkpLCBp
bW1lZGlhdGUpOwpAQCAtMTgyMCw3ICsxNzY2LDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRl
Ojp1cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24oYm9vbCBjaGVja0xvYWQK
ICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VycmVudE1hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaXQtPmtleTsK
ICAgICAgICAgVGlsZUJ1ZmZlciogdGlsZUJ1ZmZlciA9IGl0LT52YWx1ZTsKLSAgICAgICAgYm9v
bCBpc1Zpc2libGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4KTsKKyAgICAgICAgYm9vbCBpc1Zpc2li
bGUgPSBpc1RpbGVWaXNpYmxlKGluZGV4LCBjdXJyZW50U3RhdGUpOwogICAgICAgICBQbGF0Zm9y
bTo6SW50UG9pbnQgdGlsZU9yaWdpbiA9IGN1cnJlbnRTdGF0ZS0+b3JpZ2luT2ZUaWxlKGluZGV4
KTsKICAgICAgICAgLy8gVGhlIHJlY3QgaW4gdHJhbnNmb3JtZWQgY29udGVudHMgY29vcmRpbmF0
ZXMuCiAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3QodGlsZU9yaWdpbiwgdGlsZVNpemUo
KSk7CkBAIC0xODcxLDU3ICsxODE3LDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRh
dGVUaWxlKGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgb3JpZ2luLCBib29sIGltbWUKICAgICAg
ICAgbV9yZW5kZXJRdWV1ZS0+YWRkVG9RdWV1ZShqb2JUeXBlLCB1cGRhdGVSZWN0KTsKIH0KIAot
UGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRpbGVzVG9UcmFu
c2Zvcm1lZENvbnRlbnRzKGNvbnN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OlRpbGVSZWN0JiB0aWxl
UmVjdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRl
bnRzKHRpbGVSZWN0LCBmcm9udFN0YXRlKCkpOwotfQotCi1QbGF0Zm9ybTo6SW50UmVjdCBCYWNr
aW5nU3RvcmVQcml2YXRlOjptYXBGcm9tVGlsZXNUb1RyYW5zZm9ybWVkQ29udGVudHMoY29uc3Qg
QmFja2luZ1N0b3JlUHJpdmF0ZTo6VGlsZVJlY3QmIHRpbGVSZWN0LCBCYWNraW5nU3RvcmVHZW9t
ZXRyeSogZ2VvbWV0cnkpIGNvbnN0Ci17Ci0gICAgVGlsZUluZGV4IGluZGV4ID0gdGlsZVJlY3Qu
Zmlyc3Q7Ci0gICAgUGxhdGZvcm06OkludFJlY3QgcmVjdCA9IHRpbGVSZWN0LnNlY29uZDsKLSAg
ICAvLyBUaGUgb3JpZ2luIG9mIHRoZSB0aWxlIGluY2x1ZGluZyB0aGUgYmFja2luZyBzdG9yZSBv
ZmZzZXQuCi0gICAgY29uc3QgUGxhdGZvcm06OkludFBvaW50IG9yaWdpbk9mVGlsZSA9IGdlb21l
dHJ5LT5vcmlnaW5PZlRpbGUoaW5kZXgpOwotICAgIHJlY3QubW92ZShvcmlnaW5PZlRpbGUueCgp
LCBvcmlnaW5PZlRpbGUueSgpKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6VGlsZVJlY3RMaXN0IEJhY2tpbmdTdG9yZVByaXZhdGU6Om1hcEZyb21UcmFuc2Zv
cm1lZENvbnRlbnRzVG9BYnNvbHV0ZVRpbGVCb3VuZGFyaWVzKGNvbnN0IFBsYXRmb3JtOjpJbnRS
ZWN0JiByZWN0KSBjb25zdAotewotICAgIGlmICghbV93ZWJQYWdlLT5pc1Zpc2libGUoKSB8fCAh
aXNBY3RpdmUoKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIFRpbGVSZWN0TGlzdCgpOwotICAgIH0KLQotICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVjdExp
c3Q7Ci0gICAgaW50IGZpcnN0WE9mZnNldCA9IHJlY3QueCgpIC8gdGlsZVdpZHRoKCk7Ci0gICAg
aW50IGZpcnN0WU9mZnNldCA9IHJlY3QueSgpIC8gdGlsZUhlaWdodCgpOwotICAgIGludCBsYXN0
WE9mZnNldCA9IChyZWN0LnJpZ2h0KCkgLSAxKSAvIHRpbGVXaWR0aCgpOwotICAgIGludCBsYXN0
WU9mZnNldCA9IChyZWN0LmJvdHRvbSgpIC0gMSkgLyB0aWxlSGVpZ2h0KCk7Ci0gICAgZm9yIChp
bnQgaSA9IGZpcnN0WE9mZnNldDsgaSA8PSBsYXN0WE9mZnNldDsgKytpKSB7Ci0gICAgICAgIGZv
ciAoaW50IGogPSBmaXJzdFlPZmZzZXQ7IGogPD0gbGFzdFlPZmZzZXQ7ICsraikgewotICAgICAg
ICAgICAgY29uc3QgaW50IGRzdFggPSAoaSA9PSBmaXJzdFhPZmZzZXQpID8gcmVjdC54KCkgOiBp
ICogdGlsZVdpZHRoKCk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgZHN0WSA9IChqID09IGZpcnN0
WU9mZnNldCkgPyByZWN0LnkoKSA6IGogKiB0aWxlSGVpZ2h0KCk7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgZHN0UmlnaHQgPSAoaSA9PSBsYXN0WE9mZnNldCkgPyByZWN0LnJpZ2h0KCkgOiAoaSAr
IDEpICogdGlsZVdpZHRoKCk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgZHN0Qm90dG9tID0gKGog
PT0gbGFzdFlPZmZzZXQpID8gcmVjdC5ib3R0b20oKSA6IChqICsgMSkgKiB0aWxlSGVpZ2h0KCk7
Ci0gICAgICAgICAgICBjb25zdCBpbnQgc3JjWCA9IGRzdFggJSB0aWxlV2lkdGgoKTsKLSAgICAg
ICAgICAgIGNvbnN0IGludCBzcmNZID0gZHN0WSAlIHRpbGVIZWlnaHQoKTsKLSAgICAgICAgICAg
IFRpbGVSZWN0IHRpbGVSZWN0OwotICAgICAgICAgICAgdGlsZVJlY3QuZmlyc3QgPSBUaWxlSW5k
ZXgoaSwgaik7Ci0gICAgICAgICAgICB0aWxlUmVjdC5zZWNvbmQgPSBQbGF0Zm9ybTo6SW50UmVj
dChzcmNYLCBzcmNZLCBkc3RSaWdodCAtIGRzdFgsIGRzdEJvdHRvbSAtIGRzdFkpOwotICAgICAg
ICAgICAgdGlsZVJlY3RMaXN0LmFwcGVuZCh0aWxlUmVjdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHRpbGVSZWN0TGlzdDsKLX0KLQotCi1CYWNraW5nU3RvcmVQcml2YXRlOjpUaWxl
UmVjdExpc3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNU
b1RpbGVzKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIHJldHVy
biBtYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXMocmVjdCwgZnJvbnRTdGF0ZSgpKTsK
LX0KLQotQmFja2luZ1N0b3JlUHJpdmF0ZTo6VGlsZVJlY3RMaXN0IEJhY2tpbmdTdG9yZVByaXZh
dGU6Om1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UaWxlcyhjb25zdCBQbGF0Zm9ybTo6SW50
UmVjdCYgcmVjdCwgQmFja2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAorQmFja2lu
Z1N0b3JlUHJpdmF0ZTo6VGlsZVJlY3RMaXN0IEJhY2tpbmdTdG9yZVByaXZhdGU6Om1hcEZyb21Q
aXhlbENvbnRlbnRzVG9UaWxlcyhjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCwgQmFja2lu
Z1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAogewogICAgIFRpbGVNYXAgdGlsZU1hcCA9
IGdlb21ldHJ5LT50aWxlTWFwKCk7CiAKQEAgLTE5MzMsMTMgKzE4MjksOCBAQCBCYWNraW5nU3Rv
cmVQcml2YXRlOjpUaWxlUmVjdExpc3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6bWFwRnJvbVRyYW5z
Zm9ybWVkQ29udGVudAogICAgICAgICAvLyBOZWVkIHRvIG1hcCB0aGUgcmVjdCB0byB0aWxlIGNv
b3JkaW5hdGVzLgogICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByID0gcmVjdDsKIAotICAgICAg
ICAvLyBUaGUgb3JpZ2luIG9mIHRoZSB0aWxlIGluY2x1ZGluZyB0aGUgYmFja2luZyBzdG9yZSBv
ZmZzZXQuCi0gICAgICAgIGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCBvcmlnaW5PZlRpbGUgPSBn
ZW9tZXRyeS0+b3JpZ2luT2ZUaWxlKGluZGV4KTsKLQotICAgICAgICByLm1vdmUoLShvcmlnaW5P
ZlRpbGUueCgpKSwgLShvcmlnaW5PZlRpbGUueSgpKSk7Ci0KICAgICAgICAgLy8gRG8gd2UgaW50
ZXJzZWN0IHRoZSBjdXJyZW50IHRpbGUgb3Igbm8/Ci0gICAgICAgIHIuaW50ZXJzZWN0KFBsYXRm
b3JtOjpJbnRSZWN0KFBsYXRmb3JtOjpJbnRQb2ludCgwLCAwKSwgdGlsZVNpemUoKSkpOworICAg
ICAgICByLmludGVyc2VjdChQbGF0Zm9ybTo6SW50UmVjdChnZW9tZXRyeS0+b3JpZ2luT2ZUaWxl
KGluZGV4KSwgdGlsZVNpemUoKSkpOwogICAgICAgICBpZiAoci5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIApAQCAtMTk5OCwxNiArMTg4OSwxNSBAQCB2b2lkIEJhY2tpbmdTdG9y
ZVByaXZhdGU6OnRyYW5zZm9ybUNoYW5nZWQoKQogICAgICAgICAgICAgbV92aXNpYmxlVGlsZUJ1
ZmZlclJlY3QgPSB2aXNpYmxlQ29udGVudHNSZWN0KCk7IC8vIENhY2hlIHRoaXMgZm9yIGJsaXRW
aXNpYmxlQ29udGVudHMuCiAKICAgICAgICAgLy8gQWRkIHRoZSBjdXJyZW50bHkgdmlzaWJsZSB0
aWxlcyB0byB0aGUgcmVuZGVyIHF1ZXVlIGFzIHZpc2libGUgem9vbSBqb2JzLgotICAgICAgICBU
aWxlUmVjdExpc3QgdGlsZVJlY3RMaXN0ID0gbWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb1Rp
bGVzKHZpc2libGVDb250ZW50c1JlY3QoKSk7CisgICAgICAgIFRpbGVSZWN0TGlzdCB0aWxlUmVj
dExpc3QgPSBtYXBGcm9tUGl4ZWxDb250ZW50c1RvVGlsZXModmlzaWJsZUNvbnRlbnRzUmVjdCgp
LCBjdXJyZW50U3RhdGUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVSZWN0
TGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVGlsZVJlY3QgdGlsZVJlY3QgPSB0aWxl
UmVjdExpc3RbaV07CiAgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSB0aWxlUmVjdC5maXJz
dDsKLSAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5VGlsZVJlY3QgPSB0aWxlUmVj
dC5zZWNvbmQ7CisgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVJlY3QgPSB0aWxl
UmVjdC5zZWNvbmQ7CiAgICAgICAgICAgICBUaWxlQnVmZmVyKiB0aWxlQnVmZmVyID0gY3VycmVu
dE1hcC5nZXQoaW5kZXgpOwogCiAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSB3aG9sZSBy
ZWN0LgotICAgICAgICAgICAgdGlsZVJlY3Quc2Vjb25kID0gdGhpcy0+dGlsZVJlY3QoKTsKLSAg
ICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHdob2xlUmVjdCA9IG1hcEZyb21UaWxlc1RvVHJh
bnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCk7CisgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVj
dCB3aG9sZVJlY3QoY3VycmVudFN0YXRlLT5vcmlnaW5PZlRpbGUoaW5kZXgpLCB0aWxlU2l6ZSgp
KTsKICAgICAgICAgICAgIG1fcmVuZGVyUXVldWUtPmFkZFRvUXVldWUoUmVuZGVyUXVldWU6OlZp
c2libGVab29tLCB3aG9sZVJlY3QpOwogCiAgICAgICAgICAgICBpZiAoIXRpbGVCdWZmZXIpCkBA
IC0yMDE2LDE3ICsxOTA2LDIwIEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6dHJhbnNmb3Jt
Q2hhbmdlZCgpCiAgICAgICAgICAgICAvLyBDb3B5IHRoZSB2aXNpYmxlIGNvbnRlbnRzIGludG8g
dGhlIHZpc2libGVUaWxlQnVmZmVyIGlmIHdlIGRvbid0IGhhdmUKICAgICAgICAgICAgIC8vIGFu
eSBjdXJyZW50IHZpc2libGUgem9vbSBqb2JzLgogICAgICAgICAgICAgaWYgKCFoYXNDdXJyZW50
VmlzaWJsZVpvb21Kb2IpIHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCB0aWxl
U3JjUmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UG9pbnQg
dGlsZU9yaWdpbiA9IGN1cnJlbnRTdGF0ZS0+b3JpZ2luT2ZUaWxlKGluZGV4KTsKKyAgICAgICAg
ICAgICAgICB0aWxlU3JjUmVjdC5tb3ZlKC10aWxlT3JpZ2luLngoKSwgLXRpbGVPcmlnaW4ueSgp
KTsKKwogICAgICAgICAgICAgICAgIC8vIE1hcCB0byB0aGUgZGVzdGluYXRpb24ncyBjb29yZGlu
YXRlIHN5c3RlbS4KLSAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UG9pbnQgZGlmZmVyZW5j
ZSA9IGN1cnJlbnRTdGF0ZS0+b3JpZ2luT2ZUaWxlKGluZGV4KSAtIG1fdmlzaWJsZVRpbGVCdWZm
ZXJSZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm06OkludFNpemUgb2Zm
c2V0ID0gUGxhdGZvcm06OkludFNpemUoZGlmZmVyZW5jZS54KCksIGRpZmZlcmVuY2UueSgpKTsK
LSAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCBkaXJ0eVJlY3QgPSBkaXJ0eVRpbGVS
ZWN0OwotICAgICAgICAgICAgICAgIGRpcnR5UmVjdC5tb3ZlKG9mZnNldC53aWR0aCgpLCBvZmZz
ZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRQb2ludCB2aXNpYmxl
VGlsZU9yaWdpbiA9IG1fdmlzaWJsZVRpbGVCdWZmZXJSZWN0LmxvY2F0aW9uKCk7CisgICAgICAg
ICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgdmlzaWJsZVRpbGVEc3RSZWN0ID0gZGlydHlSZWN0
OworICAgICAgICAgICAgICAgIHZpc2libGVUaWxlRHN0UmVjdC5tb3ZlKC12aXNpYmxlVGlsZU9y
aWdpbi54KCksIC12aXNpYmxlVGlsZU9yaWdpbi55KCkpOwogCiAgICAgICAgICAgICAgICAgVGls
ZUJ1ZmZlciogdmlzaWJsZVRpbGVCdWZmZXIgPSBTdXJmYWNlUG9vbDo6Z2xvYmFsU3VyZmFjZVBv
b2woKS0+dmlzaWJsZVRpbGVCdWZmZXIoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmlzaWJs
ZVRpbGVCdWZmZXItPnNpemUoKSA9PSBQbGF0Zm9ybTo6SW50U2l6ZShtX3dlYlBhZ2UtPmQtPnRy
YW5zZm9ybWVkVmlld3BvcnRTaXplKCkpKTsKICAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OmJsaXRUb0J1ZmZlcigKLSAgICAgICAgICAgICAgICAgICAgdmlz
aWJsZVRpbGVCdWZmZXItPm5hdGl2ZUJ1ZmZlcigpLCBkaXJ0eVJlY3QsCi0gICAgICAgICAgICAg
ICAgICAgIHRpbGVCdWZmZXItPm5hdGl2ZUJ1ZmZlcigpLCBkaXJ0eVRpbGVSZWN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgdmlzaWJsZVRpbGVCdWZmZXItPm5hdGl2ZUJ1ZmZlcigpLCB2aXNpYmxl
VGlsZURzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgIHRpbGVCdWZmZXItPm5hdGl2ZUJ1ZmZl
cigpLCB0aWxlU3JjUmVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0y
MTUxLDExICsyMDQ0LDYgQEAgUGxhdGZvcm06OkludFNpemUgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
dGlsZVNpemUoKQogICAgIHJldHVybiBQbGF0Zm9ybTo6SW50U2l6ZSh0aWxlV2lkdGgoKSwgdGls
ZUhlaWdodCgpKTsKIH0KIAotUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
dGlsZVJlY3QoKQotewotICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdCgwLCAwLCB0aWxlV2lk
dGgoKSwgdGlsZUhlaWdodCgpKTsKLX0KLQogdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5k
ZXJDb250ZW50cyhQbGF0Zm9ybTo6R3JhcGhpY3M6OkRyYXdhYmxlKiBkcmF3YWJsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGxhdGZvcm06OkludFJl
Y3QmIGNvbnRlbnRzUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlc3RpbmF0aW9uU2l6ZSkgY29uc3QKQEAgLTIz
MjQsMTAgKzIyMTIsMTAgQEAgc3RhdGljIHZvaWQgZHJhd0RlYnVnUmVjdChCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogZHN0QnVmZmVyLCBjb24KICNlbmRpZgogCiB2b2lk
IEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRUb1dpbmRvdyhjb25zdCBQbGF0Zm9ybTo6SW50UmVj
dCYgZHN0UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBzcmNCdWZmZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6SW50UmVj
dCYgc3JjUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YmxlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGdsb2JhbEFscGhhKQorICAgIGNvbnN0IFBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBz
cmNCdWZmZXIsCisgICAgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHNyY1JlY3QsCisgICAgUGxh
dGZvcm06OkdyYXBoaWNzOjpCbGVuZE1vZGUgYmxlbmRNb2RlLAorICAgIHVuc2lnbmVkIGNoYXIg
Z2xvYmFsQWxwaGEpCiB7CiAgICAgQVNTRVJUKEJsYWNrQmVycnk6OlBsYXRmb3JtOjp1c2VySW50
ZXJmYWNlVGhyZWFkTWVzc2FnZUNsaWVudCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CiAKQEAgLTIz
NDIsMTAgKzIyMzAsNiBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRUb1dpbmRvdyhj
b25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgZHN0UmVjdCwKICAgICAgICAgICAgICJFbXB0eSB3aW5k
b3cgYnVmZmVyLCBjb3VsZG4ndCBibGl0VG9XaW5kb3ciKTsKICAgICB9CiAKLSAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJsZW5kTW9kZSBibGVuZE1vZGUgPSBibGVuZAotICAg
ICAgICA/IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlT3ZlcgotICAgICAg
ICA6IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlQ29weTsKLQogICAgIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6YmxpdFRvQnVmZmVyKGRzdEJ1ZmZlciwgZHN0
UmVjdCwgc3JjQnVmZmVyLCBzcmNSZWN0LCBibGVuZE1vZGUsIGdsb2JhbEFscGhhKTsKIAogI2lm
IERFQlVHX0ZBVF9GSU5HRVJTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL0JhY2tpbmdTdG9yZV9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tp
bmdTdG9yZV9wLmgKaW5kZXggZmViYzUxNWM0OTY3ZGNjY2E3NTU0OTVjZDc0MzhiODM3OTY1NzI5
OS4uOTE1NGEyMzQ0NTk5MzEzNTRjZGUyODUzMjg4MTIzNmNlYzViODlhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmVfcC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlX3AuaApAQCAtMjE0LDggKzIxNCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50RGVmYXVsdEJhY2tncm91bmQoY29uc3QgUGxhdGZv
cm06OkludFJlY3QmIGRzdFJlY3QsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpWaWV3cG9ydEFjY2Vz
c29yKiwgYm9vbCBmbHVzaCk7CiAgICAgdm9pZCBibGl0T25JZGxlKCk7CiAKLSAgICB0eXBlZGVm
IHN0ZDo6cGFpcjxUaWxlSW5kZXgsIFBsYXRmb3JtOjpJbnRSZWN0PiBUaWxlUmVjdDsKLSAgICBQ
bGF0Zm9ybTo6SW50UmVjdCBibGl0VGlsZVJlY3QoVGlsZUJ1ZmZlciosIGNvbnN0IFRpbGVSZWN0
JiwgY29uc3QgUGxhdGZvcm06OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBCYWNraW5nU3RvcmVHZW9tZXRyeSopOworICAgIFBsYXRmb3JtOjpJbnRSZWN0
IGJsaXRUaWxlUmVjdChUaWxlQnVmZmVyKiwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmLCBjb25z
dCBQbGF0Zm9ybTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIEJhY2tpbmdTdG9yZUdlb21ldHJ5Kik7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAgICAgLy8gVXNlIGluc3RlYWQgb2YgYmxpdFZpc2libGVDb250ZW50cygpIGlmIHlv
dSBuZWVkIG1vcmUgY29udHJvbCBvdmVyCkBAIC0yMzgsMTEgKzIzNywxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBibGl0VmVydGljYWxTY3JvbGxiYXIoKTsKIAogICAgIC8vIFJldHVybnMgd2hldGhl
ciB0aGUgdGlsZSBpbmRleCBpcyBjdXJyZW50bHkgdmlzaWJsZSBvciBub3QuCi0gICAgYm9vbCBp
c1RpbGVWaXNpYmxlKGNvbnN0IFRpbGVJbmRleCYpIGNvbnN0OworICAgIGJvb2wgaXNUaWxlVmlz
aWJsZShjb25zdCBUaWxlSW5kZXgmLCBCYWNraW5nU3RvcmVHZW9tZXRyeSopIGNvbnN0OwogICAg
IGJvb2wgaXNUaWxlVmlzaWJsZShjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmKSBjb25zdDsKIAog
ICAgIC8vIFJldHVybnMgYSByZWN0IHRoYXQgaXMgdGhlIHVuaW9uIG9mIGFsbCB0aWxlcyB0aGF0
IGFyZSB2aXNpYmxlLgotICAgIFBsYXRmb3JtOjpJbnRSZWN0IHZpc2libGVUaWxlc1JlY3QoKSBj
b25zdDsKKyAgICBQbGF0Zm9ybTo6SW50UmVjdCB2aXNpYmxlVGlsZXNSZWN0KEJhY2tpbmdTdG9y
ZUdlb21ldHJ5KikgY29uc3Q7CiAKICAgICAvLyBVc2VkIHRvIGNsaXAgdG8gdGhlIHZpc2libGUg
Y29udGVudCBmb3IgaW5zdGFuY2UuCiAgICAgUGxhdGZvcm06OkludFJlY3QgdGlsZVZpc2libGVD
b250ZW50c1JlY3QoY29uc3QgVGlsZUluZGV4JiwgQmFja2luZ1N0b3JlR2VvbWV0cnkqKSBjb25z
dDsKQEAgLTI2NywxMyArMjY2LDkgQEAgcHVibGljOgogICAgIC8vIFVwZGF0ZSBhbiBpbmRpdmlk
dWFsIHRpbGUuCiAgICAgdm9pZCB1cGRhdGVUaWxlKGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYg
dGlsZU9yaWdpbiwgYm9vbCBpbW1lZGlhdGUpOwogCi0gICAgUGxhdGZvcm06OkludFJlY3QgbWFw
RnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRlbnRzKGNvbnN0IFRpbGVSZWN0JikgY29uc3Q7Ci0g
ICAgUGxhdGZvcm06OkludFJlY3QgbWFwRnJvbVRpbGVzVG9UcmFuc2Zvcm1lZENvbnRlbnRzKGNv
bnN0IFRpbGVSZWN0JiwgQmFja2luZ1N0b3JlR2VvbWV0cnkqKSBjb25zdDsKLQorICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPFRpbGVJbmRleCwgUGxhdGZvcm06OkludFJlY3Q+IFRpbGVSZWN0OwogICAg
IHR5cGVkZWYgV1RGOjpWZWN0b3I8VGlsZVJlY3Q+IFRpbGVSZWN0TGlzdDsKLSAgICBUaWxlUmVj
dExpc3QgbWFwRnJvbVRyYW5zZm9ybWVkQ29udGVudHNUb0Fic29sdXRlVGlsZUJvdW5kYXJpZXMo
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmKSBjb25zdDsKLSAgICBUaWxlUmVjdExpc3QgbWFwRnJv
bVRyYW5zZm9ybWVkQ29udGVudHNUb1RpbGVzKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JikgY29u
c3Q7Ci0gICAgVGlsZVJlY3RMaXN0IG1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UaWxlcyhj
b25zdCBQbGF0Zm9ybTo6SW50UmVjdCYsIEJhY2tpbmdTdG9yZUdlb21ldHJ5KikgY29uc3Q7Cisg
ICAgVGlsZVJlY3RMaXN0IG1hcEZyb21QaXhlbENvbnRlbnRzVG9UaWxlcyhjb25zdCBQbGF0Zm9y
bTo6SW50UmVjdCYsIEJhY2tpbmdTdG9yZUdlb21ldHJ5KikgY29uc3Q7CiAKICAgICB2b2lkIHNl
dFRpbGVNYXRyaXhOZWVkc1VwZGF0ZSgpIHsgbV90aWxlTWF0cml4TmVlZHNVcGRhdGUgPSB0cnVl
OyB9CiAgICAgdm9pZCB1cGRhdGVUaWxlTWF0cml4SWZOZWVkZWQoKTsKQEAgLTMwOSwxMyArMzA0
LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW50IHRpbGVXaWR0aCgpOwogICAgIHN0YXRpYyBp
bnQgdGlsZUhlaWdodCgpOwogICAgIHN0YXRpYyBQbGF0Zm9ybTo6SW50U2l6ZSB0aWxlU2l6ZSgp
OwotICAgIHN0YXRpYyBQbGF0Zm9ybTo6SW50UmVjdCB0aWxlUmVjdCgpOwogCiAgICAgLy8gVGhp
cyB0YWtlcyB0cmFuc2Zvcm1lZCBjb250ZW50cyBjb29yZGluYXRlcy4KICAgICB2b2lkIHJlbmRl
ckNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiwgY29uc3Qg
UGxhdGZvcm06OkludFBvaW50JiBzdXJmYWNlT2Zmc2V0LCBjb25zdCBQbGF0Zm9ybTo6SW50UmVj
dCYgY29udGVudHNSZWN0KSBjb25zdDsKICAgICB2b2lkIHJlbmRlckNvbnRlbnRzKFBsYXRmb3Jt
OjpHcmFwaGljczo6RHJhd2FibGUqIC8qZHJhd2FibGUqLywgY29uc3QgUGxhdGZvcm06OkludFJl
Y3QmIC8qY29udGVudHNSZWN0Ki8sIGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiAvKmRlc3RpbmF0
aW9uU2l6ZSovKSBjb25zdDsKIAotICAgIHZvaWQgYmxpdFRvV2luZG93KGNvbnN0IFBsYXRmb3Jt
OjpJbnRSZWN0JiBkc3RSZWN0LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OkJ1ZmZlciogc3JjQnVmZmVyLCBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgc3JjUmVjdCwgYm9v
bCBibGVuZCwgdW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSk7CisgICAgdm9pZCBibGl0VG9XaW5k
b3coY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGRzdFJlY3QsIGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBzcmNCdWZmZXIsIGNvbnN0IFBsYXRmb3JtOjpJbnRS
ZWN0JiBzcmNSZWN0LCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJsZW5kTW9kZSwg
dW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSk7CiAgICAgdm9pZCBmaWxsV2luZG93KFBsYXRmb3Jt
OjpHcmFwaGljczo6RmlsbFBhdHRlcm4sIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBkc3RSZWN0
LCBjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIGNvbnRlbnRzT3JpZ2luLCBkb3VibGUgY29udGVu
dHNTY2FsZSk7CiAKICAgICBXZWJDb3JlOjpDb2xvciB3ZWJQYWdlQmFja2dyb3VuZENvbG9yVXNl
ckludGVyZmFjZVRocmVhZCgpIGNvbnN0OyAvLyB1c2UgV2ViU2V0dGluZ3M6OmJhY2tncm91bmRD
b2xvcigpIGZvciB0aGUgV2ViS2l0IHRocmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVUaWxlLmNwcAppbmRleCA2
MDRhZGJjZTUxNThlMzIzZTBiMTdlZWM4YzBmOTNlMDE5Y2VjZmM0Li5kMWFmNzgyOTlhMjBmMzRj
OWVlMDAzODMzMDZhNmVjNjI4NTMzNWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVUaWxlLmNwcApAQCAtNTMs
MTkgKzUzLDI0IEBAIFBsYXRmb3JtOjpJbnRTaXplIFRpbGVCdWZmZXI6OnNpemUoKSBjb25zdAog
ICAgIHJldHVybiBtX3NpemU7CiB9CiAKLVBsYXRmb3JtOjpJbnRSZWN0IFRpbGVCdWZmZXI6OnJl
Y3QoKSBjb25zdAorUGxhdGZvcm06OkludFJlY3QgVGlsZUJ1ZmZlcjo6c3VyZmFjZVJlY3QoKSBj
b25zdAogewogICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdChQbGF0Zm9ybTo6SW50UG9pbnQ6
Onplcm8oKSwgbV9zaXplKTsKIH0KIAorUGxhdGZvcm06OkludFJlY3QgVGlsZUJ1ZmZlcjo6cGl4
ZWxDb250ZW50c1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdCht
X2xhc3RSZW5kZXJPcmlnaW4sIG1fc2l6ZSk7Cit9CisKIGJvb2wgVGlsZUJ1ZmZlcjo6aXNSZW5k
ZXJlZChkb3VibGUgc2NhbGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzUmVuZGVyZWQocmVjdCgp
LCBzY2FsZSk7CisgICAgcmV0dXJuIGlzUmVuZGVyZWQocGl4ZWxDb250ZW50c1JlY3QoKSwgc2Nh
bGUpOwogfQogCi1ib29sIFRpbGVCdWZmZXI6OmlzUmVuZGVyZWQoY29uc3QgUGxhdGZvcm06Oklu
dFJlY3RSZWdpb24mIGNvbnRlbnRzLCBkb3VibGUgc2NhbGUpIGNvbnN0Citib29sIFRpbGVCdWZm
ZXI6OmlzUmVuZGVyZWQoY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mIHBpeGVsQ29udGVu
dHNSZWdpb24sIGRvdWJsZSBzY2FsZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9sYXN0UmVuZGVy
U2NhbGUgPT0gc2NhbGUgJiYgUGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9u
cyhjb250ZW50cywgbV9yZW5kZXJlZFJlZ2lvbikuaXNFbXB0eSgpOworICAgIHJldHVybiBtX2xh
c3RSZW5kZXJTY2FsZSA9PSBzY2FsZSAmJiBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJh
Y3RSZWdpb25zKHBpeGVsQ29udGVudHNSZWdpb24sIG1fcmVuZGVyZWRSZWdpb24pLmlzRW1wdHko
KTsKIH0KIAogdm9pZCBUaWxlQnVmZmVyOjpjbGVhclJlbmRlcmVkUmVnaW9uKGNvbnN0IFBsYXRm
b3JtOjpJbnRSZWN0UmVnaW9uJiByZWdpb24pCkBAIC05MCw3ICs5NSw3IEBAIFBsYXRmb3JtOjpJ
bnRSZWN0UmVnaW9uIFRpbGVCdWZmZXI6OnJlbmRlcmVkUmVnaW9uKCkgY29uc3QKIAogUGxhdGZv
cm06OkludFJlY3RSZWdpb24gVGlsZUJ1ZmZlcjo6bm90UmVuZGVyZWRSZWdpb24oKSBjb25zdAog
ewotICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RSZWdpb25zKHJl
Y3QoKSwgcmVuZGVyZWRSZWdpb24oKSk7CisgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRSZWN0UmVn
aW9uOjpzdWJ0cmFjdFJlZ2lvbnMocGl4ZWxDb250ZW50c1JlY3QoKSwgbV9yZW5kZXJlZFJlZ2lv
bik7CiB9CiAKIFBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBUaWxlQnVmZmVyOjpuYXRpdmVC
dWZmZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvQmFja2luZ1N0b3JlVGlsZS5oCmluZGV4IDYyNTA1Yjc5ZWI4OWExNmY4OTBl
YWFkM2M1MGEwZGFkOGY4YjBiNzcuLjIwZGQ0YjgzMWY0ZmY4ZjQ4YTcwYzFiZDJmMzQ3MTMwOTE4
NmMzYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0JhY2tpbmdTdG9yZVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9CYWNraW5nU3RvcmVUaWxlLmgKQEAgLTcyLDcgKzcyLDggQEAgY2xhc3MgVGlsZUJ1
ZmZlciB7CiAgICAgICAgIFRpbGVCdWZmZXIoY29uc3QgUGxhdGZvcm06OkludFNpemUmKTsKICAg
ICAgICAgflRpbGVCdWZmZXIoKTsKICAgICAgICAgUGxhdGZvcm06OkludFNpemUgc2l6ZSgpIGNv
bnN0OwotICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCByZWN0KCkgY29uc3Q7CisgICAgICAgIFBs
YXRmb3JtOjpJbnRSZWN0IHN1cmZhY2VSZWN0KCkgY29uc3Q7CisgICAgICAgIFBsYXRmb3JtOjpJ
bnRSZWN0IHBpeGVsQ29udGVudHNSZWN0KCkgY29uc3Q7CiAKICAgICAgICAgUGxhdGZvcm06Oklu
dFBvaW50IGxhc3RSZW5kZXJPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2xhc3RSZW5kZXJPcmln
aW47IH0KICAgICAgICAgdm9pZCBzZXRMYXN0UmVuZGVyT3JpZ2luKGNvbnN0IFBsYXRmb3JtOjpJ
bnRQb2ludCYgb3JpZ2luKSB7IG1fbGFzdFJlbmRlck9yaWdpbiA9IG9yaWdpbjsgfQpAQCAtODAs
NyArODEsNyBAQCBjbGFzcyBUaWxlQnVmZmVyIHsKICAgICAgICAgdm9pZCBzZXRMYXN0UmVuZGVy
U2NhbGUoZG91YmxlIHNjYWxlKSB7IG1fbGFzdFJlbmRlclNjYWxlID0gc2NhbGU7IH0KIAogICAg
ICAgICBib29sIGlzUmVuZGVyZWQoZG91YmxlIHNjYWxlKSBjb25zdDsKLSAgICAgICAgYm9vbCBp
c1JlbmRlcmVkKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiBjb250ZW50cywgZG91Ymxl
IHNjYWxlKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1JlbmRlcmVkKGNvbnN0IFBsYXRmb3JtOjpJ
bnRSZWN0UmVnaW9uJiBwaXhlbENvbnRlbnRzUmVnaW9uLCBkb3VibGUgc2NhbGUpIGNvbnN0Owog
ICAgICAgICB2b2lkIGNsZWFyUmVuZGVyZWRSZWdpb24oKTsKICAgICAgICAgdm9pZCBjbGVhclJl
bmRlcmVkUmVnaW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJik7CiAgICAgICAgIHZv
aWQgYWRkUmVuZGVyZWRSZWdpb24oY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>