<?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>34509</bug_id>
          
          <creation_ts>2010-02-02 18:33:50 -0800</creation_ts>
          <short_desc>Upstreaming gtests from chromium: UniscribeHelper and TransparencyWin</short_desc>
          <delta_ts>2010-02-04 23:18:25 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yaar Schnitman">yaar</reporter>
          <assigned_to name="Yaar Schnitman">yaar</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fishd</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>187226</commentid>
    <comment_count>0</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-02 18:33:50 -0800</bug_when>
    <thetext>Upstreaming gtests from chromium: UniscribeHelper and TransparencyWin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187227</commentid>
    <comment_count>1</comment_count>
      <attachid>47985</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-02 18:34:26 -0800</bug_when>
    <thetext>Created attachment 47985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187228</commentid>
    <comment_count>2</comment_count>
      <attachid>47986</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-02 18:38:09 -0800</bug_when>
    <thetext>Created attachment 47986
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187229</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-02 18:39:24 -0800</bug_when>
    <thetext>Attachment 47985 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/tests/TransparencyWinTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/TransparencyWinTest.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/tests/TransparencyWinTest.cpp:38:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:36:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187231</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-02 18:39:56 -0800</bug_when>
    <thetext>Attachment 47986 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/tests/TransparencyWinTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/TransparencyWinTest.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/tests/TransparencyWinTest.cpp:38:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:36:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187252</commentid>
    <comment_count>5</comment_count>
      <attachid>47986</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-02-02 20:59:50 -0800</bug_when>
    <thetext>Comment on attachment 47986
Patch 2

&gt; +2010-02-02  Yaar Schnitman  &lt;yaar@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Need a short description and bug URL (OOPS!)
&gt; +

^^^ please fill out the change log appropriately.

otherwise, LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187553</commentid>
    <comment_count>6</comment_count>
      <attachid>48080</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-03 16:58:58 -0800</bug_when>
    <thetext>Created attachment 48080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187554</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-03 17:01:20 -0800</bug_when>
    <thetext>Attachment 48080 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/tests/TransparencyWinTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/TransparencyWinTest.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/tests/TransparencyWinTest.cpp:38:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:36:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187675</commentid>
    <comment_count>8</comment_count>
      <attachid>48080</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-04 01:16:44 -0800</bug_when>
    <thetext>Comment on attachment 48080
Patch

Clearing flags on attachment: 48080

Committed r54333: &lt;http://trac.webkit.org/changeset/54333&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187676</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-04 01:16:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187691</commentid>
    <comment_count>10</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-04 02:10:36 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; All reviewed patches have been landed.  Closing bug.

I reverted the change since it didn&apos;t compile on Chromium Win bot: http://build.webkit.org/builders/Chromium%20Win%20Release/builds/1862</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187974</commentid>
    <comment_count>11</comment_count>
      <attachid>48178</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-04 15:40:11 -0800</bug_when>
    <thetext>Created attachment 48178
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187980</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-04 15:45:05 -0800</bug_when>
    <thetext>Attachment 48178 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/tests/TransparencyWinTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/TransparencyWinTest.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/tests/TransparencyWinTest.cpp:38:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/tests/UniscribeHelperTest.cpp:36:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188087</commentid>
    <comment_count>13</comment_count>
      <attachid>48178</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-04 23:18:16 -0800</bug_when>
    <thetext>Comment on attachment 48178
Patch

Clearing flags on attachment: 48178

Committed r54410: &lt;http://trac.webkit.org/changeset/54410&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188088</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-04 23:18:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47985</attachid>
            <date>2010-02-02 18:34:26 -0800</date>
            <delta_ts>2010-02-02 18:38:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34509-20100202183424.patch</filename>
            <type>text/plain</type>
            <size>35400</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDRmNjIzMDkuLjNiMGI0ZDYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI1IEBACisyMDEwLTAyLTAyICBZYWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQgYSBz
aG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBXZWJLaXQu
Z3lwOgorICAgICAgICAqIHRlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJFQ1RUb0Zsb2F0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3
TmF0aXZlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQaXhlbEF0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6Y2xl
YXJUb3BMYXllckFscGhhUGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9VbmlzY3JpYmVIZWxwZXJU
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVUZXN0OjpVbmlzY3Jp
YmVUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZVRlc3Q6Ok1ha2VGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZVRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6
OlVuaXNjcmliZVRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisK
IDIwMTAtMDItMDIgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMzA0OWI3
My4uNzRiMzRlYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTQ1MSw2ICs0NTEsMTQgQEAKICAgICAgICAg
ICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAndGVzdHMvUnVu
QWxsVGVzdHMuY3BwJywKICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAnY29uZGl0aW9ucyc6
IFsKKyAgICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKKyAgICAgICAgICAgICAgICAgICAg
J3NvdXJjZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvVHJhbnNwYXJlbmN5
V2luVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1VuaXNjcmliZUhl
bHBlclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICB9
XSwKKyAgICAgICAgICAgIF0sCiAgICAgICAgIH0sCiAgICAgXSwgIyB0YXJnZXRzCiB9CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkMGVjZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcApAQCAtMCwwICsxLDY5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVk
ZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlRyYW5zcGFyZW5jeVdpbi5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIEZsb2F0UmVjdCBS
RUNUVG9GbG9hdFJlY3QoY29uc3QgUkVDVCogcmVjdCkKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0
KHN0YXRpY19jYXN0PGZsb2F0PihyZWN0LT5sZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PGZsb2F0PihyZWN0LT50b3ApLAorICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCksCisgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKSk7Cit9CisK
K3N0YXRpYyB2b2lkIGRyYXdOYXRpdmVSZWN0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQorewor
ICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCk7CisgICAgSERDIGRjID0gY2FudmFzLT5iZWdpblBsYXRmb3JtUGFpbnQo
KTsKKworICAgIFJFQ1QgaW5uZXJSYzsKKyAgICBpbm5lclJjLmxlZnQgPSB4OworICAgIGlubmVy
UmMudG9wID0geTsKKyAgICBpbm5lclJjLnJpZ2h0ID0geCArIHc7CisgICAgaW5uZXJSYy5ib3R0
b20gPSB5ICsgaDsKKyAgICBGaWxsUmVjdChkYywgJmlubmVyUmMsCisgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxIQlJVU0g+KEdldFN0b2NrT2JqZWN0KEJMQUNLX0JSVVNIKSkpOworCisg
ICAgY2FudmFzLT5lbmRQbGF0Zm9ybVBhaW50KCk7Cit9CisKK3N0YXRpYyBDb2xvciBnZXRQaXhl
bEF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50IHgsIGludCB5KQoreworICAgIGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkt
PgorICAgICAgICBnZXRUb3BQbGF0Zm9ybURldmljZSgpLmFjY2Vzc0JpdG1hcChmYWxzZSk7Cisg
ICAgcmV0dXJuIENvbG9yKCpyZWludGVycHJldF9jYXN0PGNvbnN0IFJHQkEzMio+KGJpdG1hcC5n
ZXRBZGRyMzIoeCwgeSkpKTsKK30KKworLy8gUmVzZXRzIHRoZSB0b3AgbGF5ZXIncyBhbHBoYSBj
aGFubmVsIHRvIDAgZm9yIGVhY2ggcGl4ZWwuIFRoaXMgc2ltdWxhdGVzCisvLyBXaW5kb3dzIG1l
c3NpbmcgaXQgdXAuCitzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2Fz
dDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT4KKyAgICAgICAgY2FudmFz
KCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKGZhbHNlKSk7CisgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBiaXRtYXAuaGVpZ2h0KCk7IHkrKykgeworICAgICAgICB1aW50MzJf
dCogcm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBiaXRtYXAud2lkdGgoKTsgeCsrKQorICAgICAgICAgICAgcm93W3hdICY9IDB4MDBGRkZG
RkY7CisgICAgfQorfQorCisvLyBDbGVhcnMgdGhlIGFscGhhIGNoYW5uZWwgb24gdGhlIHNwZWNp
ZmllZCBwaXhlbC4KK3N0YXRpYyB2b2lkIGNsZWFyVG9wTGF5ZXJBbHBoYVBpeGVsKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgaW50IHgsIGludCB5KQoreworICAgIFNrQml0bWFwJiBiaXRtYXAg
PSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPgorICAg
ICAgICBjYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2Up
KTsKKyAgICAqYml0bWFwLmdldEFkZHIzMih4LCB5KSAmPSAweDAwRkZGRkZGOworfQorCitzdGF0
aWMgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBDb2xv
ciYgYykKK3sKKyAgICBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyBvbGRGbGFncyA9IG91dC5mbGFn
cyhzdGQ6Omlvc19iYXNlOjpoZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6OnNob3diYXNlKTsKKyAgICBvdXQgPDwgYy5y
Z2IoKTsKKyAgICBvdXQuZmxhZ3Mob2xkRmxhZ3MpOworICAgIHJldHVybiBvdXQ7Cit9CisKK1RF
U1QoVHJhbnNwYXJlbmN5V2luLCBOb0xheWVyKQoreworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
c3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNywgMTYpLCBEZXZpY2VSR0IpKTsKKwor
ICAgIC8vIEtlZXBUcmFuc2Zvcm0KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxw
ZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAg
ICAgICBUcmFuc3BhcmVuY3lXaW46Ok5vTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5z
cGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgx
LCAxLCAxNCwgMTIpKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSA9PSBo
ZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxNCwgMTIpID09
IGhlbHBlci5tX2xheWVyU2l6ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMSwgMSwg
MTQsIDEyKSA9PSBoZWxwZXIuZHJhd1JlY3QoKSk7CisgICAgfQorCisgICAgLy8gVW50cmFuc2Zv
cm0gaXMgbm90IGFsbG93ZWQgZm9yIE5vTGF5ZXIuCisKKyAgICAvLyBTY2FsZVRyYW5zZm9ybQor
ICAgIHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7CisgICAgc3JjLT5jb250ZXh0KCktPnNjYWxlKEZs
b2F0U2l6ZSgyLjAsIDAuNSkpOworICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBl
cjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAg
ICAgIFRyYW5zcGFyZW5jeVdpbjo6Tm9MYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNw
YXJlbmN5V2luOjpTY2FsZVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgy
LCAyLCA2LCA2KSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKworICAgICAgICAvLyBU
aGUgY29vcmRpbmF0ZSBzeXN0ZW0gc2hvdWxkIGJlIGJhc2VkIGluIHRoZSB1cHBlciBsZWZ0IG9m
IG91ciBib3guCisgICAgICAgIC8vIEl0IHNob3VsZCBiZSBwb3N0LXRyYW5zZm9ybWVkLgorICAg
ICAgICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSA9PSBoZWxwZXIuY29udGV4dCgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxMiwgMykgPT0gaGVscGVyLm1fbGF5ZXJTaXplKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCg0LCAxLCAxMiwgMykgPT0gaGVscGVyLmRyYXdS
ZWN0KCkpOworICAgIH0KKyAgICBzcmMtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworfQorCitURVNU
KFRyYW5zcGFyZW5jeVdpbiwgV2hpdGVMYXllcikKK3sKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYsIDE2KSwgRGV2aWNlUkdCKSk7CisK
KyAgICAvLyBLZWVwVHJhbnNmb3JtCisgICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVs
cGVyOworICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgVHJhbnNwYXJlbmN5V2luOjpXaGl0ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBU
cmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJl
Y3QoMSwgMSwgMTQsIDEyKSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKworICAgICAg
ICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSAhPSBoZWxwZXIuY29udGV4dCgpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxNCwgMTIpID09IGhlbHBlci5tX2xheWVyU2l6ZSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMSwgMSwgMTQsIDEyKSA9PSBoZWxwZXIuZHJhd1Jl
Y3QoKSk7CisgICAgfQorCisgICAgLy8gVW50cmFuc2Zvcm0KKyAgICB7CisgICAgICAgIFRyYW5z
cGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAor
ICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OldoaXRlTGF5ZXIsCisgICAgICAg
ICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6VW50cmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgIEludFJlY3QoMSwgMSwgMTQsIDEyKSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUo
KTsKKworICAgICAgICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSAhPSBoZWxwZXIuY29udGV4
dCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxNCwgMTIpID09IGhlbHBlci5tX2xh
eWVyU2l6ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMCwgMCwgMTQsIDEyKSA9PSBo
ZWxwZXIuZHJhd1JlY3QoKSk7CisgICAgfQorCisgICAgLy8gU2NhbGVUcmFuc2Zvcm0KKyAgICBz
cmMtPmNvbnRleHQoKS0+c2F2ZSgpOworICAgIHNyYy0+Y29udGV4dCgpLT5zY2FsZShGbG9hdFNp
emUoMi4wLCAwLjUpKTsKKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7Cisg
ICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBU
cmFuc3BhcmVuY3lXaW46OldoaXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFy
ZW5jeVdpbjo6U2NhbGVUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMiwg
MiwgNiwgNikpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisKKyAgICAgICAgLy8gVGhl
IGNvb3JkaW5hdGUgc3lzdGVtIHNob3VsZCBiZSBiYXNlZCBpbiB0aGUgdXBwZXIgbGVmdCBvZiBv
dXIgYm94LgorICAgICAgICAvLyBJdCBzaG91bGQgYmUgcG9zdC10cmFuc2Zvcm1lZC4KKyAgICAg
ICAgRVhQRUNUX1RSVUUoc3JjLT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQoKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKEludFNpemUoMTIsIDMpID09IGhlbHBlci5tX2xheWVyU2l6ZSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMCwgMCwgMTIsIDMpID09IGhlbHBlci5kcmF3UmVj
dCgpKTsKKyAgICB9CisgICAgc3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKK30KKworVEVTVChU
cmFuc3BhcmVuY3lXaW4sIFRleHRDb21wb3NpdGUpCit7CisgICAgT3duUHRyPEltYWdlQnVmZmVy
PiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAxNiksIERldmljZVJHQikpOwor
CisgICAgLy8gS2VlcFRyYW5zZm9ybSBpcyB0aGUgb25seSB2YWxpZCB0cmFuc2Zvcm0gbW9kZSBm
b3IgVGV4dENvbXBvc2l0ZS4KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7
CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAg
ICBUcmFuc3BhcmVuY3lXaW46OlRleHRDb21wb3NpdGUsCisgICAgICAgICAgICAgICAgICAgIFRy
YW5zcGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVj
dCgxLCAxLCAxNCwgMTIpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworCisgICAgICAg
IEVYUEVDVF9UUlVFKHNyYy0+Y29udGV4dCgpICE9IGhlbHBlci5jb250ZXh0KCkpOworICAgICAg
ICBFWFBFQ1RfVFJVRShJbnRTaXplKDE0LCAxMikgPT0gaGVscGVyLm1fbGF5ZXJTaXplKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCgxLCAxLCAxNCwgMTIpID09IGhlbHBlci5kcmF3UmVj
dCgpKTsKKyAgICB9Cit9CisKK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBPcGFxdWVDb21wb3NpdGVM
YXllcikKK3sKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KEludFNpemUoMTYsIDE2KSwgRGV2aWNlUkdCKSk7CisKKyAgICAvLyBLZWVwVHJhbnNmb3JtCisg
ICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5p
dChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpP
cGFxdWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2lu
OjpLZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDEsIDEsIDE0LCAx
MikpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUo
c3JjLT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KEludFNpemUoMTQsIDEyKSA9PSBoZWxwZXIubV9sYXllclNpemUpOworICAgICAgICBFWFBFQ1Rf
VFJVRShJbnRSZWN0KDEsIDEsIDE0LCAxMikgPT0gaGVscGVyLmRyYXdSZWN0KCkpOworICAgIH0K
KworICAgIC8vIEtlZXBUcmFuc2Zvcm0gd2l0aCBzY3JvbGwgYXBwbGllZC4KKyAgICBzcmMtPmNv
bnRleHQoKS0+c2F2ZSgpOworICAgIHNyYy0+Y29udGV4dCgpLT50cmFuc2xhdGUoMCwgLTEpOwor
ICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmlu
aXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6
T3BhcXVlQ29tcG9zaXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdp
bjo6S2VlcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgxLCAxLCAxNCwg
MTQpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworCisgICAgICAgIEVYUEVDVF9UUlVF
KHNyYy0+Y29udGV4dCgpICE9IGhlbHBlci5jb250ZXh0KCkpOworICAgICAgICBFWFBFQ1RfVFJV
RShJbnRTaXplKDE0LCAxNCkgPT0gaGVscGVyLm1fbGF5ZXJTaXplKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSW50UmVjdCgxLCAxLCAxNCwgMTQpID09IGhlbHBlci5kcmF3UmVjdCgpKTsKKyAgICB9
CisgICAgc3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKKworICAgIC8vIFVudHJhbnNmb3JtCisg
ICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5p
dChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpP
cGFxdWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2lu
OjpVbnRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgxLCAxLCAxNCwgMTIp
KTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworCisgICAgICAgIEVYUEVDVF9UUlVFKHNy
Yy0+Y29udGV4dCgpICE9IGhlbHBlci5jb250ZXh0KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShJ
bnRTaXplKDE0LCAxMikgPT0gaGVscGVyLm1fbGF5ZXJTaXplKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoSW50UmVjdCgwLCAwLCAxNCwgMTIpID09IGhlbHBlci5kcmF3UmVjdCgpKTsKKyAgICB9CisK
KyAgICAvLyBTY2FsZVRyYW5zZm9ybQorICAgIHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7CisgICAg
c3JjLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZSgyLjAsIDAuNSkpOworICAgIHsKKyAgICAg
ICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250
ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9z
aXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6U2NhbGVUcmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMiwgMiwgNiwgNikpOworICAgICAg
ICBoZWxwZXIuY29tcG9zaXRlKCk7CisKKyAgICAgICAgLy8gVGhlIGNvb3JkaW5hdGUgc3lzdGVt
IHNob3VsZCBiZSBiYXNlZCBpbiB0aGUgdXBwZXIgbGVmdCBvZiBvdXIgYm94LgorICAgICAgICAv
LyBJdCBzaG91bGQgYmUgcG9zdC10cmFuc2Zvcm1lZC4KKyAgICAgICAgRVhQRUNUX1RSVUUoc3Jj
LT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKElu
dFNpemUoMTIsIDMpID09IGhlbHBlci5tX2xheWVyU2l6ZSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KEludFJlY3QoMCwgMCwgMTIsIDMpID09IGhlbHBlci5kcmF3UmVjdCgpKTsKKyAgICB9CisgICAg
c3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKK30KKworVEVTVChUcmFuc3BhcmVuY3lXaW4sIFdo
aXRlTGF5ZXJQaXhlbFRlc3QpCit7CisgICAgLy8gTWFrZSBhIHRvdGFsIHRyYW5zcGFyZW50IGJ1
ZmZlciwgYW5kIGRyYXcgdGhlIHdoaXRlIGxheWVyIGluc2V0IGJ5IDEgcHguCisgICAgT3duUHRy
PEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAxNiksIERl
dmljZVJHQikpOworCisgICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAg
ICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJh
bnNwYXJlbmN5V2luOjpXaGl0ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVu
Y3lXaW46OktlZXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgMSwg
MTQsIDE0KSk7CisKKyAgICAgICAgLy8gQ29vcmRpbmF0ZXMgc2hvdWxkIGJlIGluIHRoZSBvcmln
aW5hbCBzcGFjZSwgbm90IHRoZSBsYXllci4KKyAgICAgICAgZHJhd05hdGl2ZVJlY3QoaGVscGVy
LmNvbnRleHQoKSwgMywgMywgMSwgMSk7CisgICAgICAgIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5u
ZWwoaGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKyAgICB9
CisKKyAgICAvLyBUaGUgZmluYWwgaW1hZ2Ugc2hvdWxkIGJlIHRyYW5zcGFyZW50IGFyb3VuZCB0
aGUgZWRnZXMgZm9yIDEgcHgsIHdoaXRlCisgICAgLy8gaW4gdGhlIG1pZGRsZSwgd2l0aCAoMywz
KSAod2hhdCB3ZSBkcmV3IGFib3ZlKSBiZWluZyBvcGFxdWUgYmxhY2suCisgICAgRVhQRUNUX0VR
KENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDAs
IDApKTsKKyAgICBFWFBFQ1RfRVEoQ29sb3IoQ29sb3I6OndoaXRlKSwgZ2V0UGl4ZWxBdChzcmMt
PmNvbnRleHQoKSwgMiwgMikpOworICAgIEVYUEVDVF9FUShDb2xvcihDb2xvcjo6YmxhY2spLCBn
ZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAzLCAzKSk7CisgICAgRVhQRUNUX0VRKENvbG9yKENv
bG9yOjp3aGl0ZSksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDQsIDQpKTsKK30KKworVEVT
VChUcmFuc3BhcmVuY3lXaW4sIE9wYXF1ZUNvbXBvc2l0ZUxheWVyUGl4ZWwpCit7CisgICAgQ29s
b3IgcmVkKDB4RkZGRjAwMDApLCBkYXJrUmVkKDB4RkZCRjAwMDApOworICAgIENvbG9yIGdyZWVu
KDB4RkYwMEZGMDApOworCisgICAgLy8gTWFrZSBhIHJlZCBib3R0b20gbGF5ZXIsIGZvbGxvd2Vk
IGJ5IGEgaGFsZiBncmVlbiBuZXh0IGxheWVyIEAgNTAlLgorICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZpY2VSR0IpKTsK
KworICAgIEZsb2F0UmVjdCBmdWxsUmVjdCgwLCAwLCAxNiwgMTYpOworICAgIHNyYy0+Y29udGV4
dCgpLT5maWxsUmVjdChmdWxsUmVjdCwgcmVkLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICBzcmMt
PmNvbnRleHQoKS0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigwLjUpOworICAgIEZsb2F0UmVjdCBy
aWdodEhhbGYoOCwgMCwgOCwgMTYpOworICAgIHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdChyaWdo
dEhhbGYsIGdyZWVuLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgIC8vIE1ha2UgYSB0cmFuc3Bh
cmVuY3kgbGF5ZXIgaW5zZXQgYnkgb25lIHBpeGVsLCBhbmQgZmlsbCBpdCBpbnNldCBieQorICAg
IC8vIGFub3RoZXIgcGl4ZWwgd2l0aCA1MCUgYmxhY2suCisgICAgeworICAgICAgICBUcmFuc3Bh
cmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpPcGFxdWVDb21wb3NpdGVMYXllciwK
KyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLAorICAg
ICAgICAgICAgICAgICAgICBJbnRSZWN0KDEsIDEsIDE0LCAxNCkpOworCisgICAgICAgIEZsb2F0
UmVjdCBpbm5lcigyLCAyLCAxMiwgMTIpOworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxs
UmVjdChpbm5lciwgQ29sb3IoMHg3ZjAwMDAwMCksIERldmljZUNvbG9yU3BhY2UpOworICAgICAg
ICAvLyBUaGVzZSBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGxheWVyLCB3aGlzaCBp
cyBpbnNldCBieSAxeDEKKyAgICAgICAgLy8gcGl4ZWxzIGZyb20gdGhlIHRvcCBsZWZ0LiBTbyB3
ZSdyZSBhY3R1YWxseSBjbGVhcmluZyAoMiwgMikgYW5kCisgICAgICAgIC8vICgxMywxMyksIHdo
aWNoIGFyZSB0aGUgZXh0cmVtZSBjb3JuZXJzIG9mIHRoZSBibGFjayBhcmVhIChhbmQgd2hpY2gK
KyAgICAgICAgLy8gd2UgY2hlY2sgYmVsb3cpLgorICAgICAgICBjbGVhclRvcExheWVyQWxwaGFQ
aXhlbChoZWxwZXIuY29udGV4dCgpLCAxLCAxKTsKKyAgICAgICAgY2xlYXJUb3BMYXllckFscGhh
UGl4ZWwoaGVscGVyLmNvbnRleHQoKSwgMTIsIDEyKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0
ZSgpOworICAgIH0KKworICAgIC8vIEZpbmlzaCB0aGUgY29tcG9zaXRpbmcuCisgICAgc3JjLT5j
b250ZXh0KCktPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHdl
IGdvdCB0aGUgcmlnaHQgdmFsdWVzLCBpdCBzaG91bGQgYmUgbGlrZSB0aGUgcmVjdGFuZ2xlIHdh
cworICAgIC8vIGRyYXduIHdpdGggaGFsZiBvcGFjaXR5IGV2ZW4gdGhvdWdoIHRoZSBhbHBoYSBj
aGFubmVsIGdvdCBtZXNzZWQgdXAuCisgICAgRVhQRUNUX0VRKHJlZCwgZ2V0UGl4ZWxBdChzcmMt
PmNvbnRleHQoKSwgMCwgMCkpOworICAgIEVYUEVDVF9FUShyZWQsIGdldFBpeGVsQXQoc3JjLT5j
b250ZXh0KCksIDEsIDEpKTsKKyAgICBFWFBFQ1RfRVEoZGFya1JlZCwgZ2V0UGl4ZWxBdChzcmMt
PmNvbnRleHQoKSwgMiwgMikpOworCisgICAgLy8gVGhlIGRhcmsgcmVzdWx0IGlzOgorICAgIC8v
ICAgKGJsYWNrIEAgNTAlIGF0b3AgZ3JlZW4pIEAgNTAlIGF0b3AgcmVkID0gMHhGRjgwNDAwMAor
ICAgIC8vIHdoaWNoIGlzIDB4RkZBMDIwMDAgKFNraWEgY29tcHV0ZXMgMHhGRkExMUYwMCBkdWUg
dG8gcm91bmRpbmcpLgorICAgIENvbG9yIGRhcmtHcmVlblJlZCgweEZGODAzZjAwKTsKKyAgICBF
WFBFQ1RfRVEoZGFya0dyZWVuUmVkLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAxMywgMTMp
KTsKKworICAgIC8vIDUwJSBncmVlbiBvbiB0b3Agb2YgcmVkID0gRkY4MDgwMDAgKHJvdW5kZWQg
dG8gd2hhdCBTa2lhIHdpbGwgcHJvZHVjZSkuCisgICAgQ29sb3IgZ3JlZW5SZWQoMHhGRjgwN0Yw
MCk7CisgICAgRVhQRUNUX0VRKGdyZWVuUmVkLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAx
NCwgMTQpKTsKKyAgICBFWFBFQ1RfRVEoZ3JlZW5SZWQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0
KCksIDE1LCAxNSkpOworfQorCisvLyBUZXN0cyB0aGF0IHRyYW5zbGF0aW9ucyBhcmUgcHJvcGVy
bHkgaGFuZGxlZCB3aGVuIHVzaW5nIEtlZXBUcmFuc2Zvcm0uCitURVNUKFRyYW5zcGFyZW5jeVdp
biwgVHJhbnNsYXRlT3BhcXVlQ29tcG9zaXRlTGF5ZXIpCit7CisgICAgLy8gRmlsbCB3aXRoIHdo
aXRlLgorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50
U2l6ZSgxNiwgMTYpLCBEZXZpY2VSR0IpKTsKKyAgICBDb2xvciB3aGl0ZSgweEZGRkZGRkZGKTsK
KyAgICBGbG9hdFJlY3QgZnVsbFJlY3QoMCwgMCwgMTYsIDE2KTsKKyAgICBzcmMtPmNvbnRleHQo
KS0+ZmlsbFJlY3QoZnVsbFJlY3QsIHdoaXRlLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgIC8v
IFNjcm9sbCBkb3duIGJ5IDggKGNvb3JkaW5hdGUgc3lzdGVtIGdvZXMgdXApLgorICAgIHNyYy0+
Y29udGV4dCgpLT5zYXZlKCk7CisgICAgc3JjLT5jb250ZXh0KCktPnRyYW5zbGF0ZSgwLCAtOCk7
CisKKyAgICBDb2xvciByZWQoMHhGRkZGMDAwMCk7CisgICAgQ29sb3IgZ3JlZW4oMHhGRjAwRkYw
MCk7CisgICAgeworICAgICAgICAvLyBNYWtlIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgYWZ0ZXIg
dHJhbnNsYXRpb24gd2lsbCBiZSBAICgwLCAtOCkgd2l0aAorICAgICAgICAvLyBzaXplIDE2eDE2
LgorICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5pdChz
cmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpPcGFx
dWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpL
ZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDE2LCAxNikp
OworCisgICAgICAgIC8vIERyYXcgYSByZWQgcGl4ZWwgYXQgKDE1LCAxNSkuIFRoaXMgc2hvdWxk
IGJlIHRoZSBhdCAoMTUsIDcpIGFmdGVyCisgICAgICAgIC8vIHRoZSB0cmFuc2Zvcm0uCisgICAg
ICAgIEZsb2F0UmVjdCBib3R0b21SaWdodCgxNSwgMTUsIDEsIDEpOworICAgICAgICBoZWxwZXIu
Y29udGV4dCgpLT5maWxsUmVjdChib3R0b21SaWdodCwgZ3JlZW4sIERldmljZUNvbG9yU3BhY2Up
OworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisgICAgfQorCisgICAgc3JjLT5jb250ZXh0
KCktPnJlc3RvcmUoKTsKKworICAgIC8vIENoZWNrIHRoZSBwaXhlbCB3ZSB3cm90ZS4KKyAgICBF
WFBFQ1RfRVEoZ3JlZW4sIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDE1LCA3KSk7Cit9CisK
Ky8vIFNhbWUgYXMgT3BhcXVlQ29tcG9zaXRlTGF5ZXIsIGJ1dCB0aGUgY2FudmFzIGhhcyBhIHJv
dGF0aW9uIGFwcGxpZWQuIFRoaXMKKy8vIHRlc3RzIHRoYXQgdGhlIHByb3BlcnQgdHJhbnNmb3Jt
IGlzIGFwcGxpZWQgdG8gdGhlIGNvcGllZCBsYXllci4KK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBS
b3RhdGVPcGFxdWVDb21wb3NpdGVMYXllcikKK3sKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNy
YyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYsIDE2KSwgRGV2aWNlUkdCKSk7CisKKyAg
ICAvLyBUaGUgYmFja2dyb3VuZCBpcyB3aGl0ZS4KKyAgICBDb2xvciB3aGl0ZSgweEZGRkZGRkZG
KTsKKyAgICBGbG9hdFJlY3QgZnVsbFJlY3QoMCwgMCwgMTYsIDE2KTsKKyAgICBzcmMtPmNvbnRl
eHQoKS0+ZmlsbFJlY3QoZnVsbFJlY3QsIHdoaXRlLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAg
IC8vIFJvdGF0ZSB0aGUgaW1hZ2UgYnkgOTAgZGVncmVlcy4gVGhpcyBtYXRyaXggaXMgdGhlIHNh
bWUgYXMKKyAgICAvLyBjdzkwLnJvdGF0ZSg5MCk7IGJ1dCBhdm9pZHMgcm91bmRpbmcgZXJyb3Jz
LiBSb3VuZGluZyBlcnJvcnMgY2FuIGNhdXNlCisgICAgLy8gU2tpYSB0byB0aGluayB0aGF0ICFy
ZWN0U3RheXNSZWN0KCkgYW5kIGl0IHdpbGwgZmFsbCB0aHJvdWdoIHRvIHBhdGgKKyAgICAvLyBk
cmF3aW5nIG1vZGUsIHdoaWNoIGluIHR1cm4gZ2l2ZXMgdXMgYW50aWFsaWFzaW5nLiBXZSB3YW50
IG5vCisgICAgLy8gYW50aWFsaWFzaW5nIG9yIG90aGVyIHJvdW5kaW5nIHByb2JsZW1zIHNpbmNl
IHdlJ3JlIHRlc3RpbmcgZXhhY3QgcGl4ZWwKKyAgICAvLyB2YWx1ZXMuCisgICAgc3JjLT5jb250
ZXh0KCktPnNhdmUoKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdzkwKDAsIDEsIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCwgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCAwLCAwLCAxKTsKKyAgICBzcmMtPmNvbnRleHQoKS0+Y29uY2F0Q1RNKGN3OTApOwor
CisgICAgLy8gTWFrZSBhIHRyYW5zcGFyZW5jeSBsYXllciBjb25zaXN0aW5nIG9mIGEgaG9yaXpv
bnRhbCBsaW5lIG9mIDUwJSBibGFjay4KKyAgICAvLyBTaW5jZSB0aGUgcm90YXRpb24gaXMgYXBw
bGllZCwgdGhpcyB3aWxsIGFjdHVhbGx5IGJlIGEgdmVydGljYWwgbGluZQorICAgIC8vIGRvd24g
dGhlIG1pZGRsZSBvZiB0aGUgaW1hZ2UuCisgICAgc3JjLT5jb250ZXh0KCktPmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoMC41KTsKKyAgICBGbG9hdFJlY3QgYmxhY2tSZWN0KDAsIC05LCAxNiwgMik7
CisgICAgQ29sb3IgYmxhY2soMHhGRjAwMDAwMCk7CisgICAgc3JjLT5jb250ZXh0KCktPmZpbGxS
ZWN0KGJsYWNrUmVjdCwgYmxhY2ssIERldmljZUNvbG9yU3BhY2UpOworCisgICAgLy8gTm93IGRy
YXcgNTAlIHJlZCBzcXVhcmUuCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYSB0cmFuc3BhcmVu
Y3kgaGVscGVyIGluc2V0IG9uZSBwaXhlbCBpbiB0aGUgYnVmZmVyLiBUaGUKKyAgICAgICAgLy8g
Y29vcmRpbmF0ZXMgYXJlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgaW50byB0aGlzIHNwYWNlLCBhbmQg
bWFwcyB0bworICAgICAgICAvLyBJbnRSZWN0KDEsIDEsIDE0LCAxNCkuCisgICAgICAgIFRyYW5z
cGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAor
ICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVy
LAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OlVudHJhbnNmb3JtLAorICAg
ICAgICAgICAgICAgICAgICBJbnRSZWN0KDEsIC0xNSwgMTQsIDE0KSk7CisKKyAgICAgICAgLy8g
RmlsbCB3aXRoIHJlZC4KKyAgICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QoaGVscGVy
LmRyYXdSZWN0KCksIENvbG9yKDB4N2Y3ZjAwMDApLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAg
ICAgY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbChoZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAg
aGVscGVyLmNvbXBvc2l0ZSgpOworICAgIH0KKworICAgIC8vIEZpbmlzaCB0aGUgY29tcG9zaXRp
bmcuCisgICAgc3JjLT5jb250ZXh0KCktPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICAv
LyBUb3AgY29ybmVyIHNob3VsZCBiZSB0aGUgb3JpZ2luYWwgYmFja2dyb3VuZC4KKyAgICBFWFBF
Q1RfRVEod2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDAsIDApKTsKKworICAgIC8v
IENoZWNrIHRoZSBzdHJpcGUgZG93biB0aGUgbWlkZGxlLCBmaXJzdCBhdCB0aGUgdG9wLi4uCisg
ICAgQ29sb3IgZ3JheSgweEZGODA4MDgwKTsKKyAgICBFWFBFQ1RfRVEod2hpdGUsIGdldFBpeGVs
QXQoc3JjLT5jb250ZXh0KCksIDYsIDApKTsKKyAgICBFWFBFQ1RfRVEoZ3JheSwgZ2V0UGl4ZWxB
dChzcmMtPmNvbnRleHQoKSwgNywgMCkpOworICAgIEVYUEVDVF9FUShncmF5LCBnZXRQaXhlbEF0
KHNyYy0+Y29udGV4dCgpLCA4LCAwKSk7CisgICAgRVhQRUNUX0VRKHdoaXRlLCBnZXRQaXhlbEF0
KHNyYy0+Y29udGV4dCgpLCA5LCAwKSk7CisKKyAgICAvLyAuLi5ub3cgYXQgdGhlIGJvdHRvbS4K
KyAgICBFWFBFQ1RfRVEod2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDYsIDE1KSk7
CisgICAgRVhQRUNUX0VRKGdyYXksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDcsIDE1KSk7
CisgICAgRVhQRUNUX0VRKGdyYXksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDgsIDE1KSk7
CisgICAgRVhQRUNUX0VRKHdoaXRlLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCA5LCAxNSkp
OworCisgICAgLy8gT3VyIHJlZCBzcXVhcmUgc2hvdWxkIGJlIDI1JSByZWQgb3ZlciB0aGUgdG9w
IG9mIHRob3NlIHR3by4KKyAgICBDb2xvciByZWR3aGl0ZSgweEZGZGZiZmJmKTsKKyAgICBDb2xv
ciByZWRncmF5KDB4RkY5ZjgwODApOworICAgIEVYUEVDVF9FUSh3aGl0ZSwgZ2V0UGl4ZWxBdChz
cmMtPmNvbnRleHQoKSwgMCwgMSkpOworICAgIEVYUEVDVF9FUShyZWR3aGl0ZSwgZ2V0UGl4ZWxB
dChzcmMtPmNvbnRleHQoKSwgMSwgMSkpOworICAgIEVYUEVDVF9FUShyZWR3aGl0ZSwgZ2V0UGl4
ZWxBdChzcmMtPmNvbnRleHQoKSwgNiwgMSkpOworICAgIEVYUEVDVF9FUShyZWRncmF5LCBnZXRQ
aXhlbEF0KHNyYy0+Y29udGV4dCgpLCA3LCAxKSk7CisgICAgRVhQRUNUX0VRKHJlZGdyYXksIGdl
dFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDgsIDEpKTsKKyAgICBFWFBFQ1RfRVEocmVkd2hpdGUs
IGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDksIDEpKTsKKyAgICBFWFBFQ1RfRVEocmVkd2hp
dGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDE0LCAxKSk7CisgICAgRVhQRUNUX0VRKHdo
aXRlLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAxNSwgMSkpOworCisgICAgLy8gQ29tcGxl
dGUgdGhlIDUwJSB0cmFuc3BhcmVudCBsYXllci4KKyAgICBzcmMtPmNvbnRleHQoKS0+cmVzdG9y
ZSgpOworfQorCitURVNUKFRyYW5zcGFyZW5jeVdpbiwgVHJhbnNsYXRlU2NhbGVPcGFxdWVDb21w
b3NpdGVMYXllcikKK3sKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKEludFNpemUoMTYsIDE2KSwgRGV2aWNlUkdCKSk7CisKKyAgICAvLyBUaGUgYmFja2dy
b3VuZCBpcyB3aGl0ZSBvbiB0b3Agd2l0aCByZWQgb24gYm90dG9tLgorICAgIENvbG9yIHdoaXRl
KDB4RkZGRkZGRkYpOworICAgIEZsb2F0UmVjdCB0b3BSZWN0KDAsIDAsIDE2LCA4KTsKKyAgICBz
cmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QodG9wUmVjdCwgd2hpdGUsIERldmljZUNvbG9yU3BhY2Up
OworICAgIENvbG9yIHJlZCgweEZGRkYwMDAwKTsKKyAgICBGbG9hdFJlY3QgYm90dG9tUmVjdCgw
LCA4LCAxNiwgOCk7CisgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGJvdHRvbVJlY3QsIHJl
ZCwgRGV2aWNlQ29sb3JTcGFjZSk7CisKKyAgICBzcmMtPmNvbnRleHQoKS0+c2F2ZSgpOworCisg
ICAgLy8gVHJhbnNsYXRlIGxlZnQgYnkgb25lIHBpeGVsLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxlZnQ7CisgICAgbGVmdC50cmFuc2xhdGUoLTEsIDApOworCisgICAgLy8gU2NhbGUgYnkg
MnguCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGU7CisgICAgc2NhbGUuc2NhbGUoMi4w
KTsKKyAgICBzcmMtPmNvbnRleHQoKS0+Y29uY2F0Q1RNKHNjYWxlKTsKKworICAgIC8vIFRoZW4g
dHJhbnNsYXRlIHVwIGJ5IG9uZSBwaXhlbCAod2hpY2ggd2lsbCBhY3R1YWxseSBiZSAyIGR1ZSB0
byBzY2FsaW5nKS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB1cDsKKyAgICB1cC50cmFuc2xh
dGUoMCwgLTEpOworICAgIHNyYy0+Y29udGV4dCgpLT5jb25jYXRDVE0odXApOworCisgICAgLy8g
Tm93IGRyYXcgNTAlIHJlZCBzcXVhcmUuCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYSB0cmFu
c3BhcmVuY3kgaGVscGVyIGluc2V0IG9uZSBwaXhlbCBpbiB0aGUgYnVmZmVyLiBUaGUKKyAgICAg
ICAgLy8gY29vcmRpbmF0ZXMgYXJlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgaW50byB0aGlzIHNwYWNl
LCBhbmQgbWFwcyB0bworICAgICAgICAvLyBJbnRSZWN0KDEsIDEsIDE0LCAxNCkuCisgICAgICAg
IFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4
dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0
ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zv
cm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgLTE1LCAxNCwgMTQpKTsKKworICAg
ICAgICAvLyBGaWxsIHdpdGggcmVkLgorICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVj
dChoZWxwZXIuZHJhd1JlY3QoKSwgQ29sb3IoMHg3ZjdmMDAwMCksIERldmljZUNvbG9yU3BhY2Up
OworICAgICAgICBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKGhlbHBlci5jb250ZXh0KCkpOwor
ICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisgICAgfQorfQorCisvLyBUZXN0cyBzY2FsZSBt
b2RlIHdpdGggbm8gYWRkaXRpb25hbCBjb3B5LgorVEVTVChUcmFuc3BhcmVuY3lXaW4sIFNjYWxl
KQoreworICAgIC8vIENyZWF0ZSBhbiBvcGFxdWUgd2hpdGUgYnVmZmVyLgorICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZp
Y2VSR0IpKTsKKyAgICBGbG9hdFJlY3QgZnVsbEJ1ZmZlcigwLCAwLCAxNiwgMTYpOworICAgIHNy
Yy0+Y29udGV4dCgpLT5maWxsUmVjdChmdWxsQnVmZmVyLCBDb2xvcjo6d2hpdGUsIERldmljZUNv
bG9yU3BhY2UpOworCisgICAgLy8gU2NhbGUgYnkgMnguCisgICAgc3JjLT5jb250ZXh0KCktPnNh
dmUoKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZTsKKyAgICBzY2FsZS5zY2FsZSgy
LjApOworICAgIHNyYy0+Y29udGV4dCgpLT5jb25jYXRDVE0oc2NhbGUpOworCisgICAgLy8gU3Rh
cnQgZHJhd2luZyBhIHJlY3RhbmdsZSBmcm9tIDEtPjQuIFRoaXMgc2hvdWxkIGdldCBzY2FsZWQg
dG8gMi0+OC4KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAg
IGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3Bh
cmVuY3lXaW46Ok5vTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6
U2NhbGVUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgMSwgMywgMykp
OworCisgICAgICAgIC8vIFRoZSBjb250ZXh0IHNob3VsZCBub3cgaGF2ZSB0aGUgaWRlbnRpdHkg
dHJhbnNmb3JtIGFuZCB0aGUgcmV0dXJuZWQKKyAgICAgICAgLy8gcmVjdCBzaG91bGQgYmUgc2Nh
bGVkLgorICAgICAgICBFWFBFQ1RfVFJVRShoZWxwZXIuY29udGV4dCgpLT5nZXRDVE0oKS5pc0lk
ZW50aXR5KCkpOworICAgICAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLmRyYXdSZWN0KCkueCgpKTsK
KyAgICAgICAgRVhQRUNUX0VRKDIsIGhlbHBlci5kcmF3UmVjdCgpLnkoKSk7CisgICAgICAgIEVY
UEVDVF9FUSg4LCBoZWxwZXIuZHJhd1JlY3QoKS5yaWdodCgpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDgsIGhlbHBlci5kcmF3UmVjdCgpLmJvdHRvbSgpKTsKKworICAgICAgICAvLyBTZXQgdGhlIHBp
eGVsIGF0ICgyLCAyKSB0byBiZSB0cmFuc3BhcmVudC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgd2hl
bgorICAgICAgICAvLyB0aGUgaGVscGVyIGdvZXMgb3V0IG9mIHNjb3BlLiBXZSBkb24ndCB3YW50
IHRvIGNhbGwKKyAgICAgICAgLy8gY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbCBiZWNhdXNlIHRo
YXQgd2lsbCBhY3R1YWxseSBjbGVhciB0aGUgd2hvbGUKKyAgICAgICAgLy8gY2FudmFzIChzaW5j
ZSB3ZSBoYXZlIG5vIGV4dHJhIGxheWVyISkuCisgICAgICAgIFNrQml0bWFwJiBiaXRtYXAgPSBj
b25zdF9jYXN0PFNrQml0bWFwJj4oaGVscGVyLmNvbnRleHQoKS0+CisgICAgICAgICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuCisgICAgICAg
ICAgICBhY2Nlc3NCaXRtYXAoZmFsc2UpKTsKKyAgICAgICAgKmJpdG1hcC5nZXRBZGRyMzIoMiwg
MikgJj0gMHgwMEZGRkZGRjsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworICAgIH0KKwor
ICAgIHNyYy0+Y29udGV4dCgpLT5yZXN0b3JlKCk7CisKKyAgICAvLyBDaGVjayB0aGUgcGl4ZWwg
d2UgcHJldmlvdXNseSBtYWRlIHRyYW5zcGFyZW50LCBpdCBzaG91bGQgaGF2ZSBnb3R0ZW4KKyAg
ICAvLyBmaXhlZCBiYWNrIHVwIHRvIHdoaXRlLgorCisgICAgLy8gVGhlIGN1cnJlbnQgdmVyc2lv
biBkb2Vzbid0IGZpeHVwIHRyYW5zcGFyZW5jeSB3aGVuIHRoZXJlIGlzIG5vIGxheWVyLgorICAg
IC8vIFRoaXMgc2VlbXMgbm90IHRvIGJlIG5lY2Vzc2FyeSwgc28gd2UgZG9uJ3QgYm90aGVyLCBi
dXQgaWYgaXQgYmVjb21lcworICAgIC8vIG5lY2Vzc2FyeSwgdGhpcyBsaW5lIHNob3VsZCBiZSB1
bmNvbW1lbnRlZC4KKyAgICAvLyBFWFBFQ1RfRVEoQ29sb3IoQ29sb3I6OndoaXRlKSwgZ2V0UGl4
ZWxBdChzcmMtPmNvbnRleHQoKSwgMiwgMikpOworfQorCisvLyBUZXN0cyBzY2FsZSBtb2RlIHdp
dGggYW4gYWRkaXRpb25hbCBjb3B5IGZvciB0cmFuc3BhcmVuY3kuIFRoaXMgd2lsbCBoYXBwZW4K
Ky8vIGlmIHdlIGhhdmUgYSBzY2FsZWQgdGV4dGJveCwgZm9yIGV4YW1wbGUuIFdlYktpdCB3aWxs
IGNyZWF0ZSBhIG5ldworLy8gdHJhbnNwYXJlbmN5IGxheWVyLCBkcmF3IHRoZSB0ZXh0IGZpZWxk
LCB0aGVuIGRyYXcgdGhlIHRleHQgaW50byBpdCwgdGhlbgorLy8gY29tcG9zaXRlIHRoaXMgZG93
biB3aXRoIGFuIG9wYWNpdHkuCitURVNUKFRyYW5zcGFyZW5jeVdpbiwgU2NhbGVUcmFuc3BhcmVu
Y3kpCit7CisgICAgLy8gQ3JlYXRlIGFuIG9wYXF1ZSB3aGl0ZSBidWZmZXIuCisgICAgT3duUHRy
PEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAxNiksIERl
dmljZVJHQikpOworICAgIEZsb2F0UmVjdCBmdWxsQnVmZmVyKDAsIDAsIDE2LCAxNik7CisgICAg
c3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGZ1bGxCdWZmZXIsIENvbG9yOjp3aGl0ZSwgRGV2aWNl
Q29sb3JTcGFjZSk7CisKKyAgICAvLyBNYWtlIGFub3RoZXIgbGF5ZXIgKHdoaWNoIGR1cGxpY2F0
ZXMgaG93IFdlYktpdCB3aWxsIG1ha2UgdGhpcykuIFdlIGZpbGwKKyAgICAvLyB0aGUgdG9wIGhh
bGYgd2l0aCByZWQsIGFuZCBoYXZlIHRoZSBsYXllciBiZSA1MCUgb3BhcXVlLgorICAgIHNyYy0+
Y29udGV4dCgpLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDAuNSk7CisgICAgRmxvYXRSZWN0IHRv
cEhhbGYoMCwgMCwgMTYsIDgpOworICAgIHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdCh0b3BIYWxm
LCBDb2xvcigweEZGRkYwMDAwKSwgRGV2aWNlQ29sb3JTcGFjZSk7CisKKyAgICAvLyBTY2FsZSBi
eSAyeC4KKyAgICBzcmMtPmNvbnRleHQoKS0+c2F2ZSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHNjYWxlOworICAgIHNjYWxlLnNjYWxlKDIuMCk7CisgICAgc3JjLT5jb250ZXh0KCktPmNv
bmNhdENUTShzY2FsZSk7CisKKyAgICAvLyBNYWtlIGEgbGF5ZXIgaW5zZXQgdHdvIHBpeGVscyAo
YmVjYXVzZSBvZiBzY2FsaW5nLCB0aGlzIGlzIDItPjE0KS4gQW5kCisgICAgLy8gd2lsbCBpdCB3
aXRoIDUwJSBibGFjay4KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7Cisg
ICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBU
cmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyLAorICAgICAgICAgICAgICAgICAg
ICBUcmFuc3BhcmVuY3lXaW46OlNjYWxlVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0KDEsIDEsIDYsIDYpKTsKKworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVj
dChoZWxwZXIuZHJhd1JlY3QoKSwgQ29sb3IoMHg3ZjAwMDAwMCksIERldmljZUNvbG9yU3BhY2Up
OworICAgICAgICBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKGhlbHBlci5jb250ZXh0KCkpOwor
ICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisgICAgfQorCisgICAgLy8gRmluaXNoIHRoZSBs
YXllci4KKyAgICBzcmMtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworICAgIHNyYy0+Y29udGV4dCgp
LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAgQ29sb3IgcmVkQmFja2dyb3VuZCgweEZG
RkY4MDgwKTsgLy8gNTAlIHJlZCBjb21wb3NpdGVkIG9uIHdoaXRlLgorICAgIEVYUEVDVF9FUShy
ZWRCYWNrZ3JvdW5kLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAwLCAwKSk7CisgICAgRVhQ
RUNUX0VRKHJlZEJhY2tncm91bmQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDEsIDEpKTsK
KworICAgIC8vIFRvcCBoYWxmIChtaW51cyB0d28gcGl4ZWwgYm9yZGVyKSBzaG91bGQgYmUgNTAl
IGdyYXkgYXRvcCBvcGFxdWUKKyAgICAvLyByZWQgPSAweEZGODA0MTQxLiBUaGVuIHRoYXQncyBj
b21wb3NpdGVkIHdpdGggNTAlIHRyYW5zcGFyZW5jeSBvbiBzb2xpZAorICAgIC8vIHdoaXRlID0g
MHhGRkMwQTFBMS4KKyAgICBDb2xvciBkYXJrUmVkKDB4RkZCRjgwODApOworICAgIEVYUEVDVF9F
UShkYXJrUmVkLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAyLCAyKSk7CisgICAgRVhQRUNU
X0VRKGRhcmtSZWQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDcsIDcpKTsKKworICAgIC8v
IEJvdHRvbSBoYWxmIChtaW51cyBhIHR3byBwaXhlbCBib3JkZXIpIHNob3VsZCBiZSBhIGxheWVy
IHdpdGggNSUgZ3JheQorICAgIC8vIHdpdGggYW5vdGhlciA1MCUgb3BhY2l0eSBjb21wb3NpdGVk
IGF0b3Agd2hpdGUuCisgICAgQ29sb3IgZGFya1doaXRlKDB4RkZCRkJGQkYpOworICAgIEVYUEVD
VF9FUShkYXJrV2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDgsIDgpKTsKKyAgICBF
WFBFQ1RfRVEoZGFya1doaXRlLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAxMywgMTMpKTsK
KworICAgIENvbG9yIHdoaXRlKDB4RkZGRkZGRkYpOyAvLyBCYWNrZ3JvdW5kIGluIHRoZSBsb3dl
ci1yaWdodC4KKyAgICBFWFBFQ1RfRVEod2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCks
IDE0LCAxNCkpOworICAgIEVYUEVDVF9FUSh3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQo
KSwgMTUsIDE1KSk7Cit9CisKK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBUZXh0KQoreworICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYp
LCBEZXZpY2VSR0IpKTsKKworICAgIC8vIE91ciB0ZXh0IHNob3VsZCBlbmQgdXAgNTAlIHRyYW5z
cGFyZW50IGJsdWUtZ3JlZW4uCisgICAgQ29sb3IgZnVsbFJlc3VsdCgweDgwMDA4MDgwKTsKKwor
ICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmlu
aXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6
VGV4dENvbXBvc2l0ZSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpLZWVw
VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDE2LCAxNikpOwor
ICAgICAgICBoZWxwZXIuc2V0VGV4dENvbXBvc2l0ZUNvbG9yKGZ1bGxSZXN1bHQpOworCisgICAg
ICAgIC8vIFdyaXRlIHNldmVyYWwgZGlmZmVyZW50IHNxdWFyZXMgdG8gc2ltdWxhdGUgQ2xlYXJU
eXBlLiBUaGVzZSBzaG91bGQKKyAgICAgICAgLy8gYWxsIHJlZHVjZSB0byAyLzMgY292ZXJhZ2Uu
CisgICAgICAgIEZsb2F0UmVjdCBwaXhlbCgwLCAwLCAxLCAxKTsKKyAgICAgICAgaGVscGVyLmNv
bnRleHQoKS0+ZmlsbFJlY3QocGl4ZWwsIDB4RkZGRjAwMDAsIERldmljZUNvbG9yU3BhY2UpOwor
ICAgICAgICBwaXhlbC5tb3ZlKDEuMGYsIDAuMGYpOworICAgICAgICBoZWxwZXIuY29udGV4dCgp
LT5maWxsUmVjdChwaXhlbCwgMHhGRjAwRkYwMCwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgICAg
IHBpeGVsLm1vdmUoMS4wZiwgMC4wZik7CisgICAgICAgIGhlbHBlci5jb250ZXh0KCktPmZpbGxS
ZWN0KHBpeGVsLCAweEZGMDAwMEZGLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAgICAgcGl4ZWwu
bW92ZSgxLjBmLCAwLjBmKTsKKyAgICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QocGl4
ZWwsIDB4RkYwMDgwODAsIERldmljZUNvbG9yU3BhY2UpOworICAgICAgICBwaXhlbC5tb3ZlKDEu
MGYsIDAuMGYpOworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChwaXhlbCwgMHhG
RjgwMDA4MCwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgICAgIHBpeGVsLm1vdmUoMS4wZiwgMC4w
Zik7CisgICAgICAgIGhlbHBlci5jb250ZXh0KCktPmZpbGxSZWN0KHBpeGVsLCAweEZGODA4MDAw
LCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgICAgICAvLyBUcnkgb25lIHdpdGggMTAwJSBjb3Zl
cmFnZSAob3BhcXVlIGJsYWNrKS4KKyAgICAgICAgcGl4ZWwubW92ZSgxLjBmLCAwLjBmKTsKKyAg
ICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QocGl4ZWwsIDB4RkYwMDAwMDAsIERldmlj
ZUNvbG9yU3BhY2UpOworCisgICAgICAgIC8vIE5vdyBtZXNzIHdpdGggdGhlIGFscGhhIGNoYW5u
ZWwuCisgICAgICAgIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwoaGVscGVyLmNvbnRleHQoKSk7
CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKyAgICB9CisKKyAgICBDb2xvciBvbmVUaGly
ZFJlc3VsdCgweDU1MDA1NTU1KTsgLy8gPSBmdWxsUmVzdWx0ICogMiAvIDMKKyAgICBFWFBFQ1Rf
RVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDAsIDApKTsKKyAg
ICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDEs
IDApKTsKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250
ZXh0KCksIDIsIDApKTsKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQo
c3JjLT5jb250ZXh0KCksIDMsIDApKTsKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdl
dFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDQsIDApKTsKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRS
ZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDUsIDApKTsKKyAgICBFWFBFQ1RfRVEo
ZnVsbFJlc3VsdCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgNiwgMCkpOworICAgIEVYUEVD
VF9FUShDb2xvcjo6dHJhbnNwYXJlbnQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDcsIDAp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9VbmlzY3Jp
YmVIZWxwZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGUy
NjJkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1VuaXNjcmliZUhl
bHBlclRlc3QuY3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiVW5pc2NyaWJlSGVscGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
VW5pc2NyaWJlVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBVbmlz
Y3JpYmVUZXN0KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBhbiBIRk9OVCB3aXRo
IHRoZSBnaXZlbiBuYW1lLiBUaGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgdG8gZnJlZQorICAgIC8v
IHRoaXMsIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBmcmVlZCBhdCB0aGUgZW5kIG9mIHRoZSB0
ZXN0LiBSZXR1cm5zIDAKKyAgICAvLyBvbiBmYWlsdXJlLiBPbiBzdWNjZXNzLCB0aGUKKyAgICBI
Rk9OVCBNYWtlRm9udChjb25zdCB3Y2hhcl90KiBmb250TmFtZSwgU0NSSVBUX0NBQ0hFKiogY2Fj
aGUpCisgICAgeworICAgICAgICBMT0dGT05UIGxmOworICAgICAgICBtZW1zZXQoJmxmLCAwLCBz
aXplb2YoTE9HRk9OVCkpOworICAgICAgICBsZi5sZkhlaWdodCA9IDIwOworICAgICAgICB3Y3Nj
cHlfcyhsZi5sZkZhY2VOYW1lLCBmb250TmFtZSk7CisKKyAgICAgICAgSEZPTlQgaGZvbnQgPSBD
cmVhdGVGb250SW5kaXJlY3QoJmxmKTsKKyAgICAgICAgaWYgKCFoZm9udCkKKyAgICAgICAgICAg
IHJldHVybiAwOworCisgICAgICAgICpjYWNoZSA9IG5ldyBTQ1JJUFRfQ0FDSEU7CisgICAgICAg
ICoqY2FjaGUgPSAwOworICAgICAgICBjcmVhdGVkRm9udHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGhmb250LCAqY2FjaGUpKTsKKyAgICAgICAgcmV0dXJuIGhmb250OworICAgIH0KKworcHJvdGVj
dGVkOgorICAgIC8vIERlZmF1bHQgZm9udCBwcm9wZXJ0aWVzIHN0cnVjdHVyZSBmb3IgdGVzdHMg
dG8gdXNlLgorICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyBwcm9wZXJ0aWVzOworCitwcml2YXRl
OgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBtZW1zZXQoJnByb3Bl
cnRpZXMsIDAsIHNpemVvZihTQ1JJUFRfRk9OVFBST1BFUlRJRVMpKTsKKyAgICAgICAgcHJvcGVy
dGllcy5jQnl0ZXMgPSBzaXplb2YoU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKTsKKyAgICAgICAgcHJv
cGVydGllcy53Z0JsYW5rID0gJyAnOworICAgICAgICBwcm9wZXJ0aWVzLndnRGVmYXVsdCA9ICc/
JzsgLy8gVXNlZCB3aGVuIHRoZSBjaGFyIGlzIG5vdCBpbiB0aGUgZm9udC4KKyAgICAgICAgcHJv
cGVydGllcy53Z0ludmFsaWQgPSAnIyc7IC8vIFVzZWQgZm9yIGludmFsaWQgY2hhcmFjdGVycy4K
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgLy8g
RnJlZSBhbnkgYWxsb2NhdGVkIGZvbnRzLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNyZWF0ZWRGb250cy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgRGVsZXRlT2JqZWN0KGNy
ZWF0ZWRGb250c1tpXS5maXJzdCk7CisgICAgICAgICAgICBTY3JpcHRGcmVlQ2FjaGUoY3JlYXRl
ZEZvbnRzW2ldLnNlY29uZCk7CisgICAgICAgICAgICBkZWxldGUgY3JlYXRlZEZvbnRzW2ldLnNl
Y29uZDsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVkRm9udHMuY2xlYXIoKTsKKyAgICB9CisK
KyAgICAvLyBUcmFja3MgYWxsb2NhdGVkIGZvbnRzIHNvIHdlIGNhbiBkZWxldGUgdGhlbSBhdCB0
aGUgZW5kIG9mIHRoZSB0ZXN0LgorICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgcG9pbnRlciBpcyBo
ZWFwIGFsbG9jYXRlZCBhbmQgbXVzdCBiZSBmcmVlZC4KKyAgICBWZWN0b3I8IHN0ZDo6cGFpcjxI
Rk9OVCwgU0NSSVBUX0NBQ0hFKj4gPiBjcmVhdGVkRm9udHM7Cit9OworCisvLyBUaGlzIHRlc3Qg
dGVzdHMgZ2l2aW5nIFVuaXNjcmliZSBhIHZlcnkgbGFyZ2UgYnVmZmVyLCB3aGljaCB3aWxsIGNh
dXNlIGEKKy8vIGZhaWx1cmUuCitURVNUX0YoVW5pc2NyaWJlVGVzdCwgVG9vQmlnKQoreworICAg
IC8vIE1ha2UgYSBsYXJnZSBzdHJpbmcgd2l0aCBhbiBlIHdpdGggYSB6aWxsaW9uIGNvbWJpbmlu
ZyBhY2NlbnRzLgorICAgIFN0cmluZyBpbnB1dChMImUiKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDEwMDAwMDsgaSsrKQorICAgICAgICBpbnB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+
KDB4MzAxKSk7IC8vIENvbWJpbmluZyBhY3V0ZSBhY2NlbnQuCisKKyAgICBTQ1JJUFRfQ0FDSEUq
IHNjcmlwdENhY2hlOworICAgIEhGT05UIGhmb250ID0gTWFrZUZvbnQoTCJUaW1lcyBOZXcgUm9t
YW4iLCAmc2NyaXB0Q2FjaGUpOworICAgIEFTU0VSVF9UUlVFKGhmb250KTsKKworICAgIC8vIFRl
c3QgYSBsb25nIHN0cmluZyB3aXRob3V0IHRoZSBub3JtYWwgbGVuZ3RoIHByb3RlY3Rpb24gd2Ug
aGF2ZS4gVGhpcworICAgIC8vIHdpbGwgY2F1c2Ugc2hhcGluZyB0byBmYWlsLgorICAgIHsKKyAg
ICAgICAgVW5pc2NyaWJlSGVscGVyIHVuaXNjcmliZSgKKyAgICAgICAgICAgIGlucHV0LmNoYXJh
Y3RlcnMoKSwgc3RhdGljX2Nhc3Q8aW50PihpbnB1dC5sZW5ndGgoKSksCisgICAgICAgICAgICBm
YWxzZSwgaGZvbnQsIHNjcmlwdENhY2hlLCAmcHJvcGVydGllcyk7CisgICAgICAgIHVuaXNjcmli
ZS5pbml0V2l0aE9wdGlvbmFsTGVuZ3RoUHJvdGVjdGlvbihmYWxzZSk7CisKKyAgICAgICAgLy8g
VGhlcmUgc2hvdWxkIGJlIG9uZSBzaGFwaW5nIGVudHJ5LCB3aXRoIG5vdGhpbmcgaW4gaXQuCisg
ICAgICAgIEFTU0VSVF9FUSgxLCB1bmlzY3JpYmUubV9zaGFwZXMuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDAsIHVuaXNjcmliZS5tX3NoYXBlc1swXS5tX2dseXBocy5zaXplKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fbG9ncy5zaXplKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fdmlzdWFsQXR0cmli
dXRlcy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBd
Lm1fYWR2YW5jZS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hh
cGVzWzBdLm1fb2Zmc2V0cy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJl
Lm1fc2hhcGVzWzBdLm1fanVzdGlmeS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5p
c2NyaWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0EpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5p
c2NyaWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0IpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5p
c2NyaWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0MpOworCisgICAgICAgIC8vIFRoZSBzaXplcyBv
ZiB0aGUgb3RoZXIgc3R1ZmYgc2hvdWxkIG1hdGNoIHRoZSBzaGFwaW5nIGVudHJ5LgorICAgICAg
ICBFWFBFQ1RfRVEoMSwgdW5pc2NyaWJlLm1fcnVucy5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMSwgdW5pc2NyaWJlLm1fc2NyZWVuT3JkZXIuc2l6ZSgpKTsKKworICAgICAgICAvLyBDaGVj
ayB0aGF0IHRoZSB2YXJpb3VzIHF1ZXJ5aW5nIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGVtcHR5IGNh
c2UKKyAgICAgICAgLy8gcHJvcGVybHkuCisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUu
d2lkdGgoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUuZmlyc3RHbHlwaEZvckNo
YXJhY3RlcigwKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUuZmlyc3RHbHlwaEZv
ckNoYXJhY3RlcigxMDAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUueFRvQ2hh
cmFjdGVyKDApKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHVuaXNjcmliZS54VG9DaGFyYWN0ZXIo
MTAwMCkpOworICAgIH0KKworICAgIC8vIE5vdyB0ZXN0IHRoZSB2ZXJ5IGxhcmdlIHN0cmluZyBh
bmQgbWFrZSBzdXJlIGl0IGlzIGhhbmRsZWQgcHJvcGVybHkgYnkKKyAgICAvLyB0aGUgbGVuZ3Ro
IHByb3RlY3Rpb24uCisgICAgeworICAgICAgICBVbmlzY3JpYmVIZWxwZXIgdW5pc2NyaWJlKAor
ICAgICAgICAgICAgaW5wdXQuY2hhcmFjdGVycygpLCBzdGF0aWNfY2FzdDxpbnQ+KGlucHV0Lmxl
bmd0aCgpKSwKKyAgICAgICAgICAgIGZhbHNlLCBoZm9udCwgc2NyaXB0Q2FjaGUsICZwcm9wZXJ0
aWVzKTsKKyAgICAgICAgdW5pc2NyaWJlLmluaXRXaXRoT3B0aW9uYWxMZW5ndGhQcm90ZWN0aW9u
KHRydWUpOworCisgICAgICAgIC8vIFRoZXJlIHNob3VsZCBiZSAwIHJ1bnMgYW5kIHNoYXBlcy4K
KyAgICAgICAgRVhQRUNUX0VRKDAsIHVuaXNjcmliZS5tX3J1bnMuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDAsIHVuaXNjcmliZS5tX3NoYXBlcy5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMCwgdW5pc2NyaWJlLm1fc2NyZWVuT3JkZXIuc2l6ZSgpKTsKKworICAgICAgICBFWFBFQ1Rf
RVEoMCwgdW5pc2NyaWJlLndpZHRoKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJl
LmZpcnN0R2x5cGhGb3JDaGFyYWN0ZXIoMCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2Ny
aWJlLmZpcnN0R2x5cGhGb3JDaGFyYWN0ZXIoMTAwMCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwg
dW5pc2NyaWJlLnhUb0NoYXJhY3RlcigwKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3Jp
YmUueFRvQ2hhcmFjdGVyKDEwMDApKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47986</attachid>
            <date>2010-02-02 18:38:09 -0800</date>
            <delta_ts>2010-02-03 16:58:54 -0800</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-34509-20100202183808.patch</filename>
            <type>text/plain</type>
            <size>35400</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDRmNjIzMDkuLjNiMGI0ZDYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI1IEBACisyMDEwLTAyLTAyICBZYWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQgYSBz
aG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBXZWJLaXQu
Z3lwOgorICAgICAgICAqIHRlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJFQ1RUb0Zsb2F0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3
TmF0aXZlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQaXhlbEF0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6Y2xl
YXJUb3BMYXllckFscGhhUGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9VbmlzY3JpYmVIZWxwZXJU
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVUZXN0OjpVbmlzY3Jp
YmVUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZVRlc3Q6Ok1ha2VGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZVRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6
OlVuaXNjcmliZVRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisK
IDIwMTAtMDItMDIgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMzA0OWI3
My4uNzRiMzRlYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTQ1MSw2ICs0NTEsMTQgQEAKICAgICAgICAg
ICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAndGVzdHMvUnVu
QWxsVGVzdHMuY3BwJywKICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAnY29uZGl0aW9ucyc6
IFsKKyAgICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKKyAgICAgICAgICAgICAgICAgICAg
J3NvdXJjZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvVHJhbnNwYXJlbmN5
V2luVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1VuaXNjcmliZUhl
bHBlclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICB9
XSwKKyAgICAgICAgICAgIF0sCiAgICAgICAgIH0sCiAgICAgXSwgIyB0YXJnZXRzCiB9CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkMGVjZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcApAQCAtMCwwICsxLDY5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVk
ZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlRyYW5zcGFyZW5jeVdpbi5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIEZsb2F0UmVjdCBS
RUNUVG9GbG9hdFJlY3QoY29uc3QgUkVDVCogcmVjdCkKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0
KHN0YXRpY19jYXN0PGZsb2F0PihyZWN0LT5sZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PGZsb2F0PihyZWN0LT50b3ApLAorICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCksCisgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKSk7Cit9CisK
K3N0YXRpYyB2b2lkIGRyYXdOYXRpdmVSZWN0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQorewor
ICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCk7CisgICAgSERDIGRjID0gY2FudmFzLT5iZWdpblBsYXRmb3JtUGFpbnQo
KTsKKworICAgIFJFQ1QgaW5uZXJSYzsKKyAgICBpbm5lclJjLmxlZnQgPSB4OworICAgIGlubmVy
UmMudG9wID0geTsKKyAgICBpbm5lclJjLnJpZ2h0ID0geCArIHc7CisgICAgaW5uZXJSYy5ib3R0
b20gPSB5ICsgaDsKKyAgICBGaWxsUmVjdChkYywgJmlubmVyUmMsCisgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxIQlJVU0g+KEdldFN0b2NrT2JqZWN0KEJMQUNLX0JSVVNIKSkpOworCisg
ICAgY2FudmFzLT5lbmRQbGF0Zm9ybVBhaW50KCk7Cit9CisKK3N0YXRpYyBDb2xvciBnZXRQaXhl
bEF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50IHgsIGludCB5KQoreworICAgIGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkt
PgorICAgICAgICBnZXRUb3BQbGF0Zm9ybURldmljZSgpLmFjY2Vzc0JpdG1hcChmYWxzZSk7Cisg
ICAgcmV0dXJuIENvbG9yKCpyZWludGVycHJldF9jYXN0PGNvbnN0IFJHQkEzMio+KGJpdG1hcC5n
ZXRBZGRyMzIoeCwgeSkpKTsKK30KKworLy8gUmVzZXRzIHRoZSB0b3AgbGF5ZXIncyBhbHBoYSBj
aGFubmVsIHRvIDAgZm9yIGVhY2ggcGl4ZWwuIFRoaXMgc2ltdWxhdGVzCisvLyBXaW5kb3dzIG1l
c3NpbmcgaXQgdXAuCitzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2Fz
dDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT4KKyAgICAgICAgY2FudmFz
KCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKGZhbHNlKSk7CisgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBiaXRtYXAuaGVpZ2h0KCk7IHkrKykgeworICAgICAgICB1aW50MzJf
dCogcm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBiaXRtYXAud2lkdGgoKTsgeCsrKQorICAgICAgICAgICAgcm93W3hdICY9IDB4MDBGRkZG
RkY7CisgICAgfQorfQorCisvLyBDbGVhcnMgdGhlIGFscGhhIGNoYW5uZWwgb24gdGhlIHNwZWNp
ZmllZCBwaXhlbC4KK3N0YXRpYyB2b2lkIGNsZWFyVG9wTGF5ZXJBbHBoYVBpeGVsKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgaW50IHgsIGludCB5KQoreworICAgIFNrQml0bWFwJiBiaXRtYXAg
PSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPgorICAg
ICAgICBjYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2Up
KTsKKyAgICAqYml0bWFwLmdldEFkZHIzMih4LCB5KSAmPSAweDAwRkZGRkZGOworfQorCitzdGF0
aWMgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBDb2xv
ciYgYykKK3sKKyAgICBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyBvbGRGbGFncyA9IG91dC5mbGFn
cyhzdGQ6Omlvc19iYXNlOjpoZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6OnNob3diYXNlKTsKKyAgICBvdXQgPDwgYy5y
Z2IoKTsKKyAgICBvdXQuZmxhZ3Mob2xkRmxhZ3MpOworICAgIHJldHVybiBvdXQ7Cit9CisKK1RF
U1QoVHJhbnNwYXJlbmN5V2luLCBOb0xheWVyKQoreworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
c3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNywgMTYpLCBEZXZpY2VSR0IpKTsKKwor
ICAgIC8vIEtlZXBUcmFuc2Zvcm0KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxw
ZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAg
ICAgICBUcmFuc3BhcmVuY3lXaW46Ok5vTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5z
cGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgx
LCAxLCAxNCwgMTIpKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSA9PSBo
ZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxNCwgMTIpID09
IGhlbHBlci5tX2xheWVyU2l6ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMSwgMSwg
MTQsIDEyKSA9PSBoZWxwZXIuZHJhd1JlY3QoKSk7CisgICAgfQorCisgICAgLy8gVW50cmFuc2Zv
cm0gaXMgbm90IGFsbG93ZWQgZm9yIE5vTGF5ZXIuCisKKyAgICAvLyBTY2FsZVRyYW5zZm9ybQor
ICAgIHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7CisgICAgc3JjLT5jb250ZXh0KCktPnNjYWxlKEZs
b2F0U2l6ZSgyLjAsIDAuNSkpOworICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBl
cjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAg
ICAgIFRyYW5zcGFyZW5jeVdpbjo6Tm9MYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNw
YXJlbmN5V2luOjpTY2FsZVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgy
LCAyLCA2LCA2KSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKworICAgICAgICAvLyBU
aGUgY29vcmRpbmF0ZSBzeXN0ZW0gc2hvdWxkIGJlIGJhc2VkIGluIHRoZSB1cHBlciBsZWZ0IG9m
IG91ciBib3guCisgICAgICAgIC8vIEl0IHNob3VsZCBiZSBwb3N0LXRyYW5zZm9ybWVkLgorICAg
ICAgICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSA9PSBoZWxwZXIuY29udGV4dCgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxMiwgMykgPT0gaGVscGVyLm1fbGF5ZXJTaXplKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCg0LCAxLCAxMiwgMykgPT0gaGVscGVyLmRyYXdS
ZWN0KCkpOworICAgIH0KKyAgICBzcmMtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworfQorCitURVNU
KFRyYW5zcGFyZW5jeVdpbiwgV2hpdGVMYXllcikKK3sKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYsIDE2KSwgRGV2aWNlUkdCKSk7CisK
KyAgICAvLyBLZWVwVHJhbnNmb3JtCisgICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVs
cGVyOworICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgVHJhbnNwYXJlbmN5V2luOjpXaGl0ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBU
cmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJl
Y3QoMSwgMSwgMTQsIDEyKSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKworICAgICAg
ICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSAhPSBoZWxwZXIuY29udGV4dCgpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxNCwgMTIpID09IGhlbHBlci5tX2xheWVyU2l6ZSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMSwgMSwgMTQsIDEyKSA9PSBoZWxwZXIuZHJhd1Jl
Y3QoKSk7CisgICAgfQorCisgICAgLy8gVW50cmFuc2Zvcm0KKyAgICB7CisgICAgICAgIFRyYW5z
cGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAor
ICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OldoaXRlTGF5ZXIsCisgICAgICAg
ICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6VW50cmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgIEludFJlY3QoMSwgMSwgMTQsIDEyKSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUo
KTsKKworICAgICAgICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSAhPSBoZWxwZXIuY29udGV4
dCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxNCwgMTIpID09IGhlbHBlci5tX2xh
eWVyU2l6ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMCwgMCwgMTQsIDEyKSA9PSBo
ZWxwZXIuZHJhd1JlY3QoKSk7CisgICAgfQorCisgICAgLy8gU2NhbGVUcmFuc2Zvcm0KKyAgICBz
cmMtPmNvbnRleHQoKS0+c2F2ZSgpOworICAgIHNyYy0+Y29udGV4dCgpLT5zY2FsZShGbG9hdFNp
emUoMi4wLCAwLjUpKTsKKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7Cisg
ICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBU
cmFuc3BhcmVuY3lXaW46OldoaXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFy
ZW5jeVdpbjo6U2NhbGVUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMiwg
MiwgNiwgNikpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisKKyAgICAgICAgLy8gVGhl
IGNvb3JkaW5hdGUgc3lzdGVtIHNob3VsZCBiZSBiYXNlZCBpbiB0aGUgdXBwZXIgbGVmdCBvZiBv
dXIgYm94LgorICAgICAgICAvLyBJdCBzaG91bGQgYmUgcG9zdC10cmFuc2Zvcm1lZC4KKyAgICAg
ICAgRVhQRUNUX1RSVUUoc3JjLT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQoKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKEludFNpemUoMTIsIDMpID09IGhlbHBlci5tX2xheWVyU2l6ZSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMCwgMCwgMTIsIDMpID09IGhlbHBlci5kcmF3UmVj
dCgpKTsKKyAgICB9CisgICAgc3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKK30KKworVEVTVChU
cmFuc3BhcmVuY3lXaW4sIFRleHRDb21wb3NpdGUpCit7CisgICAgT3duUHRyPEltYWdlQnVmZmVy
PiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAxNiksIERldmljZVJHQikpOwor
CisgICAgLy8gS2VlcFRyYW5zZm9ybSBpcyB0aGUgb25seSB2YWxpZCB0cmFuc2Zvcm0gbW9kZSBm
b3IgVGV4dENvbXBvc2l0ZS4KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7
CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAg
ICBUcmFuc3BhcmVuY3lXaW46OlRleHRDb21wb3NpdGUsCisgICAgICAgICAgICAgICAgICAgIFRy
YW5zcGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVj
dCgxLCAxLCAxNCwgMTIpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworCisgICAgICAg
IEVYUEVDVF9UUlVFKHNyYy0+Y29udGV4dCgpICE9IGhlbHBlci5jb250ZXh0KCkpOworICAgICAg
ICBFWFBFQ1RfVFJVRShJbnRTaXplKDE0LCAxMikgPT0gaGVscGVyLm1fbGF5ZXJTaXplKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCgxLCAxLCAxNCwgMTIpID09IGhlbHBlci5kcmF3UmVj
dCgpKTsKKyAgICB9Cit9CisKK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBPcGFxdWVDb21wb3NpdGVM
YXllcikKK3sKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KEludFNpemUoMTYsIDE2KSwgRGV2aWNlUkdCKSk7CisKKyAgICAvLyBLZWVwVHJhbnNmb3JtCisg
ICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5p
dChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpP
cGFxdWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2lu
OjpLZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDEsIDEsIDE0LCAx
MikpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUo
c3JjLT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KEludFNpemUoMTQsIDEyKSA9PSBoZWxwZXIubV9sYXllclNpemUpOworICAgICAgICBFWFBFQ1Rf
VFJVRShJbnRSZWN0KDEsIDEsIDE0LCAxMikgPT0gaGVscGVyLmRyYXdSZWN0KCkpOworICAgIH0K
KworICAgIC8vIEtlZXBUcmFuc2Zvcm0gd2l0aCBzY3JvbGwgYXBwbGllZC4KKyAgICBzcmMtPmNv
bnRleHQoKS0+c2F2ZSgpOworICAgIHNyYy0+Y29udGV4dCgpLT50cmFuc2xhdGUoMCwgLTEpOwor
ICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmlu
aXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6
T3BhcXVlQ29tcG9zaXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdp
bjo6S2VlcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgxLCAxLCAxNCwg
MTQpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworCisgICAgICAgIEVYUEVDVF9UUlVF
KHNyYy0+Y29udGV4dCgpICE9IGhlbHBlci5jb250ZXh0KCkpOworICAgICAgICBFWFBFQ1RfVFJV
RShJbnRTaXplKDE0LCAxNCkgPT0gaGVscGVyLm1fbGF5ZXJTaXplKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSW50UmVjdCgxLCAxLCAxNCwgMTQpID09IGhlbHBlci5kcmF3UmVjdCgpKTsKKyAgICB9
CisgICAgc3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKKworICAgIC8vIFVudHJhbnNmb3JtCisg
ICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5p
dChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpP
cGFxdWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2lu
OjpVbnRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgxLCAxLCAxNCwgMTIp
KTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworCisgICAgICAgIEVYUEVDVF9UUlVFKHNy
Yy0+Y29udGV4dCgpICE9IGhlbHBlci5jb250ZXh0KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShJ
bnRTaXplKDE0LCAxMikgPT0gaGVscGVyLm1fbGF5ZXJTaXplKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoSW50UmVjdCgwLCAwLCAxNCwgMTIpID09IGhlbHBlci5kcmF3UmVjdCgpKTsKKyAgICB9CisK
KyAgICAvLyBTY2FsZVRyYW5zZm9ybQorICAgIHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7CisgICAg
c3JjLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZSgyLjAsIDAuNSkpOworICAgIHsKKyAgICAg
ICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250
ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9z
aXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6U2NhbGVUcmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMiwgMiwgNiwgNikpOworICAgICAg
ICBoZWxwZXIuY29tcG9zaXRlKCk7CisKKyAgICAgICAgLy8gVGhlIGNvb3JkaW5hdGUgc3lzdGVt
IHNob3VsZCBiZSBiYXNlZCBpbiB0aGUgdXBwZXIgbGVmdCBvZiBvdXIgYm94LgorICAgICAgICAv
LyBJdCBzaG91bGQgYmUgcG9zdC10cmFuc2Zvcm1lZC4KKyAgICAgICAgRVhQRUNUX1RSVUUoc3Jj
LT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKElu
dFNpemUoMTIsIDMpID09IGhlbHBlci5tX2xheWVyU2l6ZSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KEludFJlY3QoMCwgMCwgMTIsIDMpID09IGhlbHBlci5kcmF3UmVjdCgpKTsKKyAgICB9CisgICAg
c3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKK30KKworVEVTVChUcmFuc3BhcmVuY3lXaW4sIFdo
aXRlTGF5ZXJQaXhlbFRlc3QpCit7CisgICAgLy8gTWFrZSBhIHRvdGFsIHRyYW5zcGFyZW50IGJ1
ZmZlciwgYW5kIGRyYXcgdGhlIHdoaXRlIGxheWVyIGluc2V0IGJ5IDEgcHguCisgICAgT3duUHRy
PEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAxNiksIERl
dmljZVJHQikpOworCisgICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAg
ICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJh
bnNwYXJlbmN5V2luOjpXaGl0ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVu
Y3lXaW46OktlZXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgMSwg
MTQsIDE0KSk7CisKKyAgICAgICAgLy8gQ29vcmRpbmF0ZXMgc2hvdWxkIGJlIGluIHRoZSBvcmln
aW5hbCBzcGFjZSwgbm90IHRoZSBsYXllci4KKyAgICAgICAgZHJhd05hdGl2ZVJlY3QoaGVscGVy
LmNvbnRleHQoKSwgMywgMywgMSwgMSk7CisgICAgICAgIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5u
ZWwoaGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKyAgICB9
CisKKyAgICAvLyBUaGUgZmluYWwgaW1hZ2Ugc2hvdWxkIGJlIHRyYW5zcGFyZW50IGFyb3VuZCB0
aGUgZWRnZXMgZm9yIDEgcHgsIHdoaXRlCisgICAgLy8gaW4gdGhlIG1pZGRsZSwgd2l0aCAoMywz
KSAod2hhdCB3ZSBkcmV3IGFib3ZlKSBiZWluZyBvcGFxdWUgYmxhY2suCisgICAgRVhQRUNUX0VR
KENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDAs
IDApKTsKKyAgICBFWFBFQ1RfRVEoQ29sb3IoQ29sb3I6OndoaXRlKSwgZ2V0UGl4ZWxBdChzcmMt
PmNvbnRleHQoKSwgMiwgMikpOworICAgIEVYUEVDVF9FUShDb2xvcihDb2xvcjo6YmxhY2spLCBn
ZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAzLCAzKSk7CisgICAgRVhQRUNUX0VRKENvbG9yKENv
bG9yOjp3aGl0ZSksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDQsIDQpKTsKK30KKworVEVT
VChUcmFuc3BhcmVuY3lXaW4sIE9wYXF1ZUNvbXBvc2l0ZUxheWVyUGl4ZWwpCit7CisgICAgQ29s
b3IgcmVkKDB4RkZGRjAwMDApLCBkYXJrUmVkKDB4RkZCRjAwMDApOworICAgIENvbG9yIGdyZWVu
KDB4RkYwMEZGMDApOworCisgICAgLy8gTWFrZSBhIHJlZCBib3R0b20gbGF5ZXIsIGZvbGxvd2Vk
IGJ5IGEgaGFsZiBncmVlbiBuZXh0IGxheWVyIEAgNTAlLgorICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZpY2VSR0IpKTsK
KworICAgIEZsb2F0UmVjdCBmdWxsUmVjdCgwLCAwLCAxNiwgMTYpOworICAgIHNyYy0+Y29udGV4
dCgpLT5maWxsUmVjdChmdWxsUmVjdCwgcmVkLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICBzcmMt
PmNvbnRleHQoKS0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigwLjUpOworICAgIEZsb2F0UmVjdCBy
aWdodEhhbGYoOCwgMCwgOCwgMTYpOworICAgIHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdChyaWdo
dEhhbGYsIGdyZWVuLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgIC8vIE1ha2UgYSB0cmFuc3Bh
cmVuY3kgbGF5ZXIgaW5zZXQgYnkgb25lIHBpeGVsLCBhbmQgZmlsbCBpdCBpbnNldCBieQorICAg
IC8vIGFub3RoZXIgcGl4ZWwgd2l0aCA1MCUgYmxhY2suCisgICAgeworICAgICAgICBUcmFuc3Bh
cmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpPcGFxdWVDb21wb3NpdGVMYXllciwK
KyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLAorICAg
ICAgICAgICAgICAgICAgICBJbnRSZWN0KDEsIDEsIDE0LCAxNCkpOworCisgICAgICAgIEZsb2F0
UmVjdCBpbm5lcigyLCAyLCAxMiwgMTIpOworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxs
UmVjdChpbm5lciwgQ29sb3IoMHg3ZjAwMDAwMCksIERldmljZUNvbG9yU3BhY2UpOworICAgICAg
ICAvLyBUaGVzZSBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGxheWVyLCB3aGlzaCBp
cyBpbnNldCBieSAxeDEKKyAgICAgICAgLy8gcGl4ZWxzIGZyb20gdGhlIHRvcCBsZWZ0LiBTbyB3
ZSdyZSBhY3R1YWxseSBjbGVhcmluZyAoMiwgMikgYW5kCisgICAgICAgIC8vICgxMywxMyksIHdo
aWNoIGFyZSB0aGUgZXh0cmVtZSBjb3JuZXJzIG9mIHRoZSBibGFjayBhcmVhIChhbmQgd2hpY2gK
KyAgICAgICAgLy8gd2UgY2hlY2sgYmVsb3cpLgorICAgICAgICBjbGVhclRvcExheWVyQWxwaGFQ
aXhlbChoZWxwZXIuY29udGV4dCgpLCAxLCAxKTsKKyAgICAgICAgY2xlYXJUb3BMYXllckFscGhh
UGl4ZWwoaGVscGVyLmNvbnRleHQoKSwgMTIsIDEyKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0
ZSgpOworICAgIH0KKworICAgIC8vIEZpbmlzaCB0aGUgY29tcG9zaXRpbmcuCisgICAgc3JjLT5j
b250ZXh0KCktPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICAvLyBDaGVjayB0aGF0IHdl
IGdvdCB0aGUgcmlnaHQgdmFsdWVzLCBpdCBzaG91bGQgYmUgbGlrZSB0aGUgcmVjdGFuZ2xlIHdh
cworICAgIC8vIGRyYXduIHdpdGggaGFsZiBvcGFjaXR5IGV2ZW4gdGhvdWdoIHRoZSBhbHBoYSBj
aGFubmVsIGdvdCBtZXNzZWQgdXAuCisgICAgRVhQRUNUX0VRKHJlZCwgZ2V0UGl4ZWxBdChzcmMt
PmNvbnRleHQoKSwgMCwgMCkpOworICAgIEVYUEVDVF9FUShyZWQsIGdldFBpeGVsQXQoc3JjLT5j
b250ZXh0KCksIDEsIDEpKTsKKyAgICBFWFBFQ1RfRVEoZGFya1JlZCwgZ2V0UGl4ZWxBdChzcmMt
PmNvbnRleHQoKSwgMiwgMikpOworCisgICAgLy8gVGhlIGRhcmsgcmVzdWx0IGlzOgorICAgIC8v
ICAgKGJsYWNrIEAgNTAlIGF0b3AgZ3JlZW4pIEAgNTAlIGF0b3AgcmVkID0gMHhGRjgwNDAwMAor
ICAgIC8vIHdoaWNoIGlzIDB4RkZBMDIwMDAgKFNraWEgY29tcHV0ZXMgMHhGRkExMUYwMCBkdWUg
dG8gcm91bmRpbmcpLgorICAgIENvbG9yIGRhcmtHcmVlblJlZCgweEZGODAzZjAwKTsKKyAgICBF
WFBFQ1RfRVEoZGFya0dyZWVuUmVkLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAxMywgMTMp
KTsKKworICAgIC8vIDUwJSBncmVlbiBvbiB0b3Agb2YgcmVkID0gRkY4MDgwMDAgKHJvdW5kZWQg
dG8gd2hhdCBTa2lhIHdpbGwgcHJvZHVjZSkuCisgICAgQ29sb3IgZ3JlZW5SZWQoMHhGRjgwN0Yw
MCk7CisgICAgRVhQRUNUX0VRKGdyZWVuUmVkLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAx
NCwgMTQpKTsKKyAgICBFWFBFQ1RfRVEoZ3JlZW5SZWQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0
KCksIDE1LCAxNSkpOworfQorCisvLyBUZXN0cyB0aGF0IHRyYW5zbGF0aW9ucyBhcmUgcHJvcGVy
bHkgaGFuZGxlZCB3aGVuIHVzaW5nIEtlZXBUcmFuc2Zvcm0uCitURVNUKFRyYW5zcGFyZW5jeVdp
biwgVHJhbnNsYXRlT3BhcXVlQ29tcG9zaXRlTGF5ZXIpCit7CisgICAgLy8gRmlsbCB3aXRoIHdo
aXRlLgorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50
U2l6ZSgxNiwgMTYpLCBEZXZpY2VSR0IpKTsKKyAgICBDb2xvciB3aGl0ZSgweEZGRkZGRkZGKTsK
KyAgICBGbG9hdFJlY3QgZnVsbFJlY3QoMCwgMCwgMTYsIDE2KTsKKyAgICBzcmMtPmNvbnRleHQo
KS0+ZmlsbFJlY3QoZnVsbFJlY3QsIHdoaXRlLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgIC8v
IFNjcm9sbCBkb3duIGJ5IDggKGNvb3JkaW5hdGUgc3lzdGVtIGdvZXMgdXApLgorICAgIHNyYy0+
Y29udGV4dCgpLT5zYXZlKCk7CisgICAgc3JjLT5jb250ZXh0KCktPnRyYW5zbGF0ZSgwLCAtOCk7
CisKKyAgICBDb2xvciByZWQoMHhGRkZGMDAwMCk7CisgICAgQ29sb3IgZ3JlZW4oMHhGRjAwRkYw
MCk7CisgICAgeworICAgICAgICAvLyBNYWtlIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgYWZ0ZXIg
dHJhbnNsYXRpb24gd2lsbCBiZSBAICgwLCAtOCkgd2l0aAorICAgICAgICAvLyBzaXplIDE2eDE2
LgorICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5pdChz
cmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpPcGFx
dWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpL
ZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDE2LCAxNikp
OworCisgICAgICAgIC8vIERyYXcgYSByZWQgcGl4ZWwgYXQgKDE1LCAxNSkuIFRoaXMgc2hvdWxk
IGJlIHRoZSBhdCAoMTUsIDcpIGFmdGVyCisgICAgICAgIC8vIHRoZSB0cmFuc2Zvcm0uCisgICAg
ICAgIEZsb2F0UmVjdCBib3R0b21SaWdodCgxNSwgMTUsIDEsIDEpOworICAgICAgICBoZWxwZXIu
Y29udGV4dCgpLT5maWxsUmVjdChib3R0b21SaWdodCwgZ3JlZW4sIERldmljZUNvbG9yU3BhY2Up
OworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisgICAgfQorCisgICAgc3JjLT5jb250ZXh0
KCktPnJlc3RvcmUoKTsKKworICAgIC8vIENoZWNrIHRoZSBwaXhlbCB3ZSB3cm90ZS4KKyAgICBF
WFBFQ1RfRVEoZ3JlZW4sIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDE1LCA3KSk7Cit9CisK
Ky8vIFNhbWUgYXMgT3BhcXVlQ29tcG9zaXRlTGF5ZXIsIGJ1dCB0aGUgY2FudmFzIGhhcyBhIHJv
dGF0aW9uIGFwcGxpZWQuIFRoaXMKKy8vIHRlc3RzIHRoYXQgdGhlIHByb3BlcnQgdHJhbnNmb3Jt
IGlzIGFwcGxpZWQgdG8gdGhlIGNvcGllZCBsYXllci4KK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBS
b3RhdGVPcGFxdWVDb21wb3NpdGVMYXllcikKK3sKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNy
YyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYsIDE2KSwgRGV2aWNlUkdCKSk7CisKKyAg
ICAvLyBUaGUgYmFja2dyb3VuZCBpcyB3aGl0ZS4KKyAgICBDb2xvciB3aGl0ZSgweEZGRkZGRkZG
KTsKKyAgICBGbG9hdFJlY3QgZnVsbFJlY3QoMCwgMCwgMTYsIDE2KTsKKyAgICBzcmMtPmNvbnRl
eHQoKS0+ZmlsbFJlY3QoZnVsbFJlY3QsIHdoaXRlLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAg
IC8vIFJvdGF0ZSB0aGUgaW1hZ2UgYnkgOTAgZGVncmVlcy4gVGhpcyBtYXRyaXggaXMgdGhlIHNh
bWUgYXMKKyAgICAvLyBjdzkwLnJvdGF0ZSg5MCk7IGJ1dCBhdm9pZHMgcm91bmRpbmcgZXJyb3Jz
LiBSb3VuZGluZyBlcnJvcnMgY2FuIGNhdXNlCisgICAgLy8gU2tpYSB0byB0aGluayB0aGF0ICFy
ZWN0U3RheXNSZWN0KCkgYW5kIGl0IHdpbGwgZmFsbCB0aHJvdWdoIHRvIHBhdGgKKyAgICAvLyBk
cmF3aW5nIG1vZGUsIHdoaWNoIGluIHR1cm4gZ2l2ZXMgdXMgYW50aWFsaWFzaW5nLiBXZSB3YW50
IG5vCisgICAgLy8gYW50aWFsaWFzaW5nIG9yIG90aGVyIHJvdW5kaW5nIHByb2JsZW1zIHNpbmNl
IHdlJ3JlIHRlc3RpbmcgZXhhY3QgcGl4ZWwKKyAgICAvLyB2YWx1ZXMuCisgICAgc3JjLT5jb250
ZXh0KCktPnNhdmUoKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdzkwKDAsIDEsIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCwgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCAwLCAwLCAxKTsKKyAgICBzcmMtPmNvbnRleHQoKS0+Y29uY2F0Q1RNKGN3OTApOwor
CisgICAgLy8gTWFrZSBhIHRyYW5zcGFyZW5jeSBsYXllciBjb25zaXN0aW5nIG9mIGEgaG9yaXpv
bnRhbCBsaW5lIG9mIDUwJSBibGFjay4KKyAgICAvLyBTaW5jZSB0aGUgcm90YXRpb24gaXMgYXBw
bGllZCwgdGhpcyB3aWxsIGFjdHVhbGx5IGJlIGEgdmVydGljYWwgbGluZQorICAgIC8vIGRvd24g
dGhlIG1pZGRsZSBvZiB0aGUgaW1hZ2UuCisgICAgc3JjLT5jb250ZXh0KCktPmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoMC41KTsKKyAgICBGbG9hdFJlY3QgYmxhY2tSZWN0KDAsIC05LCAxNiwgMik7
CisgICAgQ29sb3IgYmxhY2soMHhGRjAwMDAwMCk7CisgICAgc3JjLT5jb250ZXh0KCktPmZpbGxS
ZWN0KGJsYWNrUmVjdCwgYmxhY2ssIERldmljZUNvbG9yU3BhY2UpOworCisgICAgLy8gTm93IGRy
YXcgNTAlIHJlZCBzcXVhcmUuCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYSB0cmFuc3BhcmVu
Y3kgaGVscGVyIGluc2V0IG9uZSBwaXhlbCBpbiB0aGUgYnVmZmVyLiBUaGUKKyAgICAgICAgLy8g
Y29vcmRpbmF0ZXMgYXJlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgaW50byB0aGlzIHNwYWNlLCBhbmQg
bWFwcyB0bworICAgICAgICAvLyBJbnRSZWN0KDEsIDEsIDE0LCAxNCkuCisgICAgICAgIFRyYW5z
cGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAor
ICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVy
LAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OlVudHJhbnNmb3JtLAorICAg
ICAgICAgICAgICAgICAgICBJbnRSZWN0KDEsIC0xNSwgMTQsIDE0KSk7CisKKyAgICAgICAgLy8g
RmlsbCB3aXRoIHJlZC4KKyAgICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QoaGVscGVy
LmRyYXdSZWN0KCksIENvbG9yKDB4N2Y3ZjAwMDApLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAg
ICAgY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbChoZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAg
aGVscGVyLmNvbXBvc2l0ZSgpOworICAgIH0KKworICAgIC8vIEZpbmlzaCB0aGUgY29tcG9zaXRp
bmcuCisgICAgc3JjLT5jb250ZXh0KCktPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICAv
LyBUb3AgY29ybmVyIHNob3VsZCBiZSB0aGUgb3JpZ2luYWwgYmFja2dyb3VuZC4KKyAgICBFWFBF
Q1RfRVEod2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDAsIDApKTsKKworICAgIC8v
IENoZWNrIHRoZSBzdHJpcGUgZG93biB0aGUgbWlkZGxlLCBmaXJzdCBhdCB0aGUgdG9wLi4uCisg
ICAgQ29sb3IgZ3JheSgweEZGODA4MDgwKTsKKyAgICBFWFBFQ1RfRVEod2hpdGUsIGdldFBpeGVs
QXQoc3JjLT5jb250ZXh0KCksIDYsIDApKTsKKyAgICBFWFBFQ1RfRVEoZ3JheSwgZ2V0UGl4ZWxB
dChzcmMtPmNvbnRleHQoKSwgNywgMCkpOworICAgIEVYUEVDVF9FUShncmF5LCBnZXRQaXhlbEF0
KHNyYy0+Y29udGV4dCgpLCA4LCAwKSk7CisgICAgRVhQRUNUX0VRKHdoaXRlLCBnZXRQaXhlbEF0
KHNyYy0+Y29udGV4dCgpLCA5LCAwKSk7CisKKyAgICAvLyAuLi5ub3cgYXQgdGhlIGJvdHRvbS4K
KyAgICBFWFBFQ1RfRVEod2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDYsIDE1KSk7
CisgICAgRVhQRUNUX0VRKGdyYXksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDcsIDE1KSk7
CisgICAgRVhQRUNUX0VRKGdyYXksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDgsIDE1KSk7
CisgICAgRVhQRUNUX0VRKHdoaXRlLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCA5LCAxNSkp
OworCisgICAgLy8gT3VyIHJlZCBzcXVhcmUgc2hvdWxkIGJlIDI1JSByZWQgb3ZlciB0aGUgdG9w
IG9mIHRob3NlIHR3by4KKyAgICBDb2xvciByZWR3aGl0ZSgweEZGZGZiZmJmKTsKKyAgICBDb2xv
ciByZWRncmF5KDB4RkY5ZjgwODApOworICAgIEVYUEVDVF9FUSh3aGl0ZSwgZ2V0UGl4ZWxBdChz
cmMtPmNvbnRleHQoKSwgMCwgMSkpOworICAgIEVYUEVDVF9FUShyZWR3aGl0ZSwgZ2V0UGl4ZWxB
dChzcmMtPmNvbnRleHQoKSwgMSwgMSkpOworICAgIEVYUEVDVF9FUShyZWR3aGl0ZSwgZ2V0UGl4
ZWxBdChzcmMtPmNvbnRleHQoKSwgNiwgMSkpOworICAgIEVYUEVDVF9FUShyZWRncmF5LCBnZXRQ
aXhlbEF0KHNyYy0+Y29udGV4dCgpLCA3LCAxKSk7CisgICAgRVhQRUNUX0VRKHJlZGdyYXksIGdl
dFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDgsIDEpKTsKKyAgICBFWFBFQ1RfRVEocmVkd2hpdGUs
IGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDksIDEpKTsKKyAgICBFWFBFQ1RfRVEocmVkd2hp
dGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDE0LCAxKSk7CisgICAgRVhQRUNUX0VRKHdo
aXRlLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAxNSwgMSkpOworCisgICAgLy8gQ29tcGxl
dGUgdGhlIDUwJSB0cmFuc3BhcmVudCBsYXllci4KKyAgICBzcmMtPmNvbnRleHQoKS0+cmVzdG9y
ZSgpOworfQorCitURVNUKFRyYW5zcGFyZW5jeVdpbiwgVHJhbnNsYXRlU2NhbGVPcGFxdWVDb21w
b3NpdGVMYXllcikKK3sKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKEludFNpemUoMTYsIDE2KSwgRGV2aWNlUkdCKSk7CisKKyAgICAvLyBUaGUgYmFja2dy
b3VuZCBpcyB3aGl0ZSBvbiB0b3Agd2l0aCByZWQgb24gYm90dG9tLgorICAgIENvbG9yIHdoaXRl
KDB4RkZGRkZGRkYpOworICAgIEZsb2F0UmVjdCB0b3BSZWN0KDAsIDAsIDE2LCA4KTsKKyAgICBz
cmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QodG9wUmVjdCwgd2hpdGUsIERldmljZUNvbG9yU3BhY2Up
OworICAgIENvbG9yIHJlZCgweEZGRkYwMDAwKTsKKyAgICBGbG9hdFJlY3QgYm90dG9tUmVjdCgw
LCA4LCAxNiwgOCk7CisgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGJvdHRvbVJlY3QsIHJl
ZCwgRGV2aWNlQ29sb3JTcGFjZSk7CisKKyAgICBzcmMtPmNvbnRleHQoKS0+c2F2ZSgpOworCisg
ICAgLy8gVHJhbnNsYXRlIGxlZnQgYnkgb25lIHBpeGVsLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxlZnQ7CisgICAgbGVmdC50cmFuc2xhdGUoLTEsIDApOworCisgICAgLy8gU2NhbGUgYnkg
MnguCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGU7CisgICAgc2NhbGUuc2NhbGUoMi4w
KTsKKyAgICBzcmMtPmNvbnRleHQoKS0+Y29uY2F0Q1RNKHNjYWxlKTsKKworICAgIC8vIFRoZW4g
dHJhbnNsYXRlIHVwIGJ5IG9uZSBwaXhlbCAod2hpY2ggd2lsbCBhY3R1YWxseSBiZSAyIGR1ZSB0
byBzY2FsaW5nKS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB1cDsKKyAgICB1cC50cmFuc2xh
dGUoMCwgLTEpOworICAgIHNyYy0+Y29udGV4dCgpLT5jb25jYXRDVE0odXApOworCisgICAgLy8g
Tm93IGRyYXcgNTAlIHJlZCBzcXVhcmUuCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYSB0cmFu
c3BhcmVuY3kgaGVscGVyIGluc2V0IG9uZSBwaXhlbCBpbiB0aGUgYnVmZmVyLiBUaGUKKyAgICAg
ICAgLy8gY29vcmRpbmF0ZXMgYXJlIGJlZm9yZSB0cmFuc2Zvcm1pbmcgaW50byB0aGlzIHNwYWNl
LCBhbmQgbWFwcyB0bworICAgICAgICAvLyBJbnRSZWN0KDEsIDEsIDE0LCAxNCkuCisgICAgICAg
IFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4
dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0
ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zv
cm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgLTE1LCAxNCwgMTQpKTsKKworICAg
ICAgICAvLyBGaWxsIHdpdGggcmVkLgorICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVj
dChoZWxwZXIuZHJhd1JlY3QoKSwgQ29sb3IoMHg3ZjdmMDAwMCksIERldmljZUNvbG9yU3BhY2Up
OworICAgICAgICBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKGhlbHBlci5jb250ZXh0KCkpOwor
ICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisgICAgfQorfQorCisvLyBUZXN0cyBzY2FsZSBt
b2RlIHdpdGggbm8gYWRkaXRpb25hbCBjb3B5LgorVEVTVChUcmFuc3BhcmVuY3lXaW4sIFNjYWxl
KQoreworICAgIC8vIENyZWF0ZSBhbiBvcGFxdWUgd2hpdGUgYnVmZmVyLgorICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZp
Y2VSR0IpKTsKKyAgICBGbG9hdFJlY3QgZnVsbEJ1ZmZlcigwLCAwLCAxNiwgMTYpOworICAgIHNy
Yy0+Y29udGV4dCgpLT5maWxsUmVjdChmdWxsQnVmZmVyLCBDb2xvcjo6d2hpdGUsIERldmljZUNv
bG9yU3BhY2UpOworCisgICAgLy8gU2NhbGUgYnkgMnguCisgICAgc3JjLT5jb250ZXh0KCktPnNh
dmUoKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZTsKKyAgICBzY2FsZS5zY2FsZSgy
LjApOworICAgIHNyYy0+Y29udGV4dCgpLT5jb25jYXRDVE0oc2NhbGUpOworCisgICAgLy8gU3Rh
cnQgZHJhd2luZyBhIHJlY3RhbmdsZSBmcm9tIDEtPjQuIFRoaXMgc2hvdWxkIGdldCBzY2FsZWQg
dG8gMi0+OC4KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAg
IGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3Bh
cmVuY3lXaW46Ok5vTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6
U2NhbGVUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgMSwgMywgMykp
OworCisgICAgICAgIC8vIFRoZSBjb250ZXh0IHNob3VsZCBub3cgaGF2ZSB0aGUgaWRlbnRpdHkg
dHJhbnNmb3JtIGFuZCB0aGUgcmV0dXJuZWQKKyAgICAgICAgLy8gcmVjdCBzaG91bGQgYmUgc2Nh
bGVkLgorICAgICAgICBFWFBFQ1RfVFJVRShoZWxwZXIuY29udGV4dCgpLT5nZXRDVE0oKS5pc0lk
ZW50aXR5KCkpOworICAgICAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLmRyYXdSZWN0KCkueCgpKTsK
KyAgICAgICAgRVhQRUNUX0VRKDIsIGhlbHBlci5kcmF3UmVjdCgpLnkoKSk7CisgICAgICAgIEVY
UEVDVF9FUSg4LCBoZWxwZXIuZHJhd1JlY3QoKS5yaWdodCgpKTsKKyAgICAgICAgRVhQRUNUX0VR
KDgsIGhlbHBlci5kcmF3UmVjdCgpLmJvdHRvbSgpKTsKKworICAgICAgICAvLyBTZXQgdGhlIHBp
eGVsIGF0ICgyLCAyKSB0byBiZSB0cmFuc3BhcmVudC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgd2hl
bgorICAgICAgICAvLyB0aGUgaGVscGVyIGdvZXMgb3V0IG9mIHNjb3BlLiBXZSBkb24ndCB3YW50
IHRvIGNhbGwKKyAgICAgICAgLy8gY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbCBiZWNhdXNlIHRo
YXQgd2lsbCBhY3R1YWxseSBjbGVhciB0aGUgd2hvbGUKKyAgICAgICAgLy8gY2FudmFzIChzaW5j
ZSB3ZSBoYXZlIG5vIGV4dHJhIGxheWVyISkuCisgICAgICAgIFNrQml0bWFwJiBiaXRtYXAgPSBj
b25zdF9jYXN0PFNrQml0bWFwJj4oaGVscGVyLmNvbnRleHQoKS0+CisgICAgICAgICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuCisgICAgICAg
ICAgICBhY2Nlc3NCaXRtYXAoZmFsc2UpKTsKKyAgICAgICAgKmJpdG1hcC5nZXRBZGRyMzIoMiwg
MikgJj0gMHgwMEZGRkZGRjsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworICAgIH0KKwor
ICAgIHNyYy0+Y29udGV4dCgpLT5yZXN0b3JlKCk7CisKKyAgICAvLyBDaGVjayB0aGUgcGl4ZWwg
d2UgcHJldmlvdXNseSBtYWRlIHRyYW5zcGFyZW50LCBpdCBzaG91bGQgaGF2ZSBnb3R0ZW4KKyAg
ICAvLyBmaXhlZCBiYWNrIHVwIHRvIHdoaXRlLgorCisgICAgLy8gVGhlIGN1cnJlbnQgdmVyc2lv
biBkb2Vzbid0IGZpeHVwIHRyYW5zcGFyZW5jeSB3aGVuIHRoZXJlIGlzIG5vIGxheWVyLgorICAg
IC8vIFRoaXMgc2VlbXMgbm90IHRvIGJlIG5lY2Vzc2FyeSwgc28gd2UgZG9uJ3QgYm90aGVyLCBi
dXQgaWYgaXQgYmVjb21lcworICAgIC8vIG5lY2Vzc2FyeSwgdGhpcyBsaW5lIHNob3VsZCBiZSB1
bmNvbW1lbnRlZC4KKyAgICAvLyBFWFBFQ1RfRVEoQ29sb3IoQ29sb3I6OndoaXRlKSwgZ2V0UGl4
ZWxBdChzcmMtPmNvbnRleHQoKSwgMiwgMikpOworfQorCisvLyBUZXN0cyBzY2FsZSBtb2RlIHdp
dGggYW4gYWRkaXRpb25hbCBjb3B5IGZvciB0cmFuc3BhcmVuY3kuIFRoaXMgd2lsbCBoYXBwZW4K
Ky8vIGlmIHdlIGhhdmUgYSBzY2FsZWQgdGV4dGJveCwgZm9yIGV4YW1wbGUuIFdlYktpdCB3aWxs
IGNyZWF0ZSBhIG5ldworLy8gdHJhbnNwYXJlbmN5IGxheWVyLCBkcmF3IHRoZSB0ZXh0IGZpZWxk
LCB0aGVuIGRyYXcgdGhlIHRleHQgaW50byBpdCwgdGhlbgorLy8gY29tcG9zaXRlIHRoaXMgZG93
biB3aXRoIGFuIG9wYWNpdHkuCitURVNUKFRyYW5zcGFyZW5jeVdpbiwgU2NhbGVUcmFuc3BhcmVu
Y3kpCit7CisgICAgLy8gQ3JlYXRlIGFuIG9wYXF1ZSB3aGl0ZSBidWZmZXIuCisgICAgT3duUHRy
PEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAxNiksIERl
dmljZVJHQikpOworICAgIEZsb2F0UmVjdCBmdWxsQnVmZmVyKDAsIDAsIDE2LCAxNik7CisgICAg
c3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGZ1bGxCdWZmZXIsIENvbG9yOjp3aGl0ZSwgRGV2aWNl
Q29sb3JTcGFjZSk7CisKKyAgICAvLyBNYWtlIGFub3RoZXIgbGF5ZXIgKHdoaWNoIGR1cGxpY2F0
ZXMgaG93IFdlYktpdCB3aWxsIG1ha2UgdGhpcykuIFdlIGZpbGwKKyAgICAvLyB0aGUgdG9wIGhh
bGYgd2l0aCByZWQsIGFuZCBoYXZlIHRoZSBsYXllciBiZSA1MCUgb3BhcXVlLgorICAgIHNyYy0+
Y29udGV4dCgpLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDAuNSk7CisgICAgRmxvYXRSZWN0IHRv
cEhhbGYoMCwgMCwgMTYsIDgpOworICAgIHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdCh0b3BIYWxm
LCBDb2xvcigweEZGRkYwMDAwKSwgRGV2aWNlQ29sb3JTcGFjZSk7CisKKyAgICAvLyBTY2FsZSBi
eSAyeC4KKyAgICBzcmMtPmNvbnRleHQoKS0+c2F2ZSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHNjYWxlOworICAgIHNjYWxlLnNjYWxlKDIuMCk7CisgICAgc3JjLT5jb250ZXh0KCktPmNv
bmNhdENUTShzY2FsZSk7CisKKyAgICAvLyBNYWtlIGEgbGF5ZXIgaW5zZXQgdHdvIHBpeGVscyAo
YmVjYXVzZSBvZiBzY2FsaW5nLCB0aGlzIGlzIDItPjE0KS4gQW5kCisgICAgLy8gd2lsbCBpdCB3
aXRoIDUwJSBibGFjay4KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7Cisg
ICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBU
cmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyLAorICAgICAgICAgICAgICAgICAg
ICBUcmFuc3BhcmVuY3lXaW46OlNjYWxlVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0KDEsIDEsIDYsIDYpKTsKKworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVj
dChoZWxwZXIuZHJhd1JlY3QoKSwgQ29sb3IoMHg3ZjAwMDAwMCksIERldmljZUNvbG9yU3BhY2Up
OworICAgICAgICBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKGhlbHBlci5jb250ZXh0KCkpOwor
ICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisgICAgfQorCisgICAgLy8gRmluaXNoIHRoZSBs
YXllci4KKyAgICBzcmMtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworICAgIHNyYy0+Y29udGV4dCgp
LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAgQ29sb3IgcmVkQmFja2dyb3VuZCgweEZG
RkY4MDgwKTsgLy8gNTAlIHJlZCBjb21wb3NpdGVkIG9uIHdoaXRlLgorICAgIEVYUEVDVF9FUShy
ZWRCYWNrZ3JvdW5kLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAwLCAwKSk7CisgICAgRVhQ
RUNUX0VRKHJlZEJhY2tncm91bmQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDEsIDEpKTsK
KworICAgIC8vIFRvcCBoYWxmIChtaW51cyB0d28gcGl4ZWwgYm9yZGVyKSBzaG91bGQgYmUgNTAl
IGdyYXkgYXRvcCBvcGFxdWUKKyAgICAvLyByZWQgPSAweEZGODA0MTQxLiBUaGVuIHRoYXQncyBj
b21wb3NpdGVkIHdpdGggNTAlIHRyYW5zcGFyZW5jeSBvbiBzb2xpZAorICAgIC8vIHdoaXRlID0g
MHhGRkMwQTFBMS4KKyAgICBDb2xvciBkYXJrUmVkKDB4RkZCRjgwODApOworICAgIEVYUEVDVF9F
UShkYXJrUmVkLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAyLCAyKSk7CisgICAgRVhQRUNU
X0VRKGRhcmtSZWQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDcsIDcpKTsKKworICAgIC8v
IEJvdHRvbSBoYWxmIChtaW51cyBhIHR3byBwaXhlbCBib3JkZXIpIHNob3VsZCBiZSBhIGxheWVy
IHdpdGggNSUgZ3JheQorICAgIC8vIHdpdGggYW5vdGhlciA1MCUgb3BhY2l0eSBjb21wb3NpdGVk
IGF0b3Agd2hpdGUuCisgICAgQ29sb3IgZGFya1doaXRlKDB4RkZCRkJGQkYpOworICAgIEVYUEVD
VF9FUShkYXJrV2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDgsIDgpKTsKKyAgICBF
WFBFQ1RfRVEoZGFya1doaXRlLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAxMywgMTMpKTsK
KworICAgIENvbG9yIHdoaXRlKDB4RkZGRkZGRkYpOyAvLyBCYWNrZ3JvdW5kIGluIHRoZSBsb3dl
ci1yaWdodC4KKyAgICBFWFBFQ1RfRVEod2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCks
IDE0LCAxNCkpOworICAgIEVYUEVDVF9FUSh3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQo
KSwgMTUsIDE1KSk7Cit9CisKK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBUZXh0KQoreworICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYp
LCBEZXZpY2VSR0IpKTsKKworICAgIC8vIE91ciB0ZXh0IHNob3VsZCBlbmQgdXAgNTAlIHRyYW5z
cGFyZW50IGJsdWUtZ3JlZW4uCisgICAgQ29sb3IgZnVsbFJlc3VsdCgweDgwMDA4MDgwKTsKKwor
ICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmlu
aXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6
VGV4dENvbXBvc2l0ZSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpLZWVw
VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIDAsIDE2LCAxNikpOwor
ICAgICAgICBoZWxwZXIuc2V0VGV4dENvbXBvc2l0ZUNvbG9yKGZ1bGxSZXN1bHQpOworCisgICAg
ICAgIC8vIFdyaXRlIHNldmVyYWwgZGlmZmVyZW50IHNxdWFyZXMgdG8gc2ltdWxhdGUgQ2xlYXJU
eXBlLiBUaGVzZSBzaG91bGQKKyAgICAgICAgLy8gYWxsIHJlZHVjZSB0byAyLzMgY292ZXJhZ2Uu
CisgICAgICAgIEZsb2F0UmVjdCBwaXhlbCgwLCAwLCAxLCAxKTsKKyAgICAgICAgaGVscGVyLmNv
bnRleHQoKS0+ZmlsbFJlY3QocGl4ZWwsIDB4RkZGRjAwMDAsIERldmljZUNvbG9yU3BhY2UpOwor
ICAgICAgICBwaXhlbC5tb3ZlKDEuMGYsIDAuMGYpOworICAgICAgICBoZWxwZXIuY29udGV4dCgp
LT5maWxsUmVjdChwaXhlbCwgMHhGRjAwRkYwMCwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgICAg
IHBpeGVsLm1vdmUoMS4wZiwgMC4wZik7CisgICAgICAgIGhlbHBlci5jb250ZXh0KCktPmZpbGxS
ZWN0KHBpeGVsLCAweEZGMDAwMEZGLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAgICAgcGl4ZWwu
bW92ZSgxLjBmLCAwLjBmKTsKKyAgICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QocGl4
ZWwsIDB4RkYwMDgwODAsIERldmljZUNvbG9yU3BhY2UpOworICAgICAgICBwaXhlbC5tb3ZlKDEu
MGYsIDAuMGYpOworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChwaXhlbCwgMHhG
RjgwMDA4MCwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgICAgIHBpeGVsLm1vdmUoMS4wZiwgMC4w
Zik7CisgICAgICAgIGhlbHBlci5jb250ZXh0KCktPmZpbGxSZWN0KHBpeGVsLCAweEZGODA4MDAw
LCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgICAgICAvLyBUcnkgb25lIHdpdGggMTAwJSBjb3Zl
cmFnZSAob3BhcXVlIGJsYWNrKS4KKyAgICAgICAgcGl4ZWwubW92ZSgxLjBmLCAwLjBmKTsKKyAg
ICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QocGl4ZWwsIDB4RkYwMDAwMDAsIERldmlj
ZUNvbG9yU3BhY2UpOworCisgICAgICAgIC8vIE5vdyBtZXNzIHdpdGggdGhlIGFscGhhIGNoYW5u
ZWwuCisgICAgICAgIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwoaGVscGVyLmNvbnRleHQoKSk7
CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKyAgICB9CisKKyAgICBDb2xvciBvbmVUaGly
ZFJlc3VsdCgweDU1MDA1NTU1KTsgLy8gPSBmdWxsUmVzdWx0ICogMiAvIDMKKyAgICBFWFBFQ1Rf
RVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDAsIDApKTsKKyAg
ICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDEs
IDApKTsKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250
ZXh0KCksIDIsIDApKTsKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQo
c3JjLT5jb250ZXh0KCksIDMsIDApKTsKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdl
dFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDQsIDApKTsKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRS
ZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDUsIDApKTsKKyAgICBFWFBFQ1RfRVEo
ZnVsbFJlc3VsdCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgNiwgMCkpOworICAgIEVYUEVD
VF9FUShDb2xvcjo6dHJhbnNwYXJlbnQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDcsIDAp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9VbmlzY3Jp
YmVIZWxwZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGUy
NjJkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1VuaXNjcmliZUhl
bHBlclRlc3QuY3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiVW5pc2NyaWJlSGVscGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
VW5pc2NyaWJlVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBVbmlz
Y3JpYmVUZXN0KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBhbiBIRk9OVCB3aXRo
IHRoZSBnaXZlbiBuYW1lLiBUaGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgdG8gZnJlZQorICAgIC8v
IHRoaXMsIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBmcmVlZCBhdCB0aGUgZW5kIG9mIHRoZSB0
ZXN0LiBSZXR1cm5zIDAKKyAgICAvLyBvbiBmYWlsdXJlLiBPbiBzdWNjZXNzLCB0aGUKKyAgICBI
Rk9OVCBNYWtlRm9udChjb25zdCB3Y2hhcl90KiBmb250TmFtZSwgU0NSSVBUX0NBQ0hFKiogY2Fj
aGUpCisgICAgeworICAgICAgICBMT0dGT05UIGxmOworICAgICAgICBtZW1zZXQoJmxmLCAwLCBz
aXplb2YoTE9HRk9OVCkpOworICAgICAgICBsZi5sZkhlaWdodCA9IDIwOworICAgICAgICB3Y3Nj
cHlfcyhsZi5sZkZhY2VOYW1lLCBmb250TmFtZSk7CisKKyAgICAgICAgSEZPTlQgaGZvbnQgPSBD
cmVhdGVGb250SW5kaXJlY3QoJmxmKTsKKyAgICAgICAgaWYgKCFoZm9udCkKKyAgICAgICAgICAg
IHJldHVybiAwOworCisgICAgICAgICpjYWNoZSA9IG5ldyBTQ1JJUFRfQ0FDSEU7CisgICAgICAg
ICoqY2FjaGUgPSAwOworICAgICAgICBjcmVhdGVkRm9udHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGhmb250LCAqY2FjaGUpKTsKKyAgICAgICAgcmV0dXJuIGhmb250OworICAgIH0KKworcHJvdGVj
dGVkOgorICAgIC8vIERlZmF1bHQgZm9udCBwcm9wZXJ0aWVzIHN0cnVjdHVyZSBmb3IgdGVzdHMg
dG8gdXNlLgorICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyBwcm9wZXJ0aWVzOworCitwcml2YXRl
OgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBtZW1zZXQoJnByb3Bl
cnRpZXMsIDAsIHNpemVvZihTQ1JJUFRfRk9OVFBST1BFUlRJRVMpKTsKKyAgICAgICAgcHJvcGVy
dGllcy5jQnl0ZXMgPSBzaXplb2YoU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKTsKKyAgICAgICAgcHJv
cGVydGllcy53Z0JsYW5rID0gJyAnOworICAgICAgICBwcm9wZXJ0aWVzLndnRGVmYXVsdCA9ICc/
JzsgLy8gVXNlZCB3aGVuIHRoZSBjaGFyIGlzIG5vdCBpbiB0aGUgZm9udC4KKyAgICAgICAgcHJv
cGVydGllcy53Z0ludmFsaWQgPSAnIyc7IC8vIFVzZWQgZm9yIGludmFsaWQgY2hhcmFjdGVycy4K
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgLy8g
RnJlZSBhbnkgYWxsb2NhdGVkIGZvbnRzLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNyZWF0ZWRGb250cy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgRGVsZXRlT2JqZWN0KGNy
ZWF0ZWRGb250c1tpXS5maXJzdCk7CisgICAgICAgICAgICBTY3JpcHRGcmVlQ2FjaGUoY3JlYXRl
ZEZvbnRzW2ldLnNlY29uZCk7CisgICAgICAgICAgICBkZWxldGUgY3JlYXRlZEZvbnRzW2ldLnNl
Y29uZDsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVkRm9udHMuY2xlYXIoKTsKKyAgICB9CisK
KyAgICAvLyBUcmFja3MgYWxsb2NhdGVkIGZvbnRzIHNvIHdlIGNhbiBkZWxldGUgdGhlbSBhdCB0
aGUgZW5kIG9mIHRoZSB0ZXN0LgorICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgcG9pbnRlciBpcyBo
ZWFwIGFsbG9jYXRlZCBhbmQgbXVzdCBiZSBmcmVlZC4KKyAgICBWZWN0b3I8IHN0ZDo6cGFpcjxI
Rk9OVCwgU0NSSVBUX0NBQ0hFKj4gPiBjcmVhdGVkRm9udHM7Cit9OworCisvLyBUaGlzIHRlc3Qg
dGVzdHMgZ2l2aW5nIFVuaXNjcmliZSBhIHZlcnkgbGFyZ2UgYnVmZmVyLCB3aGljaCB3aWxsIGNh
dXNlIGEKKy8vIGZhaWx1cmUuCitURVNUX0YoVW5pc2NyaWJlVGVzdCwgVG9vQmlnKQoreworICAg
IC8vIE1ha2UgYSBsYXJnZSBzdHJpbmcgd2l0aCBhbiBlIHdpdGggYSB6aWxsaW9uIGNvbWJpbmlu
ZyBhY2NlbnRzLgorICAgIFN0cmluZyBpbnB1dChMImUiKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDEwMDAwMDsgaSsrKQorICAgICAgICBpbnB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+
KDB4MzAxKSk7IC8vIENvbWJpbmluZyBhY3V0ZSBhY2NlbnQuCisKKyAgICBTQ1JJUFRfQ0FDSEUq
IHNjcmlwdENhY2hlOworICAgIEhGT05UIGhmb250ID0gTWFrZUZvbnQoTCJUaW1lcyBOZXcgUm9t
YW4iLCAmc2NyaXB0Q2FjaGUpOworICAgIEFTU0VSVF9UUlVFKGhmb250KTsKKworICAgIC8vIFRl
c3QgYSBsb25nIHN0cmluZyB3aXRob3V0IHRoZSBub3JtYWwgbGVuZ3RoIHByb3RlY3Rpb24gd2Ug
aGF2ZS4gVGhpcworICAgIC8vIHdpbGwgY2F1c2Ugc2hhcGluZyB0byBmYWlsLgorICAgIHsKKyAg
ICAgICAgVW5pc2NyaWJlSGVscGVyIHVuaXNjcmliZSgKKyAgICAgICAgICAgIGlucHV0LmNoYXJh
Y3RlcnMoKSwgc3RhdGljX2Nhc3Q8aW50PihpbnB1dC5sZW5ndGgoKSksCisgICAgICAgICAgICBm
YWxzZSwgaGZvbnQsIHNjcmlwdENhY2hlLCAmcHJvcGVydGllcyk7CisgICAgICAgIHVuaXNjcmli
ZS5pbml0V2l0aE9wdGlvbmFsTGVuZ3RoUHJvdGVjdGlvbihmYWxzZSk7CisKKyAgICAgICAgLy8g
VGhlcmUgc2hvdWxkIGJlIG9uZSBzaGFwaW5nIGVudHJ5LCB3aXRoIG5vdGhpbmcgaW4gaXQuCisg
ICAgICAgIEFTU0VSVF9FUSgxLCB1bmlzY3JpYmUubV9zaGFwZXMuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDAsIHVuaXNjcmliZS5tX3NoYXBlc1swXS5tX2dseXBocy5zaXplKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fbG9ncy5zaXplKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fdmlzdWFsQXR0cmli
dXRlcy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBd
Lm1fYWR2YW5jZS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hh
cGVzWzBdLm1fb2Zmc2V0cy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJl
Lm1fc2hhcGVzWzBdLm1fanVzdGlmeS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5p
c2NyaWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0EpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5p
c2NyaWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0IpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5p
c2NyaWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0MpOworCisgICAgICAgIC8vIFRoZSBzaXplcyBv
ZiB0aGUgb3RoZXIgc3R1ZmYgc2hvdWxkIG1hdGNoIHRoZSBzaGFwaW5nIGVudHJ5LgorICAgICAg
ICBFWFBFQ1RfRVEoMSwgdW5pc2NyaWJlLm1fcnVucy5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMSwgdW5pc2NyaWJlLm1fc2NyZWVuT3JkZXIuc2l6ZSgpKTsKKworICAgICAgICAvLyBDaGVj
ayB0aGF0IHRoZSB2YXJpb3VzIHF1ZXJ5aW5nIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGVtcHR5IGNh
c2UKKyAgICAgICAgLy8gcHJvcGVybHkuCisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUu
d2lkdGgoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUuZmlyc3RHbHlwaEZvckNo
YXJhY3RlcigwKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUuZmlyc3RHbHlwaEZv
ckNoYXJhY3RlcigxMDAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUueFRvQ2hh
cmFjdGVyKDApKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHVuaXNjcmliZS54VG9DaGFyYWN0ZXIo
MTAwMCkpOworICAgIH0KKworICAgIC8vIE5vdyB0ZXN0IHRoZSB2ZXJ5IGxhcmdlIHN0cmluZyBh
bmQgbWFrZSBzdXJlIGl0IGlzIGhhbmRsZWQgcHJvcGVybHkgYnkKKyAgICAvLyB0aGUgbGVuZ3Ro
IHByb3RlY3Rpb24uCisgICAgeworICAgICAgICBVbmlzY3JpYmVIZWxwZXIgdW5pc2NyaWJlKAor
ICAgICAgICAgICAgaW5wdXQuY2hhcmFjdGVycygpLCBzdGF0aWNfY2FzdDxpbnQ+KGlucHV0Lmxl
bmd0aCgpKSwKKyAgICAgICAgICAgIGZhbHNlLCBoZm9udCwgc2NyaXB0Q2FjaGUsICZwcm9wZXJ0
aWVzKTsKKyAgICAgICAgdW5pc2NyaWJlLmluaXRXaXRoT3B0aW9uYWxMZW5ndGhQcm90ZWN0aW9u
KHRydWUpOworCisgICAgICAgIC8vIFRoZXJlIHNob3VsZCBiZSAwIHJ1bnMgYW5kIHNoYXBlcy4K
KyAgICAgICAgRVhQRUNUX0VRKDAsIHVuaXNjcmliZS5tX3J1bnMuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRKDAsIHVuaXNjcmliZS5tX3NoYXBlcy5zaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoMCwgdW5pc2NyaWJlLm1fc2NyZWVuT3JkZXIuc2l6ZSgpKTsKKworICAgICAgICBFWFBFQ1Rf
RVEoMCwgdW5pc2NyaWJlLndpZHRoKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJl
LmZpcnN0R2x5cGhGb3JDaGFyYWN0ZXIoMCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2Ny
aWJlLmZpcnN0R2x5cGhGb3JDaGFyYWN0ZXIoMTAwMCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwg
dW5pc2NyaWJlLnhUb0NoYXJhY3RlcigwKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3Jp
YmUueFRvQ2hhcmFjdGVyKDEwMDApKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48080</attachid>
            <date>2010-02-03 16:58:58 -0800</date>
            <delta_ts>2010-02-04 15:40:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34509-20100203165857.patch</filename>
            <type>text/plain</type>
            <size>35481</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDRmNjIzMDkuLjE4MjI3NGYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI2IEBACisyMDEwLTAyLTAyICBZYWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwc3RyZWFt
aW5nIGd0ZXN0cyBmcm9tIGNocm9taXVtOiBVbmlzY3JpYmVIZWxwZXIgYW5kIFRyYW5zcGFyZW5j
eVdpbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0
NTA5CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHRlc3RzL1RyYW5zcGFyZW5j
eVdpblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJFQ1RUb0Zsb2F0UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpkcmF3TmF0aXZlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRQaXhlbEF0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwp
OgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJUb3BMYXllckFscGhhUGl4ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAg
KiB0ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpVbmlzY3JpYmVUZXN0OjpVbmlzY3JpYmVUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaXNj
cmliZVRlc3Q6Ok1ha2VGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZVRlc3Q6OlNl
dFVwKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZVRlc3Q6OlRlYXJEb3duKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRFU1RfRik6CisKIDIwMTAtMDItMDIgIFl1cnkgU2VtaWtoYXRza3kgIDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKaW5kZXggMzA0OWI3My4uNzRiMzRlYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTQ1
MSw2ICs0NTEsMTQgQEAKICAgICAgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAg
ICAgICAgICAgICAgICAndGVzdHMvUnVuQWxsVGVzdHMuY3BwJywKICAgICAgICAgICAgIF0sCisg
ICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgICAgICAgICBbJ09TPT0id2luIics
IHsKKyAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAgICAgICAgICAg
ICAgICAndGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIF0sCiAgICAgICAgIH0sCiAg
ICAgXSwgIyB0YXJnZXRzCiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJh
bnNwYXJlbmN5V2luVGVzdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5
V2luVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkMGVjZQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5U
ZXN0LmNwcApAQCAtMCwwICsxLDY5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlRy
YW5zcGFyZW5jeVdpbi5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IHsKKworc3RhdGljIEZsb2F0UmVjdCBSRUNUVG9GbG9hdFJlY3QoY29uc3QgUkVDVCogcmVjdCkK
K3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KHN0YXRpY19jYXN0PGZsb2F0PihyZWN0LT5sZWZ0KSwK
KyAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihyZWN0LT50b3ApLAorICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlY3QtPnJpZ2h0IC0gcmVjdC0+
bGVmdCksCisgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocmVjdC0+Ym90
dG9tIC0gcmVjdC0+dG9wKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdOYXRpdmVSZWN0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBp
bnQgeSwgaW50IHcsIGludCBoKQoreworICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMg
PSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisgICAgSERDIGRjID0gY2Fu
dmFzLT5iZWdpblBsYXRmb3JtUGFpbnQoKTsKKworICAgIFJFQ1QgaW5uZXJSYzsKKyAgICBpbm5l
clJjLmxlZnQgPSB4OworICAgIGlubmVyUmMudG9wID0geTsKKyAgICBpbm5lclJjLnJpZ2h0ID0g
eCArIHc7CisgICAgaW5uZXJSYy5ib3R0b20gPSB5ICsgaDsKKyAgICBGaWxsUmVjdChkYywgJmlu
bmVyUmMsCisgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxIQlJVU0g+KEdldFN0b2NrT2Jq
ZWN0KEJMQUNLX0JSVVNIKSkpOworCisgICAgY2FudmFzLT5lbmRQbGF0Zm9ybVBhaW50KCk7Cit9
CisKK3N0YXRpYyBDb2xvciBnZXRQaXhlbEF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50
IHgsIGludCB5KQoreworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPgorICAgICAgICBnZXRUb3BQbGF0Zm9ybURldmljZSgp
LmFjY2Vzc0JpdG1hcChmYWxzZSk7CisgICAgcmV0dXJuIENvbG9yKCpyZWludGVycHJldF9jYXN0
PGNvbnN0IFJHQkEzMio+KGJpdG1hcC5nZXRBZGRyMzIoeCwgeSkpKTsKK30KKworLy8gUmVzZXRz
IHRoZSB0b3AgbGF5ZXIncyBhbHBoYSBjaGFubmVsIHRvIDAgZm9yIGVhY2ggcGl4ZWwuIFRoaXMg
c2ltdWxhdGVzCisvLyBXaW5kb3dzIG1lc3NpbmcgaXQgdXAuCitzdGF0aWMgdm9pZCBjbGVhclRv
cExheWVyQWxwaGFDaGFubmVsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBTa0Jp
dG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT4KKyAgICAgICAgY2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNz
Qml0bWFwKGZhbHNlKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBiaXRtYXAuaGVpZ2h0KCk7
IHkrKykgeworICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsK
KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBiaXRtYXAud2lkdGgoKTsgeCsrKQorICAgICAg
ICAgICAgcm93W3hdICY9IDB4MDBGRkZGRkY7CisgICAgfQorfQorCisvLyBDbGVhcnMgdGhlIGFs
cGhhIGNoYW5uZWwgb24gdGhlIHNwZWNpZmllZCBwaXhlbC4KK3N0YXRpYyB2b2lkIGNsZWFyVG9w
TGF5ZXJBbHBoYVBpeGVsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50IHgsIGludCB5KQor
eworICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPgorICAgICAgICBjYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZp
Y2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKKyAgICAqYml0bWFwLmdldEFkZHIzMih4LCB5KSAm
PSAweDAwRkZGRkZGOworfQorCitzdGF0aWMgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6
b3N0cmVhbSYgb3V0LCBjb25zdCBDb2xvciYgYykKK3sKKyAgICBzdGQ6Omlvc19iYXNlOjpmbXRm
bGFncyBvbGRGbGFncyA9IG91dC5mbGFncyhzdGQ6Omlvc19iYXNlOjpoZXggfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6OnNo
b3diYXNlKTsKKyAgICBvdXQgPDwgYy5yZ2IoKTsKKyAgICBvdXQuZmxhZ3Mob2xkRmxhZ3MpOwor
ICAgIHJldHVybiBvdXQ7Cit9CisKK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBOb0xheWVyKQorewor
ICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgx
NywgMTYpLCBEZXZpY2VSR0IpKTsKKworICAgIC8vIEtlZXBUcmFuc2Zvcm0KKyAgICB7CisgICAg
ICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29u
dGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46Ok5vTGF5ZXIsCisg
ICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwKKyAgICAg
ICAgICAgICAgICAgICAgSW50UmVjdCgxLCAxLCAxNCwgMTIpKTsKKworICAgICAgICBFWFBFQ1Rf
VFJVRShzcmMtPmNvbnRleHQoKSA9PSBoZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSW50U2l6ZSgxNCwgMTIpID09IGhlbHBlci5tX2xheWVyU2l6ZSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKEludFJlY3QoMSwgMSwgMTQsIDEyKSA9PSBoZWxwZXIuZHJhd1JlY3QoKSk7Cisg
ICAgfQorCisgICAgLy8gVW50cmFuc2Zvcm0gaXMgbm90IGFsbG93ZWQgZm9yIE5vTGF5ZXIuCisK
KyAgICAvLyBTY2FsZVRyYW5zZm9ybQorICAgIHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7CisgICAg
c3JjLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZSgyLjAsIDAuNSkpOworICAgIHsKKyAgICAg
ICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250
ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6Tm9MYXllciwKKyAg
ICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpTY2FsZVRyYW5zZm9ybSwKKyAgICAg
ICAgICAgICAgICAgICAgSW50UmVjdCgyLCAyLCA2LCA2KSk7CisgICAgICAgIGhlbHBlci5jb21w
b3NpdGUoKTsKKworICAgICAgICAvLyBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gc2hvdWxkIGJlIGJh
c2VkIGluIHRoZSB1cHBlciBsZWZ0IG9mIG91ciBib3guCisgICAgICAgIC8vIEl0IHNob3VsZCBi
ZSBwb3N0LXRyYW5zZm9ybWVkLgorICAgICAgICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSA9
PSBoZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxMiwgMykg
PT0gaGVscGVyLm1fbGF5ZXJTaXplKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCg0LCAx
LCAxMiwgMykgPT0gaGVscGVyLmRyYXdSZWN0KCkpOworICAgIH0KKyAgICBzcmMtPmNvbnRleHQo
KS0+cmVzdG9yZSgpOworfQorCitURVNUKFRyYW5zcGFyZW5jeVdpbiwgV2hpdGVMYXllcikKK3sK
KyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUo
MTYsIDE2KSwgRGV2aWNlUkdCKSk7CisKKyAgICAvLyBLZWVwVHJhbnNmb3JtCisgICAgeworICAg
ICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNv
bnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpXaGl0ZUxheWVy
LAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zvcm0sCisg
ICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgMSwgMTQsIDEyKSk7CisgICAgICAgIGhlbHBl
ci5jb21wb3NpdGUoKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSAhPSBo
ZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxNCwgMTIpID09
IGhlbHBlci5tX2xheWVyU2l6ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMSwgMSwg
MTQsIDEyKSA9PSBoZWxwZXIuZHJhd1JlY3QoKSk7CisgICAgfQorCisgICAgLy8gVW50cmFuc2Zv
cm0KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBl
ci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lX
aW46OldoaXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6VW50
cmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgMSwgMTQsIDEyKSk7Cisg
ICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKworICAgICAgICBFWFBFQ1RfVFJVRShzcmMtPmNv
bnRleHQoKSAhPSBoZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50U2l6
ZSgxNCwgMTIpID09IGhlbHBlci5tX2xheWVyU2l6ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKElu
dFJlY3QoMCwgMCwgMTQsIDEyKSA9PSBoZWxwZXIuZHJhd1JlY3QoKSk7CisgICAgfQorCisgICAg
Ly8gU2NhbGVUcmFuc2Zvcm0KKyAgICBzcmMtPmNvbnRleHQoKS0+c2F2ZSgpOworICAgIHNyYy0+
Y29udGV4dCgpLT5zY2FsZShGbG9hdFNpemUoMi4wLCAwLjUpKTsKKyAgICB7CisgICAgICAgIFRy
YW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgp
LAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OldoaXRlTGF5ZXIsCisgICAg
ICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6U2NhbGVUcmFuc2Zvcm0sCisgICAgICAg
ICAgICAgICAgICAgIEludFJlY3QoMiwgMiwgNiwgNikpOworICAgICAgICBoZWxwZXIuY29tcG9z
aXRlKCk7CisKKyAgICAgICAgLy8gVGhlIGNvb3JkaW5hdGUgc3lzdGVtIHNob3VsZCBiZSBiYXNl
ZCBpbiB0aGUgdXBwZXIgbGVmdCBvZiBvdXIgYm94LgorICAgICAgICAvLyBJdCBzaG91bGQgYmUg
cG9zdC10cmFuc2Zvcm1lZC4KKyAgICAgICAgRVhQRUNUX1RSVUUoc3JjLT5jb250ZXh0KCkgIT0g
aGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEludFNpemUoMTIsIDMpID09
IGhlbHBlci5tX2xheWVyU2l6ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMCwgMCwg
MTIsIDMpID09IGhlbHBlci5kcmF3UmVjdCgpKTsKKyAgICB9CisgICAgc3JjLT5jb250ZXh0KCkt
PnJlc3RvcmUoKTsKK30KKworVEVTVChUcmFuc3BhcmVuY3lXaW4sIFRleHRDb21wb3NpdGUpCit7
CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXpl
KDE2LCAxNiksIERldmljZVJHQikpOworCisgICAgLy8gS2VlcFRyYW5zZm9ybSBpcyB0aGUgb25s
eSB2YWxpZCB0cmFuc2Zvcm0gbW9kZSBmb3IgVGV4dENvbXBvc2l0ZS4KKyAgICB7CisgICAgICAg
IFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4
dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OlRleHRDb21wb3NpdGUs
CisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwKKyAg
ICAgICAgICAgICAgICAgICAgSW50UmVjdCgxLCAxLCAxNCwgMTIpKTsKKyAgICAgICAgaGVscGVy
LmNvbXBvc2l0ZSgpOworCisgICAgICAgIEVYUEVDVF9UUlVFKHNyYy0+Y29udGV4dCgpICE9IGhl
bHBlci5jb250ZXh0KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShJbnRTaXplKDE0LCAxMikgPT0g
aGVscGVyLm1fbGF5ZXJTaXplKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCgxLCAxLCAx
NCwgMTIpID09IGhlbHBlci5kcmF3UmVjdCgpKTsKKyAgICB9Cit9CisKK1RFU1QoVHJhbnNwYXJl
bmN5V2luLCBPcGFxdWVDb21wb3NpdGVMYXllcikKK3sKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYsIDE2KSwgRGV2aWNlUkdCKSk7CisK
KyAgICAvLyBLZWVwVHJhbnNmb3JtCisgICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVs
cGVyOworICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgVHJhbnNwYXJlbmN5V2luOjpPcGFxdWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAg
ICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAg
ICAgICBJbnRSZWN0KDEsIDEsIDE0LCAxMikpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7
CisKKyAgICAgICAgRVhQRUNUX1RSVUUoc3JjLT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQo
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEludFNpemUoMTQsIDEyKSA9PSBoZWxwZXIubV9sYXll
clNpemUpOworICAgICAgICBFWFBFQ1RfVFJVRShJbnRSZWN0KDEsIDEsIDE0LCAxMikgPT0gaGVs
cGVyLmRyYXdSZWN0KCkpOworICAgIH0KKworICAgIC8vIEtlZXBUcmFuc2Zvcm0gd2l0aCBzY3Jv
bGwgYXBwbGllZC4KKyAgICBzcmMtPmNvbnRleHQoKS0+c2F2ZSgpOworICAgIHNyYy0+Y29udGV4
dCgpLT50cmFuc2xhdGUoMCwgLTEpOworICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhl
bHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAg
ICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXIsCisgICAgICAgICAg
ICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAg
ICAgICAgSW50UmVjdCgxLCAxLCAxNCwgMTQpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgp
OworCisgICAgICAgIEVYUEVDVF9UUlVFKHNyYy0+Y29udGV4dCgpICE9IGhlbHBlci5jb250ZXh0
KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShJbnRTaXplKDE0LCAxNCkgPT0gaGVscGVyLm1fbGF5
ZXJTaXplKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCgxLCAxLCAxNCwgMTQpID09IGhl
bHBlci5kcmF3UmVjdCgpKTsKKyAgICB9CisgICAgc3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsK
KworICAgIC8vIFVudHJhbnNmb3JtCisgICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVs
cGVyOworICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgVHJhbnNwYXJlbmN5V2luOjpPcGFxdWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAg
ICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpVbnRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAg
ICAgSW50UmVjdCgxLCAxLCAxNCwgMTIpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOwor
CisgICAgICAgIEVYUEVDVF9UUlVFKHNyYy0+Y29udGV4dCgpICE9IGhlbHBlci5jb250ZXh0KCkp
OworICAgICAgICBFWFBFQ1RfVFJVRShJbnRTaXplKDE0LCAxMikgPT0gaGVscGVyLm1fbGF5ZXJT
aXplKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCgwLCAwLCAxNCwgMTIpID09IGhlbHBl
ci5kcmF3UmVjdCgpKTsKKyAgICB9CisKKyAgICAvLyBTY2FsZVRyYW5zZm9ybQorICAgIHNyYy0+
Y29udGV4dCgpLT5zYXZlKCk7CisgICAgc3JjLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZSgy
LjAsIDAuNSkpOworICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAg
ICAgaGVscGVyLmluaXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5z
cGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRy
YW5zcGFyZW5jeVdpbjo6U2NhbGVUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJl
Y3QoMiwgMiwgNiwgNikpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisKKyAgICAgICAg
Ly8gVGhlIGNvb3JkaW5hdGUgc3lzdGVtIHNob3VsZCBiZSBiYXNlZCBpbiB0aGUgdXBwZXIgbGVm
dCBvZiBvdXIgYm94LgorICAgICAgICAvLyBJdCBzaG91bGQgYmUgcG9zdC10cmFuc2Zvcm1lZC4K
KyAgICAgICAgRVhQRUNUX1RSVUUoc3JjLT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQoKSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKEludFNpemUoMTIsIDMpID09IGhlbHBlci5tX2xheWVyU2l6
ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEludFJlY3QoMCwgMCwgMTIsIDMpID09IGhlbHBlci5k
cmF3UmVjdCgpKTsKKyAgICB9CisgICAgc3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKK30KKwor
VEVTVChUcmFuc3BhcmVuY3lXaW4sIFdoaXRlTGF5ZXJQaXhlbFRlc3QpCit7CisgICAgLy8gTWFr
ZSBhIHRvdGFsIHRyYW5zcGFyZW50IGJ1ZmZlciwgYW5kIGRyYXcgdGhlIHdoaXRlIGxheWVyIGlu
c2V0IGJ5IDEgcHguCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShJbnRTaXplKDE2LCAxNiksIERldmljZVJHQikpOworCisgICAgeworICAgICAgICBUcmFu
c3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwK
KyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpXaGl0ZUxheWVyLAorICAgICAg
ICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgICAgIEludFJlY3QoMSwgMSwgMTQsIDE0KSk7CisKKyAgICAgICAgLy8gQ29vcmRpbmF0
ZXMgc2hvdWxkIGJlIGluIHRoZSBvcmlnaW5hbCBzcGFjZSwgbm90IHRoZSBsYXllci4KKyAgICAg
ICAgZHJhd05hdGl2ZVJlY3QoaGVscGVyLmNvbnRleHQoKSwgMywgMywgMSwgMSk7CisgICAgICAg
IGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwoaGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIGhl
bHBlci5jb21wb3NpdGUoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgZmluYWwgaW1hZ2Ugc2hvdWxk
IGJlIHRyYW5zcGFyZW50IGFyb3VuZCB0aGUgZWRnZXMgZm9yIDEgcHgsIHdoaXRlCisgICAgLy8g
aW4gdGhlIG1pZGRsZSwgd2l0aCAoMywzKSAod2hhdCB3ZSBkcmV3IGFib3ZlKSBiZWluZyBvcGFx
dWUgYmxhY2suCisgICAgRVhQRUNUX0VRKENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCksIGdldFBp
eGVsQXQoc3JjLT5jb250ZXh0KCksIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEoQ29sb3IoQ29sb3I6
OndoaXRlKSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMiwgMikpOworICAgIEVYUEVDVF9F
UShDb2xvcihDb2xvcjo6YmxhY2spLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAzLCAzKSk7
CisgICAgRVhQRUNUX0VRKENvbG9yKENvbG9yOjp3aGl0ZSksIGdldFBpeGVsQXQoc3JjLT5jb250
ZXh0KCksIDQsIDQpKTsKK30KKworVEVTVChUcmFuc3BhcmVuY3lXaW4sIE9wYXF1ZUNvbXBvc2l0
ZUxheWVyUGl4ZWwpCit7CisgICAgQ29sb3IgcmVkKDB4RkZGRjAwMDApLCBkYXJrUmVkKDB4RkZC
RjAwMDApOworICAgIENvbG9yIGdyZWVuKDB4RkYwMEZGMDApOworCisgICAgLy8gTWFrZSBhIHJl
ZCBib3R0b20gbGF5ZXIsIGZvbGxvd2VkIGJ5IGEgaGFsZiBncmVlbiBuZXh0IGxheWVyIEAgNTAl
LgorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6
ZSgxNiwgMTYpLCBEZXZpY2VSR0IpKTsKKworICAgIEZsb2F0UmVjdCBmdWxsUmVjdCgwLCAwLCAx
NiwgMTYpOworICAgIHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdChmdWxsUmVjdCwgcmVkLCBEZXZp
Y2VDb2xvclNwYWNlKTsKKyAgICBzcmMtPmNvbnRleHQoKS0+YmVnaW5UcmFuc3BhcmVuY3lMYXll
cigwLjUpOworICAgIEZsb2F0UmVjdCByaWdodEhhbGYoOCwgMCwgOCwgMTYpOworICAgIHNyYy0+
Y29udGV4dCgpLT5maWxsUmVjdChyaWdodEhhbGYsIGdyZWVuLCBEZXZpY2VDb2xvclNwYWNlKTsK
KworICAgIC8vIE1ha2UgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgaW5zZXQgYnkgb25lIHBpeGVsLCBh
bmQgZmlsbCBpdCBpbnNldCBieQorICAgIC8vIGFub3RoZXIgcGl4ZWwgd2l0aCA1MCUgYmxhY2su
CisgICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIu
aW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2lu
OjpPcGFxdWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5
V2luOjpLZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDEsIDEsIDE0
LCAxNCkpOworCisgICAgICAgIEZsb2F0UmVjdCBpbm5lcigyLCAyLCAxMiwgMTIpOworICAgICAg
ICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChpbm5lciwgQ29sb3IoMHg3ZjAwMDAwMCksIERl
dmljZUNvbG9yU3BhY2UpOworICAgICAgICAvLyBUaGVzZSBjb29yZGluYXRlcyBhcmUgcmVsYXRp
dmUgdG8gdGhlIGxheWVyLCB3aGlzaCBpcyBpbnNldCBieSAxeDEKKyAgICAgICAgLy8gcGl4ZWxz
IGZyb20gdGhlIHRvcCBsZWZ0LiBTbyB3ZSdyZSBhY3R1YWxseSBjbGVhcmluZyAoMiwgMikgYW5k
CisgICAgICAgIC8vICgxMywxMyksIHdoaWNoIGFyZSB0aGUgZXh0cmVtZSBjb3JuZXJzIG9mIHRo
ZSBibGFjayBhcmVhIChhbmQgd2hpY2gKKyAgICAgICAgLy8gd2UgY2hlY2sgYmVsb3cpLgorICAg
ICAgICBjbGVhclRvcExheWVyQWxwaGFQaXhlbChoZWxwZXIuY29udGV4dCgpLCAxLCAxKTsKKyAg
ICAgICAgY2xlYXJUb3BMYXllckFscGhhUGl4ZWwoaGVscGVyLmNvbnRleHQoKSwgMTIsIDEyKTsK
KyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworICAgIH0KKworICAgIC8vIEZpbmlzaCB0aGUg
Y29tcG9zaXRpbmcuCisgICAgc3JjLT5jb250ZXh0KCktPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CisKKyAgICAvLyBDaGVjayB0aGF0IHdlIGdvdCB0aGUgcmlnaHQgdmFsdWVzLCBpdCBzaG91bGQg
YmUgbGlrZSB0aGUgcmVjdGFuZ2xlIHdhcworICAgIC8vIGRyYXduIHdpdGggaGFsZiBvcGFjaXR5
IGV2ZW4gdGhvdWdoIHRoZSBhbHBoYSBjaGFubmVsIGdvdCBtZXNzZWQgdXAuCisgICAgRVhQRUNU
X0VRKHJlZCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMCwgMCkpOworICAgIEVYUEVDVF9F
UShyZWQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDEsIDEpKTsKKyAgICBFWFBFQ1RfRVEo
ZGFya1JlZCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMiwgMikpOworCisgICAgLy8gVGhl
IGRhcmsgcmVzdWx0IGlzOgorICAgIC8vICAgKGJsYWNrIEAgNTAlIGF0b3AgZ3JlZW4pIEAgNTAl
IGF0b3AgcmVkID0gMHhGRjgwNDAwMAorICAgIC8vIHdoaWNoIGlzIDB4RkZBMDIwMDAgKFNraWEg
Y29tcHV0ZXMgMHhGRkExMUYwMCBkdWUgdG8gcm91bmRpbmcpLgorICAgIENvbG9yIGRhcmtHcmVl
blJlZCgweEZGODAzZjAwKTsKKyAgICBFWFBFQ1RfRVEoZGFya0dyZWVuUmVkLCBnZXRQaXhlbEF0
KHNyYy0+Y29udGV4dCgpLCAxMywgMTMpKTsKKworICAgIC8vIDUwJSBncmVlbiBvbiB0b3Agb2Yg
cmVkID0gRkY4MDgwMDAgKHJvdW5kZWQgdG8gd2hhdCBTa2lhIHdpbGwgcHJvZHVjZSkuCisgICAg
Q29sb3IgZ3JlZW5SZWQoMHhGRjgwN0YwMCk7CisgICAgRVhQRUNUX0VRKGdyZWVuUmVkLCBnZXRQ
aXhlbEF0KHNyYy0+Y29udGV4dCgpLCAxNCwgMTQpKTsKKyAgICBFWFBFQ1RfRVEoZ3JlZW5SZWQs
IGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDE1LCAxNSkpOworfQorCisvLyBUZXN0cyB0aGF0
IHRyYW5zbGF0aW9ucyBhcmUgcHJvcGVybHkgaGFuZGxlZCB3aGVuIHVzaW5nIEtlZXBUcmFuc2Zv
cm0uCitURVNUKFRyYW5zcGFyZW5jeVdpbiwgVHJhbnNsYXRlT3BhcXVlQ29tcG9zaXRlTGF5ZXIp
Cit7CisgICAgLy8gRmlsbCB3aXRoIHdoaXRlLgorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc3Jj
KEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZpY2VSR0IpKTsKKyAgICBD
b2xvciB3aGl0ZSgweEZGRkZGRkZGKTsKKyAgICBGbG9hdFJlY3QgZnVsbFJlY3QoMCwgMCwgMTYs
IDE2KTsKKyAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QoZnVsbFJlY3QsIHdoaXRlLCBEZXZp
Y2VDb2xvclNwYWNlKTsKKworICAgIC8vIFNjcm9sbCBkb3duIGJ5IDggKGNvb3JkaW5hdGUgc3lz
dGVtIGdvZXMgdXApLgorICAgIHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7CisgICAgc3JjLT5jb250
ZXh0KCktPnRyYW5zbGF0ZSgwLCAtOCk7CisKKyAgICBDb2xvciByZWQoMHhGRkZGMDAwMCk7Cisg
ICAgQ29sb3IgZ3JlZW4oMHhGRjAwRkYwMCk7CisgICAgeworICAgICAgICAvLyBNYWtlIHRoZSB0
cmFuc3BhcmVuY3kgbGF5ZXIgYWZ0ZXIgdHJhbnNsYXRpb24gd2lsbCBiZSBAICgwLCAtOCkgd2l0
aAorICAgICAgICAvLyBzaXplIDE2eDE2LgorICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVy
OworICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgVHJhbnNwYXJlbmN5V2luOjpPcGFxdWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAgICAg
ICAgICAgVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAg
ICBJbnRSZWN0KDAsIDAsIDE2LCAxNikpOworCisgICAgICAgIC8vIERyYXcgYSByZWQgcGl4ZWwg
YXQgKDE1LCAxNSkuIFRoaXMgc2hvdWxkIGJlIHRoZSBhdCAoMTUsIDcpIGFmdGVyCisgICAgICAg
IC8vIHRoZSB0cmFuc2Zvcm0uCisgICAgICAgIEZsb2F0UmVjdCBib3R0b21SaWdodCgxNSwgMTUs
IDEsIDEpOworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChib3R0b21SaWdodCwg
Z3JlZW4sIERldmljZUNvbG9yU3BhY2UpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7Cisg
ICAgfQorCisgICAgc3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKKworICAgIC8vIENoZWNrIHRo
ZSBwaXhlbCB3ZSB3cm90ZS4KKyAgICBFWFBFQ1RfRVEoZ3JlZW4sIGdldFBpeGVsQXQoc3JjLT5j
b250ZXh0KCksIDE1LCA3KSk7Cit9CisKKy8vIFNhbWUgYXMgT3BhcXVlQ29tcG9zaXRlTGF5ZXIs
IGJ1dCB0aGUgY2FudmFzIGhhcyBhIHJvdGF0aW9uIGFwcGxpZWQuIFRoaXMKKy8vIHRlc3RzIHRo
YXQgdGhlIHByb3BlcnQgdHJhbnNmb3JtIGlzIGFwcGxpZWQgdG8gdGhlIGNvcGllZCBsYXllci4K
K1RFU1QoVHJhbnNwYXJlbmN5V2luLCBSb3RhdGVPcGFxdWVDb21wb3NpdGVMYXllcikKK3sKKyAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYs
IDE2KSwgRGV2aWNlUkdCKSk7CisKKyAgICAvLyBUaGUgYmFja2dyb3VuZCBpcyB3aGl0ZS4KKyAg
ICBDb2xvciB3aGl0ZSgweEZGRkZGRkZGKTsKKyAgICBGbG9hdFJlY3QgZnVsbFJlY3QoMCwgMCwg
MTYsIDE2KTsKKyAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QoZnVsbFJlY3QsIHdoaXRlLCBE
ZXZpY2VDb2xvclNwYWNlKTsKKworICAgIC8vIFJvdGF0ZSB0aGUgaW1hZ2UgYnkgOTAgZGVncmVl
cy4gVGhpcyBtYXRyaXggaXMgdGhlIHNhbWUgYXMKKyAgICAvLyBjdzkwLnJvdGF0ZSg5MCk7IGJ1
dCBhdm9pZHMgcm91bmRpbmcgZXJyb3JzLiBSb3VuZGluZyBlcnJvcnMgY2FuIGNhdXNlCisgICAg
Ly8gU2tpYSB0byB0aGluayB0aGF0ICFyZWN0U3RheXNSZWN0KCkgYW5kIGl0IHdpbGwgZmFsbCB0
aHJvdWdoIHRvIHBhdGgKKyAgICAvLyBkcmF3aW5nIG1vZGUsIHdoaWNoIGluIHR1cm4gZ2l2ZXMg
dXMgYW50aWFsaWFzaW5nLiBXZSB3YW50IG5vCisgICAgLy8gYW50aWFsaWFzaW5nIG9yIG90aGVy
IHJvdW5kaW5nIHByb2JsZW1zIHNpbmNlIHdlJ3JlIHRlc3RpbmcgZXhhY3QgcGl4ZWwKKyAgICAv
LyB2YWx1ZXMuCisgICAgc3JjLT5jb250ZXh0KCktPnNhdmUoKTsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBjdzkwKDAsIDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
MSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxKTsKKyAgICBzcmMtPmNvbnRl
eHQoKS0+Y29uY2F0Q1RNKGN3OTApOworCisgICAgLy8gTWFrZSBhIHRyYW5zcGFyZW5jeSBsYXll
ciBjb25zaXN0aW5nIG9mIGEgaG9yaXpvbnRhbCBsaW5lIG9mIDUwJSBibGFjay4KKyAgICAvLyBT
aW5jZSB0aGUgcm90YXRpb24gaXMgYXBwbGllZCwgdGhpcyB3aWxsIGFjdHVhbGx5IGJlIGEgdmVy
dGljYWwgbGluZQorICAgIC8vIGRvd24gdGhlIG1pZGRsZSBvZiB0aGUgaW1hZ2UuCisgICAgc3Jj
LT5jb250ZXh0KCktPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMC41KTsKKyAgICBGbG9hdFJlY3Qg
YmxhY2tSZWN0KDAsIC05LCAxNiwgMik7CisgICAgQ29sb3IgYmxhY2soMHhGRjAwMDAwMCk7Cisg
ICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGJsYWNrUmVjdCwgYmxhY2ssIERldmljZUNvbG9y
U3BhY2UpOworCisgICAgLy8gTm93IGRyYXcgNTAlIHJlZCBzcXVhcmUuCisgICAgeworICAgICAg
ICAvLyBDcmVhdGUgYSB0cmFuc3BhcmVuY3kgaGVscGVyIGluc2V0IG9uZSBwaXhlbCBpbiB0aGUg
YnVmZmVyLiBUaGUKKyAgICAgICAgLy8gY29vcmRpbmF0ZXMgYXJlIGJlZm9yZSB0cmFuc2Zvcm1p
bmcgaW50byB0aGlzIHNwYWNlLCBhbmQgbWFwcyB0bworICAgICAgICAvLyBJbnRSZWN0KDEsIDEs
IDE0LCAxNCkuCisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBl
ci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lX
aW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVu
Y3lXaW46OlVudHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDEsIC0xNSwg
MTQsIDE0KSk7CisKKyAgICAgICAgLy8gRmlsbCB3aXRoIHJlZC4KKyAgICAgICAgaGVscGVyLmNv
bnRleHQoKS0+ZmlsbFJlY3QoaGVscGVyLmRyYXdSZWN0KCksIENvbG9yKDB4N2Y3ZjAwMDApLCBE
ZXZpY2VDb2xvclNwYWNlKTsKKyAgICAgICAgY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbChoZWxw
ZXIuY29udGV4dCgpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworICAgIH0KKworICAg
IC8vIEZpbmlzaCB0aGUgY29tcG9zaXRpbmcuCisgICAgc3JjLT5jb250ZXh0KCktPmVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7CisKKyAgICAvLyBUb3AgY29ybmVyIHNob3VsZCBiZSB0aGUgb3JpZ2lu
YWwgYmFja2dyb3VuZC4KKyAgICBFWFBFQ1RfRVEod2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250
ZXh0KCksIDAsIDApKTsKKworICAgIC8vIENoZWNrIHRoZSBzdHJpcGUgZG93biB0aGUgbWlkZGxl
LCBmaXJzdCBhdCB0aGUgdG9wLi4uCisgICAgQ29sb3IgZ3JheSgweEZGODA4MDgwKTsKKyAgICBF
WFBFQ1RfRVEod2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDYsIDApKTsKKyAgICBF
WFBFQ1RfRVEoZ3JheSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgNywgMCkpOworICAgIEVY
UEVDVF9FUShncmF5LCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCA4LCAwKSk7CisgICAgRVhQ
RUNUX0VRKHdoaXRlLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCA5LCAwKSk7CisKKyAgICAv
LyAuLi5ub3cgYXQgdGhlIGJvdHRvbS4KKyAgICBFWFBFQ1RfRVEod2hpdGUsIGdldFBpeGVsQXQo
c3JjLT5jb250ZXh0KCksIDYsIDE1KSk7CisgICAgRVhQRUNUX0VRKGdyYXksIGdldFBpeGVsQXQo
c3JjLT5jb250ZXh0KCksIDcsIDE1KSk7CisgICAgRVhQRUNUX0VRKGdyYXksIGdldFBpeGVsQXQo
c3JjLT5jb250ZXh0KCksIDgsIDE1KSk7CisgICAgRVhQRUNUX0VRKHdoaXRlLCBnZXRQaXhlbEF0
KHNyYy0+Y29udGV4dCgpLCA5LCAxNSkpOworCisgICAgLy8gT3VyIHJlZCBzcXVhcmUgc2hvdWxk
IGJlIDI1JSByZWQgb3ZlciB0aGUgdG9wIG9mIHRob3NlIHR3by4KKyAgICBDb2xvciByZWR3aGl0
ZSgweEZGZGZiZmJmKTsKKyAgICBDb2xvciByZWRncmF5KDB4RkY5ZjgwODApOworICAgIEVYUEVD
VF9FUSh3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMCwgMSkpOworICAgIEVYUEVD
VF9FUShyZWR3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMSwgMSkpOworICAgIEVY
UEVDVF9FUShyZWR3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgNiwgMSkpOworICAg
IEVYUEVDVF9FUShyZWRncmF5LCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCA3LCAxKSk7Cisg
ICAgRVhQRUNUX0VRKHJlZGdyYXksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDgsIDEpKTsK
KyAgICBFWFBFQ1RfRVEocmVkd2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDksIDEp
KTsKKyAgICBFWFBFQ1RfRVEocmVkd2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDE0
LCAxKSk7CisgICAgRVhQRUNUX0VRKHdoaXRlLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAx
NSwgMSkpOworCisgICAgLy8gQ29tcGxldGUgdGhlIDUwJSB0cmFuc3BhcmVudCBsYXllci4KKyAg
ICBzcmMtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworfQorCitURVNUKFRyYW5zcGFyZW5jeVdpbiwg
VHJhbnNsYXRlU2NhbGVPcGFxdWVDb21wb3NpdGVMYXllcikKK3sKKyAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYsIDE2KSwgRGV2aWNlUkdC
KSk7CisKKyAgICAvLyBUaGUgYmFja2dyb3VuZCBpcyB3aGl0ZSBvbiB0b3Agd2l0aCByZWQgb24g
Ym90dG9tLgorICAgIENvbG9yIHdoaXRlKDB4RkZGRkZGRkYpOworICAgIEZsb2F0UmVjdCB0b3BS
ZWN0KDAsIDAsIDE2LCA4KTsKKyAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QodG9wUmVjdCwg
d2hpdGUsIERldmljZUNvbG9yU3BhY2UpOworICAgIENvbG9yIHJlZCgweEZGRkYwMDAwKTsKKyAg
ICBGbG9hdFJlY3QgYm90dG9tUmVjdCgwLCA4LCAxNiwgOCk7CisgICAgc3JjLT5jb250ZXh0KCkt
PmZpbGxSZWN0KGJvdHRvbVJlY3QsIHJlZCwgRGV2aWNlQ29sb3JTcGFjZSk7CisKKyAgICBzcmMt
PmNvbnRleHQoKS0+c2F2ZSgpOworCisgICAgLy8gVHJhbnNsYXRlIGxlZnQgYnkgb25lIHBpeGVs
LgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxlZnQ7CisgICAgbGVmdC50cmFuc2xhdGUoLTEs
IDApOworCisgICAgLy8gU2NhbGUgYnkgMnguCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nh
bGU7CisgICAgc2NhbGUuc2NhbGUoMi4wKTsKKyAgICBzcmMtPmNvbnRleHQoKS0+Y29uY2F0Q1RN
KHNjYWxlKTsKKworICAgIC8vIFRoZW4gdHJhbnNsYXRlIHVwIGJ5IG9uZSBwaXhlbCAod2hpY2gg
d2lsbCBhY3R1YWxseSBiZSAyIGR1ZSB0byBzY2FsaW5nKS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB1cDsKKyAgICB1cC50cmFuc2xhdGUoMCwgLTEpOworICAgIHNyYy0+Y29udGV4dCgpLT5j
b25jYXRDVE0odXApOworCisgICAgLy8gTm93IGRyYXcgNTAlIHJlZCBzcXVhcmUuCisgICAgewor
ICAgICAgICAvLyBDcmVhdGUgYSB0cmFuc3BhcmVuY3kgaGVscGVyIGluc2V0IG9uZSBwaXhlbCBp
biB0aGUgYnVmZmVyLiBUaGUKKyAgICAgICAgLy8gY29vcmRpbmF0ZXMgYXJlIGJlZm9yZSB0cmFu
c2Zvcm1pbmcgaW50byB0aGlzIHNwYWNlLCBhbmQgbWFwcyB0bworICAgICAgICAvLyBJbnRSZWN0
KDEsIDEsIDE0LCAxNCkuCisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAg
IGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3Bh
cmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFu
c3BhcmVuY3lXaW46OktlZXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3Qo
MSwgLTE1LCAxNCwgMTQpKTsKKworICAgICAgICAvLyBGaWxsIHdpdGggcmVkLgorICAgICAgICBo
ZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChoZWxwZXIuZHJhd1JlY3QoKSwgQ29sb3IoMHg3Zjdm
MDAwMCksIERldmljZUNvbG9yU3BhY2UpOworICAgICAgICBjbGVhclRvcExheWVyQWxwaGFDaGFu
bmVsKGhlbHBlci5jb250ZXh0KCkpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisgICAg
fQorfQorCisvLyBUZXN0cyBzY2FsZSBtb2RlIHdpdGggbm8gYWRkaXRpb25hbCBjb3B5LgorVEVT
VChUcmFuc3BhcmVuY3lXaW4sIFNjYWxlKQoreworICAgIC8vIENyZWF0ZSBhbiBvcGFxdWUgd2hp
dGUgYnVmZmVyLgorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVh
dGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZpY2VSR0IpKTsKKyAgICBGbG9hdFJlY3QgZnVsbEJ1ZmZl
cigwLCAwLCAxNiwgMTYpOworICAgIHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdChmdWxsQnVmZmVy
LCBDb2xvcjo6d2hpdGUsIERldmljZUNvbG9yU3BhY2UpOworCisgICAgLy8gU2NhbGUgYnkgMngu
CisgICAgc3JjLT5jb250ZXh0KCktPnNhdmUoKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBz
Y2FsZTsKKyAgICBzY2FsZS5zY2FsZSgyLjApOworICAgIHNyYy0+Y29udGV4dCgpLT5jb25jYXRD
VE0oc2NhbGUpOworCisgICAgLy8gU3RhcnQgZHJhd2luZyBhIHJlY3RhbmdsZSBmcm9tIDEtPjQu
IFRoaXMgc2hvdWxkIGdldCBzY2FsZWQgdG8gMi0+OC4KKyAgICB7CisgICAgICAgIFRyYW5zcGFy
ZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAg
ICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46Ok5vTGF5ZXIsCisgICAgICAgICAgICAg
ICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6U2NhbGVUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAg
ICAgIEludFJlY3QoMSwgMSwgMywgMykpOworCisgICAgICAgIC8vIFRoZSBjb250ZXh0IHNob3Vs
ZCBub3cgaGF2ZSB0aGUgaWRlbnRpdHkgdHJhbnNmb3JtIGFuZCB0aGUgcmV0dXJuZWQKKyAgICAg
ICAgLy8gcmVjdCBzaG91bGQgYmUgc2NhbGVkLgorICAgICAgICBFWFBFQ1RfVFJVRShoZWxwZXIu
Y29udGV4dCgpLT5nZXRDVE0oKS5pc0lkZW50aXR5KCkpOworICAgICAgICBFWFBFQ1RfRVEoMiwg
aGVscGVyLmRyYXdSZWN0KCkueCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIGhlbHBlci5kcmF3
UmVjdCgpLnkoKSk7CisgICAgICAgIEVYUEVDVF9FUSg4LCBoZWxwZXIuZHJhd1JlY3QoKS5yaWdo
dCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDgsIGhlbHBlci5kcmF3UmVjdCgpLmJvdHRvbSgpKTsK
KworICAgICAgICAvLyBTZXQgdGhlIHBpeGVsIGF0ICgyLCAyKSB0byBiZSB0cmFuc3BhcmVudC4g
VGhpcyBzaG91bGQgYmUgZml4ZWQgd2hlbgorICAgICAgICAvLyB0aGUgaGVscGVyIGdvZXMgb3V0
IG9mIHNjb3BlLiBXZSBkb24ndCB3YW50IHRvIGNhbGwKKyAgICAgICAgLy8gY2xlYXJUb3BMYXll
ckFscGhhQ2hhbm5lbCBiZWNhdXNlIHRoYXQgd2lsbCBhY3R1YWxseSBjbGVhciB0aGUgd2hvbGUK
KyAgICAgICAgLy8gY2FudmFzIChzaW5jZSB3ZSBoYXZlIG5vIGV4dHJhIGxheWVyISkuCisgICAg
ICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oaGVscGVyLmNvbnRl
eHQoKS0+CisgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcFBs
YXRmb3JtRGV2aWNlKCkuCisgICAgICAgICAgICBhY2Nlc3NCaXRtYXAoZmFsc2UpKTsKKyAgICAg
ICAgKmJpdG1hcC5nZXRBZGRyMzIoMiwgMikgJj0gMHgwMEZGRkZGRjsKKyAgICAgICAgaGVscGVy
LmNvbXBvc2l0ZSgpOworICAgIH0KKworICAgIHNyYy0+Y29udGV4dCgpLT5yZXN0b3JlKCk7CisK
KyAgICAvLyBDaGVjayB0aGUgcGl4ZWwgd2UgcHJldmlvdXNseSBtYWRlIHRyYW5zcGFyZW50LCBp
dCBzaG91bGQgaGF2ZSBnb3R0ZW4KKyAgICAvLyBmaXhlZCBiYWNrIHVwIHRvIHdoaXRlLgorCisg
ICAgLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBkb2Vzbid0IGZpeHVwIHRyYW5zcGFyZW5jeSB3aGVu
IHRoZXJlIGlzIG5vIGxheWVyLgorICAgIC8vIFRoaXMgc2VlbXMgbm90IHRvIGJlIG5lY2Vzc2Fy
eSwgc28gd2UgZG9uJ3QgYm90aGVyLCBidXQgaWYgaXQgYmVjb21lcworICAgIC8vIG5lY2Vzc2Fy
eSwgdGhpcyBsaW5lIHNob3VsZCBiZSB1bmNvbW1lbnRlZC4KKyAgICAvLyBFWFBFQ1RfRVEoQ29s
b3IoQ29sb3I6OndoaXRlKSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMiwgMikpOworfQor
CisvLyBUZXN0cyBzY2FsZSBtb2RlIHdpdGggYW4gYWRkaXRpb25hbCBjb3B5IGZvciB0cmFuc3Bh
cmVuY3kuIFRoaXMgd2lsbCBoYXBwZW4KKy8vIGlmIHdlIGhhdmUgYSBzY2FsZWQgdGV4dGJveCwg
Zm9yIGV4YW1wbGUuIFdlYktpdCB3aWxsIGNyZWF0ZSBhIG5ldworLy8gdHJhbnNwYXJlbmN5IGxh
eWVyLCBkcmF3IHRoZSB0ZXh0IGZpZWxkLCB0aGVuIGRyYXcgdGhlIHRleHQgaW50byBpdCwgdGhl
bgorLy8gY29tcG9zaXRlIHRoaXMgZG93biB3aXRoIGFuIG9wYWNpdHkuCitURVNUKFRyYW5zcGFy
ZW5jeVdpbiwgU2NhbGVUcmFuc3BhcmVuY3kpCit7CisgICAgLy8gQ3JlYXRlIGFuIG9wYXF1ZSB3
aGl0ZSBidWZmZXIuCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShJbnRTaXplKDE2LCAxNiksIERldmljZVJHQikpOworICAgIEZsb2F0UmVjdCBmdWxsQnVm
ZmVyKDAsIDAsIDE2LCAxNik7CisgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGZ1bGxCdWZm
ZXIsIENvbG9yOjp3aGl0ZSwgRGV2aWNlQ29sb3JTcGFjZSk7CisKKyAgICAvLyBNYWtlIGFub3Ro
ZXIgbGF5ZXIgKHdoaWNoIGR1cGxpY2F0ZXMgaG93IFdlYktpdCB3aWxsIG1ha2UgdGhpcykuIFdl
IGZpbGwKKyAgICAvLyB0aGUgdG9wIGhhbGYgd2l0aCByZWQsIGFuZCBoYXZlIHRoZSBsYXllciBi
ZSA1MCUgb3BhcXVlLgorICAgIHNyYy0+Y29udGV4dCgpLT5iZWdpblRyYW5zcGFyZW5jeUxheWVy
KDAuNSk7CisgICAgRmxvYXRSZWN0IHRvcEhhbGYoMCwgMCwgMTYsIDgpOworICAgIHNyYy0+Y29u
dGV4dCgpLT5maWxsUmVjdCh0b3BIYWxmLCBDb2xvcigweEZGRkYwMDAwKSwgRGV2aWNlQ29sb3JT
cGFjZSk7CisKKyAgICAvLyBTY2FsZSBieSAyeC4KKyAgICBzcmMtPmNvbnRleHQoKS0+c2F2ZSgp
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlOworICAgIHNjYWxlLnNjYWxlKDIuMCk7
CisgICAgc3JjLT5jb250ZXh0KCktPmNvbmNhdENUTShzY2FsZSk7CisKKyAgICAvLyBNYWtlIGEg
bGF5ZXIgaW5zZXQgdHdvIHBpeGVscyAoYmVjYXVzZSBvZiBzY2FsaW5nLCB0aGlzIGlzIDItPjE0
KS4gQW5kCisgICAgLy8gd2lsbCBpdCB3aXRoIDUwJSBibGFjay4KKyAgICB7CisgICAgICAgIFRy
YW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgp
LAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxh
eWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OlNjYWxlVHJhbnNmb3Jt
LAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDEsIDEsIDYsIDYpKTsKKworICAgICAgICBo
ZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChoZWxwZXIuZHJhd1JlY3QoKSwgQ29sb3IoMHg3ZjAw
MDAwMCksIERldmljZUNvbG9yU3BhY2UpOworICAgICAgICBjbGVhclRvcExheWVyQWxwaGFDaGFu
bmVsKGhlbHBlci5jb250ZXh0KCkpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisgICAg
fQorCisgICAgLy8gRmluaXNoIHRoZSBsYXllci4KKyAgICBzcmMtPmNvbnRleHQoKS0+cmVzdG9y
ZSgpOworICAgIHNyYy0+Y29udGV4dCgpLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAg
Q29sb3IgcmVkQmFja2dyb3VuZCgweEZGRkY4MDgwKTsgLy8gNTAlIHJlZCBjb21wb3NpdGVkIG9u
IHdoaXRlLgorICAgIEVYUEVDVF9FUShyZWRCYWNrZ3JvdW5kLCBnZXRQaXhlbEF0KHNyYy0+Y29u
dGV4dCgpLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKHJlZEJhY2tncm91bmQsIGdldFBpeGVsQXQo
c3JjLT5jb250ZXh0KCksIDEsIDEpKTsKKworICAgIC8vIFRvcCBoYWxmIChtaW51cyB0d28gcGl4
ZWwgYm9yZGVyKSBzaG91bGQgYmUgNTAlIGdyYXkgYXRvcCBvcGFxdWUKKyAgICAvLyByZWQgPSAw
eEZGODA0MTQxLiBUaGVuIHRoYXQncyBjb21wb3NpdGVkIHdpdGggNTAlIHRyYW5zcGFyZW5jeSBv
biBzb2xpZAorICAgIC8vIHdoaXRlID0gMHhGRkMwQTFBMS4KKyAgICBDb2xvciBkYXJrUmVkKDB4
RkZCRjgwODApOworICAgIEVYUEVDVF9FUShkYXJrUmVkLCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4
dCgpLCAyLCAyKSk7CisgICAgRVhQRUNUX0VRKGRhcmtSZWQsIGdldFBpeGVsQXQoc3JjLT5jb250
ZXh0KCksIDcsIDcpKTsKKworICAgIC8vIEJvdHRvbSBoYWxmIChtaW51cyBhIHR3byBwaXhlbCBi
b3JkZXIpIHNob3VsZCBiZSBhIGxheWVyIHdpdGggNSUgZ3JheQorICAgIC8vIHdpdGggYW5vdGhl
ciA1MCUgb3BhY2l0eSBjb21wb3NpdGVkIGF0b3Agd2hpdGUuCisgICAgQ29sb3IgZGFya1doaXRl
KDB4RkZCRkJGQkYpOworICAgIEVYUEVDVF9FUShkYXJrV2hpdGUsIGdldFBpeGVsQXQoc3JjLT5j
b250ZXh0KCksIDgsIDgpKTsKKyAgICBFWFBFQ1RfRVEoZGFya1doaXRlLCBnZXRQaXhlbEF0KHNy
Yy0+Y29udGV4dCgpLCAxMywgMTMpKTsKKworICAgIENvbG9yIHdoaXRlKDB4RkZGRkZGRkYpOyAv
LyBCYWNrZ3JvdW5kIGluIHRoZSBsb3dlci1yaWdodC4KKyAgICBFWFBFQ1RfRVEod2hpdGUsIGdl
dFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDE0LCAxNCkpOworICAgIEVYUEVDVF9FUSh3aGl0ZSwg
Z2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMTUsIDE1KSk7Cit9CisKK1RFU1QoVHJhbnNwYXJl
bmN5V2luLCBUZXh0KQoreworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVy
OjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZpY2VSR0IpKTsKKworICAgIC8vIE91ciB0ZXh0
IHNob3VsZCBlbmQgdXAgNTAlIHRyYW5zcGFyZW50IGJsdWUtZ3JlZW4uCisgICAgQ29sb3IgZnVs
bFJlc3VsdCgweDgwMDA4MDgwKTsKKworICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhl
bHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAg
ICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6VGV4dENvbXBvc2l0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0KDAsIDAsIDE2LCAxNikpOworICAgICAgICBoZWxwZXIuc2V0VGV4dENvbXBvc2l0ZUNv
bG9yKGZ1bGxSZXN1bHQpOworCisgICAgICAgIC8vIFdyaXRlIHNldmVyYWwgZGlmZmVyZW50IHNx
dWFyZXMgdG8gc2ltdWxhdGUgQ2xlYXJUeXBlLiBUaGVzZSBzaG91bGQKKyAgICAgICAgLy8gYWxs
IHJlZHVjZSB0byAyLzMgY292ZXJhZ2UuCisgICAgICAgIEZsb2F0UmVjdCBwaXhlbCgwLCAwLCAx
LCAxKTsKKyAgICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QocGl4ZWwsIDB4RkZGRjAw
MDAsIERldmljZUNvbG9yU3BhY2UpOworICAgICAgICBwaXhlbC5tb3ZlKDEuMGYsIDAuMGYpOwor
ICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChwaXhlbCwgMHhGRjAwRkYwMCwgRGV2
aWNlQ29sb3JTcGFjZSk7CisgICAgICAgIHBpeGVsLm1vdmUoMS4wZiwgMC4wZik7CisgICAgICAg
IGhlbHBlci5jb250ZXh0KCktPmZpbGxSZWN0KHBpeGVsLCAweEZGMDAwMEZGLCBEZXZpY2VDb2xv
clNwYWNlKTsKKyAgICAgICAgcGl4ZWwubW92ZSgxLjBmLCAwLjBmKTsKKyAgICAgICAgaGVscGVy
LmNvbnRleHQoKS0+ZmlsbFJlY3QocGl4ZWwsIDB4RkYwMDgwODAsIERldmljZUNvbG9yU3BhY2Up
OworICAgICAgICBwaXhlbC5tb3ZlKDEuMGYsIDAuMGYpOworICAgICAgICBoZWxwZXIuY29udGV4
dCgpLT5maWxsUmVjdChwaXhlbCwgMHhGRjgwMDA4MCwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAg
ICAgIHBpeGVsLm1vdmUoMS4wZiwgMC4wZik7CisgICAgICAgIGhlbHBlci5jb250ZXh0KCktPmZp
bGxSZWN0KHBpeGVsLCAweEZGODA4MDAwLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgICAgICAv
LyBUcnkgb25lIHdpdGggMTAwJSBjb3ZlcmFnZSAob3BhcXVlIGJsYWNrKS4KKyAgICAgICAgcGl4
ZWwubW92ZSgxLjBmLCAwLjBmKTsKKyAgICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3Qo
cGl4ZWwsIDB4RkYwMDAwMDAsIERldmljZUNvbG9yU3BhY2UpOworCisgICAgICAgIC8vIE5vdyBt
ZXNzIHdpdGggdGhlIGFscGhhIGNoYW5uZWwuCisgICAgICAgIGNsZWFyVG9wTGF5ZXJBbHBoYUNo
YW5uZWwoaGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKyAg
ICB9CisKKyAgICBDb2xvciBvbmVUaGlyZFJlc3VsdCgweDU1MDA1NTU1KTsgLy8gPSBmdWxsUmVz
dWx0ICogMiAvIDMKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQoc3Jj
LT5jb250ZXh0KCksIDAsIDApKTsKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdldFBp
eGVsQXQoc3JjLT5jb250ZXh0KCksIDEsIDApKTsKKyAgICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1
bHQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDIsIDApKTsKKyAgICBFWFBFQ1RfRVEob25l
VGhpcmRSZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDMsIDApKTsKKyAgICBFWFBF
Q1RfRVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDQsIDApKTsK
KyAgICBFWFBFQ1RfRVEob25lVGhpcmRSZXN1bHQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCks
IDUsIDApKTsKKyAgICBFWFBFQ1RfRVEoZnVsbFJlc3VsdCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRl
eHQoKSwgNiwgMCkpOworICAgIEVYUEVDVF9FUShDb2xvcjo6dHJhbnNwYXJlbnQsIGdldFBpeGVs
QXQoc3JjLT5jb250ZXh0KCksIDcsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcCBiL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42NGUyNjJkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwCkBAIC0wLDAgKzEsMTYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVW5pc2NyaWJlSGVscGVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVW5pc2NyaWJlVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpU
ZXN0IHsKK3B1YmxpYzoKKyAgICBVbmlzY3JpYmVUZXN0KCkKKyAgICB7CisgICAgfQorCisgICAg
Ly8gUmV0dXJucyBhbiBIRk9OVCB3aXRoIHRoZSBnaXZlbiBuYW1lLiBUaGUgY2FsbGVyIGRvZXMg
bm90IGhhdmUgdG8gZnJlZQorICAgIC8vIHRoaXMsIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBm
cmVlZCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0LiBSZXR1cm5zIDAKKyAgICAvLyBvbiBmYWlsdXJl
LiBPbiBzdWNjZXNzLCB0aGUKKyAgICBIRk9OVCBNYWtlRm9udChjb25zdCB3Y2hhcl90KiBmb250
TmFtZSwgU0NSSVBUX0NBQ0hFKiogY2FjaGUpCisgICAgeworICAgICAgICBMT0dGT05UIGxmOwor
ICAgICAgICBtZW1zZXQoJmxmLCAwLCBzaXplb2YoTE9HRk9OVCkpOworICAgICAgICBsZi5sZkhl
aWdodCA9IDIwOworICAgICAgICB3Y3NjcHlfcyhsZi5sZkZhY2VOYW1lLCBmb250TmFtZSk7CisK
KyAgICAgICAgSEZPTlQgaGZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QoJmxmKTsKKyAgICAgICAg
aWYgKCFoZm9udCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICpjYWNoZSA9IG5l
dyBTQ1JJUFRfQ0FDSEU7CisgICAgICAgICoqY2FjaGUgPSAwOworICAgICAgICBjcmVhdGVkRm9u
dHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGhmb250LCAqY2FjaGUpKTsKKyAgICAgICAgcmV0dXJu
IGhmb250OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIC8vIERlZmF1bHQgZm9udCBwcm9wZXJ0
aWVzIHN0cnVjdHVyZSBmb3IgdGVzdHMgdG8gdXNlLgorICAgIFNDUklQVF9GT05UUFJPUEVSVElF
UyBwcm9wZXJ0aWVzOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAg
eworICAgICAgICBtZW1zZXQoJnByb3BlcnRpZXMsIDAsIHNpemVvZihTQ1JJUFRfRk9OVFBST1BF
UlRJRVMpKTsKKyAgICAgICAgcHJvcGVydGllcy5jQnl0ZXMgPSBzaXplb2YoU0NSSVBUX0ZPTlRQ
Uk9QRVJUSUVTKTsKKyAgICAgICAgcHJvcGVydGllcy53Z0JsYW5rID0gJyAnOworICAgICAgICBw
cm9wZXJ0aWVzLndnRGVmYXVsdCA9ICc/JzsgLy8gVXNlZCB3aGVuIHRoZSBjaGFyIGlzIG5vdCBp
biB0aGUgZm9udC4KKyAgICAgICAgcHJvcGVydGllcy53Z0ludmFsaWQgPSAnIyc7IC8vIFVzZWQg
Zm9yIGludmFsaWQgY2hhcmFjdGVycy4KKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRv
d24oKQorICAgIHsKKyAgICAgICAgLy8gRnJlZSBhbnkgYWxsb2NhdGVkIGZvbnRzLgorICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNyZWF0ZWRGb250cy5zaXplKCk7IGkrKykgeworICAg
ICAgICAgICAgRGVsZXRlT2JqZWN0KGNyZWF0ZWRGb250c1tpXS5maXJzdCk7CisgICAgICAgICAg
ICBTY3JpcHRGcmVlQ2FjaGUoY3JlYXRlZEZvbnRzW2ldLnNlY29uZCk7CisgICAgICAgICAgICBk
ZWxldGUgY3JlYXRlZEZvbnRzW2ldLnNlY29uZDsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVk
Rm9udHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICAvLyBUcmFja3MgYWxsb2NhdGVkIGZvbnRzIHNv
IHdlIGNhbiBkZWxldGUgdGhlbSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0LgorICAgIC8vIFRoZSBz
Y3JpcHQgY2FjaGUgcG9pbnRlciBpcyBoZWFwIGFsbG9jYXRlZCBhbmQgbXVzdCBiZSBmcmVlZC4K
KyAgICBWZWN0b3I8IHN0ZDo6cGFpcjxIRk9OVCwgU0NSSVBUX0NBQ0hFKj4gPiBjcmVhdGVkRm9u
dHM7Cit9OworCisvLyBUaGlzIHRlc3QgdGVzdHMgZ2l2aW5nIFVuaXNjcmliZSBhIHZlcnkgbGFy
Z2UgYnVmZmVyLCB3aGljaCB3aWxsIGNhdXNlIGEKKy8vIGZhaWx1cmUuCitURVNUX0YoVW5pc2Ny
aWJlVGVzdCwgVG9vQmlnKQoreworICAgIC8vIE1ha2UgYSBsYXJnZSBzdHJpbmcgd2l0aCBhbiBl
IHdpdGggYSB6aWxsaW9uIGNvbWJpbmluZyBhY2NlbnRzLgorICAgIFN0cmluZyBpbnB1dChMImUi
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKQorICAgICAgICBpbnB1dC5h
cHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KDB4MzAxKSk7IC8vIENvbWJpbmluZyBhY3V0ZSBhY2Nl
bnQuCisKKyAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlOworICAgIEhGT05UIGhmb250ID0g
TWFrZUZvbnQoTCJUaW1lcyBOZXcgUm9tYW4iLCAmc2NyaXB0Q2FjaGUpOworICAgIEFTU0VSVF9U
UlVFKGhmb250KTsKKworICAgIC8vIFRlc3QgYSBsb25nIHN0cmluZyB3aXRob3V0IHRoZSBub3Jt
YWwgbGVuZ3RoIHByb3RlY3Rpb24gd2UgaGF2ZS4gVGhpcworICAgIC8vIHdpbGwgY2F1c2Ugc2hh
cGluZyB0byBmYWlsLgorICAgIHsKKyAgICAgICAgVW5pc2NyaWJlSGVscGVyIHVuaXNjcmliZSgK
KyAgICAgICAgICAgIGlucHV0LmNoYXJhY3RlcnMoKSwgc3RhdGljX2Nhc3Q8aW50PihpbnB1dC5s
ZW5ndGgoKSksCisgICAgICAgICAgICBmYWxzZSwgaGZvbnQsIHNjcmlwdENhY2hlLCAmcHJvcGVy
dGllcyk7CisgICAgICAgIHVuaXNjcmliZS5pbml0V2l0aE9wdGlvbmFsTGVuZ3RoUHJvdGVjdGlv
bihmYWxzZSk7CisKKyAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIG9uZSBzaGFwaW5nIGVudHJ5
LCB3aXRoIG5vdGhpbmcgaW4gaXQuCisgICAgICAgIEFTU0VSVF9FUSgxLCB1bmlzY3JpYmUubV9z
aGFwZXMuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHVuaXNjcmliZS5tX3NoYXBlc1sw
XS5tX2dseXBocy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hh
cGVzWzBdLm1fbG9ncy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1f
c2hhcGVzWzBdLm1fdmlzdWFsQXR0cmlidXRlcy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fYWR2YW5jZS5zaXplKCkpOworICAgICAgICBFWFBF
Q1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fb2Zmc2V0cy5zaXplKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fanVzdGlmeS5zaXplKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0EpOwor
ICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0IpOwor
ICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0MpOwor
CisgICAgICAgIC8vIFRoZSBzaXplcyBvZiB0aGUgb3RoZXIgc3R1ZmYgc2hvdWxkIG1hdGNoIHRo
ZSBzaGFwaW5nIGVudHJ5LgorICAgICAgICBFWFBFQ1RfRVEoMSwgdW5pc2NyaWJlLm1fcnVucy5z
aXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMSwgdW5pc2NyaWJlLm1fc2NyZWVuT3JkZXIuc2l6
ZSgpKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSB2YXJpb3VzIHF1ZXJ5aW5nIGZ1bmN0
aW9ucyBoYW5kbGUgdGhlIGVtcHR5IGNhc2UKKyAgICAgICAgLy8gcHJvcGVybHkuCisgICAgICAg
IEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUud2lkdGgoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1
bmlzY3JpYmUuZmlyc3RHbHlwaEZvckNoYXJhY3RlcigwKSk7CisgICAgICAgIEVYUEVDVF9FUSgw
LCB1bmlzY3JpYmUuZmlyc3RHbHlwaEZvckNoYXJhY3RlcigxMDAwKSk7CisgICAgICAgIEVYUEVD
VF9FUSgwLCB1bmlzY3JpYmUueFRvQ2hhcmFjdGVyKDApKTsKKyAgICAgICAgRVhQRUNUX0VRKDAs
IHVuaXNjcmliZS54VG9DaGFyYWN0ZXIoMTAwMCkpOworICAgIH0KKworICAgIC8vIE5vdyB0ZXN0
IHRoZSB2ZXJ5IGxhcmdlIHN0cmluZyBhbmQgbWFrZSBzdXJlIGl0IGlzIGhhbmRsZWQgcHJvcGVy
bHkgYnkKKyAgICAvLyB0aGUgbGVuZ3RoIHByb3RlY3Rpb24uCisgICAgeworICAgICAgICBVbmlz
Y3JpYmVIZWxwZXIgdW5pc2NyaWJlKAorICAgICAgICAgICAgaW5wdXQuY2hhcmFjdGVycygpLCBz
dGF0aWNfY2FzdDxpbnQ+KGlucHV0Lmxlbmd0aCgpKSwKKyAgICAgICAgICAgIGZhbHNlLCBoZm9u
dCwgc2NyaXB0Q2FjaGUsICZwcm9wZXJ0aWVzKTsKKyAgICAgICAgdW5pc2NyaWJlLmluaXRXaXRo
T3B0aW9uYWxMZW5ndGhQcm90ZWN0aW9uKHRydWUpOworCisgICAgICAgIC8vIFRoZXJlIHNob3Vs
ZCBiZSAwIHJ1bnMgYW5kIHNoYXBlcy4KKyAgICAgICAgRVhQRUNUX0VRKDAsIHVuaXNjcmliZS5t
X3J1bnMuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHVuaXNjcmliZS5tX3NoYXBlcy5z
aXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2NyZWVuT3JkZXIuc2l6
ZSgpKTsKKworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLndpZHRoKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLmZpcnN0R2x5cGhGb3JDaGFyYWN0ZXIoMCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLmZpcnN0R2x5cGhGb3JDaGFyYWN0ZXIoMTAwMCkp
OworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLnhUb0NoYXJhY3RlcigwKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUueFRvQ2hhcmFjdGVyKDEwMDApKTsKKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48178</attachid>
            <date>2010-02-04 15:40:11 -0800</date>
            <delta_ts>2010-02-04 23:18:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34509-20100204154009.patch</filename>
            <type>text/plain</type>
            <size>35542</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDk1NmQ2YmQuLjdlNTc0OGQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI4IEBACisyMDEwLTAyLTA0ICBZYWFyIFNjaG5pdG1hbiAgPHlhYXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwc3RyZWFt
aW5nIGd0ZXN0cyBmcm9tIGNocm9taXVtOiBVbmlzY3JpYmVIZWxwZXIgYW5kIFRyYW5zcGFyZW5j
eVdpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ1
MDkKKworICAgICAgICBSZXN1Ym1pdDogVGhlIHByZXZpb3VzIGNvbW1pdCAocjU0MzMzKSB3YXMg
cm9sbGVkIGJhY2suCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHRlc3RzL1Ry
YW5zcGFyZW5jeVdpblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJFQ1RUb0Zs
b2F0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3TmF0aXZlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRQaXhlbEF0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyVG9wTGF5ZXJBbHBo
YUNoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJUb3BMYXllckFscGhhUGl4ZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KyAgICAgICAgKiB0ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpVbmlzY3JpYmVUZXN0OjpVbmlzY3JpYmVUZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVuaXNjcmliZVRlc3Q6Ok1ha2VGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmli
ZVRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZVRlc3Q6OlRlYXJEb3du
KToKKyAgICAgICAgKFRFU1RfRik6CisKIDIwMTAtMDItMDMgIERyZXcgV2lsc29uICA8YXR3aWxz
b25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFr
b3YuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDRmNmQzZjYuLjUxNjkzYmEgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBA
IC00NTMsNiArNDUzLDE0IEBACiAgICAgICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3Rlc3RzL1J1bkFsbFRlc3RzLmNwcCcsCiAgICAgICAgICAgICBd
LAorICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCisgICAgICAgICAgICAgICAgWydPUz09Indp
biInLCB7CisgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWworICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICd0ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAg
ICAgICAgIF0sCisgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICBdLAogICAgICAgICB9
LAogICAgIF0sICMgdGFyZ2V0cwogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFy
ZW5jeVdpblRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZGZm
MTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5
V2luVGVzdC5jcHAKQEAgLTAsMCArMSw2OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRl
ICJUcmFuc3BhcmVuY3lXaW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgRmxv
YXRSZWN0IFJFQ1RUb0Zsb2F0UmVjdChjb25zdCBSRUNUKiByZWN0KQoreworICAgIHJldHVybiBG
bG9hdFJlY3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlY3QtPmxlZnQpLAorICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlY3QtPnRvcCksCisgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxmbG9hdD4ocmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0KSwKKyAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihyZWN0LT5ib3R0b20gLSByZWN0LT50b3Ap
KTsKK30KKworc3RhdGljIHZvaWQgZHJhd05hdGl2ZVJlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50
IGgpCit7CisgICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcyA9IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyAgICBIREMgZGMgPSBjYW52YXMtPmJlZ2luUGxhdGZv
cm1QYWludCgpOworCisgICAgUkVDVCBpbm5lclJjOworICAgIGlubmVyUmMubGVmdCA9IHg7Cisg
ICAgaW5uZXJSYy50b3AgPSB5OworICAgIGlubmVyUmMucmlnaHQgPSB4ICsgdzsKKyAgICBpbm5l
clJjLmJvdHRvbSA9IHkgKyBoOworICAgIEZpbGxSZWN0KGRjLCAmaW5uZXJSYywKKyAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PEhCUlVTSD4oR2V0U3RvY2tPYmplY3QoQkxBQ0tfQlJVU0gp
KSk7CisKKyAgICBjYW52YXMtPmVuZFBsYXRmb3JtUGFpbnQoKTsKK30KKworc3RhdGljIENvbG9y
IGdldFBpeGVsQXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgeCwgaW50IHkpCit7Cisg
ICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+CisgICAgICAgIGdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKGZh
bHNlKTsKKyAgICByZXR1cm4gQ29sb3IoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUkdCQTMyKj4o
Yml0bWFwLmdldEFkZHIzMih4LCB5KSkpOworfQorCisvLyBSZXNldHMgdGhlIHRvcCBsYXllcidz
IGFscGhhIGNoYW5uZWwgdG8gMCBmb3IgZWFjaCBwaXhlbC4gVGhpcyBzaW11bGF0ZXMKKy8vIFdp
bmRvd3MgbWVzc2luZyBpdCB1cC4KK3N0YXRpYyB2b2lkIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5u
ZWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIFNrQml0bWFwJiBiaXRtYXAgPSBj
b25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPgorICAgICAg
ICBjYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsK
KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGJpdG1hcC5oZWlnaHQoKTsgeSsrKSB7CisgICAgICAg
IHVpbnQzMl90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOworICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGJpdG1hcC53aWR0aCgpOyB4KyspCisgICAgICAgICAgICByb3dbeF0gJj0g
MHgwMEZGRkZGRjsKKyAgICB9Cit9CisKKy8vIENsZWFycyB0aGUgYWxwaGEgY2hhbm5lbCBvbiB0
aGUgc3BlY2lmaWVkIHBpeGVsLgorc3RhdGljIHZvaWQgY2xlYXJUb3BMYXllckFscGhhUGl4ZWwo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgeCwgaW50IHkpCit7CisgICAgU2tCaXRtYXAm
IGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+CisgICAgICAgIGNhbnZhcygpLT5nZXRUb3BQbGF0Zm9ybURldmljZSgpLmFjY2Vzc0JpdG1h
cChmYWxzZSkpOworICAgICpiaXRtYXAuZ2V0QWRkcjMyKHgsIHkpICY9IDB4MDBGRkZGRkY7Cit9
CisKK3N0YXRpYyBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNv
bnN0IENvbG9yJiBjKQoreworICAgIHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzIG9sZEZsYWdzID0g
b3V0LmZsYWdzKHN0ZDo6aW9zX2Jhc2U6OmhleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppb3NfYmFzZTo6c2hvd2Jhc2UpOworICAgIG91
dCA8PCBjLnJnYigpOworICAgIG91dC5mbGFncyhvbGRGbGFncyk7CisgICAgcmV0dXJuIG91dDsK
K30KKworVEVTVChUcmFuc3BhcmVuY3lXaW4sIE5vTGF5ZXIpCit7CisgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE3LCAxNiksIERldmljZVJH
QikpOworCisgICAgLy8gS2VlcFRyYW5zZm9ybQorICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5
V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250ZXh0KCksCisgICAgICAg
ICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6Tm9MYXllciwKKyAgICAgICAgICAgICAgICAg
ICAgVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0KDEsIDEsIDE0LCAxMikpOworCisgICAgICAgIEVYUEVDVF9UUlVFKHNyYy0+Y29udGV4
dCgpID09IGhlbHBlci5jb250ZXh0KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShJbnRTaXplKDE0
LCAxMikgPT0gaGVscGVyLm1fbGF5ZXJTaXplKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50UmVj
dCgxLCAxLCAxNCwgMTIpID09IGhlbHBlci5kcmF3UmVjdCgpKTsKKyAgICB9CisKKyAgICAvLyBV
bnRyYW5zZm9ybSBpcyBub3QgYWxsb3dlZCBmb3IgTm9MYXllci4KKworICAgIC8vIFNjYWxlVHJh
bnNmb3JtCisgICAgc3JjLT5jb250ZXh0KCktPnNhdmUoKTsKKyAgICBzcmMtPmNvbnRleHQoKS0+
c2NhbGUoRmxvYXRTaXplKDIuMCwgMC41KSk7CisgICAgeworICAgICAgICBUcmFuc3BhcmVuY3lX
aW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpOb0xheWVyLAorICAgICAgICAgICAgICAgICAg
ICBUcmFuc3BhcmVuY3lXaW46OlNjYWxlVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0KDIsIDIsIDYsIDYpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworCisgICAg
ICAgIC8vIFRoZSBjb29yZGluYXRlIHN5c3RlbSBzaG91bGQgYmUgYmFzZWQgaW4gdGhlIHVwcGVy
IGxlZnQgb2Ygb3VyIGJveC4KKyAgICAgICAgLy8gSXQgc2hvdWxkIGJlIHBvc3QtdHJhbnNmb3Jt
ZWQuCisgICAgICAgIEVYUEVDVF9UUlVFKHNyYy0+Y29udGV4dCgpID09IGhlbHBlci5jb250ZXh0
KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShJbnRTaXplKDEyLCAzKSA9PSBoZWxwZXIubV9sYXll
clNpemUpOworICAgICAgICBFWFBFQ1RfVFJVRShJbnRSZWN0KDQsIDEsIDEyLCAzKSA9PSBoZWxw
ZXIuZHJhd1JlY3QoKSk7CisgICAgfQorICAgIHNyYy0+Y29udGV4dCgpLT5yZXN0b3JlKCk7Cit9
CisKK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBXaGl0ZUxheWVyKQoreworICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZpY2VS
R0IpKTsKKworICAgIC8vIEtlZXBUcmFuc2Zvcm0KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5j
eVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAg
ICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OldoaXRlTGF5ZXIsCisgICAgICAgICAgICAg
ICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAg
ICAgSW50UmVjdCgxLCAxLCAxNCwgMTIpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOwor
CisgICAgICAgIEVYUEVDVF9UUlVFKHNyYy0+Y29udGV4dCgpICE9IGhlbHBlci5jb250ZXh0KCkp
OworICAgICAgICBFWFBFQ1RfVFJVRShJbnRTaXplKDE0LCAxMikgPT0gaGVscGVyLm1fbGF5ZXJT
aXplKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCgxLCAxLCAxNCwgMTIpID09IGhlbHBl
ci5kcmF3UmVjdCgpKTsKKyAgICB9CisKKyAgICAvLyBVbnRyYW5zZm9ybQorICAgIHsKKyAgICAg
ICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250
ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6V2hpdGVMYXllciwK
KyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpVbnRyYW5zZm9ybSwKKyAgICAg
ICAgICAgICAgICAgICAgSW50UmVjdCgxLCAxLCAxNCwgMTIpKTsKKyAgICAgICAgaGVscGVyLmNv
bXBvc2l0ZSgpOworCisgICAgICAgIEVYUEVDVF9UUlVFKHNyYy0+Y29udGV4dCgpICE9IGhlbHBl
ci5jb250ZXh0KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShJbnRTaXplKDE0LCAxMikgPT0gaGVs
cGVyLm1fbGF5ZXJTaXplKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCgwLCAwLCAxNCwg
MTIpID09IGhlbHBlci5kcmF3UmVjdCgpKTsKKyAgICB9CisKKyAgICAvLyBTY2FsZVRyYW5zZm9y
bQorICAgIHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7CisgICAgc3JjLT5jb250ZXh0KCktPnNjYWxl
KEZsb2F0U2l6ZSgyLjAsIDAuNSkpOworICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhl
bHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAg
ICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6V2hpdGVMYXllciwKKyAgICAgICAgICAgICAgICAgICAg
VHJhbnNwYXJlbmN5V2luOjpTY2FsZVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50
UmVjdCgyLCAyLCA2LCA2KSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKworICAgICAg
ICAvLyBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gc2hvdWxkIGJlIGJhc2VkIGluIHRoZSB1cHBlciBs
ZWZ0IG9mIG91ciBib3guCisgICAgICAgIC8vIEl0IHNob3VsZCBiZSBwb3N0LXRyYW5zZm9ybWVk
LgorICAgICAgICBFWFBFQ1RfVFJVRShzcmMtPmNvbnRleHQoKSAhPSBoZWxwZXIuY29udGV4dCgp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50U2l6ZSgxMiwgMykgPT0gaGVscGVyLm1fbGF5ZXJT
aXplKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSW50UmVjdCgwLCAwLCAxMiwgMykgPT0gaGVscGVy
LmRyYXdSZWN0KCkpOworICAgIH0KKyAgICBzcmMtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworfQor
CitURVNUKFRyYW5zcGFyZW5jeVdpbiwgVGV4dENvbXBvc2l0ZSkKK3sKKyAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYsIDE2KSwgRGV2aWNl
UkdCKSk7CisKKyAgICAvLyBLZWVwVHJhbnNmb3JtIGlzIHRoZSBvbmx5IHZhbGlkIHRyYW5zZm9y
bSBtb2RlIGZvciBUZXh0Q29tcG9zaXRlLgorICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2lu
IGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAg
ICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6VGV4dENvbXBvc2l0ZSwKKyAgICAgICAgICAgICAg
ICAgICAgVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAg
ICBJbnRSZWN0KDEsIDEsIDE0LCAxMikpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisK
KyAgICAgICAgRVhQRUNUX1RSVUUoc3JjLT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQoKSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKEludFNpemUoMTQsIDEyKSA9PSBoZWxwZXIubV9sYXllclNp
emUpOworICAgICAgICBFWFBFQ1RfVFJVRShJbnRSZWN0KDEsIDEsIDE0LCAxMikgPT0gaGVscGVy
LmRyYXdSZWN0KCkpOworICAgIH0KK30KKworVEVTVChUcmFuc3BhcmVuY3lXaW4sIE9wYXF1ZUNv
bXBvc2l0ZUxheWVyKQoreworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVy
OjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZpY2VSR0IpKTsKKworICAgIC8vIEtlZXBUcmFu
c2Zvcm0KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhl
bHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVu
Y3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3Bh
cmVuY3lXaW46OktlZXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwg
MSwgMTQsIDEyKSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKworICAgICAgICBFWFBF
Q1RfVFJVRShzcmMtPmNvbnRleHQoKSAhPSBoZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoSW50U2l6ZSgxNCwgMTIpID09IGhlbHBlci5tX2xheWVyU2l6ZSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKEludFJlY3QoMSwgMSwgMTQsIDEyKSA9PSBoZWxwZXIuZHJhd1JlY3QoKSk7
CisgICAgfQorCisgICAgLy8gS2VlcFRyYW5zZm9ybSB3aXRoIHNjcm9sbCBhcHBsaWVkLgorICAg
IHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7CisgICAgc3JjLT5jb250ZXh0KCktPnRyYW5zbGF0ZSgw
LCAtMSk7CisgICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBo
ZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJl
bmN5V2luOjpPcGFxdWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNw
YXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDEs
IDEsIDE0LCAxNCkpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisKKyAgICAgICAgRVhQ
RUNUX1RSVUUoc3JjLT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKEludFNpemUoMTQsIDE0KSA9PSBoZWxwZXIubV9sYXllclNpemUpOworICAgICAg
ICBFWFBFQ1RfVFJVRShJbnRSZWN0KDEsIDEsIDE0LCAxNCkgPT0gaGVscGVyLmRyYXdSZWN0KCkp
OworICAgIH0KKyAgICBzcmMtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworCisgICAgLy8gVW50cmFu
c2Zvcm0KKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhl
bHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVu
Y3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3Bh
cmVuY3lXaW46OlVudHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDEsIDEs
IDE0LCAxMikpOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisKKyAgICAgICAgRVhQRUNU
X1RSVUUoc3JjLT5jb250ZXh0KCkgIT0gaGVscGVyLmNvbnRleHQoKSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKEludFNpemUoMTQsIDEyKSA9PSBoZWxwZXIubV9sYXllclNpemUpOworICAgICAgICBF
WFBFQ1RfVFJVRShJbnRSZWN0KDAsIDAsIDE0LCAxMikgPT0gaGVscGVyLmRyYXdSZWN0KCkpOwor
ICAgIH0KKworICAgIC8vIFNjYWxlVHJhbnNmb3JtCisgICAgc3JjLT5jb250ZXh0KCktPnNhdmUo
KTsKKyAgICBzcmMtPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKDIuMCwgMC41KSk7CisgICAg
eworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBoZWxwZXIuaW5pdChz
cmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpPcGFx
dWVDb21wb3NpdGVMYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpT
Y2FsZVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgyLCAyLCA2LCA2KSk7
CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKworICAgICAgICAvLyBUaGUgY29vcmRpbmF0
ZSBzeXN0ZW0gc2hvdWxkIGJlIGJhc2VkIGluIHRoZSB1cHBlciBsZWZ0IG9mIG91ciBib3guCisg
ICAgICAgIC8vIEl0IHNob3VsZCBiZSBwb3N0LXRyYW5zZm9ybWVkLgorICAgICAgICBFWFBFQ1Rf
VFJVRShzcmMtPmNvbnRleHQoKSAhPSBoZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSW50U2l6ZSgxMiwgMykgPT0gaGVscGVyLm1fbGF5ZXJTaXplKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoSW50UmVjdCgwLCAwLCAxMiwgMykgPT0gaGVscGVyLmRyYXdSZWN0KCkpOworICAg
IH0KKyAgICBzcmMtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworfQorCitURVNUKFRyYW5zcGFyZW5j
eVdpbiwgV2hpdGVMYXllclBpeGVsVGVzdCkKK3sKKyAgICAvLyBNYWtlIGEgdG90YWwgdHJhbnNw
YXJlbnQgYnVmZmVyLCBhbmQgZHJhdyB0aGUgd2hpdGUgbGF5ZXIgaW5zZXQgYnkgMSBweC4KKyAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYs
IDE2KSwgRGV2aWNlUkdCKSk7CisKKyAgICB7CisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxw
ZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAg
ICAgICBUcmFuc3BhcmVuY3lXaW46OldoaXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRy
YW5zcGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVj
dCgxLCAxLCAxNCwgMTQpKTsKKworICAgICAgICAvLyBDb29yZGluYXRlcyBzaG91bGQgYmUgaW4g
dGhlIG9yaWdpbmFsIHNwYWNlLCBub3QgdGhlIGxheWVyLgorICAgICAgICBkcmF3TmF0aXZlUmVj
dChoZWxwZXIuY29udGV4dCgpLCAzLCAzLCAxLCAxKTsKKyAgICAgICAgY2xlYXJUb3BMYXllckFs
cGhhQ2hhbm5lbChoZWxwZXIuY29udGV4dCgpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgp
OworICAgIH0KKworICAgIC8vIFRoZSBmaW5hbCBpbWFnZSBzaG91bGQgYmUgdHJhbnNwYXJlbnQg
YXJvdW5kIHRoZSBlZGdlcyBmb3IgMSBweCwgd2hpdGUKKyAgICAvLyBpbiB0aGUgbWlkZGxlLCB3
aXRoICgzLDMpICh3aGF0IHdlIGRyZXcgYWJvdmUpIGJlaW5nIG9wYXF1ZSBibGFjay4KKyAgICBF
WFBFQ1RfRVEoQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRl
eHQoKSwgMCwgMCkpOworICAgIEVYUEVDVF9FUShDb2xvcihDb2xvcjo6d2hpdGUpLCBnZXRQaXhl
bEF0KHNyYy0+Y29udGV4dCgpLCAyLCAyKSk7CisgICAgRVhQRUNUX0VRKENvbG9yKENvbG9yOjpi
bGFjayksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDMsIDMpKTsKKyAgICBFWFBFQ1RfRVEo
Q29sb3IoQ29sb3I6OndoaXRlKSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgNCwgNCkpOwor
fQorCitURVNUKFRyYW5zcGFyZW5jeVdpbiwgT3BhcXVlQ29tcG9zaXRlTGF5ZXJQaXhlbCkKK3sK
KyAgICBDb2xvciByZWQoMHhGRkZGMDAwMCksIGRhcmtSZWQoMHhGRkJGMDAwMCk7CisgICAgQ29s
b3IgZ3JlZW4oMHhGRjAwRkYwMCk7CisKKyAgICAvLyBNYWtlIGEgcmVkIGJvdHRvbSBsYXllciwg
Zm9sbG93ZWQgYnkgYSBoYWxmIGdyZWVuIG5leHQgbGF5ZXIgQCA1MCUuCisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAxNiksIERldmlj
ZVJHQikpOworCisgICAgRmxvYXRSZWN0IGZ1bGxSZWN0KDAsIDAsIDE2LCAxNik7CisgICAgc3Jj
LT5jb250ZXh0KCktPmZpbGxSZWN0KGZ1bGxSZWN0LCByZWQsIERldmljZUNvbG9yU3BhY2UpOwor
ICAgIHNyYy0+Y29udGV4dCgpLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDAuNSk7CisgICAgRmxv
YXRSZWN0IHJpZ2h0SGFsZig4LCAwLCA4LCAxNik7CisgICAgc3JjLT5jb250ZXh0KCktPmZpbGxS
ZWN0KHJpZ2h0SGFsZiwgZ3JlZW4sIERldmljZUNvbG9yU3BhY2UpOworCisgICAgLy8gTWFrZSBh
IHRyYW5zcGFyZW5jeSBsYXllciBpbnNldCBieSBvbmUgcGl4ZWwsIGFuZCBmaWxsIGl0IGluc2V0
IGJ5CisgICAgLy8gYW5vdGhlciBwaXhlbCB3aXRoIDUwJSBibGFjay4KKyAgICB7CisgICAgICAg
IFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4
dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0
ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zv
cm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgMSwgMTQsIDE0KSk7CisKKyAgICAg
ICAgRmxvYXRSZWN0IGlubmVyKDIsIDIsIDEyLCAxMik7CisgICAgICAgIGhlbHBlci5jb250ZXh0
KCktPmZpbGxSZWN0KGlubmVyLCBDb2xvcigweDdmMDAwMDAwKSwgRGV2aWNlQ29sb3JTcGFjZSk7
CisgICAgICAgIC8vIFRoZXNlIGNvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgbGF5ZXIs
IHdoaXNoIGlzIGluc2V0IGJ5IDF4MQorICAgICAgICAvLyBwaXhlbHMgZnJvbSB0aGUgdG9wIGxl
ZnQuIFNvIHdlJ3JlIGFjdHVhbGx5IGNsZWFyaW5nICgyLCAyKSBhbmQKKyAgICAgICAgLy8gKDEz
LDEzKSwgd2hpY2ggYXJlIHRoZSBleHRyZW1lIGNvcm5lcnMgb2YgdGhlIGJsYWNrIGFyZWEgKGFu
ZCB3aGljaAorICAgICAgICAvLyB3ZSBjaGVjayBiZWxvdykuCisgICAgICAgIGNsZWFyVG9wTGF5
ZXJBbHBoYVBpeGVsKGhlbHBlci5jb250ZXh0KCksIDEsIDEpOworICAgICAgICBjbGVhclRvcExh
eWVyQWxwaGFQaXhlbChoZWxwZXIuY29udGV4dCgpLCAxMiwgMTIpOworICAgICAgICBoZWxwZXIu
Y29tcG9zaXRlKCk7CisgICAgfQorCisgICAgLy8gRmluaXNoIHRoZSBjb21wb3NpdGluZy4KKyAg
ICBzcmMtPmNvbnRleHQoKS0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIC8vIENoZWNr
IHRoYXQgd2UgZ290IHRoZSByaWdodCB2YWx1ZXMsIGl0IHNob3VsZCBiZSBsaWtlIHRoZSByZWN0
YW5nbGUgd2FzCisgICAgLy8gZHJhd24gd2l0aCBoYWxmIG9wYWNpdHkgZXZlbiB0aG91Z2ggdGhl
IGFscGhhIGNoYW5uZWwgZ290IG1lc3NlZCB1cC4KKyAgICBFWFBFQ1RfRVEocmVkLCBnZXRQaXhl
bEF0KHNyYy0+Y29udGV4dCgpLCAwLCAwKSk7CisgICAgRVhQRUNUX0VRKHJlZCwgZ2V0UGl4ZWxB
dChzcmMtPmNvbnRleHQoKSwgMSwgMSkpOworICAgIEVYUEVDVF9FUShkYXJrUmVkLCBnZXRQaXhl
bEF0KHNyYy0+Y29udGV4dCgpLCAyLCAyKSk7CisKKyAgICAvLyBUaGUgZGFyayByZXN1bHQgaXM6
CisgICAgLy8gICAoYmxhY2sgQCA1MCUgYXRvcCBncmVlbikgQCA1MCUgYXRvcCByZWQgPSAweEZG
ODA0MDAwCisgICAgLy8gd2hpY2ggaXMgMHhGRkEwMjAwMCAoU2tpYSBjb21wdXRlcyAweEZGQTEx
RjAwIGR1ZSB0byByb3VuZGluZykuCisgICAgQ29sb3IgZGFya0dyZWVuUmVkKDB4RkY4MDNmMDAp
OworICAgIEVYUEVDVF9FUShkYXJrR3JlZW5SZWQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCks
IDEzLCAxMykpOworCisgICAgLy8gNTAlIGdyZWVuIG9uIHRvcCBvZiByZWQgPSBGRjgwODAwMCAo
cm91bmRlZCB0byB3aGF0IFNraWEgd2lsbCBwcm9kdWNlKS4KKyAgICBDb2xvciBncmVlblJlZCgw
eEZGODA3RjAwKTsKKyAgICBFWFBFQ1RfRVEoZ3JlZW5SZWQsIGdldFBpeGVsQXQoc3JjLT5jb250
ZXh0KCksIDE0LCAxNCkpOworICAgIEVYUEVDVF9FUShncmVlblJlZCwgZ2V0UGl4ZWxBdChzcmMt
PmNvbnRleHQoKSwgMTUsIDE1KSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgdHJhbnNsYXRpb25zIGFy
ZSBwcm9wZXJseSBoYW5kbGVkIHdoZW4gdXNpbmcgS2VlcFRyYW5zZm9ybS4KK1RFU1QoVHJhbnNw
YXJlbmN5V2luLCBUcmFuc2xhdGVPcGFxdWVDb21wb3NpdGVMYXllcikKK3sKKyAgICAvLyBGaWxs
IHdpdGggd2hpdGUuCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShJbnRTaXplKDE2LCAxNiksIERldmljZVJHQikpOworICAgIENvbG9yIHdoaXRlKDB4RkZG
RkZGRkYpOworICAgIEZsb2F0UmVjdCBmdWxsUmVjdCgwLCAwLCAxNiwgMTYpOworICAgIHNyYy0+
Y29udGV4dCgpLT5maWxsUmVjdChmdWxsUmVjdCwgd2hpdGUsIERldmljZUNvbG9yU3BhY2UpOwor
CisgICAgLy8gU2Nyb2xsIGRvd24gYnkgOCAoY29vcmRpbmF0ZSBzeXN0ZW0gZ29lcyB1cCkuCisg
ICAgc3JjLT5jb250ZXh0KCktPnNhdmUoKTsKKyAgICBzcmMtPmNvbnRleHQoKS0+dHJhbnNsYXRl
KDAsIC04KTsKKworICAgIENvbG9yIHJlZCgweEZGRkYwMDAwKTsKKyAgICBDb2xvciBncmVlbigw
eEZGMDBGRjAwKTsKKyAgICB7CisgICAgICAgIC8vIE1ha2UgdGhlIHRyYW5zcGFyZW5jeSBsYXll
ciBhZnRlciB0cmFuc2xhdGlvbiB3aWxsIGJlIEAgKDAsIC04KSB3aXRoCisgICAgICAgIC8vIHNp
emUgMTZ4MTYuCisgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CisgICAgICAgIGhlbHBl
ci5pbml0KHNyYy0+Y29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lX
aW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVu
Y3lXaW46OktlZXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwg
MTYsIDE2KSk7CisKKyAgICAgICAgLy8gRHJhdyBhIHJlZCBwaXhlbCBhdCAoMTUsIDE1KS4gVGhp
cyBzaG91bGQgYmUgdGhlIGF0ICgxNSwgNykgYWZ0ZXIKKyAgICAgICAgLy8gdGhlIHRyYW5zZm9y
bS4KKyAgICAgICAgRmxvYXRSZWN0IGJvdHRvbVJpZ2h0KDE1LCAxNSwgMSwgMSk7CisgICAgICAg
IGhlbHBlci5jb250ZXh0KCktPmZpbGxSZWN0KGJvdHRvbVJpZ2h0LCBncmVlbiwgRGV2aWNlQ29s
b3JTcGFjZSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKyAgICB9CisKKyAgICBzcmMt
PmNvbnRleHQoKS0+cmVzdG9yZSgpOworCisgICAgLy8gQ2hlY2sgdGhlIHBpeGVsIHdlIHdyb3Rl
LgorICAgIEVYUEVDVF9FUShncmVlbiwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMTUsIDcp
KTsKK30KKworLy8gU2FtZSBhcyBPcGFxdWVDb21wb3NpdGVMYXllciwgYnV0IHRoZSBjYW52YXMg
aGFzIGEgcm90YXRpb24gYXBwbGllZC4gVGhpcworLy8gdGVzdHMgdGhhdCB0aGUgcHJvcGVydCB0
cmFuc2Zvcm0gaXMgYXBwbGllZCB0byB0aGUgY29waWVkIGxheWVyLgorVEVTVChUcmFuc3BhcmVu
Y3lXaW4sIFJvdGF0ZU9wYXF1ZUNvbXBvc2l0ZUxheWVyKQoreworICAgIE93blB0cjxJbWFnZUJ1
ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZpY2VSR0Ip
KTsKKworICAgIC8vIFRoZSBiYWNrZ3JvdW5kIGlzIHdoaXRlLgorICAgIENvbG9yIHdoaXRlKDB4
RkZGRkZGRkYpOworICAgIEZsb2F0UmVjdCBmdWxsUmVjdCgwLCAwLCAxNiwgMTYpOworICAgIHNy
Yy0+Y29udGV4dCgpLT5maWxsUmVjdChmdWxsUmVjdCwgd2hpdGUsIERldmljZUNvbG9yU3BhY2Up
OworCisgICAgLy8gUm90YXRlIHRoZSBpbWFnZSBieSA5MCBkZWdyZWVzLiBUaGlzIG1hdHJpeCBp
cyB0aGUgc2FtZSBhcworICAgIC8vIGN3OTAucm90YXRlKDkwKTsgYnV0IGF2b2lkcyByb3VuZGlu
ZyBlcnJvcnMuIFJvdW5kaW5nIGVycm9ycyBjYW4gY2F1c2UKKyAgICAvLyBTa2lhIHRvIHRoaW5r
IHRoYXQgIXJlY3RTdGF5c1JlY3QoKSBhbmQgaXQgd2lsbCBmYWxsIHRocm91Z2ggdG8gcGF0aAor
ICAgIC8vIGRyYXdpbmcgbW9kZSwgd2hpY2ggaW4gdHVybiBnaXZlcyB1cyBhbnRpYWxpYXNpbmcu
IFdlIHdhbnQgbm8KKyAgICAvLyBhbnRpYWxpYXNpbmcgb3Igb3RoZXIgcm91bmRpbmcgcHJvYmxl
bXMgc2luY2Ugd2UncmUgdGVzdGluZyBleGFjdCBwaXhlbAorICAgIC8vIHZhbHVlcy4KKyAgICBz
cmMtPmNvbnRleHQoKS0+c2F2ZSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN3OTAoMCwg
MSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAwLCAwLCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIDAsIDEpOworICAgIHNyYy0+Y29udGV4dCgpLT5jb25jYXRDVE0o
Y3c5MCk7CisKKyAgICAvLyBNYWtlIGEgdHJhbnNwYXJlbmN5IGxheWVyIGNvbnNpc3Rpbmcgb2Yg
YSBob3Jpem9udGFsIGxpbmUgb2YgNTAlIGJsYWNrLgorICAgIC8vIFNpbmNlIHRoZSByb3RhdGlv
biBpcyBhcHBsaWVkLCB0aGlzIHdpbGwgYWN0dWFsbHkgYmUgYSB2ZXJ0aWNhbCBsaW5lCisgICAg
Ly8gZG93biB0aGUgbWlkZGxlIG9mIHRoZSBpbWFnZS4KKyAgICBzcmMtPmNvbnRleHQoKS0+YmVn
aW5UcmFuc3BhcmVuY3lMYXllcigwLjUpOworICAgIEZsb2F0UmVjdCBibGFja1JlY3QoMCwgLTks
IDE2LCAyKTsKKyAgICBDb2xvciBibGFjaygweEZGMDAwMDAwKTsKKyAgICBzcmMtPmNvbnRleHQo
KS0+ZmlsbFJlY3QoYmxhY2tSZWN0LCBibGFjaywgRGV2aWNlQ29sb3JTcGFjZSk7CisKKyAgICAv
LyBOb3cgZHJhdyA1MCUgcmVkIHNxdWFyZS4KKyAgICB7CisgICAgICAgIC8vIENyZWF0ZSBhIHRy
YW5zcGFyZW5jeSBoZWxwZXIgaW5zZXQgb25lIHBpeGVsIGluIHRoZSBidWZmZXIuIFRoZQorICAg
ICAgICAvLyBjb29yZGluYXRlcyBhcmUgYmVmb3JlIHRyYW5zZm9ybWluZyBpbnRvIHRoaXMgc3Bh
Y2UsIGFuZCBtYXBzIHRvCisgICAgICAgIC8vIEludFJlY3QoMSwgMSwgMTQsIDE0KS4KKyAgICAg
ICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250
ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9z
aXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6VW50cmFuc2Zv
cm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgLTE1LCAxNCwgMTQpKTsKKworICAg
ICAgICAvLyBGaWxsIHdpdGggcmVkLgorICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVj
dChoZWxwZXIuZHJhd1JlY3QoKSwgQ29sb3IoMHg3ZjdmMDAwMCksIERldmljZUNvbG9yU3BhY2Up
OworICAgICAgICBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKGhlbHBlci5jb250ZXh0KCkpOwor
ICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CisgICAgfQorCisgICAgLy8gRmluaXNoIHRoZSBj
b21wb3NpdGluZy4KKyAgICBzcmMtPmNvbnRleHQoKS0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
KworICAgIC8vIFRvcCBjb3JuZXIgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbCBiYWNrZ3JvdW5kLgor
ICAgIEVYUEVDVF9FUSh3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMCwgMCkpOwor
CisgICAgLy8gQ2hlY2sgdGhlIHN0cmlwZSBkb3duIHRoZSBtaWRkbGUsIGZpcnN0IGF0IHRoZSB0
b3AuLi4KKyAgICBDb2xvciBncmF5KDB4RkY4MDgwODApOworICAgIEVYUEVDVF9FUSh3aGl0ZSwg
Z2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgNiwgMCkpOworICAgIEVYUEVDVF9FUShncmF5LCBn
ZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCA3LCAwKSk7CisgICAgRVhQRUNUX0VRKGdyYXksIGdl
dFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDgsIDApKTsKKyAgICBFWFBFQ1RfRVEod2hpdGUsIGdl
dFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDksIDApKTsKKworICAgIC8vIC4uLm5vdyBhdCB0aGUg
Ym90dG9tLgorICAgIEVYUEVDVF9FUSh3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwg
NiwgMTUpKTsKKyAgICBFWFBFQ1RfRVEoZ3JheSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwg
NywgMTUpKTsKKyAgICBFWFBFQ1RfRVEoZ3JheSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwg
OCwgMTUpKTsKKyAgICBFWFBFQ1RfRVEod2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCks
IDksIDE1KSk7CisKKyAgICAvLyBPdXIgcmVkIHNxdWFyZSBzaG91bGQgYmUgMjUlIHJlZCBvdmVy
IHRoZSB0b3Agb2YgdGhvc2UgdHdvLgorICAgIENvbG9yIHJlZHdoaXRlKDB4RkZkZmJmYmYpOwor
ICAgIENvbG9yIHJlZGdyYXkoMHhGRjlmODA4MCk7CisgICAgRVhQRUNUX0VRKHdoaXRlLCBnZXRQ
aXhlbEF0KHNyYy0+Y29udGV4dCgpLCAwLCAxKSk7CisgICAgRVhQRUNUX0VRKHJlZHdoaXRlLCBn
ZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAxLCAxKSk7CisgICAgRVhQRUNUX0VRKHJlZHdoaXRl
LCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCA2LCAxKSk7CisgICAgRVhQRUNUX0VRKHJlZGdy
YXksIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDcsIDEpKTsKKyAgICBFWFBFQ1RfRVEocmVk
Z3JheSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgOCwgMSkpOworICAgIEVYUEVDVF9FUShy
ZWR3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgOSwgMSkpOworICAgIEVYUEVDVF9F
UShyZWR3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMTQsIDEpKTsKKyAgICBFWFBF
Q1RfRVEod2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDE1LCAxKSk7CisKKyAgICAv
LyBDb21wbGV0ZSB0aGUgNTAlIHRyYW5zcGFyZW50IGxheWVyLgorICAgIHNyYy0+Y29udGV4dCgp
LT5yZXN0b3JlKCk7Cit9CisKK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBUcmFuc2xhdGVTY2FsZU9w
YXF1ZUNvbXBvc2l0ZUxheWVyKQoreworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdl
QnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBEZXZpY2VSR0IpKTsKKworICAgIC8vIFRo
ZSBiYWNrZ3JvdW5kIGlzIHdoaXRlIG9uIHRvcCB3aXRoIHJlZCBvbiBib3R0b20uCisgICAgQ29s
b3Igd2hpdGUoMHhGRkZGRkZGRik7CisgICAgRmxvYXRSZWN0IHRvcFJlY3QoMCwgMCwgMTYsIDgp
OworICAgIHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdCh0b3BSZWN0LCB3aGl0ZSwgRGV2aWNlQ29s
b3JTcGFjZSk7CisgICAgQ29sb3IgcmVkKDB4RkZGRjAwMDApOworICAgIEZsb2F0UmVjdCBib3R0
b21SZWN0KDAsIDgsIDE2LCA4KTsKKyAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QoYm90dG9t
UmVjdCwgcmVkLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgIHNyYy0+Y29udGV4dCgpLT5zYXZl
KCk7CisKKyAgICAvLyBUcmFuc2xhdGUgbGVmdCBieSBvbmUgcGl4ZWwuCisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbGVmdDsKKyAgICBsZWZ0LnRyYW5zbGF0ZSgtMSwgMCk7CisKKyAgICAvLyBT
Y2FsZSBieSAyeC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZTsKKyAgICBzY2FsZS5z
Y2FsZSgyLjApOworICAgIHNyYy0+Y29udGV4dCgpLT5jb25jYXRDVE0oc2NhbGUpOworCisgICAg
Ly8gVGhlbiB0cmFuc2xhdGUgdXAgYnkgb25lIHBpeGVsICh3aGljaCB3aWxsIGFjdHVhbGx5IGJl
IDIgZHVlIHRvIHNjYWxpbmcpLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHVwOworICAgIHVw
LnRyYW5zbGF0ZSgwLCAtMSk7CisgICAgc3JjLT5jb250ZXh0KCktPmNvbmNhdENUTSh1cCk7CisK
KyAgICAvLyBOb3cgZHJhdyA1MCUgcmVkIHNxdWFyZS4KKyAgICB7CisgICAgICAgIC8vIENyZWF0
ZSBhIHRyYW5zcGFyZW5jeSBoZWxwZXIgaW5zZXQgb25lIHBpeGVsIGluIHRoZSBidWZmZXIuIFRo
ZQorICAgICAgICAvLyBjb29yZGluYXRlcyBhcmUgYmVmb3JlIHRyYW5zZm9ybWluZyBpbnRvIHRo
aXMgc3BhY2UsIGFuZCBtYXBzIHRvCisgICAgICAgIC8vIEludFJlY3QoMSwgMSwgMTQsIDE0KS4K
KyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3Jj
LT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6T3BhcXVl
Q29tcG9zaXRlTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6S2Vl
cFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgxLCAtMTUsIDE0LCAxNCkp
OworCisgICAgICAgIC8vIEZpbGwgd2l0aCByZWQuCisgICAgICAgIGhlbHBlci5jb250ZXh0KCkt
PmZpbGxSZWN0KGhlbHBlci5kcmF3UmVjdCgpLCBDb2xvcigweDdmN2YwMDAwKSwgRGV2aWNlQ29s
b3JTcGFjZSk7CisgICAgICAgIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwoaGVscGVyLmNvbnRl
eHQoKSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKyAgICB9Cit9CisKKy8vIFRlc3Rz
IHNjYWxlIG1vZGUgd2l0aCBubyBhZGRpdGlvbmFsIGNvcHkuCitURVNUKFRyYW5zcGFyZW5jeVdp
biwgU2NhbGUpCit7CisgICAgLy8gQ3JlYXRlIGFuIG9wYXF1ZSB3aGl0ZSBidWZmZXIuCisgICAg
T3duUHRyPEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAx
NiksIERldmljZVJHQikpOworICAgIEZsb2F0UmVjdCBmdWxsQnVmZmVyKDAsIDAsIDE2LCAxNik7
CisgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGZ1bGxCdWZmZXIsIENvbG9yOjp3aGl0ZSwg
RGV2aWNlQ29sb3JTcGFjZSk7CisKKyAgICAvLyBTY2FsZSBieSAyeC4KKyAgICBzcmMtPmNvbnRl
eHQoKS0+c2F2ZSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlOworICAgIHNjYWxl
LnNjYWxlKDIuMCk7CisgICAgc3JjLT5jb250ZXh0KCktPmNvbmNhdENUTShzY2FsZSk7CisKKyAg
ICAvLyBTdGFydCBkcmF3aW5nIGEgcmVjdGFuZ2xlIGZyb20gMS0+NC4gVGhpcyBzaG91bGQgZ2V0
IHNjYWxlZCB0byAyLT44LgorICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsK
KyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAgICAg
IFRyYW5zcGFyZW5jeVdpbjo6Tm9MYXllciwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJl
bmN5V2luOjpTY2FsZVRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgxLCAx
LCAzLCAzKSk7CisKKyAgICAgICAgLy8gVGhlIGNvbnRleHQgc2hvdWxkIG5vdyBoYXZlIHRoZSBp
ZGVudGl0eSB0cmFuc2Zvcm0gYW5kIHRoZSByZXR1cm5lZAorICAgICAgICAvLyByZWN0IHNob3Vs
ZCBiZSBzY2FsZWQuCisgICAgICAgIEVYUEVDVF9UUlVFKGhlbHBlci5jb250ZXh0KCktPmdldENU
TSgpLmlzSWRlbnRpdHkoKSk7CisgICAgICAgIEVYUEVDVF9FUSgyLCBoZWxwZXIuZHJhd1JlY3Qo
KS54KCkpOworICAgICAgICBFWFBFQ1RfRVEoMiwgaGVscGVyLmRyYXdSZWN0KCkueSgpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDgsIGhlbHBlci5kcmF3UmVjdCgpLnJpZ2h0KCkpOworICAgICAgICBF
WFBFQ1RfRVEoOCwgaGVscGVyLmRyYXdSZWN0KCkuYm90dG9tKCkpOworCisgICAgICAgIC8vIFNl
dCB0aGUgcGl4ZWwgYXQgKDIsIDIpIHRvIGJlIHRyYW5zcGFyZW50LiBUaGlzIHNob3VsZCBiZSBm
aXhlZCB3aGVuCisgICAgICAgIC8vIHRoZSBoZWxwZXIgZ29lcyBvdXQgb2Ygc2NvcGUuIFdlIGRv
bid0IHdhbnQgdG8gY2FsbAorICAgICAgICAvLyBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsIGJl
Y2F1c2UgdGhhdCB3aWxsIGFjdHVhbGx5IGNsZWFyIHRoZSB3aG9sZQorICAgICAgICAvLyBjYW52
YXMgKHNpbmNlIHdlIGhhdmUgbm8gZXh0cmEgbGF5ZXIhKS4KKyAgICAgICAgU2tCaXRtYXAmIGJp
dG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihoZWxwZXIuY29udGV4dCgpLT4KKyAgICAgICAg
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS4K
KyAgICAgICAgICAgIGFjY2Vzc0JpdG1hcChmYWxzZSkpOworICAgICAgICAqYml0bWFwLmdldEFk
ZHIzMigyLCAyKSAmPSAweDAwRkZGRkZGOworICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7Cisg
ICAgfQorCisgICAgc3JjLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKKworICAgIC8vIENoZWNrIHRo
ZSBwaXhlbCB3ZSBwcmV2aW91c2x5IG1hZGUgdHJhbnNwYXJlbnQsIGl0IHNob3VsZCBoYXZlIGdv
dHRlbgorICAgIC8vIGZpeGVkIGJhY2sgdXAgdG8gd2hpdGUuCisKKyAgICAvLyBUaGUgY3VycmVu
dCB2ZXJzaW9uIGRvZXNuJ3QgZml4dXAgdHJhbnNwYXJlbmN5IHdoZW4gdGhlcmUgaXMgbm8gbGF5
ZXIuCisgICAgLy8gVGhpcyBzZWVtcyBub3QgdG8gYmUgbmVjZXNzYXJ5LCBzbyB3ZSBkb24ndCBi
b3RoZXIsIGJ1dCBpZiBpdCBiZWNvbWVzCisgICAgLy8gbmVjZXNzYXJ5LCB0aGlzIGxpbmUgc2hv
dWxkIGJlIHVuY29tbWVudGVkLgorICAgIC8vIEVYUEVDVF9FUShDb2xvcihDb2xvcjo6d2hpdGUp
LCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCAyLCAyKSk7Cit9CisKKy8vIFRlc3RzIHNjYWxl
IG1vZGUgd2l0aCBhbiBhZGRpdGlvbmFsIGNvcHkgZm9yIHRyYW5zcGFyZW5jeS4gVGhpcyB3aWxs
IGhhcHBlbgorLy8gaWYgd2UgaGF2ZSBhIHNjYWxlZCB0ZXh0Ym94LCBmb3IgZXhhbXBsZS4gV2Vi
S2l0IHdpbGwgY3JlYXRlIGEgbmV3CisvLyB0cmFuc3BhcmVuY3kgbGF5ZXIsIGRyYXcgdGhlIHRl
eHQgZmllbGQsIHRoZW4gZHJhdyB0aGUgdGV4dCBpbnRvIGl0LCB0aGVuCisvLyBjb21wb3NpdGUg
dGhpcyBkb3duIHdpdGggYW4gb3BhY2l0eS4KK1RFU1QoVHJhbnNwYXJlbmN5V2luLCBTY2FsZVRy
YW5zcGFyZW5jeSkKK3sKKyAgICAvLyBDcmVhdGUgYW4gb3BhcXVlIHdoaXRlIGJ1ZmZlci4KKyAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYs
IDE2KSwgRGV2aWNlUkdCKSk7CisgICAgRmxvYXRSZWN0IGZ1bGxCdWZmZXIoMCwgMCwgMTYsIDE2
KTsKKyAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QoZnVsbEJ1ZmZlciwgQ29sb3I6OndoaXRl
LCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgIC8vIE1ha2UgYW5vdGhlciBsYXllciAod2hpY2gg
ZHVwbGljYXRlcyBob3cgV2ViS2l0IHdpbGwgbWFrZSB0aGlzKS4gV2UgZmlsbAorICAgIC8vIHRo
ZSB0b3AgaGFsZiB3aXRoIHJlZCwgYW5kIGhhdmUgdGhlIGxheWVyIGJlIDUwJSBvcGFxdWUuCisg
ICAgc3JjLT5jb250ZXh0KCktPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMC41KTsKKyAgICBGbG9h
dFJlY3QgdG9wSGFsZigwLCAwLCAxNiwgOCk7CisgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0
KHRvcEhhbGYsIENvbG9yKDB4RkZGRjAwMDApLCBEZXZpY2VDb2xvclNwYWNlKTsKKworICAgIC8v
IFNjYWxlIGJ5IDJ4LgorICAgIHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggc2NhbGU7CisgICAgc2NhbGUuc2NhbGUoMi4wKTsKKyAgICBzcmMtPmNvbnRl
eHQoKS0+Y29uY2F0Q1RNKHNjYWxlKTsKKworICAgIC8vIE1ha2UgYSBsYXllciBpbnNldCB0d28g
cGl4ZWxzIChiZWNhdXNlIG9mIHNjYWxpbmcsIHRoaXMgaXMgMi0+MTQpLiBBbmQKKyAgICAvLyB3
aWxsIGl0IHdpdGggNTAlIGJsYWNrLgorICAgIHsKKyAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhl
bHBlcjsKKyAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250ZXh0KCksCisgICAgICAgICAgICAg
ICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXIsCisgICAgICAgICAg
ICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6U2NhbGVUcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgIEludFJlY3QoMSwgMSwgNiwgNikpOworCisgICAgICAgIGhlbHBlci5jb250ZXh0KCkt
PmZpbGxSZWN0KGhlbHBlci5kcmF3UmVjdCgpLCBDb2xvcigweDdmMDAwMDAwKSwgRGV2aWNlQ29s
b3JTcGFjZSk7CisgICAgICAgIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwoaGVscGVyLmNvbnRl
eHQoKSk7CisgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKKyAgICB9CisKKyAgICAvLyBGaW5p
c2ggdGhlIGxheWVyLgorICAgIHNyYy0+Y29udGV4dCgpLT5yZXN0b3JlKCk7CisgICAgc3JjLT5j
b250ZXh0KCktPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICBDb2xvciByZWRCYWNrZ3Jv
dW5kKDB4RkZGRjgwODApOyAvLyA1MCUgcmVkIGNvbXBvc2l0ZWQgb24gd2hpdGUuCisgICAgRVhQ
RUNUX0VRKHJlZEJhY2tncm91bmQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDAsIDApKTsK
KyAgICBFWFBFQ1RfRVEocmVkQmFja2dyb3VuZCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwg
MSwgMSkpOworCisgICAgLy8gVG9wIGhhbGYgKG1pbnVzIHR3byBwaXhlbCBib3JkZXIpIHNob3Vs
ZCBiZSA1MCUgZ3JheSBhdG9wIG9wYXF1ZQorICAgIC8vIHJlZCA9IDB4RkY4MDQxNDEuIFRoZW4g
dGhhdCdzIGNvbXBvc2l0ZWQgd2l0aCA1MCUgdHJhbnNwYXJlbmN5IG9uIHNvbGlkCisgICAgLy8g
d2hpdGUgPSAweEZGQzBBMUExLgorICAgIENvbG9yIGRhcmtSZWQoMHhGRkJGODA4MCk7CisgICAg
RVhQRUNUX0VRKGRhcmtSZWQsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDIsIDIpKTsKKyAg
ICBFWFBFQ1RfRVEoZGFya1JlZCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgNywgNykpOwor
CisgICAgLy8gQm90dG9tIGhhbGYgKG1pbnVzIGEgdHdvIHBpeGVsIGJvcmRlcikgc2hvdWxkIGJl
IGEgbGF5ZXIgd2l0aCA1JSBncmF5CisgICAgLy8gd2l0aCBhbm90aGVyIDUwJSBvcGFjaXR5IGNv
bXBvc2l0ZWQgYXRvcCB3aGl0ZS4KKyAgICBDb2xvciBkYXJrV2hpdGUoMHhGRkJGQkZCRik7Cisg
ICAgRVhQRUNUX0VRKGRhcmtXaGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgOCwgOCkp
OworICAgIEVYUEVDVF9FUShkYXJrV2hpdGUsIGdldFBpeGVsQXQoc3JjLT5jb250ZXh0KCksIDEz
LCAxMykpOworCisgICAgQ29sb3Igd2hpdGUoMHhGRkZGRkZGRik7IC8vIEJhY2tncm91bmQgaW4g
dGhlIGxvd2VyLXJpZ2h0LgorICAgIEVYUEVDVF9FUSh3aGl0ZSwgZ2V0UGl4ZWxBdChzcmMtPmNv
bnRleHQoKSwgMTQsIDE0KSk7CisgICAgRVhQRUNUX0VRKHdoaXRlLCBnZXRQaXhlbEF0KHNyYy0+
Y29udGV4dCgpLCAxNSwgMTUpKTsKK30KKworVEVTVChUcmFuc3BhcmVuY3lXaW4sIFRleHQpCit7
CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXpl
KDE2LCAxNiksIERldmljZVJHQikpOworCisgICAgLy8gT3VyIHRleHQgc2hvdWxkIGVuZCB1cCA1
MCUgdHJhbnNwYXJlbnQgYmx1ZS1ncmVlbi4KKyAgICBDb2xvciBmdWxsUmVzdWx0KDB4ODAwMDgw
ODApOworCisgICAgeworICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOworICAgICAgICBo
ZWxwZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJl
bmN5V2luOjpUZXh0Q29tcG9zaXRlLAorICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lX
aW46OktlZXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMCwgMCwgMTYs
IDE2KSk7CisgICAgICAgIGhlbHBlci5zZXRUZXh0Q29tcG9zaXRlQ29sb3IoZnVsbFJlc3VsdCk7
CisKKyAgICAgICAgLy8gV3JpdGUgc2V2ZXJhbCBkaWZmZXJlbnQgc3F1YXJlcyB0byBzaW11bGF0
ZSBDbGVhclR5cGUuIFRoZXNlIHNob3VsZAorICAgICAgICAvLyBhbGwgcmVkdWNlIHRvIDIvMyBj
b3ZlcmFnZS4KKyAgICAgICAgRmxvYXRSZWN0IHBpeGVsKDAsIDAsIDEsIDEpOworICAgICAgICBo
ZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChwaXhlbCwgMHhGRkZGMDAwMCwgRGV2aWNlQ29sb3JT
cGFjZSk7CisgICAgICAgIHBpeGVsLm1vdmUoMS4wZiwgMC4wZik7CisgICAgICAgIGhlbHBlci5j
b250ZXh0KCktPmZpbGxSZWN0KHBpeGVsLCAweEZGMDBGRjAwLCBEZXZpY2VDb2xvclNwYWNlKTsK
KyAgICAgICAgcGl4ZWwubW92ZSgxLjBmLCAwLjBmKTsKKyAgICAgICAgaGVscGVyLmNvbnRleHQo
KS0+ZmlsbFJlY3QocGl4ZWwsIDB4RkYwMDAwRkYsIERldmljZUNvbG9yU3BhY2UpOworICAgICAg
ICBwaXhlbC5tb3ZlKDEuMGYsIDAuMGYpOworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxs
UmVjdChwaXhlbCwgMHhGRjAwODA4MCwgRGV2aWNlQ29sb3JTcGFjZSk7CisgICAgICAgIHBpeGVs
Lm1vdmUoMS4wZiwgMC4wZik7CisgICAgICAgIGhlbHBlci5jb250ZXh0KCktPmZpbGxSZWN0KHBp
eGVsLCAweEZGODAwMDgwLCBEZXZpY2VDb2xvclNwYWNlKTsKKyAgICAgICAgcGl4ZWwubW92ZSgx
LjBmLCAwLjBmKTsKKyAgICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QocGl4ZWwsIDB4
RkY4MDgwMDAsIERldmljZUNvbG9yU3BhY2UpOworCisgICAgICAgIC8vIFRyeSBvbmUgd2l0aCAx
MDAlIGNvdmVyYWdlIChvcGFxdWUgYmxhY2spLgorICAgICAgICBwaXhlbC5tb3ZlKDEuMGYsIDAu
MGYpOworICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChwaXhlbCwgMHhGRjAwMDAw
MCwgRGV2aWNlQ29sb3JTcGFjZSk7CisKKyAgICAgICAgLy8gTm93IG1lc3Mgd2l0aCB0aGUgYWxw
aGEgY2hhbm5lbC4KKyAgICAgICAgY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbChoZWxwZXIuY29u
dGV4dCgpKTsKKyAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOworICAgIH0KKworICAgIENvbG9y
IG9uZVRoaXJkUmVzdWx0KDB4NTUwMDU1NTUpOyAvLyA9IGZ1bGxSZXN1bHQgKiAyIC8gMworICAg
IEVYUEVDVF9FUShvbmVUaGlyZFJlc3VsdCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMCwg
MCkpOworICAgIEVYUEVDVF9FUShvbmVUaGlyZFJlc3VsdCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRl
eHQoKSwgMSwgMCkpOworICAgIEVYUEVDVF9FUShvbmVUaGlyZFJlc3VsdCwgZ2V0UGl4ZWxBdChz
cmMtPmNvbnRleHQoKSwgMiwgMCkpOworICAgIEVYUEVDVF9FUShvbmVUaGlyZFJlc3VsdCwgZ2V0
UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgMywgMCkpOworICAgIEVYUEVDVF9FUShvbmVUaGlyZFJl
c3VsdCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgNCwgMCkpOworICAgIEVYUEVDVF9FUShv
bmVUaGlyZFJlc3VsdCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQoKSwgNSwgMCkpOworICAgIEVY
UEVDVF9FUShmdWxsUmVzdWx0LCBnZXRQaXhlbEF0KHNyYy0+Y29udGV4dCgpLCA2LCAwKSk7Cisg
ICAgRVhQRUNUX0VRKENvbG9yOjp0cmFuc3BhcmVudCwgZ2V0UGl4ZWxBdChzcmMtPmNvbnRleHQo
KSwgNywgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvVW5pc2NyaWJlSGVscGVyVGVzdC5jcHAgYi9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvVW5pc2NyaWJlSGVscGVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGFhZWQxMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlVuaXNjcmliZUhlbHBlci5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVW5pc2NyaWJlVGVzdCA6IHB1Ymxp
YyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBVbmlzY3JpYmVUZXN0KCkKKyAgICB7Cisg
ICAgfQorCisgICAgLy8gUmV0dXJucyBhbiBIRk9OVCB3aXRoIHRoZSBnaXZlbiBuYW1lLiBUaGUg
Y2FsbGVyIGRvZXMgbm90IGhhdmUgdG8gZnJlZQorICAgIC8vIHRoaXMsIGl0IHdpbGwgYmUgYXV0
b21hdGljYWxseSBmcmVlZCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0LiBSZXR1cm5zIDAKKyAgICAv
LyBvbiBmYWlsdXJlLiBPbiBzdWNjZXNzLCB0aGUKKyAgICBIRk9OVCBNYWtlRm9udChjb25zdCB3
Y2hhcl90KiBmb250TmFtZSwgU0NSSVBUX0NBQ0hFKiogY2FjaGUpCisgICAgeworICAgICAgICBM
T0dGT05UIGxmOworICAgICAgICBtZW1zZXQoJmxmLCAwLCBzaXplb2YoTE9HRk9OVCkpOworICAg
ICAgICBsZi5sZkhlaWdodCA9IDIwOworICAgICAgICB3Y3NjcHlfcyhsZi5sZkZhY2VOYW1lLCBm
b250TmFtZSk7CisKKyAgICAgICAgSEZPTlQgaGZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QoJmxm
KTsKKyAgICAgICAgaWYgKCFoZm9udCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAg
ICpjYWNoZSA9IG5ldyBTQ1JJUFRfQ0FDSEU7CisgICAgICAgICoqY2FjaGUgPSAwOworICAgICAg
ICBjcmVhdGVkRm9udHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGhmb250LCAqY2FjaGUpKTsKKyAg
ICAgICAgcmV0dXJuIGhmb250OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIC8vIERlZmF1bHQg
Zm9udCBwcm9wZXJ0aWVzIHN0cnVjdHVyZSBmb3IgdGVzdHMgdG8gdXNlLgorICAgIFNDUklQVF9G
T05UUFJPUEVSVElFUyBwcm9wZXJ0aWVzOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBT
ZXRVcCgpCisgICAgeworICAgICAgICBtZW1zZXQoJnByb3BlcnRpZXMsIDAsIHNpemVvZihTQ1JJ
UFRfRk9OVFBST1BFUlRJRVMpKTsKKyAgICAgICAgcHJvcGVydGllcy5jQnl0ZXMgPSBzaXplb2Yo
U0NSSVBUX0ZPTlRQUk9QRVJUSUVTKTsKKyAgICAgICAgcHJvcGVydGllcy53Z0JsYW5rID0gJyAn
OworICAgICAgICBwcm9wZXJ0aWVzLndnRGVmYXVsdCA9ICc/JzsgLy8gVXNlZCB3aGVuIHRoZSBj
aGFyIGlzIG5vdCBpbiB0aGUgZm9udC4KKyAgICAgICAgcHJvcGVydGllcy53Z0ludmFsaWQgPSAn
Iyc7IC8vIFVzZWQgZm9yIGludmFsaWQgY2hhcmFjdGVycy4KKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgLy8gRnJlZSBhbnkgYWxsb2NhdGVkIGZv
bnRzLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNyZWF0ZWRGb250cy5zaXplKCk7
IGkrKykgeworICAgICAgICAgICAgRGVsZXRlT2JqZWN0KGNyZWF0ZWRGb250c1tpXS5maXJzdCk7
CisgICAgICAgICAgICBTY3JpcHRGcmVlQ2FjaGUoY3JlYXRlZEZvbnRzW2ldLnNlY29uZCk7Cisg
ICAgICAgICAgICBkZWxldGUgY3JlYXRlZEZvbnRzW2ldLnNlY29uZDsKKyAgICAgICAgfQorICAg
ICAgICBjcmVhdGVkRm9udHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICAvLyBUcmFja3MgYWxsb2Nh
dGVkIGZvbnRzIHNvIHdlIGNhbiBkZWxldGUgdGhlbSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0Lgor
ICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgcG9pbnRlciBpcyBoZWFwIGFsbG9jYXRlZCBhbmQgbXVz
dCBiZSBmcmVlZC4KKyAgICBWZWN0b3I8IHN0ZDo6cGFpcjxIRk9OVCwgU0NSSVBUX0NBQ0hFKj4g
PiBjcmVhdGVkRm9udHM7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisvLyBUaGlzIHRlc3QgdGVz
dHMgZ2l2aW5nIFVuaXNjcmliZSBhIHZlcnkgbGFyZ2UgYnVmZmVyLCB3aGljaCB3aWxsIGNhdXNl
IGEKKy8vIGZhaWx1cmUuCitURVNUX0YoVW5pc2NyaWJlVGVzdCwgVG9vQmlnKQoreworICAgIC8v
IE1ha2UgYSBsYXJnZSBzdHJpbmcgd2l0aCBhbiBlIHdpdGggYSB6aWxsaW9uIGNvbWJpbmluZyBh
Y2NlbnRzLgorICAgIFN0cmluZyBpbnB1dChMImUiKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDEwMDAwMDsgaSsrKQorICAgICAgICBpbnB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KDB4
MzAxKSk7IC8vIENvbWJpbmluZyBhY3V0ZSBhY2NlbnQuCisKKyAgICBTQ1JJUFRfQ0FDSEUqIHNj
cmlwdENhY2hlOworICAgIEhGT05UIGhmb250ID0gTWFrZUZvbnQoTCJUaW1lcyBOZXcgUm9tYW4i
LCAmc2NyaXB0Q2FjaGUpOworICAgIEFTU0VSVF9UUlVFKGhmb250KTsKKworICAgIC8vIFRlc3Qg
YSBsb25nIHN0cmluZyB3aXRob3V0IHRoZSBub3JtYWwgbGVuZ3RoIHByb3RlY3Rpb24gd2UgaGF2
ZS4gVGhpcworICAgIC8vIHdpbGwgY2F1c2Ugc2hhcGluZyB0byBmYWlsLgorICAgIHsKKyAgICAg
ICAgVW5pc2NyaWJlSGVscGVyIHVuaXNjcmliZSgKKyAgICAgICAgICAgIGlucHV0LmNoYXJhY3Rl
cnMoKSwgc3RhdGljX2Nhc3Q8aW50PihpbnB1dC5sZW5ndGgoKSksCisgICAgICAgICAgICBmYWxz
ZSwgaGZvbnQsIHNjcmlwdENhY2hlLCAmcHJvcGVydGllcyk7CisgICAgICAgIHVuaXNjcmliZS5p
bml0V2l0aE9wdGlvbmFsTGVuZ3RoUHJvdGVjdGlvbihmYWxzZSk7CisKKyAgICAgICAgLy8gVGhl
cmUgc2hvdWxkIGJlIG9uZSBzaGFwaW5nIGVudHJ5LCB3aXRoIG5vdGhpbmcgaW4gaXQuCisgICAg
ICAgIEFTU0VSVF9FUSgxLCB1bmlzY3JpYmUubV9zaGFwZXMuc2l6ZSgpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDAsIHVuaXNjcmliZS5tX3NoYXBlc1swXS5tX2dseXBocy5zaXplKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fbG9ncy5zaXplKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1fdmlzdWFsQXR0cmlidXRl
cy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVzWzBdLm1f
YWR2YW5jZS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1fc2hhcGVz
WzBdLm1fb2Zmc2V0cy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLm1f
c2hhcGVzWzBdLm1fanVzdGlmeS5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2Ny
aWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0EpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2Ny
aWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0IpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2Ny
aWJlLm1fc2hhcGVzWzBdLm1fYWJjLmFiY0MpOworCisgICAgICAgIC8vIFRoZSBzaXplcyBvZiB0
aGUgb3RoZXIgc3R1ZmYgc2hvdWxkIG1hdGNoIHRoZSBzaGFwaW5nIGVudHJ5LgorICAgICAgICBF
WFBFQ1RfRVEoMSwgdW5pc2NyaWJlLm1fcnVucy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MSwgdW5pc2NyaWJlLm1fc2NyZWVuT3JkZXIuc2l6ZSgpKTsKKworICAgICAgICAvLyBDaGVjayB0
aGF0IHRoZSB2YXJpb3VzIHF1ZXJ5aW5nIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGVtcHR5IGNhc2UK
KyAgICAgICAgLy8gcHJvcGVybHkuCisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUud2lk
dGgoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUuZmlyc3RHbHlwaEZvckNoYXJh
Y3RlcigwKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUuZmlyc3RHbHlwaEZvckNo
YXJhY3RlcigxMDAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUueFRvQ2hhcmFj
dGVyKDApKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHVuaXNjcmliZS54VG9DaGFyYWN0ZXIoMTAw
MCkpOworICAgIH0KKworICAgIC8vIE5vdyB0ZXN0IHRoZSB2ZXJ5IGxhcmdlIHN0cmluZyBhbmQg
bWFrZSBzdXJlIGl0IGlzIGhhbmRsZWQgcHJvcGVybHkgYnkKKyAgICAvLyB0aGUgbGVuZ3RoIHBy
b3RlY3Rpb24uCisgICAgeworICAgICAgICBVbmlzY3JpYmVIZWxwZXIgdW5pc2NyaWJlKAorICAg
ICAgICAgICAgaW5wdXQuY2hhcmFjdGVycygpLCBzdGF0aWNfY2FzdDxpbnQ+KGlucHV0Lmxlbmd0
aCgpKSwKKyAgICAgICAgICAgIGZhbHNlLCBoZm9udCwgc2NyaXB0Q2FjaGUsICZwcm9wZXJ0aWVz
KTsKKyAgICAgICAgdW5pc2NyaWJlLmluaXRXaXRoT3B0aW9uYWxMZW5ndGhQcm90ZWN0aW9uKHRy
dWUpOworCisgICAgICAgIC8vIFRoZXJlIHNob3VsZCBiZSAwIHJ1bnMgYW5kIHNoYXBlcy4KKyAg
ICAgICAgRVhQRUNUX0VRKDAsIHVuaXNjcmliZS5tX3J1bnMuc2l6ZSgpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDAsIHVuaXNjcmliZS5tX3NoYXBlcy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEo
MCwgdW5pc2NyaWJlLm1fc2NyZWVuT3JkZXIuc2l6ZSgpKTsKKworICAgICAgICBFWFBFQ1RfRVEo
MCwgdW5pc2NyaWJlLndpZHRoKCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJlLmZp
cnN0R2x5cGhGb3JDaGFyYWN0ZXIoMCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5pc2NyaWJl
LmZpcnN0R2x5cGhGb3JDaGFyYWN0ZXIoMTAwMCkpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdW5p
c2NyaWJlLnhUb0NoYXJhY3RlcigwKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB1bmlzY3JpYmUu
eFRvQ2hhcmFjdGVyKDEwMDApKTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>