<?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>75743</bug_id>
          
          <creation_ts>2012-01-06 14:15:02 -0800</creation_ts>
          <short_desc>JIT stub slow paths that would be identical to that of an interpreter should be factored out</short_desc>
          <delta_ts>2012-01-06 15:22:35 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>531394</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-06 14:15:02 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531395</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-06 14:15:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/10657024&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531401</commentid>
    <comment_count>2</comment_count>
      <attachid>121495</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-06 14:20:31 -0800</bug_when>
    <thetext>Created attachment 121495
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531402</commentid>
    <comment_count>3</comment_count>
      <attachid>121495</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-06 14:22:08 -0800</bug_when>
    <thetext>Comment on attachment 121495
the patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531443</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-06 15:17:22 -0800</bug_when>
    <thetext>The performance is neutral.



[pizlo@nitroflex bencher] ./bencher TipOfTree:/Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc RefactorSlow:/Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc --remote bigmac --local
Copying TipOfTree into /Volumes/Data/pizlo/bencher/temp/benchdata...
Copying RefactorSlow into /Volumes/Data/pizlo/bencher/temp/benchdata...
All VMs are in place.
Packaging benchmarking directory for remote hosts...
Sending benchmark payload to bigmac...
Running on bigmac...
376/376                                                           
Generating benchmark report at TipOfTree_RefactorSlow_SunSpiderV8Kraken_bigmac_20120106_1447_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on bigmac (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r104339)
&quot;RefactorSlow&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r104339)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
milliseconds.

                                            TipOfTree              RefactorSlow                                  
SunSpider:
   3d-cube                                5.8619+-0.0178    ?     5.8664+-0.0223       ?
   3d-morph                               8.4123+-0.0553    ?     8.5088+-0.1415       ? might be 1.0115x slower
   3d-raytrace                            7.8064+-0.0701          7.7422+-0.0536       
   access-binary-trees                    1.6221+-0.0160          1.6070+-0.0161       
   access-fannkuch                        7.4755+-0.0399          7.4452+-0.0234       
   access-nbody                           3.9876+-0.0057    ^     3.9656+-0.0091       ^ definitely 1.0056x faster
   access-nsieve                          3.1346+-0.0399    ?     3.1411+-0.0502       ?
   bitops-3bit-bits-in-byte               1.2535+-0.0150    ?     1.2571+-0.0163       ?
   bitops-bits-in-byte                    4.9892+-0.0303    ?     5.0435+-0.0340       ? might be 1.0109x slower
   bitops-bitwise-and                     3.3649+-0.0854    ?     3.3756+-0.0818       ?
   bitops-nsieve-bits                     5.6695+-0.0541          5.6481+-0.0342       
   controlflow-recursive                  2.3291+-0.0069    ?     2.3376+-0.0177       ?
   crypto-aes                             7.3676+-0.0322    ?     7.3876+-0.0144       ?
   crypto-md5                             2.4999+-0.0288    ?     2.5000+-0.0192       ?
   crypto-sha1                            2.2843+-0.0102    ?     2.2919+-0.0174       ?
   date-format-tofte                     10.3816+-0.0407    !    10.5739+-0.0617       ! definitely 1.0185x slower
   date-format-xparb                     10.3716+-0.0433    ^     9.9001+-0.0896       ^ definitely 1.0476x faster
   math-cordic                            7.2725+-0.0637    ?     7.3985+-0.1159       ? might be 1.0173x slower
   math-partial-sums                     10.4211+-0.0312    ?    10.4981+-0.0588       ?
   math-spectral-norm                     2.6537+-0.0125          2.6462+-0.0060       
   regexp-dna                             8.9070+-0.0522          8.8748+-0.0144       
   string-base64                          4.3056+-0.0149    ?     4.3465+-0.0494       ?
   string-fasta                           7.2226+-0.0188    ?     7.2228+-0.0168       ?
   string-tagcloud                       12.3487+-0.0392    ?    12.4196+-0.0801       ?
   string-unpack-code                    20.6505+-0.0816         20.5170+-0.0782       
   string-validate-input                  5.6101+-0.0383    ?     5.6534+-0.0310       ?

   &lt;arithmetic&gt; *                         6.4694+-0.0188          6.4680+-0.0152         might be 1.0002x faster
   &lt;geometric&gt;                            5.2698+-0.0195    ?     5.2730+-0.0173       ? might be 1.0006x slower
   &lt;harmonic&gt;                             4.1889+-0.0207    ?     4.1914+-0.0208       ? might be 1.0006x slower

                                            TipOfTree              RefactorSlow                                  
V8:
   crypto                                77.8233+-0.2729         77.7624+-0.1950       
   deltablue                            170.8664+-2.3946    ?   171.5670+-4.4580       ?
   earley-boyer                          99.6983+-1.3652    ?    99.8158+-1.0016       ?
   raytrace                              51.8626+-0.1891    ^    51.1383+-0.1967       ^ definitely 1.0142x faster
   regexp                               121.6293+-0.5194    ^   119.4981+-0.4753       ^ definitely 1.0178x faster
   richards                             141.0690+-3.4148        138.6064+-2.5845         might be 1.0178x faster
   splay                                 94.2701+-2.3961         92.6186+-1.2852         might be 1.0178x faster

   &lt;arithmetic&gt;                         108.1742+-0.5900        107.2867+-0.7144         might be 1.0083x faster
   &lt;geometric&gt; *                        101.5055+-0.4739        100.6077+-0.4742         might be 1.0089x faster
   &lt;harmonic&gt;                            94.6430+-0.3510    ^    93.7560+-0.3039       ^ definitely 1.0095x faster

                                            TipOfTree              RefactorSlow                                  
Kraken:
   ai-astar                             798.8152+-11.0512   ?   809.5704+-12.8406      ? might be 1.0135x slower
   audio-beat-detection                 195.2150+-2.0365    ^   191.4068+-0.7731       ^ definitely 1.0199x faster
   audio-dft                            277.5079+-1.9848        274.2332+-2.4551         might be 1.0119x faster
   audio-fft                            119.8612+-1.1266        119.5361+-0.7484       
   audio-oscillator                     282.1289+-3.4373        280.4427+-1.8100       
   imaging-darkroom                     300.9565+-7.2008    ?   302.2302+-7.5689       ?
   imaging-desaturate                   230.0537+-0.1433    ?   230.1007+-0.3022       ?
   imaging-gaussian-blur                519.3801+-0.2663    ?   519.4623+-0.2520       ?
   json-parse-financial                  69.0952+-0.2983    ^    68.2661+-0.3945       ^ definitely 1.0121x faster
   json-stringify-tinderbox              85.5597+-0.4862    ^    81.8879+-0.2584       ^ definitely 1.0448x faster
   stanford-crypto-aes                  116.2097+-1.2097        114.7226+-0.5313         might be 1.0130x faster
   stanford-crypto-ccm                  108.2590+-0.8196    ?   108.3571+-0.8921       ?
   stanford-crypto-pbkdf2               219.6826+-1.5132    ^   213.5631+-0.4439       ^ definitely 1.0287x faster
   stanford-crypto-sha256-iterative      94.1376+-0.3357    ^    93.3387+-0.1380       ^ definitely 1.0086x faster

   &lt;arithmetic&gt; *                       244.0616+-1.0230        243.3656+-1.1971         might be 1.0029x faster
   &lt;geometric&gt;                          190.1558+-0.6512    ^   188.4415+-0.5670       ^ definitely 1.0091x faster
   &lt;harmonic&gt;                           154.4391+-0.5066    ^   152.4570+-0.3287       ^ definitely 1.0130x faster

                                            TipOfTree              RefactorSlow                                  
All benchmarks:
   &lt;arithmetic&gt;                          92.3890+-0.3216         92.0488+-0.3812         might be 1.0037x faster
   &lt;geometric&gt;                           23.8239+-0.0733         23.7360+-0.0632         might be 1.0037x faster
   &lt;harmonic&gt;                             7.3766+-0.0358    ?     7.3786+-0.0360       ? might be 1.0003x slower

                                            TipOfTree              RefactorSlow                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       54.3183+-0.1487         54.1022+-0.1378         might be 1.0040x faster

Running locally...
376/376                                                           
Generating benchmark report at TipOfTree_RefactorSlow_SunSpiderV8Kraken_nitroflex_20120106_1449_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on nitroflex (MacBookPro8,2).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r104339)
&quot;RefactorSlow&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r104339)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
milliseconds.

                                            TipOfTree              RefactorSlow                                  
SunSpider:
   3d-cube                                5.1257+-0.1729    ?     5.1343+-0.1661       ?
   3d-morph                               7.9799+-0.1251          7.8809+-0.1328         might be 1.0126x faster
   3d-raytrace                            7.2027+-0.1536    ?     7.3087+-0.1811       ? might be 1.0147x slower
   access-binary-trees                    1.4642+-0.0386    ?     1.4692+-0.0607       ?
   access-fannkuch                        5.9084+-0.1461          5.8439+-0.0658         might be 1.0110x faster
   access-nbody                           3.2489+-0.0731    ?     3.3341+-0.0935       ? might be 1.0262x slower
   access-nsieve                          2.5019+-0.0657    ?     2.5991+-0.0768       ? might be 1.0389x slower
   bitops-3bit-bits-in-byte               1.2405+-0.0210    ?     1.2442+-0.0347       ?
   bitops-bits-in-byte                    2.2901+-0.0461    ?     2.3759+-0.0670       ? might be 1.0375x slower
   bitops-bitwise-and                     3.1599+-0.0842    ?     3.2446+-0.0859       ? might be 1.0268x slower
   bitops-nsieve-bits                     5.3941+-0.1019    ?     5.5444+-0.1485       ? might be 1.0279x slower
   controlflow-recursive                  1.9828+-0.0420    ?     2.0195+-0.0441       ? might be 1.0185x slower
   crypto-aes                             7.1185+-0.1815    ?     7.1785+-0.1972       ?
   crypto-md5                             2.3137+-0.0298    ?     2.3575+-0.0979       ? might be 1.0189x slower
   crypto-sha1                            2.0928+-0.0222    ?     2.0973+-0.0590       ?
   date-format-tofte                      9.7970+-0.1966    ?     9.9325+-0.2019       ? might be 1.0138x slower
   date-format-xparb                      8.9783+-0.2359    ?     9.2142+-0.2212       ? might be 1.0263x slower
   math-cordic                            6.2663+-0.0740    ?     6.3519+-0.1116       ? might be 1.0137x slower
   math-partial-sums                      7.3063+-0.0900    ?     7.3593+-0.1571       ?
   math-spectral-norm                     2.3877+-0.0508          2.3721+-0.0720       
   regexp-dna                             7.7287+-0.1121    ?     7.9375+-0.1571       ? might be 1.0270x slower
   string-base64                          4.1259+-0.1051    ?     4.3029+-0.1743       ? might be 1.0429x slower
   string-fasta                           6.7389+-0.1852    ?     6.7413+-0.1487       ?
   string-tagcloud                       11.2039+-0.2510    ?    11.2372+-0.2963       ?
   string-unpack-code                    18.8036+-0.3916         18.6886+-0.3871       
   string-validate-input                  5.2554+-0.1911          5.1007+-0.0870         might be 1.0303x faster

   &lt;arithmetic&gt; *                         5.6775+-0.0268    ?     5.7258+-0.0375       ? might be 1.0085x slower
   &lt;geometric&gt;                            4.5828+-0.0243    ?     4.6335+-0.0316       ? might be 1.0111x slower
   &lt;harmonic&gt;                             3.6583+-0.0223    ?     3.7010+-0.0294       ? might be 1.0117x slower

                                            TipOfTree              RefactorSlow                                  
V8:
   crypto                                70.3535+-0.5300         69.9264+-0.5055       
   deltablue                            150.0233+-0.6909    ^   148.5428+-0.4876       ^ definitely 1.0100x faster
   earley-boyer                          80.1572+-1.0388         80.1216+-0.9901       
   raytrace                              46.8037+-0.2848         46.3367+-0.4707         might be 1.0101x faster
   regexp                               101.7672+-0.2735        100.9166+-1.4234       
   richards                             116.2949+-0.6372    ?   117.0661+-0.6229       ?
   splay                                 77.2040+-1.1225         75.9552+-1.2413         might be 1.0164x faster

   &lt;arithmetic&gt;                          91.8006+-0.1986         91.2665+-0.4255         might be 1.0059x faster
   &lt;geometric&gt; *                         86.4750+-0.1927         85.9245+-0.4592         might be 1.0064x faster
   &lt;harmonic&gt;                            81.2885+-0.1920         80.7112+-0.4848         might be 1.0072x faster

                                            TipOfTree              RefactorSlow                                  
Kraken:
   ai-astar                             476.1634+-3.4611    ?   482.6787+-4.4208       ? might be 1.0137x slower
   audio-beat-detection                 170.4392+-0.8619    !   172.5479+-0.7078       ! definitely 1.0124x slower
   audio-dft                            274.1898+-4.2115    ?   277.1584+-3.1662       ? might be 1.0108x slower
   audio-fft                            105.6598+-0.6479        105.4016+-0.3721       
   audio-oscillator                     247.5320+-1.1655    ?   248.5717+-2.6602       ?
   imaging-darkroom                     264.8397+-5.9701    ?   266.6395+-7.4122       ?
   imaging-desaturate                   205.3789+-1.3223        204.8988+-0.4245       
   imaging-gaussian-blur                478.4543+-1.2024    ?   479.9527+-3.4023       ?
   json-parse-financial                  54.5162+-0.3954         54.4483+-0.4916       
   json-stringify-tinderbox              72.5002+-0.3808    ?    72.8039+-1.1618       ?
   stanford-crypto-aes                   95.3747+-0.6665    ?    95.5523+-0.5005       ?
   stanford-crypto-ccm                   95.2659+-1.4845         94.8853+-1.2295       
   stanford-crypto-pbkdf2               177.6325+-0.7361        176.2819+-1.1772       
   stanford-crypto-sha256-iterative      80.9540+-0.3292    ?    81.4564+-0.3422       ?

   &lt;arithmetic&gt; *                       199.9215+-0.5246    ?   200.9484+-0.5365       ? might be 1.0051x slower
   &lt;geometric&gt;                          160.9231+-0.3161    ?   161.4399+-0.4632       ? might be 1.0032x slower
   &lt;harmonic&gt;                           130.8758+-0.3203    ?   131.1104+-0.3830       ? might be 1.0018x slower

                                            TipOfTree              RefactorSlow                                  
All benchmarks:
   &lt;arithmetic&gt;                          76.3643+-0.1714    ?    76.6173+-0.1991       ? might be 1.0033x slower
   &lt;geometric&gt;                           20.4876+-0.0643    ?    20.6126+-0.0921       ? might be 1.0061x slower
   &lt;harmonic&gt;                             6.4382+-0.0382    ?     6.5108+-0.0505       ? might be 1.0113x slower

                                            TipOfTree              RefactorSlow                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       46.1283+-0.1107    ?    46.2387+-0.1662       ? might be 1.0024x slower

[pizlo@nitroflex bencher]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531448</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-01-06 15:22:35 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/104349</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121495</attachid>
            <date>2012-01-06 14:20:31 -0800</date>
            <delta_ts>2012-01-06 14:22:08 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>refactorslow_patch_1.diff</filename>
            <type>text/plain</type>
            <size>20403</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA0MzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDEyLTAxLTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SklUIHN0dWIgc2xvdyBwYXRocyB0aGF0IHdvdWxkIGJlIGlkZW50aWNhbCB0byB0aGF0IG9mIGFu
IGludGVycHJldGVyIHNob3VsZCBiZSBmYWN0b3JlZCBvdXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzQzCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS8xMDY1NzAyND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04p
OgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpDb21tb25TbG93UGF0aHM6Om9wSW5zdGFuY2VPZlNsb3cpOgorICAgICAgICAoSlNDOjpD
b21tb25TbG93UGF0aHM6Om9wSW4pOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6Om9w
UmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6b3BSZXNvbHZlU2tpcCk6
CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6b3BSZXNvbHZlV2l0aEJhc2UpOgorICAg
ICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6Om9wUmVzb2x2ZVdpdGhUaGlzKToKKwogMjAxMi0w
MS0wNSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBEZWZh
dWx0IEhhc2hUcmFpdHMgZm9yIE9wY29kZSBkb24ndCB3b3JrIGZvciBPcGNvZGUgPSAwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTAzNjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAKIAkJMEJDRDgzNTcxNDg1ODQ1MjAwRUEy
MDAzIC8qIFRlbXBvcmFyeUNoYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEJDRDgzNTQxNDg1ODQxMjAwRUEyMDAzIC8qIFRlbXBvcmFyeUNoYW5n
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBC
REZGQUUxMEZDNjE5MzEwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkRGRkFEMTBGQzYxNkVDMDBENjlF
RjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4
QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLzsgfTsKKwkJMEYxNUYxNUYx
NEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENv
bW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMTZENzI2MTQyQzM5QzAwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNkQ3MjQxNDJDMzlB
MjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdB
REQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1Jl
ZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGMkM1NTZGMTQ3MzhGMzEwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RTE0
NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MzEsNiArODMyLDcgQEAKIAkJMEJDRDgzNTQx
NDg1ODQxMjAwRUEyMDAzIC8qIFRlbXBvcmFyeUNoYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUZW1wb3JhcnlDaGFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3duRmFzdE1hbGxvY1B0ci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxp
bWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxNUYxNUQxNEI3QTczQTAwNURF
MzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb21tb25TbG93UGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkQ3
MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERGR0NvZGVCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEx
Niw2ICsyMTE4LDcgQEAKIAkJN0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLywKIAkJCQkwRjc3MDA5MTE0MDJG
RjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLywKIAkJCQkwRjc3MDA4RTE0MDJG
REQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VG
ODAwQjlBNjREIC8qIEFyZ0xpc3QuY3BwICovLApAQCAtMzAwMiw2ICszMDA1LDcgQEAKIAkJCQk4
NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBQTlFNTUxMTQ5ODA5MzUwMDAwMUE4QSAvKiBGdW5jdGlvbmFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhz
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiAxMDM2NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lmIEVOQUJMRShKSVQp
CiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKIAorI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgog
I2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgpAQCAtMjA4OCwyOSArMjA4OSwxMCBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0YWNrRnJhbWUuYXJn
c1swXS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsID0gc3RhY2tGcmFtZS5hcmdzWzFd
LmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHByb3RvID0gc3RhY2tGcmFtZS5hcmdzWzJdLmpzVmFs
dWUoKTsKLQotICAgIC8vIEF0IGxlYXN0IG9uZSBvZiB0aGVzZSBjaGVja3MgbXVzdCBoYXZlIGZh
aWxlZCB0byBnZXQgdG8gdGhlIHNsb3cgY2FzZS4KLSAgICBBU1NFUlQoIXZhbHVlLmlzQ2VsbCgp
IHx8ICFiYXNlVmFsLmlzQ2VsbCgpIHx8ICFwcm90by5pc0NlbGwoKQotICAgICAgICAgICB8fCAh
dmFsdWUuaXNPYmplY3QoKSB8fCAhYmFzZVZhbC5pc09iamVjdCgpIHx8ICFwcm90by5pc09iamVj
dCgpIAotICAgICAgICAgICB8fCAhYXNPYmplY3QoYmFzZVZhbCktPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLmltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UoKSk7Ci0KLQotICAgIC8vIEVDTUEt
MjYyIDE1LjMuNS4zOgotICAgIC8vIFRocm93IGFuIGV4Y2VwdGlvbiBlaXRoZXIgaWYgYmFzZVZh
bCBpcyBub3QgYW4gb2JqZWN0LCBvciBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgJ0hhc0luc3Rh
bmNlJyAoaS5lLiBpcyBhIGZ1bmN0aW9uKS4KLSAgICBUeXBlSW5mbyB0eXBlSW5mbyhVbnNwZWNp
ZmllZFR5cGUpOwotICAgIGlmICghYmFzZVZhbC5pc09iamVjdCgpIHx8ICEodHlwZUluZm8gPSBh
c09iamVjdChiYXNlVmFsKS0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkpLmltcGxlbWVudHNIYXNJ
bnN0YW5jZSgpKSB7Ci0gICAgICAgIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0g
Y3JlYXRlSW52YWxpZFBhcmFtRXJyb3Ioc3RhY2tGcmFtZS5jYWxsRnJhbWUsICJpbnN0YW5jZW9m
IiwgYmFzZVZhbCk7Ci0gICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwotICAgIH0KLSAgICBB
U1NFUlQodHlwZUluZm8udHlwZSgpICE9IFVuc3BlY2lmaWVkVHlwZSk7Ci0KLSAgICBpZiAoIXR5
cGVJbmZvLm92ZXJyaWRlc0hhc0luc3RhbmNlKCkgJiYgIXZhbHVlLmlzT2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7Ci0KLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzQm9vbGVhbihhc09iamVjdChiYXNlVmFsKS0+bWV0aG9kVGFibGUoKS0+
aGFzSW5zdGFuY2UoYXNPYmplY3QoYmFzZVZhbCksIGNhbGxGcmFtZSwgdmFsdWUsIHByb3RvKSk7
CisgICAgCisgICAgYm9vbCByZXN1bHQgPSBDb21tb25TbG93UGF0aHM6Om9wSW5zdGFuY2VPZlNs
b3coY2FsbEZyYW1lLCB2YWx1ZSwgYmFzZVZhbCwgcHJvdG8pOwogICAgIENIRUNLX0ZPUl9FWENF
UFRJT05fQVRfRU5EKCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7CiB9CiAKIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9kZWxfYnlfaWQpCkBAIC0yNDI0LDI1
ICsyNDA2LDEwIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAKLSAgICBTY29wZUNoYWluSXRlcmF0
b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVu
ZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOwotICAgIEFTU0VSVChpdGVyICE9IGVuZCk7Ci0KLSAgICBJ
ZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCk7Ci0gICAg
ZG8gewotICAgICAgICBKU09iamVjdCogbyA9IGl0ZXItPmdldCgpOwotICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChvKTsKLSAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUs
IGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90LmdldFZh
bHVlKGNhbGxGcmFtZSwgaWRlbnQpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9B
VF9FTkQoKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAg
ICAgICAgfQotICAgIH0gd2hpbGUgKCsraXRlciAhPSBlbmQpOwotCi0gICAgc3RhY2tGcmFtZS5n
bG9iYWxEYXRhLT5leGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxG
cmFtZSwgaWRlbnQpOwotICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gQ29tbW9uU2xvd1BhdGhzOjpvcFJlc29sdmUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFy
Z3NbMF0uaWRlbnRpZmllcigpKTsKKyAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCkKQEAgLTI3
ODQsMzggKzI3NTEsOSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3Bf
CiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKLSAgICBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwotCi0gICAgaW50IHNraXAg
PSBzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKTsKLQotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBp
dGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0g
c2NvcGVDaGFpbi0+ZW5kKCk7Ci0gICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgYm9vbCBjaGVja1Rv
cExldmVsID0gY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBjb2RlQmxv
Y2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKLSAgICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BM
ZXZlbCk7Ci0gICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgIGlmIChj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkuanNW
YWx1ZSgpKQotICAgICAgICAgICAgKytpdGVyOwotICAgIH0KLSAgICB3aGlsZSAoc2tpcC0tKSB7
Ci0gICAgICAgICsraXRlcjsKLSAgICAgICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAgICB9Ci0g
ICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpOwot
ICAgIGRvIHsKLSAgICAgICAgSlNPYmplY3QqIG8gPSBpdGVyLT5nZXQoKTsKLSAgICAgICAgUHJv
cGVydHlTbG90IHNsb3Qobyk7Ci0gICAgICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZy
YW1lLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gc2xvdC5n
ZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICgrK2l0ZXIgIT0gZW5kKTsKLQotICAgIHN0YWNrRnJh
bWUuZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihj
YWxsRnJhbWUsIGlkZW50KTsKLSAgICBWTV9USFJPV19FWENFUFRJT04oKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IENvbW1vblNsb3dQYXRoczo6b3BSZXNvbHZlU2tpcChzdGFja0ZyYW1lLmNhbGxG
cmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzFd
LmludDMyKCkpOworICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNv
ZGVkSlNWYWx1ZSwgb3BfcmVzb2x2ZV9nbG9iYWwpCkBAIC0zMTQzLDMzICszMDgxLDkgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIFNUVUJfSU5JVF9TVEFD
S19GUkFNRShzdGFja0ZyYW1lKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tG
cmFtZS5jYWxsRnJhbWU7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJh
bWUtPnNjb3BlQ2hhaW4oKTsKLQotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVD
aGFpbi0+YmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+
ZW5kKCk7Ci0KLSAgICAvLyBGSVhNRTogYWRkIHNjb3BlRGVwdGhJc1plcm8gb3B0aW1pemF0aW9u
Ci0KLSAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwotCi0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBz
dGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpOwotICAgIEpTT2JqZWN0KiBiYXNlOwotICAg
IGRvIHsKLSAgICAgICAgYmFzZSA9IGl0ZXItPmdldCgpOwotICAgICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlKTsKLSAgICAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUs
IGlkZW50LCBzbG90KSkgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90LmdldFZh
bHVlKGNhbGxGcmFtZSwgaWRlbnQpOwotICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9B
VF9FTkQoKTsKLQotICAgICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzdGFja0ZyYW1l
LmFyZ3NbMV0uaW50MzIoKV0gPSBKU1ZhbHVlKGJhc2UpOwotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgICsraXRlcjsKLSAgICB9
IHdoaWxlIChpdGVyICE9IGVuZCk7Ci0KLSAgICBzdGFja0ZyYW1lLmdsb2JhbERhdGEtPmV4Y2Vw
dGlvbiA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVudCk7Ci0g
ICAgVk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IENvbW1vblNsb3dQYXRoczo6b3BS
ZXNvbHZlV2l0aEJhc2UoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigp
LCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3N0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpXSk7Cisg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBv
cF9yZXNvbHZlX3dpdGhfdGhpcykKQEAgLTMxNzcsNDEgKzMwOTEsOSBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0
YWNrRnJhbWUpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxG
cmFtZTsKLSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpOwotCi0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdp
bigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKLQot
ICAgIC8vIEZJWE1FOiBhZGQgc2NvcGVEZXB0aElzWmVybyBvcHRpbWl6YXRpb24KLQotICAgIEFT
U0VSVChpdGVyICE9IGVuZCk7Ci0KLSAgICBJZGVudGlmaWVyJiBpZGVudCA9IHN0YWNrRnJhbWUu
YXJnc1swXS5pZGVudGlmaWVyKCk7Ci0gICAgSlNPYmplY3QqIGJhc2U7Ci0gICAgZG8gewotICAg
ICAgICBiYXNlID0gaXRlci0+Z2V0KCk7Ci0gICAgICAgICsraXRlcjsKLSAgICAgICAgUHJvcGVy
dHlTbG90IHNsb3QoYmFzZSk7Ci0gICAgICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoY2Fs
bEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gc2xv
dC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KTsKLSAgICAgICAgICAgIENIRUNLX0ZPUl9FWENF
UFRJT05fQVRfRU5EKCk7Ci0KLSAgICAgICAgICAgIC8vIEFsbCBlbnRyaWVzIG9uIHRoZSBzY29w
ZSBjaGFpbiBzaG91bGQgYmUgRW52aXJvbm1lbnRSZWNvcmRzIChhY3RpdmF0aW9ucyBldGMpLAot
ICAgICAgICAgICAgLy8gb3RoZXIgdGhlbiAnd2l0aCcgb2JqZWN0LCB3aGljaCBhcmUgZGlyZWN0
bHkgcmVmZXJlbmNlZCBmcm9tIHRoZSBzY29wZSBjaGFpbiwKLSAgICAgICAgICAgIC8vIGFuZCB0
aGUgZ2xvYmFsIG9iamVjdC4gSWYgd2UgaGl0IGVpdGhlciBhbiBFbnZpcm9ubWVudFJlY29yZCBv
ciBhIGdsb2JhbAotICAgICAgICAgICAgLy8gb2JqZWN0IGF0IHRoZSBlbmQgb2YgdGhlIHNjb3Bl
IGNoYWluLCB0aGlzIGlzIHVuZGVmaW5lZC4gSWYgd2UgaGl0IGEgbm9uLQotICAgICAgICAgICAg
Ly8gRW52aXJvbm1lbnRSZWNvcmQgd2l0aGluIHRoZSBzY29wZSBjaGFpbiwgcGFzcyB0aGUgYmFz
ZSBhcyB0aGUgdGhpcyB2YWx1ZS4KLSAgICAgICAgICAgIGlmIChpdGVyID09IGVuZCB8fCBiYXNl
LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pc0Vudmlyb25tZW50UmVjb3JkKCkpCi0gICAgICAg
ICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIo
KV0gPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCldID0gSlNWYWx1
ZShiYXNlKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAg
ICAgICAgfQotICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKLQotICAgIHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YS0+ZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJh
bWUsIGlkZW50KTsKLSAgICBWTV9USFJPV19FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gQ29tbW9u
U2xvd1BhdGhzOjpvcFJlc29sdmVXaXRoVGhpcyhjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1sw
XS5pZGVudGlmaWVyKCksIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzFd
LmludDMyKCldKTsKKyAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNP
YmplY3QqLCBvcF9uZXdfZnVuY19leHApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIENvbW1vblNsb3dQYXRoc19oCisjZGVmaW5lIENvbW1vblNsb3dQYXRo
c19oCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJz
LmgiCisjaW5jbHVkZSAiSlNBcnJheS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhlIHB1
cnBvc2Ugb2YgdGhpcyBuYW1lc3BhY2UgaXMgdG8gaW5jbHVkZSBzbG93IHBhdGhzIHRoYXQgYXJl
IHNoYXJlZAorLy8gYmV0d2VlbiB0aGUgaW50ZXJwcmV0ZXIgYW5kIGJhc2VsaW5lIEpJVC4gVGhl
eSBhcmUgd3JpdHRlbiB0byBiZSBhZ25vc3RpYworLy8gd2l0aCByZXNwZWN0IHRvIHRoZSBzbG93
LXBhdGggY2FsbGluZyBjb252ZW50aW9uLCBidXQgdGhleSBkbyByZWx5IG9uIHRoZQorLy8gSlMg
Y29kZSBiZWluZyBleGVjdXRlZCBtb3JlLW9yLWxlc3MgZGlyZWN0bHkgZnJvbSBieXRlY29kZSAo
c28gdGhlIGNhbGwKKy8vIGZyYW1lIGxheW91dCBpcyB1bm1vZGlmaWVkLCBtYWtpbmcgaXQgcG90
ZW50aWFsbHkgYXdrd2FyZCB0byB1c2UgdGhlc2UKKy8vIGZyb20gYW55IG9wdGltaXppbmcgSklU
LCBsaWtlIHRoZSBERkcpLgorCituYW1lc3BhY2UgQ29tbW9uU2xvd1BhdGhzIHsKKworQUxXQVlT
X0lOTElORSBib29sIG9wSW5zdGFuY2VPZlNsb3coRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlLCBKU1ZhbHVlIGJhc2VWYWwsIEpTVmFsdWUgcHJvdG8pCit7CisgICAgQVNTRVJUKCF2YWx1
ZS5pc0NlbGwoKSB8fCAhYmFzZVZhbC5pc0NlbGwoKSB8fCAhcHJvdG8uaXNDZWxsKCkKKyAgICAg
ICAgICAgfHwgIXZhbHVlLmlzT2JqZWN0KCkgfHwgIWJhc2VWYWwuaXNPYmplY3QoKSB8fCAhcHJv
dG8uaXNPYmplY3QoKSAKKyAgICAgICAgICAgfHwgIWFzT2JqZWN0KGJhc2VWYWwpLT5zdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKCkpOworCisKKyAg
ICAvLyBFQ01BLTI2MiAxNS4zLjUuMzoKKyAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gZWl0aGVy
IGlmIGJhc2VWYWwgaXMgbm90IGFuIG9iamVjdCwgb3IgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50
ICdIYXNJbnN0YW5jZScgKGkuZS4gaXMgYSBmdW5jdGlvbikuCisgICAgVHlwZUluZm8gdHlwZUlu
Zm8oVW5zcGVjaWZpZWRUeXBlKTsKKyAgICBpZiAoIWJhc2VWYWwuaXNPYmplY3QoKSB8fCAhKHR5
cGVJbmZvID0gYXNPYmplY3QoYmFzZVZhbCktPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpKS5pbXBs
ZW1lbnRzSGFzSW5zdGFuY2UoKSkgeworICAgICAgICBleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0
aW9uID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoZXhlYywgImluc3RhbmNlb2YiLCBiYXNlVmFs
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBBU1NFUlQodHlwZUluZm8udHlw
ZSgpICE9IFVuc3BlY2lmaWVkVHlwZSk7CisKKyAgICBpZiAoIXR5cGVJbmZvLm92ZXJyaWRlc0hh
c0luc3RhbmNlKCkgJiYgIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBhc09iamVjdChiYXNlVmFsKS0+bWV0aG9kVGFibGUoKS0+aGFzSW5zdGFu
Y2UoYXNPYmplY3QoYmFzZVZhbCksIGV4ZWMsIHZhbHVlLCBwcm90byk7Cit9CisKK2lubGluZSBi
b29sIG9wSW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHByb3BOYW1lLCBKU1ZhbHVlIGJhc2VW
YWwpCit7CisgICAgaWYgKCFiYXNlVmFsLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgZXhlYy0+Z2xv
YmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGV4ZWMsICJpbiIs
IGJhc2VWYWwpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSlNPYmplY3Qq
IGJhc2VPYmogPSBhc09iamVjdChiYXNlVmFsKTsKKworICAgIHVpbnQzMl90IGk7CisgICAgaWYg
KHByb3BOYW1lLmdldFVJbnQzMihpKSkKKyAgICAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGV4ZWMsIGkpOworCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eShleGVjLCBwcm9wTmFtZS50
b1N0cmluZyhleGVjKSk7CisgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVydHkoZXhl
YywgcHJvcGVydHkpOworfQorCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgb3BSZXNvbHZlKEV4ZWNT
dGF0ZSogZXhlYywgSWRlbnRpZmllciYgaWRlbnQpCit7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7CisKKyAgICBTY29wZUNoYWluSXRlcmF0b3Ig
aXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CisgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9
IHNjb3BlQ2hhaW4tPmVuZCgpOworICAgIEFTU0VSVChpdGVyICE9IGVuZCk7CisgICAgCisgICAg
ZG8geworICAgICAgICBKU09iamVjdCogbyA9IGl0ZXItPmdldCgpOworICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChvKTsKKyAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVu
dCwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCk7
CisgICAgfSB3aGlsZSAoKytpdGVyICE9IGVuZCk7CisKKyAgICBleGVjLT5nbG9iYWxEYXRhKCku
ZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKK30KKworQUxXQVlTX0lOTElORSBKU1ZhbHVlIG9wUmVzb2x2
ZVNraXAoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlmaWVyJiBpZGVudCwgaW50IHNraXApCit7Cisg
ICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBleGVjLT5zY29wZUNoYWluKCk7CisKKyAg
ICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CisgICAgU2Nv
cGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOworICAgIEFTU0VSVChpdGVy
ICE9IGVuZCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
KyAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOworICAgIEFTU0VSVChz
a2lwIHx8ICFjaGVja1RvcExldmVsKTsKKyAgICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0p
IHsKKyAgICAgICAgaWYgKGV4ZWMtPnVuY2hlY2tlZFIoY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVn
aXN0ZXIoKSkuanNWYWx1ZSgpKQorICAgICAgICAgICAgKytpdGVyOworICAgIH0KKyAgICB3aGls
ZSAoc2tpcC0tKSB7CisgICAgICAgICsraXRlcjsKKyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gZW5k
KTsKKyAgICB9CisgICAgZG8geworICAgICAgICBKU09iamVjdCogbyA9IGl0ZXItPmdldCgpOwor
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvKTsKKyAgICAgICAgaWYgKG8tPmdldFByb3BlcnR5
U2xvdChleGVjLCBpZGVudCwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1
ZShleGVjLCBpZGVudCk7CisgICAgfSB3aGlsZSAoKytpdGVyICE9IGVuZCk7CisKKyAgICBleGVj
LT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9uID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihl
eGVjLCBpZGVudCk7CisgICAgcmV0dXJuIEpTVmFsdWUoKTsKK30KKworQUxXQVlTX0lOTElORSBK
U1ZhbHVlIG9wUmVzb2x2ZVdpdGhCYXNlKEV4ZWNTdGF0ZSogZXhlYywgSWRlbnRpZmllciYgaWRl
bnQsIFJlZ2lzdGVyJiBiYXNlU2xvdCkKK3sKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
biA9IGV4ZWMtPnNjb3BlQ2hhaW4oKTsKKworICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0g
c2NvcGVDaGFpbi0+YmVnaW4oKTsKKyAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVD
aGFpbi0+ZW5kKCk7CisKKyAgICAvLyBGSVhNRTogYWRkIHNjb3BlRGVwdGhJc1plcm8gb3B0aW1p
emF0aW9uCisKKyAgICBBU1NFUlQoaXRlciAhPSBlbmQpOworCisgICAgSlNPYmplY3QqIGJhc2U7
CisgICAgZG8geworICAgICAgICBiYXNlID0gaXRlci0+Z2V0KCk7CisgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90KGJhc2UpOworICAgICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMs
IGlkZW50LCBzbG90KSkgeworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90LmdldFZh
bHVlKGV4ZWMsIGlkZW50KTsKKyAgICAgICAgICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuZXhj
ZXB0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisKKyAgICAgICAgICAg
IGJhc2VTbG90ID0gSlNWYWx1ZShiYXNlKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgKytpdGVyOworICAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKKwor
ICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJs
ZUVycm9yKGV4ZWMsIGlkZW50KTsKKyAgICByZXR1cm4gSlNWYWx1ZSgpOworfQorCitBTFdBWVNf
SU5MSU5FIEpTVmFsdWUgb3BSZXNvbHZlV2l0aFRoaXMoRXhlY1N0YXRlKiBleGVjLCBJZGVudGlm
aWVyJiBpZGVudCwgUmVnaXN0ZXImIGJhc2VTbG90KQoreworICAgIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluID0gZXhlYy0+c2NvcGVDaGFpbigpOworCisgICAgU2NvcGVDaGFpbkl0ZXJhdG9y
IGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOworICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQg
PSBzY29wZUNoYWluLT5lbmQoKTsKKworICAgIC8vIEZJWE1FOiBhZGQgc2NvcGVEZXB0aElzWmVy
byBvcHRpbWl6YXRpb24KKworICAgIEFTU0VSVChpdGVyICE9IGVuZCk7CisKKyAgICBKU09iamVj
dCogYmFzZTsKKyAgICBkbyB7CisgICAgICAgIGJhc2UgPSBpdGVyLT5nZXQoKTsKKyAgICAgICAg
KytpdGVyOworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKKyAgICAgICAgaWYgKGJh
c2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCkpIHsKKyAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCk7CisgICAgICAgICAgICBp
ZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOworCisgICAgICAgICAgICAvLyBBbGwgZW50cmllcyBvbiB0aGUgc2NvcGUgY2hh
aW4gc2hvdWxkIGJlIEVudmlyb25tZW50UmVjb3JkcyAoYWN0aXZhdGlvbnMgZXRjKSwKKyAgICAg
ICAgICAgIC8vIG90aGVyIHRoZW4gJ3dpdGgnIG9iamVjdCwgd2hpY2ggYXJlIGRpcmVjdGx5IHJl
ZmVyZW5jZWQgZnJvbSB0aGUgc2NvcGUgY2hhaW4sCisgICAgICAgICAgICAvLyBhbmQgdGhlIGds
b2JhbCBvYmplY3QuIElmIHdlIGhpdCBlaXRoZXIgYW4gRW52aXJvbm1lbnRSZWNvcmQgb3IgYSBn
bG9iYWwKKyAgICAgICAgICAgIC8vIG9iamVjdCBhdCB0aGUgZW5kIG9mIHRoZSBzY29wZSBjaGFp
biwgdGhpcyBpcyB1bmRlZmluZWQuIElmIHdlIGhpdCBhIG5vbi0KKyAgICAgICAgICAgIC8vIEVu
dmlyb25tZW50UmVjb3JkIHdpdGhpbiB0aGUgc2NvcGUgY2hhaW4sIHBhc3MgdGhlIGJhc2UgYXMg
dGhlIHRoaXMgdmFsdWUuCisgICAgICAgICAgICBpZiAoaXRlciA9PSBlbmQgfHwgYmFzZS0+c3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkuaXNFbnZpcm9ubWVudFJlY29yZCgpKQorICAgICAgICAgICAg
ICAgIGJhc2VTbG90ID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBiYXNlU2xvdCA9IEpTVmFsdWUoYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOworCisgICAgZXhlYy0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbiA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhl
YywgaWRlbnQpOworICAgIHJldHVybiBKU1ZhbHVlKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpDb21tb25TbG93UGF0aHMKKworI2VuZGlmIC8vIENvbW1vblNsb3dQYXRoc19oCisK
</data>
<flag name="review"
          id="122005"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>