<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugzilla.mozilla.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="20260825.1"
          urlbase="https://bugzilla.mozilla.org/"
          
          maintainer="bmo-mods@mozilla.com"
>

    <bug>
          <bug_id>580531</bug_id>
          
          <filed_via>unknown</filed_via>
          <creation_ts>2010-07-20 23:14:04 -0700</creation_ts>
          <short_desc>Expose framerate/statistics of &lt;video&gt; playback</short_desc>
          <delta_ts>2012-05-02 22:10:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>Components</classification>
          <product>Core</product>
          <component>Audio/Video</component>
          <version>Trunk</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_type>enhancement</bug_type>
          <bug_status>VERIFIED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>dev-doc-complete</keywords>
          <priority>--</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>mozilla5</target_milestone>
          <dependson>610267</dependson>
    
    <dependson>646329</dependson>
    
    <dependson>654550</dependson>
          <blocked>592833</blocked>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="cajbir (:cajbir)">cajbir.bugzilla</reporter>
          <assigned_to name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</assigned_to>
          <cc>blizzard</cc>
    
    <cc>bugzilla</cc>
    
    <cc>bzcc</cc>
    
    <cc>chris</cc>
    
    <cc>cjones.bugs</cc>
    
    <cc>david.humphrey</cc>
    
    <cc>fs</cc>
    
    <cc>ivan.enderlin</cc>
    
    <cc>kcarle</cc>
    
    <cc>kinetik</cc>
    
    <cc>matjk7</cc>
    
    <cc>mike</cc>
    
    <cc>roc</cc>
    
    <cc>silviapfeiffer1</cc>
    
    <cc>the.sheppy</cc>
    
    <cc>u279076</cc>
    
    <cc>webmaster</cc>
    
    <cc>xtc4uall</cc>
          
          <cf_blocking_webextensions>---</cf_blocking_webextensions>
          <cf_firefox_messaging_system>---</cf_firefox_messaging_system>
          <cf_bmo_component_move>---</cf_bmo_component_move>
          <cf_data_science_product_support_area>---</cf_data_science_product_support_area>
          <cf_platform_rel>---</cf_platform_rel>
          <cf_tracking_p11>---</cf_tracking_p11>
          <cf_tracking_win>---</cf_tracking_win>
          <cf_geckoview>---</cf_geckoview>
          <cf_root_cause>---</cf_root_cause>
          <cf_backlog>---</cf_backlog>
          <cf_tracking_e10s>---</cf_tracking_e10s>
          <cf_tracking_firefox5>---</cf_tracking_firefox5>
          <cf_status_firefox5>---</cf_status_firefox5>
          <cf_tracking_firefox6>---</cf_tracking_firefox6>
          <cf_status_firefox6>---</cf_status_firefox6>
          <cf_tracking_firefox7>---</cf_tracking_firefox7>
          <cf_status_firefox7>---</cf_status_firefox7>
          <cf_tracking_firefox8>---</cf_tracking_firefox8>
          <cf_status_firefox8>---</cf_status_firefox8>
          <cf_tracking_firefox9>---</cf_tracking_firefox9>
          <cf_status_firefox9>---</cf_status_firefox9>
          <cf_a11y_review_project_flag>---</cf_a11y_review_project_flag>
          <cf_tracking_firefox10>---</cf_tracking_firefox10>
          <cf_status_firefox10>---</cf_status_firefox10>
          <cf_tracking_firefox11>---</cf_tracking_firefox11>
          <cf_status_firefox11>---</cf_status_firefox11>
          <cf_tracking_firefox12>---</cf_tracking_firefox12>
          <cf_status_firefox12>---</cf_status_firefox12>
          <cf_tracking_firefox13>---</cf_tracking_firefox13>
          <cf_status_firefox13>---</cf_status_firefox13>
          <cf_tracking_firefox14>---</cf_tracking_firefox14>
          <cf_status_firefox14>---</cf_status_firefox14>
          <cf_accessibility_severity>---</cf_accessibility_severity>
          <cf_tracking_firefox15>---</cf_tracking_firefox15>
          <cf_status_firefox15>---</cf_status_firefox15>
          <cf_tracking_firefox16>---</cf_tracking_firefox16>
          <cf_status_firefox16>---</cf_status_firefox16>
          <cf_tracking_firefox17>---</cf_tracking_firefox17>
          <cf_status_firefox17>---</cf_status_firefox17>
          <cf_tracking_firefox18>---</cf_tracking_firefox18>
          <cf_status_firefox18>---</cf_status_firefox18>
          <cf_tracking_firefox19>---</cf_tracking_firefox19>
          <cf_status_firefox19>---</cf_status_firefox19>
          <cf_install_update_workflow>---</cf_install_update_workflow>
          <cf_tracking_firefox20>---</cf_tracking_firefox20>
          <cf_status_firefox20>---</cf_status_firefox20>
          <cf_tracking_firefox21>---</cf_tracking_firefox21>
          <cf_status_firefox21>---</cf_status_firefox21>
          <cf_tracking_firefox22>---</cf_tracking_firefox22>
          <cf_status_firefox22>---</cf_status_firefox22>
          <cf_tracking_firefox23>---</cf_tracking_firefox23>
          <cf_status_firefox23>---</cf_status_firefox23>
          <cf_tracking_firefox24>---</cf_tracking_firefox24>
          <cf_performance_impact>---</cf_performance_impact>
          <cf_status_firefox24>---</cf_status_firefox24>
          <cf_tracking_firefox25>---</cf_tracking_firefox25>
          <cf_status_firefox25>---</cf_status_firefox25>
          <cf_tracking_firefox26>---</cf_tracking_firefox26>
          <cf_status_firefox26>---</cf_status_firefox26>
          <cf_tracking_firefox27>---</cf_tracking_firefox27>
          <cf_status_firefox27>---</cf_status_firefox27>
          <cf_tracking_firefox28>---</cf_tracking_firefox28>
          <cf_status_firefox28>---</cf_status_firefox28>
          <cf_tracking_firefox29>---</cf_tracking_firefox29>
          <cf_status_firefox29>---</cf_status_firefox29>
          <cf_size_estimate>---</cf_size_estimate>
          <cf_tracking_firefox30>---</cf_tracking_firefox30>
          <cf_status_firefox30>---</cf_status_firefox30>
          <cf_tracking_firefox31>---</cf_tracking_firefox31>
          <cf_status_firefox31>---</cf_status_firefox31>
          <cf_tracking_firefox32>---</cf_tracking_firefox32>
          <cf_status_firefox32>---</cf_status_firefox32>
          <cf_tracking_firefox33>---</cf_tracking_firefox33>
          <cf_status_firefox33>---</cf_status_firefox33>
          <cf_tracking_firefox34>---</cf_tracking_firefox34>
          <cf_webcompat_priority>---</cf_webcompat_priority>
          <cf_status_firefox34>---</cf_status_firefox34>
          <cf_tracking_firefox35>---</cf_tracking_firefox35>
          <cf_status_firefox35>---</cf_status_firefox35>
          <cf_tracking_firefox36>---</cf_tracking_firefox36>
          <cf_status_firefox36>---</cf_status_firefox36>
          <cf_tracking_firefox37>---</cf_tracking_firefox37>
          <cf_status_firefox37>---</cf_status_firefox37>
          <cf_tracking_firefox38>---</cf_tracking_firefox38>
          <cf_status_firefox38>---</cf_status_firefox38>
          <cf_tracking_firefox38_0_5>---</cf_tracking_firefox38_0_5>
          <cf_tracking_firefox39>---</cf_tracking_firefox39>
          <cf_status_firefox38_0_5>---</cf_status_firefox38_0_5>
          <cf_webcompat_score>---</cf_webcompat_score>
          <cf_status_firefox39>---</cf_status_firefox39>
          <cf_tracking_firefox40>---</cf_tracking_firefox40>
          <cf_status_firefox40>---</cf_status_firefox40>
          <cf_tracking_firefox41>---</cf_tracking_firefox41>
          <cf_status_firefox41>---</cf_status_firefox41>
          <cf_tracking_firefox42>---</cf_tracking_firefox42>
          <cf_status_firefox42>---</cf_status_firefox42>
          <cf_tracking_firefox43>---</cf_tracking_firefox43>
          <cf_status_firefox43>---</cf_status_firefox43>
          <cf_tracking_firefox44>---</cf_tracking_firefox44>
          <cf_status_firefox44>---</cf_status_firefox44>
          <cf_tracking_firefox45>---</cf_tracking_firefox45>
          <cf_status_firefox45>---</cf_status_firefox45>
          <cf_tracking_firefox46>---</cf_tracking_firefox46>
          <cf_status_firefox46>---</cf_status_firefox46>
          <cf_tracking_firefox47>---</cf_tracking_firefox47>
          <cf_status_firefox47>---</cf_status_firefox47>
          <cf_tracking_firefox48>---</cf_tracking_firefox48>
          <cf_status_firefox48>---</cf_status_firefox48>
          <cf_tracking_firefox49>---</cf_tracking_firefox49>
          <cf_status_firefox49>---</cf_status_firefox49>
          <cf_tracking_esr10>---</cf_tracking_esr10>
          <cf_status_esr10>---</cf_status_esr10>
          <cf_tracking_firefox_esr17>---</cf_tracking_firefox_esr17>
          <cf_status_firefox_esr17>---</cf_status_firefox_esr17>
          <cf_tracking_firefox_esr24>---</cf_tracking_firefox_esr24>
          <cf_status_firefox_esr24>---</cf_status_firefox_esr24>
          <cf_tracking_firefox_esr31>---</cf_tracking_firefox_esr31>
          <cf_status_firefox_esr31>---</cf_status_firefox_esr31>
          <cf_tracking_firefox_esr38>---</cf_tracking_firefox_esr38>
          <cf_status_firefox_esr38>---</cf_status_firefox_esr38>
          <cf_tracking_firefox_esr45>---</cf_tracking_firefox_esr45>
          <cf_status_firefox_esr45>---</cf_status_firefox_esr45>
          <cf_tracking_b2g18>---</cf_tracking_b2g18>
          <cf_status_b2g18>---</cf_status_b2g18>
          <cf_status_b2g30>---</cf_status_b2g30>
          <cf_status_b2g18_1_0_0>---</cf_status_b2g18_1_0_0>
          <cf_status_b2g18_1_0_1>---</cf_status_b2g18_1_0_1>
          <cf_status_b2g_1_1_hd>---</cf_status_b2g_1_1_hd>
          <cf_tracking_b2g_v1_2>---</cf_tracking_b2g_v1_2>
          <cf_status_b2g_1_2>---</cf_status_b2g_1_2>
          <cf_tracking_b2g_v1_3>---</cf_tracking_b2g_v1_3>
          <cf_status_b2g_1_3>---</cf_status_b2g_1_3>
          <cf_status_b2g_1_3t>---</cf_status_b2g_1_3t>
          <cf_blocking_20>-</cf_blocking_20>
          <cf_status_20>---</cf_status_20>
          <cf_status_b2g_1_4>---</cf_status_b2g_1_4>
          <cf_status_b2g_2_0>---</cf_status_b2g_2_0>
          <cf_status_b2g_2_0m>---</cf_status_b2g_2_0m>
          <cf_status_b2g_2_1>---</cf_status_b2g_2_1>
          <cf_status_b2g_2_1_s>---</cf_status_b2g_2_1_s>
          <cf_status_b2g_2_2>---</cf_status_b2g_2_2>
          <cf_status_b2g_2_5>---</cf_status_b2g_2_5>
          <cf_status_b2g_2_6>---</cf_status_b2g_2_6>
          <cf_status_b2g_2_2r>---</cf_status_b2g_2_2r>
          <cf_blocking_192>---</cf_blocking_192>
          <cf_status_192>---</cf_status_192>
          <cf_blocking_191>---</cf_blocking_191>
          <cf_tracking_fxios>---</cf_tracking_fxios>
          <cf_tracking_nss>---</cf_tracking_nss>
          <cf_status_nss>---</cf_status_nss>
          <cf_tracking_firefox_relnote>---</cf_tracking_firefox_relnote>
          <cf_status_b2g_master>---</cf_status_b2g_master>
          <cf_blocking_fx>---</cf_blocking_fx>
          <cf_status_191>---</cf_status_191>
          <cf_status_conduit_push>---</cf_status_conduit_push>
          <cf_tracking_thunderbird_relnote>---</cf_tracking_thunderbird_relnote>
          <cf_tracking_relnote_b2g>---</cf_tracking_relnote_b2g>
          <cf_tracking_conduit_push>---</cf_tracking_conduit_push>
          <cf_tracking_firefox_sumo>---</cf_tracking_firefox_sumo>
          <cf_status_bmo_push>---</cf_status_bmo_push>
          <cf_tracking_bmo_push>---</cf_tracking_bmo_push>
          <cf_blocking_fennec10>---</cf_blocking_fennec10>
          <cf_blocking_fennec>---</cf_blocking_fennec>
          <cf_blocking_thunderbird33>---</cf_blocking_thunderbird33>
          <cf_status_thunderbird33>---</cf_status_thunderbird33>
          <cf_blocking_thunderbird32>---</cf_blocking_thunderbird32>
          <cf_status_thunderbird32>---</cf_status_thunderbird32>
          <cf_blocking_thunderbird31>---</cf_blocking_thunderbird31>
          <cf_status_thunderbird31>---</cf_status_thunderbird31>
          <cf_blocking_thunderbird30>---</cf_blocking_thunderbird30>
          <cf_status_thunderbird30>---</cf_status_thunderbird30>
          <cf_tracking_thunderbird6>---</cf_tracking_thunderbird6>
          <cf_status_thunderbird6>---</cf_status_thunderbird6>
          <cf_tracking_thunderbird7>---</cf_tracking_thunderbird7>
          <cf_status_thunderbird7>---</cf_status_thunderbird7>
          <cf_tracking_thunderbird8>---</cf_tracking_thunderbird8>
          <cf_status_thunderbird8>---</cf_status_thunderbird8>
          <cf_tracking_thunderbird9>---</cf_tracking_thunderbird9>
          <cf_status_thunderbird9>---</cf_status_thunderbird9>
          <cf_tracking_thunderbird10>---</cf_tracking_thunderbird10>
          <cf_status_thunderbird10>---</cf_status_thunderbird10>
          <cf_tracking_thunderbird11>---</cf_tracking_thunderbird11>
          <cf_status_thunderbird11>---</cf_status_thunderbird11>
          <cf_tracking_thunderbird12>---</cf_tracking_thunderbird12>
          <cf_status_thunderbird12>---</cf_status_thunderbird12>
          <cf_tracking_thunderbird13>---</cf_tracking_thunderbird13>
          <cf_status_thunderbird13>---</cf_status_thunderbird13>
          <cf_tracking_thunderbird14>---</cf_tracking_thunderbird14>
          <cf_status_thunderbird14>---</cf_status_thunderbird14>
          <cf_tracking_thunderbird15>---</cf_tracking_thunderbird15>
          <cf_status_thunderbird15>---</cf_status_thunderbird15>
          <cf_tracking_thunderbird16>---</cf_tracking_thunderbird16>
          <cf_status_thunderbird16>---</cf_status_thunderbird16>
          <cf_tracking_thunderbird17>---</cf_tracking_thunderbird17>
          <cf_status_thunderbird17>---</cf_status_thunderbird17>
          <cf_tracking_thunderbird18>---</cf_tracking_thunderbird18>
          <cf_status_thunderbird18>---</cf_status_thunderbird18>
          <cf_tracking_thunderbird19>---</cf_tracking_thunderbird19>
          <cf_status_thunderbird19>---</cf_status_thunderbird19>
          <cf_tracking_thunderbird20>---</cf_tracking_thunderbird20>
          <cf_status_thunderbird20>---</cf_status_thunderbird20>
          <cf_tracking_thunderbird21>---</cf_tracking_thunderbird21>
          <cf_status_thunderbird21>---</cf_status_thunderbird21>
          <cf_tracking_thunderbird22>---</cf_tracking_thunderbird22>
          <cf_status_thunderbird22>---</cf_status_thunderbird22>
          <cf_tracking_thunderbird23>---</cf_tracking_thunderbird23>
          <cf_status_thunderbird23>---</cf_status_thunderbird23>
          <cf_tracking_thunderbird24>---</cf_tracking_thunderbird24>
          <cf_status_thunderbird24>---</cf_status_thunderbird24>
          <cf_tracking_thunderbird25>---</cf_tracking_thunderbird25>
          <cf_status_thunderbird25>---</cf_status_thunderbird25>
          <cf_tracking_thunderbird26>---</cf_tracking_thunderbird26>
          <cf_status_thunderbird26>---</cf_status_thunderbird26>
          <cf_tracking_thunderbird27>---</cf_tracking_thunderbird27>
          <cf_status_thunderbird27>---</cf_status_thunderbird27>
          <cf_tracking_thunderbird28>---</cf_tracking_thunderbird28>
          <cf_status_thunderbird28>---</cf_status_thunderbird28>
          <cf_tracking_thunderbird29>---</cf_tracking_thunderbird29>
          <cf_status_thunderbird29>---</cf_status_thunderbird29>
          <cf_tracking_thunderbird_30>---</cf_tracking_thunderbird_30>
          <cf_status_thunderbird_30>---</cf_status_thunderbird_30>
          <cf_tracking_thunderbird_31>---</cf_tracking_thunderbird_31>
          <cf_status_thunderbird_31>---</cf_status_thunderbird_31>
          <cf_tracking_thunderbird_32>---</cf_tracking_thunderbird_32>
          <cf_status_thunderbird_32>---</cf_status_thunderbird_32>
          <cf_tracking_thunderbird_esr10>---</cf_tracking_thunderbird_esr10>
          <cf_status_thunderbird_esr10>---</cf_status_thunderbird_esr10>
          <cf_tracking_thunderbird_esr17>---</cf_tracking_thunderbird_esr17>
          <cf_status_thunderbird_esr17>---</cf_status_thunderbird_esr17>
          <cf_tracking_thunderbird_33>---</cf_tracking_thunderbird_33>
          <cf_status_thunderbird_33>---</cf_status_thunderbird_33>
          <cf_tracking_thunderbird_34>---</cf_tracking_thunderbird_34>
          <cf_status_thunderbird_34>---</cf_status_thunderbird_34>
          <cf_tracking_thunderbird_35>---</cf_tracking_thunderbird_35>
          <cf_status_thunderbird_35>---</cf_status_thunderbird_35>
          <cf_tracking_thunderbird_36>---</cf_tracking_thunderbird_36>
          <cf_status_thunderbird_36>---</cf_status_thunderbird_36>
          <cf_tracking_thunderbird_37>---</cf_tracking_thunderbird_37>
          <cf_status_thunderbird_37>---</cf_status_thunderbird_37>
          <cf_tracking_thunderbird_38>---</cf_tracking_thunderbird_38>
          <cf_status_thunderbird_38>---</cf_status_thunderbird_38>
          <cf_tracking_thunderbird_39>---</cf_tracking_thunderbird_39>
          <cf_status_thunderbird_39>---</cf_status_thunderbird_39>
          <cf_tracking_thunderbird_40>---</cf_tracking_thunderbird_40>
          <cf_status_thunderbird_40>---</cf_status_thunderbird_40>
          <cf_blocking_seamonkey21>---</cf_blocking_seamonkey21>
          <cf_tracking_thunderbird_41>---</cf_tracking_thunderbird_41>
          <cf_status_thunderbird_41>---</cf_status_thunderbird_41>
          <cf_status_seamonkey21>---</cf_status_seamonkey21>
          <cf_tracking_thunderbird_42>---</cf_tracking_thunderbird_42>
          <cf_tracking_seamonkey22>---</cf_tracking_seamonkey22>
          <cf_status_seamonkey22>---</cf_status_seamonkey22>
          <cf_status_thunderbird_42>---</cf_status_thunderbird_42>
          <cf_tracking_seamonkey23>---</cf_tracking_seamonkey23>
          <cf_tracking_thunderbird_43>---</cf_tracking_thunderbird_43>
          <cf_status_thunderbird_43>---</cf_status_thunderbird_43>
          <cf_status_seamonkey23>---</cf_status_seamonkey23>
          <cf_tracking_thunderbird_44>---</cf_tracking_thunderbird_44>
          <cf_tracking_seamonkey24>---</cf_tracking_seamonkey24>
          <cf_status_thunderbird_44>---</cf_status_thunderbird_44>
          <cf_status_seamonkey24>---</cf_status_seamonkey24>
          <cf_tracking_seamonkey25>---</cf_tracking_seamonkey25>
          <cf_status_seamonkey25>---</cf_status_seamonkey25>
          <cf_tracking_seamonkey26>---</cf_tracking_seamonkey26>
          <cf_status_seamonkey26>---</cf_status_seamonkey26>
          <cf_tracking_seamonkey27>---</cf_tracking_seamonkey27>
          <cf_status_seamonkey27>---</cf_status_seamonkey27>
          <cf_tracking_seamonkey28>---</cf_tracking_seamonkey28>
          <cf_status_seamonkey28>---</cf_status_seamonkey28>
          <cf_tracking_seamonkey29>---</cf_tracking_seamonkey29>
          <cf_status_seamonkey29>---</cf_status_seamonkey29>
          <cf_tracking_seamonkey210>---</cf_tracking_seamonkey210>
          <cf_status_seamonkey210>---</cf_status_seamonkey210>
          <cf_tracking_seamonkey211>---</cf_tracking_seamonkey211>
          <cf_status_seamonkey211>---</cf_status_seamonkey211>
          <cf_tracking_seamonkey212>---</cf_tracking_seamonkey212>
          <cf_status_seamonkey212>---</cf_status_seamonkey212>
          <cf_tracking_seamonkey213>---</cf_tracking_seamonkey213>
          <cf_status_seamonkey213>---</cf_status_seamonkey213>
          <cf_tracking_seamonkey214>---</cf_tracking_seamonkey214>
          <cf_status_seamonkey214>---</cf_status_seamonkey214>
          <cf_tracking_seamonkey215>---</cf_tracking_seamonkey215>
          <cf_status_seamonkey215>---</cf_status_seamonkey215>
          <cf_tracking_seamonkey216>---</cf_tracking_seamonkey216>
          <cf_status_seamonkey216>---</cf_status_seamonkey216>
          <cf_tracking_seamonkey217>---</cf_tracking_seamonkey217>
          <cf_status_seamonkey217>---</cf_status_seamonkey217>
          <cf_tracking_seamonkey218>---</cf_tracking_seamonkey218>
          <cf_status_seamonkey218>---</cf_status_seamonkey218>
          <cf_tracking_seamonkey219>---</cf_tracking_seamonkey219>
          <cf_status_seamonkey219>---</cf_status_seamonkey219>
          <cf_tracking_seamonkey220>---</cf_tracking_seamonkey220>
          <cf_status_seamonkey220>---</cf_status_seamonkey220>
          <cf_tracking_seamonkey221>---</cf_tracking_seamonkey221>
          <cf_status_seamonkey221>---</cf_status_seamonkey221>
          <cf_tracking_seamonkey222>---</cf_tracking_seamonkey222>
          <cf_status_seamonkey222>---</cf_status_seamonkey222>
          <cf_tracking_seamonkey223>---</cf_tracking_seamonkey223>
          <cf_status_seamonkey223>---</cf_status_seamonkey223>
          <cf_tracking_thunderbird_45>---</cf_tracking_thunderbird_45>
          <cf_tracking_seamonkey224>---</cf_tracking_seamonkey224>
          <cf_status_thunderbird_45>---</cf_status_thunderbird_45>
          <cf_tracking_thunderbird_46>---</cf_tracking_thunderbird_46>
          <cf_status_thunderbird_46>---</cf_status_thunderbird_46>
          <cf_status_seamonkey224>---</cf_status_seamonkey224>
          <cf_tracking_thunderbird_47>---</cf_tracking_thunderbird_47>
          <cf_status_thunderbird_47>---</cf_status_thunderbird_47>
          <cf_tracking_thunderbird_48>---</cf_tracking_thunderbird_48>
          <cf_status_thunderbird_48>---</cf_status_thunderbird_48>
          <cf_tracking_seamonkey225>---</cf_tracking_seamonkey225>
          <cf_tracking_thunderbird_49>---</cf_tracking_thunderbird_49>
          <cf_status_thunderbird_49>---</cf_status_thunderbird_49>
          <cf_tracking_thunderbird_50>---</cf_tracking_thunderbird_50>
          <cf_status_thunderbird_50>---</cf_status_thunderbird_50>
          <cf_status_seamonkey225>---</cf_status_seamonkey225>
          <cf_status_seamonkey226>---</cf_status_seamonkey226>
          <cf_tracking_seamonkey226>---</cf_tracking_seamonkey226>
          <cf_status_seamonkey227>---</cf_status_seamonkey227>
          <cf_tracking_seamonkey227>---</cf_tracking_seamonkey227>
          <cf_status_seamonkey228>---</cf_status_seamonkey228>
          <cf_tracking_seamonkey228>---</cf_tracking_seamonkey228>
          <cf_status_seamonkey229>---</cf_status_seamonkey229>
          <cf_tracking_thunderbird_esr24>---</cf_tracking_thunderbird_esr24>
          <cf_colo_site>---</cf_colo_site>
          <cf_tracking_seamonkey229>---</cf_tracking_seamonkey229>
          <cf_status_thunderbird_esr24>---</cf_status_thunderbird_esr24>
          <cf_tracking_thunderbird_esr31>---</cf_tracking_thunderbird_esr31>
          <cf_status_thunderbird_esr31>---</cf_status_thunderbird_esr31>
          <cf_tracking_thunderbird_esr38>---</cf_tracking_thunderbird_esr38>
          <cf_status_seamonkey230>---</cf_status_seamonkey230>
          <cf_status_thunderbird_esr38>---</cf_status_thunderbird_esr38>
          <cf_tracking_thunderbird_esr45>---</cf_tracking_thunderbird_esr45>
          <cf_status_thunderbird_esr45>---</cf_status_thunderbird_esr45>
          <cf_tracking_thunderbird_esr52>---</cf_tracking_thunderbird_esr52>
          <cf_status_thunderbird_esr52>---</cf_status_thunderbird_esr52>
          <cf_tracking_seamonkey230>---</cf_tracking_seamonkey230>
          <cf_office>---</cf_office>
          <cf_tracking_thunderbird_esr60>---</cf_tracking_thunderbird_esr60>
          <cf_status_thunderbird_esr60>---</cf_status_thunderbird_esr60>
          <cf_status_seamonkey231>---</cf_status_seamonkey231>
          <cf_tracking_thunderbird_esr68>---</cf_tracking_thunderbird_esr68>
          <cf_status_thunderbird_esr68>---</cf_status_thunderbird_esr68>
          <cf_tracking_seamonkey231>---</cf_tracking_seamonkey231>
          <cf_status_seamonkey232>---</cf_status_seamonkey232>
          <cf_tracking_thunderbird_esr78>---</cf_tracking_thunderbird_esr78>
          <cf_status_thunderbird_esr78>---</cf_status_thunderbird_esr78>
          <cf_tracking_seamonkey232>---</cf_tracking_seamonkey232>
          <cf_tracking_thunderbird_51>---</cf_tracking_thunderbird_51>
          <cf_status_thunderbird_51>---</cf_status_thunderbird_51>
          <cf_tracking_thunderbird_52>---</cf_tracking_thunderbird_52>
          <cf_status_thunderbird_52>---</cf_status_thunderbird_52>
          <cf_tracking_thunderbird_esr91>---</cf_tracking_thunderbird_esr91>
          <cf_status_thunderbird_esr91>---</cf_status_thunderbird_esr91>
          <cf_tracking_thunderbird_53>---</cf_tracking_thunderbird_53>
          <cf_status_thunderbird_53>---</cf_status_thunderbird_53>
          <cf_tracking_seamonkey233>---</cf_tracking_seamonkey233>
          <cf_tracking_thunderbird_54>---</cf_tracking_thunderbird_54>
          <cf_status_thunderbird_54>---</cf_status_thunderbird_54>
          <cf_tracking_thunderbird_55>---</cf_tracking_thunderbird_55>
          <cf_tracking_thunderbird_esr102>---</cf_tracking_thunderbird_esr102>
          <cf_status_thunderbird_55>---</cf_status_thunderbird_55>
          <cf_status_thunderbird_esr102>---</cf_status_thunderbird_esr102>
          <cf_status_seamonkey233>---</cf_status_seamonkey233>
          <cf_tracking_thunderbird_56>---</cf_tracking_thunderbird_56>
          <cf_status_thunderbird_56>---</cf_status_thunderbird_56>
          <cf_tracking_seamonkey234>---</cf_tracking_seamonkey234>
          <cf_tracking_thunderbird_57>---</cf_tracking_thunderbird_57>
          <cf_status_thunderbird_57>---</cf_status_thunderbird_57>
          <cf_tracking_thunderbird_58>---</cf_tracking_thunderbird_58>
          <cf_status_thunderbird_58>---</cf_status_thunderbird_58>
          <cf_status_seamonkey234>---</cf_status_seamonkey234>
          <cf_tracking_thunderbird_59>---</cf_tracking_thunderbird_59>
          <cf_status_thunderbird_59>---</cf_status_thunderbird_59>
          <cf_tracking_seamonkey235>---</cf_tracking_seamonkey235>
          <cf_tracking_thunderbird_60>---</cf_tracking_thunderbird_60>
          <cf_status_thunderbird_60>---</cf_status_thunderbird_60>
          <cf_status_seamonkey235>---</cf_status_seamonkey235>
          <cf_tracking_thunderbird_61>---</cf_tracking_thunderbird_61>
          <cf_status_thunderbird_61>---</cf_status_thunderbird_61>
          <cf_tracking_seamonkey236>---</cf_tracking_seamonkey236>
          <cf_tracking_thunderbird_62>---</cf_tracking_thunderbird_62>
          <cf_status_thunderbird_62>---</cf_status_thunderbird_62>
          <cf_status_seamonkey236>---</cf_status_seamonkey236>
          <cf_tracking_thunderbird_63>---</cf_tracking_thunderbird_63>
          <cf_status_thunderbird_63>---</cf_status_thunderbird_63>
          <cf_tracking_thunderbird_64>---</cf_tracking_thunderbird_64>
          <cf_tracking_seamonkey237>---</cf_tracking_seamonkey237>
          <cf_status_thunderbird_64>---</cf_status_thunderbird_64>
          <cf_tracking_thunderbird_65>---</cf_tracking_thunderbird_65>
          <cf_status_seamonkey237>---</cf_status_seamonkey237>
          <cf_status_thunderbird_65>---</cf_status_thunderbird_65>
          <cf_tracking_thunderbird_66>---</cf_tracking_thunderbird_66>
          <cf_status_thunderbird_66>---</cf_status_thunderbird_66>
          <cf_tracking_thunderbird_67>---</cf_tracking_thunderbird_67>
          <cf_status_thunderbird_67>---</cf_status_thunderbird_67>
          <cf_tracking_thunderbird_68>---</cf_tracking_thunderbird_68>
          <cf_tracking_seamonkey238>---</cf_tracking_seamonkey238>
          <cf_status_thunderbird_68>---</cf_status_thunderbird_68>
          <cf_status_thunderbird_69>---</cf_status_thunderbird_69>
          <cf_status_seamonkey238>---</cf_status_seamonkey238>
          <cf_tracking_seamonkey239>---</cf_tracking_seamonkey239>
          <cf_tracking_thunderbird_69>---</cf_tracking_thunderbird_69>
          <cf_crash_signature></cf_crash_signature>
          <cf_status_thunderbird_70>---</cf_status_thunderbird_70>
          <cf_status_seamonkey239>---</cf_status_seamonkey239>
          <cf_tracking_thunderbird_70>---</cf_tracking_thunderbird_70>
          <cf_tracking_seamonkey240>---</cf_tracking_seamonkey240>
          <cf_status_seamonkey240>---</cf_status_seamonkey240>
          <cf_status_thunderbird_71>---</cf_status_thunderbird_71>
          
          <cf_tracking_thunderbird_71>---</cf_tracking_thunderbird_71>
          <cf_tracking_seamonkey241>---</cf_tracking_seamonkey241>
          <cf_status_thunderbird_72>---</cf_status_thunderbird_72>
          <cf_status_seamonkey241>---</cf_status_seamonkey241>
          <cf_tracking_seamonkey242>---</cf_tracking_seamonkey242>
          <cf_tracking_thunderbird_72>---</cf_tracking_thunderbird_72>
          <cf_status_thunderbird_73>---</cf_status_thunderbird_73>
          <cf_status_seamonkey242>---</cf_status_seamonkey242>
          <cf_tracking_seamonkey243>---</cf_tracking_seamonkey243>
          <cf_tracking_thunderbird_73>---</cf_tracking_thunderbird_73>
          <cf_status_seamonkey243>---</cf_status_seamonkey243>
          <cf_status_thunderbird_74>---</cf_status_thunderbird_74>
          <cf_status_thunderbird_75>---</cf_status_thunderbird_75>
          <cf_tracking_thunderbird_74>---</cf_tracking_thunderbird_74>
          <cf_tracking_seamonkey244>---</cf_tracking_seamonkey244>
          <cf_status_thunderbird_76>---</cf_status_thunderbird_76>
          <cf_status_seamonkey244>---</cf_status_seamonkey244>
          <cf_tracking_thunderbird_75>---</cf_tracking_thunderbird_75>
          <cf_tracking_thunderbird_76>---</cf_tracking_thunderbird_76>
          <cf_tracking_seamonkey245>---</cf_tracking_seamonkey245>
          <cf_status_thunderbird_77>---</cf_status_thunderbird_77>
          <cf_tracking_thunderbird_77>---</cf_tracking_thunderbird_77>
          <cf_status_thunderbird_78>---</cf_status_thunderbird_78>
          <cf_status_seamonkey245>---</cf_status_seamonkey245>
          <cf_tracking_thunderbird_78>---</cf_tracking_thunderbird_78>
          <cf_status_thunderbird_79>---</cf_status_thunderbird_79>
          <cf_tracking_seamonkey246>---</cf_tracking_seamonkey246>
          <cf_tracking_thunderbird_79>---</cf_tracking_thunderbird_79>
          <cf_status_seamonkey246>---</cf_status_seamonkey246>
          <cf_status_thunderbird_80>---</cf_status_thunderbird_80>
          <cf_tracking_thunderbird_80>---</cf_tracking_thunderbird_80>
          <cf_tracking_seamonkey247>---</cf_tracking_seamonkey247>
          <cf_status_thunderbird_81>---</cf_status_thunderbird_81>
          <cf_tracking_thunderbird_81>---</cf_tracking_thunderbird_81>
          <cf_status_thunderbird_82>---</cf_status_thunderbird_82>
          <cf_status_seamonkey247>---</cf_status_seamonkey247>
          <cf_tracking_thunderbird_82>---</cf_tracking_thunderbird_82>
          <cf_status_thunderbird_83>---</cf_status_thunderbird_83>
          <cf_tracking_seamonkey248>---</cf_tracking_seamonkey248>
          <cf_tracking_thunderbird_83>---</cf_tracking_thunderbird_83>
          <cf_status_seamonkey248>---</cf_status_seamonkey248>
          <cf_status_thunderbird_84>---</cf_status_thunderbird_84>
          <cf_tracking_thunderbird_84>---</cf_tracking_thunderbird_84>
          <cf_status_thunderbird_85>---</cf_status_thunderbird_85>
          <cf_tracking_thunderbird_85>---</cf_tracking_thunderbird_85>
          <cf_blocking_kilimanjaro>---</cf_blocking_kilimanjaro>
          <cf_status_thunderbird_86>---</cf_status_thunderbird_86>
          <cf_tracking_thunderbird_86>---</cf_tracking_thunderbird_86>
          <cf_status_thunderbird_87>---</cf_status_thunderbird_87>
          <cf_blocking_b2g>---</cf_blocking_b2g>
          <cf_tracking_seamonkey249>---</cf_tracking_seamonkey249>
          <cf_tracking_thunderbird_87>---</cf_tracking_thunderbird_87>
          <cf_blocking_basecamp>---</cf_blocking_basecamp>
          <cf_status_thunderbird_88>---</cf_status_thunderbird_88>
          <cf_status_seamonkey249>---</cf_status_seamonkey249>
          <cf_tracking_thunderbird_88>---</cf_tracking_thunderbird_88>
          <cf_tracking_seamonkey250>---</cf_tracking_seamonkey250>
          <cf_status_thunderbird_89>---</cf_status_thunderbird_89>
          <cf_feature_b2g>---</cf_feature_b2g>
          <cf_tracking_thunderbird_89>---</cf_tracking_thunderbird_89>
          <cf_tracking_b2g>---</cf_tracking_b2g>
          <cf_status_thunderbird_90>---</cf_status_thunderbird_90>
          <cf_ux_b2g>---</cf_ux_b2g>
          <cf_status_seamonkey250>---</cf_status_seamonkey250>
          <cf_tracking_thunderbird_90>---</cf_tracking_thunderbird_90>
          <cf_b2g_ota_blocker>---</cf_b2g_ota_blocker>
          <cf_status_thunderbird_91>---</cf_status_thunderbird_91>
          <cf_tracking_seamonkey251>---</cf_tracking_seamonkey251>
          <cf_tracking_thunderbird_91>---</cf_tracking_thunderbird_91>
          <cf_status_seamonkey251>---</cf_status_seamonkey251>
          <cf_status_thunderbird_92>---</cf_status_thunderbird_92>
          <cf_tracking_thunderbird_92>---</cf_tracking_thunderbird_92>
          <cf_tracking_seamonkey252>---</cf_tracking_seamonkey252>
          <cf_status_thunderbird_93>---</cf_status_thunderbird_93>
          <cf_tracking_thunderbird_93>---</cf_tracking_thunderbird_93>
          <cf_status_seamonkey252>---</cf_status_seamonkey252>
          <cf_status_thunderbird_94>---</cf_status_thunderbird_94>
          <cf_tracking_thunderbird_94>---</cf_tracking_thunderbird_94>
          <cf_status_thunderbird_95>---</cf_status_thunderbird_95>
          <cf_status_seamonkey253>---</cf_status_seamonkey253>
          <cf_tracking_thunderbird_95>---</cf_tracking_thunderbird_95>
          <cf_tracking_seamonkey253>---</cf_tracking_seamonkey253>
          <cf_status_thunderbird_96>---</cf_status_thunderbird_96>
          <cf_tracking_seamonkey254>---</cf_tracking_seamonkey254>
          <cf_tracking_thunderbird_96>---</cf_tracking_thunderbird_96>
          <cf_status_seamonkey254>---</cf_status_seamonkey254>
          <cf_status_thunderbird_97>---</cf_status_thunderbird_97>
          <cf_tracking_thunderbird_97>---</cf_tracking_thunderbird_97>
          <cf_status_thunderbird_98>---</cf_status_thunderbird_98>
          <cf_tracking_seamonkey255>---</cf_tracking_seamonkey255>
          <cf_tracking_thunderbird_98>---</cf_tracking_thunderbird_98>
          <cf_status_seamonkey255>---</cf_status_seamonkey255>
          <cf_status_thunderbird_99>---</cf_status_thunderbird_99>
          <cf_tracking_thunderbird_99>---</cf_tracking_thunderbird_99>
          <cf_status_thunderbird_100>---</cf_status_thunderbird_100>
          <cf_status_seamonkey256>---</cf_status_seamonkey256>
          <cf_tracking_thunderbird_100>---</cf_tracking_thunderbird_100>
          <cf_status_thunderbird_101>---</cf_status_thunderbird_101>
          <cf_tracking_seamonkey256>---</cf_tracking_seamonkey256>
          <cf_status_seamonkey257esr>---</cf_status_seamonkey257esr>
          <cf_tracking_thunderbird_101>---</cf_tracking_thunderbird_101>
          <cf_tracking_seamonkey257esr>---</cf_tracking_seamonkey257esr>
          <cf_status_thunderbird_102>---</cf_status_thunderbird_102>
          <cf_tracking_thunderbird_102>---</cf_tracking_thunderbird_102>
          <cf_status_seamonkey258>---</cf_status_seamonkey258>
          <cf_status_thunderbird_103>---</cf_status_thunderbird_103>
          <cf_tracking_thunderbird_103>---</cf_tracking_thunderbird_103>
          <cf_status_thunderbird_104>---</cf_status_thunderbird_104>
          <cf_tracking_seamonkey258>---</cf_tracking_seamonkey258>
          <cf_tracking_thunderbird_104>---</cf_tracking_thunderbird_104>
          <cf_status_seamonkey259>---</cf_status_seamonkey259>
          <cf_status_thunderbird_105>---</cf_status_thunderbird_105>
          <cf_tracking_thunderbird_105>---</cf_tracking_thunderbird_105>
          <cf_status_thunderbird_106>---</cf_status_thunderbird_106>
          <cf_tracking_thunderbird_esr115>---</cf_tracking_thunderbird_esr115>
          <cf_tracking_seamonkey259>---</cf_tracking_seamonkey259>
          <cf_tracking_thunderbird_106>---</cf_tracking_thunderbird_106>
          <cf_status_thunderbird_esr115>---</cf_status_thunderbird_esr115>
          <cf_status_fxios_v1_0>---</cf_status_fxios_v1_0>
          <cf_status_fxios_v1_0_5>---</cf_status_fxios_v1_0_5>
          <cf_status_fxios_v1_1>---</cf_status_fxios_v1_1>
          <cf_status_fxios_v2_0>---</cf_status_fxios_v2_0>
          <cf_status_fxios_v3_0>---</cf_status_fxios_v3_0>
          <cf_status_seamonkey260>---</cf_status_seamonkey260>
          <cf_tracking_thunderbird_esr128>---</cf_tracking_thunderbird_esr128>
          <cf_status_fxios_v4_0>---</cf_status_fxios_v4_0>
          <cf_status_thunderbird_107>---</cf_status_thunderbird_107>
          <cf_tracking_thunderbird_107>---</cf_tracking_thunderbird_107>
          <cf_status_thunderbird_esr128>---</cf_status_thunderbird_esr128>
          <cf_tracking_seamonkey260>---</cf_tracking_seamonkey260>
          <cf_status_thunderbird_108>---</cf_status_thunderbird_108>
          <cf_tracking_thunderbird_esr140>---</cf_tracking_thunderbird_esr140>
          <cf_status_fxios_v5_0>---</cf_status_fxios_v5_0>
          <cf_status_fxios_v5_1>---</cf_status_fxios_v5_1>
          <cf_tracking_thunderbird_108>---</cf_tracking_thunderbird_108>
          <cf_status_thunderbird_esr140>---</cf_status_thunderbird_esr140>
          <cf_status_fxios_v5_2>---</cf_status_fxios_v5_2>
          <cf_status_fxios_v5_3>---</cf_status_fxios_v5_3>
          <cf_status_fxios_v6_0>---</cf_status_fxios_v6_0>
          <cf_tracking_thunderbird_esr153>---</cf_tracking_thunderbird_esr153>
          <cf_status_thunderbird_109>---</cf_status_thunderbird_109>
          <cf_status_thunderbird_esr153>---</cf_status_thunderbird_esr153>
          <cf_tracking_thunderbird_109>---</cf_tracking_thunderbird_109>
          <cf_status_fxios_v6_1>---</cf_status_fxios_v6_1>
          <cf_status_thunderbird_110>---</cf_status_thunderbird_110>
          <cf_status_fxios_v7_0>---</cf_status_fxios_v7_0>
          <cf_tracking_thunderbird_110>---</cf_tracking_thunderbird_110>
          <cf_status_fxios_v7_1>---</cf_status_fxios_v7_1>
          <cf_status_thunderbird_111>---</cf_status_thunderbird_111>
          <cf_status_fxios_v7_2>---</cf_status_fxios_v7_2>
          <cf_tracking_thunderbird_111>---</cf_tracking_thunderbird_111>
          <cf_status_fxios_v7_3>---</cf_status_fxios_v7_3>
          <cf_status_thunderbird_112>---</cf_status_thunderbird_112>
          <cf_tracking_thunderbird_112>---</cf_tracking_thunderbird_112>
          <cf_status_fxios_v7_4>---</cf_status_fxios_v7_4>
          <cf_status_fxios_v7_5>---</cf_status_fxios_v7_5>
          <cf_status_fxios_v7_6>---</cf_status_fxios_v7_6>
          <cf_status_thunderbird_113>---</cf_status_thunderbird_113>
          <cf_tracking_thunderbird_113>---</cf_tracking_thunderbird_113>
          <cf_tracking_seamonkey263>---</cf_tracking_seamonkey263>
          <cf_status_thunderbird_114>---</cf_status_thunderbird_114>
          <cf_tracking_thunderbird_114>---</cf_tracking_thunderbird_114>
          <cf_status_seamonkey263>---</cf_status_seamonkey263>
          <cf_status_thunderbird_115>---</cf_status_thunderbird_115>
          <cf_tracking_thunderbird_115>---</cf_tracking_thunderbird_115>
          
          <cf_status_thunderbird_116>---</cf_status_thunderbird_116>
          <cf_tracking_thunderbird_116>---</cf_tracking_thunderbird_116>
          <cf_status_thunderbird_117>---</cf_status_thunderbird_117>
          <cf_tracking_thunderbird_117>---</cf_tracking_thunderbird_117>
          <cf_status_thunderbird_118>---</cf_status_thunderbird_118>
          <cf_tracking_thunderbird_118>---</cf_tracking_thunderbird_118>
          <cf_status_thunderbird_119>---</cf_status_thunderbird_119>
          <cf_tracking_thunderbird_119>---</cf_tracking_thunderbird_119>
          <cf_status_thunderbird_120>---</cf_status_thunderbird_120>
          <cf_tracking_thunderbird_120>---</cf_tracking_thunderbird_120>
          <cf_status_thunderbird_121>---</cf_status_thunderbird_121>
          <cf_tracking_thunderbird_121>---</cf_tracking_thunderbird_121>
          <cf_status_thunderbird_122>---</cf_status_thunderbird_122>
          <cf_tracking_thunderbird_122>---</cf_tracking_thunderbird_122>
          <cf_status_thunderbird_123>---</cf_status_thunderbird_123>
          <cf_tracking_thunderbird_123>---</cf_tracking_thunderbird_123>
          <cf_status_thunderbird_124>---</cf_status_thunderbird_124>
          <cf_tracking_thunderbird_124>---</cf_tracking_thunderbird_124>
          <cf_status_thunderbird_125>---</cf_status_thunderbird_125>
          <cf_tracking_thunderbird_125>---</cf_tracking_thunderbird_125>
          <cf_status_thunderbird_126>---</cf_status_thunderbird_126>
          <cf_tracking_thunderbird_126>---</cf_tracking_thunderbird_126>
          <cf_status_thunderbird_127>---</cf_status_thunderbird_127>
          <cf_tracking_thunderbird_127>---</cf_tracking_thunderbird_127>
          <cf_status_thunderbird_128>---</cf_status_thunderbird_128>
          <cf_tracking_thunderbird_128>---</cf_tracking_thunderbird_128>
          <cf_status_thunderbird_129>---</cf_status_thunderbird_129>
          <cf_tracking_thunderbird_129>---</cf_tracking_thunderbird_129>
          <cf_status_thunderbird_130>---</cf_status_thunderbird_130>
          <cf_tracking_thunderbird_130>---</cf_tracking_thunderbird_130>
          <cf_status_thunderbird_131>---</cf_status_thunderbird_131>
          <cf_tracking_thunderbird_131>---</cf_tracking_thunderbird_131>
          <cf_status_thunderbird_132>---</cf_status_thunderbird_132>
          <cf_tracking_thunderbird_132>---</cf_tracking_thunderbird_132>
          <cf_status_thunderbird_133>---</cf_status_thunderbird_133>
          <cf_tracking_thunderbird_133>---</cf_tracking_thunderbird_133>
          <cf_status_thunderbird_134>---</cf_status_thunderbird_134>
          <cf_tracking_thunderbird_134>---</cf_tracking_thunderbird_134>
          <cf_status_thunderbird_135>---</cf_status_thunderbird_135>
          <cf_tracking_thunderbird_135>---</cf_tracking_thunderbird_135>
          <cf_last_resolved>2011-03-23 22:42:50</cf_last_resolved>
          <cf_status_thunderbird_136>---</cf_status_thunderbird_136>
          <cf_tracking_thunderbird_136>---</cf_tracking_thunderbird_136>
          <cf_status_thunderbird_137>---</cf_status_thunderbird_137>
          <cf_tracking_thunderbird_137>---</cf_tracking_thunderbird_137>
          <cf_status_thunderbird_138>---</cf_status_thunderbird_138>
          <cf_tracking_thunderbird_138>---</cf_tracking_thunderbird_138>
          <cf_status_thunderbird_139>---</cf_status_thunderbird_139>
          <cf_tracking_thunderbird_139>---</cf_tracking_thunderbird_139>
          <cf_status_thunderbird_140>---</cf_status_thunderbird_140>
          <cf_tracking_thunderbird_140>---</cf_tracking_thunderbird_140>
          <cf_status_thunderbird_141>---</cf_status_thunderbird_141>
          <cf_tracking_thunderbird_141>---</cf_tracking_thunderbird_141>
          <cf_status_thunderbird_142>---</cf_status_thunderbird_142>
          <cf_tracking_thunderbird_142>---</cf_tracking_thunderbird_142>
          <cf_status_thunderbird_143>---</cf_status_thunderbird_143>
          <cf_tracking_thunderbird_143>---</cf_tracking_thunderbird_143>
          <cf_status_thunderbird_144>---</cf_status_thunderbird_144>
          <cf_tracking_thunderbird_144>---</cf_tracking_thunderbird_144>
          <cf_status_thunderbird_145>---</cf_status_thunderbird_145>
          <cf_tracking_thunderbird_145>---</cf_tracking_thunderbird_145>
          <cf_status_thunderbird_146>---</cf_status_thunderbird_146>
          <cf_tracking_thunderbird_146>---</cf_tracking_thunderbird_146>
          <cf_status_thunderbird_147>---</cf_status_thunderbird_147>
          <cf_tracking_thunderbird_147>---</cf_tracking_thunderbird_147>
          <cf_status_thunderbird_148>---</cf_status_thunderbird_148>
          <cf_tracking_thunderbird_148>---</cf_tracking_thunderbird_148>
          <cf_status_thunderbird_149>---</cf_status_thunderbird_149>
          <cf_tracking_thunderbird_149>---</cf_tracking_thunderbird_149>
          <cf_status_thunderbird_150>---</cf_status_thunderbird_150>
          <cf_tracking_thunderbird_150>---</cf_tracking_thunderbird_150>
          <cf_status_thunderbird_151>---</cf_status_thunderbird_151>
          <cf_tracking_thunderbird_151>---</cf_tracking_thunderbird_151>
          <cf_status_thunderbird_152>---</cf_status_thunderbird_152>
          <cf_tracking_thunderbird_152>---</cf_tracking_thunderbird_152>
          <cf_status_thunderbird_153>---</cf_status_thunderbird_153>
          <cf_tracking_thunderbird_153>---</cf_tracking_thunderbird_153>
          <cf_status_thunderbird_154>---</cf_status_thunderbird_154>
          <cf_tracking_thunderbird_154>---</cf_tracking_thunderbird_154>
          <cf_status_thunderbird_155>---</cf_status_thunderbird_155>
          <cf_tracking_thunderbird_155>---</cf_tracking_thunderbird_155>
          <cf_status_thunderbird_156>---</cf_status_thunderbird_156>
          <cf_tracking_thunderbird_156>---</cf_tracking_thunderbird_156>
          <cf_user_story></cf_user_story>
          <cf_mozilla_project>---</cf_mozilla_project>
          <cf_machine_state>---</cf_machine_state>
          <cf_qa_whiteboard></cf_qa_whiteboard>
          <cf_fx_iteration>---</cf_fx_iteration>
          <cf_fx_points>---</cf_fx_points>
          
          <cf_has_str>---</cf_has_str>
          <cf_cab_review>---</cf_cab_review>
          <cf_status_fxios_v8_0>---</cf_status_fxios_v8_0>
          <cf_status_fxios_v8_1>---</cf_status_fxios_v8_1>
          <cf_status_fxios_v8_2>---</cf_status_fxios_v8_2>
          <cf_status_fxios_v8_3>---</cf_status_fxios_v8_3>
          <cf_status_fxios_v8_4>---</cf_status_fxios_v8_4>
          <cf_status_fxios_v9_0>---</cf_status_fxios_v9_0>
          <cf_status_fxios_v9_1>---</cf_status_fxios_v9_1>
          <cf_status_fxios_v9_2>---</cf_status_fxios_v9_2>
          <cf_status_fxios_v9_3>---</cf_status_fxios_v9_3>
          <cf_status_fxios_v9_4>---</cf_status_fxios_v9_4>
          <cf_status_fxios_v10_0>---</cf_status_fxios_v10_0>
          <cf_status_fxios_v10_1>---</cf_status_fxios_v10_1>
          <cf_status_fxios_v10_2>---</cf_status_fxios_v10_2>
          <cf_status_fxios_v10_5>---</cf_status_fxios_v10_5>
          <cf_status_fxios_v10_6>---</cf_status_fxios_v10_6>
          <cf_status_fxios_v11_0>---</cf_status_fxios_v11_0>
          <cf_status_fxios_v11_1>---</cf_status_fxios_v11_1>
          <cf_status_fxios_v12_0>---</cf_status_fxios_v12_0>
          <cf_status_fxios_v12_1>---</cf_status_fxios_v12_1>
          <cf_status_fxios_v12_2>---</cf_status_fxios_v12_2>
          <cf_status_fxios_v13_0>---</cf_status_fxios_v13_0>
          <cf_status_fxios_v13_1>---</cf_status_fxios_v13_1>
          <cf_status_fxios_v13_2>---</cf_status_fxios_v13_2>
          <cf_status_fxios_v13_3>---</cf_status_fxios_v13_3>
          <cf_status_fxios_v14_0>---</cf_status_fxios_v14_0>
          <cf_status_fxios_v14_1>---</cf_status_fxios_v14_1>
          <cf_status_fxios_v14_2>---</cf_status_fxios_v14_2>
          <cf_status_fxios_v14_3>---</cf_status_fxios_v14_3>
          <cf_status_fxios_v15_0>---</cf_status_fxios_v15_0>
          <cf_status_fxios_v15_1>---</cf_status_fxios_v15_1>
          <cf_status_fxios_v16_0>---</cf_status_fxios_v16_0>
          <cf_tracking_geckoview62>---</cf_tracking_geckoview62>
          <cf_status_geckoview62>---</cf_status_geckoview62>
          <cf_tracking_geckoview63>---</cf_tracking_geckoview63>
          <cf_status_geckoview63>---</cf_status_geckoview63>
          <cf_tracking_geckoview64>---</cf_tracking_geckoview64>
          <cf_status_geckoview64>---</cf_status_geckoview64>
          <cf_tracking_geckoview65>---</cf_tracking_geckoview65>
          <cf_status_geckoview65>---</cf_status_geckoview65>
          <cf_tracking_geckoview66>---</cf_tracking_geckoview66>
          <cf_status_geckoview66>---</cf_status_geckoview66>
          <cf_tracking_firefox50>---</cf_tracking_firefox50>
          <cf_status_firefox50>---</cf_status_firefox50>
          <cf_tracking_firefox51>---</cf_tracking_firefox51>
          <cf_status_firefox51>---</cf_status_firefox51>
          <cf_tracking_firefox52>---</cf_tracking_firefox52>
          <cf_status_firefox52>---</cf_status_firefox52>
          <cf_tracking_firefox_esr52>---</cf_tracking_firefox_esr52>
          <cf_status_firefox_esr52>---</cf_status_firefox_esr52>
          <cf_tracking_firefox_esr60>---</cf_tracking_firefox_esr60>
          <cf_status_firefox_esr60>---</cf_status_firefox_esr60>
          <cf_tracking_firefox_esr68>---</cf_tracking_firefox_esr68>
          <cf_status_firefox_esr68>---</cf_status_firefox_esr68>
          <cf_tracking_firefox53>---</cf_tracking_firefox53>
          <cf_tracking_firefox_esr78>---</cf_tracking_firefox_esr78>
          <cf_status_firefox_esr78>---</cf_status_firefox_esr78>
          <cf_tracking_firefox_esr91>---</cf_tracking_firefox_esr91>
          <cf_status_firefox_esr91>---</cf_status_firefox_esr91>
          <cf_status_firefox53>---</cf_status_firefox53>
          <cf_tracking_firefox_esr102>---</cf_tracking_firefox_esr102>
          <cf_status_firefox_esr102>---</cf_status_firefox_esr102>
          <cf_tracking_firefox_esr115>---</cf_tracking_firefox_esr115>
          <cf_status_firefox_esr115>---</cf_status_firefox_esr115>
          <cf_tracking_firefox54>---</cf_tracking_firefox54>
          <cf_tracking_firefox_esr128>---</cf_tracking_firefox_esr128>
          <cf_status_firefox_esr128>---</cf_status_firefox_esr128>
          <cf_tracking_firefox_esr140>---</cf_tracking_firefox_esr140>
          <cf_status_firefox_esr140>---</cf_status_firefox_esr140>
          <cf_status_firefox54>---</cf_status_firefox54>
          <cf_tracking_firefox_esr153>---</cf_tracking_firefox_esr153>
          <cf_status_firefox_esr153>---</cf_status_firefox_esr153>
          <cf_tracking_firefox55>---</cf_tracking_firefox55>
          <cf_status_firefox55>---</cf_status_firefox55>
          <cf_tracking_firefox56>---</cf_tracking_firefox56>
          <cf_status_firefox56>---</cf_status_firefox56>
          <cf_tracking_firefox57>---</cf_tracking_firefox57>
          <cf_status_firefox57>---</cf_status_firefox57>
          <cf_tracking_firefox58>---</cf_tracking_firefox58>
          <cf_status_firefox58>---</cf_status_firefox58>
          <cf_tracking_firefox59>---</cf_tracking_firefox59>
          <cf_status_firefox59>---</cf_status_firefox59>
          <cf_tracking_firefox60>---</cf_tracking_firefox60>
          <cf_status_firefox60>---</cf_status_firefox60>
          <cf_tracking_firefox61>---</cf_tracking_firefox61>
          <cf_status_firefox61>---</cf_status_firefox61>
          <cf_tracking_firefox62>---</cf_tracking_firefox62>
          <cf_status_firefox62>---</cf_status_firefox62>
          <cf_tracking_firefox63>---</cf_tracking_firefox63>
          <cf_status_firefox63>---</cf_status_firefox63>
          <cf_tracking_firefox64>---</cf_tracking_firefox64>
          <cf_status_firefox64>---</cf_status_firefox64>
          <cf_tracking_firefox65>---</cf_tracking_firefox65>
          <cf_status_firefox65>---</cf_status_firefox65>
          <cf_tracking_firefox66>---</cf_tracking_firefox66>
          <cf_status_firefox66>---</cf_status_firefox66>
          <cf_tracking_firefox67>---</cf_tracking_firefox67>
          <cf_status_firefox67>---</cf_status_firefox67>
          <cf_tracking_firefox67_0_1>---</cf_tracking_firefox67_0_1>
          <cf_status_firefox67_0_1>---</cf_status_firefox67_0_1>
          <cf_tracking_firefox68>---</cf_tracking_firefox68>
          <cf_status_firefox68>---</cf_status_firefox68>
          <cf_tracking_firefox69>---</cf_tracking_firefox69>
          <cf_status_firefox69>---</cf_status_firefox69>
          <cf_tracking_firefox70>---</cf_tracking_firefox70>
          <cf_status_firefox70>---</cf_status_firefox70>
          <cf_tracking_firefox71>---</cf_tracking_firefox71>
          <cf_status_firefox71>---</cf_status_firefox71>
          <cf_status_firefox72>---</cf_status_firefox72>
          <cf_tracking_firefox72>---</cf_tracking_firefox72>
          <cf_status_firefox73>---</cf_status_firefox73>
          <cf_tracking_firefox73>---</cf_tracking_firefox73>
          <cf_tracking_firefox74>---</cf_tracking_firefox74>
          <cf_status_firefox74>---</cf_status_firefox74>
          <cf_tracking_firefox75>---</cf_tracking_firefox75>
          <cf_status_firefox75>---</cf_status_firefox75>
          <cf_tracking_firefox76>---</cf_tracking_firefox76>
          <cf_status_firefox76>---</cf_status_firefox76>
          <cf_tracking_firefox77>---</cf_tracking_firefox77>
          <cf_status_firefox77>---</cf_status_firefox77>
          <cf_tracking_firefox78>---</cf_tracking_firefox78>
          <cf_status_firefox78>---</cf_status_firefox78>
          <cf_tracking_firefox79>---</cf_tracking_firefox79>
          <cf_status_firefox79>---</cf_status_firefox79>
          <cf_tracking_firefox80>---</cf_tracking_firefox80>
          <cf_status_firefox80>---</cf_status_firefox80>
          <cf_tracking_firefox81>---</cf_tracking_firefox81>
          <cf_status_firefox81>---</cf_status_firefox81>
          <cf_tracking_firefox82>---</cf_tracking_firefox82>
          <cf_status_firefox82>---</cf_status_firefox82>
          <cf_tracking_firefox83>---</cf_tracking_firefox83>
          <cf_status_firefox83>---</cf_status_firefox83>
          <cf_tracking_firefox84>---</cf_tracking_firefox84>
          <cf_status_firefox84>---</cf_status_firefox84>
          <cf_tracking_firefox85>---</cf_tracking_firefox85>
          <cf_status_firefox85>---</cf_status_firefox85>
          <cf_tracking_firefox86>---</cf_tracking_firefox86>
          <cf_status_firefox86>---</cf_status_firefox86>
          <cf_tracking_firefox87>---</cf_tracking_firefox87>
          <cf_status_firefox87>---</cf_status_firefox87>
          <cf_tracking_firefox88>---</cf_tracking_firefox88>
          <cf_status_firefox88>---</cf_status_firefox88>
          <cf_tracking_firefox89>---</cf_tracking_firefox89>
          <cf_status_firefox89>---</cf_status_firefox89>
          <cf_tracking_firefox90>---</cf_tracking_firefox90>
          <cf_status_firefox90>---</cf_status_firefox90>
          <cf_tracking_firefox91>---</cf_tracking_firefox91>
          <cf_status_firefox91>---</cf_status_firefox91>
          <cf_tracking_firefox92>---</cf_tracking_firefox92>
          <cf_status_firefox92>---</cf_status_firefox92>
          <cf_tracking_firefox93>---</cf_tracking_firefox93>
          <cf_status_firefox93>---</cf_status_firefox93>
          <cf_tracking_firefox94>---</cf_tracking_firefox94>
          <cf_status_firefox94>---</cf_status_firefox94>
          <cf_tracking_firefox95>---</cf_tracking_firefox95>
          <cf_status_firefox95>---</cf_status_firefox95>
          <cf_tracking_firefox96>---</cf_tracking_firefox96>
          <cf_status_firefox96>---</cf_status_firefox96>
          <cf_tracking_firefox97>---</cf_tracking_firefox97>
          <cf_status_firefox97>---</cf_status_firefox97>
          <cf_tracking_firefox98>---</cf_tracking_firefox98>
          <cf_status_firefox98>---</cf_status_firefox98>
          <cf_tracking_firefox99>---</cf_tracking_firefox99>
          <cf_status_firefox99>---</cf_status_firefox99>
          <cf_tracking_firefox100>---</cf_tracking_firefox100>
          <cf_status_firefox100>---</cf_status_firefox100>
          <cf_tracking_firefox101>---</cf_tracking_firefox101>
          <cf_status_firefox101>---</cf_status_firefox101>
          <cf_tracking_firefox102>---</cf_tracking_firefox102>
          <cf_status_firefox102>---</cf_status_firefox102>
          <cf_tracking_firefox103>---</cf_tracking_firefox103>
          <cf_status_firefox103>---</cf_status_firefox103>
          <cf_tracking_firefox104>---</cf_tracking_firefox104>
          <cf_status_firefox104>---</cf_status_firefox104>
          <cf_tracking_firefox105>---</cf_tracking_firefox105>
          <cf_status_firefox105>---</cf_status_firefox105>
          <cf_tracking_firefox106>---</cf_tracking_firefox106>
          <cf_status_firefox106>---</cf_status_firefox106>
          <cf_tracking_firefox107>---</cf_tracking_firefox107>
          <cf_status_firefox107>---</cf_status_firefox107>
          <cf_tracking_firefox108>---</cf_tracking_firefox108>
          <cf_status_firefox108>---</cf_status_firefox108>
          <cf_tracking_firefox109>---</cf_tracking_firefox109>
          <cf_status_firefox109>---</cf_status_firefox109>
          <cf_tracking_firefox110>---</cf_tracking_firefox110>
          <cf_status_firefox110>---</cf_status_firefox110>
          <cf_tracking_firefox111>---</cf_tracking_firefox111>
          <cf_status_firefox111>---</cf_status_firefox111>
          <cf_tracking_firefox112>---</cf_tracking_firefox112>
          <cf_status_firefox112>---</cf_status_firefox112>
          <cf_tracking_firefox113>---</cf_tracking_firefox113>
          <cf_status_firefox113>---</cf_status_firefox113>
          <cf_tracking_firefox114>---</cf_tracking_firefox114>
          <cf_status_firefox114>---</cf_status_firefox114>
          <cf_tracking_firefox115>---</cf_tracking_firefox115>
          <cf_status_firefox115>---</cf_status_firefox115>
          <cf_tracking_firefox116>---</cf_tracking_firefox116>
          <cf_status_firefox116>---</cf_status_firefox116>
          <cf_tracking_firefox117>---</cf_tracking_firefox117>
          <cf_status_firefox117>---</cf_status_firefox117>
          <cf_tracking_firefox118>---</cf_tracking_firefox118>
          <cf_status_firefox118>---</cf_status_firefox118>
          <cf_tracking_firefox119>---</cf_tracking_firefox119>
          <cf_status_firefox119>---</cf_status_firefox119>
          <cf_tracking_firefox120>---</cf_tracking_firefox120>
          <cf_status_firefox120>---</cf_status_firefox120>
          <cf_tracking_firefox121>---</cf_tracking_firefox121>
          <cf_status_firefox121>---</cf_status_firefox121>
          <cf_tracking_firefox122>---</cf_tracking_firefox122>
          <cf_status_firefox122>---</cf_status_firefox122>
          <cf_tracking_firefox123>---</cf_tracking_firefox123>
          <cf_status_firefox123>---</cf_status_firefox123>
          <cf_tracking_firefox124>---</cf_tracking_firefox124>
          <cf_status_firefox124>---</cf_status_firefox124>
          <cf_tracking_firefox125>---</cf_tracking_firefox125>
          <cf_status_firefox125>---</cf_status_firefox125>
          <cf_tracking_firefox126>---</cf_tracking_firefox126>
          <cf_status_firefox126>---</cf_status_firefox126>
          <cf_tracking_firefox127>---</cf_tracking_firefox127>
          <cf_status_firefox127>---</cf_status_firefox127>
          <cf_tracking_firefox128>---</cf_tracking_firefox128>
          <cf_status_firefox128>---</cf_status_firefox128>
          <cf_tracking_firefox129>---</cf_tracking_firefox129>
          <cf_status_firefox129>---</cf_status_firefox129>
          <cf_tracking_firefox130>---</cf_tracking_firefox130>
          <cf_status_firefox130>---</cf_status_firefox130>
          <cf_tracking_firefox131>---</cf_tracking_firefox131>
          <cf_status_firefox131>---</cf_status_firefox131>
          <cf_tracking_firefox132>---</cf_tracking_firefox132>
          <cf_status_firefox132>---</cf_status_firefox132>
          <cf_tracking_firefox133>---</cf_tracking_firefox133>
          <cf_status_firefox133>---</cf_status_firefox133>
          <cf_tracking_firefox134>---</cf_tracking_firefox134>
          <cf_status_firefox134>---</cf_status_firefox134>
          <cf_tracking_firefox135>---</cf_tracking_firefox135>
          <cf_status_firefox135>---</cf_status_firefox135>
          <cf_tracking_firefox136>---</cf_tracking_firefox136>
          <cf_status_firefox136>---</cf_status_firefox136>
          <cf_tracking_firefox137>---</cf_tracking_firefox137>
          <cf_status_firefox137>---</cf_status_firefox137>
          <cf_tracking_firefox138>---</cf_tracking_firefox138>
          <cf_status_firefox138>---</cf_status_firefox138>
          <cf_tracking_firefox139>---</cf_tracking_firefox139>
          <cf_status_firefox139>---</cf_status_firefox139>
          <cf_tracking_firefox140>---</cf_tracking_firefox140>
          <cf_status_firefox140>---</cf_status_firefox140>
          <cf_tracking_firefox141>---</cf_tracking_firefox141>
          <cf_status_firefox141>---</cf_status_firefox141>
          <cf_tracking_firefox142>---</cf_tracking_firefox142>
          <cf_status_firefox142>---</cf_status_firefox142>
          <cf_tracking_firefox143>---</cf_tracking_firefox143>
          <cf_status_firefox143>---</cf_status_firefox143>
          <cf_tracking_firefox144>---</cf_tracking_firefox144>
          <cf_status_firefox144>---</cf_status_firefox144>
          <cf_tracking_firefox145>---</cf_tracking_firefox145>
          <cf_status_firefox145>---</cf_status_firefox145>
          <cf_tracking_firefox146>---</cf_tracking_firefox146>
          <cf_status_firefox146>---</cf_status_firefox146>
          <cf_tracking_firefox147>---</cf_tracking_firefox147>
          <cf_status_firefox147>---</cf_status_firefox147>
          <cf_tracking_firefox148>---</cf_tracking_firefox148>
          <cf_status_firefox148>---</cf_status_firefox148>
          <cf_tracking_firefox149>---</cf_tracking_firefox149>
          <cf_status_firefox149>---</cf_status_firefox149>
          <cf_tracking_firefox150>---</cf_tracking_firefox150>
          <cf_status_firefox150>---</cf_status_firefox150>
          <cf_tracking_firefox151>---</cf_tracking_firefox151>
          <cf_status_firefox151>---</cf_status_firefox151>
          <cf_tracking_firefox152>---</cf_tracking_firefox152>
          <cf_status_firefox152>---</cf_status_firefox152>
          <cf_tracking_firefox153>---</cf_tracking_firefox153>
          <cf_status_firefox153>---</cf_status_firefox153>
          <cf_tracking_firefox154>---</cf_tracking_firefox154>
          <cf_status_firefox154>---</cf_status_firefox154>
          <cf_tracking_firefox155>---</cf_tracking_firefox155>
          <cf_status_firefox155>---</cf_status_firefox155>
          <cf_tracking_firefox156>---</cf_tracking_firefox156>
          <cf_status_firefox156>---</cf_status_firefox156>
          <cf_tracking_firefox157>---</cf_tracking_firefox157>
          <cf_status_firefox157>---</cf_status_firefox157>
          <cf_tracking_flowstate01>---</cf_tracking_flowstate01>
          <cf_status_flowstate01>---</cf_status_flowstate01>
          <cf_tracking_flowstate02>---</cf_tracking_flowstate02>
          <cf_status_flowstate02>---</cf_status_flowstate02>
          <cf_tracking_flowstate03>---</cf_tracking_flowstate03>
          <cf_status_flowstate03>---</cf_status_flowstate03>
          <cf_data_science_status>---</cf_data_science_status>
          <cf_fission_milestone>---</cf_fission_milestone>
          <cf_last_resolved>2011-03-23 22:42:50</cf_last_resolved>
          
          <votes>2</votes>

      

      

      

          <long_desc isprivate="0">
            <commentid>4807741</commentid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-07-20 23:14:04 -0700</bug_when>
            <thetext>It would be nice for JavaScript to be able to query a video element to see what framerate it is getting. This can be used for development, to see if improvements to video code improves the frame rate for example. 

It could be useful for general playback javascript to determine if a machine can playback a particular video size in a reasonable manner and switch to another size if it cannot.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4807781</commentid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-07-20 23:33:56 -0700</bug_when>
            <thetext>WHATWG thread about the topic:

http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-May/026523.html

For testing bug 577843 I implemented a mozFrameCount so I could compute framerate of the playing video and compare playback performance with and without the scaling patch. I&apos;ll add the patch for that to this bug.

Another approach is mentioned in the above thread, instead of a frame count use dropped frames as the measure:

http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-May/026528.html</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4807793</commentid>
              <attachid>458935</attachid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-07-20 23:42:55 -0700</bug_when>
            <thetext>Created attachment 458935
HTML file using mozFrameCount to display framerate

Example HTML that uses mozFrameCount to display a framerate.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4807796</commentid>
              <attachid>458937</attachid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-07-20 23:44:36 -0700</bug_when>
            <thetext>Created attachment 458937
Implement mozFrameCount on video elements</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4859616</commentid>
              <attachid>465555</attachid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-08-12 22:28:50 -0700</bug_when>
            <thetext>Created attachment 465555
Implements playback statistics on video and media elements

This updates the existing patch to trunk and adds:

- mozDroppedFrames to video element
- mozDownloadRate and mozPlaybackRate to media elements

The first gives us the same stat as Flash supplies. The second provides an alternative to the data that was removed from the progress event in bug 584615. These are also stats that have been asked for by people implementing live streaming bitrate fallback.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4859618</commentid>
              <attachid>465556</attachid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-08-12 22:29:44 -0700</bug_when>
            <thetext>Created attachment 465556
HTML file example to display dropped frames, download rate and other stats</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4862456</commentid>
            <who name="Silvia Pfeiffer">silviapfeiffer1</who>
            <bug_when>2010-08-13 19:23:27 -0700</bug_when>
            <thetext>This is awesome! Can we have this in trunk, please? It would allow implementation of adaptive HTTP streaming in JavaScript!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4866750</commentid>
            <who name="Kevin Carle">kcarle</who>
            <bug_when>2010-08-16 15:09:09 -0700</bug_when>
            <thetext>This is indeed awesome. Adaptive streaming stuff aside, this will be useful for us (YouTube) in just monitoring streaming performance / issues, especially as compared to Flash playback.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4885079</commentid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-08-23 20:23:06 -0700</bug_when>
            <thetext>Based on feedback I&apos;m changing the names slightly:

HTMLMediaElement:
// The approximate rate at which the media resource is being downloaded in
// kilobytes per second. If the rate is not available (possibly due
// to not having downloaded enough data to compute a consistent value)
// this will be NaN.
readonly attribute float mozDownloadRate;

// The approximate rate at which the media resource is being decoded in
// kilobytes per second. If the rate is not available this will be
// NaN.
readonly attribute float mozDecodeRate;

HTMLVideoElement:
// A count of the number of frames that have been decoded and ready
// to be displayed. This can be used for computing the decoding framerate
readonly attribute unsigned long mozDecodedFrames;

// A count of the number of frames that have been dropped for performance
// reasons during playback.
readonly attribute unsigned long mozDroppedFrames;

So mozFrameCount becomes mozDecodedFrames and mozPlaybackRate becomes mozDecodeRate.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4885220</commentid>
              <attachid>468611</attachid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-08-23 22:05:03 -0700</bug_when>
            <thetext>Created attachment 468611
HTML file example to display dropped frames, download rate and other stats

Updated to use changed names.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4885227</commentid>
              <attachid>468612</attachid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-08-23 22:05:47 -0700</bug_when>
            <thetext>Created attachment 468612
Implements playback statistics on video and media elements

Implements playback statistics.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4885259</commentid>
              <attachid>468617</attachid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-08-23 22:13:58 -0700</bug_when>
            <thetext>Created attachment 468617
Implements playback statistics on video and media elements

Fixes small error in IDL comment. Rates are bytes per second, not kilobytes per second.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4885317</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2010-08-23 22:51:57 -0700</bug_when>
            <thetext>Access to mDecodeDecodedFrames needs to be protected by a lock or something. Right now it&apos;s written on a decoder thread and read on the main thread.

I&apos;m a bit concerned about the definitions of mozDecodedFrames and mozDroppedFrames. Currently mozDecodedFrames measures the number of frames presented by the decoder for display (not the same as the number of frames actually painted). mozDroppedFrames measures the number of frames dropped by the decoder, but doesn&apos;t count frames dropped while we sync up to the audio in AdvanceFrames, nor the frames that the decoder thread did SetCurrentImage on but which weren&apos;t actually painted.

I think maybe the way to go would be
* mozDecodedFrames: total number of frames seen by the decoder, including frames it skipped
* mozDisplayedFrames: total number of unique frames that we actually drew to the screen (as best we can tell)

The difference would be the number of frames we skipped for any reason.

But at this stage I think we should focus on FF4 blockers and get this in when we can fix it properly.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4888053</commentid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-08-24 20:09:41 -0700</bug_when>
            <thetext>(In reply to comment #12)
&gt; Access to mDecodeDecodedFrames needs to be protected by a lock or something.
&gt; Right now it&apos;s written on a decoder thread and read on the main thread.

It&apos;s protected by the mVideoUpdateLock lock when written but is missing it on the read. I&apos;ll fix that. Is that the right lock to use or do you want one specific for this purpose?

&gt; mozDroppedFrames measures the number of frames dropped by
&gt; the decoder, but doesn&apos;t count frames dropped while we sync up to the audio in
&gt; AdvanceFrames, 

Yes, this is a bug. It should be adding to the dropped frames here.

&gt; nor the frames that the decoder thread did SetCurrentImage on
&gt; but which weren&apos;t actually painted.

This is because it is intended to measure whether the hardware can keep up with the decoding of the resource rather than the painting of it. This is useful for example when decoding the video and processing the video data via a canvas. I don&apos;t think this would be included in a count that only counted frames when painted.


&gt; * mozDisplayedFrames: total number of unique frames that we actually drew to
&gt; the screen (as best we can tell)

Possibly displayed frames is useful too but it doesn&apos;t address the canvas usecase I mention above i think.

I was considering just the decoding case as if painting can&apos;t keep up we&apos;ll no doubt see this reflected in the decoder skipping frames as well. Maybe both stats are needed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4888077</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2010-08-24 20:27:20 -0700</bug_when>
            <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Access to mDecodeDecodedFrames needs to be protected by a lock or something.
&gt; &gt; Right now it&apos;s written on a decoder thread and read on the main thread.
&gt; 
&gt; It&apos;s protected by the mVideoUpdateLock lock when written but is missing it on
&gt; the read. I&apos;ll fix that. Is that the right lock to use or do you want one
&gt; specific for this purpose?

That&apos;s fine.

(In reply to comment #13)
&gt; This is because it is intended to measure whether the hardware can keep up
&gt; with the decoding of the resource rather than the painting of it. This is
&gt; useful for example when decoding the video and processing the video data via
&gt; a canvas. I don&apos;t think this would be included in a count that only counted
&gt; frames when painted.

I think it would make sense to count canvas paints as &quot;a paint&quot; for the purpose of computing mozDisplayedFrames.

If we did that, are there any usecases for counting the number of frames that were presented as the ImageContainer&apos;s &quot;current frame&quot;?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4957215</commentid>
            <who name="cajbir (:cajbir)">cajbir.bugzilla</who>
            <bug_when>2010-09-21 15:43:10 -0700</bug_when>
            <thetext>Robert, I need this  bug landed to meet our quarterly goals. Thanks.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5009538</commentid>
              <attachid>468617</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2010-10-14 02:24:00 -0700</bug_when>
            <thetext>Comment on attachment 468617
Implements playback statistics on video and media elements

We need to more precisely nail down what we measure here.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5091568</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2010-11-18 13:02:24 -0800</bug_when>
            <thetext>I&apos;ll take this on. I&apos;ll need perf stats working before I start the refactorings in bug 592833 and friends.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5097171</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2010-11-21 19:33:00 -0800</bug_when>
            <thetext>We discussed today what statistics we should report for our own internal perf testing. Here&apos;s what we came up with:

mozParsedFrames - number of frames that have been demuxed and extracted out of the media.
mozDecodedFrames - number of frames that have been decoded - converted into YCbCr.
mozPresentedFrames - number of frames that have been presented to the rendering pipeline for rendering - were &quot;set as the current image&quot;.
mozPaintedFrames - number of frames which were presented to the rendering pipeline and ended up being painted on the screen. Note that if the video is not on screen (e.g. in another tab or scrolled off screen), this counter will not increase.
mozPaintDelay - the time delay between presenting the last frame and it being painted on screen (approximately).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5128258</commentid>
              <attachid>495942</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2010-12-07 13:23:52 -0800</bug_when>
            <thetext>Created attachment 495942
Patch: playback statistics v2

* Add the statistics I outlined in comment #18.
* Change the state machine thread&apos;s sleep time after presenting a frame, so that we sleep until it&apos;s time to display the next frame, rather than sleeping for the duration of the frame. Without this change, our presentation time gets later and later, as because of timer latency we gradually wake up later and later in the frame &quot;period&quot;, and the &quot;lateness&quot; compounds over time.
* Minor change to nsWebMReader::DecodeVideoFrame()&apos;s keyframe skipping logic to reflect that you can have multiple [key]frames per chunk per packet in a WebM file.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5128557</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2010-12-07 14:51:27 -0800</bug_when>
            <thetext>(In reply to comment #19)
&gt; Created attachment 495942 [details]
&gt; Patch: playback statistics v2
&gt; 
&gt; * Add the statistics I outlined in comment #18.
&gt; * Change the state machine thread&apos;s sleep time after presenting a frame, so
&gt; that we sleep until it&apos;s time to display the next frame, rather than sleeping
&gt; for the duration of the frame. Without this change, our presentation time gets
&gt; later and later, as because of timer latency we gradually wake up later and
&gt; later in the frame &quot;period&quot;, and the &quot;lateness&quot; compounds over time.
&gt; * Minor change to nsWebMReader::DecodeVideoFrame()&apos;s keyframe skipping logic to
&gt; reflect that you can have multiple [key]frames per chunk per packet in a WebM
&gt; file.

Can you split these into separate patches? The latter two patches might be regressy so we should make sure we can land them (or back them out) separately.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5130856</commentid>
              <attachid>496253</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2010-12-08 13:24:49 -0800</bug_when>
            <thetext>Created attachment 496253
Patch v2 1/3: base stats

Adds playback statistics.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5130859</commentid>
              <attachid>496254</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2010-12-08 13:25:49 -0800</bug_when>
            <thetext>Created attachment 496254
Patch v2 2/3: Reduce paint delay in video playback</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5130871</commentid>
              <attachid>496258</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2010-12-08 13:29:34 -0800</bug_when>
            <thetext>Created attachment 496258
Patch v2 3/3: Handle multiple frames per chunk per packet in WebM playback statistics.

The nsWebMReader::DecodeVideoFrame() function assumes that there&apos;s always exactly 1 frame per chunk per packet. This may not necessarily be the case, though usually it is, and it would be silly to mux a WebM file in any other way. This patch ensures that we can report the playback statistics correctly and keyframe skip correctly on such files.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5131684</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2010-12-08 17:29:35 -0800</bug_when>
            <thetext>You should probably split out the playback statistics patch into a gfx-only patch that provides the latest-time-stamp functionality and the rest.

+  // Number of presented frames which were drawn on screen.
+  readonly attribute unsigned long mozPaintedFrames;

You probably want to explain that presented frames may not be painted if the browser doesn&apos;t repaint the window frequently enough.

+   * Sets the time at which we&apos;d like the contained to be image painted.

?

Why do we need to track anything in ImageContainer other than a single TimeStamp containing the last paint time for the current image (or null if it hasn&apos;t been painted yet)?

Why do an extra layer tree traversal in NotifyPainted? We can update the timestamp when we paint in each ImageLayer implementation.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5131693</commentid>
              <attachid>496254</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2010-12-08 17:32:38 -0800</bug_when>
            <thetext>Comment on attachment 496254
Patch v2 2/3: Reduce paint delay in video playback

Wouldn&apos;t it be slightly simpler to have a local variable waitTime which is AUDIO_DURATION_MS by default and mPlayStartTime - mPlayDuration + TimeDuration::FromMilliseconds(videoData-&gt;mEndTime - mStartTime) - TimeStamp::Now() in the video case?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5131696</commentid>
              <attachid>496258</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2010-12-08 17:33:17 -0800</bug_when>
            <thetext>Comment on attachment 496258
Patch v2 3/3: Handle multiple frames per chunk per packet in WebM playback statistics.

Seems like more of a Matthew patch to me!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5278955</commentid>
            <who name="Matthew Gregan [:kinetik]">kinetik</who>
            <bug_when>2011-02-14 19:37:01 -0800</bug_when>
            <thetext>(In reply to comment #22)
&gt; Created attachment 496254 [details]
&gt; Patch v2 2/3: Reduce paint delay in video playback

It&apos;d be good to land this in FF4, it&apos;s a general bug fix.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5279011</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-14 20:14:25 -0800</bug_when>
            <thetext>OK, someone needs to address comment #25 then</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5282010</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-02-15 18:38:31 -0800</bug_when>
            <thetext>(In reply to comment #27)
&gt; (In reply to comment #22)
&gt; &gt; Created attachment 496254 [details]
&gt; &gt; Patch v2 2/3: Reduce paint delay in video playback
&gt; 
&gt; It&apos;d be good to land this in FF4, it&apos;s a general bug fix.

I&apos;ll spin this off into its own bug, and we can land it by itself.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5285169</commentid>
            <who name="Matthew Gregan [:kinetik]">kinetik</who>
            <bug_when>2011-02-16 17:31:53 -0800</bug_when>
            <thetext>(In reply to comment #29)
&gt; I&apos;ll spin this off into its own bug, and we can land it by itself.

Bug 634787.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5293388</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-02-20 15:56:36 -0800</bug_when>
            <thetext>So bug 633164 changed nsMediaDecoder::Invalidate() so that we only Invalidate() a video&apos;s frame if the image container size has changed. This causes us to call nsVideoFrame::BuildLayer() a lot less than once per painted frame (usually about 5 times per second for a 30fps video I&apos;m testing on, though it varies). So I can&apos;t count the number of painted frames by counting the number of times that nsVideoFrame::BuildLayer() is called. How else can I count the number of video frames which get painted on screen?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300016</commentid>
              <attachid>496254</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-02-23 14:35:11 -0800</bug_when>
            <thetext>Comment on attachment 496254
Patch v2 2/3: Reduce paint delay in video playback

The changes made in patch 2 were landed in bug 634787.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300458</commentid>
              <attachid>514667</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-02-23 16:53:26 -0800</bug_when>
            <thetext>Created attachment 514667
Patch 1: Demuxing/decoding stats

I&apos;ve split of the mozParsedFrames, mozDecodedFrames and mozPresentedFrames into this patch, since they&apos;re so much simpler to implement than mozPaintedFrames and mozFrameDelay. I&apos;ll implement those in subsequent patches.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300593</commentid>
              <attachid>514667</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-23 17:53:46 -0800</bug_when>
            <thetext>Comment on attachment 514667
Patch 1: Demuxing/decoding stats

Looks good to me but I want Matthew to check too.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300596</commentid>
              <attachid>514667</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-23 17:54:13 -0800</bug_when>
            <thetext>Comment on attachment 514667
Patch 1: Demuxing/decoding stats

Yes, I know Matthew technically isn&apos;t a super-reviewer :-)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300648</commentid>
            <who name="Matthew Gregan [:kinetik]">kinetik</who>
            <bug_when>2011-02-23 18:13:01 -0800</bug_when>
            <thetext>+/* readonly attribute unsigned long mozDecodedFrames; */
+NS_IMETHODIMP nsHTMLVideoElement::GetMozParsedFrames(PRUint32 *aMozDecodedFrames)

Comment and parameter name don&apos;t match member function name.  Same for the dropped/decoded.  And presented is missing a similar comment.

Also, if mDecoder is null, doesn&apos;t it make more sense to return an error from these getters?

+        PRUint32 parsed=0, decoded=0;

Pleaseusespaces.  (Same issue in a second place, too.)

+  virtual PRBool DecodeVideoFrame(PRBool&amp; aKeyframeSkip,
+                                  PRInt64 aTimeThreshold,
+                                  PRUint32&amp; aParsed,
+                                  PRUint32&amp; aDecoded) = 0;

I think I&apos;d prefer aParsed/aDecoded to be wrapped in a new stats struct and passed in as a single item, especially if we&apos;re going to add more in the future.

As I read further, I see the stats have their own monitor, so this should definitely all be in a new struct with its own monitor, and passed around/fetched similar to the existing network/playback statistics.

+#define IMPL_GET_STAT_METHOD(X) \
+PRUint32 nsMediaDecoder::Get##X##Frames() { \
+  mozilla::MonitorAutoEnter mon(mStatsMonitor); \
+  return m##X##Frames; \
+}
+
+IMPL_GET_STAT_METHOD(Parsed);
+IMPL_GET_STAT_METHOD(Decoded);
+IMPL_GET_STAT_METHOD(Presented);

This seems unnecessary for three tiny methods, and it makes grepping for stuff a lot harder.  Moving to a GetPlaybackStatistics() method like I suggested above would remove the need for separate getters, anyway.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300660</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-23 18:20:49 -0800</bug_when>
            <thetext>(In reply to comment #36)
&gt; Also, if mDecoder is null, doesn&apos;t it make more sense to return an error from
&gt; these getters?

I think probably not. If there is no decoder, then 0 is the correct answer.

&gt; As I read further, I see the stats have their own monitor, so this should
&gt; definitely all be in a new struct with its own monitor, and passed
&gt; around/fetched similar to the existing network/playback statistics.

Actually, do we need the stats to have their own monitor? Why can&apos;t they use the decoder monitor?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300679</commentid>
            <who name="Matthew Gregan [:kinetik]">kinetik</who>
            <bug_when>2011-02-23 18:28:53 -0800</bug_when>
            <thetext>(In reply to comment #37)
&gt; I think probably not. If there is no decoder, then 0 is the correct answer.

Is that true if we&apos;ve been playing and then DecodeError fires?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300710</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-23 18:43:48 -0800</bug_when>
            <thetext>We can say that the counters are reset if a DecodeError fires.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300745</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-02-23 19:06:44 -0800</bug_when>
            <thetext>Thanks for your comments Matthew and Roc.

(In reply to comment #37)
&gt; (In reply to comment #36)
&gt; &gt; Also, if mDecoder is null, doesn&apos;t it make more sense to return an error from
&gt; &gt; these getters?
&gt; 
&gt; I think probably not. If there is no decoder, then 0 is the correct answer.

Yeah, if we don&apos;t have a decoder, we&apos;ll have decoded 0 frames.

&gt; Actually, do we need the stats to have their own monitor? Why can&apos;t they use
&gt; the decoder monitor?

IIRC (and it was at least month since I tested this) when mozPaintedFrames and mozFrameDelay was implemented as per my original patch, using the decoder monitor caused a slight frame rate drop.

(In reply to comment #39)
&gt; We can say that the counters are reset if a DecodeError fires.

We only fire DecodeError (in the nsBuiltinDecoder architecture) upon failure in LoadMetadata(), so it&apos;s unlikely the counters will be very useful in this situation anyway.

In the case where we&apos;ve been playing and a DecodeError fires, it would make sense to keep the stats around, since we will have decoded and presented frames, but that can&apos;t happen currently.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5300793</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-02-23 19:32:33 -0800</bug_when>
            <thetext>(In reply to comment #40)
&gt; &gt; Actually, do we need the stats to have their own monitor? Why can&apos;t they use
&gt; &gt; the decoder monitor?
&gt; 
&gt; IIRC (and it was at least month since I tested this) when mozPaintedFrames and
&gt; mozFrameDelay was implemented as per my original patch, using the decoder
&gt; monitor caused a slight frame rate drop.

OK. Then I agree with Matthew, we should have a struct with a monitor containing the values it protects.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5307538</commentid>
              <attachid>515506</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-02-27 13:13:23 -0800</bug_when>
            <thetext>Created attachment 515506
Patch 1 v2: Demuxing/decoding stats

Adjusted with Matthews comments. Re-requesting review, since it&apos;s changed significantly.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5310473</commentid>
              <attachid>515799</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-02-28 17:47:51 -0800</bug_when>
            <thetext>Created attachment 515799
Patch: Handle multiple frames per chunk per packet in WebM playback statistics.

Unbitrotten, based upon latest trunk and new Patch 1. Carrying forward r=kinetik.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5312803</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-01 13:15:37 -0800</bug_when>
            <thetext>(In reply to comment #24)
&gt; Why do we need to track anything in ImageContainer other than a single
&gt; TimeStamp containing the last paint time for the current image (or null if it
&gt; hasn&apos;t been painted yet)?

If we only track the paint time of the current image (or null if it&apos;s not been painted yet) on the ImageContainer, what do we return in HTMLMediaElement.mozFrameDelay when the current image has not been painted yet? 0? But then we couldn&apos;t distinguish between no delay (e.g. perfect perf) and when we&apos;d sampled before the frame had been painted. Alternatively if we returned the last returned value in this case, we may never get a non-zero value if we always poll before the current frame has been painted.

If we store the paint target time on the ImageContainer, then we know what the delay is, and we can retain the delay of the previous image, and return that when the current image has not been painted yet.

Alternatively we could have some kind of notification on the nsMediaDecoder when an Image is painted, and maintain the delay of the last painted frame there?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5312930</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-01 13:47:26 -0800</bug_when>
            <thetext>(In reply to comment #44)
&gt; If we only track the paint time of the current image (or null if it&apos;s not been
&gt; painted yet) on the ImageContainer, what do we return in
&gt; HTMLMediaElement.mozFrameDelay when the current image has not been painted yet?
&gt; 0?

It should return the most recent delay. However, we can achieve this by having the video decoder store the last frame&apos;s delay internally just before it does SetCurrentImage on the next frame. Then mozFrameDelay can call into the decoder to get the delay, and that will return the current frame&apos;s delay if that&apos;s non-null, otherwise the last frame&apos;s delay.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5313598</commentid>
              <attachid>516082</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-01 16:47:38 -0800</bug_when>
            <thetext>Created attachment 516082
Patch: add paint time to Images

* Adds paint time attribute to Image.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5313604</commentid>
              <attachid>516083</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-01 16:49:22 -0800</bug_when>
            <thetext>Created attachment 516083
Patch: Implement mozFrameDelay and mozPaintCount

Implement mozFrameDelay and mozPaintCount. Not quite sure it&apos;s ready for review, posting so cjones can see what I&apos;m doing to give me feedback on how to do this for shadow layers.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5313713</commentid>
            <who name="Chris Jones [:cjones] inactive; ni?/f?/r? if you need me">cjones.bugs</who>
            <bug_when>2011-03-01 17:19:43 -0800</bug_when>
            <thetext>Currently the PLayers protocol is all one-way, child-&gt;parent (content-&gt;compositor).  I think the cleanest way to implement statistics like this would be adding feedback parent-&gt;child on painting.  This is potentially useful for other stuff too.

So to http://mxr.mozilla.org/mozilla-central/source/gfx/layers/ipc/PLayers.ipdl#239, I&apos;d suggest adding a

child:
  Painted(PaintStats[] stats);

message.  PaintStats could be defined as a union of more specific stats, like http://mxr.mozilla.org/mozilla-central/source/gfx/layers/ipc/PLayers.ipdl#139.  You would want to attach a PLayer to the specific stats, to know which Layer to notify in the child.

To collect the stats, you would probably want to create a compositor-side interface in http://mxr.mozilla.org/mozilla-central/source/gfx/layers/ipc/ShadowLayers.cpp for ShadowLayerManager, modeled after the Transaction stuff for ShadowLayerForwarder.  The compositor-side layer managers would &quot;open&quot; stats gathering at the beginning of a transaction, then &quot;close&quot; it at the end.  (You would still want to close them for empty layers transactions, unlike the ShadowLayerForwarder Transactions which remain open.)  Closing stats gathering would cause an IPC message to be sent to the child.  If no stats were collected, no message would need to be sent.

On the child side, you&apos;d want to iterate though the stats and update individual layers.  If all these stats are layer-backend agnostic, you could add generic processing like in http://mxr.mozilla.org/mozilla-central/source/gfx/layers/ipc/ShadowLayersParent.cpp#161.  If they might be backend-specific, we&apos;d need something like http://mxr.mozilla.org/mozilla-central/source/gfx/layers/basic/BasicLayers.cpp#2793.

Some asides
 - It will be possible for PLayer:__delete__ to race with these Painted() messages, which will make crashy.  We&apos;ll need to fix this by adding another step to the PLayer deletion protocol: add a PLayer:Destroy child-&gt;parent message that ends up triggering PLayer:__delete__ parent-&gt;child.
 - I think we&apos;ll need that for PLayers too.

I&apos;m not sure how coherent all that is.  Let me know if I can help more.  Also, IMHO landing same-process stats shouldn&apos;t block on cross-process stats.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5313830</commentid>
              <attachid>516105</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-01 17:56:44 -0800</bug_when>
            <thetext>Created attachment 516105
Patch: add paint time to Images

Fixed two typo in comments, ready for review.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5313833</commentid>
              <attachid>516083</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-01 17:57:52 -0800</bug_when>
            <thetext>Comment on attachment 516083
Patch: Implement mozFrameDelay and mozPaintCount

Note this patch is based on top of the patch &quot;add paint time to Images&quot;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5313873</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-01 18:14:31 -0800</bug_when>
            <thetext>I don&apos;t think we need the mPainted flag on the Image. We only need a flag on the ImageContainer to say whether the current image has been painted yet. In fact we don&apos;t even need a separate flag, since mPaintTime is null if and only if the current image hasn&apos;t been painted yet.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5313975</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-01 18:54:22 -0800</bug_when>
            <thetext>Note mPaintCount counts the number of Images which have been painted at least once, and video frames often end up being painted several times.

We need the mPainted flag on the Image because it may lose it&apos;s &quot;current image&quot; status while painting, and in that case we still need to increment mPaintCount, but not set mPaintTime if this was the first time that Image was painted. But we can&apos;t tell if this is the first time we&apos;ve painted the (now non-current) Image if we reset mPaintTime when the current image changed.

If an Image has been painted, and the current image changes while we were painting the Image for a second time, mPaintTime will be reset. If we assume we should increment mPaintCount because mPaintTime is null, we&apos;ll end up incrementing mPaintCount twice for that frame.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5314003</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-01 19:06:39 -0800</bug_when>
            <thetext>We could instead have a flag on the ImageContainer to store whether its previous image was painted. That basically would need to be set to !mPaintTime.IsNull() when the current image changes, that would handle the problematic case.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5314095</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-01 19:48:41 -0800</bug_when>
            <thetext>Let&apos;s do that then.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5314135</commentid>
              <attachid>516139</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-01 20:02:55 -0800</bug_when>
            <thetext>Created attachment 516139
Patch: add paint stats to ImagesContainer</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5314257</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-01 21:14:54 -0800</bug_when>
            <thetext>+   * Implementations must call CurrentImageChanged() in a threadsafe manner.

What does &quot;in a threadsafe manner&quot; mean?

+   * has not yet been painted.  Threadsafe.

I think it&apos;s clearer to say &quot;can be called on any thread&quot;.

+  PRBool mPreviousImagePainted;

PRPackedBool

Maybe we should just bite the bullet and move the monitor in each implementation up to the superclass?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5316717</commentid>
              <attachid>516418</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-02 14:48:54 -0800</bug_when>
            <thetext>Created attachment 516418
Patch: Push ImageContainer subclass&apos; locks up into a superclass monitor.

Merging ImageContainers&apos; monitors are suggested.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5316729</commentid>
              <attachid>516419</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-02 14:51:13 -0800</bug_when>
            <thetext>Created attachment 516419
Patch: add paint stats to ImagesContainer

Review comments addressed. Based on top of &quot;Patch: Push ImageContainer subclass&apos; locks up into a superclass monitor.&quot;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5319616</commentid>
              <attachid>516418</attachid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-03-03 12:28:15 -0800</bug_when>
            <thetext>Comment on attachment 516418
Patch: Push ImageContainer subclass&apos; locks up into a superclass monitor.

Looks great, but please change the comments in ImageLayers.h to mention the monitor and say which methods take the monitor.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5364179</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-03-23 15:42:50 -0700</bug_when>
            <thetext>http://hg.mozilla.org/mozilla-central/rev/8c22e163c9f0
http://hg.mozilla.org/mozilla-central/rev/d6f8aff170a0
http://hg.mozilla.org/mozilla-central/rev/3263ffab7ce7
http://hg.mozilla.org/mozilla-central/rev/48a74f63565e
http://hg.mozilla.org/mozilla-central/rev/8b6d6b01cbdf</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5386902</commentid>
            <who name="">u279076</who>
            <bug_when>2011-04-01 11:52:41 -0700</bug_when>
            <thetext>The following is what I see in the latest nightly:
Framerate is: 30.01
Dropped frames: undefined
Download rate: NaN
Playback rate: NaN

Is this expected?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5386934</commentid>
            <who name="David Humphrey (:humph)">david.humphrey</who>
            <bug_when>2011-04-01 11:59:49 -0700</bug_when>
            <thetext>        dropped.innerHTML = v1.mozDroppedFrames;
        playback.innerHTML = Math.round(v1.mozDecodeRate);
        download.innerHTML = Math.round(v1.mozDownloadRate);

Probably just typos, since these properties don&apos;t exist on the video element.  However, I can verify for you that these stats are indeed working on the video element, as I&apos;m working on a visualization that uses them now.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5386940</commentid>
            <who name="">u279076</who>
            <bug_when>2011-04-01 12:01:41 -0700</bug_when>
            <thetext>Thanks, David.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5386983</commentid>
              <attachid>468611</attachid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2011-04-01 12:12:09 -0700</bug_when>
            <thetext>Comment on attachment 468611
HTML file example to display dropped frames, download rate and other stats

That example is for the original stats produced by the original patch. For a demo which uses the current stats, see:
http://people.mozilla.org/~cpearce/paint-stats-demo.html</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5387040</commentid>
            <who name="">u279076</who>
            <bug_when>2011-04-01 12:34:02 -0700</bug_when>
            <thetext>(In reply to comment #64)
&gt; Comment on attachment 468611 [details]
&gt; HTML file example to display dropped frames, download rate and other stats
&gt; 
&gt; That example is for the original stats produced by the original patch. For a
&gt; demo which uses the current stats, see:
&gt; http://people.mozilla.org/~cpearce/paint-stats-demo.html

Looks good to me.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5999004</commentid>
            <who name="Florian Scholz (Open Web Docs)">fs</who>
            <bug_when>2012-01-22 03:48:57 -0800</bug_when>
            <thetext>https://developer.mozilla.org/en/DOM/HTMLVideoElement
https://developer.mozilla.org/en/Firefox_5_for_developers#DOM</thetext>
          </long_desc>

          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>458935</attachid>
            <date>2010-07-20 23:42:55 -0700</date>
            <delta_ts>2010-08-12 22:29:44 -0700</delta_ts>
            <desc>HTML file using mozFrameCount to display framerate</desc>
            <filename>framecount.html</filename>
            <type>text/html</type>
            <size>1359</size>
            <attacher>cajbir.bugzilla</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgPGJvZHk+CiAgICA8cD5GcmFtZXJhdGUgaXM6IDxzcGFuIGlkPSJyYXRlIj4wPC9z
cGFuPi48L3A+CgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiAKICAgICAgdmFy
IHRpbWVzID0gW107CiAgICAgIHZhciByYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jh
dGUnKTsKICAgICAgdmFyIGludGVydmFsID0gMTAwOwogICAgICB2YXIgcGVyaW9kID0gNTsKICAg
ICAgdmFyIGl0ZW1zID0gKDEwMDAgLyBpbnRlcnZhbCkgKiBwZXJpb2Q7CiAgICAgIHZhciBzOwog
ICAgICBmdW5jdGlvbiB1cGRhdGVSYXRlKCkgewogICAgICAgIHZhciB2MSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCd2MScpOwogICAgICAgIHRpbWVzLnB1c2goW25ldyBEYXRlKCksIHYxLm1v
ekZyYW1lQ291bnRdKTsKICAgICAgICBpZiAodGltZXMubGVuZ3RoID09IGl0ZW1zICsgMSkgewog
ICAgICAgICAgdmFyIHN0YXJ0ID0gdGltZXNbMF07CiAgICAgICAgICB2YXIgZW5kID0gdGltZXNb
dGltZXMubGVuZ3RoLTFdOwogICAgICAgICAgdmFyIGZyYW1lQ291bnQgPSBlbmRbMV0gLSBzdGFy
dFsxXTsKICAgICAgICAgIHZhciB0aW1lID0gZW5kWzBdIC0gc3RhcnRbMF07CiAgICAgICAgICB2
YXIgZnJhbWVyYXRlID0gZnJhbWVDb3VudCAvICh0aW1lLzEwMDApOyAKICAgICAgICAgIHJhdGUu
aW5uZXJIVE1MID0gTWF0aC5yb3VuZChmcmFtZXJhdGUqMTAwKS8xMDA7CiAgICAgICAgICB0aW1l
cyA9IHRpbWVzLnNsaWNlKDEpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgdGltZXI7CiAg
ICAgIGZ1bmN0aW9uIHN0YXJ0RnJhbWVyYXRlKCkgewogICAgICAgIHMgPSBuZXcgRGF0ZSgpOwog
ICAgICAgIHRpbWVyID0gc2V0SW50ZXJ2YWwodXBkYXRlUmF0ZSwgaW50ZXJ2YWwpOwogICAgICB9
CiAgCiAgICAgIGZ1bmN0aW9uIHN0b3BGcmFtZXJhdGUoKSB7CiAgICAgICAgY2xlYXJJbnRlcnZh
bCh0aW1lcik7CiAgICAgICAgdmFyIGUgPSBuZXcgRGF0ZSgpOwogICAgICAgIHZhciB2MSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCd2MScpOwogICAgICAgIHJhdGUuaW5uZXJIVE1MID0gdjEu
bW96RnJhbWVDb3VudCAvICgoZS1zKS8xMDAwKTsKICAgICAgfQogICAgPC9zY3JpcHQ+CgogICAg
PHZpZGVvIGlkPSd2MScKICAgICAgICAgICBzcmM9J2h0dHA6Ly90aW55dmlkLnR2L2ZpbGUvMThk
MHQ2bjNrMjh3bC5vZ2cnCiAgICAgICAgICAgYXV0b3BsYXkKICAgICAgICAgICBvbnBsYXk9InN0
YXJ0RnJhbWVyYXRlKCkiCiAgICAgICAgICAgb25lbmRlZD0ic3RvcEZyYW1lcmF0ZSgpIgogICAg
ICAgICAgYXV0b3BsYXk+CiAgICA8L3ZpZGVvPiAKICA8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>458937</attachid>
            <date>2010-07-20 23:44:36 -0700</date>
            <delta_ts>2010-08-12 22:28:50 -0700</delta_ts>
            <desc>Implement mozFrameCount on video elements</desc>
            <filename>mozframecount.patch</filename>
            <type>text/plain</type>
            <size>4560</size>
            <attacher>cajbir.bugzilla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQu
Y3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTFZpZGVvRWxlbWVudC5jcHAKaW5k
ZXggNDc0MTA1OS4uNGMzNDkxZSAxMDA2NDQKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTFZpZGVvRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
SFRNTFZpZGVvRWxlbWVudC5jcHAKQEAgLTk1LDE2ICs5NSwyMyBAQCBOU19JTUVUSE9ESU1QIG5z
SFRNTFZpZGVvRWxlbWVudDo6R2V0VmlkZW9XaWR0aChQUlVpbnQzMiAqYVZpZGVvV2lkdGgpCiAK
IC8qIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHZpZGVvSGVpZ2h0OyAqLwogTlNf
SU1FVEhPRElNUCBuc0hUTUxWaWRlb0VsZW1lbnQ6OkdldFZpZGVvSGVpZ2h0KFBSVWludDMyICph
VmlkZW9IZWlnaHQpCiB7CiAgICphVmlkZW9IZWlnaHQgPSBtTWVkaWFTaXplLmhlaWdodCA9PSAt
MSA/IDAgOiBtTWVkaWFTaXplLmhlaWdodDsKICAgcmV0dXJuIE5TX09LOwogfQogCisvKiByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBtb3pGcmFtZUNvdW50OyAqLworTlNfSU1FVEhP
RElNUCBuc0hUTUxWaWRlb0VsZW1lbnQ6OkdldE1vekZyYW1lQ291bnQoUFJVaW50MzIgKmFNb3pG
cmFtZUNvdW50KQoreworICAqYU1vekZyYW1lQ291bnQgPSBtRGVjb2RlciA/IG1EZWNvZGVyLT5H
ZXRGcmFtZUNvdW50KCkgOiAwOworICByZXR1cm4gTlNfT0s7Cit9CisKIG5zSFRNTFZpZGVvRWxl
bWVudDo6bnNIVE1MVmlkZW9FbGVtZW50KG5zSU5vZGVJbmZvICphTm9kZUluZm8sIFBSVWludDMy
IGFGcm9tUGFyc2VyKQogICA6IG5zSFRNTE1lZGlhRWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFy
c2VyKQogewogfQogCiBuc0hUTUxWaWRlb0VsZW1lbnQ6On5uc0hUTUxWaWRlb0VsZW1lbnQoKQog
ewogfQpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5jcHAgYi9jb250
ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmNwcAppbmRleCBjYWE5YmFkLi45NzgwY2IzIDEwMDY0
NAotLS0gYS9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmNwcAorKysgYi9jb250ZW50L21l
ZGlhL25zTWVkaWFEZWNvZGVyLmNwcApAQCAtNjcsMTYgKzY3LDE3IEBACiBuc01lZGlhRGVjb2Rl
cjo6bnNNZWRpYURlY29kZXIoKSA6CiAgIG1FbGVtZW50KDApLAogICBtUkdCV2lkdGgoLTEpLAog
ICBtUkdCSGVpZ2h0KC0xKSwKICAgbVByb2dyZXNzVGltZSgpLAogICBtRGF0YVRpbWUoKSwKICAg
bVZpZGVvVXBkYXRlTG9jayhuc251bGwpLAogICBtUGl4ZWxBc3BlY3RSYXRpbygxLjApLAorICBt
RnJhbWVDb3VudCgwKSwKICAgbVNpemVDaGFuZ2VkKFBSX0ZBTFNFKSwKICAgbVNodXR0aW5nRG93
bihQUl9GQUxTRSkKIHsKICAgTU9aX0NPVU5UX0NUT1IobnNNZWRpYURlY29kZXIpOwogfQogCiBu
c01lZGlhRGVjb2Rlcjo6fm5zTWVkaWFEZWNvZGVyKCkKIHsKQEAgLTIyNCwxMCArMjI1LDE4IEBA
IHZvaWQgbnNNZWRpYURlY29kZXI6OlNldFZpZGVvRGF0YShjb25zdCBnZnhJbnRTaXplJiBhU2l6
ZSwKICAgICAgIG1QaXhlbEFzcGVjdFJhdGlvICE9IGFQaXhlbEFzcGVjdFJhdGlvKSB7CiAgICAg
bVJHQldpZHRoID0gYVNpemUud2lkdGg7CiAgICAgbVJHQkhlaWdodCA9IGFTaXplLmhlaWdodDsK
ICAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9IGFQaXhlbEFzcGVjdFJhdGlvOwogICAgIG1TaXplQ2hh
bmdlZCA9IFBSX1RSVUU7CiAgIH0KICAgaWYgKG1JbWFnZUNvbnRhaW5lciAmJiBhSW1hZ2UpIHsK
ICAgICBtSW1hZ2VDb250YWluZXItPlNldEN1cnJlbnRJbWFnZShhSW1hZ2UpOworICAgIG1GcmFt
ZUNvdW50Kys7CiAgIH0KIH0KKworUFJVaW50MzIgbnNNZWRpYURlY29kZXI6OkdldEZyYW1lQ291
bnQoKQoreworICByZXR1cm4gbUZyYW1lQ291bnQ7Cit9CisKKwpkaWZmIC0tZ2l0IGEvY29udGVu
dC9tZWRpYS9uc01lZGlhRGVjb2Rlci5oIGIvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5o
CmluZGV4IDJjNWE0ZmMuLjYzMTM5NDUgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvbnNNZWRp
YURlY29kZXIuaAorKysgYi9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmgKQEAgLTIyOSwx
NiArMjI5LDE5IEBAIHB1YmxpYzoKICAgSW1hZ2VDb250YWluZXIqIEdldEltYWdlQ29udGFpbmVy
KCkgeyByZXR1cm4gbUltYWdlQ29udGFpbmVyOyB9CiAKICAgLy8gU2V0IHRoZSB2aWRlbyB3aWR0
aCwgaGVpZ2h0LCBwaXhlbCBhc3BlY3QgcmF0aW8sIGFuZCBjdXJyZW50IGltYWdlLgogICAvLyBP
d25lcnNoaXAgb2YgdGhlIGltYWdlIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBkZWNvZGVyLgogICB2
b2lkIFNldFZpZGVvRGF0YShjb25zdCBnZnhJbnRTaXplJiBhU2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgYVBpeGVsQXNwZWN0UmF0aW8sCiAgICAgICAgICAgICAgICAgICAgIEltYWdl
KiBhSW1hZ2UpOwogCisgIC8vIFJldHVybiB0aGUgY291bnQgb2YgZnJhbWVzIHRoYXQgaGF2ZSBi
ZWVuIGRlY29kZWQKKyAgUFJVaW50MzIgR2V0RnJhbWVDb3VudCgpOworCiBwcm90ZWN0ZWQ6CiAK
ICAgLy8gU3RhcnQgdGltZXIgdG8gdXBkYXRlIGRvd25sb2FkIHByb2dyZXNzIGluZm9ybWF0aW9u
LgogICBuc3Jlc3VsdCBTdGFydFByb2dyZXNzKCk7CiAKICAgLy8gU3RvcCBwcm9ncmVzcyBpbmZv
cm1hdGlvbiB0aW1lci4KICAgbnNyZXN1bHQgU3RvcFByb2dyZXNzKCk7CiAKQEAgLTI3NiwxNiAr
Mjc5LDIwIEBAIHByb3RlY3RlZDoKICAgLy8gdG8gdGhlIFJHQiBidWZmZXIgbXVzdCBvYnRhaW4g
dGhpcyBsb2NrIGZpcnN0IHRvIGVuc3VyZSB0aGF0CiAgIC8vIHRoZSB2aWRlbyBlbGVtZW50IGRv
ZXMgbm90IHVzZSB2aWRlbyBkYXRhIG9yIHNpemVzIHRoYXQgYXJlCiAgIC8vIGluIHRoZSBtaWRz
dCBvZiBiZWluZyBjaGFuZ2VkLgogICBQUkxvY2sqIG1WaWRlb1VwZGF0ZUxvY2s7CiAKICAgLy8g
UGl4ZWwgYXNwZWN0IHJhdGlvIChyYXRpbyBvZiB0aGUgcGl4ZWwgd2lkdGggdG8gcGl4ZWwgaGVp
Z2h0KQogICBmbG9hdCBtUGl4ZWxBc3BlY3RSYXRpbzsKIAorICAvLyBBIGNvdW50IG9mIHRoZSBu
dW1iZXIgb2YgZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIGRlY29kZWQgYW5kIHJlYWR5CisgIC8vIHRv
IGJlIGRpc3BsYXllZC4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgY29tcHV0aW5nIHRoZSBkZWNvZGlu
ZyBmcmFtZXJhdGUKKyAgUFJVaW50MzIgbUZyYW1lQ291bnQ7CisKICAgLy8gSGFzIG91ciBzaXpl
IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgcmVwYWludD8KICAgUFJQYWNrZWRCb29sIG1TaXplQ2hh
bmdlZDsKIAogICAvLyBUcnVlIGlmIHRoZSBkZWNvZGVyIGlzIGJlaW5nIHNodXRkb3duLiBBdCB0
aGlzIHBvaW50IGFsbCBldmVudHMgdGhhdAogICAvLyBhcmUgY3VycmVudGx5IHF1ZXVlZCBuZWVk
IHRvIHJldHVybiBpbW1lZGlhdGVseSB0byBwcmV2ZW50IGphdmFzY3JpcHQKICAgLy8gYmVpbmcg
cnVuIHRoYXQgb3BlcmF0ZXMgb24gdGhlIGVsZW1lbnQgYW5kIGRlY29kZXIgZHVyaW5nIHNodXRk
b3duLgogICAvLyBSZWFkL1dyaXRlIGZyb20gdGhlIG1haW4gdGhyZWFkIG9ubHkuCiAgIFBSUGFj
a2VkQm9vbCBtU2h1dHRpbmdEb3duOwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9u
c0lET01IVE1MVmlkZW9FbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRN
TFZpZGVvRWxlbWVudC5pZGwKaW5kZXggNjc4ZWRjZC4uNWMxZDliMiAxMDA2NDQKLS0tIGEvZG9t
L2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MVmlkZW9FbGVtZW50LmlkbAorKysgYi9kb20vaW50
ZXJmYWNlcy9odG1sL25zSURPTUhUTUxWaWRlb0VsZW1lbnQuaWRsCkBAIC00MywxOCArNDMsMTkg
QEAKICAqIDx2aWRlbz4gZWxlbWVudC4KICAqCiAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0
aGlzIGludGVyZmFjZSwgcGxlYXNlIHNlZQogICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay8jdmlkZW8KICAqCiAgKiBAc3RhdHVzIFVOREVSX0RFVkVM
T1BNRU5UCiAgKi8KIAotW3NjcmlwdGFibGUsIHV1aWQoZWRmNDY4ZGMtNDJlYi00NDk0LTkyMGIt
NTZhMzE1MTcyNjQwKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDA5YjE2Nzg1LThhYTUtNGI1My1hM2Q3
LTQzZTA2MWI3Y2M4NyldCiBpbnRlcmZhY2UgbnNJRE9NSFRNTFZpZGVvRWxlbWVudCA6IG5zSURP
TUhUTUxNZWRpYUVsZW1lbnQKIHsKICAgICAgICAgICAgYXR0cmlidXRlIGxvbmcgd2lkdGg7IAog
ICAgICAgICAgICBhdHRyaWJ1dGUgbG9uZyBoZWlnaHQ7CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIHZpZGVvV2lkdGg7CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIHZpZGVvSGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHBvc3RlcjsK
KyAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbW96RnJhbWVDb3VudDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>465555</attachid>
            <date>2010-08-12 22:28:50 -0700</date>
            <delta_ts>2010-08-23 22:05:47 -0700</delta_ts>
            <desc>Implements playback statistics on video and media elements</desc>
            <filename>stats.patch</filename>
            <type>text/plain</type>
            <size>24326</size>
            <attacher>cajbir.bugzilla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxNZWRpYUVsZW1lbnQu
Y3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5k
ZXggNGE1MTcyMy4uMzk4YjYzYSAxMDA2NDQKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
SFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTM5MSwxNiArMzkxLDM2IEBAIE5TX0lOVEVSRkFDRV9N
QVBfQkVHSU5fQ1lDTEVfQ09MTEVDVElPTl9JTkhFUklURUQobnNIVE1MTWVkaWFFbGVtZW50KQog
TlNfSU5URVJGQUNFX01BUF9FTkRfSU5IRVJJVElORyhuc0dlbmVyaWNIVE1MRWxlbWVudCkKIAog
Ly8gbnNJRE9NSFRNTE1lZGlhRWxlbWVudAogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxNZWRpYUVs
ZW1lbnQsIFNyYywgc3JjKQogTlNfSU1QTF9CT09MX0FUVFIobnNIVE1MTWVkaWFFbGVtZW50LCBD
b250cm9scywgY29udHJvbHMpCiBOU19JTVBMX0JPT0xfQVRUUihuc0hUTUxNZWRpYUVsZW1lbnQs
IEF1dG9wbGF5LCBhdXRvcGxheSkKIE5TX0lNUExfQk9PTF9BVFRSKG5zSFRNTE1lZGlhRWxlbWVu
dCwgQXV0b2J1ZmZlciwgYXV0b2J1ZmZlcikKIAorLyogcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0
IG1vekRvd25sb2FkUmF0ZTsgKi8KK05TX0lNRVRIT0RJTVAgbnNIVE1MTWVkaWFFbGVtZW50OjpH
ZXRNb3pEb3dubG9hZFJhdGUoZmxvYXQgKmFNb3pEb3dubG9hZFJhdGUpCit7CisgIG5zTWVkaWFE
ZWNvZGVyOjpTdGF0aXN0aWNzIHN0YXRzID0gbURlY29kZXItPkdldFN0YXRpc3RpY3MoKTsKKyAg
KmFNb3pEb3dubG9hZFJhdGUgPSBzdGF0cy5tRG93bmxvYWRSYXRlUmVsaWFibGUgPyAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRzLm1Eb3dubG9hZFJhdGUgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICByZXR1
cm4gTlNfT0s7Cit9CisKKy8qIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBtb3pQbGF5YmFja1Jh
dGU7ICovCitOU19JTUVUSE9ESU1QIG5zSFRNTE1lZGlhRWxlbWVudDo6R2V0TW96UGxheWJhY2tS
YXRlKGZsb2F0ICphTW96UGxheWJhY2tSYXRlKQoreworICBuc01lZGlhRGVjb2Rlcjo6U3RhdGlz
dGljcyBzdGF0cyA9IG1EZWNvZGVyLT5HZXRTdGF0aXN0aWNzKCk7CisgICphTW96UGxheWJhY2tS
YXRlID0gc3RhdHMubVBsYXliYWNrUmF0ZVJlbGlhYmxlID8gCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0cy5tUGxheWJhY2tSYXRlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgcmV0dXJuIE5TX09LOworfQor
CiAvKiByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NSFRNTE1lZGlhRWxlbWVudCBtb3pBdXRvcGxh
eUVuYWJsZWQ7ICovCiBOU19JTUVUSE9ESU1QIG5zSFRNTE1lZGlhRWxlbWVudDo6R2V0TW96QXV0
b3BsYXlFbmFibGVkKFBSQm9vbCAqYUF1dG9wbGF5RW5hYmxlZCkKIHsKICAgKmFBdXRvcGxheUVu
YWJsZWQgPSBtQXV0b3BsYXlFbmFibGVkOwogCiAgIHJldHVybiBOU19PSzsKIH0KIApkaWZmIC0t
Z2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MVmlkZW9FbGVtZW50LmNwcAppbmRleCAyMDYx
NWQ5Li5kODNkZmIxIDEwMDY0NAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1M
VmlkZW9FbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MVmlk
ZW9FbGVtZW50LmNwcApAQCAtOTUsMTYgKzk1LDMwIEBAIE5TX0lNRVRIT0RJTVAgbnNIVE1MVmlk
ZW9FbGVtZW50OjpHZXRWaWRlb1dpZHRoKFBSVWludDMyICphVmlkZW9XaWR0aCkKIAogLyogcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgdmlkZW9IZWlnaHQ7ICovCiBOU19JTUVUSE9E
SU1QIG5zSFRNTFZpZGVvRWxlbWVudDo6R2V0VmlkZW9IZWlnaHQoUFJVaW50MzIgKmFWaWRlb0hl
aWdodCkKIHsKICAgKmFWaWRlb0hlaWdodCA9IG1NZWRpYVNpemUuaGVpZ2h0ID09IC0xID8gMCA6
IG1NZWRpYVNpemUuaGVpZ2h0OwogICByZXR1cm4gTlNfT0s7CiB9CiAKKy8qIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG1vekZyYW1lQ291bnQ7ICovCitOU19JTUVUSE9ESU1QIG5z
SFRNTFZpZGVvRWxlbWVudDo6R2V0TW96RnJhbWVDb3VudChQUlVpbnQzMiAqYU1vekZyYW1lQ291
bnQpCit7CisgICphTW96RnJhbWVDb3VudCA9IG1EZWNvZGVyID8gbURlY29kZXItPkdldEZyYW1l
Q291bnQoKSA6IDA7CisgIHJldHVybiBOU19PSzsKK30KKworLyogcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbW96RHJvcHBlZEZyYW1lczsgKi8KK05TX0lNRVRIT0RJTVAgbnNIVE1M
VmlkZW9FbGVtZW50OjpHZXRNb3pEcm9wcGVkRnJhbWVzKFBSVWludDMyICphTW96RHJvcHBlZEZy
YW1lcykKK3sKKyAgKmFNb3pEcm9wcGVkRnJhbWVzID0gbURlY29kZXIgPyBtRGVjb2Rlci0+R2V0
RHJvcHBlZEZyYW1lcygpIDogMDsKKyAgcmV0dXJuIE5TX09LOworfQorCiBuc0hUTUxWaWRlb0Vs
ZW1lbnQ6Om5zSFRNTFZpZGVvRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBh
Tm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQz
MiBhRnJvbVBhcnNlcikKICAgOiBuc0hUTUxNZWRpYUVsZW1lbnQoYU5vZGVJbmZvLCBhRnJvbVBh
cnNlcikKIHsKIH0KIAogbnNIVE1MVmlkZW9FbGVtZW50Ojp+bnNIVE1MVmlkZW9FbGVtZW50KCkK
IHsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5jcHAg
Yi9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuY3BwCmluZGV4IDBiOGM2OGMu
LjU1NmM5NjIgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRl
ci5jcHAKKysrIGIvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmNwcApAQCAt
MzIwLDE3ICszMjAsMTggQEAgbnNyZXN1bHQgbnNCdWlsdGluRGVjb2RlclJlYWRlcjo6RGVjb2Rl
VG9UYXJnZXQoUFJJbnQ2NCBhVGFyZ2V0KQogewogICAvLyBEZWNvZGUgZm9yd2FyZCB0byB0aGUg
dGFyZ2V0IGZyYW1lLiBTdGFydCB3aXRoIHZpZGVvLCBpZiB3ZSBoYXZlIGl0LgogICBpZiAoSGFz
VmlkZW8oKSkgewogICAgIFBSQm9vbCBlb2YgPSBQUl9GQUxTRTsKICAgICBQUkludDY0IHN0YXJ0
VGltZSA9IC0xOwogICAgIHdoaWxlIChIYXNWaWRlbygpICYmICFlb2YpIHsKICAgICAgIHdoaWxl
IChtVmlkZW9RdWV1ZS5HZXRTaXplKCkgPT0gMCAmJiAhZW9mKSB7CiAgICAgICAgIFBSQm9vbCBz
a2lwID0gUFJfRkFMU0U7Ci0gICAgICAgIGVvZiA9ICFEZWNvZGVWaWRlb0ZyYW1lKHNraXAsIDAp
OworICAgICAgICBQUlVpbnQzMiBkcm9wcGVkRnJhbWVzID0gMDsKKyAgICAgICAgZW9mID0gIURl
Y29kZVZpZGVvRnJhbWUoc2tpcCwgMCwgZHJvcHBlZEZyYW1lcyk7CiAgICAgICAgIHsKICAgICAg
ICAgICBNb25pdG9yQXV0b0V4aXQgZXhpdFJlYWRlck1vbihtTW9uaXRvcik7CiAgICAgICAgICAg
TW9uaXRvckF1dG9FbnRlciBkZWNvZGVyTW9uKG1EZWNvZGVyLT5HZXRNb25pdG9yKCkpOwogICAg
ICAgICAgIGlmIChtRGVjb2Rlci0+R2V0RGVjb2RlU3RhdGUoKSA9PSBuc0J1aWx0aW5EZWNvZGVy
U3RhdGVNYWNoaW5lOjpERUNPREVSX1NUQVRFX1NIVVRET1dOKSB7CiAgICAgICAgICAgICByZXR1
cm4gTlNfRVJST1JfRkFJTFVSRTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5oIGIvY29udGVu
dC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmgKaW5kZXggMDNiZWE3OS4uYTkwMDhiOCAx
MDA2NDQKLS0tIGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmgKKysrIGIv
Y29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmgKQEAgLTQxMSwxOCArNDExLDIx
IEBAIHB1YmxpYzoKICAgLy8gaW4gbUF1ZGlvUXVldWUuIFJldHVybnMgUFJfVFJVRSB3aGVuIHRo
ZXJlJ3MgbW9yZSBhdWRpbyB0byBkZWNvZGUsCiAgIC8vIFBSX0ZBTFNFIGlmIHRoZSBhdWRpbyBp
cyBmaW5pc2hlZCwgZW5kIG9mIGZpbGUgaGFzIGJlZW4gcmVhY2hlZCwKICAgLy8gb3IgYW4gdW4t
cmVjb3ZlcmFibGUgcmVhZCBlcnJvciBoYXMgb2NjdXJlZC4KICAgdmlydHVhbCBQUkJvb2wgRGVj
b2RlQXVkaW9EYXRhKCkgPSAwOwogCiAgIC8vIFJlYWRzIGFuZCBkZWNvZGVzIG9uZSB2aWRlbyBm
cmFtZS4gUGFja2V0cyB3aXRoIGEgdGltZXN0YW1wIGxlc3MKICAgLy8gdGhhbiBhVGltZVRocmVz
aG9sZCB3aWxsIGJlIGRlY29kZWQgKHVubGVzcyB0aGV5J3JlIG5vdCBrZXlmcmFtZXMKICAgLy8g
YW5kIGFLZXlmcmFtZVNraXAgaXMgUFJfVFJVRSksIGJ1dCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0
aGUgcXVldWUuCisgIC8vICdhRHJvcHBlZEZyYW1lcycgd2lsbCBiZSBpbmNyZW1lbnRlZCBldmVy
eXRpbWUgYSB2aWRlbyBmcmFtZSBpcworICAvLyBkcm9wcGVkLgogICB2aXJ0dWFsIFBSQm9vbCBE
ZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKSA9IDA7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAmYURyb3BwZWRGcmFtZXMpID0gMDsK
IAogICB2aXJ0dWFsIFBSQm9vbCBIYXNBdWRpbygpID0gMDsKICAgdmlydHVhbCBQUkJvb2wgSGFz
VmlkZW8oKSA9IDA7CiAKICAgLy8gUmVhZCBoZWFkZXIgZGF0YSBmb3IgYWxsIGJpdHN0cmVhbXMg
aW4gdGhlIGZpbGUuIEZpbGxzIG1JbmZvIHdpdGgKICAgLy8gdGhlIGRhdGEgcmVxdWlyZWQgdG8g
cHJlc2VudCB0aGUgbWVkaWEuIFJldHVybnMgTlNfT0sgb24gc3VjY2VzcywKICAgLy8gb3IgTlNf
RVJST1JfRkFJTFVSRSBvbiBmYWlsdXJlLgogICB2aXJ0dWFsIG5zcmVzdWx0IFJlYWRNZXRhZGF0
YSgpID0gMDsKQEAgLTQ3NCwxNyArNDc3LDE4IEBAIHByb3RlY3RlZDoKICAgdGVtcGxhdGU8Y2xh
c3MgRGF0YT4KICAgRGF0YSogRGVjb2RlVG9GaXJzdERhdGEoRGVjb2RlRm4gYURlY29kZUZuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVF1ZXVlPERhdGE+JiBhUXVldWUpOwogCiAg
IC8vIFdyYXBwZXIgc28gdGhhdCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCYsUFJJbnQ2NCkgY2Fu
IGJlIGNhbGxlZCBmcm9tCiAgIC8vIERlY29kZVRvRmlyc3REYXRhKCkuCiAgIFBSQm9vbCBEZWNv
ZGVWaWRlb0ZyYW1lKCkgewogICAgIFBSQm9vbCBmID0gUFJfRkFMU0U7Ci0gICAgcmV0dXJuIERl
Y29kZVZpZGVvRnJhbWUoZiwgMCk7CisgICAgUFJVaW50MzIgZHJvcHBlZEZyYW1lcyA9IDA7Cisg
ICAgcmV0dXJuIERlY29kZVZpZGVvRnJhbWUoZiwgMCwgZHJvcHBlZEZyYW1lcyk7CiAgIH0KIAog
ICAvLyBGaWxscyBhUmFuZ2VzIHdpdGggQnl0ZVJhbmdlcyBkZW5vdGluZyB0aGUgc2VjdGlvbnMg
b2YgdGhlIG1lZGlhIHdoaWNoCiAgIC8vIGhhdmUgYmVlbiBkb3dubG9hZGVkIGFuZCBhcmUgc3Rv
cmVkIGluIHRoZSBtZWRpYSBjYWNoZS4gVGhlIHJlYWRlcgogICAvLyBtb25pdG9yIG11c3QgbXVz
dCBiZSBoZWxkIHdpdGggZXhhY3RseSBvbmUgbG9jayBjb3VudC4gVGhlIG5zTWVkaWFTdHJlYW0K
ICAgLy8gbXVzdCBiZSBwaW5uZWQgd2hpbGUgY2FsbGluZyB0aGlzLgogICBuc3Jlc3VsdCBHZXRC
dWZmZXJlZEJ5dGVzKG5zVEFycmF5PEJ5dGVSYW5nZT4mIGFSYW5nZXMpOwogCmRpZmYgLS1naXQg
YS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUuY3BwIGIvY29udGVu
dC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lLmNwcAppbmRleCA5NDQ1ZjU3Li5j
ODMwNDhiIDEwMDY0NAotLS0gYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1h
Y2hpbmUuY3BwCisrKyBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGlu
ZS5jcHAKQEAgLTI0OSwxOSArMjQ5LDIxIEBAIHZvaWQgbnNCdWlsdGluRGVjb2RlclN0YXRlTWFj
aGluZTo6RGVjb2RlTG9vcCgpCiAgICAgaWYgKGF1ZGlvUHVtcCAmJiBhdWRpb0RlY29kZWQgPiBh
dWRpb1B1bXBUaHJlc2hvbGRNcykgewogICAgICAgYXVkaW9QdW1wID0gUFJfRkFMU0U7CiAgICAg
fQogICAgIGlmICghYXVkaW9QdW1wICYmIGF1ZGlvUGxheWluZyAmJiBhdWRpb0RlY29kZWQgPCBM
T1dfQVVESU9fTVMpIHsKICAgICAgIHNraXBUb05leHRLZXlmcmFtZSA9IFBSX1RSVUU7CiAgICAg
fQogCiAgICAgaWYgKHZpZGVvUGxheWluZyAmJiAhdmlkZW9XYWl0KSB7Ci0gICAgICB2aWRlb1Bs
YXlpbmcgPSBtUmVhZGVyLT5EZWNvZGVWaWRlb0ZyYW1lKHNraXBUb05leHRLZXlmcmFtZSwgY3Vy
cmVudFRpbWUpOworICAgICAgUFJVaW50MzIgZHJvcHBlZEZyYW1lcyA9IDA7CisgICAgICB2aWRl
b1BsYXlpbmcgPSBtUmVhZGVyLT5EZWNvZGVWaWRlb0ZyYW1lKHNraXBUb05leHRLZXlmcmFtZSwg
Y3VycmVudFRpbWUsIGRyb3BwZWRGcmFtZXMpOwogICAgICAgewogICAgICAgICBNb25pdG9yQXV0
b0VudGVyIG1vbihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsKKyAgICAgICAgbURlY29kZXItPk5v
dGlmeURyb3BwZWRGcmFtZXMoZHJvcHBlZEZyYW1lcyk7CiAgICAgICAgIGlmIChtRGVjb2Rlci0+
bURlY29kZXJQb3NpdGlvbiA+IGluaXRpYWxEb3dubG9hZFBvc2l0aW9uKSB7CiAgICAgICAgICAg
bUJ1ZmZlckV4aGF1c3RlZCA9IFBSX1RSVUU7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAg
ICAgewogICAgICAgTW9uaXRvckF1dG9FbnRlciBtb24obURlY29kZXItPkdldE1vbml0b3IoKSk7
CiAgICAgICBpbml0aWFsRG93bmxvYWRQb3NpdGlvbiA9CmRpZmYgLS1naXQgYS9jb250ZW50L21l
ZGlhL25zTWVkaWFEZWNvZGVyLmNwcCBiL2NvbnRlbnQvbWVkaWEvbnNNZWRpYURlY29kZXIuY3Bw
CmluZGV4IDlmMDlmNWIuLmNhNjg4YmQgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvbnNNZWRp
YURlY29kZXIuY3BwCisrKyBiL2NvbnRlbnQvbWVkaWEvbnNNZWRpYURlY29kZXIuY3BwCkBAIC02
OSwxNiArNjksMTggQEAgbnNNZWRpYURlY29kZXI6Om5zTWVkaWFEZWNvZGVyKCkgOgogICBtRWxl
bWVudCgwKSwKICAgbVJHQldpZHRoKC0xKSwKICAgbVJHQkhlaWdodCgtMSksCiAgIG1Qcm9ncmVz
c1RpbWUoKSwKICAgbURhdGFUaW1lKCksCiAgIG1WaWRlb1VwZGF0ZUxvY2sobnNudWxsKSwKICAg
bVBpeGVsQXNwZWN0UmF0aW8oMS4wKSwKICAgbVBpbm5lZEZvclNlZWsoUFJfRkFMU0UpLAorICBt
RGVjb2RlRnJhbWVDb3VudCgwKSwKKyAgbURlY29kZURyb3BwZWRGcmFtZXMoMCksCiAgIG1TaXpl
Q2hhbmdlZChQUl9GQUxTRSksCiAgIG1TaHV0dGluZ0Rvd24oUFJfRkFMU0UpCiB7CiAgIE1PWl9D
T1VOVF9DVE9SKG5zTWVkaWFEZWNvZGVyKTsKIH0KIAogbnNNZWRpYURlY29kZXI6On5uc01lZGlh
RGVjb2RlcigpCiB7CkBAIC0yMjYsMTYgKzIyOCwxNyBAQCB2b2lkIG5zTWVkaWFEZWNvZGVyOjpT
ZXRWaWRlb0RhdGEoY29uc3QgZ2Z4SW50U2l6ZSYgYVNpemUsCiAgICAgICBtUGl4ZWxBc3BlY3RS
YXRpbyAhPSBhUGl4ZWxBc3BlY3RSYXRpbykgewogICAgIG1SR0JXaWR0aCA9IGFTaXplLndpZHRo
OwogICAgIG1SR0JIZWlnaHQgPSBhU2l6ZS5oZWlnaHQ7CiAgICAgbVBpeGVsQXNwZWN0UmF0aW8g
PSBhUGl4ZWxBc3BlY3RSYXRpbzsKICAgICBtU2l6ZUNoYW5nZWQgPSBQUl9UUlVFOwogICB9CiAg
IGlmIChtSW1hZ2VDb250YWluZXIgJiYgYUltYWdlKSB7CiAgICAgbUltYWdlQ29udGFpbmVyLT5T
ZXRDdXJyZW50SW1hZ2UoYUltYWdlKTsKKyAgICBtRGVjb2RlRnJhbWVDb3VudCsrOwogICB9CiB9
CiAKIHZvaWQgbnNNZWRpYURlY29kZXI6OlBpbkZvclNlZWsoKQogewogICBuc01lZGlhU3RyZWFt
KiBzdHJlYW0gPSBHZXRDdXJyZW50U3RyZWFtKCk7CiAgIGlmICghc3RyZWFtIHx8IG1QaW5uZWRG
b3JTZWVrKSB7CiAgICAgcmV0dXJuOwpAQCAtMjY3LDggKzI3MCw1MCBAQCBQUkJvb2wgbnNNZWRp
YURlY29kZXI6OkNhblBsYXlUaHJvdWdoKCkKICAgfQogICBQUkludDY0IGJ5dGVzVG9Eb3dubG9h
ZCA9IHN0YXRzLm1Ub3RhbEJ5dGVzIC0gc3RhdHMubURvd25sb2FkUG9zaXRpb247CiAgIFBSSW50
NjQgYnl0ZXNUb1BsYXliYWNrID0gc3RhdHMubVRvdGFsQnl0ZXMgLSBzdGF0cy5tUGxheWJhY2tQ
b3NpdGlvbjsKICAgZG91YmxlIHRpbWVUb0Rvd25sb2FkID0KICAgICAoYnl0ZXNUb0Rvd25sb2Fk
ICsgZ0Rvd25sb2FkU2l6ZVNhZmV0eU1hcmdpbikvc3RhdHMubURvd25sb2FkUmF0ZTsKICAgZG91
YmxlIHRpbWVUb1BsYXkgPSBieXRlc1RvUGxheWJhY2svc3RhdHMubVBsYXliYWNrUmF0ZTsKICAg
cmV0dXJuIHRpbWVUb0Rvd25sb2FkIDw9IHRpbWVUb1BsYXk7CiB9CisKK1BSVWludDMyIG5zTWVk
aWFEZWNvZGVyOjpHZXRGcmFtZUNvdW50KCkKK3sKKyAgcmV0dXJuIG1EZWNvZGVGcmFtZUNvdW50
OworfQorCitQUlVpbnQzMiBuc01lZGlhRGVjb2Rlcjo6R2V0RHJvcHBlZEZyYW1lcygpCit7Cisg
IHJldHVybiBtRGVjb2RlRHJvcHBlZEZyYW1lczsKK30KKwordm9pZCBuc01lZGlhRGVjb2Rlcjo6
SW5jcmVtZW50RHJvcHBlZEZyYW1lcyhQUlVpbnQzMiBhRHJvcHBlZEZyYW1lcykKK3sKKyAgTlNf
QVNTRVJUSU9OKE5TX0lzTWFpblRocmVhZCgpLCAiRG9uJ3QgY2FsbCBvbiBub24tbWFpbiB0aHJl
YWQiKTsKKworICBtRGVjb2RlRHJvcHBlZEZyYW1lcyArPSBhRHJvcHBlZEZyYW1lczsKK30KKwor
Ly8gQW4gZXZlbnQgdG8gdXBkYXRlIHRoZSBkcm9wcGVkIGZyYW1lcyBjb3VudCBvbiB0aGUgbWFp
biB0aHJlYWQKK2NsYXNzIERyb3BwZWRGcmFtZXMgOiBwdWJsaWMgbnNSdW5uYWJsZSB7CitwdWJs
aWM6CisgIERyb3BwZWRGcmFtZXMobnNNZWRpYURlY29kZXIqIGFEZWNvZGVyLCBQUlVpbnQzMiBh
RHJvcHBlZEZyYW1lcykgOgorICAgIG1EZWNvZGVyKGFEZWNvZGVyKSwgbURyb3BwZWRGcmFtZXMo
YURyb3BwZWRGcmFtZXMpIHt9CisgIE5TX0lNRVRIT0QgUnVuKCkgeworICAgIG1EZWNvZGVyLT5J
bmNyZW1lbnREcm9wcGVkRnJhbWVzKG1Ecm9wcGVkRnJhbWVzKTsKKyAgICByZXR1cm4gTlNfT0s7
CisgIH0KK3ByaXZhdGU6CisgIG5zUmVmUHRyPG5zTWVkaWFEZWNvZGVyPiBtRGVjb2RlcjsKKyAg
UFJVaW50MzIgICAgICAgICAgICAgICAgIG1Ecm9wcGVkRnJhbWVzOworfTsKKwordm9pZCBuc01l
ZGlhRGVjb2Rlcjo6Tm90aWZ5RHJvcHBlZEZyYW1lcyhQUlVpbnQzMiBhRHJvcHBlZEZyYW1lcykK
K3sKKyAgTlNfQVNTRVJUSU9OKCFOU19Jc01haW5UaHJlYWQoKSwgIkRvbid0IGNhbGwgb24gbWFp
biB0aHJlYWQiKTsKKworICBpZiAoYURyb3BwZWRGcmFtZXMgPiAwKSB7CisgICAgbnNDT01QdHI8
bnNJUnVubmFibGU+IGV2ZW50ID0gbmV3IERyb3BwZWRGcmFtZXModGhpcywgYURyb3BwZWRGcmFt
ZXMpOworICAgIE5TX0Rpc3BhdGNoVG9NYWluVGhyZWFkKGV2ZW50LCBOU19ESVNQQVRDSF9OT1JN
QUwpOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNNZWRpYURlY29kZXIu
aCBiL2NvbnRlbnQvbWVkaWEvbnNNZWRpYURlY29kZXIuaAppbmRleCA5NGUwYTcyLi42M2JiZmI5
IDEwMDY0NAotLS0gYS9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmgKKysrIGIvY29udGVu
dC9tZWRpYS9uc01lZGlhRGVjb2Rlci5oCkBAIC0yNDAsMTYgKzI0MCwzMiBAQCBwdWJsaWM6CiAg
IC8vIENvbnN0cnVjdHMgdGhlIHRpbWUgcmFuZ2VzIHJlcHJlc2VudGluZyB3aGF0IHNlZ21lbnRz
IG9mIHRoZSBtZWRpYQogICAvLyBhcmUgYnVmZmVyZWQgYW5kIHBsYXlhYmxlLgogICB2aXJ0dWFs
IG5zcmVzdWx0IEdldEJ1ZmZlcmVkKG5zSFRNTFRpbWVSYW5nZXMqIGFCdWZmZXJlZCkgPSAwOwog
CiAgIC8vIFJldHVybnMgUFJfVFJVRSBpZiB3ZSBjYW4gcGxheSB0aGUgZW50aXJlIG1lZGlhIHRo
cm91Z2ggd2l0aG91dCBzdG9wcGluZwogICAvLyB0byBidWZmZXIsIGdpdmVuIHRoZSBjdXJyZW50
IGRvd25sb2FkIGFuZCBwbGF5YmFjayByYXRlcy4KICAgUFJCb29sIENhblBsYXlUaHJvdWdoKCk7
CiAKKyAgLy8gUmV0dXJuIHRoZSBjb3VudCBvZiBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gZGVjb2Rl
ZAorICBQUlVpbnQzMiBHZXRGcmFtZUNvdW50KCk7CisKKyAgLy8gUmV0dXJuIHRoZSBjb3VudCBv
ZiBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZAorICBQUlVpbnQzMiBHZXREcm9wcGVkRnJh
bWVzKCk7CisKKyAgLy8gSW5jcmVtZW50IHRoZSBkcm9wcGVkIGZyYW1lIGNvdW50IGJ5IHRoZSBn
aXZlbiBhbW91bnQuIFRoaXMgbXVzdAorICAvLyBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0
aHJlYWQuIHVzZSAnTm90aWZ5RHJvcHBlZEZyYW1lcycgdG8KKyAgLy8gaW5jcmVtZW50IGRyb3Bw
ZWQgZnJhbWVzIG9uIG5vbi1tYWluIHRocmVhZHMuCisgIHZvaWQgSW5jcmVtZW50RHJvcHBlZEZy
YW1lcyhQUlVpbnQzMiBhRHJvcHBlZEZyYW1lcyk7CisKKyAgLy8gUmFpc2VzIGFuIGV2ZW50IHRo
YXQgaXMgZGlzcGF0Y2hlZCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gaW5jcmVtZW50CisgIC8vIHRo
ZSBudW1iZXIgb2YgZHJvcHBlZCBmcmFtZXMuIERvIG5vdCBjYWxsIG9uIHRoZSBtYWluIHRocmVh
ZCAodXNlCisgIC8vIEluY3JlbWVudERyb3BwZWRGcmFtZXMgaW5zdGVhZCkuCisgIHZvaWQgTm90
aWZ5RHJvcHBlZEZyYW1lcyhQUlVpbnQzMiBhRHJvcHBlZEZyYW1lcyk7CisKIHByb3RlY3RlZDoK
IAogICAvLyBTdGFydCB0aW1lciB0byB1cGRhdGUgZG93bmxvYWQgcHJvZ3Jlc3MgaW5mb3JtYXRp
b24uCiAgIG5zcmVzdWx0IFN0YXJ0UHJvZ3Jlc3MoKTsKIAogICAvLyBTdG9wIHByb2dyZXNzIGlu
Zm9ybWF0aW9uIHRpbWVyLgogICBuc3Jlc3VsdCBTdG9wUHJvZ3Jlc3MoKTsKIApAQCAtMjk3LDE2
ICszMTMsMjQgQEAgcHJvdGVjdGVkOgogCiAgIC8vIFBpeGVsIGFzcGVjdCByYXRpbyAocmF0aW8g
b2YgdGhlIHBpeGVsIHdpZHRoIHRvIHBpeGVsIGhlaWdodCkKICAgZmxvYXQgbVBpeGVsQXNwZWN0
UmF0aW87CiAKICAgLy8gUFJfVFJVRSB3aGVuIG91ciBtZWRpYSBzdHJlYW0gaGFzIGJlZW4gcGlu
bmVkLiBXZSBwaW4gdGhlIHN0cmVhbQogICAvLyB3aGlsZSBzZWVraW5nLgogICBQUlBhY2tlZEJv
b2wgbVBpbm5lZEZvclNlZWs7CiAKKyAgLy8gQSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1l
cyB0aGF0IGhhdmUgYmVlbiBkZWNvZGVkIGFuZCByZWFkeQorICAvLyB0byBiZSBkaXNwbGF5ZWQu
IFRoaXMgY2FuIGJlIHVzZWQgZm9yIGNvbXB1dGluZyB0aGUgZGVjb2RpbmcgZnJhbWVyYXRlCisg
IFBSVWludDMyIG1EZWNvZGVGcmFtZUNvdW50OworCisgIC8vIEEgY291bnQgb2YgdGhlIG51bWJl
ciBvZiBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBmb3IgcGVyZm9ybWFuY2UKKyAgLy8g
cmVhc29ucyBkdXJpbmcgcGxheWJhY2suCisgIFBSVWludDMyIG1EZWNvZGVEcm9wcGVkRnJhbWVz
OworCiAgIC8vIEhhcyBvdXIgc2l6ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHJlcGFpbnQ/CiAg
IFBSUGFja2VkQm9vbCBtU2l6ZUNoYW5nZWQ7CiAKICAgLy8gVHJ1ZSBpZiB0aGUgZGVjb2RlciBp
cyBiZWluZyBzaHV0ZG93bi4gQXQgdGhpcyBwb2ludCBhbGwgZXZlbnRzIHRoYXQKICAgLy8gYXJl
IGN1cnJlbnRseSBxdWV1ZWQgbmVlZCB0byByZXR1cm4gaW1tZWRpYXRlbHkgdG8gcHJldmVudCBq
YXZhc2NyaXB0CiAgIC8vIGJlaW5nIHJ1biB0aGF0IG9wZXJhdGVzIG9uIHRoZSBlbGVtZW50IGFu
ZCBkZWNvZGVyIGR1cmluZyBzaHV0ZG93bi4KICAgLy8gUmVhZC9Xcml0ZSBmcm9tIHRoZSBtYWlu
IHRocmVhZCBvbmx5LgogICBQUlBhY2tlZEJvb2wgbVNodXR0aW5nRG93bjsKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmNwcCBiL2NvbnRlbnQvbWVkaWEvb2dnL25z
T2dnUmVhZGVyLmNwcAppbmRleCA5NWY5NDZmLi4wMDc2NjJkIDEwMDY0NAotLS0gYS9jb250ZW50
L21lZGlhL29nZy9uc09nZ1JlYWRlci5jcHAKKysrIGIvY29udGVudC9tZWRpYS9vZ2cvbnNPZ2dS
ZWFkZXIuY3BwCkBAIC01MDIsMTcgKzUwMiwxOCBAQCBuc3Jlc3VsdCBuc09nZ1JlYWRlcjo6RGVj
b2RlVGhlb3JhKG5zVEFycmF5PFZpZGVvRGF0YSo+JiBhRnJhbWVzLAogICAgICAgcmV0dXJuIE5T
X0VSUk9SX09VVF9PRl9NRU1PUlk7CiAgICAgfQogICAgIGFGcmFtZXMuQXBwZW5kRWxlbWVudCh2
KTsKICAgfQogICByZXR1cm4gTlNfT0s7CiB9CiAKIFBSQm9vbCBuc09nZ1JlYWRlcjo6RGVjb2Rl
VmlkZW9GcmFtZShQUkJvb2wgJmFLZXlmcmFtZVNraXAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyICZhRHJvcHBlZEZyYW1lcykKIHsKICAg
TW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICBOU19BU1NFUlRJT04obURlY29kZXIt
Pk9uU3RhdGVNYWNoaW5lVGhyZWFkKCkgfHwgbURlY29kZXItPk9uRGVjb2RlVGhyZWFkKCksCiAg
ICAgICAgICAgICAgICAiU2hvdWxkIGJlIG9uIHN0YXRlIG1hY2hpbmUgb3IgQVYgdGhyZWFkLiIp
OwogICAvLyBXZSBjaG9zZSB0byBrZWVwIHRyYWNrIG9mIHRoZSBUaGVvcmEgZ3JhbnVsZXBvcyBv
dXJzZWx2ZXMsIHJhdGhlciB0aGFuCiAgIC8vIHJlbHkgb24gdGhfZGVjb2RlX3BhY2tldGluKCkg
dG8gZG8gaXQgZm9yIHVzLiBUaGlzIGlzIGJlY2F1c2UKICAgLy8gdGhfZGVjb2RlX3BhY2tldGlu
KCkgc2ltcGx5IHdvcmtzIGJ5IGluY3JlbWVudGluZyBhIGNvdW50ZXIgZXZlcnkgdGltZQogICAv
LyBpdCdzIGNhbGxlZCwgc28gaWYgd2UgZHJvcCBmcmFtZXMgYW5kIGRvbid0IGNhbGwgaXQsIHN1
YnNlcXVlbnQgZ3JhbnVsZXBvcwpAQCAtNjYwLDI5ICs2NjEsMzMgQEAgUFJCb29sIG5zT2dnUmVh
ZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKICAgICBpZiAoIWFL
ZXlmcmFtZVNraXAgfHwKICAgICAgICAgKHRoX3BhY2tldF9pc2tleWZyYW1lKCZwYWNrZXQpID09
IDEgJiYgdGltZSA+PSBhVGltZVRocmVzaG9sZCkpCiAgICAgewogICAgICAgaWYgKERlY29kZVRo
ZW9yYShmcmFtZXMsICZwYWNrZXQpID09IE5TX0VSUk9SX09VVF9PRl9NRU1PUlkpIHsKICAgICAg
ICAgTlNfV0FSTklORygiVGhlb3JhIGRlY29kZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7
CiAgICAgICAgIHJldHVybiBQUl9GQUxTRTsKICAgICAgIH0KICAgICB9CisgICAgZWxzZSB7Cisg
ICAgICBhRHJvcHBlZEZyYW1lcysrOworICAgIH0KICAgfQogCiAgIC8vIFB1c2ggZGVjb2RlZCBk
YXRhIGludG8gdGhlIHZpZGVvIGZyYW1lIHF1ZXVlLgogICBmb3IgKFBSVWludDMyIGkgPSAwOyBp
IDwgZnJhbWVzLkxlbmd0aCgpOyBpKyspIHsKICAgICBuc0F1dG9QdHI8VmlkZW9EYXRhPiBkYXRh
KGZyYW1lc1tpXSk7CiAgICAgaWYgKCFhS2V5ZnJhbWVTa2lwIHx8IChhS2V5ZnJhbWVTa2lwICYm
IGZyYW1lc1tpXS0+bUtleWZyYW1lKSkgewogICAgICAgbVZpZGVvUXVldWUuUHVzaChkYXRhLmZv
cmdldCgpKTsKICAgICAgIGlmIChhS2V5ZnJhbWVTa2lwICYmIGZyYW1lc1tpXS0+bUtleWZyYW1l
KSB7CiAgICAgICAgIGFLZXlmcmFtZVNraXAgPSBQUl9GQUxTRTsKICAgICAgIH0KICAgICB9IGVs
c2UgewogICAgICAgZnJhbWVzW2ldID0gbnNudWxsOwogICAgICAgZGF0YSA9IG5zbnVsbDsKKyAg
ICAgIGFEcm9wcGVkRnJhbWVzKys7CiAgICAgfQogICB9CiAKICAgaWYgKGVuZE9mU3RyZWFtKSB7
CiAgICAgLy8gV2UndmUgZW5jb3VudGVyZWQgYW4gZW5kIG9mIGJpdHN0cmVhbSBwYWNrZXQuIElu
Zm9ybSB0aGUgcXVldWUgdGhhdAogICAgIC8vIHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBmcmFtZXMu
CiAgICAgbVZpZGVvUXVldWUuRmluaXNoKCk7CiAgIH0KQEAgLTk4MSwxNyArOTg2LDE4IEBAIG5z
cmVzdWx0IG5zT2dnUmVhZGVyOjpTZWVrKFBSSW50NjQgYVRhcmdldCwgUFJJbnQ2NCBhU3RhcnRU
aW1lLCBQUkludDY0IGFFbmRUaW1lCiAgICAgICByZXMgPSBTZWVrQmlzZWN0aW9uKGFUYXJnZXQs
IHIsIDApOwogCiAgICAgICBpZiAoTlNfU1VDQ0VFREVEKHJlcykgJiYgSGFzVmlkZW8oKSkgewog
ICAgICAgICAvLyBXZSBoYXZlIGFuIGFjdGl2ZSBUaGVvcmEgYml0c3RyZWFtLiBEZWNvZGUgdGhl
IG5leHQgVGhlb3JhIGZyYW1lLCBhbmQKICAgICAgICAgLy8gZXh0cmFjdCBpdHMga2V5ZnJhbWUn
cyB0aW1lLgogICAgICAgICBQUkJvb2wgZW9mOwogICAgICAgICBkbyB7CiAgICAgICAgICAgUFJC
b29sIHNraXAgPSBQUl9GQUxTRTsKLSAgICAgICAgICBlb2YgPSAhRGVjb2RlVmlkZW9GcmFtZShz
a2lwLCAwKTsKKyAgICAgICAgICBQUlVpbnQzMiBkcm9wcGVkRnJhbWVzID0gMDsKKyAgICAgICAg
ICBlb2YgPSAhRGVjb2RlVmlkZW9GcmFtZShza2lwLCAwLCBkcm9wcGVkRnJhbWVzKTsKICAgICAg
ICAgICB7CiAgICAgICAgICAgICBNb25pdG9yQXV0b0V4aXQgZXhpdFJlYWRlck1vbihtTW9uaXRv
cik7CiAgICAgICAgICAgICBNb25pdG9yQXV0b0VudGVyIGRlY29kZXJNb24obURlY29kZXItPkdl
dE1vbml0b3IoKSk7CiAgICAgICAgICAgICBpZiAobURlY29kZXItPkdldERlY29kZVN0YXRlKCkg
PT0gbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZTo6REVDT0RFUl9TVEFURV9TSFVURE9XTikg
ewogICAgICAgICAgICAgICBzdHJlYW0tPlVucGluKCk7CiAgICAgICAgICAgICAgIHJldHVybiBO
U19FUlJPUl9GQUlMVVJFOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmggYi9jb250ZW50L21lZGlhL29nZy9uc09n
Z1JlYWRlci5oCmluZGV4IGRhNDQ1ODcuLmE4NTU5NmIgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVk
aWEvb2dnL25zT2dnUmVhZGVyLmgKKysrIGIvY29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIu
aApAQCAtNTcsMTcgKzU3LDE4IEBAIHB1YmxpYzoKICAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KCk7
CiAgIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXREZWNvZGUoKTsKICAgdmlydHVhbCBQUkJvb2wgRGVj
b2RlQXVkaW9EYXRhKCk7CiAKICAgLy8gSWYgdGhlIFRoZW9yYSBncmFudWxlcG9zIGhhcyBub3Qg
YmVlbiBjYXB0dXJlZCwgaXQgbWF5IHJlYWQgc2V2ZXJhbCBwYWNrZXRzCiAgIC8vIHVudGlsIG9u
ZSB3aXRoIGEgZ3JhbnVsZXBvcyBoYXMgYmVlbiBjYXB0dXJlZCwgdG8gZW5zdXJlIHRoYXQgYWxs
IHBhY2tldHMKICAgLy8gcmVhZCBoYXZlIHZhbGlkIHRpbWUgaW5mby4gIAogICB2aXJ0dWFsIFBS
Qm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyICZhRHJvcHBlZEZyYW1lcyk7CiAK
ICAgdmlydHVhbCBWaWRlb0RhdGEqIEZpbmRTdGFydFRpbWUoUFJJbnQ2NCBhT2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0JiBhT3V0U3RhcnRUaW1lKTsK
IAogICAvLyBHZXQgdGhlIGVuZCB0aW1lIG9mIGFFbmRPZmZzZXQuIFRoaXMgaXMgdGhlIHBsYXli
YWNrIHBvc2l0aW9uIHdlJ2QgcmVhY2gKICAgLy8gYWZ0ZXIgcGxheWJhY2sgZmluaXNoZWQgYXQg
YUVuZE9mZnNldC4KICAgdmlydHVhbCBQUkludDY0IEZpbmRFbmRUaW1lKFBSSW50NjQgYUVuZE9m
ZnNldCk7CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVyLmNwcCBi
L2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVyLmNwcAppbmRleCA3ZmE4ODNmLi42Y2MxYWZk
IDEwMDY0NAotLS0gYS9jb250ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5jcHAKKysrIGIvY29u
dGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuY3BwCkBAIC0xNjMsMTcgKzE2MywxOCBAQCBQUkJv
b2wgbnNSYXdSZWFkZXI6OlJlYWRGcm9tU3RyZWFtKG5zTWVkaWFTdHJlYW0gKmFTdHJlYW0sIFBS
VWludDgqIGFCdWYsCiAgICAgYUxlbmd0aCAtPSBieXRlc1JlYWQ7CiAgICAgYUJ1ZiArPSBieXRl
c1JlYWQ7CiAgIH0KIAogICByZXR1cm4gUFJfVFJVRTsKIH0KIAogUFJCb29sIG5zUmF3UmVhZGVy
OjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgJmFEcm9wcGVkRnJhbWVz
KQogewogICBtb3ppbGxhOjpNb25pdG9yQXV0b0VudGVyIGF1dG9FbnRlcihtTW9uaXRvcik7CiAg
IE5TX0FTU0VSVElPTihtRGVjb2Rlci0+T25TdGF0ZU1hY2hpbmVUaHJlYWQoKSB8fCBtRGVjb2Rl
ci0+T25EZWNvZGVUaHJlYWQoKSwKICAgICAgICAgICAgICAgICJTaG91bGQgYmUgb24gc3RhdGUg
bWFjaGluZSB0aHJlYWQgb3IgZGVjb2RlIHRocmVhZC4iKTsKIAogICBpZiAoIW1GcmFtZVNpemUp
CiAgICAgcmV0dXJuIFBSX0ZBTFNFOyAvLyBNZXRhZGF0YSByZWFkIGZhaWxlZC4gIFdlIHNob3Vs
ZCByZWZ1c2UgdG8gcGxheS4KIApAQCAtMTk5LDE2ICsyMDAsMTcgQEAgUFJCb29sIG5zUmF3UmVh
ZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKICAgICAgIHJldHVy
biBQUl9GQUxTRTsKICAgICB9CiAKICAgICBpZiAoY3VycmVudEZyYW1lVGltZSA+PSBhVGltZVRo
cmVzaG9sZCkKICAgICAgIGJyZWFrOwogCiAgICAgbUN1cnJlbnRGcmFtZSsrOwogICAgIGN1cnJl
bnRGcmFtZVRpbWUgKz0gMTAwMC4wIC8gbUZyYW1lUmF0ZTsKKyAgICBhRHJvcHBlZEZyYW1lcysr
OwogICB9CiAKICAgVmlkZW9EYXRhOjpZQ2JDckJ1ZmZlciBiOwogICBiLm1QbGFuZXNbMF0ubURh
dGEgPSBidWZmZXI7CiAgIGIubVBsYW5lc1swXS5tU3RyaWRlID0gbU1ldGFkYXRhLmZyYW1lV2lk
dGggKiBtTWV0YWRhdGEubHVtYUNoYW5uZWxCcHAgLyA4LjA7CiAgIGIubVBsYW5lc1swXS5tSGVp
Z2h0ID0gbU1ldGFkYXRhLmZyYW1lSGVpZ2h0OwogICBiLm1QbGFuZXNbMF0ubVdpZHRoID0gbU1l
dGFkYXRhLmZyYW1lV2lkdGg7CiAKQEAgLTI2NCwxNyArMjY2LDE4IEBAIG5zcmVzdWx0IG5zUmF3
UmVhZGVyOjpTZWVrKFBSSW50NjQgYVRpbWUsIFBSSW50NjQgYVN0YXJ0VGltZSwgUFJJbnQ2NCBh
RW5kVGltZSkKIAogICBuc3Jlc3VsdCBydiA9IHN0cmVhbS0+U2Vlayhuc0lTZWVrYWJsZVN0cmVh
bTo6TlNfU0VFS19TRVQsIG9mZnNldCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAK
ICAgbVZpZGVvUXVldWUuRXJhc2UoKTsKIAogICB3aGlsZShtVmlkZW9RdWV1ZS5HZXRTaXplKCkg
PT0gMCkgewogICAgIFBSQm9vbCBrZXlmcmFtZVNraXAgPSBQUl9GQUxTRTsKLSAgICBpZiAoIURl
Y29kZVZpZGVvRnJhbWUoa2V5ZnJhbWVTa2lwLCAwKSkgeworICAgIFBSVWludDMyIGRyb3BwZWRG
cmFtZXMgPSAwOworICAgIGlmICghRGVjb2RlVmlkZW9GcmFtZShrZXlmcmFtZVNraXAsIDAsIGRy
b3BwZWRGcmFtZXMpKSB7CiAgICAgICBtQ3VycmVudEZyYW1lID0gZnJhbWU7CiAgICAgICByZXR1
cm4gTlNfRVJST1JfRkFJTFVSRTsKICAgICB9CiAKICAgICB7CiAgICAgICBtb3ppbGxhOjpNb25p
dG9yQXV0b0V4aXQgYXV0b01vbml0b3JFeGl0KG1Nb25pdG9yKTsKICAgICAgIG1vemlsbGE6Ok1v
bml0b3JBdXRvRW50ZXIgYXV0b01vbml0b3IobURlY29kZXItPkdldE1vbml0b3IoKSk7CiAgICAg
ICBpZiAobURlY29kZXItPkdldERlY29kZVN0YXRlKCkgPT0KZGlmZiAtLWdpdCBhL2NvbnRlbnQv
bWVkaWEvcmF3L25zUmF3UmVhZGVyLmggYi9jb250ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5o
CmluZGV4IGIyZDEyODEuLjIyYjExOTYgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvcmF3L25z
UmF3UmVhZGVyLmgKKysrIGIvY29udGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuaApAQCAtOTMs
MTcgKzkzLDE4IEBAIHB1YmxpYzoKICAgbnNSYXdSZWFkZXIobnNCdWlsdGluRGVjb2RlciogYURl
Y29kZXIpOwogICB+bnNSYXdSZWFkZXIoKTsKIAogICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQoKTsK
ICAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldERlY29kZSgpOwogICB2aXJ0dWFsIFBSQm9vbCBEZWNv
ZGVBdWRpb0RhdGEoKTsKIAogICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9v
bCAmYUtleWZyYW1lU2tpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu
dDY0IGFUaW1lVGhyZXNob2xkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSVWludDMyICZhRHJvcHBlZEZyYW1lcyk7CiAKICAgdmlydHVhbCBQUkJvb2wgSGFzQXVkaW8o
KQogICB7CiAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICB9CiAKICAgdmlydHVhbCBQUkJvb2wgSGFz
VmlkZW8oKQogICB7CmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNUmVhZGVy
LmNwcCBiL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuY3BwCmluZGV4IDgyNzk5Nzcu
Ljc3ODhhZTEgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuY3Bw
CisrKyBiL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuY3BwCkBAIC01MzIsMTcgKzUz
MiwxOCBAQCBQUkJvb2wgbnNXZWJNUmVhZGVyOjpEZWNvZGVBdWRpb0RhdGEoKQogICAgIG1BdWRp
b1F1ZXVlLkZpbmlzaCgpOwogICAgIHJldHVybiBQUl9GQUxTRTsKICAgfQogCiAgIHJldHVybiBE
ZWNvZGVBdWRpb1BhY2tldChwYWNrZXQpOwogfQogCiBQUkJvb2wgbnNXZWJNUmVhZGVyOjpEZWNv
ZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgJmFEcm9wcGVkRnJhbWVzKQog
ewogICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAgIE5TX0FTU0VSVElPTihtRGVj
b2Rlci0+T25TdGF0ZU1hY2hpbmVUaHJlYWQoKSB8fCBtRGVjb2Rlci0+T25EZWNvZGVUaHJlYWQo
KSwKICAgICAgICAgICAgICAgICJTaG91bGQgYmUgb24gc3RhdGUgbWFjaGluZSBvciBkZWNvZGUg
dGhyZWFkLiIpOwogICBpbnQgciA9IDA7CiAgIG5lc3RlZ2dfcGFja2V0KiBwYWNrZXQgPSBOZXh0
UGFja2V0KFZJREVPKTsKIAogICBpZiAoIXBhY2tldCkgewpAQCAtNjA0LDMyICs2MDUsMzQgQEAg
UFJCb29sIG5zV2ViTVJlYWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQUkJvb2wgJmFLZXlmcmFtZVNr
aXAsCiAgICAgfQogCiAgICAgdnB4X2NvZGVjX3N0cmVhbV9pbmZvX3Qgc2k7CiAgICAgbWVtc2V0
KCZzaSwgMCwgc2l6ZW9mKHNpKSk7CiAgICAgc2kuc3ogPSBzaXplb2Yoc2kpOwogICAgIHZweF9j
b2RlY19wZWVrX3N0cmVhbV9pbmZvKCZ2cHhfY29kZWNfdnA4X2R4X2FsZ28sIGRhdGEsIGxlbmd0
aCwgJnNpKTsKICAgICBpZiAoKGFLZXlmcmFtZVNraXAgJiYgIXNpLmlzX2tmKSB8fCAoYUtleWZy
YW1lU2tpcCAmJiBzaS5pc19rZiAmJiB0c3RhbXBfbXMgPCBhVGltZVRocmVzaG9sZCkpIHsKICAg
ICAgIGFLZXlmcmFtZVNraXAgPSBQUl9UUlVFOworICAgICAgYURyb3BwZWRGcmFtZXMrKzsKICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmIChhS2V5ZnJhbWVTa2lwICYmIHNpLmlzX2tmKSB7
CiAgICAgICBhS2V5ZnJhbWVTa2lwID0gUFJfRkFMU0U7CiAgICAgfQogCiAgICAgaWYodnB4X2Nv
ZGVjX2RlY29kZSgmbVZQOCwgZGF0YSwgbGVuZ3RoLCBOVUxMLCAwKSkgewogICAgICAgbmVzdGVn
Z19mcmVlX3BhY2tldChwYWNrZXQpOwogICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgIH0KIAog
ICAgIC8vIElmIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHZpZGVvIGZyYW1lIGlzIGxlc3MgdGhhbgog
ICAgIC8vIHRoZSB0aW1lIHRocmVzaG9sZCByZXF1aXJlZCB0aGVuIGl0IGlzIG5vdCBhZGRlZAog
ICAgIC8vIHRvIHRoZSB2aWRlbyBxdWV1ZSBhbmQgd29uJ3QgYmUgZGlzcGxheWVkLgogICAgIGlm
ICh0c3RhbXBfbXMgPCBhVGltZVRocmVzaG9sZCkgeworICAgICAgYURyb3BwZWRGcmFtZXMrKzsK
ICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAogICAgIHZweF9jb2RlY19pdGVyX3QgIGl0ZXIgPSBO
VUxMOwogICAgIHZweF9pbWFnZV90ICAgICAgKmltZzsKIAogICAgIHdoaWxlKChpbWcgPSB2cHhf
Y29kZWNfZ2V0X2ZyYW1lKCZtVlA4LCAmaXRlcikpKSB7CiAgICAgICBOU19BU1NFUlRJT04obUlu
Zm8ubVBpY3R1cmUud2lkdGggPT0gc3RhdGljX2Nhc3Q8UFJJbnQzMj4oaW1nLT5kX3cpLCAKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuaCBiL2NvbnRlbnQvbWVk
aWEvd2VibS9uc1dlYk1SZWFkZXIuaAppbmRleCAxN2Q1OTRhLi45ZGU0Y2I0IDEwMDY0NAotLS0g
YS9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNUmVhZGVyLmgKKysrIGIvY29udGVudC9tZWRpYS93
ZWJtL25zV2ViTVJlYWRlci5oCkBAIC0xMDQsMTcgKzEwNCwxOCBAQCBwdWJsaWM6CiAgIHZpcnR1
YWwgbnNyZXN1bHQgSW5pdCgpOwogICB2aXJ0dWFsIG5zcmVzdWx0IFJlc2V0RGVjb2RlKCk7CiAg
IHZpcnR1YWwgUFJCb29sIERlY29kZUF1ZGlvRGF0YSgpOwogCiAgIC8vIElmIHRoZSBUaGVvcmEg
Z3JhbnVsZXBvcyBoYXMgbm90IGJlZW4gY2FwdHVyZWQsIGl0IG1heSByZWFkIHNldmVyYWwgcGFj
a2V0cwogICAvLyB1bnRpbCBvbmUgd2l0aCBhIGdyYW51bGVwb3MgaGFzIGJlZW4gY2FwdHVyZWQs
IHRvIGVuc3VyZSB0aGF0IGFsbCBwYWNrZXRzCiAgIC8vIHJlYWQgaGF2ZSB2YWxpZCB0aW1lIGlu
Zm8uICAKICAgdmlydHVhbCBQUkJvb2wgRGVjb2RlVmlkZW9GcmFtZShQUkJvb2wgJmFLZXlmcmFt
ZVNraXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRo
cmVzaG9sZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGlt
ZVRocmVzaG9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAm
YURyb3BwZWRGcmFtZXMpOwogCiAgIHZpcnR1YWwgUFJCb29sIEhhc0F1ZGlvKCkKICAgewogICAg
IG1vemlsbGE6Ok1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKICAgICByZXR1cm4gbUhh
c0F1ZGlvOwogICB9CiAKICAgdmlydHVhbCBQUkJvb2wgSGFzVmlkZW8oKQpkaWZmIC0tZ2l0IGEv
ZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MTWVkaWFFbGVtZW50LmlkbCBiL2RvbS9pbnRl
cmZhY2VzL2h0bWwvbnNJRE9NSFRNTE1lZGlhRWxlbWVudC5pZGwKaW5kZXggYTVhOWVlNS4uMjE3
YzI1OSAxMDA2NDQKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MTWVkaWFFbGVt
ZW50LmlkbAorKysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxNZWRpYUVsZW1lbnQu
aWRsCkBAIC01MiwxNyArNTIsMTcgQEAKIAogLy8gdW5kZWYgdGhlIEdldEN1cnJlbnRUaW1lIG1h
Y3JvIGRlZmluZWQgaW4gV2luQmFzZS5oIGZyb20gdGhlIE1TIFBsYXRmb3JtIFNESwogJXtDKysK
ICNpZmRlZiBHZXRDdXJyZW50VGltZQogI3VuZGVmIEdldEN1cnJlbnRUaW1lCiAjZW5kaWYKICV9
CiAKLVtzY3JpcHRhYmxlLCB1dWlkKGI2YzlmNTFkLTIzN2MtNDRkMS04NDJkLTk5NmY0ZDYyYzg0
MyldCitbc2NyaXB0YWJsZSwgdXVpZCg5Mjk5OWQ1Ny1hYjlmLTQ3ZjItOTU2Ny03MjNmNDA5ZGMz
MTIpXQogaW50ZXJmYWNlIG5zSURPTUhUTUxNZWRpYUVsZW1lbnQgOiBuc0lET01IVE1MRWxlbWVu
dAogewogICAvLyBlcnJvciBzdGF0ZQogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NSFRNTE1l
ZGlhRXJyb3IgZXJyb3I7CiAKICAgLy8gbmV0d29yayBzdGF0ZQogICAgICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nIHNyYzsKICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBjdXJyZW50
U3JjOwpAQCAtMTAzLDkgKzEwMywxMiBAQCBpbnRlcmZhY2UgbnNJRE9NSFRNTE1lZGlhRWxlbWVu
dCA6IG5zSURPTUhUTUxFbGVtZW50CiAKICAgLy8gTW96aWxsYSBleHRlbnNpb246IGxvYWQgZGF0
YSBmcm9tIGFub3RoZXIgbWVkaWEgZWxlbWVudC4gVGhpcyBpcyBsaWtlCiAgIC8vIGxvYWQoKSBi
dXQgd2UgZG9uJ3QgcnVuIHRoZSByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtOyBpbnN0ZWFk
CiAgIC8vIHdlIGp1c3Qgc2V0IG91ciBzb3VyY2UgdG8gb3RoZXIncyBjdXJyZW50U3JjLiBUaGlz
IGlzIG9wdGltaXplZAogICAvLyBzbyB0aGF0IHRoaXMgZWxlbWVudCB3aWxsIGdldCBhY2Nlc3Mg
dG8gYWxsIG9mIG90aGVyJ3MgY2FjaGVkLwogICAvLyBidWZmZXJlZCBkYXRhLiBJbiBmYWN0IGFu
eSBmdXR1cmUgZGF0YSBkb3dubG9hZGVkIGJ5IHRoaXMgZWxlbWVudCBvcgogICAvLyBvdGhlciB3
aWxsIGJlIHNoYXJhYmxlIGJ5IGJvdGggZWxlbWVudHMuCiAgIHZvaWQgbW96TG9hZEZyb20oaW4g
bnNJRE9NSFRNTE1lZGlhRWxlbWVudCBvdGhlcik7CisKKyAgcmVhZG9ubHkgYXR0cmlidXRlIGZs
b2F0IG1vekRvd25sb2FkUmF0ZTsKKyAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IG1velBsYXli
YWNrUmF0ZTsKIH07CmRpZmYgLS1naXQgYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxW
aWRlb0VsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MVmlkZW9FbGVt
ZW50LmlkbAppbmRleCA2NzhlZGNkLi44Y2E5OGNkIDEwMDY0NAotLS0gYS9kb20vaW50ZXJmYWNl
cy9odG1sL25zSURPTUhUTUxWaWRlb0VsZW1lbnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0
bWwvbnNJRE9NSFRNTFZpZGVvRWxlbWVudC5pZGwKQEAgLTQzLDE4ICs0MywyMCBAQAogICogPHZp
ZGVvPiBlbGVtZW50LgogICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgaW50ZXJm
YWNlLCBwbGVhc2Ugc2VlCiAgKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMv
Y3VycmVudC13b3JrLyN2aWRlbwogICoKICAqIEBzdGF0dXMgVU5ERVJfREVWRUxPUE1FTlQKICAq
LwogCi1bc2NyaXB0YWJsZSwgdXVpZChlZGY0NjhkYy00MmViLTQ0OTQtOTIwYi01NmEzMTUxNzI2
NDApXQorW3NjcmlwdGFibGUsIHV1aWQoMzIyMzRiNmItZTBjNS00NTM5LThiMTctY2Y0NDAzNWI0
NTdhKV0KIGludGVyZmFjZSBuc0lET01IVE1MVmlkZW9FbGVtZW50IDogbnNJRE9NSFRNTE1lZGlh
RWxlbWVudAogewogICAgICAgICAgICBhdHRyaWJ1dGUgbG9uZyB3aWR0aDsgCiAgICAgICAgICAg
IGF0dHJpYnV0ZSBsb25nIGhlaWdodDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmcgdmlkZW9XaWR0aDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgdmlkZW9I
ZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgcG9zdGVyOworICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBtb3pGcmFtZUNvdW50OworICByZWFkb25seSBhdHRy
aWJ1dGUgdW5zaWduZWQgbG9uZyBtb3pEcm9wcGVkRnJhbWVzOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>465556</attachid>
            <date>2010-08-12 22:29:44 -0700</date>
            <delta_ts>2010-08-23 22:05:03 -0700</delta_ts>
            <desc>HTML file example to display dropped frames, download rate and other stats</desc>
            <filename>framecount.html</filename>
            <type>text/html</type>
            <size>1875</size>
            <attacher>cajbir.bugzilla</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgPGJvZHk+CiAgICA8cD5GcmFtZXJhdGUgaXM6IDxzcGFuIGlkPSJyYXRlIj4wPC9z
cGFuPjwvcD4KICAgIDxwPkRyb3BwZWQgZnJhbWVzOiA8c3BhbiBpZD0iZHJvcHBlZCI+MDwvc3Bh
bj48L3A+CiAgICA8cD5Eb3dubG9hZCByYXRlOiA8c3BhbiBpZD0iZG93bmxvYWQiPjA8L3NwYW4+
PC9wPgogICAgPHA+UGxheWJhY2sgcmF0ZTogPHNwYW4gaWQ9InBsYXliYWNrIj4wPC9zcGFuPjwv
cD4KIAoKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gCiAgICAgIHZhciB0aW1l
cyA9IFtdOwogICAgICB2YXIgcmF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYXRlJyk7
CiAgICAgIHZhciBpbnRlcnZhbCA9IDEwMDsKICAgICAgdmFyIHBlcmlvZCA9IDU7CiAgICAgIHZh
ciBpdGVtcyA9ICgxMDAwIC8gaW50ZXJ2YWwpICogcGVyaW9kOwogICAgICB2YXIgczsKICAgICAg
ZnVuY3Rpb24gdXBkYXRlUmF0ZSgpIHsKICAgICAgICB2YXIgdjEgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndjEnKTsKICAgICAgICB2YXIgZHJvcHBlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdkcm9wcGVkJyk7CiAgICAgICAgdmFyIHBsYXliYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3BsYXliYWNrJyk7CiAgICAgICAgdmFyIGRvd25sb2FkID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2Rvd25sb2FkJyk7CiAgICAgICAgZHJvcHBlZC5pbm5lckhUTUwgPSB2MS5tb3pE
cm9wcGVkRnJhbWVzOwogICAgICAgIHBsYXliYWNrLmlubmVySFRNTCA9IE1hdGgucm91bmQodjEu
bW96UGxheWJhY2tSYXRlKTsKICAgICAgICBkb3dubG9hZC5pbm5lckhUTUwgPSBNYXRoLnJvdW5k
KHYxLm1vekRvd25sb2FkUmF0ZSk7CgogICAgICAgIHRpbWVzLnB1c2goW25ldyBEYXRlKCksIHYx
Lm1vekZyYW1lQ291bnRdKTsKICAgICAgICBpZiAodGltZXMubGVuZ3RoID09IGl0ZW1zICsgMSkg
ewogICAgICAgICAgdmFyIHN0YXJ0ID0gdGltZXNbMF07CiAgICAgICAgICB2YXIgZW5kID0gdGlt
ZXNbdGltZXMubGVuZ3RoLTFdOwogICAgICAgICAgdmFyIGZyYW1lQ291bnQgPSBlbmRbMV0gLSBz
dGFydFsxXTsKICAgICAgICAgIHZhciB0aW1lID0gZW5kWzBdIC0gc3RhcnRbMF07CiAgICAgICAg
ICB2YXIgZnJhbWVyYXRlID0gZnJhbWVDb3VudCAvICh0aW1lLzEwMDApOyAKICAgICAgICAgIHJh
dGUuaW5uZXJIVE1MID0gTWF0aC5yb3VuZChmcmFtZXJhdGUqMTAwKS8xMDA7CiAgICAgICAgICB0
aW1lcyA9IHRpbWVzLnNsaWNlKDEpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgdGltZXI7
CiAgICAgIGZ1bmN0aW9uIHN0YXJ0RnJhbWVyYXRlKCkgewogICAgICAgIHMgPSBuZXcgRGF0ZSgp
OwogICAgICAgIHRpbWVyID0gc2V0SW50ZXJ2YWwodXBkYXRlUmF0ZSwgaW50ZXJ2YWwpOwogICAg
ICB9CiAgCiAgICAgIGZ1bmN0aW9uIHN0b3BGcmFtZXJhdGUoKSB7CiAgICAgICAgY2xlYXJJbnRl
cnZhbCh0aW1lcik7CiAgICAgICAgdmFyIGUgPSBuZXcgRGF0ZSgpOwogICAgICAgIHZhciB2MSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2MScpOwogICAgICAgIHJhdGUuaW5uZXJIVE1MID0g
djEubW96RnJhbWVDb3VudCAvICgoZS1zKS8xMDAwKTsKICAgICAgfQogICAgPC9zY3JpcHQ+Cgog
ICAgPHZpZGVvIGlkPSd2MScKICAgICAgICAgICBzcmM9J2h0dHA6Ly90aW55dmlkLnR2L2ZpbGUv
MThkMHQ2bjNrMjh3bC5vZ2cnCiAgICAgICAgICAgYXV0b3BsYXkKICAgICAgICAgICBvbnBsYXk9
InN0YXJ0RnJhbWVyYXRlKCkiCiAgICAgICAgICAgb25lbmRlZD0ic3RvcEZyYW1lcmF0ZSgpIgog
ICAgICAgICAgYXV0b3BsYXk+CiAgICA8L3ZpZGVvPiAKICA8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>468611</attachid>
            <date>2010-08-23 22:05:03 -0700</date>
            <delta_ts>2011-04-01 12:12:09 -0700</delta_ts>
            <desc>HTML file example to display dropped frames, download rate and other stats</desc>
            <filename>framecount.html</filename>
            <type>text/html</type>
            <size>1879</size>
            <attacher>cajbir.bugzilla</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgPGJvZHk+CiAgICA8cD5GcmFtZXJhdGUgaXM6IDxzcGFuIGlkPSJyYXRlIj4wPC9z
cGFuPjwvcD4KICAgIDxwPkRyb3BwZWQgZnJhbWVzOiA8c3BhbiBpZD0iZHJvcHBlZCI+MDwvc3Bh
bj48L3A+CiAgICA8cD5Eb3dubG9hZCByYXRlOiA8c3BhbiBpZD0iZG93bmxvYWQiPjA8L3NwYW4+
PC9wPgogICAgPHA+UGxheWJhY2sgcmF0ZTogPHNwYW4gaWQ9InBsYXliYWNrIj4wPC9zcGFuPjwv
cD4KIAoKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gCiAgICAgIHZhciB0aW1l
cyA9IFtdOwogICAgICB2YXIgcmF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYXRlJyk7
CiAgICAgIHZhciBpbnRlcnZhbCA9IDEwMDsKICAgICAgdmFyIHBlcmlvZCA9IDU7CiAgICAgIHZh
ciBpdGVtcyA9ICgxMDAwIC8gaW50ZXJ2YWwpICogcGVyaW9kOwogICAgICB2YXIgczsKICAgICAg
ZnVuY3Rpb24gdXBkYXRlUmF0ZSgpIHsKICAgICAgICB2YXIgdjEgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndjEnKTsKICAgICAgICB2YXIgZHJvcHBlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdkcm9wcGVkJyk7CiAgICAgICAgdmFyIHBsYXliYWNrID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3BsYXliYWNrJyk7CiAgICAgICAgdmFyIGRvd25sb2FkID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2Rvd25sb2FkJyk7CiAgICAgICAgZHJvcHBlZC5pbm5lckhUTUwgPSB2MS5tb3pE
cm9wcGVkRnJhbWVzOwogICAgICAgIHBsYXliYWNrLmlubmVySFRNTCA9IE1hdGgucm91bmQodjEu
bW96RGVjb2RlUmF0ZSk7CiAgICAgICAgZG93bmxvYWQuaW5uZXJIVE1MID0gTWF0aC5yb3VuZCh2
MS5tb3pEb3dubG9hZFJhdGUpOwoKICAgICAgICB0aW1lcy5wdXNoKFtuZXcgRGF0ZSgpLCB2MS5t
b3pEZWNvZGVkRnJhbWVzXSk7CiAgICAgICAgaWYgKHRpbWVzLmxlbmd0aCA9PSBpdGVtcyArIDEp
IHsKICAgICAgICAgIHZhciBzdGFydCA9IHRpbWVzWzBdOwogICAgICAgICAgdmFyIGVuZCA9IHRp
bWVzW3RpbWVzLmxlbmd0aC0xXTsKICAgICAgICAgIHZhciBmcmFtZUNvdW50ID0gZW5kWzFdIC0g
c3RhcnRbMV07CiAgICAgICAgICB2YXIgdGltZSA9IGVuZFswXSAtIHN0YXJ0WzBdOwogICAgICAg
ICAgdmFyIGZyYW1lcmF0ZSA9IGZyYW1lQ291bnQgLyAodGltZS8xMDAwKTsgCiAgICAgICAgICBy
YXRlLmlubmVySFRNTCA9IE1hdGgucm91bmQoZnJhbWVyYXRlKjEwMCkvMTAwOwogICAgICAgICAg
dGltZXMgPSB0aW1lcy5zbGljZSgxKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHRpbWVy
OwogICAgICBmdW5jdGlvbiBzdGFydEZyYW1lcmF0ZSgpIHsKICAgICAgICBzID0gbmV3IERhdGUo
KTsKICAgICAgICB0aW1lciA9IHNldEludGVydmFsKHVwZGF0ZVJhdGUsIGludGVydmFsKTsKICAg
ICAgfQogIAogICAgICBmdW5jdGlvbiBzdG9wRnJhbWVyYXRlKCkgewogICAgICAgIGNsZWFySW50
ZXJ2YWwodGltZXIpOwogICAgICAgIHZhciBlID0gbmV3IERhdGUoKTsKICAgICAgICB2YXIgdjEg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndjEnKTsKICAgICAgICByYXRlLmlubmVySFRNTCA9
IHYxLm1vekRlY29kZWRGcmFtZXMgLyAoKGUtcykvMTAwMCk7CiAgICAgIH0KICAgIDwvc2NyaXB0
PgoKICAgIDx2aWRlbyBpZD0ndjEnCiAgICAgICAgICAgc3JjPSdodHRwOi8vdGlueXZpZC50di9m
aWxlLzE4ZDB0Nm4zazI4d2wub2dnJwogICAgICAgICAgIGF1dG9wbGF5CiAgICAgICAgICAgb25w
bGF5PSJzdGFydEZyYW1lcmF0ZSgpIgogICAgICAgICAgIG9uZW5kZWQ9InN0b3BGcmFtZXJhdGUo
KSIKICAgICAgICAgIGF1dG9wbGF5PgogICAgPC92aWRlbz4gCiAgPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468612</attachid>
            <date>2010-08-23 22:05:47 -0700</date>
            <delta_ts>2010-08-23 22:13:58 -0700</delta_ts>
            <desc>Implements playback statistics on video and media elements</desc>
            <filename>stats.patch</filename>
            <type>text/plain</type>
            <size>24820</size>
            <attacher>cajbir.bugzilla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxNZWRpYUVsZW1lbnQu
Y3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5k
ZXggNDMxMmRiOC4uMDkxM2Q5NyAxMDA2NDQKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
SFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTM5NSwxNiArMzk1LDM2IEBAIE5TX0lOVEVSRkFDRV9N
QVBfQkVHSU5fQ1lDTEVfQ09MTEVDVElPTl9JTkhFUklURUQobnNIVE1MTWVkaWFFbGVtZW50KQog
TlNfSU5URVJGQUNFX01BUF9FTkRfSU5IRVJJVElORyhuc0dlbmVyaWNIVE1MRWxlbWVudCkKIAog
Ly8gbnNJRE9NSFRNTE1lZGlhRWxlbWVudAogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxNZWRpYUVs
ZW1lbnQsIFNyYywgc3JjKQogTlNfSU1QTF9CT09MX0FUVFIobnNIVE1MTWVkaWFFbGVtZW50LCBD
b250cm9scywgY29udHJvbHMpCiBOU19JTVBMX0JPT0xfQVRUUihuc0hUTUxNZWRpYUVsZW1lbnQs
IEF1dG9wbGF5LCBhdXRvcGxheSkKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MTWVkaWFFbGVt
ZW50LCBQcmVsb2FkLCBwcmVsb2FkKQogCisvKiByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgbW96
RG93bmxvYWRSYXRlOyAqLworTlNfSU1FVEhPRElNUCBuc0hUTUxNZWRpYUVsZW1lbnQ6OkdldE1v
ekRvd25sb2FkUmF0ZShmbG9hdCAqYU1vekRvd25sb2FkUmF0ZSkKK3sKKyAgbnNNZWRpYURlY29k
ZXI6OlN0YXRpc3RpY3Mgc3RhdHMgPSBtRGVjb2Rlci0+R2V0U3RhdGlzdGljcygpOworICAqYU1v
ekRvd25sb2FkUmF0ZSA9IHN0YXRzLm1Eb3dubG9hZFJhdGVSZWxpYWJsZSA/IAorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdHMubURvd25sb2FkUmF0ZSA6CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgIHJldHVybiBO
U19PSzsKK30KKworLyogcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IG1vekRlY29kZVJhdGU7ICov
CitOU19JTUVUSE9ESU1QIG5zSFRNTE1lZGlhRWxlbWVudDo6R2V0TW96RGVjb2RlUmF0ZShmbG9h
dCAqYU1vekRlY29kZVJhdGUpCit7CisgIG5zTWVkaWFEZWNvZGVyOjpTdGF0aXN0aWNzIHN0YXRz
ID0gbURlY29kZXItPkdldFN0YXRpc3RpY3MoKTsKKyAgKmFNb3pEZWNvZGVSYXRlID0gc3RhdHMu
bVBsYXliYWNrUmF0ZVJlbGlhYmxlID8gCisgICAgICAgICAgICAgICAgICAgICAgc3RhdHMubVBs
YXliYWNrUmF0ZSA6CisgICAgICAgICAgICAgICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OnF1aWV0X05hTigpOworICByZXR1cm4gTlNfT0s7Cit9CisKIC8qIHJlYWRvbmx5IGF0
dHJpYnV0ZSBuc0lET01IVE1MTWVkaWFFbGVtZW50IG1vekF1dG9wbGF5RW5hYmxlZDsgKi8KIE5T
X0lNRVRIT0RJTVAgbnNIVE1MTWVkaWFFbGVtZW50OjpHZXRNb3pBdXRvcGxheUVuYWJsZWQoUFJC
b29sICphQXV0b3BsYXlFbmFibGVkKQogewogICAqYUF1dG9wbGF5RW5hYmxlZCA9IG1BdXRvcGxh
eUVuYWJsZWQ7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCmRpZmYgLS1naXQgYS9jb250ZW50L2h0
bWwvY29udGVudC9zcmMvbnNIVE1MVmlkZW9FbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IDIwNjE1ZDkuLjhiZmI5N2YgMTAw
NjQ0Ci0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3Bw
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBA
IC05NSwxNiArOTUsMzAgQEAgTlNfSU1FVEhPRElNUCBuc0hUTUxWaWRlb0VsZW1lbnQ6OkdldFZp
ZGVvV2lkdGgoUFJVaW50MzIgKmFWaWRlb1dpZHRoKQogCiAvKiByZWFkb25seSBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyB2aWRlb0hlaWdodDsgKi8KIE5TX0lNRVRIT0RJTVAgbnNIVE1MVmlkZW9F
bGVtZW50OjpHZXRWaWRlb0hlaWdodChQUlVpbnQzMiAqYVZpZGVvSGVpZ2h0KQogewogICAqYVZp
ZGVvSGVpZ2h0ID0gbU1lZGlhU2l6ZS5oZWlnaHQgPT0gLTEgPyAwIDogbU1lZGlhU2l6ZS5oZWln
aHQ7CiAgIHJldHVybiBOU19PSzsKIH0KIAorLyogcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgbW96RGVjb2RlZEZyYW1lczsgKi8KK05TX0lNRVRIT0RJTVAgbnNIVE1MVmlkZW9FbGVt
ZW50OjpHZXRNb3pEZWNvZGVkRnJhbWVzKFBSVWludDMyICphTW96RGVjb2RlZEZyYW1lcykKK3sK
KyAgKmFNb3pEZWNvZGVkRnJhbWVzID0gbURlY29kZXIgPyBtRGVjb2Rlci0+R2V0RGVjb2RlZEZy
YW1lcygpIDogMDsKKyAgcmV0dXJuIE5TX09LOworfQorCisvKiByZWFkb25seSBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyBtb3pEcm9wcGVkRnJhbWVzOyAqLworTlNfSU1FVEhPRElNUCBuc0hUTUxW
aWRlb0VsZW1lbnQ6OkdldE1vekRyb3BwZWRGcmFtZXMoUFJVaW50MzIgKmFNb3pEcm9wcGVkRnJh
bWVzKQoreworICAqYU1vekRyb3BwZWRGcmFtZXMgPSBtRGVjb2RlciA/IG1EZWNvZGVyLT5HZXRE
cm9wcGVkRnJhbWVzKCkgOiAwOworICByZXR1cm4gTlNfT0s7Cit9CisKIG5zSFRNTFZpZGVvRWxl
bWVudDo6bnNIVE1MVmlkZW9FbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFO
b2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy
IGFGcm9tUGFyc2VyKQogICA6IG5zSFRNTE1lZGlhRWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFy
c2VyKQogewogfQogCiBuc0hUTUxWaWRlb0VsZW1lbnQ6On5uc0hUTUxWaWRlb0VsZW1lbnQoKQog
ewpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmNwcCBi
L2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5jcHAKaW5kZXggMGI4YzY4Yy4u
NTU2Yzk2MiAxMDA2NDQKLS0tIGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVy
LmNwcAorKysgYi9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuY3BwCkBAIC0z
MjAsMTcgKzMyMCwxOCBAQCBuc3Jlc3VsdCBuc0J1aWx0aW5EZWNvZGVyUmVhZGVyOjpEZWNvZGVU
b1RhcmdldChQUkludDY0IGFUYXJnZXQpCiB7CiAgIC8vIERlY29kZSBmb3J3YXJkIHRvIHRoZSB0
YXJnZXQgZnJhbWUuIFN0YXJ0IHdpdGggdmlkZW8sIGlmIHdlIGhhdmUgaXQuCiAgIGlmIChIYXNW
aWRlbygpKSB7CiAgICAgUFJCb29sIGVvZiA9IFBSX0ZBTFNFOwogICAgIFBSSW50NjQgc3RhcnRU
aW1lID0gLTE7CiAgICAgd2hpbGUgKEhhc1ZpZGVvKCkgJiYgIWVvZikgewogICAgICAgd2hpbGUg
KG1WaWRlb1F1ZXVlLkdldFNpemUoKSA9PSAwICYmICFlb2YpIHsKICAgICAgICAgUFJCb29sIHNr
aXAgPSBQUl9GQUxTRTsKLSAgICAgICAgZW9mID0gIURlY29kZVZpZGVvRnJhbWUoc2tpcCwgMCk7
CisgICAgICAgIFBSVWludDMyIGRyb3BwZWRGcmFtZXMgPSAwOworICAgICAgICBlb2YgPSAhRGVj
b2RlVmlkZW9GcmFtZShza2lwLCAwLCBkcm9wcGVkRnJhbWVzKTsKICAgICAgICAgewogICAgICAg
ICAgIE1vbml0b3JBdXRvRXhpdCBleGl0UmVhZGVyTW9uKG1Nb25pdG9yKTsKICAgICAgICAgICBN
b25pdG9yQXV0b0VudGVyIGRlY29kZXJNb24obURlY29kZXItPkdldE1vbml0b3IoKSk7CiAgICAg
ICAgICAgaWYgKG1EZWNvZGVyLT5HZXREZWNvZGVTdGF0ZSgpID09IG5zQnVpbHRpbkRlY29kZXJT
dGF0ZU1hY2hpbmU6OkRFQ09ERVJfU1RBVEVfU0hVVERPV04pIHsKICAgICAgICAgICAgIHJldHVy
biBOU19FUlJPUl9GQUlMVVJFOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpkaWZm
IC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmggYi9jb250ZW50
L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuaAppbmRleCA4YzhlYmVmLi4wNzhmNzFlIDEw
MDY0NAotLS0gYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuaAorKysgYi9j
b250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuaApAQCAtNDExLDE4ICs0MTEsMjEg
QEAgcHVibGljOgogICAvLyBpbiBtQXVkaW9RdWV1ZS4gUmV0dXJucyBQUl9UUlVFIHdoZW4gdGhl
cmUncyBtb3JlIGF1ZGlvIHRvIGRlY29kZSwKICAgLy8gUFJfRkFMU0UgaWYgdGhlIGF1ZGlvIGlz
IGZpbmlzaGVkLCBlbmQgb2YgZmlsZSBoYXMgYmVlbiByZWFjaGVkLAogICAvLyBvciBhbiB1bi1y
ZWNvdmVyYWJsZSByZWFkIGVycm9yIGhhcyBvY2N1cmVkLgogICB2aXJ0dWFsIFBSQm9vbCBEZWNv
ZGVBdWRpb0RhdGEoKSA9IDA7CiAKICAgLy8gUmVhZHMgYW5kIGRlY29kZXMgb25lIHZpZGVvIGZy
YW1lLiBQYWNrZXRzIHdpdGggYSB0aW1lc3RhbXAgbGVzcwogICAvLyB0aGFuIGFUaW1lVGhyZXNo
b2xkIHdpbGwgYmUgZGVjb2RlZCAodW5sZXNzIHRoZXkncmUgbm90IGtleWZyYW1lcwogICAvLyBh
bmQgYUtleWZyYW1lU2tpcCBpcyBQUl9UUlVFKSwgYnV0IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRo
ZSBxdWV1ZS4KKyAgLy8gJ2FEcm9wcGVkRnJhbWVzJyB3aWxsIGJlIGluY3JlbWVudGVkIGV2ZXJ5
dGltZSBhIHZpZGVvIGZyYW1lIGlzCisgIC8vIGRyb3BwZWQuCiAgIHZpcnR1YWwgUFJCb29sIERl
Y29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQpID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyICZhRHJvcHBlZEZyYW1lcykgPSAwOwog
CiAgIHZpcnR1YWwgUFJCb29sIEhhc0F1ZGlvKCkgPSAwOwogICB2aXJ0dWFsIFBSQm9vbCBIYXNW
aWRlbygpID0gMDsKIAogICAvLyBSZWFkIGhlYWRlciBkYXRhIGZvciBhbGwgYml0c3RyZWFtcyBp
biB0aGUgZmlsZS4gRmlsbHMgbUluZm8gd2l0aAogICAvLyB0aGUgZGF0YSByZXF1aXJlZCB0byBw
cmVzZW50IHRoZSBtZWRpYS4gUmV0dXJucyBOU19PSyBvbiBzdWNjZXNzLAogICAvLyBvciBOU19F
UlJPUl9GQUlMVVJFIG9uIGZhaWx1cmUuCiAgIHZpcnR1YWwgbnNyZXN1bHQgUmVhZE1ldGFkYXRh
KCkgPSAwOwpAQCAtNDc4LDE3ICs0ODEsMTggQEAgcHJvdGVjdGVkOgogICB0ZW1wbGF0ZTxjbGFz
cyBEYXRhPgogICBEYXRhKiBEZWNvZGVUb0ZpcnN0RGF0YShEZWNvZGVGbiBhRGVjb2RlRm4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhUXVldWU8RGF0YT4mIGFRdWV1ZSk7CiAKICAg
Ly8gV3JhcHBlciBzbyB0aGF0IERlY29kZVZpZGVvRnJhbWUoUFJCb29sJixQUkludDY0KSBjYW4g
YmUgY2FsbGVkIGZyb20KICAgLy8gRGVjb2RlVG9GaXJzdERhdGEoKS4KICAgUFJCb29sIERlY29k
ZVZpZGVvRnJhbWUoKSB7CiAgICAgUFJCb29sIGYgPSBQUl9GQUxTRTsKLSAgICByZXR1cm4gRGVj
b2RlVmlkZW9GcmFtZShmLCAwKTsKKyAgICBQUlVpbnQzMiBkcm9wcGVkRnJhbWVzID0gMDsKKyAg
ICByZXR1cm4gRGVjb2RlVmlkZW9GcmFtZShmLCAwLCBkcm9wcGVkRnJhbWVzKTsKICAgfQogCiAg
IC8vIEZpbGxzIGFSYW5nZXMgd2l0aCBCeXRlUmFuZ2VzIGRlbm90aW5nIHRoZSBzZWN0aW9ucyBv
ZiB0aGUgbWVkaWEgd2hpY2gKICAgLy8gaGF2ZSBiZWVuIGRvd25sb2FkZWQgYW5kIGFyZSBzdG9y
ZWQgaW4gdGhlIG1lZGlhIGNhY2hlLiBUaGUgcmVhZGVyCiAgIC8vIG1vbml0b3IgbXVzdCBtdXN0
IGJlIGhlbGQgd2l0aCBleGFjdGx5IG9uZSBsb2NrIGNvdW50LiBUaGUgbnNNZWRpYVN0cmVhbQog
ICAvLyBtdXN0IGJlIHBpbm5lZCB3aGlsZSBjYWxsaW5nIHRoaXMuCiAgIG5zcmVzdWx0IEdldEJ1
ZmZlcmVkQnl0ZXMobnNUQXJyYXk8Qnl0ZVJhbmdlPiYgYVJhbmdlcyk7CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5jcHAgYi9jb250ZW50
L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUuY3BwCmluZGV4IDgwMjIwYjMuLjdk
MGQyM2MgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFj
aGluZS5jcHAKKysrIGIvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5l
LmNwcApAQCAtMjQ5LDE5ICsyNDksMjEgQEAgdm9pZCBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNo
aW5lOjpEZWNvZGVMb29wKCkKICAgICBpZiAoYXVkaW9QdW1wICYmIGF1ZGlvRGVjb2RlZCA+IGF1
ZGlvUHVtcFRocmVzaG9sZE1zKSB7CiAgICAgICBhdWRpb1B1bXAgPSBQUl9GQUxTRTsKICAgICB9
CiAgICAgaWYgKCFhdWRpb1B1bXAgJiYgYXVkaW9QbGF5aW5nICYmIGF1ZGlvRGVjb2RlZCA8IExP
V19BVURJT19NUykgewogICAgICAgc2tpcFRvTmV4dEtleWZyYW1lID0gUFJfVFJVRTsKICAgICB9
CiAKICAgICBpZiAodmlkZW9QbGF5aW5nICYmICF2aWRlb1dhaXQpIHsKLSAgICAgIHZpZGVvUGxh
eWluZyA9IG1SZWFkZXItPkRlY29kZVZpZGVvRnJhbWUoc2tpcFRvTmV4dEtleWZyYW1lLCBjdXJy
ZW50VGltZSk7CisgICAgICBQUlVpbnQzMiBkcm9wcGVkRnJhbWVzID0gMDsKKyAgICAgIHZpZGVv
UGxheWluZyA9IG1SZWFkZXItPkRlY29kZVZpZGVvRnJhbWUoc2tpcFRvTmV4dEtleWZyYW1lLCBj
dXJyZW50VGltZSwgZHJvcHBlZEZyYW1lcyk7CiAgICAgICB7CiAgICAgICAgIE1vbml0b3JBdXRv
RW50ZXIgbW9uKG1EZWNvZGVyLT5HZXRNb25pdG9yKCkpOworICAgICAgICBtRGVjb2Rlci0+Tm90
aWZ5RHJvcHBlZEZyYW1lcyhkcm9wcGVkRnJhbWVzKTsKICAgICAgICAgaWYgKG1EZWNvZGVyLT5t
RGVjb2RlclBvc2l0aW9uID4gaW5pdGlhbERvd25sb2FkUG9zaXRpb24pIHsKICAgICAgICAgICBt
QnVmZmVyRXhoYXVzdGVkID0gUFJfVFJVRTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KICAg
ICB7CiAgICAgICBNb25pdG9yQXV0b0VudGVyIG1vbihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsK
ICAgICAgIGluaXRpYWxEb3dubG9hZFBvc2l0aW9uID0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVk
aWEvbnNNZWRpYURlY29kZXIuY3BwIGIvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5jcHAK
aW5kZXggODBiMzRjOS4uYWJlYzRmMyAxMDA2NDQKLS0tIGEvY29udGVudC9tZWRpYS9uc01lZGlh
RGVjb2Rlci5jcHAKKysrIGIvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5jcHAKQEAgLTcy
LDE2ICs3MiwxOCBAQCBuc01lZGlhRGVjb2Rlcjo6bnNNZWRpYURlY29kZXIoKSA6CiAgIG1FbGVt
ZW50KDApLAogICBtUkdCV2lkdGgoLTEpLAogICBtUkdCSGVpZ2h0KC0xKSwKICAgbVByb2dyZXNz
VGltZSgpLAogICBtRGF0YVRpbWUoKSwKICAgbVZpZGVvVXBkYXRlTG9jayhuc251bGwpLAogICBt
UGl4ZWxBc3BlY3RSYXRpbygxLjApLAogICBtUGlubmVkRm9yU2VlayhQUl9GQUxTRSksCisgIG1E
ZWNvZGVEZWNvZGVkRnJhbWVzKDApLAorICBtRGVjb2RlRHJvcHBlZEZyYW1lcygwKSwKICAgbVNp
emVDaGFuZ2VkKFBSX0ZBTFNFKSwKICAgbVNodXR0aW5nRG93bihQUl9GQUxTRSkKIHsKICAgTU9a
X0NPVU5UX0NUT1IobnNNZWRpYURlY29kZXIpOwogfQogCiBuc01lZGlhRGVjb2Rlcjo6fm5zTWVk
aWFEZWNvZGVyKCkKIHsKQEAgLTIzMywxNiArMjM1LDE3IEBAIHZvaWQgbnNNZWRpYURlY29kZXI6
OlNldFZpZGVvRGF0YShjb25zdCBnZnhJbnRTaXplJiBhU2l6ZSwKICAgICAgIG1QaXhlbEFzcGVj
dFJhdGlvICE9IGFQaXhlbEFzcGVjdFJhdGlvKSB7CiAgICAgbVJHQldpZHRoID0gYVNpemUud2lk
dGg7CiAgICAgbVJHQkhlaWdodCA9IGFTaXplLmhlaWdodDsKICAgICBtUGl4ZWxBc3BlY3RSYXRp
byA9IGFQaXhlbEFzcGVjdFJhdGlvOwogICAgIG1TaXplQ2hhbmdlZCA9IFBSX1RSVUU7CiAgIH0K
ICAgaWYgKG1JbWFnZUNvbnRhaW5lciAmJiBhSW1hZ2UpIHsKICAgICBtSW1hZ2VDb250YWluZXIt
PlNldEN1cnJlbnRJbWFnZShhSW1hZ2UpOworICAgIG1EZWNvZGVEZWNvZGVkRnJhbWVzKys7CiAg
IH0KIH0KIAogdm9pZCBuc01lZGlhRGVjb2Rlcjo6UGluRm9yU2VlaygpCiB7CiAgIG5zTWVkaWFT
dHJlYW0qIHN0cmVhbSA9IEdldEN1cnJlbnRTdHJlYW0oKTsKICAgaWYgKCFzdHJlYW0gfHwgbVBp
bm5lZEZvclNlZWspIHsKICAgICByZXR1cm47CkBAIC0yNzQsOCArMjc3LDUwIEBAIFBSQm9vbCBu
c01lZGlhRGVjb2Rlcjo6Q2FuUGxheVRocm91Z2goKQogICB9CiAgIFBSSW50NjQgYnl0ZXNUb0Rv
d25sb2FkID0gc3RhdHMubVRvdGFsQnl0ZXMgLSBzdGF0cy5tRG93bmxvYWRQb3NpdGlvbjsKICAg
UFJJbnQ2NCBieXRlc1RvUGxheWJhY2sgPSBzdGF0cy5tVG90YWxCeXRlcyAtIHN0YXRzLm1QbGF5
YmFja1Bvc2l0aW9uOwogICBkb3VibGUgdGltZVRvRG93bmxvYWQgPQogICAgIChieXRlc1RvRG93
bmxvYWQgKyBnRG93bmxvYWRTaXplU2FmZXR5TWFyZ2luKS9zdGF0cy5tRG93bmxvYWRSYXRlOwog
ICBkb3VibGUgdGltZVRvUGxheSA9IGJ5dGVzVG9QbGF5YmFjay9zdGF0cy5tUGxheWJhY2tSYXRl
OwogICByZXR1cm4gdGltZVRvRG93bmxvYWQgPD0gdGltZVRvUGxheTsKIH0KKworUFJVaW50MzIg
bnNNZWRpYURlY29kZXI6OkdldERlY29kZWRGcmFtZXMoKQoreworICByZXR1cm4gbURlY29kZURl
Y29kZWRGcmFtZXM7Cit9CisKK1BSVWludDMyIG5zTWVkaWFEZWNvZGVyOjpHZXREcm9wcGVkRnJh
bWVzKCkKK3sKKyAgcmV0dXJuIG1EZWNvZGVEcm9wcGVkRnJhbWVzOworfQorCit2b2lkIG5zTWVk
aWFEZWNvZGVyOjpJbmNyZW1lbnREcm9wcGVkRnJhbWVzKFBSVWludDMyIGFEcm9wcGVkRnJhbWVz
KQoreworICBOU19BU1NFUlRJT04oTlNfSXNNYWluVGhyZWFkKCksICJEb24ndCBjYWxsIG9uIG5v
bi1tYWluIHRocmVhZCIpOworCisgIG1EZWNvZGVEcm9wcGVkRnJhbWVzICs9IGFEcm9wcGVkRnJh
bWVzOworfQorCisvLyBBbiBldmVudCB0byB1cGRhdGUgdGhlIGRyb3BwZWQgZnJhbWVzIGNvdW50
IG9uIHRoZSBtYWluIHRocmVhZAorY2xhc3MgRHJvcHBlZEZyYW1lcyA6IHB1YmxpYyBuc1J1bm5h
YmxlIHsKK3B1YmxpYzoKKyAgRHJvcHBlZEZyYW1lcyhuc01lZGlhRGVjb2RlciogYURlY29kZXIs
IFBSVWludDMyIGFEcm9wcGVkRnJhbWVzKSA6CisgICAgbURlY29kZXIoYURlY29kZXIpLCBtRHJv
cHBlZEZyYW1lcyhhRHJvcHBlZEZyYW1lcykge30KKyAgTlNfSU1FVEhPRCBSdW4oKSB7CisgICAg
bURlY29kZXItPkluY3JlbWVudERyb3BwZWRGcmFtZXMobURyb3BwZWRGcmFtZXMpOworICAgIHJl
dHVybiBOU19PSzsKKyAgfQorcHJpdmF0ZToKKyAgbnNSZWZQdHI8bnNNZWRpYURlY29kZXI+IG1E
ZWNvZGVyOworICBQUlVpbnQzMiAgICAgICAgICAgICAgICAgbURyb3BwZWRGcmFtZXM7Cit9Owor
Cit2b2lkIG5zTWVkaWFEZWNvZGVyOjpOb3RpZnlEcm9wcGVkRnJhbWVzKFBSVWludDMyIGFEcm9w
cGVkRnJhbWVzKQoreworICBOU19BU1NFUlRJT04oIU5TX0lzTWFpblRocmVhZCgpLCAiRG9uJ3Qg
Y2FsbCBvbiBtYWluIHRocmVhZCIpOworCisgIGlmIChhRHJvcHBlZEZyYW1lcyA+IDApIHsKKyAg
ICBuc0NPTVB0cjxuc0lSdW5uYWJsZT4gZXZlbnQgPSBuZXcgRHJvcHBlZEZyYW1lcyh0aGlzLCBh
RHJvcHBlZEZyYW1lcyk7CisgICAgTlNfRGlzcGF0Y2hUb01haW5UaHJlYWQoZXZlbnQsIE5TX0RJ
U1BBVENIX05PUk1BTCk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc01l
ZGlhRGVjb2Rlci5oIGIvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5oCmluZGV4IDk0ZTBh
NzIuLmZhMjM0YmMgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvbnNNZWRpYURlY29kZXIuaAor
KysgYi9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmgKQEAgLTI0MCwxNiArMjQwLDMyIEBA
IHB1YmxpYzoKICAgLy8gQ29uc3RydWN0cyB0aGUgdGltZSByYW5nZXMgcmVwcmVzZW50aW5nIHdo
YXQgc2VnbWVudHMgb2YgdGhlIG1lZGlhCiAgIC8vIGFyZSBidWZmZXJlZCBhbmQgcGxheWFibGUu
CiAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0QnVmZmVyZWQobnNIVE1MVGltZVJhbmdlcyogYUJ1ZmZl
cmVkKSA9IDA7CiAKICAgLy8gUmV0dXJucyBQUl9UUlVFIGlmIHdlIGNhbiBwbGF5IHRoZSBlbnRp
cmUgbWVkaWEgdGhyb3VnaCB3aXRob3V0IHN0b3BwaW5nCiAgIC8vIHRvIGJ1ZmZlciwgZ2l2ZW4g
dGhlIGN1cnJlbnQgZG93bmxvYWQgYW5kIHBsYXliYWNrIHJhdGVzLgogICBQUkJvb2wgQ2FuUGxh
eVRocm91Z2goKTsKIAorICAvLyBSZXR1cm4gdGhlIGNvdW50IG9mIGZyYW1lcyB0aGF0IGhhdmUg
YmVlbiBkZWNvZGVkCisgIFBSVWludDMyIEdldERlY29kZWRGcmFtZXMoKTsKKworICAvLyBSZXR1
cm4gdGhlIGNvdW50IG9mIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkCisgIFBSVWludDMy
IEdldERyb3BwZWRGcmFtZXMoKTsKKworICAvLyBJbmNyZW1lbnQgdGhlIGRyb3BwZWQgZnJhbWUg
Y291bnQgYnkgdGhlIGdpdmVuIGFtb3VudC4gVGhpcyBtdXN0CisgIC8vIG9ubHkgYmUgY2FsbGVk
IG9uIHRoZSBtYWluIHRocmVhZC4gdXNlICdOb3RpZnlEcm9wcGVkRnJhbWVzJyB0bworICAvLyBp
bmNyZW1lbnQgZHJvcHBlZCBmcmFtZXMgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgdm9pZCBJbmNy
ZW1lbnREcm9wcGVkRnJhbWVzKFBSVWludDMyIGFEcm9wcGVkRnJhbWVzKTsKKworICAvLyBSYWlz
ZXMgYW4gZXZlbnQgdGhhdCBpcyBkaXNwYXRjaGVkIHRvIHRoZSBtYWluIHRocmVhZCB0byBpbmNy
ZW1lbnQKKyAgLy8gdGhlIG51bWJlciBvZiBkcm9wcGVkIGZyYW1lcy4gRG8gbm90IGNhbGwgb24g
dGhlIG1haW4gdGhyZWFkICh1c2UKKyAgLy8gSW5jcmVtZW50RHJvcHBlZEZyYW1lcyBpbnN0ZWFk
KS4KKyAgdm9pZCBOb3RpZnlEcm9wcGVkRnJhbWVzKFBSVWludDMyIGFEcm9wcGVkRnJhbWVzKTsK
KwogcHJvdGVjdGVkOgogCiAgIC8vIFN0YXJ0IHRpbWVyIHRvIHVwZGF0ZSBkb3dubG9hZCBwcm9n
cmVzcyBpbmZvcm1hdGlvbi4KICAgbnNyZXN1bHQgU3RhcnRQcm9ncmVzcygpOwogCiAgIC8vIFN0
b3AgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gdGltZXIuCiAgIG5zcmVzdWx0IFN0b3BQcm9ncmVzcygp
OwogCkBAIC0yOTcsMTYgKzMxMywyNCBAQCBwcm90ZWN0ZWQ6CiAKICAgLy8gUGl4ZWwgYXNwZWN0
IHJhdGlvIChyYXRpbyBvZiB0aGUgcGl4ZWwgd2lkdGggdG8gcGl4ZWwgaGVpZ2h0KQogICBmbG9h
dCBtUGl4ZWxBc3BlY3RSYXRpbzsKIAogICAvLyBQUl9UUlVFIHdoZW4gb3VyIG1lZGlhIHN0cmVh
bSBoYXMgYmVlbiBwaW5uZWQuIFdlIHBpbiB0aGUgc3RyZWFtCiAgIC8vIHdoaWxlIHNlZWtpbmcu
CiAgIFBSUGFja2VkQm9vbCBtUGlubmVkRm9yU2VlazsKIAorICAvLyBBIGNvdW50IG9mIHRoZSBu
dW1iZXIgb2YgZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIGRlY29kZWQgYW5kIHJlYWR5CisgIC8vIHRv
IGJlIGRpc3BsYXllZC4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgY29tcHV0aW5nIHRoZSBkZWNvZGlu
ZyBmcmFtZXJhdGUKKyAgUFJVaW50MzIgbURlY29kZURlY29kZWRGcmFtZXM7CisKKyAgLy8gQSBj
b3VudCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGZvciBw
ZXJmb3JtYW5jZQorICAvLyByZWFzb25zIGR1cmluZyBwbGF5YmFjay4KKyAgUFJVaW50MzIgbURl
Y29kZURyb3BwZWRGcmFtZXM7CisKICAgLy8gSGFzIG91ciBzaXplIGNoYW5nZWQgc2luY2UgdGhl
IGxhc3QgcmVwYWludD8KICAgUFJQYWNrZWRCb29sIG1TaXplQ2hhbmdlZDsKIAogICAvLyBUcnVl
IGlmIHRoZSBkZWNvZGVyIGlzIGJlaW5nIHNodXRkb3duLiBBdCB0aGlzIHBvaW50IGFsbCBldmVu
dHMgdGhhdAogICAvLyBhcmUgY3VycmVudGx5IHF1ZXVlZCBuZWVkIHRvIHJldHVybiBpbW1lZGlh
dGVseSB0byBwcmV2ZW50IGphdmFzY3JpcHQKICAgLy8gYmVpbmcgcnVuIHRoYXQgb3BlcmF0ZXMg
b24gdGhlIGVsZW1lbnQgYW5kIGRlY29kZXIgZHVyaW5nIHNodXRkb3duLgogICAvLyBSZWFkL1dy
aXRlIGZyb20gdGhlIG1haW4gdGhyZWFkIG9ubHkuCiAgIFBSUGFja2VkQm9vbCBtU2h1dHRpbmdE
b3duOwpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwIGIvY29u
dGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwCmluZGV4IGIyYTRhZDMuLjc1NGVhYzIgMTAw
NjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmNwcAorKysgYi9jb250ZW50
L21lZGlhL29nZy9uc09nZ1JlYWRlci5jcHAKQEAgLTU2NSwxNyArNTY1LDE4IEBAIG5zcmVzdWx0
IG5zT2dnUmVhZGVyOjpEZWNvZGVUaGVvcmEobnNUQXJyYXk8VmlkZW9EYXRhKj4mIGFGcmFtZXMs
CiAgICAgICByZXR1cm4gTlNfRVJST1JfT1VUX09GX01FTU9SWTsKICAgICB9CiAgICAgYUZyYW1l
cy5BcHBlbmRFbGVtZW50KHYpOwogICB9CiAgIHJldHVybiBOU19PSzsKIH0KIAogUFJCb29sIG5z
T2dnUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hv
bGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgJmFEcm9w
cGVkRnJhbWVzKQogewogICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAgIE5TX0FT
U0VSVElPTihtRGVjb2Rlci0+T25TdGF0ZU1hY2hpbmVUaHJlYWQoKSB8fCBtRGVjb2Rlci0+T25E
ZWNvZGVUaHJlYWQoKSwKICAgICAgICAgICAgICAgICJTaG91bGQgYmUgb24gc3RhdGUgbWFjaGlu
ZSBvciBBViB0aHJlYWQuIik7CiAgIC8vIFdlIGNob3NlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIFRo
ZW9yYSBncmFudWxlcG9zIG91cnNlbHZlcywgcmF0aGVyIHRoYW4KICAgLy8gcmVseSBvbiB0aF9k
ZWNvZGVfcGFja2V0aW4oKSB0byBkbyBpdCBmb3IgdXMuIFRoaXMgaXMgYmVjYXVzZQogICAvLyB0
aF9kZWNvZGVfcGFja2V0aW4oKSBzaW1wbHkgd29ya3MgYnkgaW5jcmVtZW50aW5nIGEgY291bnRl
ciBldmVyeSB0aW1lCiAgIC8vIGl0J3MgY2FsbGVkLCBzbyBpZiB3ZSBkcm9wIGZyYW1lcyBhbmQg
ZG9uJ3QgY2FsbCBpdCwgc3Vic2VxdWVudCBncmFudWxlcG9zCkBAIC03MjMsMjkgKzcyNCwzMyBA
QCBQUkJvb2wgbnNPZ2dSZWFkZXI6OkRlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVT
a2lwLAogICAgIGlmICghYUtleWZyYW1lU2tpcCB8fAogICAgICAgICAodGhfcGFja2V0X2lza2V5
ZnJhbWUoJnBhY2tldCkgPT0gMSAmJiB0aW1lID49IGFUaW1lVGhyZXNob2xkKSkKICAgICB7CiAg
ICAgICBpZiAoRGVjb2RlVGhlb3JhKGZyYW1lcywgJnBhY2tldCkgPT0gTlNfRVJST1JfT1VUX09G
X01FTU9SWSkgewogICAgICAgICBOU19XQVJOSU5HKCJUaGVvcmEgZGVjb2RlIG1lbW9yeSBhbGxv
Y2F0aW9uIGZhaWx1cmUiKTsKICAgICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgICAgfQogICAg
IH0KKyAgICBlbHNlIHsKKyAgICAgIGFEcm9wcGVkRnJhbWVzKys7CisgICAgfQogICB9CiAKICAg
Ly8gUHVzaCBkZWNvZGVkIGRhdGEgaW50byB0aGUgdmlkZW8gZnJhbWUgcXVldWUuCiAgIGZvciAo
UFJVaW50MzIgaSA9IDA7IGkgPCBmcmFtZXMuTGVuZ3RoKCk7IGkrKykgewogICAgIG5zQXV0b1B0
cjxWaWRlb0RhdGE+IGRhdGEoZnJhbWVzW2ldKTsKICAgICBpZiAoIWFLZXlmcmFtZVNraXAgfHwg
KGFLZXlmcmFtZVNraXAgJiYgZnJhbWVzW2ldLT5tS2V5ZnJhbWUpKSB7CiAgICAgICBtVmlkZW9R
dWV1ZS5QdXNoKGRhdGEuZm9yZ2V0KCkpOwogICAgICAgaWYgKGFLZXlmcmFtZVNraXAgJiYgZnJh
bWVzW2ldLT5tS2V5ZnJhbWUpIHsKICAgICAgICAgYUtleWZyYW1lU2tpcCA9IFBSX0ZBTFNFOwog
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBmcmFtZXNbaV0gPSBuc251bGw7CiAgICAgICBk
YXRhID0gbnNudWxsOworICAgICAgYURyb3BwZWRGcmFtZXMrKzsKICAgICB9CiAgIH0KIAogICBp
ZiAoZW5kT2ZTdHJlYW0pIHsKICAgICAvLyBXZSd2ZSBlbmNvdW50ZXJlZCBhbiBlbmQgb2YgYml0
c3RyZWFtIHBhY2tldC4gSW5mb3JtIHRoZSBxdWV1ZSB0aGF0CiAgICAgLy8gdGhlcmUgd2lsbCBi
ZSBubyBtb3JlIGZyYW1lcy4KICAgICBtVmlkZW9RdWV1ZS5GaW5pc2goKTsKICAgfQpAQCAtMTEw
OSwxNyArMTExNCwxOCBAQCBuc3Jlc3VsdCBuc09nZ1JlYWRlcjo6U2Vla0luQnVmZmVyZWRSYW5n
ZShQUkludDY0IGFUYXJnZXQsCiAgICAgcmV0dXJuIHJlczsKICAgfQogCiAgIC8vIFdlIGhhdmUg
YW4gYWN0aXZlIFRoZW9yYSBiaXRzdHJlYW0uIERlY29kZSB0aGUgbmV4dCBUaGVvcmEgZnJhbWUs
IGFuZAogICAvLyBleHRyYWN0IGl0cyBrZXlmcmFtZSdzIHRpbWUuCiAgIFBSQm9vbCBlb2Y7CiAg
IGRvIHsKICAgICBQUkJvb2wgc2tpcCA9IFBSX0ZBTFNFOwotICAgIGVvZiA9ICFEZWNvZGVWaWRl
b0ZyYW1lKHNraXAsIDApOworICAgIFBSVWludDMyIGRyb3BwZWRGcmFtZXMgPSAwOworICAgIGVv
ZiA9ICFEZWNvZGVWaWRlb0ZyYW1lKHNraXAsIDAsIGRyb3BwZWRGcmFtZXMpOwogICAgIHsKICAg
ICAgIE1vbml0b3JBdXRvRXhpdCBleGl0UmVhZGVyTW9uKG1Nb25pdG9yKTsKICAgICAgIE1vbml0
b3JBdXRvRW50ZXIgZGVjb2Rlck1vbihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsKICAgICAgIGlm
IChtRGVjb2Rlci0+R2V0RGVjb2RlU3RhdGUoKSA9PSBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNo
aW5lOjpERUNPREVSX1NUQVRFX1NIVVRET1dOKSB7CiAgICAgICAgIHJldHVybiBOU19FUlJPUl9G
QUlMVVJFOwogICAgICAgfQogICAgIH0KICAgfSB3aGlsZSAoIWVvZiAmJgpkaWZmIC0tZ2l0IGEv
Y29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuaCBiL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dn
UmVhZGVyLmgKaW5kZXggOTVlY2Q2ZC4uZGY2YzA4NSAxMDA2NDQKLS0tIGEvY29udGVudC9tZWRp
YS9vZ2cvbnNPZ2dSZWFkZXIuaAorKysgYi9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRlci5o
CkBAIC02MCwxNyArNjAsMTggQEAgcHVibGljOgogICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQoKTsK
ICAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldERlY29kZSgpOwogICB2aXJ0dWFsIFBSQm9vbCBEZWNv
ZGVBdWRpb0RhdGEoKTsKIAogICAvLyBJZiB0aGUgVGhlb3JhIGdyYW51bGVwb3MgaGFzIG5vdCBi
ZWVuIGNhcHR1cmVkLCBpdCBtYXkgcmVhZCBzZXZlcmFsIHBhY2tldHMKICAgLy8gdW50aWwgb25l
IHdpdGggYSBncmFudWxlcG9zIGhhcyBiZWVuIGNhcHR1cmVkLCB0byBlbnN1cmUgdGhhdCBhbGwg
cGFja2V0cwogICAvLyByZWFkIGhhdmUgdmFsaWQgdGltZSBpbmZvLiAgCiAgIHZpcnR1YWwgUFJC
b29sIERlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgJmFEcm9wcGVkRnJhbWVzKTsKIAog
ICB2aXJ0dWFsIFZpZGVvRGF0YSogRmluZFN0YXJ0VGltZShQUkludDY0IGFPZmZzZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQmIGFPdXRTdGFydFRpbWUpOwog
CiAgIC8vIEdldCB0aGUgZW5kIHRpbWUgb2YgYUVuZE9mZnNldC4gVGhpcyBpcyB0aGUgcGxheWJh
Y2sgcG9zaXRpb24gd2UnZCByZWFjaAogICAvLyBhZnRlciBwbGF5YmFjayBmaW5pc2hlZCBhdCBh
RW5kT2Zmc2V0LgogICB2aXJ0dWFsIFBSSW50NjQgRmluZEVuZFRpbWUoUFJJbnQ2NCBhRW5kT2Zm
c2V0KTsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuY3BwIGIv
Y29udGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuY3BwCmluZGV4IDliZjZmY2EuLjkxZTg3NTQg
MTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVyLmNwcAorKysgYi9jb250
ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5jcHAKQEAgLTE2MywxNyArMTYzLDE4IEBAIFBSQm9v
bCBuc1Jhd1JlYWRlcjo6UmVhZEZyb21TdHJlYW0obnNNZWRpYVN0cmVhbSAqYVN0cmVhbSwgUFJV
aW50OCogYUJ1ZiwKICAgICBhTGVuZ3RoIC09IGJ5dGVzUmVhZDsKICAgICBhQnVmICs9IGJ5dGVz
UmVhZDsKICAgfQogCiAgIHJldHVybiBQUl9UUlVFOwogfQogCiBQUkJvb2wgbnNSYXdSZWFkZXI6
OkRlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAmYURyb3BwZWRGcmFtZXMp
CiB7CiAgIG1vemlsbGE6Ok1vbml0b3JBdXRvRW50ZXIgYXV0b0VudGVyKG1Nb25pdG9yKTsKICAg
TlNfQVNTRVJUSU9OKG1EZWNvZGVyLT5PblN0YXRlTWFjaGluZVRocmVhZCgpIHx8IG1EZWNvZGVy
LT5PbkRlY29kZVRocmVhZCgpLAogICAgICAgICAgICAgICAgIlNob3VsZCBiZSBvbiBzdGF0ZSBt
YWNoaW5lIHRocmVhZCBvciBkZWNvZGUgdGhyZWFkLiIpOwogCiAgIGlmICghbUZyYW1lU2l6ZSkK
ICAgICByZXR1cm4gUFJfRkFMU0U7IC8vIE1ldGFkYXRhIHJlYWQgZmFpbGVkLiAgV2Ugc2hvdWxk
IHJlZnVzZSB0byBwbGF5LgogCkBAIC0xOTksMTYgKzIwMCwxNyBAQCBQUkJvb2wgbnNSYXdSZWFk
ZXI6OkRlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAogICAgICAgcmV0dXJu
IFBSX0ZBTFNFOwogICAgIH0KIAogICAgIGlmIChjdXJyZW50RnJhbWVUaW1lID49IGFUaW1lVGhy
ZXNob2xkKQogICAgICAgYnJlYWs7CiAKICAgICBtQ3VycmVudEZyYW1lKys7CiAgICAgY3VycmVu
dEZyYW1lVGltZSArPSAxMDAwLjAgLyBtRnJhbWVSYXRlOworICAgIGFEcm9wcGVkRnJhbWVzKys7
CiAgIH0KIAogICBWaWRlb0RhdGE6OllDYkNyQnVmZmVyIGI7CiAgIGIubVBsYW5lc1swXS5tRGF0
YSA9IGJ1ZmZlcjsKICAgYi5tUGxhbmVzWzBdLm1TdHJpZGUgPSBtTWV0YWRhdGEuZnJhbWVXaWR0
aCAqIG1NZXRhZGF0YS5sdW1hQ2hhbm5lbEJwcCAvIDguMDsKICAgYi5tUGxhbmVzWzBdLm1IZWln
aHQgPSBtTWV0YWRhdGEuZnJhbWVIZWlnaHQ7CiAgIGIubVBsYW5lc1swXS5tV2lkdGggPSBtTWV0
YWRhdGEuZnJhbWVXaWR0aDsKIApAQCAtMjY0LDE3ICsyNjYsMTggQEAgbnNyZXN1bHQgbnNSYXdS
ZWFkZXI6OlNlZWsoUFJJbnQ2NCBhVGltZSwgUFJJbnQ2NCBhU3RhcnRUaW1lLCBQUkludDY0IGFF
bmRUaW1lLAogCiAgIG5zcmVzdWx0IHJ2ID0gc3RyZWFtLT5TZWVrKG5zSVNlZWthYmxlU3RyZWFt
OjpOU19TRUVLX1NFVCwgb2Zmc2V0KTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAog
ICBtVmlkZW9RdWV1ZS5FcmFzZSgpOwogCiAgIHdoaWxlKG1WaWRlb1F1ZXVlLkdldFNpemUoKSA9
PSAwKSB7CiAgICAgUFJCb29sIGtleWZyYW1lU2tpcCA9IFBSX0ZBTFNFOwotICAgIGlmICghRGVj
b2RlVmlkZW9GcmFtZShrZXlmcmFtZVNraXAsIDApKSB7CisgICAgUFJVaW50MzIgZHJvcHBlZEZy
YW1lcyA9IDA7CisgICAgaWYgKCFEZWNvZGVWaWRlb0ZyYW1lKGtleWZyYW1lU2tpcCwgMCwgZHJv
cHBlZEZyYW1lcykpIHsKICAgICAgIG1DdXJyZW50RnJhbWUgPSBmcmFtZTsKICAgICAgIHJldHVy
biBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAogICAgIHsKICAgICAgIG1vemlsbGE6Ok1vbml0
b3JBdXRvRXhpdCBhdXRvTW9uaXRvckV4aXQobU1vbml0b3IpOwogICAgICAgbW96aWxsYTo6TW9u
aXRvckF1dG9FbnRlciBhdXRvTW9uaXRvcihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsKICAgICAg
IGlmIChtRGVjb2Rlci0+R2V0RGVjb2RlU3RhdGUoKSA9PQpkaWZmIC0tZ2l0IGEvY29udGVudC9t
ZWRpYS9yYXcvbnNSYXdSZWFkZXIuaCBiL2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVyLmgK
aW5kZXggZGI1NjE4Yi4uNTRmMTUyMSAxMDA2NDQKLS0tIGEvY29udGVudC9tZWRpYS9yYXcvbnNS
YXdSZWFkZXIuaAorKysgYi9jb250ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5oCkBAIC05Mywx
NyArOTMsMTggQEAgcHVibGljOgogICBuc1Jhd1JlYWRlcihuc0J1aWx0aW5EZWNvZGVyKiBhRGVj
b2Rlcik7CiAgIH5uc1Jhd1JlYWRlcigpOwogCiAgIHZpcnR1YWwgbnNyZXN1bHQgSW5pdCgpOwog
ICB2aXJ0dWFsIG5zcmVzdWx0IFJlc2V0RGVjb2RlKCk7CiAgIHZpcnR1YWwgUFJCb29sIERlY29k
ZUF1ZGlvRGF0YSgpOwogCiAgIHZpcnR1YWwgUFJCb29sIERlY29kZVZpZGVvRnJhbWUoUFJCb29s
ICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50
NjQgYVRpbWVUaHJlc2hvbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
SW50NjQgYVRpbWVUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJVaW50MzIgJmFEcm9wcGVkRnJhbWVzKTsKIAogICB2aXJ0dWFsIFBSQm9vbCBIYXNBdWRpbygp
CiAgIHsKICAgICByZXR1cm4gUFJfRkFMU0U7CiAgIH0KIAogICB2aXJ0dWFsIFBSQm9vbCBIYXNW
aWRlbygpCiAgIHsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIu
Y3BwIGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAKaW5kZXggOGFhMmE4Zi4u
NjU3OTc2ZCAxMDA2NDQKLS0tIGEvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAK
KysrIGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAKQEAgLTUzNCwxNyArNTM0
LDE4IEBAIFBSQm9vbCBuc1dlYk1SZWFkZXI6OkRlY29kZUF1ZGlvRGF0YSgpCiAgICAgbUF1ZGlv
UXVldWUuRmluaXNoKCk7CiAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICB9CiAKICAgcmV0dXJuIERl
Y29kZUF1ZGlvUGFja2V0KHBhY2tldCk7CiB9CiAKIFBSQm9vbCBuc1dlYk1SZWFkZXI6OkRlY29k
ZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAmYURyb3BwZWRGcmFtZXMpCiB7
CiAgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKICAgTlNfQVNTRVJUSU9OKG1EZWNv
ZGVyLT5PblN0YXRlTWFjaGluZVRocmVhZCgpIHx8IG1EZWNvZGVyLT5PbkRlY29kZVRocmVhZCgp
LAogICAgICAgICAgICAgICAgIlNob3VsZCBiZSBvbiBzdGF0ZSBtYWNoaW5lIG9yIGRlY29kZSB0
aHJlYWQuIik7CiAgIGludCByID0gMDsKICAgbmVzdGVnZ19wYWNrZXQqIHBhY2tldCA9IE5leHRQ
YWNrZXQoVklERU8pOwogCiAgIGlmICghcGFja2V0KSB7CkBAIC02MDYsMzIgKzYwNywzNCBAQCBQ
UkJvb2wgbnNXZWJNUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tp
cCwKICAgICB9CiAKICAgICB2cHhfY29kZWNfc3RyZWFtX2luZm9fdCBzaTsKICAgICBtZW1zZXQo
JnNpLCAwLCBzaXplb2Yoc2kpKTsKICAgICBzaS5zeiA9IHNpemVvZihzaSk7CiAgICAgdnB4X2Nv
ZGVjX3BlZWtfc3RyZWFtX2luZm8oJnZweF9jb2RlY192cDhfZHhfYWxnbywgZGF0YSwgbGVuZ3Ro
LCAmc2kpOwogICAgIGlmICgoYUtleWZyYW1lU2tpcCAmJiAhc2kuaXNfa2YpIHx8IChhS2V5ZnJh
bWVTa2lwICYmIHNpLmlzX2tmICYmIHRzdGFtcF9tcyA8IGFUaW1lVGhyZXNob2xkKSkgewogICAg
ICAgYUtleWZyYW1lU2tpcCA9IFBSX1RSVUU7CisgICAgICBhRHJvcHBlZEZyYW1lcysrOwogICAg
ICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKGFLZXlmcmFtZVNraXAgJiYgc2kuaXNfa2YpIHsK
ICAgICAgIGFLZXlmcmFtZVNraXAgPSBQUl9GQUxTRTsKICAgICB9CiAKICAgICBpZih2cHhfY29k
ZWNfZGVjb2RlKCZtVlA4LCBkYXRhLCBsZW5ndGgsIE5VTEwsIDApKSB7CiAgICAgICBuZXN0ZWdn
X2ZyZWVfcGFja2V0KHBhY2tldCk7CiAgICAgICByZXR1cm4gUFJfRkFMU0U7CiAgICAgfQogCiAg
ICAgLy8gSWYgdGhlIHRpbWVzdGFtcCBvZiB0aGUgdmlkZW8gZnJhbWUgaXMgbGVzcyB0aGFuCiAg
ICAgLy8gdGhlIHRpbWUgdGhyZXNob2xkIHJlcXVpcmVkIHRoZW4gaXQgaXMgbm90IGFkZGVkCiAg
ICAgLy8gdG8gdGhlIHZpZGVvIHF1ZXVlIGFuZCB3b24ndCBiZSBkaXNwbGF5ZWQuCiAgICAgaWYg
KHRzdGFtcF9tcyA8IGFUaW1lVGhyZXNob2xkKSB7CisgICAgICBhRHJvcHBlZEZyYW1lcysrOwog
ICAgICAgY29udGludWU7CiAgICAgfQogCiAgICAgdnB4X2NvZGVjX2l0ZXJfdCAgaXRlciA9IE5V
TEw7CiAgICAgdnB4X2ltYWdlX3QgICAgICAqaW1nOwogCiAgICAgd2hpbGUoKGltZyA9IHZweF9j
b2RlY19nZXRfZnJhbWUoJm1WUDgsICZpdGVyKSkpIHsKICAgICAgIE5TX0FTU0VSVElPTihtSW5m
by5tUGljdHVyZS53aWR0aCA9PSBzdGF0aWNfY2FzdDxQUkludDMyPihpbWctPmRfdyksIApkaWZm
IC0tZ2l0IGEvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5oIGIvY29udGVudC9tZWRp
YS93ZWJtL25zV2ViTVJlYWRlci5oCmluZGV4IGUxMjUxMjYuLmEyNmRiODMgMTAwNjQ0Ci0tLSBh
L2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuaAorKysgYi9jb250ZW50L21lZGlhL3dl
Ym0vbnNXZWJNUmVhZGVyLmgKQEAgLTEwNCwxNyArMTA0LDE4IEBAIHB1YmxpYzoKICAgdmlydHVh
bCBuc3Jlc3VsdCBJbml0KCk7CiAgIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXREZWNvZGUoKTsKICAg
dmlydHVhbCBQUkJvb2wgRGVjb2RlQXVkaW9EYXRhKCk7CiAKICAgLy8gSWYgdGhlIFRoZW9yYSBn
cmFudWxlcG9zIGhhcyBub3QgYmVlbiBjYXB0dXJlZCwgaXQgbWF5IHJlYWQgc2V2ZXJhbCBwYWNr
ZXRzCiAgIC8vIHVudGlsIG9uZSB3aXRoIGEgZ3JhbnVsZXBvcyBoYXMgYmVlbiBjYXB0dXJlZCwg
dG8gZW5zdXJlIHRoYXQgYWxsIHBhY2tldHMKICAgLy8gcmVhZCBoYXZlIHZhbGlkIHRpbWUgaW5m
by4gIAogICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1l
U2tpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhy
ZXNob2xkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1l
VGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyICZh
RHJvcHBlZEZyYW1lcyk7CiAKICAgdmlydHVhbCBQUkJvb2wgSGFzQXVkaW8oKQogICB7CiAgICAg
bW96aWxsYTo6TW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICAgIHJldHVybiBtSGFz
QXVkaW87CiAgIH0KIAogICB2aXJ0dWFsIFBSQm9vbCBIYXNWaWRlbygpCmRpZmYgLS1naXQgYS9k
b20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxNZWRpYUVsZW1lbnQuaWRsIGIvZG9tL2ludGVy
ZmFjZXMvaHRtbC9uc0lET01IVE1MTWVkaWFFbGVtZW50LmlkbAppbmRleCA5Zjg1MGYwLi4yMDJh
MmRjIDEwMDY0NAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxNZWRpYUVsZW1l
bnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTE1lZGlhRWxlbWVudC5p
ZGwKQEAgLTUyLDE3ICs1MiwxNyBAQAogCiAvLyB1bmRlZiB0aGUgR2V0Q3VycmVudFRpbWUgbWFj
cm8gZGVmaW5lZCBpbiBXaW5CYXNlLmggZnJvbSB0aGUgTVMgUGxhdGZvcm0gU0RLCiAle0MrKwog
I2lmZGVmIEdldEN1cnJlbnRUaW1lCiAjdW5kZWYgR2V0Q3VycmVudFRpbWUKICNlbmRpZgogJX0K
IAotW3NjcmlwdGFibGUsIHV1aWQoZjc0OGI3ZGItNGFiOS00MzcwLTgzNWQtNTlmMzBjOGRlNTdj
KV0KK1tzY3JpcHRhYmxlLCB1dWlkKDkyOTk5ZDU3LWFiOWYtNDdmMi05NTY3LTcyM2Y0MDlkYzMx
MildCiBpbnRlcmZhY2UgbnNJRE9NSFRNTE1lZGlhRWxlbWVudCA6IG5zSURPTUhUTUxFbGVtZW50
CiB7CiAgIC8vIGVycm9yIHN0YXRlCiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01IVE1MTWVk
aWFFcnJvciBlcnJvcjsKIAogICAvLyBuZXR3b3JrIHN0YXRlCiAgICAgICAgICAgIGF0dHJpYnV0
ZSBET01TdHJpbmcgc3JjOwogICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGN1cnJlbnRT
cmM7CkBAIC0xMDMsOSArMTAzLDIwIEBAIGludGVyZmFjZSBuc0lET01IVE1MTWVkaWFFbGVtZW50
IDogbnNJRE9NSFRNTEVsZW1lbnQKIAogICAvLyBNb3ppbGxhIGV4dGVuc2lvbjogbG9hZCBkYXRh
IGZyb20gYW5vdGhlciBtZWRpYSBlbGVtZW50LiBUaGlzIGlzIGxpa2UKICAgLy8gbG9hZCgpIGJ1
dCB3ZSBkb24ndCBydW4gdGhlIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG07IGluc3RlYWQK
ICAgLy8gd2UganVzdCBzZXQgb3VyIHNvdXJjZSB0byBvdGhlcidzIGN1cnJlbnRTcmMuIFRoaXMg
aXMgb3B0aW1pemVkCiAgIC8vIHNvIHRoYXQgdGhpcyBlbGVtZW50IHdpbGwgZ2V0IGFjY2VzcyB0
byBhbGwgb2Ygb3RoZXIncyBjYWNoZWQvCiAgIC8vIGJ1ZmZlcmVkIGRhdGEuIEluIGZhY3QgYW55
IGZ1dHVyZSBkYXRhIGRvd25sb2FkZWQgYnkgdGhpcyBlbGVtZW50IG9yCiAgIC8vIG90aGVyIHdp
bGwgYmUgc2hhcmFibGUgYnkgYm90aCBlbGVtZW50cy4KICAgdm9pZCBtb3pMb2FkRnJvbShpbiBu
c0lET01IVE1MTWVkaWFFbGVtZW50IG90aGVyKTsKKworICAvLyBUaGUgYXBwcm94aW1hdGUgcmF0
ZSBhdCB3aGljaCB0aGUgbWVkaWEgcmVzb3VyY2UgaXMgYmVpbmcgZG93bmxvYWRlZCBpbgorICAv
LyBraWxvYnl0ZXMgcGVyIHNlY29uZC4gSWYgdGhlIHJhdGUgaXMgbm90IGF2YWlsYWJsZSAocG9z
c2libHkgZHVlCisgIC8vIHRvIG5vdCBoYXZpbmcgZG93bmxvYWRlZCBlbm91Z2ggZGF0YSB0byBj
b21wdXRlIGEgY29uc2lzdGVudCB2YWx1ZSkKKyAgLy8gdGhpcyB3aWxsIGJlIE5hTi4KKyAgcmVh
ZG9ubHkgYXR0cmlidXRlIGZsb2F0IG1vekRvd25sb2FkUmF0ZTsKKworICAvLyBUaGUgYXBwcm94
aW1hdGUgcmF0ZSBhdCB3aGljaCB0aGUgbWVkaWEgcmVzb3VyY2UgaXMgYmVpbmcgZGVjb2RlZCBp
bgorICAvLyBraWxvYnl0ZXMgcGVyIHNlY29uZC4gSWYgdGhlIHJhdGUgaXMgbm90IGF2YWlsYWJs
ZSB0aGlzIHdpbGwgYmUKKyAgLy8gTmFOLgorICByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgbW96
RGVjb2RlUmF0ZTsKIH07CmRpZmYgLS1naXQgYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhU
TUxWaWRlb0VsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MVmlkZW9F
bGVtZW50LmlkbAppbmRleCA2NzhlZGNkLi4xMTZiNmU3IDEwMDY0NAotLS0gYS9kb20vaW50ZXJm
YWNlcy9odG1sL25zSURPTUhUTUxWaWRlb0VsZW1lbnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2Vz
L2h0bWwvbnNJRE9NSFRNTFZpZGVvRWxlbWVudC5pZGwKQEAgLTQzLDE4ICs0MywyNiBAQAogICog
PHZpZGVvPiBlbGVtZW50LgogICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgaW50
ZXJmYWNlLCBwbGVhc2Ugc2VlCiAgKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFw
cHMvY3VycmVudC13b3JrLyN2aWRlbwogICoKICAqIEBzdGF0dXMgVU5ERVJfREVWRUxPUE1FTlQK
ICAqLwogCi1bc2NyaXB0YWJsZSwgdXVpZChlZGY0NjhkYy00MmViLTQ0OTQtOTIwYi01NmEzMTUx
NzI2NDApXQorW3NjcmlwdGFibGUsIHV1aWQoMzIyMzRiNmItZTBjNS00NTM5LThiMTctY2Y0NDAz
NWI0NTdhKV0KIGludGVyZmFjZSBuc0lET01IVE1MVmlkZW9FbGVtZW50IDogbnNJRE9NSFRNTE1l
ZGlhRWxlbWVudAogewogICAgICAgICAgICBhdHRyaWJ1dGUgbG9uZyB3aWR0aDsgCiAgICAgICAg
ICAgIGF0dHJpYnV0ZSBsb25nIGhlaWdodDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgdmlkZW9XaWR0aDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgdmlk
ZW9IZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgcG9zdGVyOworCisgIC8v
IEEgY291bnQgb2YgdGhlIG51bWJlciBvZiBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gZGVjb2RlZCBh
bmQgcmVhZHkKKyAgLy8gdG8gYmUgZGlzcGxheWVkLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBjb21w
dXRpbmcgdGhlIGRlY29kaW5nIGZyYW1lcmF0ZQorICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBtb3pEZWNvZGVkRnJhbWVzOworCisgIC8vIEEgY291bnQgb2YgdGhlIG51bWJlciBv
ZiBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBmb3IgcGVyZm9ybWFuY2UKKyAgLy8gcmVh
c29ucyBkdXJpbmcgcGxheWJhY2suCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IG1vekRyb3BwZWRGcmFtZXM7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>468617</attachid>
            <date>2010-08-23 22:13:58 -0700</date>
            <delta_ts>2010-12-07 13:23:52 -0800</delta_ts>
            <desc>Implements playback statistics on video and media elements</desc>
            <filename>stats.patch</filename>
            <type>text/plain</type>
            <size>24812</size>
            <attacher>cajbir.bugzilla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxNZWRpYUVsZW1lbnQu
Y3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5k
ZXggNDMxMmRiOC4uMDkxM2Q5NyAxMDA2NDQKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
SFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTM5NSwxNiArMzk1LDM2IEBAIE5TX0lOVEVSRkFDRV9N
QVBfQkVHSU5fQ1lDTEVfQ09MTEVDVElPTl9JTkhFUklURUQobnNIVE1MTWVkaWFFbGVtZW50KQog
TlNfSU5URVJGQUNFX01BUF9FTkRfSU5IRVJJVElORyhuc0dlbmVyaWNIVE1MRWxlbWVudCkKIAog
Ly8gbnNJRE9NSFRNTE1lZGlhRWxlbWVudAogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxNZWRpYUVs
ZW1lbnQsIFNyYywgc3JjKQogTlNfSU1QTF9CT09MX0FUVFIobnNIVE1MTWVkaWFFbGVtZW50LCBD
b250cm9scywgY29udHJvbHMpCiBOU19JTVBMX0JPT0xfQVRUUihuc0hUTUxNZWRpYUVsZW1lbnQs
IEF1dG9wbGF5LCBhdXRvcGxheSkKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MTWVkaWFFbGVt
ZW50LCBQcmVsb2FkLCBwcmVsb2FkKQogCisvKiByZWFkb25seSBhdHRyaWJ1dGUgZmxvYXQgbW96
RG93bmxvYWRSYXRlOyAqLworTlNfSU1FVEhPRElNUCBuc0hUTUxNZWRpYUVsZW1lbnQ6OkdldE1v
ekRvd25sb2FkUmF0ZShmbG9hdCAqYU1vekRvd25sb2FkUmF0ZSkKK3sKKyAgbnNNZWRpYURlY29k
ZXI6OlN0YXRpc3RpY3Mgc3RhdHMgPSBtRGVjb2Rlci0+R2V0U3RhdGlzdGljcygpOworICAqYU1v
ekRvd25sb2FkUmF0ZSA9IHN0YXRzLm1Eb3dubG9hZFJhdGVSZWxpYWJsZSA/IAorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdHMubURvd25sb2FkUmF0ZSA6CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgIHJldHVybiBO
U19PSzsKK30KKworLyogcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IG1vekRlY29kZVJhdGU7ICov
CitOU19JTUVUSE9ESU1QIG5zSFRNTE1lZGlhRWxlbWVudDo6R2V0TW96RGVjb2RlUmF0ZShmbG9h
dCAqYU1vekRlY29kZVJhdGUpCit7CisgIG5zTWVkaWFEZWNvZGVyOjpTdGF0aXN0aWNzIHN0YXRz
ID0gbURlY29kZXItPkdldFN0YXRpc3RpY3MoKTsKKyAgKmFNb3pEZWNvZGVSYXRlID0gc3RhdHMu
bVBsYXliYWNrUmF0ZVJlbGlhYmxlID8gCisgICAgICAgICAgICAgICAgICAgICAgc3RhdHMubVBs
YXliYWNrUmF0ZSA6CisgICAgICAgICAgICAgICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OnF1aWV0X05hTigpOworICByZXR1cm4gTlNfT0s7Cit9CisKIC8qIHJlYWRvbmx5IGF0
dHJpYnV0ZSBuc0lET01IVE1MTWVkaWFFbGVtZW50IG1vekF1dG9wbGF5RW5hYmxlZDsgKi8KIE5T
X0lNRVRIT0RJTVAgbnNIVE1MTWVkaWFFbGVtZW50OjpHZXRNb3pBdXRvcGxheUVuYWJsZWQoUFJC
b29sICphQXV0b3BsYXlFbmFibGVkKQogewogICAqYUF1dG9wbGF5RW5hYmxlZCA9IG1BdXRvcGxh
eUVuYWJsZWQ7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCmRpZmYgLS1naXQgYS9jb250ZW50L2h0
bWwvY29udGVudC9zcmMvbnNIVE1MVmlkZW9FbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IDIwNjE1ZDkuLjhiZmI5N2YgMTAw
NjQ0Ci0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3Bw
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBA
IC05NSwxNiArOTUsMzAgQEAgTlNfSU1FVEhPRElNUCBuc0hUTUxWaWRlb0VsZW1lbnQ6OkdldFZp
ZGVvV2lkdGgoUFJVaW50MzIgKmFWaWRlb1dpZHRoKQogCiAvKiByZWFkb25seSBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyB2aWRlb0hlaWdodDsgKi8KIE5TX0lNRVRIT0RJTVAgbnNIVE1MVmlkZW9F
bGVtZW50OjpHZXRWaWRlb0hlaWdodChQUlVpbnQzMiAqYVZpZGVvSGVpZ2h0KQogewogICAqYVZp
ZGVvSGVpZ2h0ID0gbU1lZGlhU2l6ZS5oZWlnaHQgPT0gLTEgPyAwIDogbU1lZGlhU2l6ZS5oZWln
aHQ7CiAgIHJldHVybiBOU19PSzsKIH0KIAorLyogcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgbW96RGVjb2RlZEZyYW1lczsgKi8KK05TX0lNRVRIT0RJTVAgbnNIVE1MVmlkZW9FbGVt
ZW50OjpHZXRNb3pEZWNvZGVkRnJhbWVzKFBSVWludDMyICphTW96RGVjb2RlZEZyYW1lcykKK3sK
KyAgKmFNb3pEZWNvZGVkRnJhbWVzID0gbURlY29kZXIgPyBtRGVjb2Rlci0+R2V0RGVjb2RlZEZy
YW1lcygpIDogMDsKKyAgcmV0dXJuIE5TX09LOworfQorCisvKiByZWFkb25seSBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyBtb3pEcm9wcGVkRnJhbWVzOyAqLworTlNfSU1FVEhPRElNUCBuc0hUTUxW
aWRlb0VsZW1lbnQ6OkdldE1vekRyb3BwZWRGcmFtZXMoUFJVaW50MzIgKmFNb3pEcm9wcGVkRnJh
bWVzKQoreworICAqYU1vekRyb3BwZWRGcmFtZXMgPSBtRGVjb2RlciA/IG1EZWNvZGVyLT5HZXRE
cm9wcGVkRnJhbWVzKCkgOiAwOworICByZXR1cm4gTlNfT0s7Cit9CisKIG5zSFRNTFZpZGVvRWxl
bWVudDo6bnNIVE1MVmlkZW9FbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFO
b2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy
IGFGcm9tUGFyc2VyKQogICA6IG5zSFRNTE1lZGlhRWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFy
c2VyKQogewogfQogCiBuc0hUTUxWaWRlb0VsZW1lbnQ6On5uc0hUTUxWaWRlb0VsZW1lbnQoKQog
ewpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmNwcCBi
L2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5jcHAKaW5kZXggMGI4YzY4Yy4u
NTU2Yzk2MiAxMDA2NDQKLS0tIGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVy
LmNwcAorKysgYi9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuY3BwCkBAIC0z
MjAsMTcgKzMyMCwxOCBAQCBuc3Jlc3VsdCBuc0J1aWx0aW5EZWNvZGVyUmVhZGVyOjpEZWNvZGVU
b1RhcmdldChQUkludDY0IGFUYXJnZXQpCiB7CiAgIC8vIERlY29kZSBmb3J3YXJkIHRvIHRoZSB0
YXJnZXQgZnJhbWUuIFN0YXJ0IHdpdGggdmlkZW8sIGlmIHdlIGhhdmUgaXQuCiAgIGlmIChIYXNW
aWRlbygpKSB7CiAgICAgUFJCb29sIGVvZiA9IFBSX0ZBTFNFOwogICAgIFBSSW50NjQgc3RhcnRU
aW1lID0gLTE7CiAgICAgd2hpbGUgKEhhc1ZpZGVvKCkgJiYgIWVvZikgewogICAgICAgd2hpbGUg
KG1WaWRlb1F1ZXVlLkdldFNpemUoKSA9PSAwICYmICFlb2YpIHsKICAgICAgICAgUFJCb29sIHNr
aXAgPSBQUl9GQUxTRTsKLSAgICAgICAgZW9mID0gIURlY29kZVZpZGVvRnJhbWUoc2tpcCwgMCk7
CisgICAgICAgIFBSVWludDMyIGRyb3BwZWRGcmFtZXMgPSAwOworICAgICAgICBlb2YgPSAhRGVj
b2RlVmlkZW9GcmFtZShza2lwLCAwLCBkcm9wcGVkRnJhbWVzKTsKICAgICAgICAgewogICAgICAg
ICAgIE1vbml0b3JBdXRvRXhpdCBleGl0UmVhZGVyTW9uKG1Nb25pdG9yKTsKICAgICAgICAgICBN
b25pdG9yQXV0b0VudGVyIGRlY29kZXJNb24obURlY29kZXItPkdldE1vbml0b3IoKSk7CiAgICAg
ICAgICAgaWYgKG1EZWNvZGVyLT5HZXREZWNvZGVTdGF0ZSgpID09IG5zQnVpbHRpbkRlY29kZXJT
dGF0ZU1hY2hpbmU6OkRFQ09ERVJfU1RBVEVfU0hVVERPV04pIHsKICAgICAgICAgICAgIHJldHVy
biBOU19FUlJPUl9GQUlMVVJFOwogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQpkaWZm
IC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmggYi9jb250ZW50
L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuaAppbmRleCA4YzhlYmVmLi4wNzhmNzFlIDEw
MDY0NAotLS0gYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuaAorKysgYi9j
b250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuaApAQCAtNDExLDE4ICs0MTEsMjEg
QEAgcHVibGljOgogICAvLyBpbiBtQXVkaW9RdWV1ZS4gUmV0dXJucyBQUl9UUlVFIHdoZW4gdGhl
cmUncyBtb3JlIGF1ZGlvIHRvIGRlY29kZSwKICAgLy8gUFJfRkFMU0UgaWYgdGhlIGF1ZGlvIGlz
IGZpbmlzaGVkLCBlbmQgb2YgZmlsZSBoYXMgYmVlbiByZWFjaGVkLAogICAvLyBvciBhbiB1bi1y
ZWNvdmVyYWJsZSByZWFkIGVycm9yIGhhcyBvY2N1cmVkLgogICB2aXJ0dWFsIFBSQm9vbCBEZWNv
ZGVBdWRpb0RhdGEoKSA9IDA7CiAKICAgLy8gUmVhZHMgYW5kIGRlY29kZXMgb25lIHZpZGVvIGZy
YW1lLiBQYWNrZXRzIHdpdGggYSB0aW1lc3RhbXAgbGVzcwogICAvLyB0aGFuIGFUaW1lVGhyZXNo
b2xkIHdpbGwgYmUgZGVjb2RlZCAodW5sZXNzIHRoZXkncmUgbm90IGtleWZyYW1lcwogICAvLyBh
bmQgYUtleWZyYW1lU2tpcCBpcyBQUl9UUlVFKSwgYnV0IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRo
ZSBxdWV1ZS4KKyAgLy8gJ2FEcm9wcGVkRnJhbWVzJyB3aWxsIGJlIGluY3JlbWVudGVkIGV2ZXJ5
dGltZSBhIHZpZGVvIGZyYW1lIGlzCisgIC8vIGRyb3BwZWQuCiAgIHZpcnR1YWwgUFJCb29sIERl
Y29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQpID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyICZhRHJvcHBlZEZyYW1lcykgPSAwOwog
CiAgIHZpcnR1YWwgUFJCb29sIEhhc0F1ZGlvKCkgPSAwOwogICB2aXJ0dWFsIFBSQm9vbCBIYXNW
aWRlbygpID0gMDsKIAogICAvLyBSZWFkIGhlYWRlciBkYXRhIGZvciBhbGwgYml0c3RyZWFtcyBp
biB0aGUgZmlsZS4gRmlsbHMgbUluZm8gd2l0aAogICAvLyB0aGUgZGF0YSByZXF1aXJlZCB0byBw
cmVzZW50IHRoZSBtZWRpYS4gUmV0dXJucyBOU19PSyBvbiBzdWNjZXNzLAogICAvLyBvciBOU19F
UlJPUl9GQUlMVVJFIG9uIGZhaWx1cmUuCiAgIHZpcnR1YWwgbnNyZXN1bHQgUmVhZE1ldGFkYXRh
KCkgPSAwOwpAQCAtNDc4LDE3ICs0ODEsMTggQEAgcHJvdGVjdGVkOgogICB0ZW1wbGF0ZTxjbGFz
cyBEYXRhPgogICBEYXRhKiBEZWNvZGVUb0ZpcnN0RGF0YShEZWNvZGVGbiBhRGVjb2RlRm4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhUXVldWU8RGF0YT4mIGFRdWV1ZSk7CiAKICAg
Ly8gV3JhcHBlciBzbyB0aGF0IERlY29kZVZpZGVvRnJhbWUoUFJCb29sJixQUkludDY0KSBjYW4g
YmUgY2FsbGVkIGZyb20KICAgLy8gRGVjb2RlVG9GaXJzdERhdGEoKS4KICAgUFJCb29sIERlY29k
ZVZpZGVvRnJhbWUoKSB7CiAgICAgUFJCb29sIGYgPSBQUl9GQUxTRTsKLSAgICByZXR1cm4gRGVj
b2RlVmlkZW9GcmFtZShmLCAwKTsKKyAgICBQUlVpbnQzMiBkcm9wcGVkRnJhbWVzID0gMDsKKyAg
ICByZXR1cm4gRGVjb2RlVmlkZW9GcmFtZShmLCAwLCBkcm9wcGVkRnJhbWVzKTsKICAgfQogCiAg
IC8vIEZpbGxzIGFSYW5nZXMgd2l0aCBCeXRlUmFuZ2VzIGRlbm90aW5nIHRoZSBzZWN0aW9ucyBv
ZiB0aGUgbWVkaWEgd2hpY2gKICAgLy8gaGF2ZSBiZWVuIGRvd25sb2FkZWQgYW5kIGFyZSBzdG9y
ZWQgaW4gdGhlIG1lZGlhIGNhY2hlLiBUaGUgcmVhZGVyCiAgIC8vIG1vbml0b3IgbXVzdCBtdXN0
IGJlIGhlbGQgd2l0aCBleGFjdGx5IG9uZSBsb2NrIGNvdW50LiBUaGUgbnNNZWRpYVN0cmVhbQog
ICAvLyBtdXN0IGJlIHBpbm5lZCB3aGlsZSBjYWxsaW5nIHRoaXMuCiAgIG5zcmVzdWx0IEdldEJ1
ZmZlcmVkQnl0ZXMobnNUQXJyYXk8Qnl0ZVJhbmdlPiYgYVJhbmdlcyk7CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5jcHAgYi9jb250ZW50
L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUuY3BwCmluZGV4IDgwMjIwYjMuLjdk
MGQyM2MgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFj
aGluZS5jcHAKKysrIGIvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5l
LmNwcApAQCAtMjQ5LDE5ICsyNDksMjEgQEAgdm9pZCBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNo
aW5lOjpEZWNvZGVMb29wKCkKICAgICBpZiAoYXVkaW9QdW1wICYmIGF1ZGlvRGVjb2RlZCA+IGF1
ZGlvUHVtcFRocmVzaG9sZE1zKSB7CiAgICAgICBhdWRpb1B1bXAgPSBQUl9GQUxTRTsKICAgICB9
CiAgICAgaWYgKCFhdWRpb1B1bXAgJiYgYXVkaW9QbGF5aW5nICYmIGF1ZGlvRGVjb2RlZCA8IExP
V19BVURJT19NUykgewogICAgICAgc2tpcFRvTmV4dEtleWZyYW1lID0gUFJfVFJVRTsKICAgICB9
CiAKICAgICBpZiAodmlkZW9QbGF5aW5nICYmICF2aWRlb1dhaXQpIHsKLSAgICAgIHZpZGVvUGxh
eWluZyA9IG1SZWFkZXItPkRlY29kZVZpZGVvRnJhbWUoc2tpcFRvTmV4dEtleWZyYW1lLCBjdXJy
ZW50VGltZSk7CisgICAgICBQUlVpbnQzMiBkcm9wcGVkRnJhbWVzID0gMDsKKyAgICAgIHZpZGVv
UGxheWluZyA9IG1SZWFkZXItPkRlY29kZVZpZGVvRnJhbWUoc2tpcFRvTmV4dEtleWZyYW1lLCBj
dXJyZW50VGltZSwgZHJvcHBlZEZyYW1lcyk7CiAgICAgICB7CiAgICAgICAgIE1vbml0b3JBdXRv
RW50ZXIgbW9uKG1EZWNvZGVyLT5HZXRNb25pdG9yKCkpOworICAgICAgICBtRGVjb2Rlci0+Tm90
aWZ5RHJvcHBlZEZyYW1lcyhkcm9wcGVkRnJhbWVzKTsKICAgICAgICAgaWYgKG1EZWNvZGVyLT5t
RGVjb2RlclBvc2l0aW9uID4gaW5pdGlhbERvd25sb2FkUG9zaXRpb24pIHsKICAgICAgICAgICBt
QnVmZmVyRXhoYXVzdGVkID0gUFJfVFJVRTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KICAg
ICB7CiAgICAgICBNb25pdG9yQXV0b0VudGVyIG1vbihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsK
ICAgICAgIGluaXRpYWxEb3dubG9hZFBvc2l0aW9uID0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVk
aWEvbnNNZWRpYURlY29kZXIuY3BwIGIvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5jcHAK
aW5kZXggODBiMzRjOS4uYWJlYzRmMyAxMDA2NDQKLS0tIGEvY29udGVudC9tZWRpYS9uc01lZGlh
RGVjb2Rlci5jcHAKKysrIGIvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5jcHAKQEAgLTcy
LDE2ICs3MiwxOCBAQCBuc01lZGlhRGVjb2Rlcjo6bnNNZWRpYURlY29kZXIoKSA6CiAgIG1FbGVt
ZW50KDApLAogICBtUkdCV2lkdGgoLTEpLAogICBtUkdCSGVpZ2h0KC0xKSwKICAgbVByb2dyZXNz
VGltZSgpLAogICBtRGF0YVRpbWUoKSwKICAgbVZpZGVvVXBkYXRlTG9jayhuc251bGwpLAogICBt
UGl4ZWxBc3BlY3RSYXRpbygxLjApLAogICBtUGlubmVkRm9yU2VlayhQUl9GQUxTRSksCisgIG1E
ZWNvZGVEZWNvZGVkRnJhbWVzKDApLAorICBtRGVjb2RlRHJvcHBlZEZyYW1lcygwKSwKICAgbVNp
emVDaGFuZ2VkKFBSX0ZBTFNFKSwKICAgbVNodXR0aW5nRG93bihQUl9GQUxTRSkKIHsKICAgTU9a
X0NPVU5UX0NUT1IobnNNZWRpYURlY29kZXIpOwogfQogCiBuc01lZGlhRGVjb2Rlcjo6fm5zTWVk
aWFEZWNvZGVyKCkKIHsKQEAgLTIzMywxNiArMjM1LDE3IEBAIHZvaWQgbnNNZWRpYURlY29kZXI6
OlNldFZpZGVvRGF0YShjb25zdCBnZnhJbnRTaXplJiBhU2l6ZSwKICAgICAgIG1QaXhlbEFzcGVj
dFJhdGlvICE9IGFQaXhlbEFzcGVjdFJhdGlvKSB7CiAgICAgbVJHQldpZHRoID0gYVNpemUud2lk
dGg7CiAgICAgbVJHQkhlaWdodCA9IGFTaXplLmhlaWdodDsKICAgICBtUGl4ZWxBc3BlY3RSYXRp
byA9IGFQaXhlbEFzcGVjdFJhdGlvOwogICAgIG1TaXplQ2hhbmdlZCA9IFBSX1RSVUU7CiAgIH0K
ICAgaWYgKG1JbWFnZUNvbnRhaW5lciAmJiBhSW1hZ2UpIHsKICAgICBtSW1hZ2VDb250YWluZXIt
PlNldEN1cnJlbnRJbWFnZShhSW1hZ2UpOworICAgIG1EZWNvZGVEZWNvZGVkRnJhbWVzKys7CiAg
IH0KIH0KIAogdm9pZCBuc01lZGlhRGVjb2Rlcjo6UGluRm9yU2VlaygpCiB7CiAgIG5zTWVkaWFT
dHJlYW0qIHN0cmVhbSA9IEdldEN1cnJlbnRTdHJlYW0oKTsKICAgaWYgKCFzdHJlYW0gfHwgbVBp
bm5lZEZvclNlZWspIHsKICAgICByZXR1cm47CkBAIC0yNzQsOCArMjc3LDUwIEBAIFBSQm9vbCBu
c01lZGlhRGVjb2Rlcjo6Q2FuUGxheVRocm91Z2goKQogICB9CiAgIFBSSW50NjQgYnl0ZXNUb0Rv
d25sb2FkID0gc3RhdHMubVRvdGFsQnl0ZXMgLSBzdGF0cy5tRG93bmxvYWRQb3NpdGlvbjsKICAg
UFJJbnQ2NCBieXRlc1RvUGxheWJhY2sgPSBzdGF0cy5tVG90YWxCeXRlcyAtIHN0YXRzLm1QbGF5
YmFja1Bvc2l0aW9uOwogICBkb3VibGUgdGltZVRvRG93bmxvYWQgPQogICAgIChieXRlc1RvRG93
bmxvYWQgKyBnRG93bmxvYWRTaXplU2FmZXR5TWFyZ2luKS9zdGF0cy5tRG93bmxvYWRSYXRlOwog
ICBkb3VibGUgdGltZVRvUGxheSA9IGJ5dGVzVG9QbGF5YmFjay9zdGF0cy5tUGxheWJhY2tSYXRl
OwogICByZXR1cm4gdGltZVRvRG93bmxvYWQgPD0gdGltZVRvUGxheTsKIH0KKworUFJVaW50MzIg
bnNNZWRpYURlY29kZXI6OkdldERlY29kZWRGcmFtZXMoKQoreworICByZXR1cm4gbURlY29kZURl
Y29kZWRGcmFtZXM7Cit9CisKK1BSVWludDMyIG5zTWVkaWFEZWNvZGVyOjpHZXREcm9wcGVkRnJh
bWVzKCkKK3sKKyAgcmV0dXJuIG1EZWNvZGVEcm9wcGVkRnJhbWVzOworfQorCit2b2lkIG5zTWVk
aWFEZWNvZGVyOjpJbmNyZW1lbnREcm9wcGVkRnJhbWVzKFBSVWludDMyIGFEcm9wcGVkRnJhbWVz
KQoreworICBOU19BU1NFUlRJT04oTlNfSXNNYWluVGhyZWFkKCksICJEb24ndCBjYWxsIG9uIG5v
bi1tYWluIHRocmVhZCIpOworCisgIG1EZWNvZGVEcm9wcGVkRnJhbWVzICs9IGFEcm9wcGVkRnJh
bWVzOworfQorCisvLyBBbiBldmVudCB0byB1cGRhdGUgdGhlIGRyb3BwZWQgZnJhbWVzIGNvdW50
IG9uIHRoZSBtYWluIHRocmVhZAorY2xhc3MgRHJvcHBlZEZyYW1lcyA6IHB1YmxpYyBuc1J1bm5h
YmxlIHsKK3B1YmxpYzoKKyAgRHJvcHBlZEZyYW1lcyhuc01lZGlhRGVjb2RlciogYURlY29kZXIs
IFBSVWludDMyIGFEcm9wcGVkRnJhbWVzKSA6CisgICAgbURlY29kZXIoYURlY29kZXIpLCBtRHJv
cHBlZEZyYW1lcyhhRHJvcHBlZEZyYW1lcykge30KKyAgTlNfSU1FVEhPRCBSdW4oKSB7CisgICAg
bURlY29kZXItPkluY3JlbWVudERyb3BwZWRGcmFtZXMobURyb3BwZWRGcmFtZXMpOworICAgIHJl
dHVybiBOU19PSzsKKyAgfQorcHJpdmF0ZToKKyAgbnNSZWZQdHI8bnNNZWRpYURlY29kZXI+IG1E
ZWNvZGVyOworICBQUlVpbnQzMiAgICAgICAgICAgICAgICAgbURyb3BwZWRGcmFtZXM7Cit9Owor
Cit2b2lkIG5zTWVkaWFEZWNvZGVyOjpOb3RpZnlEcm9wcGVkRnJhbWVzKFBSVWludDMyIGFEcm9w
cGVkRnJhbWVzKQoreworICBOU19BU1NFUlRJT04oIU5TX0lzTWFpblRocmVhZCgpLCAiRG9uJ3Qg
Y2FsbCBvbiBtYWluIHRocmVhZCIpOworCisgIGlmIChhRHJvcHBlZEZyYW1lcyA+IDApIHsKKyAg
ICBuc0NPTVB0cjxuc0lSdW5uYWJsZT4gZXZlbnQgPSBuZXcgRHJvcHBlZEZyYW1lcyh0aGlzLCBh
RHJvcHBlZEZyYW1lcyk7CisgICAgTlNfRGlzcGF0Y2hUb01haW5UaHJlYWQoZXZlbnQsIE5TX0RJ
U1BBVENIX05PUk1BTCk7CisgIH0KK30KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc01l
ZGlhRGVjb2Rlci5oIGIvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5oCmluZGV4IDk0ZTBh
NzIuLmZhMjM0YmMgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvbnNNZWRpYURlY29kZXIuaAor
KysgYi9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmgKQEAgLTI0MCwxNiArMjQwLDMyIEBA
IHB1YmxpYzoKICAgLy8gQ29uc3RydWN0cyB0aGUgdGltZSByYW5nZXMgcmVwcmVzZW50aW5nIHdo
YXQgc2VnbWVudHMgb2YgdGhlIG1lZGlhCiAgIC8vIGFyZSBidWZmZXJlZCBhbmQgcGxheWFibGUu
CiAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0QnVmZmVyZWQobnNIVE1MVGltZVJhbmdlcyogYUJ1ZmZl
cmVkKSA9IDA7CiAKICAgLy8gUmV0dXJucyBQUl9UUlVFIGlmIHdlIGNhbiBwbGF5IHRoZSBlbnRp
cmUgbWVkaWEgdGhyb3VnaCB3aXRob3V0IHN0b3BwaW5nCiAgIC8vIHRvIGJ1ZmZlciwgZ2l2ZW4g
dGhlIGN1cnJlbnQgZG93bmxvYWQgYW5kIHBsYXliYWNrIHJhdGVzLgogICBQUkJvb2wgQ2FuUGxh
eVRocm91Z2goKTsKIAorICAvLyBSZXR1cm4gdGhlIGNvdW50IG9mIGZyYW1lcyB0aGF0IGhhdmUg
YmVlbiBkZWNvZGVkCisgIFBSVWludDMyIEdldERlY29kZWRGcmFtZXMoKTsKKworICAvLyBSZXR1
cm4gdGhlIGNvdW50IG9mIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkCisgIFBSVWludDMy
IEdldERyb3BwZWRGcmFtZXMoKTsKKworICAvLyBJbmNyZW1lbnQgdGhlIGRyb3BwZWQgZnJhbWUg
Y291bnQgYnkgdGhlIGdpdmVuIGFtb3VudC4gVGhpcyBtdXN0CisgIC8vIG9ubHkgYmUgY2FsbGVk
IG9uIHRoZSBtYWluIHRocmVhZC4gdXNlICdOb3RpZnlEcm9wcGVkRnJhbWVzJyB0bworICAvLyBp
bmNyZW1lbnQgZHJvcHBlZCBmcmFtZXMgb24gbm9uLW1haW4gdGhyZWFkcy4KKyAgdm9pZCBJbmNy
ZW1lbnREcm9wcGVkRnJhbWVzKFBSVWludDMyIGFEcm9wcGVkRnJhbWVzKTsKKworICAvLyBSYWlz
ZXMgYW4gZXZlbnQgdGhhdCBpcyBkaXNwYXRjaGVkIHRvIHRoZSBtYWluIHRocmVhZCB0byBpbmNy
ZW1lbnQKKyAgLy8gdGhlIG51bWJlciBvZiBkcm9wcGVkIGZyYW1lcy4gRG8gbm90IGNhbGwgb24g
dGhlIG1haW4gdGhyZWFkICh1c2UKKyAgLy8gSW5jcmVtZW50RHJvcHBlZEZyYW1lcyBpbnN0ZWFk
KS4KKyAgdm9pZCBOb3RpZnlEcm9wcGVkRnJhbWVzKFBSVWludDMyIGFEcm9wcGVkRnJhbWVzKTsK
KwogcHJvdGVjdGVkOgogCiAgIC8vIFN0YXJ0IHRpbWVyIHRvIHVwZGF0ZSBkb3dubG9hZCBwcm9n
cmVzcyBpbmZvcm1hdGlvbi4KICAgbnNyZXN1bHQgU3RhcnRQcm9ncmVzcygpOwogCiAgIC8vIFN0
b3AgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gdGltZXIuCiAgIG5zcmVzdWx0IFN0b3BQcm9ncmVzcygp
OwogCkBAIC0yOTcsMTYgKzMxMywyNCBAQCBwcm90ZWN0ZWQ6CiAKICAgLy8gUGl4ZWwgYXNwZWN0
IHJhdGlvIChyYXRpbyBvZiB0aGUgcGl4ZWwgd2lkdGggdG8gcGl4ZWwgaGVpZ2h0KQogICBmbG9h
dCBtUGl4ZWxBc3BlY3RSYXRpbzsKIAogICAvLyBQUl9UUlVFIHdoZW4gb3VyIG1lZGlhIHN0cmVh
bSBoYXMgYmVlbiBwaW5uZWQuIFdlIHBpbiB0aGUgc3RyZWFtCiAgIC8vIHdoaWxlIHNlZWtpbmcu
CiAgIFBSUGFja2VkQm9vbCBtUGlubmVkRm9yU2VlazsKIAorICAvLyBBIGNvdW50IG9mIHRoZSBu
dW1iZXIgb2YgZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIGRlY29kZWQgYW5kIHJlYWR5CisgIC8vIHRv
IGJlIGRpc3BsYXllZC4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgY29tcHV0aW5nIHRoZSBkZWNvZGlu
ZyBmcmFtZXJhdGUKKyAgUFJVaW50MzIgbURlY29kZURlY29kZWRGcmFtZXM7CisKKyAgLy8gQSBj
b3VudCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGZvciBw
ZXJmb3JtYW5jZQorICAvLyByZWFzb25zIGR1cmluZyBwbGF5YmFjay4KKyAgUFJVaW50MzIgbURl
Y29kZURyb3BwZWRGcmFtZXM7CisKICAgLy8gSGFzIG91ciBzaXplIGNoYW5nZWQgc2luY2UgdGhl
IGxhc3QgcmVwYWludD8KICAgUFJQYWNrZWRCb29sIG1TaXplQ2hhbmdlZDsKIAogICAvLyBUcnVl
IGlmIHRoZSBkZWNvZGVyIGlzIGJlaW5nIHNodXRkb3duLiBBdCB0aGlzIHBvaW50IGFsbCBldmVu
dHMgdGhhdAogICAvLyBhcmUgY3VycmVudGx5IHF1ZXVlZCBuZWVkIHRvIHJldHVybiBpbW1lZGlh
dGVseSB0byBwcmV2ZW50IGphdmFzY3JpcHQKICAgLy8gYmVpbmcgcnVuIHRoYXQgb3BlcmF0ZXMg
b24gdGhlIGVsZW1lbnQgYW5kIGRlY29kZXIgZHVyaW5nIHNodXRkb3duLgogICAvLyBSZWFkL1dy
aXRlIGZyb20gdGhlIG1haW4gdGhyZWFkIG9ubHkuCiAgIFBSUGFja2VkQm9vbCBtU2h1dHRpbmdE
b3duOwpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwIGIvY29u
dGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwCmluZGV4IGIyYTRhZDMuLjc1NGVhYzIgMTAw
NjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmNwcAorKysgYi9jb250ZW50
L21lZGlhL29nZy9uc09nZ1JlYWRlci5jcHAKQEAgLTU2NSwxNyArNTY1LDE4IEBAIG5zcmVzdWx0
IG5zT2dnUmVhZGVyOjpEZWNvZGVUaGVvcmEobnNUQXJyYXk8VmlkZW9EYXRhKj4mIGFGcmFtZXMs
CiAgICAgICByZXR1cm4gTlNfRVJST1JfT1VUX09GX01FTU9SWTsKICAgICB9CiAgICAgYUZyYW1l
cy5BcHBlbmRFbGVtZW50KHYpOwogICB9CiAgIHJldHVybiBOU19PSzsKIH0KIAogUFJCb29sIG5z
T2dnUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hv
bGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgJmFEcm9w
cGVkRnJhbWVzKQogewogICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAgIE5TX0FT
U0VSVElPTihtRGVjb2Rlci0+T25TdGF0ZU1hY2hpbmVUaHJlYWQoKSB8fCBtRGVjb2Rlci0+T25E
ZWNvZGVUaHJlYWQoKSwKICAgICAgICAgICAgICAgICJTaG91bGQgYmUgb24gc3RhdGUgbWFjaGlu
ZSBvciBBViB0aHJlYWQuIik7CiAgIC8vIFdlIGNob3NlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIFRo
ZW9yYSBncmFudWxlcG9zIG91cnNlbHZlcywgcmF0aGVyIHRoYW4KICAgLy8gcmVseSBvbiB0aF9k
ZWNvZGVfcGFja2V0aW4oKSB0byBkbyBpdCBmb3IgdXMuIFRoaXMgaXMgYmVjYXVzZQogICAvLyB0
aF9kZWNvZGVfcGFja2V0aW4oKSBzaW1wbHkgd29ya3MgYnkgaW5jcmVtZW50aW5nIGEgY291bnRl
ciBldmVyeSB0aW1lCiAgIC8vIGl0J3MgY2FsbGVkLCBzbyBpZiB3ZSBkcm9wIGZyYW1lcyBhbmQg
ZG9uJ3QgY2FsbCBpdCwgc3Vic2VxdWVudCBncmFudWxlcG9zCkBAIC03MjMsMjkgKzcyNCwzMyBA
QCBQUkJvb2wgbnNPZ2dSZWFkZXI6OkRlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVT
a2lwLAogICAgIGlmICghYUtleWZyYW1lU2tpcCB8fAogICAgICAgICAodGhfcGFja2V0X2lza2V5
ZnJhbWUoJnBhY2tldCkgPT0gMSAmJiB0aW1lID49IGFUaW1lVGhyZXNob2xkKSkKICAgICB7CiAg
ICAgICBpZiAoRGVjb2RlVGhlb3JhKGZyYW1lcywgJnBhY2tldCkgPT0gTlNfRVJST1JfT1VUX09G
X01FTU9SWSkgewogICAgICAgICBOU19XQVJOSU5HKCJUaGVvcmEgZGVjb2RlIG1lbW9yeSBhbGxv
Y2F0aW9uIGZhaWx1cmUiKTsKICAgICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgICAgfQogICAg
IH0KKyAgICBlbHNlIHsKKyAgICAgIGFEcm9wcGVkRnJhbWVzKys7CisgICAgfQogICB9CiAKICAg
Ly8gUHVzaCBkZWNvZGVkIGRhdGEgaW50byB0aGUgdmlkZW8gZnJhbWUgcXVldWUuCiAgIGZvciAo
UFJVaW50MzIgaSA9IDA7IGkgPCBmcmFtZXMuTGVuZ3RoKCk7IGkrKykgewogICAgIG5zQXV0b1B0
cjxWaWRlb0RhdGE+IGRhdGEoZnJhbWVzW2ldKTsKICAgICBpZiAoIWFLZXlmcmFtZVNraXAgfHwg
KGFLZXlmcmFtZVNraXAgJiYgZnJhbWVzW2ldLT5tS2V5ZnJhbWUpKSB7CiAgICAgICBtVmlkZW9R
dWV1ZS5QdXNoKGRhdGEuZm9yZ2V0KCkpOwogICAgICAgaWYgKGFLZXlmcmFtZVNraXAgJiYgZnJh
bWVzW2ldLT5tS2V5ZnJhbWUpIHsKICAgICAgICAgYUtleWZyYW1lU2tpcCA9IFBSX0ZBTFNFOwog
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBmcmFtZXNbaV0gPSBuc251bGw7CiAgICAgICBk
YXRhID0gbnNudWxsOworICAgICAgYURyb3BwZWRGcmFtZXMrKzsKICAgICB9CiAgIH0KIAogICBp
ZiAoZW5kT2ZTdHJlYW0pIHsKICAgICAvLyBXZSd2ZSBlbmNvdW50ZXJlZCBhbiBlbmQgb2YgYml0
c3RyZWFtIHBhY2tldC4gSW5mb3JtIHRoZSBxdWV1ZSB0aGF0CiAgICAgLy8gdGhlcmUgd2lsbCBi
ZSBubyBtb3JlIGZyYW1lcy4KICAgICBtVmlkZW9RdWV1ZS5GaW5pc2goKTsKICAgfQpAQCAtMTEw
OSwxNyArMTExNCwxOCBAQCBuc3Jlc3VsdCBuc09nZ1JlYWRlcjo6U2Vla0luQnVmZmVyZWRSYW5n
ZShQUkludDY0IGFUYXJnZXQsCiAgICAgcmV0dXJuIHJlczsKICAgfQogCiAgIC8vIFdlIGhhdmUg
YW4gYWN0aXZlIFRoZW9yYSBiaXRzdHJlYW0uIERlY29kZSB0aGUgbmV4dCBUaGVvcmEgZnJhbWUs
IGFuZAogICAvLyBleHRyYWN0IGl0cyBrZXlmcmFtZSdzIHRpbWUuCiAgIFBSQm9vbCBlb2Y7CiAg
IGRvIHsKICAgICBQUkJvb2wgc2tpcCA9IFBSX0ZBTFNFOwotICAgIGVvZiA9ICFEZWNvZGVWaWRl
b0ZyYW1lKHNraXAsIDApOworICAgIFBSVWludDMyIGRyb3BwZWRGcmFtZXMgPSAwOworICAgIGVv
ZiA9ICFEZWNvZGVWaWRlb0ZyYW1lKHNraXAsIDAsIGRyb3BwZWRGcmFtZXMpOwogICAgIHsKICAg
ICAgIE1vbml0b3JBdXRvRXhpdCBleGl0UmVhZGVyTW9uKG1Nb25pdG9yKTsKICAgICAgIE1vbml0
b3JBdXRvRW50ZXIgZGVjb2Rlck1vbihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsKICAgICAgIGlm
IChtRGVjb2Rlci0+R2V0RGVjb2RlU3RhdGUoKSA9PSBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNo
aW5lOjpERUNPREVSX1NUQVRFX1NIVVRET1dOKSB7CiAgICAgICAgIHJldHVybiBOU19FUlJPUl9G
QUlMVVJFOwogICAgICAgfQogICAgIH0KICAgfSB3aGlsZSAoIWVvZiAmJgpkaWZmIC0tZ2l0IGEv
Y29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuaCBiL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dn
UmVhZGVyLmgKaW5kZXggOTVlY2Q2ZC4uZGY2YzA4NSAxMDA2NDQKLS0tIGEvY29udGVudC9tZWRp
YS9vZ2cvbnNPZ2dSZWFkZXIuaAorKysgYi9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRlci5o
CkBAIC02MCwxNyArNjAsMTggQEAgcHVibGljOgogICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQoKTsK
ICAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldERlY29kZSgpOwogICB2aXJ0dWFsIFBSQm9vbCBEZWNv
ZGVBdWRpb0RhdGEoKTsKIAogICAvLyBJZiB0aGUgVGhlb3JhIGdyYW51bGVwb3MgaGFzIG5vdCBi
ZWVuIGNhcHR1cmVkLCBpdCBtYXkgcmVhZCBzZXZlcmFsIHBhY2tldHMKICAgLy8gdW50aWwgb25l
IHdpdGggYSBncmFudWxlcG9zIGhhcyBiZWVuIGNhcHR1cmVkLCB0byBlbnN1cmUgdGhhdCBhbGwg
cGFja2V0cwogICAvLyByZWFkIGhhdmUgdmFsaWQgdGltZSBpbmZvLiAgCiAgIHZpcnR1YWwgUFJC
b29sIERlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgJmFEcm9wcGVkRnJhbWVzKTsKIAog
ICB2aXJ0dWFsIFZpZGVvRGF0YSogRmluZFN0YXJ0VGltZShQUkludDY0IGFPZmZzZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQmIGFPdXRTdGFydFRpbWUpOwog
CiAgIC8vIEdldCB0aGUgZW5kIHRpbWUgb2YgYUVuZE9mZnNldC4gVGhpcyBpcyB0aGUgcGxheWJh
Y2sgcG9zaXRpb24gd2UnZCByZWFjaAogICAvLyBhZnRlciBwbGF5YmFjayBmaW5pc2hlZCBhdCBh
RW5kT2Zmc2V0LgogICB2aXJ0dWFsIFBSSW50NjQgRmluZEVuZFRpbWUoUFJJbnQ2NCBhRW5kT2Zm
c2V0KTsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuY3BwIGIv
Y29udGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuY3BwCmluZGV4IDliZjZmY2EuLjkxZTg3NTQg
MTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVyLmNwcAorKysgYi9jb250
ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5jcHAKQEAgLTE2MywxNyArMTYzLDE4IEBAIFBSQm9v
bCBuc1Jhd1JlYWRlcjo6UmVhZEZyb21TdHJlYW0obnNNZWRpYVN0cmVhbSAqYVN0cmVhbSwgUFJV
aW50OCogYUJ1ZiwKICAgICBhTGVuZ3RoIC09IGJ5dGVzUmVhZDsKICAgICBhQnVmICs9IGJ5dGVz
UmVhZDsKICAgfQogCiAgIHJldHVybiBQUl9UUlVFOwogfQogCiBQUkJvb2wgbnNSYXdSZWFkZXI6
OkRlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAmYURyb3BwZWRGcmFtZXMp
CiB7CiAgIG1vemlsbGE6Ok1vbml0b3JBdXRvRW50ZXIgYXV0b0VudGVyKG1Nb25pdG9yKTsKICAg
TlNfQVNTRVJUSU9OKG1EZWNvZGVyLT5PblN0YXRlTWFjaGluZVRocmVhZCgpIHx8IG1EZWNvZGVy
LT5PbkRlY29kZVRocmVhZCgpLAogICAgICAgICAgICAgICAgIlNob3VsZCBiZSBvbiBzdGF0ZSBt
YWNoaW5lIHRocmVhZCBvciBkZWNvZGUgdGhyZWFkLiIpOwogCiAgIGlmICghbUZyYW1lU2l6ZSkK
ICAgICByZXR1cm4gUFJfRkFMU0U7IC8vIE1ldGFkYXRhIHJlYWQgZmFpbGVkLiAgV2Ugc2hvdWxk
IHJlZnVzZSB0byBwbGF5LgogCkBAIC0xOTksMTYgKzIwMCwxNyBAQCBQUkJvb2wgbnNSYXdSZWFk
ZXI6OkRlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAogICAgICAgcmV0dXJu
IFBSX0ZBTFNFOwogICAgIH0KIAogICAgIGlmIChjdXJyZW50RnJhbWVUaW1lID49IGFUaW1lVGhy
ZXNob2xkKQogICAgICAgYnJlYWs7CiAKICAgICBtQ3VycmVudEZyYW1lKys7CiAgICAgY3VycmVu
dEZyYW1lVGltZSArPSAxMDAwLjAgLyBtRnJhbWVSYXRlOworICAgIGFEcm9wcGVkRnJhbWVzKys7
CiAgIH0KIAogICBWaWRlb0RhdGE6OllDYkNyQnVmZmVyIGI7CiAgIGIubVBsYW5lc1swXS5tRGF0
YSA9IGJ1ZmZlcjsKICAgYi5tUGxhbmVzWzBdLm1TdHJpZGUgPSBtTWV0YWRhdGEuZnJhbWVXaWR0
aCAqIG1NZXRhZGF0YS5sdW1hQ2hhbm5lbEJwcCAvIDguMDsKICAgYi5tUGxhbmVzWzBdLm1IZWln
aHQgPSBtTWV0YWRhdGEuZnJhbWVIZWlnaHQ7CiAgIGIubVBsYW5lc1swXS5tV2lkdGggPSBtTWV0
YWRhdGEuZnJhbWVXaWR0aDsKIApAQCAtMjY0LDE3ICsyNjYsMTggQEAgbnNyZXN1bHQgbnNSYXdS
ZWFkZXI6OlNlZWsoUFJJbnQ2NCBhVGltZSwgUFJJbnQ2NCBhU3RhcnRUaW1lLCBQUkludDY0IGFF
bmRUaW1lLAogCiAgIG5zcmVzdWx0IHJ2ID0gc3RyZWFtLT5TZWVrKG5zSVNlZWthYmxlU3RyZWFt
OjpOU19TRUVLX1NFVCwgb2Zmc2V0KTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAog
ICBtVmlkZW9RdWV1ZS5FcmFzZSgpOwogCiAgIHdoaWxlKG1WaWRlb1F1ZXVlLkdldFNpemUoKSA9
PSAwKSB7CiAgICAgUFJCb29sIGtleWZyYW1lU2tpcCA9IFBSX0ZBTFNFOwotICAgIGlmICghRGVj
b2RlVmlkZW9GcmFtZShrZXlmcmFtZVNraXAsIDApKSB7CisgICAgUFJVaW50MzIgZHJvcHBlZEZy
YW1lcyA9IDA7CisgICAgaWYgKCFEZWNvZGVWaWRlb0ZyYW1lKGtleWZyYW1lU2tpcCwgMCwgZHJv
cHBlZEZyYW1lcykpIHsKICAgICAgIG1DdXJyZW50RnJhbWUgPSBmcmFtZTsKICAgICAgIHJldHVy
biBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAogICAgIHsKICAgICAgIG1vemlsbGE6Ok1vbml0
b3JBdXRvRXhpdCBhdXRvTW9uaXRvckV4aXQobU1vbml0b3IpOwogICAgICAgbW96aWxsYTo6TW9u
aXRvckF1dG9FbnRlciBhdXRvTW9uaXRvcihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsKICAgICAg
IGlmIChtRGVjb2Rlci0+R2V0RGVjb2RlU3RhdGUoKSA9PQpkaWZmIC0tZ2l0IGEvY29udGVudC9t
ZWRpYS9yYXcvbnNSYXdSZWFkZXIuaCBiL2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVyLmgK
aW5kZXggZGI1NjE4Yi4uNTRmMTUyMSAxMDA2NDQKLS0tIGEvY29udGVudC9tZWRpYS9yYXcvbnNS
YXdSZWFkZXIuaAorKysgYi9jb250ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5oCkBAIC05Mywx
NyArOTMsMTggQEAgcHVibGljOgogICBuc1Jhd1JlYWRlcihuc0J1aWx0aW5EZWNvZGVyKiBhRGVj
b2Rlcik7CiAgIH5uc1Jhd1JlYWRlcigpOwogCiAgIHZpcnR1YWwgbnNyZXN1bHQgSW5pdCgpOwog
ICB2aXJ0dWFsIG5zcmVzdWx0IFJlc2V0RGVjb2RlKCk7CiAgIHZpcnR1YWwgUFJCb29sIERlY29k
ZUF1ZGlvRGF0YSgpOwogCiAgIHZpcnR1YWwgUFJCb29sIERlY29kZVZpZGVvRnJhbWUoUFJCb29s
ICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50
NjQgYVRpbWVUaHJlc2hvbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
SW50NjQgYVRpbWVUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJVaW50MzIgJmFEcm9wcGVkRnJhbWVzKTsKIAogICB2aXJ0dWFsIFBSQm9vbCBIYXNBdWRpbygp
CiAgIHsKICAgICByZXR1cm4gUFJfRkFMU0U7CiAgIH0KIAogICB2aXJ0dWFsIFBSQm9vbCBIYXNW
aWRlbygpCiAgIHsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIu
Y3BwIGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAKaW5kZXggOGFhMmE4Zi4u
NjU3OTc2ZCAxMDA2NDQKLS0tIGEvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAK
KysrIGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAKQEAgLTUzNCwxNyArNTM0
LDE4IEBAIFBSQm9vbCBuc1dlYk1SZWFkZXI6OkRlY29kZUF1ZGlvRGF0YSgpCiAgICAgbUF1ZGlv
UXVldWUuRmluaXNoKCk7CiAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICB9CiAKICAgcmV0dXJuIERl
Y29kZUF1ZGlvUGFja2V0KHBhY2tldCk7CiB9CiAKIFBSQm9vbCBuc1dlYk1SZWFkZXI6OkRlY29k
ZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAmYURyb3BwZWRGcmFtZXMpCiB7
CiAgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKICAgTlNfQVNTRVJUSU9OKG1EZWNv
ZGVyLT5PblN0YXRlTWFjaGluZVRocmVhZCgpIHx8IG1EZWNvZGVyLT5PbkRlY29kZVRocmVhZCgp
LAogICAgICAgICAgICAgICAgIlNob3VsZCBiZSBvbiBzdGF0ZSBtYWNoaW5lIG9yIGRlY29kZSB0
aHJlYWQuIik7CiAgIGludCByID0gMDsKICAgbmVzdGVnZ19wYWNrZXQqIHBhY2tldCA9IE5leHRQ
YWNrZXQoVklERU8pOwogCiAgIGlmICghcGFja2V0KSB7CkBAIC02MDYsMzIgKzYwNywzNCBAQCBQ
UkJvb2wgbnNXZWJNUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tp
cCwKICAgICB9CiAKICAgICB2cHhfY29kZWNfc3RyZWFtX2luZm9fdCBzaTsKICAgICBtZW1zZXQo
JnNpLCAwLCBzaXplb2Yoc2kpKTsKICAgICBzaS5zeiA9IHNpemVvZihzaSk7CiAgICAgdnB4X2Nv
ZGVjX3BlZWtfc3RyZWFtX2luZm8oJnZweF9jb2RlY192cDhfZHhfYWxnbywgZGF0YSwgbGVuZ3Ro
LCAmc2kpOwogICAgIGlmICgoYUtleWZyYW1lU2tpcCAmJiAhc2kuaXNfa2YpIHx8IChhS2V5ZnJh
bWVTa2lwICYmIHNpLmlzX2tmICYmIHRzdGFtcF9tcyA8IGFUaW1lVGhyZXNob2xkKSkgewogICAg
ICAgYUtleWZyYW1lU2tpcCA9IFBSX1RSVUU7CisgICAgICBhRHJvcHBlZEZyYW1lcysrOwogICAg
ICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKGFLZXlmcmFtZVNraXAgJiYgc2kuaXNfa2YpIHsK
ICAgICAgIGFLZXlmcmFtZVNraXAgPSBQUl9GQUxTRTsKICAgICB9CiAKICAgICBpZih2cHhfY29k
ZWNfZGVjb2RlKCZtVlA4LCBkYXRhLCBsZW5ndGgsIE5VTEwsIDApKSB7CiAgICAgICBuZXN0ZWdn
X2ZyZWVfcGFja2V0KHBhY2tldCk7CiAgICAgICByZXR1cm4gUFJfRkFMU0U7CiAgICAgfQogCiAg
ICAgLy8gSWYgdGhlIHRpbWVzdGFtcCBvZiB0aGUgdmlkZW8gZnJhbWUgaXMgbGVzcyB0aGFuCiAg
ICAgLy8gdGhlIHRpbWUgdGhyZXNob2xkIHJlcXVpcmVkIHRoZW4gaXQgaXMgbm90IGFkZGVkCiAg
ICAgLy8gdG8gdGhlIHZpZGVvIHF1ZXVlIGFuZCB3b24ndCBiZSBkaXNwbGF5ZWQuCiAgICAgaWYg
KHRzdGFtcF9tcyA8IGFUaW1lVGhyZXNob2xkKSB7CisgICAgICBhRHJvcHBlZEZyYW1lcysrOwog
ICAgICAgY29udGludWU7CiAgICAgfQogCiAgICAgdnB4X2NvZGVjX2l0ZXJfdCAgaXRlciA9IE5V
TEw7CiAgICAgdnB4X2ltYWdlX3QgICAgICAqaW1nOwogCiAgICAgd2hpbGUoKGltZyA9IHZweF9j
b2RlY19nZXRfZnJhbWUoJm1WUDgsICZpdGVyKSkpIHsKICAgICAgIE5TX0FTU0VSVElPTihtSW5m
by5tUGljdHVyZS53aWR0aCA9PSBzdGF0aWNfY2FzdDxQUkludDMyPihpbWctPmRfdyksIApkaWZm
IC0tZ2l0IGEvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5oIGIvY29udGVudC9tZWRp
YS93ZWJtL25zV2ViTVJlYWRlci5oCmluZGV4IGUxMjUxMjYuLmEyNmRiODMgMTAwNjQ0Ci0tLSBh
L2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuaAorKysgYi9jb250ZW50L21lZGlhL3dl
Ym0vbnNXZWJNUmVhZGVyLmgKQEAgLTEwNCwxNyArMTA0LDE4IEBAIHB1YmxpYzoKICAgdmlydHVh
bCBuc3Jlc3VsdCBJbml0KCk7CiAgIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXREZWNvZGUoKTsKICAg
dmlydHVhbCBQUkJvb2wgRGVjb2RlQXVkaW9EYXRhKCk7CiAKICAgLy8gSWYgdGhlIFRoZW9yYSBn
cmFudWxlcG9zIGhhcyBub3QgYmVlbiBjYXB0dXJlZCwgaXQgbWF5IHJlYWQgc2V2ZXJhbCBwYWNr
ZXRzCiAgIC8vIHVudGlsIG9uZSB3aXRoIGEgZ3JhbnVsZXBvcyBoYXMgYmVlbiBjYXB0dXJlZCwg
dG8gZW5zdXJlIHRoYXQgYWxsIHBhY2tldHMKICAgLy8gcmVhZCBoYXZlIHZhbGlkIHRpbWUgaW5m
by4gIAogICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1l
U2tpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhy
ZXNob2xkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1l
VGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyICZh
RHJvcHBlZEZyYW1lcyk7CiAKICAgdmlydHVhbCBQUkJvb2wgSGFzQXVkaW8oKQogICB7CiAgICAg
bW96aWxsYTo6TW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICAgIHJldHVybiBtSGFz
QXVkaW87CiAgIH0KIAogICB2aXJ0dWFsIFBSQm9vbCBIYXNWaWRlbygpCmRpZmYgLS1naXQgYS9k
b20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxNZWRpYUVsZW1lbnQuaWRsIGIvZG9tL2ludGVy
ZmFjZXMvaHRtbC9uc0lET01IVE1MTWVkaWFFbGVtZW50LmlkbAppbmRleCA5Zjg1MGYwLi5lZjA0
YTUzIDEwMDY0NAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxNZWRpYUVsZW1l
bnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTE1lZGlhRWxlbWVudC5p
ZGwKQEAgLTUyLDE3ICs1MiwxNyBAQAogCiAvLyB1bmRlZiB0aGUgR2V0Q3VycmVudFRpbWUgbWFj
cm8gZGVmaW5lZCBpbiBXaW5CYXNlLmggZnJvbSB0aGUgTVMgUGxhdGZvcm0gU0RLCiAle0MrKwog
I2lmZGVmIEdldEN1cnJlbnRUaW1lCiAjdW5kZWYgR2V0Q3VycmVudFRpbWUKICNlbmRpZgogJX0K
IAotW3NjcmlwdGFibGUsIHV1aWQoZjc0OGI3ZGItNGFiOS00MzcwLTgzNWQtNTlmMzBjOGRlNTdj
KV0KK1tzY3JpcHRhYmxlLCB1dWlkKDkyOTk5ZDU3LWFiOWYtNDdmMi05NTY3LTcyM2Y0MDlkYzMx
MildCiBpbnRlcmZhY2UgbnNJRE9NSFRNTE1lZGlhRWxlbWVudCA6IG5zSURPTUhUTUxFbGVtZW50
CiB7CiAgIC8vIGVycm9yIHN0YXRlCiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01IVE1MTWVk
aWFFcnJvciBlcnJvcjsKIAogICAvLyBuZXR3b3JrIHN0YXRlCiAgICAgICAgICAgIGF0dHJpYnV0
ZSBET01TdHJpbmcgc3JjOwogICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGN1cnJlbnRT
cmM7CkBAIC0xMDMsOSArMTAzLDIwIEBAIGludGVyZmFjZSBuc0lET01IVE1MTWVkaWFFbGVtZW50
IDogbnNJRE9NSFRNTEVsZW1lbnQKIAogICAvLyBNb3ppbGxhIGV4dGVuc2lvbjogbG9hZCBkYXRh
IGZyb20gYW5vdGhlciBtZWRpYSBlbGVtZW50LiBUaGlzIGlzIGxpa2UKICAgLy8gbG9hZCgpIGJ1
dCB3ZSBkb24ndCBydW4gdGhlIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG07IGluc3RlYWQK
ICAgLy8gd2UganVzdCBzZXQgb3VyIHNvdXJjZSB0byBvdGhlcidzIGN1cnJlbnRTcmMuIFRoaXMg
aXMgb3B0aW1pemVkCiAgIC8vIHNvIHRoYXQgdGhpcyBlbGVtZW50IHdpbGwgZ2V0IGFjY2VzcyB0
byBhbGwgb2Ygb3RoZXIncyBjYWNoZWQvCiAgIC8vIGJ1ZmZlcmVkIGRhdGEuIEluIGZhY3QgYW55
IGZ1dHVyZSBkYXRhIGRvd25sb2FkZWQgYnkgdGhpcyBlbGVtZW50IG9yCiAgIC8vIG90aGVyIHdp
bGwgYmUgc2hhcmFibGUgYnkgYm90aCBlbGVtZW50cy4KICAgdm9pZCBtb3pMb2FkRnJvbShpbiBu
c0lET01IVE1MTWVkaWFFbGVtZW50IG90aGVyKTsKKworICAvLyBUaGUgYXBwcm94aW1hdGUgcmF0
ZSBhdCB3aGljaCB0aGUgbWVkaWEgcmVzb3VyY2UgaXMgYmVpbmcgZG93bmxvYWRlZCBpbgorICAv
LyBieXRlcyBwZXIgc2Vjb25kLiBJZiB0aGUgcmF0ZSBpcyBub3QgYXZhaWxhYmxlIChwb3NzaWJs
eSBkdWUKKyAgLy8gdG8gbm90IGhhdmluZyBkb3dubG9hZGVkIGVub3VnaCBkYXRhIHRvIGNvbXB1
dGUgYSBjb25zaXN0ZW50IHZhbHVlKQorICAvLyB0aGlzIHdpbGwgYmUgTmFOLgorICByZWFkb25s
eSBhdHRyaWJ1dGUgZmxvYXQgbW96RG93bmxvYWRSYXRlOworCisgIC8vIFRoZSBhcHByb3hpbWF0
ZSByYXRlIGF0IHdoaWNoIHRoZSBtZWRpYSByZXNvdXJjZSBpcyBiZWluZyBkZWNvZGVkIGluCisg
IC8vIGJ5dGVzIHBlciBzZWNvbmQuIElmIHRoZSByYXRlIGlzIG5vdCBhdmFpbGFibGUgdGhpcyB3
aWxsIGJlCisgIC8vIE5hTi4KKyAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IG1vekRlY29kZVJh
dGU7CiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MVmlkZW9F
bGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTFZpZGVvRWxlbWVudC5p
ZGwKaW5kZXggNjc4ZWRjZC4uMTE2YjZlNyAxMDA2NDQKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRt
bC9uc0lET01IVE1MVmlkZW9FbGVtZW50LmlkbAorKysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25z
SURPTUhUTUxWaWRlb0VsZW1lbnQuaWRsCkBAIC00MywxOCArNDMsMjYgQEAKICAqIDx2aWRlbz4g
ZWxlbWVudC4KICAqCiAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGludGVyZmFjZSwg
cGxlYXNlIHNlZQogICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJl
bnQtd29yay8jdmlkZW8KICAqCiAgKiBAc3RhdHVzIFVOREVSX0RFVkVMT1BNRU5UCiAgKi8KIAot
W3NjcmlwdGFibGUsIHV1aWQoZWRmNDY4ZGMtNDJlYi00NDk0LTkyMGItNTZhMzE1MTcyNjQwKV0K
K1tzY3JpcHRhYmxlLCB1dWlkKDMyMjM0YjZiLWUwYzUtNDUzOS04YjE3LWNmNDQwMzViNDU3YSld
CiBpbnRlcmZhY2UgbnNJRE9NSFRNTFZpZGVvRWxlbWVudCA6IG5zSURPTUhUTUxNZWRpYUVsZW1l
bnQKIHsKICAgICAgICAgICAgYXR0cmlidXRlIGxvbmcgd2lkdGg7IAogICAgICAgICAgICBhdHRy
aWJ1dGUgbG9uZyBoZWlnaHQ7CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHZp
ZGVvV2lkdGg7CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHZpZGVvSGVpZ2h0
OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHBvc3RlcjsKKworICAvLyBBIGNvdW50
IG9mIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIGRlY29kZWQgYW5kIHJlYWR5
CisgIC8vIHRvIGJlIGRpc3BsYXllZC4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgY29tcHV0aW5nIHRo
ZSBkZWNvZGluZyBmcmFtZXJhdGUKKyAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
bW96RGVjb2RlZEZyYW1lczsKKworICAvLyBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZnJhbWVz
IHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgZm9yIHBlcmZvcm1hbmNlCisgIC8vIHJlYXNvbnMgZHVy
aW5nIHBsYXliYWNrLgorICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBtb3pEcm9w
cGVkRnJhbWVzOwogfTsKIAo=
</data>
<flag name="review"
          id="392290"
          type_id="937"
          status="-"
          setter="roc"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>495942</attachid>
            <date>2010-12-07 13:23:52 -0800</date>
            <delta_ts>2010-12-08 13:24:49 -0800</delta_ts>
            <desc>Patch: playback statistics v2</desc>
            <filename>580531-stats.patch</filename>
            <type>text/plain</type>
            <size>52159</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4sIENocmlzIERvdWJsZSA8Y2hyaXMuZG91YmxlQGRvdWJsZS5jby5uej4KIyBQYXJlbnQg
ODM3ZDdiMzQ2YTY0N2IyMTAwNTk2MzczOGViNDlmODQ4MTQxZTBkOQpCdWcgNTgwNTMxIC0gQWRk
IHBsYXliYWNrIHN0YXRpc3RpY3MgZm9yIHZpZGVvLiByPT8gYT0/CgpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvcHVibGljL25zSFRNTFZpZGVvRWxlbWVudC5oIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvcHVibGljL25zSFRNTFZpZGVvRWxlbWVudC5oCi0tLSBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3B1YmxpYy9uc0hUTUxWaWRlb0VsZW1lbnQuaAorKysgYi9jb250ZW50L2h0bWwv
Y29udGVudC9wdWJsaWMvbnNIVE1MVmlkZW9FbGVtZW50LmgKQEAgLTc4LDExICs3OCwxNiBAQCBw
dWJsaWM6CiAKICAgLy8gUmV0dXJucyB0aGUgY3VycmVudCB2aWRlbyBmcmFtZSB3aWR0aCBhbmQg
aGVpZ2h0LgogICAvLyBJZiB0aGVyZSBpcyBubyB2aWRlbyBmcmFtZSwgcmV0dXJucyB0aGUgZ2l2
ZW4gZGVmYXVsdCBzaXplLgogICBuc0ludFNpemUgR2V0VmlkZW9TaXplKG5zSW50U2l6ZSBkZWZh
dWx0U2l6ZSk7CiAKICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBY2NlcHRIZWFkZXIobnNJSHR0cENo
YW5uZWwqIGFDaGFubmVsKTsKIAogICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0lu
Zm8oKTsKKworICAvLyBEaXNwYXRjaGVzIGFuIGV2ZW50IHRvIGluY3JlbWVudCB0aGUgY291bnRl
ciBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcworICAvLyBwYWludGVkLiBDYWxsZWQgb24gdGhlIG1h
aW4gdGhyZWFkIGJ5IHRoZSBuc1ZpZGVvRnJhbWUgd2hlbiBhIG5ldyBpbWFnZQorICAvLyBpcyBw
YWludGVkLgorICB2b2lkIE5vdGlmeVBhaW50ZWRGcmFtZSgpOwogfTsKIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MVmlkZW9FbGVtZW50LmNwcCBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCi0tLSBhL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC0xNzgsOCArMTc4
LDUzIEBAIG5zcmVzdWx0IG5zSFRNTFZpZGVvRWxlbWVudDo6U2V0QWNjZXB0SGUKICAgICAgICAg
ImF1ZGlvLyo7cT0wLjYsKi8qO3E9MC41Iik7CiAKICAgICByZXR1cm4gYUNoYW5uZWwtPlNldFJl
cXVlc3RIZWFkZXIoTlNfTElURVJBTF9DU1RSSU5HKCJBY2NlcHQiKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSX0ZBTFNFKTsKIH0KIAogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxWaWRl
b0VsZW1lbnQsIFBvc3RlciwgcG9zdGVyKQorCisvKiByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBtb3pEZWNvZGVkRnJhbWVzOyAqLworTlNfSU1FVEhPRElNUCBuc0hUTUxWaWRlb0Vs
ZW1lbnQ6OkdldE1velBhcnNlZEZyYW1lcyhQUlVpbnQzMiAqYU1vekRlY29kZWRGcmFtZXMpCit7
CisgIE5TX0FTU0VSVElPTihOU19Jc01haW5UaHJlYWQoKSwgIlNob3VsZCBiZSBvbiBtYWluIHRo
cmVhZC4iKTsKKyAgKmFNb3pEZWNvZGVkRnJhbWVzID0gbURlY29kZXIgPyBtRGVjb2Rlci0+R2V0
UGFyc2VkRnJhbWVzKCkgOiAwOworICByZXR1cm4gTlNfT0s7Cit9CisKKy8qIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG1vekRyb3BwZWRGcmFtZXM7ICovCitOU19JTUVUSE9ESU1Q
IG5zSFRNTFZpZGVvRWxlbWVudDo6R2V0TW96RGVjb2RlZEZyYW1lcyhQUlVpbnQzMiAqYU1vekRy
b3BwZWRGcmFtZXMpCit7CisgIE5TX0FTU0VSVElPTihOU19Jc01haW5UaHJlYWQoKSwgIlNob3Vs
ZCBiZSBvbiBtYWluIHRocmVhZC4iKTsKKyAgKmFNb3pEcm9wcGVkRnJhbWVzID0gbURlY29kZXIg
PyBtRGVjb2Rlci0+R2V0RGVjb2RlZEZyYW1lcygpIDogMDsKKyAgcmV0dXJuIE5TX09LOworfQor
CitOU19JTUVUSE9ESU1QIG5zSFRNTFZpZGVvRWxlbWVudDo6R2V0TW96UHJlc2VudGVkRnJhbWVz
KFBSVWludDMyICphTW96RHJvcHBlZEZyYW1lcykKK3sKKyAgTlNfQVNTRVJUSU9OKE5TX0lzTWFp
blRocmVhZCgpLCAiU2hvdWxkIGJlIG9uIG1haW4gdGhyZWFkLiIpOworICAqYU1vekRyb3BwZWRG
cmFtZXMgPSBtRGVjb2RlciA/IG1EZWNvZGVyLT5HZXRQcmVzZW50ZWRGcmFtZXMoKSA6IDA7Cisg
IHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUCBuc0hUTUxWaWRlb0VsZW1lbnQ6Okdl
dE1velBhaW50ZWRGcmFtZXMoUFJVaW50MzIgKmFNb3pEcm9wcGVkRnJhbWVzKQoreworICBOU19B
U1NFUlRJT04oTlNfSXNNYWluVGhyZWFkKCksICJTaG91bGQgYmUgb24gbWFpbiB0aHJlYWQuIik7
CisgICphTW96RHJvcHBlZEZyYW1lcyA9IG1EZWNvZGVyID8gbURlY29kZXItPkdldFBhaW50ZWRG
cmFtZXMoKSA6IDA7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUCBuc0hUTUxW
aWRlb0VsZW1lbnQ6OkdldE1vekZyYW1lRGVsYXkoZmxvYXQgKmFNb3pGcmFtZURlbGF5KQorewor
ICBOU19BU1NFUlRJT04oTlNfSXNNYWluVGhyZWFkKCksICJTaG91bGQgYmUgb24gbWFpbiB0aHJl
YWQuIik7CisgICphTW96RnJhbWVEZWxheSA9IG1JbWFnZUNvbnRhaW5lciA/IG1JbWFnZUNvbnRh
aW5lci0+R2V0UGFpbnREZWxheSgpLlRvU2Vjb25kcygpIDogMDsKKyAgcmV0dXJuIE5TX09LOwor
fQorCit2b2lkIG5zSFRNTFZpZGVvRWxlbWVudDo6Tm90aWZ5UGFpbnRlZEZyYW1lKCkKK3sKKyAg
TlNfQVNTRVJUSU9OKE5TX0lzTWFpblRocmVhZCgpLCAiU2hvdWxkIGJlIG9uIG1haW4gdGhyZWFk
LiIpOworICBpZiAobURlY29kZXIpIHsKKyAgICBtRGVjb2Rlci0+Tm90aWZ5UGFpbnRlZEZyYW1l
KCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJl
YWRlci5jcHAgYi9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuY3BwCi0tLSBh
L2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5jcHAKKysrIGIvY29udGVudC9t
ZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmNwcApAQCAtMzIwLDE3ICszMjAsMTggQEAgbnNy
ZXN1bHQgbnNCdWlsdGluRGVjb2RlclJlYWRlcjo6RGVjb2RlVAogewogICAvLyBEZWNvZGUgZm9y
d2FyZCB0byB0aGUgdGFyZ2V0IGZyYW1lLiBTdGFydCB3aXRoIHZpZGVvLCBpZiB3ZSBoYXZlIGl0
LgogICBpZiAoSGFzVmlkZW8oKSkgewogICAgIFBSQm9vbCBlb2YgPSBQUl9GQUxTRTsKICAgICBQ
UkludDY0IHN0YXJ0VGltZSA9IC0xOwogICAgIHdoaWxlIChIYXNWaWRlbygpICYmICFlb2YpIHsK
ICAgICAgIHdoaWxlIChtVmlkZW9RdWV1ZS5HZXRTaXplKCkgPT0gMCAmJiAhZW9mKSB7CiAgICAg
ICAgIFBSQm9vbCBza2lwID0gUFJfRkFMU0U7Ci0gICAgICAgIGVvZiA9ICFEZWNvZGVWaWRlb0Zy
YW1lKHNraXAsIDApOworICAgICAgICBQUlVpbnQzMiBwYXJzZWQ9MCwgZGVjb2RlZD0wOworICAg
ICAgICBlb2YgPSAhRGVjb2RlVmlkZW9GcmFtZShza2lwLCAwLCBwYXJzZWQsIGRlY29kZWQpOwog
ICAgICAgICB7CiAgICAgICAgICAgTW9uaXRvckF1dG9FeGl0IGV4aXRSZWFkZXJNb24obU1vbml0
b3IpOwogICAgICAgICAgIE1vbml0b3JBdXRvRW50ZXIgZGVjb2Rlck1vbihtRGVjb2Rlci0+R2V0
TW9uaXRvcigpKTsKICAgICAgICAgICBpZiAobURlY29kZXItPkdldERlY29kZVN0YXRlKCkgPT0g
bnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZTo6REVDT0RFUl9TVEFURV9TSFVURE9XTikgewog
ICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICB9CmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJS
ZWFkZXIuaCBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5oCi0tLSBhL2Nv
bnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5oCisrKyBiL2NvbnRlbnQvbWVkaWEv
bnNCdWlsdGluRGVjb2RlclJlYWRlci5oCkBAIC00NDQsMTggKzQ0NCwyMCBAQCBwdWJsaWM6CiAg
IC8vIGluIG1BdWRpb1F1ZXVlLiBSZXR1cm5zIFBSX1RSVUUgd2hlbiB0aGVyZSdzIG1vcmUgYXVk
aW8gdG8gZGVjb2RlLAogICAvLyBQUl9GQUxTRSBpZiB0aGUgYXVkaW8gaXMgZmluaXNoZWQsIGVu
ZCBvZiBmaWxlIGhhcyBiZWVuIHJlYWNoZWQsCiAgIC8vIG9yIGFuIHVuLXJlY292ZXJhYmxlIHJl
YWQgZXJyb3IgaGFzIG9jY3VyZWQuCiAgIHZpcnR1YWwgUFJCb29sIERlY29kZUF1ZGlvRGF0YSgp
ID0gMDsKIAogICAvLyBSZWFkcyBhbmQgZGVjb2RlcyBvbmUgdmlkZW8gZnJhbWUuIFBhY2tldHMg
d2l0aCBhIHRpbWVzdGFtcCBsZXNzCiAgIC8vIHRoYW4gYVRpbWVUaHJlc2hvbGQgd2lsbCBiZSBk
ZWNvZGVkICh1bmxlc3MgdGhleSdyZSBub3Qga2V5ZnJhbWVzCiAgIC8vIGFuZCBhS2V5ZnJhbWVT
a2lwIGlzIFBSX1RSVUUpLCBidXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIHF1ZXVlLgotICB2
aXJ0dWFsIFBSQm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKSA9
IDA7CisgIHZpcnR1YWwgUFJCb29sIERlY29kZVZpZGVvRnJhbWUoUFJCb29sJiBhS2V5ZnJhbWVT
a2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJl
c2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzImIGFQYXJz
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzImIGFEZWNvZGVk
KSA9IDA7CiAKICAgdmlydHVhbCBQUkJvb2wgSGFzQXVkaW8oKSA9IDA7CiAgIHZpcnR1YWwgUFJC
b29sIEhhc1ZpZGVvKCkgPSAwOwogCiAgIC8vIFJlYWQgaGVhZGVyIGRhdGEgZm9yIGFsbCBiaXRz
dHJlYW1zIGluIHRoZSBmaWxlLiBGaWxscyBtSW5mbyB3aXRoCiAgIC8vIHRoZSBkYXRhIHJlcXVp
cmVkIHRvIHByZXNlbnQgdGhlIG1lZGlhLiBSZXR1cm5zIE5TX09LIG9uIHN1Y2Nlc3MsCiAgIC8v
IG9yIE5TX0VSUk9SX0ZBSUxVUkUgb24gZmFpbHVyZS4KICAgdmlydHVhbCBuc3Jlc3VsdCBSZWFk
TWV0YWRhdGEoKSA9IDA7CkBAIC01MTUsMTcgKzUxNywyMCBAQCBwcm90ZWN0ZWQ6CiAgIHRlbXBs
YXRlPGNsYXNzIERhdGE+CiAgIERhdGEqIERlY29kZVRvRmlyc3REYXRhKERlY29kZUZuIGFEZWNv
ZGVGbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFRdWV1ZTxEYXRhPiYgYVF1ZXVl
KTsKIAogICAvLyBXcmFwcGVyIHNvIHRoYXQgRGVjb2RlVmlkZW9GcmFtZShQUkJvb2wmLFBSSW50
NjQpIGNhbiBiZSBjYWxsZWQgZnJvbQogICAvLyBEZWNvZGVUb0ZpcnN0RGF0YSgpLgogICBQUkJv
b2wgRGVjb2RlVmlkZW9GcmFtZSgpIHsKICAgICBQUkJvb2wgZiA9IFBSX0ZBTFNFOwotICAgIHJl
dHVybiBEZWNvZGVWaWRlb0ZyYW1lKGYsIDApOworICAgIC8vIElnbm9yZSB0aGVzZSwgRGVjb2Rl
VmlkZW9GcmFtZSgpIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBzZWVraW5nLCBzbworICAgIC8vIHRo
ZXNlIGFyZW4ndCByZWxldmFudCB0byBwZXJmb3JtYW5jZS4KKyAgICBQUlVpbnQzMiBwYXJzZWQ9
MCwgZGVjb2RlZD0wOworICAgIHJldHVybiBEZWNvZGVWaWRlb0ZyYW1lKGYsIDAsIHBhcnNlZCwg
ZGVjb2RlZCk7CiAgIH0KIAogICAvLyBGaWxscyBhUmFuZ2VzIHdpdGggQnl0ZVJhbmdlcyBkZW5v
dGluZyB0aGUgc2VjdGlvbnMgb2YgdGhlIG1lZGlhIHdoaWNoCiAgIC8vIGhhdmUgYmVlbiBkb3du
bG9hZGVkIGFuZCBhcmUgc3RvcmVkIGluIHRoZSBtZWRpYSBjYWNoZS4gVGhlIHJlYWRlcgogICAv
LyBtb25pdG9yIG11c3QgbXVzdCBiZSBoZWxkIHdpdGggZXhhY3RseSBvbmUgbG9jayBjb3VudC4g
VGhlIG5zTWVkaWFTdHJlYW0KICAgLy8gbXVzdCBiZSBwaW5uZWQgd2hpbGUgY2FsbGluZyB0aGlz
LgogICBuc3Jlc3VsdCBHZXRCdWZmZXJlZEJ5dGVzKG5zVEFycmF5PEJ5dGVSYW5nZT4mIGFSYW5n
ZXMpOwogCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1h
Y2hpbmUuY3BwIGIvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lLmNw
cAotLS0gYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUuY3BwCisr
KyBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5jcHAKQEAgLTI5
MiwzNiArMjkyLDQzIEBAIHZvaWQgbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZTo6RGVjb2QK
ICAgICAgICAgKCghYXVkaW9QdW1wICYmIGF1ZGlvUGxheWluZyAmJiBhdWRpb0RlY29kZWQgPCBs
b3dBdWRpb1RocmVzaG9sZCkgfHwKICAgICAgICAgICghdmlkZW9QdW1wICYmIHZpZGVvUXVldWVT
aXplIDwgTE9XX1ZJREVPX0ZSQU1FUykpKQogICAgIHsKICAgICAgIHNraXBUb05leHRLZXlmcmFt
ZSA9IFBSX1RSVUU7CiAgICAgICBMT0coUFJfTE9HX0RFQlVHLCAoIlNraXBwaW5nIHZpZGVvIGRl
Y29kZSB0byB0aGUgbmV4dCBrZXlmcmFtZSIpKTsKICAgICB9CiAKICAgICAvLyBWaWRlbyBkZWNv
ZGUuCisgICAgUFJVaW50MzIgcGFyc2VkID0gMCwgZGVjb2RlZCA9IDA7CiAgICAgaWYgKHZpZGVv
UGxheWluZyAmJiAhdmlkZW9XYWl0KSB7CiAgICAgICAvLyBUaW1lIHRoZSB2aWRlbyBkZWNvZGUs
IHNvIHRoYXQgaWYgaXQncyBzbG93LCB3ZSBjYW4gaW5jcmVhc2Ugb3VyIGxvdwogICAgICAgLy8g
YXVkaW8gdGhyZXNob2xkIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGFuIGF1ZGlvIHVuZGVycnVu
IHdoaWxlIHdlJ3JlCiAgICAgICAvLyB3YWl0aW5nIGZvciBhIHZpZGVvIGRlY29kZSB0byBjb21w
bGV0ZS4KICAgICAgIFRpbWVTdGFtcCBzdGFydCA9IFRpbWVTdGFtcDo6Tm93KCk7Ci0gICAgICB2
aWRlb1BsYXlpbmcgPSBtUmVhZGVyLT5EZWNvZGVWaWRlb0ZyYW1lKHNraXBUb05leHRLZXlmcmFt
ZSwgY3VycmVudFRpbWUpOworICAgICAgdmlkZW9QbGF5aW5nID0gbVJlYWRlci0+RGVjb2RlVmlk
ZW9GcmFtZShza2lwVG9OZXh0S2V5ZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWQpOwogICAgICAgVGltZUR1cmF0aW9uIGRlY29k
ZVRpbWUgPSBUaW1lU3RhbXA6Ok5vdygpIC0gc3RhcnQ7CiAgICAgICBpZiAoIWRlY29kZUNsb3Nl
VG9Eb3dubG9hZCAmJgogICAgICAgICAgIFRIUkVTSE9MRF9GQUNUT1IgKiBkZWNvZGVUaW1lLlRv
TWlsbGlzZWNvbmRzKCkgPiBsb3dBdWRpb1RocmVzaG9sZCkKICAgICAgIHsKICAgICAgICAgbG93
QXVkaW9UaHJlc2hvbGQgPQogICAgICAgICAgIE5TX01JTihzdGF0aWNfY2FzdDxQUkludDY0PihU
SFJFU0hPTERfRkFDVE9SICogZGVjb2RlVGltZS5Ub01pbGxpc2Vjb25kcygpKSwKICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8UFJJbnQ2ND4oQU1QTEVfQVVESU9fTVMpKTsKICAgICAgICAg
YW1wbGVBdWRpb1RocmVzaG9sZCA9IE5TX01BWChUSFJFU0hPTERfRkFDVE9SICogbG93QXVkaW9U
aHJlc2hvbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1wbGVBdWRp
b1RocmVzaG9sZCk7CiAgICAgICAgIExPRyhQUl9MT0dfREVCVUcsCiAgICAgICAgICAgICAoIlNs
b3cgdmlkZW8gZGVjb2RlLCBzZXQgbG93QXVkaW9UaHJlc2hvbGQ9JWxsZCBhbXBsZUF1ZGlvVGhy
ZXNob2xkPSVsbGQiLAogICAgICAgICAgICAgIGxvd0F1ZGlvVGhyZXNob2xkLCBhbXBsZUF1ZGlv
VGhyZXNob2xkKSk7CiAgICAgICB9CiAgICAgfQorICAgIGlmIChwYXJzZWQgfHwgZGVjb2RlZCkg
eworICAgICAgbURlY29kZXItPk5vdGlmeURlY29kZWRGcmFtZXMocGFyc2VkLCBkZWNvZGVkKTsK
KyAgICB9CiAgICAgewogICAgICAgTW9uaXRvckF1dG9FbnRlciBtb24obURlY29kZXItPkdldE1v
bml0b3IoKSk7CiAgICAgICBtRGVjb2Rlci0+R2V0TW9uaXRvcigpLk5vdGlmeUFsbCgpOwogICAg
IH0KIAogICAgIC8vIEF1ZGlvIGRlY29kZS4KICAgICBpZiAoYXVkaW9QbGF5aW5nICYmICFhdWRp
b1dhaXQpIHsKICAgICAgIGF1ZGlvUGxheWluZyA9IG1SZWFkZXItPkRlY29kZUF1ZGlvRGF0YSgp
OwpAQCAtOTIyLDE3ICs5MjksMTcgQEAgbnNyZXN1bHQgbnNCdWlsdGluRGVjb2RlclN0YXRlTWFj
aGluZTo6UgogICAgICAgICBMb2FkTWV0YWRhdGEoKTsKICAgICAgICAgaWYgKG1TdGF0ZSA9PSBE
RUNPREVSX1NUQVRFX1NIVVRET1dOKSB7CiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
IAogICAgICAgICBWaWRlb0RhdGEqIHZpZGVvRGF0YSA9IEZpbmRTdGFydFRpbWUoKTsKICAgICAg
ICAgaWYgKHZpZGVvRGF0YSkgewogICAgICAgICAgIE1vbml0b3JBdXRvRXhpdCBleGl0TW9uKG1E
ZWNvZGVyLT5HZXRNb25pdG9yKCkpOwotICAgICAgICAgIFJlbmRlclZpZGVvRnJhbWUodmlkZW9E
YXRhKTsKKyAgICAgICAgICBSZW5kZXJWaWRlb0ZyYW1lKHZpZGVvRGF0YSwgVGltZVN0YW1wOjpO
b3coKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTdGFydCB0aGUgZGVjb2RlIHRocmVhZHMs
IHNvIHRoYXQgd2UgY2FuIHByZSBidWZmZXIgdGhlIHN0cmVhbXMuCiAgICAgICAgIC8vIGFuZCBj
YWxjdWxhdGUgdGhlIHN0YXJ0IHRpbWUgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBkdXJhdGlv
bi4KICAgICAgICAgaWYgKE5TX0ZBSUxFRChTdGFydERlY29kZVRocmVhZHMoKSkpIHsKICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0xMDUxLDIzICsxMDU4LDIzIEBAIG5zcmVz
dWx0IG5zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmU6OlIKICAgICAgICAgICB9CiAgICAgICAg
ICAgaWYgKE5TX1NVQ0NFRURFRChyZXMpKXsKICAgICAgICAgICAgIFNvdW5kRGF0YSogYXVkaW8g
PSBIYXNBdWRpbygpID8gbVJlYWRlci0+bUF1ZGlvUXVldWUuUGVla0Zyb250KCkgOiBuc251bGw7
CiAgICAgICAgICAgICBOU19BU1NFUlRJT04oIWF1ZGlvIHx8IChhdWRpby0+bVRpbWUgPD0gc2Vl
a1RpbWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWtUaW1lIDw9
IGF1ZGlvLT5tVGltZSArIGF1ZGlvLT5tRHVyYXRpb24pLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICJTZWVrIHRhcmdldCBzaG91bGQgbGllIGluc2lkZSB0aGUgZmlyc3QgYXVkaW8gYmxvY2sg
YWZ0ZXIgc2VlayIpOwogICAgICAgICAgICAgUFJJbnQ2NCBzdGFydFRpbWUgPSAoYXVkaW8gJiYg
YXVkaW8tPm1UaW1lIDwgc2Vla1RpbWUpID8gYXVkaW8tPm1UaW1lIDogc2Vla1RpbWU7CiAgICAg
ICAgICAgICBtQXVkaW9TdGFydFRpbWUgPSBzdGFydFRpbWU7Ci0gICAgICAgICAgICBtUGxheUR1
cmF0aW9uID0gVGltZUR1cmF0aW9uOjpGcm9tTWlsbGlzZWNvbmRzKHN0YXJ0VGltZSk7CisgICAg
ICAgICAgICBtUGxheUR1cmF0aW9uID0gVGltZUR1cmF0aW9uOjpGcm9tTWlsbGlzZWNvbmRzKHN0
YXJ0VGltZSAtIG1TdGFydFRpbWUpOwogICAgICAgICAgICAgaWYgKEhhc1ZpZGVvKCkpIHsKICAg
ICAgICAgICAgICAgbnNBdXRvUHRyPFZpZGVvRGF0YT4gdmlkZW8obVJlYWRlci0+bVZpZGVvUXVl
dWUuUGVla0Zyb250KCkpOwogICAgICAgICAgICAgICBpZiAodmlkZW8pIHsKICAgICAgICAgICAg
ICAgICBOU19BU1NFUlRJT04odmlkZW8tPm1UaW1lIDw9IHNlZWtUaW1lICYmIHNlZWtUaW1lIDw9
IHZpZGVvLT5tRW5kVGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZWsgdGFy
Z2V0IHNob3VsZCBsaWUgaW5zaWRlIHRoZSBmaXJzdCBmcmFtZSBhZnRlciBzZWVrIik7Ci0gICAg
ICAgICAgICAgICAgUmVuZGVyVmlkZW9GcmFtZSh2aWRlbyk7CisgICAgICAgICAgICAgICAgUmVu
ZGVyVmlkZW9GcmFtZSh2aWRlbywgVGltZVN0YW1wOjpOb3coKSk7CiAgICAgICAgICAgICAgICAg
bVJlYWRlci0+bVZpZGVvUXVldWUuUG9wRnJvbnQoKTsKICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtRGVjb2Rlci0+U3RhcnRQ
cm9ncmVzc1VwZGF0ZXMoKTsKICAgICAgICAgaWYgKG1TdGF0ZSA9PSBERUNPREVSX1NUQVRFX1NI
VVRET1dOKQogICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTE5MywyOCArMTIwMCwzMSBAQCBuc3Jl
c3VsdCBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpSCiAgICAgICB9CiAgICAgICBicmVh
azsKICAgICB9CiAgIH0KIAogICByZXR1cm4gTlNfT0s7CiB9CiAKLXZvaWQgbnNCdWlsdGluRGVj
b2RlclN0YXRlTWFjaGluZTo6UmVuZGVyVmlkZW9GcmFtZShWaWRlb0RhdGEqIGFEYXRhKQordm9p
ZCBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpSZW5kZXJWaWRlb0ZyYW1lKFZpZGVvRGF0
YSogYURhdGEsIFRpbWVTdGFtcCBhVGFyZ2V0KQogewogICBOU19BU1NFUlRJT04oSXNDdXJyZW50
VGhyZWFkKG1EZWNvZGVyLT5tU3RhdGVNYWNoaW5lVGhyZWFkKSwgIlNob3VsZCBiZSBvbiBzdGF0
ZSBtYWNoaW5lIHRocmVhZC4iKTsKIAogICBpZiAoYURhdGEtPm1EdXBsaWNhdGUpIHsKICAgICBy
ZXR1cm47CiAgIH0KIAogICBuc1JlZlB0cjxJbWFnZT4gaW1hZ2UgPSBhRGF0YS0+bUltYWdlOwog
ICBpZiAoaW1hZ2UpIHsKICAgICBjb25zdCBuc1ZpZGVvSW5mbyYgaW5mbyA9IG1SZWFkZXItPkdl
dEluZm8oKTsKLSAgICBtRGVjb2Rlci0+U2V0VmlkZW9EYXRhKGdmeEludFNpemUoaW5mby5tUGlj
dHVyZS53aWR0aCwgaW5mby5tUGljdHVyZS5oZWlnaHQpLCBpbmZvLm1QaXhlbEFzcGVjdFJhdGlv
LCBpbWFnZSk7CisgICAgbURlY29kZXItPlNldFZpZGVvRGF0YShnZnhJbnRTaXplKGluZm8ubVBp
Y3R1cmUud2lkdGgsIGluZm8ubVBpY3R1cmUuaGVpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm8ubVBpeGVsQXNwZWN0UmF0aW8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUYXJnZXQpOwogICB9CiB9CiAK
IFBSSW50NjQKIG5zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmU6OkdldEF1ZGlvQ2xvY2soKQog
ewogICBOU19BU1NFUlRJT04oSXNDdXJyZW50VGhyZWFkKG1EZWNvZGVyLT5tU3RhdGVNYWNoaW5l
VGhyZWFkKSwgIlNob3VsZCBiZSBvbiBzdGF0ZSBtYWNoaW5lIHRocmVhZC4iKTsKICAgaWYgKCFt
QXVkaW9TdHJlYW0gfHwgIUhhc0F1ZGlvKCkpCkBAIC0xMjQ5LDUzICsxMjU5LDcyIEBAIHZvaWQg
bnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZTo6QWR2YW4KICAgICAvLyB0aGUgZW5kIG9mIHRo
ZSBhdWRpbywgdXNlIHRoZSBhdWRpbyBjbG9jay4gSG93ZXZlciBpZiB3ZSd2ZSBmaW5pc2hlZAog
ICAgIC8vIGF1ZGlvLCBvciBkb24ndCBoYXZlIGF1ZGlvLCB1c2UgdGhlIHN5c3RlbSBjbG9jay4K
ICAgICBQUkludDY0IGNsb2NrX3RpbWUgPSAtMTsKICAgICBQUkludDY0IGF1ZGlvX3RpbWUgPSBH
ZXRBdWRpb0Nsb2NrKCk7CiAgICAgaWYgKEhhc0F1ZGlvKCkgJiYgIW1BdWRpb0NvbXBsZXRlZCAm
JiBhdWRpb190aW1lICE9IC0xKSB7CiAgICAgICBjbG9ja190aW1lID0gYXVkaW9fdGltZTsKICAg
ICAgIC8vIFJlc3luYyBhZ2FpbnN0IHRoZSBhdWRpbyBjbG9jaywgd2hpbGUgd2UncmUgdHJ1c3Rp
bmcgdGhlCiAgICAgICAvLyBhdWRpbyBjbG9jay4gVGhpcyBlbnN1cmVzIG5vICJkcmlmdCIsIHBh
cnRpY3VsYXJseSBvbiBMaW51eC4KLSAgICAgIG1QbGF5U3RhcnRUaW1lID0gVGltZVN0YW1wOjpO
b3coKSAtIFRpbWVEdXJhdGlvbjo6RnJvbU1pbGxpc2Vjb25kcyhjbG9ja190aW1lKTsKKyAgICAg
IG1QbGF5RHVyYXRpb24gPSBUaW1lRHVyYXRpb246OkZyb21NaWxsaXNlY29uZHMoY2xvY2tfdGlt
ZSk7CisgICAgICBtUGxheVN0YXJ0VGltZSA9IFRpbWVTdGFtcDo6Tm93KCk7CiAgICAgfSBlbHNl
IHsKICAgICAgIC8vIFNvdW5kIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtLiBTeW5jIHRvIHRo
ZSBzeXN0ZW0gY2xvY2suCiAgICAgICBUaW1lRHVyYXRpb24gdCA9IFRpbWVTdGFtcDo6Tm93KCkg
LSBtUGxheVN0YXJ0VGltZSArIG1QbGF5RHVyYXRpb247CiAgICAgICBjbG9ja190aW1lID0gKFBS
SW50NjQpKDEwMDAgKiB0LlRvU2Vjb25kcygpKTsKICAgICAgIC8vIEVuc3VyZSB0aGUgY2xvY2sg
Y2FuIG5ldmVyIGdvIGJhY2t3YXJkcy4KICAgICAgIE5TX0FTU0VSVElPTihtQ3VycmVudEZyYW1l
VGltZSA8PSBjbG9ja190aW1lLCAiQ2xvY2sgc2hvdWxkIGdvIGZvcndhcmRzIik7CiAgICAgICBj
bG9ja190aW1lID0gTlNfTUFYKG1DdXJyZW50RnJhbWVUaW1lLCBjbG9ja190aW1lKSArIG1TdGFy
dFRpbWU7CiAgICAgfQogCisgICAgLy8gU2tpcCB2aWRlbyBmcmFtZXMgdXAgdG8gdGhlIGN1cnJl
bnQgcGxheWJhY2sgcG9zaXRpb24uCiAgICAgTlNfQVNTRVJUSU9OKGNsb2NrX3RpbWUgPj0gbVN0
YXJ0VGltZSwgIlNob3VsZCBoYXZlIHBvc2l0aXZlIGNsb2NrIHRpbWUuIik7CiAgICAgbnNBdXRv
UHRyPFZpZGVvRGF0YT4gdmlkZW9EYXRhOwogICAgIGlmIChtUmVhZGVyLT5tVmlkZW9RdWV1ZS5H
ZXRTaXplKCkgPiAwKSB7CiAgICAgICBWaWRlb0RhdGEqIGRhdGEgPSBtUmVhZGVyLT5tVmlkZW9R
dWV1ZS5QZWVrRnJvbnQoKTsKICAgICAgIHdoaWxlIChjbG9ja190aW1lID49IGRhdGEtPm1UaW1l
KSB7CiAgICAgICAgIG1WaWRlb0ZyYW1lRW5kVGltZSA9IGRhdGEtPm1FbmRUaW1lOwogICAgICAg
ICB2aWRlb0RhdGEgPSBkYXRhOwogICAgICAgICBtUmVhZGVyLT5tVmlkZW9RdWV1ZS5Qb3BGcm9u
dCgpOwogICAgICAgICBtRGVjb2Rlci0+VXBkYXRlUGxheWJhY2tPZmZzZXQoZGF0YS0+bU9mZnNl
dCk7CiAgICAgICAgIGlmIChtUmVhZGVyLT5tVmlkZW9RdWV1ZS5HZXRTaXplKCkgPT0gMCkKICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGF0YSA9IG1SZWFkZXItPm1WaWRlb1F1ZXVlLlBlZWtG
cm9udCgpOwogICAgICAgfQogICAgIH0KIAotICAgIFBSSW50NjQgZnJhbWVEdXJhdGlvbiA9IEFV
RElPX0RVUkFUSU9OX01TOworICAgIC8vIFRoZSB0aW1lc3RhbXAgb2YgdGhlIG5leHQgZnJhbWUg
dG8gYmUgZGlzcGxheWVkLgorICAgIFRpbWVTdGFtcCBuZXh0RnJhbWVUaW1lOworCiAgICAgaWYg
KHZpZGVvRGF0YSkgewotICAgICAgLy8gRGVjb2RlIG9uZSBmcmFtZSBhbmQgZGlzcGxheSBpdAot
ICAgICAgTlNfQVNTRVJUSU9OKHZpZGVvRGF0YS0+bVRpbWUgPj0gbVN0YXJ0VGltZSwgIlNob3Vs
ZCBoYXZlIHBvc2l0aXZlIGZyYW1lIHRpbWUiKTsKKyAgICAgIC8vIERpc3BsYXkgdGhlIG5leHQg
ZnJhbWUuCisgICAgICBOU19BU1NFUlRJT04odmlkZW9EYXRhLT5tVGltZSA+PSBtU3RhcnRUaW1l
LAorICAgICAgICAgICAgICAgICAgICJTaG91bGQgaGF2ZSBwb3NpdGl2ZSBmcmFtZSB0aW1lIik7
CisKKyAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc3lzdGVtLWNsb2NrIHRpbWUgYXQgd2hpY2ggdGhl
IGZyYW1lIHNob3VsZCBzdGFydCBiZWluZyBkaXNwbGF5ZWQuCisgICAgICBUaW1lU3RhbXAgcHJl
c1RpbWUgPSBtUGxheVN0YXJ0VGltZSAtIG1QbGF5RHVyYXRpb24gKworICAgICAgICBUaW1lRHVy
YXRpb246OkZyb21NaWxsaXNlY29uZHModmlkZW9EYXRhLT5tVGltZSAtIG1TdGFydFRpbWUpOwor
CisgICAgICAvLyBGcmFtZSBlbmQgc3lzdGVtLWNsb2NrIHRpbWUuCisgICAgICBuZXh0RnJhbWVU
aW1lID0gbVBsYXlTdGFydFRpbWUgLSBtUGxheUR1cmF0aW9uICsKKyAgICAgICAgVGltZUR1cmF0
aW9uOjpGcm9tTWlsbGlzZWNvbmRzKHZpZGVvRGF0YS0+bUVuZFRpbWUgLSBtU3RhcnRUaW1lKTsK
KworICAgICAgTlNfQVNTRVJUSU9OKHByZXNUaW1lIDw9IFRpbWVTdGFtcDo6Tm93KCksCisgICAg
ICAgICAgICAgICAgICAgIkZyYW1lIG11c3Qgc3RhcnQgYmVmb3JlIG9yIGF0IG5vdyIpOwogICAg
ICAgewogICAgICAgICBNb25pdG9yQXV0b0V4aXQgZXhpdE1vbihtRGVjb2Rlci0+R2V0TW9uaXRv
cigpKTsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZSB2aWRlbywgd2Ugd2FudCB0byBpbmNyZW1lbnQg
dGhlIGNsb2NrIGluIHN0ZXBzIG9mIHRoZSBmcmFtZQotICAgICAgICAvLyBkdXJhdGlvbi4KLSAg
ICAgICAgUmVuZGVyVmlkZW9GcmFtZSh2aWRlb0RhdGEpOworICAgICAgICBSZW5kZXJWaWRlb0Zy
YW1lKHZpZGVvRGF0YSwgcHJlc1RpbWUpOwogICAgICAgfQotICAgICAgZnJhbWVEdXJhdGlvbiA9
IHZpZGVvRGF0YS0+bUVuZFRpbWUgLSB2aWRlb0RhdGEtPm1UaW1lOworICAgICAgbURlY29kZXIt
Pk5vdGlmeVByZXNlbnRlZEZyYW1lKCk7CisKICAgICAgIHZpZGVvRGF0YSA9IG5zbnVsbDsKKyAg
ICB9IGVsc2UgeworICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB2aWRlbywganVzdCBhc3N1bWUgYW4g
YXJiaXRyYXJ5ICJmcmFtZSIgZHVyYXRpb24uCisgICAgICBuZXh0RnJhbWVUaW1lID0KKyAgICAg
ICAgVGltZVN0YW1wOjpOb3coKSArIFRpbWVEdXJhdGlvbjo6RnJvbU1pbGxpc2Vjb25kcyhBVURJ
T19EVVJBVElPTl9NUyk7CiAgICAgfQogCiAgICAgLy8gS2ljayB0aGUgZGVjb2RlIHRocmVhZCBp
biBjYXNlIGl0IGZpbGxlZCBpdHMgYnVmZmVycyBhbmQgcHV0IGl0c2VsZgogICAgIC8vIHRvIHNs
ZWVwLgogICAgIG1EZWNvZGVyLT5HZXRNb25pdG9yKCkuTm90aWZ5QWxsKCk7CiAKICAgICAvLyBD
YXAgdGhlIGN1cnJlbnQgdGltZSB0byB0aGUgbGFyZ2VyIG9mIHRoZSBhdWRpbyBhbmQgdmlkZW8g
ZW5kIHRpbWUuCiAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgaWYgd2UncmUgcnVubmluZyBvZmYg
dGhlIHN5c3RlbSBjbG9jaywgd2UgZG9uJ3QKQEAgLTEzMTMsMTggKzEzNDIsMjIgQEAgdm9pZCBu
c0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpBZHZhbgogICAgIH0KIAogICAgIC8vIElmIHRo
ZSBudW1iZXIgb2YgYXVkaW8vdmlkZW8gc2FtcGxlcyBxdWV1ZWQgaGFzIGNoYW5nZWQsIGVpdGhl
ciBieQogICAgIC8vIHRoaXMgZnVuY3Rpb24gcG9wcGluZyBhbmQgcGxheWluZyBhIHZpZGVvIHNh
bXBsZSwgb3IgYnkgdGhlIGF1ZGlvCiAgICAgLy8gdGhyZWFkIHBvcHBpbmcgYW5kIHBsYXlpbmcg
YW4gYXVkaW8gc2FtcGxlLCB3ZSBtYXkgbmVlZCB0byB1cGRhdGUgb3VyCiAgICAgLy8gcmVhZHkg
c3RhdGUuIFBvc3QgYW4gdXBkYXRlIHRvIGRvIHNvLgogICAgIFVwZGF0ZVJlYWR5U3RhdGUoKTsK
IAotICAgIE5TX0FTU0VSVElPTihmcmFtZUR1cmF0aW9uID49IDAsICJGcmFtZSBkdXJhdGlvbiBt
dXN0IGJlIHBvc2l0aXZlLiIpOwotICAgIFdhaXQoZnJhbWVEdXJhdGlvbik7CisgICAgLy8gV2Fp
dCB1bnRpbCBpdCdzIGFib3V0IHRpbWUgdG8gZGlzcGxheSB0aGUgbmV4dCBmcmFtZS4KKyAgICBU
aW1lU3RhbXAgbm93ID0gVGltZVN0YW1wOjpOb3coKTsKKyAgICBpZiAobm93IDwgbmV4dEZyYW1l
VGltZSkgeworICAgICAgV2FpdCgobmV4dEZyYW1lVGltZSAtIG5vdykuVG9NaWxsaXNlY29uZHMo
KSk7CisgICAgfQorCiAgIH0gZWxzZSB7CiAgICAgaWYgKElzUGxheWluZygpKSB7CiAgICAgICBT
dG9wUGxheWJhY2soQVVESU9fUEFVU0UpOwogICAgICAgbURlY29kZXItPkdldE1vbml0b3IoKS5O
b3RpZnlBbGwoKTsKICAgICB9CiAKICAgICBpZiAobVN0YXRlID09IERFQ09ERVJfU1RBVEVfREVD
T0RJTkcgfHwKICAgICAgICAgbVN0YXRlID09IERFQ09ERVJfU1RBVEVfQ09NUExFVEVEKSB7CmRp
ZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUuaCBi
L2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5oCi0tLSBhL2NvbnRl
bnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5oCisrKyBiL2NvbnRlbnQvbWVk
aWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5oCkBAIC0yOTUsMTcgKzI5NSwxNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgLy8gRmluZHMgdGhlIGVuZCB0aW1lIG9mIHRoZSBsYXN0IGZyYW1lIG9m
IGRhdGEgaW4gdGhlIGZpbGUsIHN0b3JpbmcgdGhlIHZhbHVlCiAgIC8vIGluIG1FbmRUaW1lIGlm
IHN1Y2Nlc3NmdWwuIFRoZSBkZWNvZGVyIG11c3QgYmUgaGVsZCB3aXRoIGV4YWN0bHkgb25lIGxv
Y2sKICAgLy8gY291bnQuIENhbGxlZCBvbiB0aGUgc3RhdGUgbWFjaGluZSB0aHJlYWQuCiAgIHZv
aWQgRmluZEVuZFRpbWUoKTsKIAogICAvLyBQZXJmb3JtcyBZQ2JDciB0byBSR0IgY29udmVyc2lv
biwgYW5kIHB1c2hlcyB0aGUgaW1hZ2UgZG93biB0aGUKICAgLy8gcmVuZGVyaW5nIHBpcGVsaW5l
LiBDYWxsZWQgb24gdGhlIHN0YXRlIG1hY2hpbmUgdGhyZWFkLgotICB2b2lkIFJlbmRlclZpZGVv
RnJhbWUoVmlkZW9EYXRhKiBhRGF0YSk7CisgIHZvaWQgUmVuZGVyVmlkZW9GcmFtZShWaWRlb0Rh
dGEqIGFEYXRhLCBUaW1lU3RhbXAgYVRhcmdldCk7CiAKICAgLy8gSWYgd2UgaGF2ZSB2aWRlbywg
ZGlzcGxheSBhIHZpZGVvIGZyYW1lIGlmIGl0J3MgdGltZSBmb3IgZGlzcGxheSBoYXMKICAgLy8g
YXJyaXZlZCwgb3RoZXJ3aXNlIHNsZWVwIHVudGlsIGl0J3MgdGltZSBmb3IgdGhlIG5leHQgc2Ft
cGxlLiBVcGRhdGUKICAgLy8gdGhlIGN1cnJlbnQgZnJhbWUgdGltZSBhcyBhcHByb3ByaWF0ZSwg
YW5kIHRyaWdnZXIgcmVhZHkgc3RhdGUgdXBkYXRlLgogICAvLyBUaGUgZGVjb2RlciBtb25pdG9y
IG11c3QgYmUgaGVsZCB3aXRoIGV4YWN0bHkgb25lIGxvY2sgY291bnQuIENhbGxlZAogICAvLyBv
biB0aGUgc3RhdGUgbWFjaGluZSB0aHJlYWQuCiAgIHZvaWQgQWR2YW5jZUZyYW1lKCk7CiAKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNNZWRpYURlY29kZXIuY3BwIGIvY29udGVudC9tZWRp
YS9uc01lZGlhRGVjb2Rlci5jcHAKLS0tIGEvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5j
cHAKKysrIGIvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5jcHAKQEAgLTcwLDE2ICs3MCwy
MSBAQAogLy8gbnNNZWRpYURlY29kZXI6OkNhblBsYXlUaHJvdWdoKCkgY2FsY3VsYXRpb24gbW9y
ZSBzdGFibGUgaW4gdGhlIGNhc2Ugb2YKIC8vIGZsdWN0dWF0aW5nIGJpdHJhdGVzLgogI2RlZmlu
ZSBDQU5fUExBWV9USFJPVUdIX01BUkdJTiAyMAogCiBuc01lZGlhRGVjb2Rlcjo6bnNNZWRpYURl
Y29kZXIoKSA6CiAgIG1FbGVtZW50KDApLAogICBtUkdCV2lkdGgoLTEpLAogICBtUkdCSGVpZ2h0
KC0xKSwKKyAgbVN0YXRzTW9uaXRvcigibnNNZWRpYURlY29kZXIuc3RhdHMiKSwKKyAgbVBhcnNl
ZEZyYW1lcygwKSwKKyAgbURlY29kZWRGcmFtZXMoMCksCisgIG1QcmVzZW50ZWRGcmFtZXMoMCks
CisgIG1QYWludGVkRnJhbWVzKDApLAogICBtVmlkZW9VcGRhdGVMb2NrKG5zbnVsbCksCiAgIG1Q
aXhlbEFzcGVjdFJhdGlvKDEuMCksCiAgIG1GcmFtZUJ1ZmZlckxlbmd0aCgwKSwKICAgbVBpbm5l
ZEZvclNlZWsoUFJfRkFMU0UpLAogICBtU2l6ZUNoYW5nZWQoUFJfRkFMU0UpLAogICBtU2h1dHRp
bmdEb3duKFBSX0ZBTFNFKQogewogICBNT1pfQ09VTlRfQ1RPUihuc01lZGlhRGVjb2Rlcik7CkBA
IC0yNDAsMjkgKzI0NSwzMSBAQCB2b2lkIG5zTWVkaWFEZWNvZGVyOjpGaXJlVGltZVVwZGF0ZSgp
CiB7CiAgIGlmICghbUVsZW1lbnQpCiAgICAgcmV0dXJuOwogICBtRWxlbWVudC0+RmlyZVRpbWVV
cGRhdGUoUFJfVFJVRSk7CiB9CiAKIHZvaWQgbnNNZWRpYURlY29kZXI6OlNldFZpZGVvRGF0YShj
b25zdCBnZnhJbnRTaXplJiBhU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBhUGl4ZWxBc3BlY3RSYXRpbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbWFnZSogYUltYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElt
YWdlKiBhSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZVN0YW1w
IGFUYXJnZXQpCiB7CiAgIG5zQXV0b0xvY2sgbG9jayhtVmlkZW9VcGRhdGVMb2NrKTsKIAogICBp
ZiAobVJHQldpZHRoICE9IGFTaXplLndpZHRoIHx8IG1SR0JIZWlnaHQgIT0gYVNpemUuaGVpZ2h0
IHx8CiAgICAgICBtUGl4ZWxBc3BlY3RSYXRpbyAhPSBhUGl4ZWxBc3BlY3RSYXRpbykgewogICAg
IG1SR0JXaWR0aCA9IGFTaXplLndpZHRoOwogICAgIG1SR0JIZWlnaHQgPSBhU2l6ZS5oZWlnaHQ7
CiAgICAgbVBpeGVsQXNwZWN0UmF0aW8gPSBhUGl4ZWxBc3BlY3RSYXRpbzsKICAgICBtU2l6ZUNo
YW5nZWQgPSBQUl9UUlVFOwogICB9CiAgIGlmIChtSW1hZ2VDb250YWluZXIgJiYgYUltYWdlKSB7
CiAgICAgbUltYWdlQ29udGFpbmVyLT5TZXRDdXJyZW50SW1hZ2UoYUltYWdlKTsKKyAgICBtSW1h
Z2VDb250YWluZXItPlNldFBhaW50VGFyZ2V0KGFUYXJnZXQpOwogICB9CiB9CiAKIHZvaWQgbnNN
ZWRpYURlY29kZXI6OlBpbkZvclNlZWsoKQogewogICBuc01lZGlhU3RyZWFtKiBzdHJlYW0gPSBH
ZXRDdXJyZW50U3RyZWFtKCk7CiAgIGlmICghc3RyZWFtIHx8IG1QaW5uZWRGb3JTZWVrKSB7CiAg
ICAgcmV0dXJuOwpAQCAtMzEwLDggKzMxNywzNiBAQCBQUkJvb2wgbnNNZWRpYURlY29kZXI6OkNh
blBsYXlUaHJvdWdoKCkKICAgLy8gcGxheWJhY2sgcG9zaXRpb24sIHNvIHRoYXQgaWYgdGhlIGJp
dHJhdGUgb2YgdGhlIG1lZGlhIGZsdWN0dWF0ZXMsIG9yIGlmCiAgIC8vIG91ciBkb3dubG9hZCBy
YXRlIG9yIGRlY29kZSByYXRlIGVzdGltYXRpb24gaXMgb3RoZXJ3aXNlIGluYWNjdXJhdGUsCiAg
IC8vIHdlIGRvbid0IHN1ZGRlbmx5IGRpc2NvdmVyIHRoYXQgd2UgbmVlZCB0byBidWZmZXIuIFRo
aXMgaXMgcGFydGljdWxhcmx5CiAgIC8vIHJlcXVpcmVkIG5lYXIgdGhlIHN0YXJ0IG9mIHRoZSBt
ZWRpYSwgd2hlbiBub3QgbXVjaCBkYXRhIGlzIGRvd25sb2FkZWQuCiAgIFBSSW50NjQgcmVhZEFo
ZWFkTWFyZ2luID0gc3RhdHMubVBsYXliYWNrUmF0ZSAqIENBTl9QTEFZX1RIUk9VR0hfTUFSR0lO
OwogICByZXR1cm4gc3RhdHMubVRvdGFsQnl0ZXMgPT0gc3RhdHMubURvd25sb2FkUG9zaXRpb24g
fHwKICAgICAgICAgIHN0YXRzLm1Eb3dubG9hZFBvc2l0aW9uID4gc3RhdHMubVBsYXliYWNrUG9z
aXRpb24gKyByZWFkQWhlYWRNYXJnaW47CiB9CisKK3ZvaWQgbnNNZWRpYURlY29kZXI6Ok5vdGlm
eVBhaW50ZWRGcmFtZSgpIHsKKyAgbW96aWxsYTo6TW9uaXRvckF1dG9FbnRlciBtb24obVN0YXRz
TW9uaXRvcik7CisgICsrbVBhaW50ZWRGcmFtZXM7Cit9CisKK3ZvaWQgbnNNZWRpYURlY29kZXI6
Ok5vdGlmeVByZXNlbnRlZEZyYW1lKCkgeworICBtb3ppbGxhOjpNb25pdG9yQXV0b0VudGVyIG1v
bihtU3RhdHNNb25pdG9yKTsKKyAgKyttUHJlc2VudGVkRnJhbWVzOworfQorCit2b2lkIG5zTWVk
aWFEZWNvZGVyOjpOb3RpZnlEZWNvZGVkRnJhbWVzKFBSVWludDMyIGFQYXJzZWQsIFBSVWludDMy
IGFEZWNvZGVkKSB7CisgIG1vemlsbGE6Ok1vbml0b3JBdXRvRW50ZXIgbW9uKG1TdGF0c01vbml0
b3IpOworICBtUGFyc2VkRnJhbWVzICs9IGFQYXJzZWQ7CisgIG1EZWNvZGVkRnJhbWVzICs9IGFE
ZWNvZGVkOworfQorCisjZGVmaW5lIElNUExfR0VUX1NUQVRfTUVUSE9EKFgpIFwKK1BSVWludDMy
IG5zTWVkaWFEZWNvZGVyOjpHZXQjI1gjI0ZyYW1lcygpIHsgXAorICBtb3ppbGxhOjpNb25pdG9y
QXV0b0VudGVyIG1vbihtU3RhdHNNb25pdG9yKTsgXAorICByZXR1cm4gbSMjWCMjRnJhbWVzOyBc
Cit9CisKK0lNUExfR0VUX1NUQVRfTUVUSE9EKFBhcnNlZCk7CitJTVBMX0dFVF9TVEFUX01FVEhP
RChEZWNvZGVkKTsKK0lNUExfR0VUX1NUQVRfTUVUSE9EKFByZXNlbnRlZCk7CitJTVBMX0dFVF9T
VEFUX01FVEhPRChQYWludGVkKTsKKwpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc01lZGlh
RGVjb2Rlci5oIGIvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5oCi0tLSBhL2NvbnRlbnQv
bWVkaWEvbnNNZWRpYURlY29kZXIuaAorKysgYi9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVy
LmgKQEAgLTQyLDE2ICs0MiwxNyBAQAogCiAjaW5jbHVkZSAibnNJUHJpbmNpcGFsLmgiCiAjaW5j
bHVkZSAibnNTaXplLmgiCiAjaW5jbHVkZSAicHJsb2cuaCIKICNpbmNsdWRlICJnZnhDb250ZXh0
LmgiCiAjaW5jbHVkZSAiZ2Z4UmVjdC5oIgogI2luY2x1ZGUgIm5zSVRpbWVyLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VMYXllcnMuaCIKKyNpbmNsdWRlICJtb3ppbGxhL01vbml0b3IuaCIKIAogY2xhc3Mg
bnNIVE1MTWVkaWFFbGVtZW50OwogY2xhc3MgbnNNZWRpYVN0cmVhbTsKIGNsYXNzIG5zSVN0cmVh
bUxpc3RlbmVyOwogY2xhc3MgbnNUaW1lUmFuZ2VzOwogCiAvLyBUaGUgc2l6ZSB0byB1c2UgZm9y
IGF1ZGlvIGRhdGEgZnJhbWVzIGluIE1vekF1ZGlvQXZhaWxhYmxlIGV2ZW50cy4KIC8vIFRoaXMg
dmFsdWUgaXMgcGVyIGNoYW5uZWwsIGFuZCBpcyBjaG9zZW4gdG8gZ2l2ZSB+NDMgZnBzIG9mIGV2
ZW50cywKQEAgLTgyLDE2ICs4MywxNyBAQCBwcml2YXRlOgogLy8gd2hpY2ggY2FuIGJlIGNhbGxl
ZCBmcm9tIGFueSB0aHJlYWQuCiBjbGFzcyBuc01lZGlhRGVjb2RlciA6IHB1YmxpYyBuc0lPYnNl
cnZlcgogewogcHVibGljOgogICB0eXBlZGVmIG1vemlsbGE6OlRpbWVTdGFtcCBUaW1lU3RhbXA7
CiAgIHR5cGVkZWYgbW96aWxsYTo6VGltZUR1cmF0aW9uIFRpbWVEdXJhdGlvbjsKICAgdHlwZWRl
ZiBtb3ppbGxhOjpsYXllcnM6OkltYWdlQ29udGFpbmVyIEltYWdlQ29udGFpbmVyOwogICB0eXBl
ZGVmIG1vemlsbGE6OmxheWVyczo6SW1hZ2UgSW1hZ2U7CisgIHR5cGVkZWYgbW96aWxsYTo6TW9u
aXRvciBNb25pdG9yOwogCiAgIG5zTWVkaWFEZWNvZGVyKCk7CiAgIHZpcnR1YWwgfm5zTWVkaWFE
ZWNvZGVyKCk7CiAKICAgLy8gQ3JlYXRlIGEgbmV3IGRlY29kZXIgb2YgdGhlIHNhbWUgdHlwZSBh
cyB0aGlzIG9uZS4KICAgdmlydHVhbCBuc01lZGlhRGVjb2RlciogQ2xvbmUoKSA9IDA7CiAKICAg
Ly8gUGVyZm9ybSBhbnkgaW5pdGlhbGl6YXRpb24gcmVxdWlyZWQgZm9yIHRoZSBkZWNvZGVyLgpA
QCAtMjcxLDI2ICsyNzMsNTAgQEAgcHVibGljOgogICAvLyB0aGUgZWxlbWVudCBpcyBub3QgYSB2
aWRlbyBlbGVtZW50LiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkKICAgLy8gdGhyZWFkOyBJ
bWFnZUNvbnRhaW5lcnMgY2FuIGJlIHVzZWQgZnJvbSBhbnkgdGhyZWFkLgogICBJbWFnZUNvbnRh
aW5lciogR2V0SW1hZ2VDb250YWluZXIoKSB7IHJldHVybiBtSW1hZ2VDb250YWluZXI7IH0KIAog
ICAvLyBTZXQgdGhlIHZpZGVvIHdpZHRoLCBoZWlnaHQsIHBpeGVsIGFzcGVjdCByYXRpbywgYW5k
IGN1cnJlbnQgaW1hZ2UuCiAgIC8vIE93bmVyc2hpcCBvZiB0aGUgaW1hZ2UgaXMgdHJhbnNmZXJy
ZWQgdG8gdGhlIGRlY29kZXIuCiAgIHZvaWQgU2V0VmlkZW9EYXRhKGNvbnN0IGdmeEludFNpemUm
IGFTaXplLAogICAgICAgICAgICAgICAgICAgICBmbG9hdCBhUGl4ZWxBc3BlY3RSYXRpbywKLSAg
ICAgICAgICAgICAgICAgICAgSW1hZ2UqIGFJbWFnZSk7CisgICAgICAgICAgICAgICAgICAgIElt
YWdlKiBhSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgIFRpbWVTdGFtcCBhVGFyZ2V0KTsKIAog
ICAvLyBDb25zdHJ1Y3RzIHRoZSB0aW1lIHJhbmdlcyByZXByZXNlbnRpbmcgd2hhdCBzZWdtZW50
cyBvZiB0aGUgbWVkaWEKICAgLy8gYXJlIGJ1ZmZlcmVkIGFuZCBwbGF5YWJsZS4KICAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRCdWZmZXJlZChuc1RpbWVSYW5nZXMqIGFCdWZmZXJlZCkgPSAwOwogCiAg
IC8vIFJldHVybnMgUFJfVFJVRSBpZiB3ZSBjYW4gcGxheSB0aGUgZW50aXJlIG1lZGlhIHRocm91
Z2ggd2l0aG91dCBzdG9wcGluZwogICAvLyB0byBidWZmZXIsIGdpdmVuIHRoZSBjdXJyZW50IGRv
d25sb2FkIGFuZCBwbGF5YmFjayByYXRlcy4KICAgUFJCb29sIENhblBsYXlUaHJvdWdoKCk7CiAK
KyAgLy8gUmV0dXJucyBudW1iZXIgb2YgZnJhbWVzIHdoaWNoIGhhdmUgYmVlbiBwYXJzZWQgZnJv
bSB0aGUgbWVkaWEuCisgIC8vIENhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZC4KKyAgUFJVaW50
MzIgR2V0UGFyc2VkRnJhbWVzKCk7CisKKyAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhcnNl
ZCBmcmFtZXMgd2hpY2ggaGF2ZSBiZWVuIGRlY29kZWQuCisgIC8vIENhbiBiZSBjYWxsZWQgb24g
YW55IHRocmVhZC4KKyAgUFJVaW50MzIgR2V0RGVjb2RlZEZyYW1lcygpOworCisgIC8vIFJldHVy
bnMgdGhlIG51bWJlciBvZiBkZWNvZGVkIGZyYW1lcyB3aGljaCBoYXZlIGJlZW4gc2VudCB0byB0
aGUgcmVuZGVyaW5nCisgIC8vIHBpcGVsaW5lIGZvciBwYWludGluZyAoInByZXNlbnRlZCIpLgor
ICAvLyBDYW4gYmUgY2FsbGVkIG9uIGFueSB0aHJlYWQuCisgIFBSVWludDMyIEdldFByZXNlbnRl
ZEZyYW1lcygpOworCisgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBwcmVzZW50ZWQgZnJhbWVz
IHdoaWNoIGVuZGVkIHVwIGJlaW5nIHBhaW50ZWQuCisgIC8vIENhbiBiZSBjYWxsZWQgb24gYW55
IHRocmVhZC4KKyAgUFJVaW50MzIgR2V0UGFpbnRlZEZyYW1lcygpOworCisgIC8vIFBsYXliYWNr
IHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGZ1bmN0aW9ucy4gQ2FsbGVkIHdoZW4gZnJhbWVzIHJlYWNo
IHZhcmlvdXMKKyAgLy8gc3RhZ2VzIHRocm91Z2ggdGhlIGRlY29kZS9yZW5kZXJpbmcgcGlwZWxp
bmUuIENhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZC4KKyAgdm9pZCBOb3RpZnlEZWNvZGVkRnJh
bWVzKFBSVWludDMyIGFQYXJzZWQsIFBSVWludDMyIGFEZWNvZGVkKTsKKyAgdm9pZCBOb3RpZnlQ
cmVzZW50ZWRGcmFtZSgpOworICB2b2lkIE5vdGlmeVBhaW50ZWRGcmFtZSgpOworCiBwcm90ZWN0
ZWQ6CiAKICAgLy8gU3RhcnQgdGltZXIgdG8gdXBkYXRlIGRvd25sb2FkIHByb2dyZXNzIGluZm9y
bWF0aW9uLgogICBuc3Jlc3VsdCBTdGFydFByb2dyZXNzKCk7CiAKICAgLy8gU3RvcCBwcm9ncmVz
cyBpbmZvcm1hdGlvbiB0aW1lci4KICAgbnNyZXN1bHQgU3RvcFByb2dyZXNzKCk7CiAKQEAgLTMw
NywxNiArMzMzLDI1IEBAIHByb3RlY3RlZDoKICAgLy8gVGhpcyBzaG91bGQgb25seSBldmVyIGJl
IGFjY2Vzc2VkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAvLyBJdCBpcyBzZXQgaW4gSW5pdCBh
bmQgY2xlYXJlZCBpbiBTaHV0ZG93biB3aGVuIHRoZSBlbGVtZW50IGdvZXMgYXdheS4KICAgLy8g
VGhlIGRlY29kZXIgZG9lcyBub3QgYWRkIGEgcmVmZXJlbmNlIHRoZSBlbGVtZW50LgogICBuc0hU
TUxNZWRpYUVsZW1lbnQqIG1FbGVtZW50OwogCiAgIFBSSW50MzIgbVJHQldpZHRoOwogICBQUklu
dDMyIG1SR0JIZWlnaHQ7CiAKKyAgLy8gTW9uaXRvciB0byBwcm90ZWN0IGFjY2VzcyBvZiBwbGF5
YmFjayBzdGF0aXN0aWNzLgorICBNb25pdG9yIG1TdGF0c01vbml0b3I7CisKKyAgLy8gUGxheWJh
Y2sgc3RhdGlzdGljcyBjb3VudGVycy4gQWNjZXNzIHByb3RlY3RlZCBieSBtU3RhdHNNb25pdG9y
OworICBQUlVpbnQzMiBtUGFyc2VkRnJhbWVzOworICBQUlVpbnQzMiBtRGVjb2RlZEZyYW1lczsK
KyAgUFJVaW50MzIgbVByZXNlbnRlZEZyYW1lczsKKyAgUFJVaW50MzIgbVBhaW50ZWRGcmFtZXM7
CisgIAogICBuc1JlZlB0cjxJbWFnZUNvbnRhaW5lcj4gbUltYWdlQ29udGFpbmVyOwogCiAgIC8v
IFRpbWUgdGhhdCB0aGUgbGFzdCBwcm9ncmVzcyBldmVudCB3YXMgZmlyZWQuIFJlYWQvV3JpdGUg
ZnJvbSB0aGUKICAgLy8gbWFpbiB0aHJlYWQgb25seS4KICAgVGltZVN0YW1wIG1Qcm9ncmVzc1Rp
bWU7CiAKICAgLy8gVGltZSB0aGF0IGRhdGEgd2FzIGxhc3QgcmVhZCBmcm9tIHRoZSBtZWRpYSBy
ZXNvdXJjZS4gVXNlZCBmb3IKICAgLy8gY29tcHV0aW5nIGlmIHRoZSBkb3dubG9hZCBoYXMgc3Rh
bGxlZCBhbmQgdG8gcmF0ZSBsaW1pdCBwcm9ncmVzcyBldmVudHMKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmNwcCBiL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVh
ZGVyLmNwcAotLS0gYS9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRlci5jcHAKKysrIGIvY29u
dGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwCkBAIC0yODIsMTcgKzI4MiwxNyBAQCBuc3Jl
c3VsdCBuc09nZ1JlYWRlcjo6UmVhZE1ldGFkYXRhKCkKIAogICAvLyBJbml0aWFsaXplIHRoZSBm
aXJzdCBUaGVvcmEgYW5kIFZvcmJpcyBiaXRzdHJlYW1zLiBBY2NvcmRpbmcgdG8gdGhlCiAgIC8v
IFRoZW9yYSBzcGVjIHRoZXNlIGNhbiBiZSBjb25zaWRlcmVkIHRoZSAncHJpbWFyeScgYml0c3Ry
ZWFtcyBmb3IgcGxheWJhY2suCiAgIC8vIEV4dHJhY3QgdGhlIG1ldGFkYXRhIG5lZWRlZCBmcm9t
IHRoZXNlIHN0cmVhbXMuCiAgIC8vIFNldCBhIGRlZmF1bHQgY2FsbGJhY2sgcGVyaW9kIGZvciBp
ZiB3ZSBoYXZlIG5vIHZpZGVvIGRhdGEKICAgaWYgKG1UaGVvcmFTdGF0ZSAmJiBtVGhlb3JhU3Rh
dGUtPkluaXQoKSkgewogICAgIGdmeEludFNpemUgc3oobVRoZW9yYVN0YXRlLT5tSW5mby5waWNf
d2lkdGgsCiAgICAgICAgICAgICAgICAgICBtVGhlb3JhU3RhdGUtPm1JbmZvLnBpY19oZWlnaHQp
OwotICAgIG1EZWNvZGVyLT5TZXRWaWRlb0RhdGEoc3osIG1UaGVvcmFTdGF0ZS0+bVBpeGVsQXNw
ZWN0UmF0aW8sIG5zbnVsbCk7CisgICAgbURlY29kZXItPlNldFZpZGVvRGF0YShzeiwgbVRoZW9y
YVN0YXRlLT5tUGl4ZWxBc3BlY3RSYXRpbywgbnNudWxsLCBUaW1lU3RhbXA6Ok5vdygpKTsKICAg
fQogICBpZiAobVZvcmJpc1N0YXRlKSB7CiAgICAgbVZvcmJpc1N0YXRlLT5Jbml0KCk7CiAgIH0K
IAogICBpZiAoIUhhc0F1ZGlvKCkgJiYgIUhhc1ZpZGVvKCkgJiYgbVNrZWxldG9uU3RhdGUpIHsK
ICAgICAvLyBXZSBoYXZlIGEgc2tlbGV0b24gdHJhY2ssIGJ1dCBubyBhdWRpbyBvciB2aWRlbywg
bWF5IGFzIHdlbGwgZGlzYWJsZQogICAgIC8vIHRoZSBza2VsZXRvbiwgd2UgY2FuJ3QgZG8gYW55
dGhpbmcgdXNlZnVsIHdpdGggdGhpcyBtZWRpYS4KQEAgLTU1OSwxOSArNTU5LDIyIEBAIG5zcmVz
dWx0IG5zT2dnUmVhZGVyOjpEZWNvZGVUaGVvcmEobnNUQXIKICAgICB9CiAgICAgaWYgKCFhRnJh
bWVzLkFwcGVuZEVsZW1lbnQodikpIHsKICAgICAgIGRlbGV0ZSB2OwogICAgIH0KICAgfQogICBy
ZXR1cm4gTlNfT0s7CiB9CiAKLVBSQm9vbCBuc09nZ1JlYWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQ
UkJvb2wgJmFLZXlmcmFtZVNraXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCkKK1BSQm9vbCBuc09nZ1JlYWRlcjo6RGVjb2RlVmlk
ZW9GcmFtZShQUkJvb2wmIGFLZXlmcmFtZVNraXAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUlVpbnQzMiYgYVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUlVpbnQzMiYgYURlY29kZWQpCiB7CisgIGFQYXJzZWQgPSBhRGVj
b2RlZCA9IDA7CiAgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKICAgTlNfQVNTRVJU
SU9OKG1EZWNvZGVyLT5PblN0YXRlTWFjaGluZVRocmVhZCgpIHx8IG1EZWNvZGVyLT5PbkRlY29k
ZVRocmVhZCgpLAogICAgICAgICAgICAgICAgIlNob3VsZCBiZSBvbiBzdGF0ZSBtYWNoaW5lIG9y
IEFWIHRocmVhZC4iKTsKICAgLy8gV2UgY2hvc2UgdG8ga2VlcCB0cmFjayBvZiB0aGUgVGhlb3Jh
IGdyYW51bGVwb3Mgb3Vyc2VsdmVzLCByYXRoZXIgdGhhbgogICAvLyByZWx5IG9uIHRoX2RlY29k
ZV9wYWNrZXRpbigpIHRvIGRvIGl0IGZvciB1cy4gVGhpcyBpcyBiZWNhdXNlCiAgIC8vIHRoX2Rl
Y29kZV9wYWNrZXRpbigpIHNpbXBseSB3b3JrcyBieSBpbmNyZW1lbnRpbmcgYSBjb3VudGVyIGV2
ZXJ5IHRpbWUKICAgLy8gaXQncyBjYWxsZWQsIHNvIGlmIHdlIGRyb3AgZnJhbWVzIGFuZCBkb24n
dCBjYWxsIGl0LCBzdWJzZXF1ZW50IGdyYW51bGVwb3MKICAgLy8gd2lsbCBiZSB3cm9uZy4gV2hl
bmV2ZXIgd2UgcmVhZCBhIHBhY2tldCB3aGljaCBoYXMgYSBncmFudWxlcG9zLCB3ZSB1c2UKQEAg
LTU5MSwxNiArNTk0LDE3IEBAIFBSQm9vbCBuc09nZ1JlYWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQ
UkIKICAgICAgICAgLy8gRmFpbGVkIHRvIHJlYWQgYW5vdGhlciBwYWdlLCBtdXN0IGJlIHRoZSBl
bmQgb2YgZmlsZS4gV2UgY2FuJ3QgaGF2ZQogICAgICAgICAvLyBhbHJlYWR5IGVuY291bnRlcmVk
IGFuIGVuZCBvZiBiaXRzdHJlYW0gcGFja2V0LCBlbHNlIHdlIHdvdWxkbid0IGJlCiAgICAgICAg
IC8vIGhlcmUsIHNvIHRoaXMgYml0c3RyZWFtIG11c3QgYmUgbWlzc2luZyBpdHMgZW5kIG9mIHN0
cmVhbSBwYWNrZXQsIG9yCiAgICAgICAgIC8vIGlzIG90aGVyd2lzZSBjb3JydXB0IChvZ2d6LWNo
b3AgY2FuIG91dHB1dCBmaWxlcyBsaWtlIHRoaXMpLiBJbmZvcm0KICAgICAgICAgLy8gdGhlIHF1
ZXVlIHRoYXQgdGhlcmUgd2lsbCBiZSBubyBtb3JlIGZyYW1lcy4KICAgICAgICAgbVZpZGVvUXVl
dWUuRmluaXNoKCk7CiAgICAgICAgIHJldHVybiBQUl9GQUxTRTsKICAgICAgIH0KKyAgICAgIGFQ
YXJzZWQrKzsKIAogICAgICAgaWYgKHBhY2tldC5ncmFudWxlcG9zID4gMCkgewogICAgICAgICAv
LyBXZSd2ZSBmb3VuZCBhIHBhY2tldCB3aXRoIGEgZ3JhbnVsZXBvcywgd2UgY2FuIG5vdyBkZXRl
cm1pbmUgdGhlCiAgICAgICAgIC8vIGJ1ZmZlcmVkIHBhY2tldCdzIHRpbWVzdGFtcHMsIGFzIHdl
bGwgYXMgdGhlIHRpbWVzdGFtcHMgZm9yIGFueQogICAgICAgICAvLyBwYWNrZXRzIHdlIHJlYWQg
c3Vic2VxdWVudGx5LgogICAgICAgICBtVGhlb3JhR3JhbnVsZXBvcyA9IHBhY2tldC5ncmFudWxl
cG9zOwogICAgICAgfQogICAgIApAQCAtNjc3LDE2ICs2ODEsMTcgQEAgUFJCb29sIG5zT2dnUmVh
ZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQgogICAgIE5TX0FTU0VSVElPTihtVGhlb3JhR3JhbnVs
ZXBvcyA+IDAsICJXZSBtdXN0IFRoZW9yYSBncmFudWxlcG9zISIpOwogICAgIAogICAgIGlmICgh
UmVhZE9nZ1BhY2tldChtVGhlb3JhU3RhdGUsICZwYWNrZXQpKSB7CiAgICAgICAvLyBGYWlsZWQg
dG8gcmVhZCBmcm9tIGZpbGUsIHNvIEVPRiBvciBvdGhlciBwcmVtYXR1cmUgZmFpbHVyZS4KICAg
ICAgIC8vIEluZm9ybSB0aGUgcXVldWUgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgZnJhbWVz
LgogICAgICAgbVZpZGVvUXVldWUuRmluaXNoKCk7CiAgICAgICByZXR1cm4gUFJfRkFMU0U7CiAg
ICAgfQorICAgIGFQYXJzZWQrKzsKIAogICAgIGVuZE9mU3RyZWFtID0gcGFja2V0LmVfb19zICE9
IDA7CiAKICAgICAvLyBNYWludGFpbiB0aGUgVGhlb3JhIGdyYW51bGVwb3MuIFdlIG11c3QgZG8g
dGhpcyBldmVuIGlmIHdlIGRyb3AgZnJhbWVzLAogICAgIC8vIG90aGVyd2lzZSBvdXIgY2xvY2sg
d2lsbCBiZSB3cm9uZyBhZnRlciB3ZSd2ZSBza2lwcGVkIGZyYW1lcy4KICAgICBpZiAocGFja2V0
LmdyYW51bGVwb3MgIT0gLTEpIHsKICAgICAgIC8vIEluY29taW5nIHBhY2tldCBoYXMgYSBncmFu
dWxlcG9zLCB1c2UgdGhhdCBhcyBpdCdzIGdyYW51bGVwb3MuCiAgICAgICBtVGhlb3JhR3JhbnVs
ZXBvcyA9IHBhY2tldC5ncmFudWxlcG9zOwpAQCAtNzI5LDE2ICs3MzQsMTcgQEAgUFJCb29sIG5z
T2dnUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQgogICBmb3IgKFBSVWludDMyIGkgPSAwOyBp
IDwgZnJhbWVzLkxlbmd0aCgpOyBpKyspIHsKICAgICBuc0F1dG9QdHI8VmlkZW9EYXRhPiBkYXRh
KGZyYW1lc1tpXS5mb3JnZXQoKSk7CiAgICAgaWYgKGFLZXlmcmFtZVNraXAgJiYgZGF0YS0+bUtl
eWZyYW1lKSB7CiAgICAgICBhS2V5ZnJhbWVTa2lwID0gUFJfRkFMU0U7CiAgICAgfQogCiAgICAg
aWYgKCFhS2V5ZnJhbWVTa2lwKSB7CiAgICAgICBtVmlkZW9RdWV1ZS5QdXNoKGRhdGEuZm9yZ2V0
KCkpOworICAgICAgYURlY29kZWQrKzsKICAgICB9CiAgIH0KIAogICBpZiAoZW5kT2ZTdHJlYW0p
IHsKICAgICAvLyBXZSd2ZSBlbmNvdW50ZXJlZCBhbiBlbmQgb2YgYml0c3RyZWFtIHBhY2tldC4g
SW5mb3JtIHRoZSBxdWV1ZSB0aGF0CiAgICAgLy8gdGhlcmUgd2lsbCBiZSBubyBtb3JlIGZyYW1l
cy4KICAgICBtVmlkZW9RdWV1ZS5GaW5pc2goKTsKICAgfQpAQCAtMTEwMiwxNyArMTEwOCwxOCBA
QCBuc3Jlc3VsdCBuc09nZ1JlYWRlcjo6U2Vla0luQnVmZmVyZWRSYW5nCiAgICAgcmV0dXJuIHJl
czsKICAgfQogCiAgIC8vIFdlIGhhdmUgYW4gYWN0aXZlIFRoZW9yYSBiaXRzdHJlYW0uIERlY29k
ZSB0aGUgbmV4dCBUaGVvcmEgZnJhbWUsIGFuZAogICAvLyBleHRyYWN0IGl0cyBrZXlmcmFtZSdz
IHRpbWUuCiAgIFBSQm9vbCBlb2Y7CiAgIGRvIHsKICAgICBQUkJvb2wgc2tpcCA9IFBSX0ZBTFNF
OwotICAgIGVvZiA9ICFEZWNvZGVWaWRlb0ZyYW1lKHNraXAsIDApOworICAgIFBSVWludDMyIHBh
cnNlZCwgZGVjb2RlZDsKKyAgICBlb2YgPSAhRGVjb2RlVmlkZW9GcmFtZShza2lwLCAwLCBwYXJz
ZWQsIGRlY29kZWQpOwogICAgIHsKICAgICAgIE1vbml0b3JBdXRvRXhpdCBleGl0UmVhZGVyTW9u
KG1Nb25pdG9yKTsKICAgICAgIE1vbml0b3JBdXRvRW50ZXIgZGVjb2Rlck1vbihtRGVjb2Rlci0+
R2V0TW9uaXRvcigpKTsKICAgICAgIGlmIChtRGVjb2Rlci0+R2V0RGVjb2RlU3RhdGUoKSA9PSBu
c0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpERUNPREVSX1NUQVRFX1NIVVRET1dOKSB7CiAg
ICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogICAgICAgfQogICAgIH0KICAgfSB3aGls
ZSAoIWVvZiAmJgpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuaCBi
L2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmgKLS0tIGEvY29udGVudC9tZWRpYS9vZ2cv
bnNPZ2dSZWFkZXIuaAorKysgYi9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRlci5oCkBAIC02
MywxOCArNjMsMjAgQEAgcHVibGljOgogCiAgIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0J1aWx0
aW5EZWNvZGVyUmVhZGVyKiBhQ2xvbmVEb25vcik7CiAgIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXRE
ZWNvZGUoKTsKICAgdmlydHVhbCBQUkJvb2wgRGVjb2RlQXVkaW9EYXRhKCk7CiAKICAgLy8gSWYg
dGhlIFRoZW9yYSBncmFudWxlcG9zIGhhcyBub3QgYmVlbiBjYXB0dXJlZCwgaXQgbWF5IHJlYWQg
c2V2ZXJhbCBwYWNrZXRzCiAgIC8vIHVudGlsIG9uZSB3aXRoIGEgZ3JhbnVsZXBvcyBoYXMgYmVl
biBjYXB0dXJlZCwgdG8gZW5zdXJlIHRoYXQgYWxsIHBhY2tldHMKICAgLy8gcmVhZCBoYXZlIHZh
bGlkIHRpbWUgaW5mby4gIAotICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9v
bCAmYUtleWZyYW1lU2tpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu
dDY0IGFUaW1lVGhyZXNob2xkKTsKKyAgdmlydHVhbCBQUkJvb2wgRGVjb2RlVmlkZW9GcmFtZShQ
UkJvb2wmIGFLZXlmcmFtZVNraXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJJbnQ2NCBhVGltZVRocmVzaG9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUlVpbnQzMiYgYVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UlVpbnQzMiYgYURlY29kZWQpOwogCiAgIHZpcnR1YWwgVmlkZW9EYXRhKiBGaW5kU3RhcnRUaW1l
KFBSSW50NjQgYU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJ
bnQ2NCYgYU91dFN0YXJ0VGltZSk7CiAKICAgLy8gR2V0IHRoZSBlbmQgdGltZSBvZiBhRW5kT2Zm
c2V0LiBUaGlzIGlzIHRoZSBwbGF5YmFjayBwb3NpdGlvbiB3ZSdkIHJlYWNoCiAgIC8vIGFmdGVy
IHBsYXliYWNrIGZpbmlzaGVkIGF0IGFFbmRPZmZzZXQuCiAgIHZpcnR1YWwgUFJJbnQ2NCBGaW5k
RW5kVGltZShQUkludDY0IGFFbmRPZmZzZXQpOwogCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlh
L3Jhdy9uc1Jhd1JlYWRlci5jcHAgYi9jb250ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5jcHAK
LS0tIGEvY29udGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuY3BwCisrKyBiL2NvbnRlbnQvbWVk
aWEvcmF3L25zUmF3UmVhZGVyLmNwcApAQCAtMTYzLDE4ICsxNjMsMjEgQEAgUFJCb29sIG5zUmF3
UmVhZGVyOjpSZWFkRnJvbVN0cmVhbShuc01lZAogICAgIGFMZW5ndGggLT0gYnl0ZXNSZWFkOwog
ICAgIGFCdWYgKz0gYnl0ZXNSZWFkOwogICB9CiAKICAgcmV0dXJuIFBSX1RSVUU7CiB9CiAKIFBS
Qm9vbCBuc1Jhd1JlYWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQUkJvb2wgJmFLZXlmcmFtZVNraXAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVz
aG9sZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1l
VGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy
JiBhUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy
JiBhRGVjb2RlZCkKIHsKKyAgYVBhcnNlZCA9IGFEZWNvZGVkID0gMDsKICAgbW96aWxsYTo6TW9u
aXRvckF1dG9FbnRlciBhdXRvRW50ZXIobU1vbml0b3IpOwogICBOU19BU1NFUlRJT04obURlY29k
ZXItPk9uU3RhdGVNYWNoaW5lVGhyZWFkKCkgfHwgbURlY29kZXItPk9uRGVjb2RlVGhyZWFkKCks
CiAgICAgICAgICAgICAgICAiU2hvdWxkIGJlIG9uIHN0YXRlIG1hY2hpbmUgdGhyZWFkIG9yIGRl
Y29kZSB0aHJlYWQuIik7CiAKICAgaWYgKCFtRnJhbWVTaXplKQogICAgIHJldHVybiBQUl9GQUxT
RTsgLy8gTWV0YWRhdGEgcmVhZCBmYWlsZWQuICBXZSBzaG91bGQgcmVmdXNlIHRvIHBsYXkuCiAK
ICAgUFJJbnQ2NCBjdXJyZW50RnJhbWVUaW1lID0gMTAwMCAqIG1DdXJyZW50RnJhbWUgLyBtRnJh
bWVSYXRlOwpAQCAtMTk0LDE2ICsxOTcsMTggQEAgUFJCb29sIG5zUmF3UmVhZGVyOjpEZWNvZGVW
aWRlb0ZyYW1lKFBSQgogICAgICAgICAhKGhlYWRlci5wYWNrZXRJRCA9PSAweEZGICYmIGhlYWRl
ci5jb2RlY0lEID09IFJBV19JRCAvKiAiWVVWIiAqLykpIHsKICAgICAgIHJldHVybiBQUl9GQUxT
RTsKICAgICB9CiAKICAgICBpZiAoIVJlYWRGcm9tU3RyZWFtKHN0cmVhbSwgYnVmZmVyLCBsZW5n
dGgpKSB7CiAgICAgICByZXR1cm4gUFJfRkFMU0U7CiAgICAgfQogCisgICAgYVBhcnNlZCsrOwor
CiAgICAgaWYgKGN1cnJlbnRGcmFtZVRpbWUgPj0gYVRpbWVUaHJlc2hvbGQpCiAgICAgICBicmVh
azsKIAogICAgIG1DdXJyZW50RnJhbWUrKzsKICAgICBjdXJyZW50RnJhbWVUaW1lICs9IDEwMDAu
MCAvIG1GcmFtZVJhdGU7CiAgIH0KIAogICBWaWRlb0RhdGE6OllDYkNyQnVmZmVyIGI7CkBAIC0y
MzIsMTYgKzIzNywxNyBAQCBQUkJvb2wgbnNSYXdSZWFkZXI6OkRlY29kZVZpZGVvRnJhbWUoUFJC
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEsIC8vIEluIHJhdyB2aWRlbyBldmVyeSBmcmFtZSBpcyBhIGtl
eWZyYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKICAgaWYgKCF2
KQogICAgIHJldHVybiBQUl9GQUxTRTsKIAogICBtVmlkZW9RdWV1ZS5QdXNoKHYpOwogICBtQ3Vy
cmVudEZyYW1lKys7CisgIGFEZWNvZGVkKys7CiAgIGN1cnJlbnRGcmFtZVRpbWUgKz0gMTAwMCAv
IG1GcmFtZVJhdGU7CiAKICAgcmV0dXJuIFBSX1RSVUU7CiB9CiAKIG5zcmVzdWx0IG5zUmF3UmVh
ZGVyOjpTZWVrKFBSSW50NjQgYVRpbWUsIFBSSW50NjQgYVN0YXJ0VGltZSwgUFJJbnQ2NCBhRW5k
VGltZSwgUFJJbnQ2NCBhQ3VycmVudFRpbWUpCiB7CiAgIG1vemlsbGE6Ok1vbml0b3JBdXRvRW50
ZXIgYXV0b0VudGVyKG1Nb25pdG9yKTsKQEAgLTI2NCwxNyArMjcwLDE4IEBAIG5zcmVzdWx0IG5z
UmF3UmVhZGVyOjpTZWVrKFBSSW50NjQgYVRpbWUKIAogICBuc3Jlc3VsdCBydiA9IHN0cmVhbS0+
U2Vlayhuc0lTZWVrYWJsZVN0cmVhbTo6TlNfU0VFS19TRVQsIG9mZnNldCk7CiAgIE5TX0VOU1VS
RV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbVZpZGVvUXVldWUuRXJhc2UoKTsKIAogICB3aGlsZSht
VmlkZW9RdWV1ZS5HZXRTaXplKCkgPT0gMCkgewogICAgIFBSQm9vbCBrZXlmcmFtZVNraXAgPSBQ
Ul9GQUxTRTsKLSAgICBpZiAoIURlY29kZVZpZGVvRnJhbWUoa2V5ZnJhbWVTa2lwLCAwKSkgewor
ICAgIFBSVWludDMyIHBhcnNlZCwgZGVjb2RlZDsKKyAgICBpZiAoIURlY29kZVZpZGVvRnJhbWUo
a2V5ZnJhbWVTa2lwLCAwLCBwYXJzZWQsIGRlY29kZWQpKSB7CiAgICAgICBtQ3VycmVudEZyYW1l
ID0gZnJhbWU7CiAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKICAgICB9CiAKICAgICB7
CiAgICAgICBtb3ppbGxhOjpNb25pdG9yQXV0b0V4aXQgYXV0b01vbml0b3JFeGl0KG1Nb25pdG9y
KTsKICAgICAgIG1vemlsbGE6Ok1vbml0b3JBdXRvRW50ZXIgYXV0b01vbml0b3IobURlY29kZXIt
PkdldE1vbml0b3IoKSk7CiAgICAgICBpZiAobURlY29kZXItPkdldERlY29kZVN0YXRlKCkgPT0K
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVyLmggYi9jb250ZW50L21l
ZGlhL3Jhdy9uc1Jhd1JlYWRlci5oCi0tLSBhL2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVy
LmgKKysrIGIvY29udGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuaApAQCAtOTIsMTggKzkyLDIw
IEBAIGNsYXNzIG5zUmF3UmVhZGVyIDogcHVibGljIG5zQnVpbHRpbkRlY28KIHB1YmxpYzoKICAg
bnNSYXdSZWFkZXIobnNCdWlsdGluRGVjb2RlciogYURlY29kZXIpOwogICB+bnNSYXdSZWFkZXIo
KTsKIAogICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNCdWlsdGluRGVjb2RlclJlYWRlciogYUNs
b25lRG9ub3IpOwogICB2aXJ0dWFsIG5zcmVzdWx0IFJlc2V0RGVjb2RlKCk7CiAgIHZpcnR1YWwg
UFJCb29sIERlY29kZUF1ZGlvRGF0YSgpOwogCi0gIHZpcnR1YWwgUFJCb29sIERlY29kZVZpZGVv
RnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQpOworICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVW
aWRlb0ZyYW1lKFBSQm9vbCYgYUtleWZyYW1lU2tpcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSVWludDMyJiBhUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSVWludDMyJiBhRGVjb2RlZCk7CiAKICAgdmlydHVhbCBQUkJvb2wgSGFzQXVk
aW8oKQogICB7CiAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICB9CiAKICAgdmlydHVhbCBQUkJvb2wg
SGFzVmlkZW8oKQogICB7CmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNUmVh
ZGVyLmNwcCBiL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuY3BwCi0tLSBhL2NvbnRl
bnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuY3BwCisrKyBiL2NvbnRlbnQvbWVkaWEvd2VibS9u
c1dlYk1SZWFkZXIuY3BwCkBAIC01MzgsMTkgKzUzOCwyMiBAQCBQUkJvb2wgbnNXZWJNUmVhZGVy
OjpEZWNvZGVBdWRpb0RhdGEoKQogICBpZiAoIWhvbGRlcikgewogICAgIG1BdWRpb1F1ZXVlLkZp
bmlzaCgpOwogICAgIHJldHVybiBQUl9GQUxTRTsKICAgfQogCiAgIHJldHVybiBEZWNvZGVBdWRp
b1BhY2tldChob2xkZXItPm1QYWNrZXQsIGhvbGRlci0+bU9mZnNldCk7CiB9CiAKLVBSQm9vbCBu
c1dlYk1SZWFkZXI6OkRlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xk
KQorUFJCb29sIG5zV2ViTVJlYWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQUkJvb2wmIGFLZXlmcmFt
ZVNraXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRp
bWVUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWlu
dDMyJiBhUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVp
bnQzMiYgYURlY29kZWQpCiB7CisgIGFQYXJzZWQgPSBhRGVjb2RlZCA9IDA7CiAgIE1vbml0b3JB
dXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKICAgTlNfQVNTRVJUSU9OKG1EZWNvZGVyLT5PblN0YXRl
TWFjaGluZVRocmVhZCgpIHx8IG1EZWNvZGVyLT5PbkRlY29kZVRocmVhZCgpLAogICAgICAgICAg
ICAgICAgIlNob3VsZCBiZSBvbiBzdGF0ZSBtYWNoaW5lIG9yIGRlY29kZSB0aHJlYWQuIik7CiAK
ICAgbnNBdXRvUmVmPE5lc3RlZ2dQYWNrZXRIb2xkZXI+IGhvbGRlcihOZXh0UGFja2V0KFZJREVP
KSk7CiAgIGlmICghaG9sZGVyKSB7CiAgICAgbVZpZGVvUXVldWUuRmluaXNoKCk7CiAgICAgcmV0
dXJuIFBSX0ZBTFNFOwpAQCAtNjA5LDQwICs2MTIsNDIgQEAgUFJCb29sIG5zV2ViTVJlYWRlcjo6
RGVjb2RlVmlkZW9GcmFtZShQUgogICAgIGlmIChyID09IC0xKSB7CiAgICAgICByZXR1cm4gUFJf
RkFMU0U7CiAgICAgfQogCiAgICAgdnB4X2NvZGVjX3N0cmVhbV9pbmZvX3Qgc2k7CiAgICAgbWVt
c2V0KCZzaSwgMCwgc2l6ZW9mKHNpKSk7CiAgICAgc2kuc3ogPSBzaXplb2Yoc2kpOwogICAgIHZw
eF9jb2RlY19wZWVrX3N0cmVhbV9pbmZvKCZ2cHhfY29kZWNfdnA4X2R4X2FsZ28sIGRhdGEsIGxl
bmd0aCwgJnNpKTsKLSAgICBpZiAoKGFLZXlmcmFtZVNraXAgJiYgIXNpLmlzX2tmKSB8fCAoYUtl
eWZyYW1lU2tpcCAmJiBzaS5pc19rZiAmJiB0c3RhbXBfbXMgPCBhVGltZVRocmVzaG9sZCkpIHsK
LSAgICAgIGFLZXlmcmFtZVNraXAgPSBQUl9UUlVFOwotICAgICAgYnJlYWs7CisgICAgaWYgKGFL
ZXlmcmFtZVNraXAgJiYgKCFzaS5pc19rZiB8fCB0c3RhbXBfbXMgPCBhVGltZVRocmVzaG9sZCkp
IHsKKyAgICAgIC8vIFNraXBwaW5nIHRvIG5leHQga2V5ZnJhbWUuLi4KKyAgICAgIGFQYXJzZWQr
KzsgLy8gQXNzdW1lIDEgZnJhbWUgcGVyIGNodW5rLgorICAgICAgY29udGludWU7CiAgICAgfQog
CiAgICAgaWYgKGFLZXlmcmFtZVNraXAgJiYgc2kuaXNfa2YpIHsKICAgICAgIGFLZXlmcmFtZVNr
aXAgPSBQUl9GQUxTRTsKICAgICB9CiAKLSAgICBpZih2cHhfY29kZWNfZGVjb2RlKCZtVlA4LCBk
YXRhLCBsZW5ndGgsIE5VTEwsIDApKSB7CisgICAgaWYgKHZweF9jb2RlY19kZWNvZGUoJm1WUDgs
IGRhdGEsIGxlbmd0aCwgTlVMTCwgMCkpIHsKICAgICAgIHJldHVybiBQUl9GQUxTRTsKICAgICB9
CiAKICAgICAvLyBJZiB0aGUgdGltZXN0YW1wIG9mIHRoZSB2aWRlbyBmcmFtZSBpcyBsZXNzIHRo
YW4KICAgICAvLyB0aGUgdGltZSB0aHJlc2hvbGQgcmVxdWlyZWQgdGhlbiBpdCBpcyBub3QgYWRk
ZWQKICAgICAvLyB0byB0aGUgdmlkZW8gcXVldWUgYW5kIHdvbid0IGJlIGRpc3BsYXllZC4KICAg
ICBpZiAodHN0YW1wX21zIDwgYVRpbWVUaHJlc2hvbGQpIHsKKyAgICAgIGFQYXJzZWQrKzsgLy8g
QXNzdW1lIDEgZnJhbWUgcGVyIGNodW5rLgogICAgICAgY29udGludWU7CiAgICAgfQogCiAgICAg
dnB4X2NvZGVjX2l0ZXJfdCAgaXRlciA9IE5VTEw7CiAgICAgdnB4X2ltYWdlX3QgICAgICAqaW1n
OwogCi0gICAgd2hpbGUoKGltZyA9IHZweF9jb2RlY19nZXRfZnJhbWUoJm1WUDgsICZpdGVyKSkp
IHsKKyAgICB3aGlsZSAoKGltZyA9IHZweF9jb2RlY19nZXRfZnJhbWUoJm1WUDgsICZpdGVyKSkp
IHsKICAgICAgIE5TX0FTU0VSVElPTihtSW5mby5tUGljdHVyZS53aWR0aCA9PSBzdGF0aWNfY2Fz
dDxQUkludDMyPihpbWctPmRfdyksIAogICAgICAgICAgICAgICAgICAgICJXZWJNIHBpY3R1cmUg
d2lkdGggZnJvbSBoZWFkZXIgZG9lcyBub3QgbWF0Y2ggZGVjb2RlZCBmcmFtZSIpOwogICAgICAg
TlNfQVNTRVJUSU9OKG1JbmZvLm1QaWN0dXJlLmhlaWdodCA9PSBzdGF0aWNfY2FzdDxQUkludDMy
PihpbWctPmRfaCksCiAgICAgICAgICAgICAgICAgICAgIldlYk0gcGljdHVyZSBoZWlnaHQgZnJv
bSBoZWFkZXIgZG9lcyBub3QgbWF0Y2ggZGVjb2RlZCBmcmFtZSIpOwogICAgICAgTlNfQVNTRVJU
SU9OKGltZy0+Zm10ID09IElNR19GTVRfSTQyMCwgIldlYk0gaW1hZ2UgZm9ybWF0IGlzIG5vdCBJ
NDIwIik7CiAKICAgICAgIC8vIENocm9tYSBzaGlmdHMgYXJlIHJvdW5kZWQgZG93biBhcyBwZXIg
dGhlIGRlY29kaW5nIGV4YW1wbGVzIGluIHRoZSBWUDggU0RLCiAgICAgICBWaWRlb0RhdGE6OllD
YkNyQnVmZmVyIGI7CkBAIC02NjcsMTYgKzY3MiwyMCBAQCBQUkJvb2wgbnNXZWJNUmVhZGVyOjpE
ZWNvZGVWaWRlb0ZyYW1lKFBSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0c3RhbXBfbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0
X3RzdGFtcCAvIE5TX1BFUl9NUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaS5pc19rZiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKICAgICAgIGlmICgh
dikgewogICAgICAgICByZXR1cm4gUFJfRkFMU0U7CiAgICAgICB9CisgICAgICBhUGFyc2VkKys7
CisgICAgICBhRGVjb2RlZCsrOworICAgICAgTlNfQVNTRVJUSU9OKGFEZWNvZGVkIDw9IGFQYXJz
ZWQsCisgICAgICAgICJFeHBlY3Qgb25seSAxIGZyYW1lIHBlciBjaHVuayBwZXIgcGFja2V0IGlu
IFdlYk0uLi4iKTsKICAgICAgIG1WaWRlb1F1ZXVlLlB1c2godik7CiAgICAgfQogICB9CiAKICAg
cmV0dXJuIFBSX1RSVUU7CiB9CiAKIG5zcmVzdWx0IG5zV2ViTVJlYWRlcjo6U2VlayhQUkludDY0
IGFUYXJnZXQsIFBSSW50NjQgYVN0YXJ0VGltZSwgUFJJbnQ2NCBhRW5kVGltZSwKZGlmZiAtLWdp
dCBhL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuaCBiL2NvbnRlbnQvbWVkaWEvd2Vi
bS9uc1dlYk1SZWFkZXIuaAotLS0gYS9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNUmVhZGVyLmgK
KysrIGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5oCkBAIC0xMzMsMTggKzEzMywy
MCBAQCBwdWJsaWM6CiAKICAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zQnVpbHRpbkRlY29kZXJS
ZWFkZXIqIGFDbG9uZURvbm9yKTsKICAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldERlY29kZSgpOwog
ICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVBdWRpb0RhdGEoKTsKIAogICAvLyBJZiB0aGUgVGhlb3Jh
IGdyYW51bGVwb3MgaGFzIG5vdCBiZWVuIGNhcHR1cmVkLCBpdCBtYXkgcmVhZCBzZXZlcmFsIHBh
Y2tldHMKICAgLy8gdW50aWwgb25lIHdpdGggYSBncmFudWxlcG9zIGhhcyBiZWVuIGNhcHR1cmVk
LCB0byBlbnN1cmUgdGhhdCBhbGwgcGFja2V0cwogICAvLyByZWFkIGhhdmUgdmFsaWQgdGltZSBp
bmZvLiAgCi0gIHZpcnR1YWwgUFJCb29sIERlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJh
bWVTa2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVU
aHJlc2hvbGQpOworICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCYgYUtl
eWZyYW1lU2tpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFU
aW1lVGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy
JiBhUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyJiBh
RGVjb2RlZCk7CiAKICAgdmlydHVhbCBQUkJvb2wgSGFzQXVkaW8oKQogICB7CiAgICAgbW96aWxs
YTo6TW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICAgIHJldHVybiBtSGFzQXVkaW87
CiAgIH0KIAogICB2aXJ0dWFsIFBSQm9vbCBIYXNWaWRlbygpCmRpZmYgLS1naXQgYS9kb20vaW50
ZXJmYWNlcy9odG1sL25zSURPTUhUTUxWaWRlb0VsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMv
aHRtbC9uc0lET01IVE1MVmlkZW9FbGVtZW50LmlkbAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1s
L25zSURPTUhUTUxWaWRlb0VsZW1lbnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJ
RE9NSFRNTFZpZGVvRWxlbWVudC5pZGwKQEAgLTQzLDE4ICs0MywzNyBAQAogICogPHZpZGVvPiBl
bGVtZW50LgogICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgaW50ZXJmYWNlLCBw
bGVhc2Ugc2VlCiAgKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVu
dC13b3JrLyN2aWRlbwogICoKICAqIEBzdGF0dXMgVU5ERVJfREVWRUxPUE1FTlQKICAqLwogCi1b
c2NyaXB0YWJsZSwgdXVpZChlZGY0NjhkYy00MmViLTQ0OTQtOTIwYi01NmEzMTUxNzI2NDApXQor
W3NjcmlwdGFibGUsIHV1aWQoZTFmNTJhYTUtOTk2Mi00MDE5LWI3YjMtYWYzYWVlNmU0ZDQ4KV0K
IGludGVyZmFjZSBuc0lET01IVE1MVmlkZW9FbGVtZW50IDogbnNJRE9NSFRNTE1lZGlhRWxlbWVu
dAogewogICAgICAgICAgICBhdHRyaWJ1dGUgbG9uZyB3aWR0aDsgCiAgICAgICAgICAgIGF0dHJp
YnV0ZSBsb25nIGhlaWdodDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgdmlk
ZW9XaWR0aDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgdmlkZW9IZWlnaHQ7
CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgcG9zdGVyOworICAgICAgICAgICAKKyAg
Ly8gQSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHZpZGVvIGZyYW1lcyB0aGF0IGhhdmUgZGVtdXhl
ZCBmcm9tIHRoZSBtZWRpYQorICAvLyByZXNvdXJjZS4gSWYgd2Ugd2VyZSBwbGF5aW5nIHBlcmZl
Y3RseSwgd2UnZCBiZSBhYmxlIHRvIHBhaW50IHRoaXMgbWFueQorICAvLyBmcmFtZXMuCisgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG1velBhcnNlZEZyYW1lczsKKworICAvLyBB
IGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIGRlY29kZWQuIFdl
IG1heSBkcm9wCisgIC8vIGZyYW1lcyBpZiB0aGUgZGVjb2RlIGlzIHRha2luZyB0b28gbXVjaCB0
aW1lLgorICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBtb3pEZWNvZGVkRnJhbWVz
OworCisgIC8vIEEgY291bnQgb2YgdGhlIG51bWJlciBvZiBmcmFtZXMgdGhhdCBoYXZlIGJlZW4g
cHJlc2VudGVkIHRvIHRoZSByZW5kZXJpbmcKKyAgLy8gcGlwZWxpbmUuIFdlIG1heSBkcm9wIGZy
YW1lcyBpZiB0aGV5IGFycml2ZSBsYXRlIGF0IHRoZSByZW5kZXJlci4KKyAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgbW96UHJlc2VudGVkRnJhbWVzOworICAKKyAgLy8gTnVtYmVy
IG9mIHByZXNlbnRlZCBmcmFtZXMgd2hpY2ggd2VyZSBkcmF3biBvbiBzY3JlZW4uCisgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG1velBhaW50ZWRGcmFtZXM7CisgIAorICAvLyBU
aW1lIHdoaWNoIHRoZSBsYXN0IHBhaW50ZWQgdmlkZW8gZnJhbWUgd2FzIGxhdGUgYnksIGluIHNl
Y29uZHMuCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBmbG9hdCBtb3pGcmFtZURlbGF5OwogfTsKIApk
aWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9JbWFnZUxheWVycy5oIGIvZ2Z4L2xheWVycy9JbWFnZUxh
eWVycy5oCi0tLSBhL2dmeC9sYXllcnMvSW1hZ2VMYXllcnMuaAorKysgYi9nZngvbGF5ZXJzL0lt
YWdlTGF5ZXJzLmgKQEAgLTM0LDE5ICszNCwyMSBAQAogICogdGhlIHRlcm1zIG9mIGFueSBvbmUg
b2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5T
RSBCTE9DSyAqKioqKiAqLwogCiAjaWZuZGVmIEdGWF9JTUFHRUxBWUVSX0gKICNkZWZpbmUgR0ZY
X0lNQUdFTEFZRVJfSAogCiAjaW5jbHVkZSAiTGF5ZXJzLmgiCisjaW5jbHVkZSAibW96aWxsYS9N
b25pdG9yLmgiCiAKICNpbmNsdWRlICJnZnhQYXR0ZXJuLmgiCiAjaW5jbHVkZSAibnNUaHJlYWRV
dGlscy5oIgorI2luY2x1ZGUgIm1vemlsbGEvVGltZVN0YW1wLmgiCiAKIG5hbWVzcGFjZSBtb3pp
bGxhIHsKIG5hbWVzcGFjZSBsYXllcnMgewogCiAvKioKICAqIEEgY2xhc3MgcmVwcmVzZW50aW5n
IGEgYnVmZmVyIG9mIHBpeGVsIGRhdGEuIFRoZSBkYXRhIGNhbiBiZSBpbiBvbmUKICAqIG9mIHZh
cmlvdXMgZm9ybWF0cyBpbmNsdWRpbmcgWUNiQ3IuCiAgKiAKQEAgLTEwOCwxOCArMTEwLDIwIEBA
IHByb3RlY3RlZDoKICAqIHdlIG5lZWQgYSBzZXBhcmF0ZSBjbGFzcyBoZXJlIGlzIHRoYXQgSW1h
Z2VMYXllcnMgYXJlbid0IHRocmVhZHNhZmUKICAqIChiZWNhdXNlIGxheWVycyBjYW4gb25seSBi
ZSB1c2VkIG9uIHRoZSBtYWluIHRocmVhZCkgYW5kIHdlIHdhbnQgdG8KICAqIGJlIGFibGUgdG8g
c2V0IHRoZSBjdXJyZW50IEltYWdlIGZyb20gYW55IHRocmVhZCwgdG8gZmFjaWxpdGF0ZQogICog
dmlkZW8gcGxheWJhY2sgd2l0aG91dCBpbnZvbHZpbmcgdGhlIG1haW4gdGhyZWFkLCBmb3IgZXhh
bXBsZS4KICAqLwogY2xhc3MgVEhFQkVTX0FQSSBJbWFnZUNvbnRhaW5lciB7CiAgIFRIRUJFU19J
TkxJTkVfREVDTF9USFJFQURTQUZFX1JFRkNPVU5USU5HKEltYWdlQ29udGFpbmVyKQogCisgIHR5
cGVkZWYgbW96aWxsYTo6TW9uaXRvciBNb25pdG9yOworCiBwdWJsaWM6Ci0gIEltYWdlQ29udGFp
bmVyKCkge30KKyAgSW1hZ2VDb250YWluZXIoKSA6IG1UaW1lTW9uaXRvcigiSW1hZ2VDb250YWlu
ZXIiKSwgbUltYWdlUGFpbnRlZChQUl9GQUxTRSkge30KICAgdmlydHVhbCB+SW1hZ2VDb250YWlu
ZXIoKSB7fQogCiAgIC8qKgogICAgKiBDcmVhdGUgYW4gSW1hZ2UgaW4gb25lIG9mIHRoZSBnaXZl
biBmb3JtYXRzLgogICAgKiBQaWNrcyB0aGUgImJlc3QiIGZvcm1hdCBmcm9tIHRoZSBsaXN0IGFu
ZCBjcmVhdGVzIGFuIEltYWdlIG9mIHRoYXQKICAgICogZm9ybWF0LgogICAgKiBSZXR1cm5zIG51
bGwgaWYgdGhpcyBiYWNrZW5kIGRvZXMgbm90IHN1cHBvcnQgYW55IG9mIHRoZSBmb3JtYXRzLgog
ICAgKi8KQEAgLTE4MiwyMCArMTg2LDY2IEBAIHB1YmxpYzoKIAogICAvKioKICAgICogU2V0cyBh
IHNpemUgdGhhdCB0aGUgaW1hZ2UgaXMgZXhwZWN0ZWQgdG8gYmUgcmVuZGVyZWQgYXQuCiAgICAq
IFRoaXMgaXMgYSBoaW50IGZvciBpbWFnZSBiYWNrZW5kcyB0byBvcHRpbWl6ZSBzY2FsaW5nLgog
ICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGluIHRoaXMgY2xhc3MgaXMgdG8gaWdub3JlIHRo
ZSBoaW50LgogICAgKi8KICAgdmlydHVhbCB2b2lkIFNldFNjYWxlSGludChjb25zdCBnZnhJbnRT
aXplJiAvKiBhU2NhbGVIaW50ICovKSB7IH0KIAorICAvKioKKyAgICogUmV0dXJucyB0aGUgZHVy
YXRpb24gd2hpY2ggdGhlIHBhaW50IHdhcyBsYXRlIGJ5LCBpZiBhIHBhaW50IHRhcmdldAorICAg
KiB3YXMgc3BlY2lmaWVkLgorICAgKi8KKyAgVGltZUR1cmF0aW9uIEdldFBhaW50RGVsYXkoKTsK
KworICAvKioKKyAgICogTm90aWZpZXMgdGhlIEltYWdlTGF5ZXIgdGhhdCBpdCdzIGJlZW4gcGFp
bnRlZCwgc28gaXQgY2FuIGNhbGN1bGF0ZQorICAgKiB0aGUgZGVsYXkgYmV0d2VlbiB0aGUgdGFy
Z2V0IHBhaW50IHRpbWUsIGFuZCB0aGUgYWNoaWV2ZWQgcGFpbnQgdGltZS4KKyAgICovCisgIHZv
aWQgTm90aWZ5UGFpbnRlZChUaW1lU3RhbXAgYVBhaW50VGltZSk7CisKKyAgLyoqCisgICAqIFNl
dHMgdGhlIHRpbWUgYXQgd2hpY2ggd2UnZCBsaWtlIHRoZSBjb250YWluZWQgdG8gYmUgaW1hZ2Ug
cGFpbnRlZC4KKyAgICovCisgIHZvaWQgU2V0UGFpbnRUYXJnZXQoVGltZVN0YW1wIGFUaW1lKTsK
KworICAvKioKKyAgICogUmV0dXJucyB0aGUgdGFyZ2V0IHRpbWUgYXQgd2hpY2ggd2UnZCBsaWtl
IHRoZSBjb250YWluZWQgaW1hZ2UKKyAgICogdG8gYmUgcGFpbnRlZCwgYXMgcHJldmlvdXNseSBz
ZXQgYnkgU2V0UGFpbnRUYXJnZXQoKS4KKyAgICovCisgIFRpbWVTdGFtcCBHZXRQYWludFRhcmdl
dCgpOworCiBwcm90ZWN0ZWQ6CiAgIExheWVyTWFuYWdlciogbU1hbmFnZXI7CiAKLSAgSW1hZ2VD
b250YWluZXIoTGF5ZXJNYW5hZ2VyKiBhTWFuYWdlcikgOiBtTWFuYWdlcihhTWFuYWdlcikge30K
KyAgLyoqCisgICAqIFByb3RlY3RzIGFjY2VzIHRvIG1UYXJnZXRUaW1lLCBtRGVsYXksIGFuZCBt
SW1hZ2VQYWludGVkLgorICAgKi8KKyAgTW9uaXRvciBtVGltZU1vbml0b3I7CisKKyAgLyoqCisg
ICAqIFRpbWUgYXQgd2hpY2ggd2UgYWltIHRvIHBhaW50IHRoZSBpbWFnZS4gU2V0IGJ5IFNldFBh
aW50VGFyZ2V0KCkuIFRoaXMKKyAgICogaXMgdHlwaWNhbGx5IHNldCBvbiB2aWRlbyBmcmFtZXMg
aW4gdGhlIHZpZGVvIGRlY29kZXIuCisgICAqLworICBUaW1lU3RhbXAgbVRhcmdldFRpbWU7CisK
KyAgLyoqCisgICAqIER1cmF0aW9uIGJ5IHdoaWNoIHRoZSBwYWludCB3YXMgbGF0ZSBieS4gVGhp
cyBpcyBvbmx5IHZhbGlkIGlmIGEgdGFyZ2V0CisgICAqIHBhaW50IHRpbWUgd2FzIHNwZWNpZmll
ZCwgYW5kIGlmIHRoZSBpbWFnZSBoYXMgYWN0dWFsbHkgYmVlbiBwYWludGVkLgorICAgKi8KKyAg
VGltZUR1cmF0aW9uIG1EZWxheTsKKworICAvKioKKyAgICogU2V0IHRvIFBSX1RSVUUgaWYgdGhl
IGN1cnJlbnRseSBjb250YWluZWQgaW1hZ2UgaGFzIGJlZW4gcGFpbnRlZCBhdAorICAgKiBsZWFz
dCBvbmNlLgorICAgKi8KKyAgUFJCb29sIG1JbWFnZVBhaW50ZWQ7CisKKyAgSW1hZ2VDb250YWlu
ZXIoTGF5ZXJNYW5hZ2VyKiBhTWFuYWdlcikgOiBtTWFuYWdlcihhTWFuYWdlciksIG1UaW1lTW9u
aXRvcigiSW1hZ2VDb250YWluZXIiKSB7fQogfTsKIAogLyoqCiAgKiBBIExheWVyIHdoaWNoIHJl
bmRlcnMgYW4gSW1hZ2UuCiAgKi8KIGNsYXNzIFRIRUJFU19BUEkgSW1hZ2VMYXllciA6IHB1Ymxp
YyBMYXllciB7CiBwdWJsaWM6CiAgIC8qKgpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9MYXllcnMu
Y3BwIGIvZ2Z4L2xheWVycy9MYXllcnMuY3BwCi0tLSBhL2dmeC9sYXllcnMvTGF5ZXJzLmNwcAor
KysgYi9nZngvbGF5ZXJzL0xheWVycy5jcHAKQEAgLTE4MCwxNiArMTgwLDM3IEBAIG5hbWVzcGFj
ZSBsYXllcnMgewogYWxyZWFkeV9BZGRSZWZlZDxnZnhBU3VyZmFjZT4KIExheWVyTWFuYWdlcjo6
Q3JlYXRlT3B0aW1hbFN1cmZhY2UoY29uc3QgZ2Z4SW50U2l6ZSAmYVNpemUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdmeEFTdXJmYWNlOjpnZnhJbWFnZUZvcm1hdCBhRm9y
bWF0KQogewogICByZXR1cm4gZ2Z4UGxhdGZvcm06OkdldFBsYXRmb3JtKCktPgogICAgIENyZWF0
ZU9mZnNjcmVlblN1cmZhY2UoYVNpemUsIGdmeEFTdXJmYWNlOjpDb250ZW50RnJvbUZvcm1hdChh
Rm9ybWF0KSk7CiB9CiAKK3N0YXRpYyB2b2lkIE5vdGlmeVBhaW50ZWQoTGF5ZXIqIGFMYXllciwg
VGltZVN0YW1wIGFUaW1lU3RhbXApIHsKKyAgTlNfQVNTRVJUSU9OKGFMYXllciwgIk11c3QgaGF2
ZSBzcGVjaWZpZWQgYSBub24tbnVsbCBsYXllciIpOworICBOU19BU1NFUlRJT04oIWFUaW1lU3Rh
bXAuSXNOdWxsKCksICJNdXN0IGhhdmUgYSB2YWxpZCB0aW1lc3RhbXAiKTsKKyAgaWYgKGFMYXll
ci0+R2V0VHlwZSgpID09IExheWVyOjpUWVBFX0lNQUdFKSB7CisgICAgSW1hZ2VMYXllciogaW1n
TGF5ZXIgPSBzdGF0aWNfY2FzdDxJbWFnZUxheWVyKj4oYUxheWVyKTsKKyAgICBJbWFnZUNvbnRh
aW5lciogY29udGFpbmVyID0gaW1nTGF5ZXItPkdldENvbnRhaW5lcigpOworICAgIGNvbnRhaW5l
ci0+Tm90aWZ5UGFpbnRlZChhVGltZVN0YW1wKTsKKyAgfQorICBMYXllciogY2hpbGQgPSBhTGF5
ZXItPkdldEZpcnN0Q2hpbGQoKTsKKyAgZm9yICg7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5HZXRO
ZXh0U2libGluZygpKSB7CisgICAgTm90aWZ5UGFpbnRlZChjaGlsZCwgYVRpbWVTdGFtcCk7Cisg
IH0KK30KKwordm9pZAorTGF5ZXJNYW5hZ2VyOjpOb3RpZnlQYWludGVkKCkKK3sKKyAgaWYgKG1S
b290KQorICAgIDo6Tm90aWZ5UGFpbnRlZChtUm9vdCwgVGltZVN0YW1wOjpOb3coKSk7Cit9CisK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
IExheWVyCiAKIFBSQm9vbAogTGF5ZXI6OkNhblVzZU9wYXF1ZVN1cmZhY2UoKQogewogICAvLyBJ
ZiB0aGUgdmlzaWJsZSBjb250ZW50IGluIHRoZSBsYXllciBpcyBvcGFxdWUsIHRoZXJlIGlzIG5v
IG5lZWQKICAgLy8gZm9yIGFuIGFscGhhIGNoYW5uZWwuCkBAIC02NDQsMTAgKzY2NSwzOCBAQCBM
YXllck1hbmFnZXI6OlByaW50SW5mbyhuc0FDU3RyaW5nJiBhVG8sCiAKIC8qc3RhdGljKi8gdm9p
ZCBMYXllck1hbmFnZXI6OkluaXRMb2coKSB7fQogLypzdGF0aWMqLyBib29sIExheWVyTWFuYWdl
cjo6SXNMb2dFbmFibGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KIAogI2VuZGlmIC8vIE1PWl9MQVlF
UlNfSEFWRV9MT0cKIAogUFJMb2dNb2R1bGVJbmZvKiBMYXllck1hbmFnZXI6OnNMb2c7CiAKK1Rp
bWVEdXJhdGlvbiBJbWFnZUNvbnRhaW5lcjo6R2V0UGFpbnREZWxheSgpIHsKKyAgTW9uaXRvckF1
dG9FbnRlciBtb24obVRpbWVNb25pdG9yKTsKKyAgcmV0dXJuIG1EZWxheTsKK30KKwordm9pZCBJ
bWFnZUNvbnRhaW5lcjo6Tm90aWZ5UGFpbnRlZChUaW1lU3RhbXAgYVBhaW50VGltZSkgeworICBN
b25pdG9yQXV0b0VudGVyIG1vbihtVGltZU1vbml0b3IpOworICBpZiAobUltYWdlUGFpbnRlZCB8
fCBtVGFyZ2V0VGltZS5Jc051bGwoKSB8fCBtVGFyZ2V0VGltZSA+IGFQYWludFRpbWUpCisgICAg
cmV0dXJuOworICBtRGVsYXkgPSBhUGFpbnRUaW1lIC0gbVRhcmdldFRpbWU7CisgIC8vIFJlbWVt
YmVyIHRoYXQgd2UndmUgcGFpbnRlZCB0aGlzIGltYWdlLCBzbyB0aGF0IHdlIHdvbid0IHJlY2Fs
Y3VsYXRlCisgIC8vIGFuZCBhc3N1bWUgYSBsYXJnZXIgZGVsYXkgaWYgd2UgcGFpbnQgdGhpcyBp
bWFnZSBhZ2Fpbi4KKyAgbUltYWdlUGFpbnRlZCA9IFBSX1RSVUU7Cit9CisKK1RpbWVTdGFtcCBJ
bWFnZUNvbnRhaW5lcjo6R2V0UGFpbnRUYXJnZXQoKSB7CisgIE1vbml0b3JBdXRvRW50ZXIgbW9u
KG1UaW1lTW9uaXRvcik7CisgIHJldHVybiBtVGFyZ2V0VGltZTsKK30KKwordm9pZCBJbWFnZUNv
bnRhaW5lcjo6U2V0UGFpbnRUYXJnZXQoVGltZVN0YW1wIGFUaW1lKSB7CisgIE1vbml0b3JBdXRv
RW50ZXIgbW9uKG1UaW1lTW9uaXRvcik7CisgIG1UYXJnZXRUaW1lID0gYVRpbWU7CisgIC8vIFJl
c2V0IG91ciAiaGFzIGJlZW4gcGFpbnRlZCIgZmxhZywgc28gd2Uga25vdyB0byByZWNhbGN1bGF0
ZSB0aGUgcGFpbnQKKyAgLy8gZGVsYXkgdGhlIGZpcnN0IHRpbWUgdGhpcyBmcmFtZSBpcyBwYWlu
dGVkLgorICBtSW1hZ2VQYWludGVkID0gUFJfRkFMU0U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIGxh
eWVycyAKIH0gLy8gbmFtZXNwYWNlIG1vemlsbGEKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvTGF5
ZXJzLmggYi9nZngvbGF5ZXJzL0xheWVycy5oCi0tLSBhL2dmeC9sYXllcnMvTGF5ZXJzLmgKKysr
IGIvZ2Z4L2xheWVycy9MYXllcnMuaApAQCAtNDE4LDE2ICs0MTgsMjMgQEAgcHVibGljOgogICAg
KiBMb2cgaW5mb3JtYXRpb24gYWJvdXQganVzdCB0aGlzIGxheWVyIG1hbmFnZXIgaXRzZWxmIHRv
IHRoZSBOU1BSCiAgICAqIGxvZyAoaWYgZW5hYmxlZCBmb3IgIkxheWVycyIpLgogICAgKi8KICAg
dm9pZCBMb2dTZWxmKGNvbnN0IGNoYXIqIGFQcmVmaXg9IiIpOwogCiAgIHN0YXRpYyBib29sIElz
TG9nRW5hYmxlZCgpOwogICBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBHZXRMb2coKSB7IHJldHVy
biBzTG9nOyB9CiAKKyAgLyoqCisgICAqIE5vdGlmaWVzIGFsbCBJbWFnZUxheWVycyBpbiB0aGUg
bGF5ZXIgdHJlZSB0aGF0IHRoZXkndmUgYmVlbiBwYWludGVkLCBzbworICAgKiB0aGF0IHRoZXkg
Y2FuIHJlY29yZCBwYWludC1kZWxheSBzdGF0aXN0aWNzLiBDYWxsIHRoaXMgYXQgdGhlIGVuZCBv
ZiBldmVyeQorICAgKiBFbmRUcmFuc2FjdGlvbigpIGltcGxlbWVudGF0aW9uLgorICAgKi8KKyAg
dm9pZCBOb3RpZnlQYWludGVkKCk7CisKIHByb3RlY3RlZDoKICAgbnNSZWZQdHI8TGF5ZXI+IG1S
b290OwogICBMYXllclVzZXJEYXRhU2V0IG1Vc2VyRGF0YTsKICAgUFJQYWNrZWRCb29sIG1EZXN0
cm95ZWQ7CiAgIFBSUGFja2VkQm9vbCBtU25hcEVmZmVjdGl2ZVRyYW5zZm9ybXM7CiAKICAgLy8g
UHJpbnQgaW50ZXJlc3RpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBpbnRvIGFUby4gIEludGVy
bmFsbHkKICAgLy8gdXNlZCB0byBpbXBsZW1lbnQgRHVtcCooKSBhbmQgTG9nKigpLgpkaWZmIC0t
Z2l0IGEvZ2Z4L2xheWVycy9iYXNpYy9CYXNpY0xheWVycy5jcHAgYi9nZngvbGF5ZXJzL2Jhc2lj
L0Jhc2ljTGF5ZXJzLmNwcAotLS0gYS9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljTGF5ZXJzLmNwcAor
KysgYi9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljTGF5ZXJzLmNwcApAQCAtMTIzMCwxNiArMTIzMCwx
OCBAQCBCYXNpY0xheWVyTWFuYWdlcjo6RW5kVHJhbnNhY3Rpb24oRHJhd1RoCiAgICAgaWYgKHVz
ZURvdWJsZUJ1ZmZlcmluZykgewogICAgICAgZmluYWxUYXJnZXQtPlNldE9wZXJhdG9yKGdmeENv
bnRleHQ6Ok9QRVJBVE9SX1NPVVJDRSk7CiAgICAgICBQb3BHcm91cFdpdGhDYWNoZWRTdXJmYWNl
KGZpbmFsVGFyZ2V0LCBjYWNoZWRTdXJmYWNlT2Zmc2V0KTsKICAgICB9CiAKICAgICBtVGFyZ2V0
ID0gbnNudWxsOwogICB9CiAKKyAgTm90aWZ5UGFpbnRlZCgpOworCiAjaWZkZWYgTU9aX0xBWUVS
U19IQVZFX0xPRwogICBMb2coKTsKICAgTU9aX0xBWUVSU19MT0coKCJdLS0tLS0gRW5kVHJhbnNh
Y3Rpb24iKSk7CiAjZW5kaWYKIAogI2lmZGVmIERFQlVHCiAgIG1QaGFzZSA9IFBIQVNFX05PTkU7
CiAjZW5kaWYKQEAgLTI1ODAsMTYgKzI1ODIsMTggQEAgQmFzaWNTaGFkb3dMYXllck1hbmFnZXI6
OkVuZFRyYW5zYWN0aW9uKAogICAgICAgZGVmYXVsdDoKICAgICAgICAgTlNfUlVOVElNRUFCT1JU
KCJub3QgcmVhY2hlZCIpOwogICAgICAgfQogICAgIH0KICAgfSBlbHNlIGlmIChIYXNTaGFkb3dN
YW5hZ2VyKCkpIHsKICAgICBOU19XQVJOSU5HKCJmYWlsZWQgdG8gZm9yd2FyZCBMYXllcnMgdHJh
bnNhY3Rpb24iKTsKICAgfQogCisgIE5vdGlmeVBhaW50ZWQoKTsKKwogI2lmZGVmIERFQlVHCiAg
IG1QaGFzZSA9IFBIQVNFX05PTkU7CiAjZW5kaWYKIAogICAvLyB0aGlzIG1heSByZXN1bHQgaW4g
TGF5ZXJzIGJlaW5nIGRlbGV0ZWQsIHdoaWNoIHJlc3VsdHMgaW4KICAgLy8gUExheWVyOjpTZW5k
X19kZWxldGVfXygpIGFuZCBEZWFsbG9jU2htZW0oKQogICBtS2VlcEFsaXZlLkNsZWFyKCk7CiB9
CmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL2QzZDEwL0xheWVyTWFuYWdlckQzRDEwLmNwcCBiL2dm
eC9sYXllcnMvZDNkMTAvTGF5ZXJNYW5hZ2VyRDNEMTAuY3BwCi0tLSBhL2dmeC9sYXllcnMvZDNk
MTAvTGF5ZXJNYW5hZ2VyRDNEMTAuY3BwCisrKyBiL2dmeC9sYXllcnMvZDNkMTAvTGF5ZXJNYW5h
Z2VyRDNEMTAuY3BwCkBAIC0yNDAsMTYgKzI0MCwxNyBAQCBMYXllck1hbmFnZXJEM0QxMDo6RW5k
VHJhbnNhY3Rpb24oRHJhd1RoCiAgIC8vIFRoZSByZXN1bHRzIG9mIG91ciBkcmF3aW5nIGFsd2F5
cyBnbyBkaXJlY3RseSBpbnRvIGEgcGl4ZWwgYnVmZmVyLAogICAvLyBzbyB3ZSBkb24ndCBuZWVk
IHRvIHBhc3MgYW55IGdsb2JhbCB0cmFuc2Zvcm0gaGVyZS4KICAgbVJvb3QtPkNvbXB1dGVFZmZl
Y3RpdmVUcmFuc2Zvcm1zKGdmeDNETWF0cml4KCkpOwogCiAgIFJlbmRlcigpOwogICBtQ3VycmVu
dENhbGxiYWNrSW5mby5DYWxsYmFjayA9IG5zbnVsbDsKICAgbUN1cnJlbnRDYWxsYmFja0luZm8u
Q2FsbGJhY2tEYXRhID0gbnNudWxsOwogICBtVGFyZ2V0ID0gbnNudWxsOworICBOb3RpZnlQYWlu
dGVkKCk7CiB9CiAKIGFscmVhZHlfQWRkUmVmZWQ8VGhlYmVzTGF5ZXI+CiBMYXllck1hbmFnZXJE
M0QxMDo6Q3JlYXRlVGhlYmVzTGF5ZXIoKQogewogICBuc1JlZlB0cjxUaGViZXNMYXllcj4gbGF5
ZXIgPSBuZXcgVGhlYmVzTGF5ZXJEM0QxMCh0aGlzKTsKICAgcmV0dXJuIGxheWVyLmZvcmdldCgp
OwogfQpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9kM2Q5L0xheWVyTWFuYWdlckQzRDkuY3BwIGIv
Z2Z4L2xheWVycy9kM2Q5L0xheWVyTWFuYWdlckQzRDkuY3BwCi0tLSBhL2dmeC9sYXllcnMvZDNk
OS9MYXllck1hbmFnZXJEM0Q5LmNwcAorKysgYi9nZngvbGF5ZXJzL2QzZDkvTGF5ZXJNYW5hZ2Vy
RDNEOS5jcHAKQEAgLTE2MSwxNiArMTYxLDE4IEBAIExheWVyTWFuYWdlckQzRDk6OkVuZFRyYW5z
YWN0aW9uKERyYXdUaGUKICAgbVJvb3QtPkNvbXB1dGVFZmZlY3RpdmVUcmFuc2Zvcm1zKGdmeDNE
TWF0cml4KCkpOwogCiAgIFJlbmRlcigpOwogICAvKiBDbGVhbiB0aGlzIG91dCBmb3Igc2FuaXR5
ICovCiAgIG1DdXJyZW50Q2FsbGJhY2tJbmZvLkNhbGxiYWNrID0gTlVMTDsKICAgbUN1cnJlbnRD
YWxsYmFja0luZm8uQ2FsbGJhY2tEYXRhID0gTlVMTDsKICAgLy8gQ2xlYXIgbVRhcmdldCwgbmV4
dCB0cmFuc2FjdGlvbiBjb3VsZCBoYXZlIG5vIHRhcmdldAogICBtVGFyZ2V0ID0gTlVMTDsKKwor
ICBOb3RpZnlQYWludGVkKCk7CiB9CiAKIHZvaWQKIExheWVyTWFuYWdlckQzRDk6OlNldFJvb3Qo
TGF5ZXIgKmFMYXllcikKIHsKICAgbVJvb3QgPSBhTGF5ZXI7CiB9CiAKZGlmZiAtLWdpdCBhL2dm
eC9sYXllcnMvb3BlbmdsL0xheWVyTWFuYWdlck9HTC5jcHAgYi9nZngvbGF5ZXJzL29wZW5nbC9M
YXllck1hbmFnZXJPR0wuY3BwCi0tLSBhL2dmeC9sYXllcnMvb3BlbmdsL0xheWVyTWFuYWdlck9H
TC5jcHAKKysrIGIvZ2Z4L2xheWVycy9vcGVuZ2wvTGF5ZXJNYW5hZ2VyT0dMLmNwcApAQCAtNDE2
LDE2ICs0MTYsMTggQEAgTGF5ZXJNYW5hZ2VyT0dMOjpFbmRUcmFuc2FjdGlvbihEcmF3VGhlYgog
ICAgIFJlbmRlcigpOwogICB9CiAKICAgbVRoZWJlc0xheWVyQ2FsbGJhY2sgPSBuc251bGw7CiAg
IG1UaGViZXNMYXllckNhbGxiYWNrRGF0YSA9IG5zbnVsbDsKIAogICBtVGFyZ2V0ID0gTlVMTDsK
IAorICBOb3RpZnlQYWludGVkKCk7CisKICNpZmRlZiBNT1pfTEFZRVJTX0hBVkVfTE9HCiAgIExv
ZygpOwogICBNT1pfTEFZRVJTX0xPRygoIl0tLS0tLSBFbmRUcmFuc2FjdGlvbiIpKTsKICNlbmRp
ZgogfQogCiBhbHJlYWR5X0FkZFJlZmVkPFRoZWJlc0xheWVyPgogTGF5ZXJNYW5hZ2VyT0dMOjpD
cmVhdGVUaGViZXNMYXllcigpCmRpZmYgLS1naXQgYS9sYXlvdXQvZ2VuZXJpYy9uc1ZpZGVvRnJh
bWUuY3BwIGIvbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmNwcAotLS0gYS9sYXlvdXQvZ2Vu
ZXJpYy9uc1ZpZGVvRnJhbWUuY3BwCisrKyBiL2xheW91dC9nZW5lcmljL25zVmlkZW9GcmFtZS5j
cHAKQEAgLTI2NiwxNiArMjY2LDI5IEBAIG5zVmlkZW9GcmFtZTo6QnVpbGRMYXllcihuc0Rpc3Bs
YXlMaXN0QnUKIAogICBsYXllci0+U2V0Q29udGFpbmVyKGNvbnRhaW5lcik7CiAgIGxheWVyLT5T
ZXRGaWx0ZXIobnNMYXlvdXRVdGlsczo6R2V0R3JhcGhpY3NGaWx0ZXJGb3JGcmFtZSh0aGlzKSk7
CiAgIC8vIFNldCBhIHRyYW5zZm9ybSBvbiB0aGUgbGF5ZXIgdG8gZHJhdyB0aGUgdmlkZW8gaW4g
dGhlIHJpZ2h0IHBsYWNlCiAgIGdmeE1hdHJpeCB0cmFuc2Zvcm07CiAgIHRyYW5zZm9ybS5UcmFu
c2xhdGUoci5wb3MpOwogICB0cmFuc2Zvcm0uU2NhbGUoci5XaWR0aCgpL2ZyYW1lU2l6ZS53aWR0
aCwgci5IZWlnaHQoKS9mcmFtZVNpemUuaGVpZ2h0KTsKICAgbGF5ZXItPlNldFRyYW5zZm9ybShn
ZngzRE1hdHJpeDo6RnJvbTJEKHRyYW5zZm9ybSkpOworCisgIGlmIChIYXNWaWRlb0VsZW1lbnQo
KSkgeworICAgIFRpbWVTdGFtcCB0YXJnZXQgPSBjb250YWluZXItPkdldFBhaW50VGFyZ2V0KCk7
CisgICAgaWYgKCF0YXJnZXQuSXNOdWxsKCkgJiYKKyAgICAgICAgKG1MYXN0UGFpbnRlZFRhcmdl
dC5Jc051bGwoKSB8fCB0YXJnZXQgIT0gbUxhc3RQYWludGVkVGFyZ2V0KSkKKyAgICB7CisgICAg
ICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHBhaW50ZWQgdGhpcyBmcmFtZSwgY291
bnQgaXQuCisgICAgICBtTGFzdFBhaW50ZWRUYXJnZXQgPSB0YXJnZXQ7CisgICAgICBuc0hUTUxW
aWRlb0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxuc0hUTUxWaWRlb0VsZW1lbnQqPihH
ZXRDb250ZW50KCkpOworICAgICAgZWxlbWVudC0+Tm90aWZ5UGFpbnRlZEZyYW1lKCk7CisgICAg
fQorICB9CisKICAgbnNSZWZQdHI8TGF5ZXI+IHJlc3VsdCA9IGxheWVyLmZvcmdldCgpOwogICBy
ZXR1cm4gcmVzdWx0LmZvcmdldCgpOwogfQogCiBOU19JTUVUSE9ESU1QCiBuc1ZpZGVvRnJhbWU6
OlJlZmxvdyhuc1ByZXNDb250ZXh0KiAgICAgICAgICAgYVByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgICAgIGFNZXRyaWNzLAogICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKZGlmZiAt
LWdpdCBhL2xheW91dC9nZW5lcmljL25zVmlkZW9GcmFtZS5oIGIvbGF5b3V0L2dlbmVyaWMvbnNW
aWRlb0ZyYW1lLmgKLS0tIGEvbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmgKKysrIGIvbGF5
b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmgKQEAgLTU2LDE2ICs1NiwxNyBAQCBjbGFzcyBuc0Rp
c3BsYXlJdGVtOwogCiBuc0lGcmFtZSogTlNfTmV3VmlkZW9GcmFtZSAobnNJUHJlc1NoZWxsKiBh
UHJlc1NoZWxsLCBuc1N0eWxlQ29udGV4dCogYUNvbnRleHQpOwogCiBjbGFzcyBuc1ZpZGVvRnJh
bWUgOiBwdWJsaWMgbnNDb250YWluZXJGcmFtZSwgcHVibGljIG5zSUFub255bW91c0NvbnRlbnRD
cmVhdG9yCiB7CiBwdWJsaWM6CiAgIHR5cGVkZWYgbW96aWxsYTo6bGF5ZXJzOjpMYXllciBMYXll
cjsKICAgdHlwZWRlZiBtb3ppbGxhOjpsYXllcnM6OkxheWVyTWFuYWdlciBMYXllck1hbmFnZXI7
CisgIHR5cGVkZWYgbW96aWxsYTo6VGltZVN0YW1wIFRpbWVTdGFtcDsKIAogICBuc1ZpZGVvRnJh
bWUobnNTdHlsZUNvbnRleHQqIGFDb250ZXh0KTsKIAogICBOU19ERUNMX1FVRVJZRlJBTUUKICAg
TlNfREVDTF9GUkFNRUFSRU5BX0hFTFBFUlMKIAogICBOU19JTUVUSE9EIEJ1aWxkRGlzcGxheUxp
c3QobnNEaXNwbGF5TGlzdEJ1aWxkZXIqICAgYUJ1aWxkZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc1JlY3QmICAgICAgICAgICBhRGlydHlSZWN0LApAQCAtMTQxLDEx
ICsxNDIsMTQgQEAgcHJvdGVjdGVkOgogCiAgIG5zTWFyZ2luIG1Cb3JkZXJQYWRkaW5nOwogICAK
ICAgLy8gQW5vbnltb3VzIGNoaWxkIHdoaWNoIGlzIGJvdW5kIHZpYSBYQkwgdG8gdGhlIHZpZGVv
IGNvbnRyb2xzLgogICBuc0NPTVB0cjxuc0lDb250ZW50PiBtVmlkZW9Db250cm9sczsKICAgCiAg
IC8vIEFub255bW91cyBjaGlsZCB3aGljaCBpcyB0aGUgaW1hZ2UgZWxlbWVudCBvZiB0aGUgcG9z
dGVyIGZyYW1lLgogICBuc0NPTVB0cjxuc0lDb250ZW50PiBtUG9zdGVySW1hZ2U7CisKKyAgLy8g
VGFyZ2V0IHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBmcmFtZSB3ZSBwYWludGVkLgorICBUaW1lU3Rh
bXAgbUxhc3RQYWludGVkVGFyZ2V0OwogfTsKIAogI2VuZGlmIC8qIG5zVmlkZW9GcmFtZV9oX19f
ICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>496253</attachid>
            <date>2010-12-08 13:24:49 -0800</date>
            <delta_ts>2011-02-23 16:53:26 -0800</delta_ts>
            <desc>Patch v2 1/3: base stats</desc>
            <filename>580531-stats.patch</filename>
            <type>text/plain</type>
            <size>50511</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4sIENocmlzIERvdWJsZSA8Y2hyaXMuZG91YmxlQGRvdWJsZS5jby5uej4KIyBQYXJlbnQg
ODM3ZDdiMzQ2YTY0N2IyMTAwNTk2MzczOGViNDlmODQ4MTQxZTBkOQpCdWcgNTgwNTMxIC0gQWRk
IHBsYXliYWNrIHN0YXRpc3RpY3MgZm9yIHZpZGVvLiByPT8gYT0/CgpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvcHVibGljL25zSFRNTFZpZGVvRWxlbWVudC5oIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvcHVibGljL25zSFRNTFZpZGVvRWxlbWVudC5oCi0tLSBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3B1YmxpYy9uc0hUTUxWaWRlb0VsZW1lbnQuaAorKysgYi9jb250ZW50L2h0bWwv
Y29udGVudC9wdWJsaWMvbnNIVE1MVmlkZW9FbGVtZW50LmgKQEAgLTc4LDExICs3OCwxNiBAQCBw
dWJsaWM6CiAKICAgLy8gUmV0dXJucyB0aGUgY3VycmVudCB2aWRlbyBmcmFtZSB3aWR0aCBhbmQg
aGVpZ2h0LgogICAvLyBJZiB0aGVyZSBpcyBubyB2aWRlbyBmcmFtZSwgcmV0dXJucyB0aGUgZ2l2
ZW4gZGVmYXVsdCBzaXplLgogICBuc0ludFNpemUgR2V0VmlkZW9TaXplKG5zSW50U2l6ZSBkZWZh
dWx0U2l6ZSk7CiAKICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBY2NlcHRIZWFkZXIobnNJSHR0cENo
YW5uZWwqIGFDaGFubmVsKTsKIAogICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0lu
Zm8oKTsKKworICAvLyBEaXNwYXRjaGVzIGFuIGV2ZW50IHRvIGluY3JlbWVudCB0aGUgY291bnRl
ciBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcworICAvLyBwYWludGVkLiBDYWxsZWQgb24gdGhlIG1h
aW4gdGhyZWFkIGJ5IHRoZSBuc1ZpZGVvRnJhbWUgd2hlbiBhIG5ldyBpbWFnZQorICAvLyBpcyBw
YWludGVkLgorICB2b2lkIE5vdGlmeVBhaW50ZWRGcmFtZSgpOwogfTsKIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MVmlkZW9FbGVtZW50LmNwcCBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCi0tLSBhL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC0xNzgsOCArMTc4
LDUzIEBAIG5zcmVzdWx0IG5zSFRNTFZpZGVvRWxlbWVudDo6U2V0QWNjZXB0SGUKICAgICAgICAg
ImF1ZGlvLyo7cT0wLjYsKi8qO3E9MC41Iik7CiAKICAgICByZXR1cm4gYUNoYW5uZWwtPlNldFJl
cXVlc3RIZWFkZXIoTlNfTElURVJBTF9DU1RSSU5HKCJBY2NlcHQiKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSX0ZBTFNFKTsKIH0KIAogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxWaWRl
b0VsZW1lbnQsIFBvc3RlciwgcG9zdGVyKQorCisvKiByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBtb3pEZWNvZGVkRnJhbWVzOyAqLworTlNfSU1FVEhPRElNUCBuc0hUTUxWaWRlb0Vs
ZW1lbnQ6OkdldE1velBhcnNlZEZyYW1lcyhQUlVpbnQzMiAqYU1vekRlY29kZWRGcmFtZXMpCit7
CisgIE5TX0FTU0VSVElPTihOU19Jc01haW5UaHJlYWQoKSwgIlNob3VsZCBiZSBvbiBtYWluIHRo
cmVhZC4iKTsKKyAgKmFNb3pEZWNvZGVkRnJhbWVzID0gbURlY29kZXIgPyBtRGVjb2Rlci0+R2V0
UGFyc2VkRnJhbWVzKCkgOiAwOworICByZXR1cm4gTlNfT0s7Cit9CisKKy8qIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG1vekRyb3BwZWRGcmFtZXM7ICovCitOU19JTUVUSE9ESU1Q
IG5zSFRNTFZpZGVvRWxlbWVudDo6R2V0TW96RGVjb2RlZEZyYW1lcyhQUlVpbnQzMiAqYU1vekRy
b3BwZWRGcmFtZXMpCit7CisgIE5TX0FTU0VSVElPTihOU19Jc01haW5UaHJlYWQoKSwgIlNob3Vs
ZCBiZSBvbiBtYWluIHRocmVhZC4iKTsKKyAgKmFNb3pEcm9wcGVkRnJhbWVzID0gbURlY29kZXIg
PyBtRGVjb2Rlci0+R2V0RGVjb2RlZEZyYW1lcygpIDogMDsKKyAgcmV0dXJuIE5TX09LOworfQor
CitOU19JTUVUSE9ESU1QIG5zSFRNTFZpZGVvRWxlbWVudDo6R2V0TW96UHJlc2VudGVkRnJhbWVz
KFBSVWludDMyICphTW96RHJvcHBlZEZyYW1lcykKK3sKKyAgTlNfQVNTRVJUSU9OKE5TX0lzTWFp
blRocmVhZCgpLCAiU2hvdWxkIGJlIG9uIG1haW4gdGhyZWFkLiIpOworICAqYU1vekRyb3BwZWRG
cmFtZXMgPSBtRGVjb2RlciA/IG1EZWNvZGVyLT5HZXRQcmVzZW50ZWRGcmFtZXMoKSA6IDA7Cisg
IHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUCBuc0hUTUxWaWRlb0VsZW1lbnQ6Okdl
dE1velBhaW50ZWRGcmFtZXMoUFJVaW50MzIgKmFNb3pEcm9wcGVkRnJhbWVzKQoreworICBOU19B
U1NFUlRJT04oTlNfSXNNYWluVGhyZWFkKCksICJTaG91bGQgYmUgb24gbWFpbiB0aHJlYWQuIik7
CisgICphTW96RHJvcHBlZEZyYW1lcyA9IG1EZWNvZGVyID8gbURlY29kZXItPkdldFBhaW50ZWRG
cmFtZXMoKSA6IDA7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUCBuc0hUTUxW
aWRlb0VsZW1lbnQ6OkdldE1vekZyYW1lRGVsYXkoZmxvYXQgKmFNb3pGcmFtZURlbGF5KQorewor
ICBOU19BU1NFUlRJT04oTlNfSXNNYWluVGhyZWFkKCksICJTaG91bGQgYmUgb24gbWFpbiB0aHJl
YWQuIik7CisgICphTW96RnJhbWVEZWxheSA9IG1JbWFnZUNvbnRhaW5lciA/IG1JbWFnZUNvbnRh
aW5lci0+R2V0UGFpbnREZWxheSgpLlRvU2Vjb25kcygpIDogMDsKKyAgcmV0dXJuIE5TX09LOwor
fQorCit2b2lkIG5zSFRNTFZpZGVvRWxlbWVudDo6Tm90aWZ5UGFpbnRlZEZyYW1lKCkKK3sKKyAg
TlNfQVNTRVJUSU9OKE5TX0lzTWFpblRocmVhZCgpLCAiU2hvdWxkIGJlIG9uIG1haW4gdGhyZWFk
LiIpOworICBpZiAobURlY29kZXIpIHsKKyAgICBtRGVjb2Rlci0+Tm90aWZ5UGFpbnRlZEZyYW1l
KCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJl
YWRlci5jcHAgYi9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuY3BwCi0tLSBh
L2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5jcHAKKysrIGIvY29udGVudC9t
ZWRpYS9uc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmNwcApAQCAtMzIwLDE3ICszMjAsMTggQEAgbnNy
ZXN1bHQgbnNCdWlsdGluRGVjb2RlclJlYWRlcjo6RGVjb2RlVAogewogICAvLyBEZWNvZGUgZm9y
d2FyZCB0byB0aGUgdGFyZ2V0IGZyYW1lLiBTdGFydCB3aXRoIHZpZGVvLCBpZiB3ZSBoYXZlIGl0
LgogICBpZiAoSGFzVmlkZW8oKSkgewogICAgIFBSQm9vbCBlb2YgPSBQUl9GQUxTRTsKICAgICBQ
UkludDY0IHN0YXJ0VGltZSA9IC0xOwogICAgIHdoaWxlIChIYXNWaWRlbygpICYmICFlb2YpIHsK
ICAgICAgIHdoaWxlIChtVmlkZW9RdWV1ZS5HZXRTaXplKCkgPT0gMCAmJiAhZW9mKSB7CiAgICAg
ICAgIFBSQm9vbCBza2lwID0gUFJfRkFMU0U7Ci0gICAgICAgIGVvZiA9ICFEZWNvZGVWaWRlb0Zy
YW1lKHNraXAsIDApOworICAgICAgICBQUlVpbnQzMiBwYXJzZWQ9MCwgZGVjb2RlZD0wOworICAg
ICAgICBlb2YgPSAhRGVjb2RlVmlkZW9GcmFtZShza2lwLCAwLCBwYXJzZWQsIGRlY29kZWQpOwog
ICAgICAgICB7CiAgICAgICAgICAgTW9uaXRvckF1dG9FeGl0IGV4aXRSZWFkZXJNb24obU1vbml0
b3IpOwogICAgICAgICAgIE1vbml0b3JBdXRvRW50ZXIgZGVjb2Rlck1vbihtRGVjb2Rlci0+R2V0
TW9uaXRvcigpKTsKICAgICAgICAgICBpZiAobURlY29kZXItPkdldERlY29kZVN0YXRlKCkgPT0g
bnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZTo6REVDT0RFUl9TVEFURV9TSFVURE9XTikgewog
ICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICB9CmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJS
ZWFkZXIuaCBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5oCi0tLSBhL2Nv
bnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5oCisrKyBiL2NvbnRlbnQvbWVkaWEv
bnNCdWlsdGluRGVjb2RlclJlYWRlci5oCkBAIC00NDQsMTggKzQ0NCwyMCBAQCBwdWJsaWM6CiAg
IC8vIGluIG1BdWRpb1F1ZXVlLiBSZXR1cm5zIFBSX1RSVUUgd2hlbiB0aGVyZSdzIG1vcmUgYXVk
aW8gdG8gZGVjb2RlLAogICAvLyBQUl9GQUxTRSBpZiB0aGUgYXVkaW8gaXMgZmluaXNoZWQsIGVu
ZCBvZiBmaWxlIGhhcyBiZWVuIHJlYWNoZWQsCiAgIC8vIG9yIGFuIHVuLXJlY292ZXJhYmxlIHJl
YWQgZXJyb3IgaGFzIG9jY3VyZWQuCiAgIHZpcnR1YWwgUFJCb29sIERlY29kZUF1ZGlvRGF0YSgp
ID0gMDsKIAogICAvLyBSZWFkcyBhbmQgZGVjb2RlcyBvbmUgdmlkZW8gZnJhbWUuIFBhY2tldHMg
d2l0aCBhIHRpbWVzdGFtcCBsZXNzCiAgIC8vIHRoYW4gYVRpbWVUaHJlc2hvbGQgd2lsbCBiZSBk
ZWNvZGVkICh1bmxlc3MgdGhleSdyZSBub3Qga2V5ZnJhbWVzCiAgIC8vIGFuZCBhS2V5ZnJhbWVT
a2lwIGlzIFBSX1RSVUUpLCBidXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIHF1ZXVlLgotICB2
aXJ0dWFsIFBSQm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKSA9
IDA7CisgIHZpcnR1YWwgUFJCb29sIERlY29kZVZpZGVvRnJhbWUoUFJCb29sJiBhS2V5ZnJhbWVT
a2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJl
c2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzImIGFQYXJz
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzImIGFEZWNvZGVk
KSA9IDA7CiAKICAgdmlydHVhbCBQUkJvb2wgSGFzQXVkaW8oKSA9IDA7CiAgIHZpcnR1YWwgUFJC
b29sIEhhc1ZpZGVvKCkgPSAwOwogCiAgIC8vIFJlYWQgaGVhZGVyIGRhdGEgZm9yIGFsbCBiaXRz
dHJlYW1zIGluIHRoZSBmaWxlLiBGaWxscyBtSW5mbyB3aXRoCiAgIC8vIHRoZSBkYXRhIHJlcXVp
cmVkIHRvIHByZXNlbnQgdGhlIG1lZGlhLiBSZXR1cm5zIE5TX09LIG9uIHN1Y2Nlc3MsCiAgIC8v
IG9yIE5TX0VSUk9SX0ZBSUxVUkUgb24gZmFpbHVyZS4KICAgdmlydHVhbCBuc3Jlc3VsdCBSZWFk
TWV0YWRhdGEoKSA9IDA7CkBAIC01MTUsMTcgKzUxNywyMCBAQCBwcm90ZWN0ZWQ6CiAgIHRlbXBs
YXRlPGNsYXNzIERhdGE+CiAgIERhdGEqIERlY29kZVRvRmlyc3REYXRhKERlY29kZUZuIGFEZWNv
ZGVGbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFRdWV1ZTxEYXRhPiYgYVF1ZXVl
KTsKIAogICAvLyBXcmFwcGVyIHNvIHRoYXQgRGVjb2RlVmlkZW9GcmFtZShQUkJvb2wmLFBSSW50
NjQpIGNhbiBiZSBjYWxsZWQgZnJvbQogICAvLyBEZWNvZGVUb0ZpcnN0RGF0YSgpLgogICBQUkJv
b2wgRGVjb2RlVmlkZW9GcmFtZSgpIHsKICAgICBQUkJvb2wgZiA9IFBSX0ZBTFNFOwotICAgIHJl
dHVybiBEZWNvZGVWaWRlb0ZyYW1lKGYsIDApOworICAgIC8vIElnbm9yZSB0aGVzZSwgRGVjb2Rl
VmlkZW9GcmFtZSgpIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBzZWVraW5nLCBzbworICAgIC8vIHRo
ZXNlIGFyZW4ndCByZWxldmFudCB0byBwZXJmb3JtYW5jZS4KKyAgICBQUlVpbnQzMiBwYXJzZWQ9
MCwgZGVjb2RlZD0wOworICAgIHJldHVybiBEZWNvZGVWaWRlb0ZyYW1lKGYsIDAsIHBhcnNlZCwg
ZGVjb2RlZCk7CiAgIH0KIAogICAvLyBGaWxscyBhUmFuZ2VzIHdpdGggQnl0ZVJhbmdlcyBkZW5v
dGluZyB0aGUgc2VjdGlvbnMgb2YgdGhlIG1lZGlhIHdoaWNoCiAgIC8vIGhhdmUgYmVlbiBkb3du
bG9hZGVkIGFuZCBhcmUgc3RvcmVkIGluIHRoZSBtZWRpYSBjYWNoZS4gVGhlIHJlYWRlcgogICAv
LyBtb25pdG9yIG11c3QgbXVzdCBiZSBoZWxkIHdpdGggZXhhY3RseSBvbmUgbG9jayBjb3VudC4g
VGhlIG5zTWVkaWFTdHJlYW0KICAgLy8gbXVzdCBiZSBwaW5uZWQgd2hpbGUgY2FsbGluZyB0aGlz
LgogICBuc3Jlc3VsdCBHZXRCdWZmZXJlZEJ5dGVzKG5zVEFycmF5PEJ5dGVSYW5nZT4mIGFSYW5n
ZXMpOwogCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1h
Y2hpbmUuY3BwIGIvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lLmNw
cAotLS0gYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUuY3BwCisr
KyBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5jcHAKQEAgLTI5
MiwzNiArMjkyLDQzIEBAIHZvaWQgbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZTo6RGVjb2QK
ICAgICAgICAgKCghYXVkaW9QdW1wICYmIGF1ZGlvUGxheWluZyAmJiBhdWRpb0RlY29kZWQgPCBs
b3dBdWRpb1RocmVzaG9sZCkgfHwKICAgICAgICAgICghdmlkZW9QdW1wICYmIHZpZGVvUXVldWVT
aXplIDwgTE9XX1ZJREVPX0ZSQU1FUykpKQogICAgIHsKICAgICAgIHNraXBUb05leHRLZXlmcmFt
ZSA9IFBSX1RSVUU7CiAgICAgICBMT0coUFJfTE9HX0RFQlVHLCAoIlNraXBwaW5nIHZpZGVvIGRl
Y29kZSB0byB0aGUgbmV4dCBrZXlmcmFtZSIpKTsKICAgICB9CiAKICAgICAvLyBWaWRlbyBkZWNv
ZGUuCisgICAgUFJVaW50MzIgcGFyc2VkID0gMCwgZGVjb2RlZCA9IDA7CiAgICAgaWYgKHZpZGVv
UGxheWluZyAmJiAhdmlkZW9XYWl0KSB7CiAgICAgICAvLyBUaW1lIHRoZSB2aWRlbyBkZWNvZGUs
IHNvIHRoYXQgaWYgaXQncyBzbG93LCB3ZSBjYW4gaW5jcmVhc2Ugb3VyIGxvdwogICAgICAgLy8g
YXVkaW8gdGhyZXNob2xkIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGFuIGF1ZGlvIHVuZGVycnVu
IHdoaWxlIHdlJ3JlCiAgICAgICAvLyB3YWl0aW5nIGZvciBhIHZpZGVvIGRlY29kZSB0byBjb21w
bGV0ZS4KICAgICAgIFRpbWVTdGFtcCBzdGFydCA9IFRpbWVTdGFtcDo6Tm93KCk7Ci0gICAgICB2
aWRlb1BsYXlpbmcgPSBtUmVhZGVyLT5EZWNvZGVWaWRlb0ZyYW1lKHNraXBUb05leHRLZXlmcmFt
ZSwgY3VycmVudFRpbWUpOworICAgICAgdmlkZW9QbGF5aW5nID0gbVJlYWRlci0+RGVjb2RlVmlk
ZW9GcmFtZShza2lwVG9OZXh0S2V5ZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWQpOwogICAgICAgVGltZUR1cmF0aW9uIGRlY29k
ZVRpbWUgPSBUaW1lU3RhbXA6Ok5vdygpIC0gc3RhcnQ7CiAgICAgICBpZiAoIWRlY29kZUNsb3Nl
VG9Eb3dubG9hZCAmJgogICAgICAgICAgIFRIUkVTSE9MRF9GQUNUT1IgKiBkZWNvZGVUaW1lLlRv
TWlsbGlzZWNvbmRzKCkgPiBsb3dBdWRpb1RocmVzaG9sZCkKICAgICAgIHsKICAgICAgICAgbG93
QXVkaW9UaHJlc2hvbGQgPQogICAgICAgICAgIE5TX01JTihzdGF0aWNfY2FzdDxQUkludDY0PihU
SFJFU0hPTERfRkFDVE9SICogZGVjb2RlVGltZS5Ub01pbGxpc2Vjb25kcygpKSwKICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8UFJJbnQ2ND4oQU1QTEVfQVVESU9fTVMpKTsKICAgICAgICAg
YW1wbGVBdWRpb1RocmVzaG9sZCA9IE5TX01BWChUSFJFU0hPTERfRkFDVE9SICogbG93QXVkaW9U
aHJlc2hvbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1wbGVBdWRp
b1RocmVzaG9sZCk7CiAgICAgICAgIExPRyhQUl9MT0dfREVCVUcsCiAgICAgICAgICAgICAoIlNs
b3cgdmlkZW8gZGVjb2RlLCBzZXQgbG93QXVkaW9UaHJlc2hvbGQ9JWxsZCBhbXBsZUF1ZGlvVGhy
ZXNob2xkPSVsbGQiLAogICAgICAgICAgICAgIGxvd0F1ZGlvVGhyZXNob2xkLCBhbXBsZUF1ZGlv
VGhyZXNob2xkKSk7CiAgICAgICB9CiAgICAgfQorICAgIGlmIChwYXJzZWQgfHwgZGVjb2RlZCkg
eworICAgICAgbURlY29kZXItPk5vdGlmeURlY29kZWRGcmFtZXMocGFyc2VkLCBkZWNvZGVkKTsK
KyAgICB9CiAgICAgewogICAgICAgTW9uaXRvckF1dG9FbnRlciBtb24obURlY29kZXItPkdldE1v
bml0b3IoKSk7CiAgICAgICBtRGVjb2Rlci0+R2V0TW9uaXRvcigpLk5vdGlmeUFsbCgpOwogICAg
IH0KIAogICAgIC8vIEF1ZGlvIGRlY29kZS4KICAgICBpZiAoYXVkaW9QbGF5aW5nICYmICFhdWRp
b1dhaXQpIHsKICAgICAgIGF1ZGlvUGxheWluZyA9IG1SZWFkZXItPkRlY29kZUF1ZGlvRGF0YSgp
OwpAQCAtOTIyLDE3ICs5MjksMTcgQEAgbnNyZXN1bHQgbnNCdWlsdGluRGVjb2RlclN0YXRlTWFj
aGluZTo6UgogICAgICAgICBMb2FkTWV0YWRhdGEoKTsKICAgICAgICAgaWYgKG1TdGF0ZSA9PSBE
RUNPREVSX1NUQVRFX1NIVVRET1dOKSB7CiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
IAogICAgICAgICBWaWRlb0RhdGEqIHZpZGVvRGF0YSA9IEZpbmRTdGFydFRpbWUoKTsKICAgICAg
ICAgaWYgKHZpZGVvRGF0YSkgewogICAgICAgICAgIE1vbml0b3JBdXRvRXhpdCBleGl0TW9uKG1E
ZWNvZGVyLT5HZXRNb25pdG9yKCkpOwotICAgICAgICAgIFJlbmRlclZpZGVvRnJhbWUodmlkZW9E
YXRhKTsKKyAgICAgICAgICBSZW5kZXJWaWRlb0ZyYW1lKHZpZGVvRGF0YSwgVGltZVN0YW1wOjpO
b3coKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTdGFydCB0aGUgZGVjb2RlIHRocmVhZHMs
IHNvIHRoYXQgd2UgY2FuIHByZSBidWZmZXIgdGhlIHN0cmVhbXMuCiAgICAgICAgIC8vIGFuZCBj
YWxjdWxhdGUgdGhlIHN0YXJ0IHRpbWUgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBkdXJhdGlv
bi4KICAgICAgICAgaWYgKE5TX0ZBSUxFRChTdGFydERlY29kZVRocmVhZHMoKSkpIHsKICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0xMDUxLDIzICsxMDU4LDIzIEBAIG5zcmVz
dWx0IG5zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmU6OlIKICAgICAgICAgICB9CiAgICAgICAg
ICAgaWYgKE5TX1NVQ0NFRURFRChyZXMpKXsKICAgICAgICAgICAgIFNvdW5kRGF0YSogYXVkaW8g
PSBIYXNBdWRpbygpID8gbVJlYWRlci0+bUF1ZGlvUXVldWUuUGVla0Zyb250KCkgOiBuc251bGw7
CiAgICAgICAgICAgICBOU19BU1NFUlRJT04oIWF1ZGlvIHx8IChhdWRpby0+bVRpbWUgPD0gc2Vl
a1RpbWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWtUaW1lIDw9
IGF1ZGlvLT5tVGltZSArIGF1ZGlvLT5tRHVyYXRpb24pLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICJTZWVrIHRhcmdldCBzaG91bGQgbGllIGluc2lkZSB0aGUgZmlyc3QgYXVkaW8gYmxvY2sg
YWZ0ZXIgc2VlayIpOwogICAgICAgICAgICAgUFJJbnQ2NCBzdGFydFRpbWUgPSAoYXVkaW8gJiYg
YXVkaW8tPm1UaW1lIDwgc2Vla1RpbWUpID8gYXVkaW8tPm1UaW1lIDogc2Vla1RpbWU7CiAgICAg
ICAgICAgICBtQXVkaW9TdGFydFRpbWUgPSBzdGFydFRpbWU7Ci0gICAgICAgICAgICBtUGxheUR1
cmF0aW9uID0gVGltZUR1cmF0aW9uOjpGcm9tTWlsbGlzZWNvbmRzKHN0YXJ0VGltZSk7CisgICAg
ICAgICAgICBtUGxheUR1cmF0aW9uID0gVGltZUR1cmF0aW9uOjpGcm9tTWlsbGlzZWNvbmRzKHN0
YXJ0VGltZSAtIG1TdGFydFRpbWUpOwogICAgICAgICAgICAgaWYgKEhhc1ZpZGVvKCkpIHsKICAg
ICAgICAgICAgICAgbnNBdXRvUHRyPFZpZGVvRGF0YT4gdmlkZW8obVJlYWRlci0+bVZpZGVvUXVl
dWUuUGVla0Zyb250KCkpOwogICAgICAgICAgICAgICBpZiAodmlkZW8pIHsKICAgICAgICAgICAg
ICAgICBOU19BU1NFUlRJT04odmlkZW8tPm1UaW1lIDw9IHNlZWtUaW1lICYmIHNlZWtUaW1lIDw9
IHZpZGVvLT5tRW5kVGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZWsgdGFy
Z2V0IHNob3VsZCBsaWUgaW5zaWRlIHRoZSBmaXJzdCBmcmFtZSBhZnRlciBzZWVrIik7Ci0gICAg
ICAgICAgICAgICAgUmVuZGVyVmlkZW9GcmFtZSh2aWRlbyk7CisgICAgICAgICAgICAgICAgUmVu
ZGVyVmlkZW9GcmFtZSh2aWRlbywgVGltZVN0YW1wOjpOb3coKSk7CiAgICAgICAgICAgICAgICAg
bVJlYWRlci0+bVZpZGVvUXVldWUuUG9wRnJvbnQoKTsKICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtRGVjb2Rlci0+U3RhcnRQ
cm9ncmVzc1VwZGF0ZXMoKTsKICAgICAgICAgaWYgKG1TdGF0ZSA9PSBERUNPREVSX1NUQVRFX1NI
VVRET1dOKQogICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTE5MywyOCArMTIwMCwzMSBAQCBuc3Jl
c3VsdCBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpSCiAgICAgICB9CiAgICAgICBicmVh
azsKICAgICB9CiAgIH0KIAogICByZXR1cm4gTlNfT0s7CiB9CiAKLXZvaWQgbnNCdWlsdGluRGVj
b2RlclN0YXRlTWFjaGluZTo6UmVuZGVyVmlkZW9GcmFtZShWaWRlb0RhdGEqIGFEYXRhKQordm9p
ZCBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpSZW5kZXJWaWRlb0ZyYW1lKFZpZGVvRGF0
YSogYURhdGEsIFRpbWVTdGFtcCBhVGFyZ2V0KQogewogICBOU19BU1NFUlRJT04oSXNDdXJyZW50
VGhyZWFkKG1EZWNvZGVyLT5tU3RhdGVNYWNoaW5lVGhyZWFkKSwgIlNob3VsZCBiZSBvbiBzdGF0
ZSBtYWNoaW5lIHRocmVhZC4iKTsKIAogICBpZiAoYURhdGEtPm1EdXBsaWNhdGUpIHsKICAgICBy
ZXR1cm47CiAgIH0KIAogICBuc1JlZlB0cjxJbWFnZT4gaW1hZ2UgPSBhRGF0YS0+bUltYWdlOwog
ICBpZiAoaW1hZ2UpIHsKICAgICBjb25zdCBuc1ZpZGVvSW5mbyYgaW5mbyA9IG1SZWFkZXItPkdl
dEluZm8oKTsKLSAgICBtRGVjb2Rlci0+U2V0VmlkZW9EYXRhKGdmeEludFNpemUoaW5mby5tUGlj
dHVyZS53aWR0aCwgaW5mby5tUGljdHVyZS5oZWlnaHQpLCBpbmZvLm1QaXhlbEFzcGVjdFJhdGlv
LCBpbWFnZSk7CisgICAgbURlY29kZXItPlNldFZpZGVvRGF0YShnZnhJbnRTaXplKGluZm8ubVBp
Y3R1cmUud2lkdGgsIGluZm8ubVBpY3R1cmUuaGVpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm8ubVBpeGVsQXNwZWN0UmF0aW8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFUYXJnZXQpOwogICB9CiB9CiAK
IFBSSW50NjQKIG5zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmU6OkdldEF1ZGlvQ2xvY2soKQog
ewogICBOU19BU1NFUlRJT04oSXNDdXJyZW50VGhyZWFkKG1EZWNvZGVyLT5tU3RhdGVNYWNoaW5l
VGhyZWFkKSwgIlNob3VsZCBiZSBvbiBzdGF0ZSBtYWNoaW5lIHRocmVhZC4iKTsKICAgaWYgKCFt
QXVkaW9TdHJlYW0gfHwgIUhhc0F1ZGlvKCkpCkBAIC0xMjQ5LDI2ICsxMjU5LDI4IEBAIHZvaWQg
bnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZTo6QWR2YW4KICAgICAvLyB0aGUgZW5kIG9mIHRo
ZSBhdWRpbywgdXNlIHRoZSBhdWRpbyBjbG9jay4gSG93ZXZlciBpZiB3ZSd2ZSBmaW5pc2hlZAog
ICAgIC8vIGF1ZGlvLCBvciBkb24ndCBoYXZlIGF1ZGlvLCB1c2UgdGhlIHN5c3RlbSBjbG9jay4K
ICAgICBQUkludDY0IGNsb2NrX3RpbWUgPSAtMTsKICAgICBQUkludDY0IGF1ZGlvX3RpbWUgPSBH
ZXRBdWRpb0Nsb2NrKCk7CiAgICAgaWYgKEhhc0F1ZGlvKCkgJiYgIW1BdWRpb0NvbXBsZXRlZCAm
JiBhdWRpb190aW1lICE9IC0xKSB7CiAgICAgICBjbG9ja190aW1lID0gYXVkaW9fdGltZTsKICAg
ICAgIC8vIFJlc3luYyBhZ2FpbnN0IHRoZSBhdWRpbyBjbG9jaywgd2hpbGUgd2UncmUgdHJ1c3Rp
bmcgdGhlCiAgICAgICAvLyBhdWRpbyBjbG9jay4gVGhpcyBlbnN1cmVzIG5vICJkcmlmdCIsIHBh
cnRpY3VsYXJseSBvbiBMaW51eC4KLSAgICAgIG1QbGF5U3RhcnRUaW1lID0gVGltZVN0YW1wOjpO
b3coKSAtIFRpbWVEdXJhdGlvbjo6RnJvbU1pbGxpc2Vjb25kcyhjbG9ja190aW1lKTsKKyAgICAg
IG1QbGF5RHVyYXRpb24gPSBUaW1lRHVyYXRpb246OkZyb21NaWxsaXNlY29uZHMoY2xvY2tfdGlt
ZSk7CisgICAgICBtUGxheVN0YXJ0VGltZSA9IFRpbWVTdGFtcDo6Tm93KCk7CiAgICAgfSBlbHNl
IHsKICAgICAgIC8vIFNvdW5kIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtLiBTeW5jIHRvIHRo
ZSBzeXN0ZW0gY2xvY2suCiAgICAgICBUaW1lRHVyYXRpb24gdCA9IFRpbWVTdGFtcDo6Tm93KCkg
LSBtUGxheVN0YXJ0VGltZSArIG1QbGF5RHVyYXRpb247CiAgICAgICBjbG9ja190aW1lID0gKFBS
SW50NjQpKDEwMDAgKiB0LlRvU2Vjb25kcygpKTsKICAgICAgIC8vIEVuc3VyZSB0aGUgY2xvY2sg
Y2FuIG5ldmVyIGdvIGJhY2t3YXJkcy4KICAgICAgIE5TX0FTU0VSVElPTihtQ3VycmVudEZyYW1l
VGltZSA8PSBjbG9ja190aW1lLCAiQ2xvY2sgc2hvdWxkIGdvIGZvcndhcmRzIik7CiAgICAgICBj
bG9ja190aW1lID0gTlNfTUFYKG1DdXJyZW50RnJhbWVUaW1lLCBjbG9ja190aW1lKSArIG1TdGFy
dFRpbWU7CiAgICAgfQogCisgICAgLy8gU2tpcCB2aWRlbyBmcmFtZXMgdXAgdG8gdGhlIGN1cnJl
bnQgcGxheWJhY2sgcG9zaXRpb24uCiAgICAgTlNfQVNTRVJUSU9OKGNsb2NrX3RpbWUgPj0gbVN0
YXJ0VGltZSwgIlNob3VsZCBoYXZlIHBvc2l0aXZlIGNsb2NrIHRpbWUuIik7CiAgICAgbnNBdXRv
UHRyPFZpZGVvRGF0YT4gdmlkZW9EYXRhOwogICAgIGlmIChtUmVhZGVyLT5tVmlkZW9RdWV1ZS5H
ZXRTaXplKCkgPiAwKSB7CiAgICAgICBWaWRlb0RhdGEqIGRhdGEgPSBtUmVhZGVyLT5tVmlkZW9R
dWV1ZS5QZWVrRnJvbnQoKTsKICAgICAgIHdoaWxlIChjbG9ja190aW1lID49IGRhdGEtPm1UaW1l
KSB7CiAgICAgICAgIG1WaWRlb0ZyYW1lRW5kVGltZSA9IGRhdGEtPm1FbmRUaW1lOwogICAgICAg
ICB2aWRlb0RhdGEgPSBkYXRhOwogICAgICAgICBtUmVhZGVyLT5tVmlkZW9RdWV1ZS5Qb3BGcm9u
dCgpOwpAQCAtMTI3NiwyNCArMTI4OCwzMSBAQCB2b2lkIG5zQnVpbHRpbkRlY29kZXJTdGF0ZU1h
Y2hpbmU6OkFkdmFuCiAgICAgICAgIGlmIChtUmVhZGVyLT5tVmlkZW9RdWV1ZS5HZXRTaXplKCkg
PT0gMCkKICAgICAgICAgICBicmVhazsKICAgICAgICAgZGF0YSA9IG1SZWFkZXItPm1WaWRlb1F1
ZXVlLlBlZWtGcm9udCgpOwogICAgICAgfQogICAgIH0KIAogICAgIFBSSW50NjQgZnJhbWVEdXJh
dGlvbiA9IEFVRElPX0RVUkFUSU9OX01TOwogICAgIGlmICh2aWRlb0RhdGEpIHsKLSAgICAgIC8v
IERlY29kZSBvbmUgZnJhbWUgYW5kIGRpc3BsYXkgaXQKLSAgICAgIE5TX0FTU0VSVElPTih2aWRl
b0RhdGEtPm1UaW1lID49IG1TdGFydFRpbWUsICJTaG91bGQgaGF2ZSBwb3NpdGl2ZSBmcmFtZSB0
aW1lIik7CisgICAgICAvLyBEaXNwbGF5IHRoZSBuZXh0IGZyYW1lLgorICAgICAgTlNfQVNTRVJU
SU9OKHZpZGVvRGF0YS0+bVRpbWUgPj0gbVN0YXJ0VGltZSwKKyAgICAgICAgICAgICAgICAgICAi
U2hvdWxkIGhhdmUgcG9zaXRpdmUgZnJhbWUgdGltZSIpOworCisgICAgICAvLyBDYWxjdWxhdGUg
dGhlIHN5c3RlbS1jbG9jayB0aW1lIGF0IHdoaWNoIHRoZSBmcmFtZSBzaG91bGQgc3RhcnQgYmVp
bmcgZGlzcGxheWVkLgorICAgICAgVGltZVN0YW1wIHByZXNUaW1lID0gbVBsYXlTdGFydFRpbWUg
LSBtUGxheUR1cmF0aW9uICsKKyAgICAgICAgVGltZUR1cmF0aW9uOjpGcm9tTWlsbGlzZWNvbmRz
KHZpZGVvRGF0YS0+bVRpbWUgLSBtU3RhcnRUaW1lKTsKKworICAgICAgTlNfQVNTRVJUSU9OKHBy
ZXNUaW1lIDw9IFRpbWVTdGFtcDo6Tm93KCksCisgICAgICAgICAgICAgICAgICAgIkZyYW1lIG11
c3Qgc3RhcnQgYmVmb3JlIG9yIGF0IG5vdyIpOwogICAgICAgewogICAgICAgICBNb25pdG9yQXV0
b0V4aXQgZXhpdE1vbihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsKLSAgICAgICAgLy8gSWYgd2Ug
aGF2ZSB2aWRlbywgd2Ugd2FudCB0byBpbmNyZW1lbnQgdGhlIGNsb2NrIGluIHN0ZXBzIG9mIHRo
ZSBmcmFtZQotICAgICAgICAvLyBkdXJhdGlvbi4KLSAgICAgICAgUmVuZGVyVmlkZW9GcmFtZSh2
aWRlb0RhdGEpOworICAgICAgICBSZW5kZXJWaWRlb0ZyYW1lKHZpZGVvRGF0YSwgcHJlc1RpbWUp
OwogICAgICAgfQorICAgICAgbURlY29kZXItPk5vdGlmeVByZXNlbnRlZEZyYW1lKCk7CiAgICAg
ICBmcmFtZUR1cmF0aW9uID0gdmlkZW9EYXRhLT5tRW5kVGltZSAtIHZpZGVvRGF0YS0+bVRpbWU7
CiAgICAgICB2aWRlb0RhdGEgPSBuc251bGw7CiAgICAgfQogCiAgICAgLy8gS2ljayB0aGUgZGVj
b2RlIHRocmVhZCBpbiBjYXNlIGl0IGZpbGxlZCBpdHMgYnVmZmVycyBhbmQgcHV0IGl0c2VsZgog
ICAgIC8vIHRvIHNsZWVwLgogICAgIG1EZWNvZGVyLT5HZXRNb25pdG9yKCkuTm90aWZ5QWxsKCk7
CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGlu
ZS5oIGIvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lLmgKLS0tIGEv
Y29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lLmgKKysrIGIvY29udGVu
dC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lLmgKQEAgLTI5NSwxNyArMjk1LDE3
IEBAIHByb3RlY3RlZDoKIAogICAvLyBGaW5kcyB0aGUgZW5kIHRpbWUgb2YgdGhlIGxhc3QgZnJh
bWUgb2YgZGF0YSBpbiB0aGUgZmlsZSwgc3RvcmluZyB0aGUgdmFsdWUKICAgLy8gaW4gbUVuZFRp
bWUgaWYgc3VjY2Vzc2Z1bC4gVGhlIGRlY29kZXIgbXVzdCBiZSBoZWxkIHdpdGggZXhhY3RseSBv
bmUgbG9jawogICAvLyBjb3VudC4gQ2FsbGVkIG9uIHRoZSBzdGF0ZSBtYWNoaW5lIHRocmVhZC4K
ICAgdm9pZCBGaW5kRW5kVGltZSgpOwogCiAgIC8vIFBlcmZvcm1zIFlDYkNyIHRvIFJHQiBjb252
ZXJzaW9uLCBhbmQgcHVzaGVzIHRoZSBpbWFnZSBkb3duIHRoZQogICAvLyByZW5kZXJpbmcgcGlw
ZWxpbmUuIENhbGxlZCBvbiB0aGUgc3RhdGUgbWFjaGluZSB0aHJlYWQuCi0gIHZvaWQgUmVuZGVy
VmlkZW9GcmFtZShWaWRlb0RhdGEqIGFEYXRhKTsKKyAgdm9pZCBSZW5kZXJWaWRlb0ZyYW1lKFZp
ZGVvRGF0YSogYURhdGEsIFRpbWVTdGFtcCBhVGFyZ2V0KTsKIAogICAvLyBJZiB3ZSBoYXZlIHZp
ZGVvLCBkaXNwbGF5IGEgdmlkZW8gZnJhbWUgaWYgaXQncyB0aW1lIGZvciBkaXNwbGF5IGhhcwog
ICAvLyBhcnJpdmVkLCBvdGhlcndpc2Ugc2xlZXAgdW50aWwgaXQncyB0aW1lIGZvciB0aGUgbmV4
dCBzYW1wbGUuIFVwZGF0ZQogICAvLyB0aGUgY3VycmVudCBmcmFtZSB0aW1lIGFzIGFwcHJvcHJp
YXRlLCBhbmQgdHJpZ2dlciByZWFkeSBzdGF0ZSB1cGRhdGUuCiAgIC8vIFRoZSBkZWNvZGVyIG1v
bml0b3IgbXVzdCBiZSBoZWxkIHdpdGggZXhhY3RseSBvbmUgbG9jayBjb3VudC4gQ2FsbGVkCiAg
IC8vIG9uIHRoZSBzdGF0ZSBtYWNoaW5lIHRocmVhZC4KICAgdm9pZCBBZHZhbmNlRnJhbWUoKTsK
IApkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5jcHAgYi9jb250ZW50
L21lZGlhL25zTWVkaWFEZWNvZGVyLmNwcAotLS0gYS9jb250ZW50L21lZGlhL25zTWVkaWFEZWNv
ZGVyLmNwcAorKysgYi9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmNwcApAQCAtNzAsMTYg
KzcwLDIxIEBACiAvLyBuc01lZGlhRGVjb2Rlcjo6Q2FuUGxheVRocm91Z2goKSBjYWxjdWxhdGlv
biBtb3JlIHN0YWJsZSBpbiB0aGUgY2FzZSBvZgogLy8gZmx1Y3R1YXRpbmcgYml0cmF0ZXMuCiAj
ZGVmaW5lIENBTl9QTEFZX1RIUk9VR0hfTUFSR0lOIDIwCiAKIG5zTWVkaWFEZWNvZGVyOjpuc01l
ZGlhRGVjb2RlcigpIDoKICAgbUVsZW1lbnQoMCksCiAgIG1SR0JXaWR0aCgtMSksCiAgIG1SR0JI
ZWlnaHQoLTEpLAorICBtU3RhdHNNb25pdG9yKCJuc01lZGlhRGVjb2Rlci5zdGF0cyIpLAorICBt
UGFyc2VkRnJhbWVzKDApLAorICBtRGVjb2RlZEZyYW1lcygwKSwKKyAgbVByZXNlbnRlZEZyYW1l
cygwKSwKKyAgbVBhaW50ZWRGcmFtZXMoMCksCiAgIG1WaWRlb1VwZGF0ZUxvY2sobnNudWxsKSwK
ICAgbVBpeGVsQXNwZWN0UmF0aW8oMS4wKSwKICAgbUZyYW1lQnVmZmVyTGVuZ3RoKDApLAogICBt
UGlubmVkRm9yU2VlayhQUl9GQUxTRSksCiAgIG1TaXplQ2hhbmdlZChQUl9GQUxTRSksCiAgIG1T
aHV0dGluZ0Rvd24oUFJfRkFMU0UpCiB7CiAgIE1PWl9DT1VOVF9DVE9SKG5zTWVkaWFEZWNvZGVy
KTsKQEAgLTI0MCwyOSArMjQ1LDMxIEBAIHZvaWQgbnNNZWRpYURlY29kZXI6OkZpcmVUaW1lVXBk
YXRlKCkKIHsKICAgaWYgKCFtRWxlbWVudCkKICAgICByZXR1cm47CiAgIG1FbGVtZW50LT5GaXJl
VGltZVVwZGF0ZShQUl9UUlVFKTsKIH0KIAogdm9pZCBuc01lZGlhRGVjb2Rlcjo6U2V0VmlkZW9E
YXRhKGNvbnN0IGdmeEludFNpemUmIGFTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IGFQaXhlbEFzcGVjdFJhdGlvLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEltYWdlKiBhSW1hZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW1hZ2UqIGFJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1l
U3RhbXAgYVRhcmdldCkKIHsKICAgbnNBdXRvTG9jayBsb2NrKG1WaWRlb1VwZGF0ZUxvY2spOwog
CiAgIGlmIChtUkdCV2lkdGggIT0gYVNpemUud2lkdGggfHwgbVJHQkhlaWdodCAhPSBhU2l6ZS5o
ZWlnaHQgfHwKICAgICAgIG1QaXhlbEFzcGVjdFJhdGlvICE9IGFQaXhlbEFzcGVjdFJhdGlvKSB7
CiAgICAgbVJHQldpZHRoID0gYVNpemUud2lkdGg7CiAgICAgbVJHQkhlaWdodCA9IGFTaXplLmhl
aWdodDsKICAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9IGFQaXhlbEFzcGVjdFJhdGlvOwogICAgIG1T
aXplQ2hhbmdlZCA9IFBSX1RSVUU7CiAgIH0KICAgaWYgKG1JbWFnZUNvbnRhaW5lciAmJiBhSW1h
Z2UpIHsKICAgICBtSW1hZ2VDb250YWluZXItPlNldEN1cnJlbnRJbWFnZShhSW1hZ2UpOworICAg
IG1JbWFnZUNvbnRhaW5lci0+U2V0UGFpbnRUYXJnZXQoYVRhcmdldCk7CiAgIH0KIH0KIAogdm9p
ZCBuc01lZGlhRGVjb2Rlcjo6UGluRm9yU2VlaygpCiB7CiAgIG5zTWVkaWFTdHJlYW0qIHN0cmVh
bSA9IEdldEN1cnJlbnRTdHJlYW0oKTsKICAgaWYgKCFzdHJlYW0gfHwgbVBpbm5lZEZvclNlZWsp
IHsKICAgICByZXR1cm47CkBAIC0zMTAsOCArMzE3LDM2IEBAIFBSQm9vbCBuc01lZGlhRGVjb2Rl
cjo6Q2FuUGxheVRocm91Z2goKQogICAvLyBwbGF5YmFjayBwb3NpdGlvbiwgc28gdGhhdCBpZiB0
aGUgYml0cmF0ZSBvZiB0aGUgbWVkaWEgZmx1Y3R1YXRlcywgb3IgaWYKICAgLy8gb3VyIGRvd25s
b2FkIHJhdGUgb3IgZGVjb2RlIHJhdGUgZXN0aW1hdGlvbiBpcyBvdGhlcndpc2UgaW5hY2N1cmF0
ZSwKICAgLy8gd2UgZG9uJ3Qgc3VkZGVubHkgZGlzY292ZXIgdGhhdCB3ZSBuZWVkIHRvIGJ1ZmZl
ci4gVGhpcyBpcyBwYXJ0aWN1bGFybHkKICAgLy8gcmVxdWlyZWQgbmVhciB0aGUgc3RhcnQgb2Yg
dGhlIG1lZGlhLCB3aGVuIG5vdCBtdWNoIGRhdGEgaXMgZG93bmxvYWRlZC4KICAgUFJJbnQ2NCBy
ZWFkQWhlYWRNYXJnaW4gPSBzdGF0cy5tUGxheWJhY2tSYXRlICogQ0FOX1BMQVlfVEhST1VHSF9N
QVJHSU47CiAgIHJldHVybiBzdGF0cy5tVG90YWxCeXRlcyA9PSBzdGF0cy5tRG93bmxvYWRQb3Np
dGlvbiB8fAogICAgICAgICAgc3RhdHMubURvd25sb2FkUG9zaXRpb24gPiBzdGF0cy5tUGxheWJh
Y2tQb3NpdGlvbiArIHJlYWRBaGVhZE1hcmdpbjsKIH0KKwordm9pZCBuc01lZGlhRGVjb2Rlcjo6
Tm90aWZ5UGFpbnRlZEZyYW1lKCkgeworICBtb3ppbGxhOjpNb25pdG9yQXV0b0VudGVyIG1vbiht
U3RhdHNNb25pdG9yKTsKKyAgKyttUGFpbnRlZEZyYW1lczsKK30KKwordm9pZCBuc01lZGlhRGVj
b2Rlcjo6Tm90aWZ5UHJlc2VudGVkRnJhbWUoKSB7CisgIG1vemlsbGE6Ok1vbml0b3JBdXRvRW50
ZXIgbW9uKG1TdGF0c01vbml0b3IpOworICArK21QcmVzZW50ZWRGcmFtZXM7Cit9CisKK3ZvaWQg
bnNNZWRpYURlY29kZXI6Ok5vdGlmeURlY29kZWRGcmFtZXMoUFJVaW50MzIgYVBhcnNlZCwgUFJV
aW50MzIgYURlY29kZWQpIHsKKyAgbW96aWxsYTo6TW9uaXRvckF1dG9FbnRlciBtb24obVN0YXRz
TW9uaXRvcik7CisgIG1QYXJzZWRGcmFtZXMgKz0gYVBhcnNlZDsKKyAgbURlY29kZWRGcmFtZXMg
Kz0gYURlY29kZWQ7Cit9CisKKyNkZWZpbmUgSU1QTF9HRVRfU1RBVF9NRVRIT0QoWCkgXAorUFJV
aW50MzIgbnNNZWRpYURlY29kZXI6OkdldCMjWCMjRnJhbWVzKCkgeyBcCisgIG1vemlsbGE6Ok1v
bml0b3JBdXRvRW50ZXIgbW9uKG1TdGF0c01vbml0b3IpOyBcCisgIHJldHVybiBtIyNYIyNGcmFt
ZXM7IFwKK30KKworSU1QTF9HRVRfU1RBVF9NRVRIT0QoUGFyc2VkKTsKK0lNUExfR0VUX1NUQVRf
TUVUSE9EKERlY29kZWQpOworSU1QTF9HRVRfU1RBVF9NRVRIT0QoUHJlc2VudGVkKTsKK0lNUExf
R0VUX1NUQVRfTUVUSE9EKFBhaW50ZWQpOworCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25z
TWVkaWFEZWNvZGVyLmggYi9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmgKLS0tIGEvY29u
dGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5oCisrKyBiL2NvbnRlbnQvbWVkaWEvbnNNZWRpYURl
Y29kZXIuaApAQCAtNDIsMTYgKzQyLDE3IEBACiAKICNpbmNsdWRlICJuc0lQcmluY2lwYWwuaCIK
ICNpbmNsdWRlICJuc1NpemUuaCIKICNpbmNsdWRlICJwcmxvZy5oIgogI2luY2x1ZGUgImdmeENv
bnRleHQuaCIKICNpbmNsdWRlICJnZnhSZWN0LmgiCiAjaW5jbHVkZSAibnNJVGltZXIuaCIKICNp
bmNsdWRlICJJbWFnZUxheWVycy5oIgorI2luY2x1ZGUgIm1vemlsbGEvTW9uaXRvci5oIgogCiBj
bGFzcyBuc0hUTUxNZWRpYUVsZW1lbnQ7CiBjbGFzcyBuc01lZGlhU3RyZWFtOwogY2xhc3MgbnNJ
U3RyZWFtTGlzdGVuZXI7CiBjbGFzcyBuc1RpbWVSYW5nZXM7CiAKIC8vIFRoZSBzaXplIHRvIHVz
ZSBmb3IgYXVkaW8gZGF0YSBmcmFtZXMgaW4gTW96QXVkaW9BdmFpbGFibGUgZXZlbnRzLgogLy8g
VGhpcyB2YWx1ZSBpcyBwZXIgY2hhbm5lbCwgYW5kIGlzIGNob3NlbiB0byBnaXZlIH40MyBmcHMg
b2YgZXZlbnRzLApAQCAtODIsMTYgKzgzLDE3IEBAIHByaXZhdGU6CiAvLyB3aGljaCBjYW4gYmUg
Y2FsbGVkIGZyb20gYW55IHRocmVhZC4KIGNsYXNzIG5zTWVkaWFEZWNvZGVyIDogcHVibGljIG5z
SU9ic2VydmVyCiB7CiBwdWJsaWM6CiAgIHR5cGVkZWYgbW96aWxsYTo6VGltZVN0YW1wIFRpbWVT
dGFtcDsKICAgdHlwZWRlZiBtb3ppbGxhOjpUaW1lRHVyYXRpb24gVGltZUR1cmF0aW9uOwogICB0
eXBlZGVmIG1vemlsbGE6OmxheWVyczo6SW1hZ2VDb250YWluZXIgSW1hZ2VDb250YWluZXI7CiAg
IHR5cGVkZWYgbW96aWxsYTo6bGF5ZXJzOjpJbWFnZSBJbWFnZTsKKyAgdHlwZWRlZiBtb3ppbGxh
OjpNb25pdG9yIE1vbml0b3I7CiAKICAgbnNNZWRpYURlY29kZXIoKTsKICAgdmlydHVhbCB+bnNN
ZWRpYURlY29kZXIoKTsKIAogICAvLyBDcmVhdGUgYSBuZXcgZGVjb2RlciBvZiB0aGUgc2FtZSB0
eXBlIGFzIHRoaXMgb25lLgogICB2aXJ0dWFsIG5zTWVkaWFEZWNvZGVyKiBDbG9uZSgpID0gMDsK
IAogICAvLyBQZXJmb3JtIGFueSBpbml0aWFsaXphdGlvbiByZXF1aXJlZCBmb3IgdGhlIGRlY29k
ZXIuCkBAIC0yNzEsMjYgKzI3Myw1MCBAQCBwdWJsaWM6CiAgIC8vIHRoZSBlbGVtZW50IGlzIG5v
dCBhIHZpZGVvIGVsZW1lbnQuIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGFueQogICAvLyB0aHJl
YWQ7IEltYWdlQ29udGFpbmVycyBjYW4gYmUgdXNlZCBmcm9tIGFueSB0aHJlYWQuCiAgIEltYWdl
Q29udGFpbmVyKiBHZXRJbWFnZUNvbnRhaW5lcigpIHsgcmV0dXJuIG1JbWFnZUNvbnRhaW5lcjsg
fQogCiAgIC8vIFNldCB0aGUgdmlkZW8gd2lkdGgsIGhlaWdodCwgcGl4ZWwgYXNwZWN0IHJhdGlv
LCBhbmQgY3VycmVudCBpbWFnZS4KICAgLy8gT3duZXJzaGlwIG9mIHRoZSBpbWFnZSBpcyB0cmFu
c2ZlcnJlZCB0byB0aGUgZGVjb2Rlci4KICAgdm9pZCBTZXRWaWRlb0RhdGEoY29uc3QgZ2Z4SW50
U2l6ZSYgYVNpemUsCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFQaXhlbEFzcGVjdFJhdGlv
LAotICAgICAgICAgICAgICAgICAgICBJbWFnZSogYUltYWdlKTsKKyAgICAgICAgICAgICAgICAg
ICAgSW1hZ2UqIGFJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgVGltZVN0YW1wIGFUYXJnZXQp
OwogCiAgIC8vIENvbnN0cnVjdHMgdGhlIHRpbWUgcmFuZ2VzIHJlcHJlc2VudGluZyB3aGF0IHNl
Z21lbnRzIG9mIHRoZSBtZWRpYQogICAvLyBhcmUgYnVmZmVyZWQgYW5kIHBsYXlhYmxlLgogICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEJ1ZmZlcmVkKG5zVGltZVJhbmdlcyogYUJ1ZmZlcmVkKSA9IDA7
CiAKICAgLy8gUmV0dXJucyBQUl9UUlVFIGlmIHdlIGNhbiBwbGF5IHRoZSBlbnRpcmUgbWVkaWEg
dGhyb3VnaCB3aXRob3V0IHN0b3BwaW5nCiAgIC8vIHRvIGJ1ZmZlciwgZ2l2ZW4gdGhlIGN1cnJl
bnQgZG93bmxvYWQgYW5kIHBsYXliYWNrIHJhdGVzLgogICBQUkJvb2wgQ2FuUGxheVRocm91Z2go
KTsKIAorICAvLyBSZXR1cm5zIG51bWJlciBvZiBmcmFtZXMgd2hpY2ggaGF2ZSBiZWVuIHBhcnNl
ZCBmcm9tIHRoZSBtZWRpYS4KKyAgLy8gQ2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLgorICBQ
UlVpbnQzMiBHZXRQYXJzZWRGcmFtZXMoKTsKKworICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg
cGFyc2VkIGZyYW1lcyB3aGljaCBoYXZlIGJlZW4gZGVjb2RlZC4KKyAgLy8gQ2FuIGJlIGNhbGxl
ZCBvbiBhbnkgdGhyZWFkLgorICBQUlVpbnQzMiBHZXREZWNvZGVkRnJhbWVzKCk7CisKKyAgLy8g
UmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlY29kZWQgZnJhbWVzIHdoaWNoIGhhdmUgYmVlbiBzZW50
IHRvIHRoZSByZW5kZXJpbmcKKyAgLy8gcGlwZWxpbmUgZm9yIHBhaW50aW5nICgicHJlc2VudGVk
IikuCisgIC8vIENhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZC4KKyAgUFJVaW50MzIgR2V0UHJl
c2VudGVkRnJhbWVzKCk7CisKKyAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHByZXNlbnRlZCBm
cmFtZXMgd2hpY2ggZW5kZWQgdXAgYmVpbmcgcGFpbnRlZC4KKyAgLy8gQ2FuIGJlIGNhbGxlZCBv
biBhbnkgdGhyZWFkLgorICBQUlVpbnQzMiBHZXRQYWludGVkRnJhbWVzKCk7CisKKyAgLy8gUGxh
eWJhY2sgc3RhdGlzdGljcyBnYXRoZXJpbmcgZnVuY3Rpb25zLiBDYWxsZWQgd2hlbiBmcmFtZXMg
cmVhY2ggdmFyaW91cworICAvLyBzdGFnZXMgdGhyb3VnaCB0aGUgZGVjb2RlL3JlbmRlcmluZyBw
aXBlbGluZS4gQ2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLgorICB2b2lkIE5vdGlmeURlY29k
ZWRGcmFtZXMoUFJVaW50MzIgYVBhcnNlZCwgUFJVaW50MzIgYURlY29kZWQpOworICB2b2lkIE5v
dGlmeVByZXNlbnRlZEZyYW1lKCk7CisgIHZvaWQgTm90aWZ5UGFpbnRlZEZyYW1lKCk7CisKIHBy
b3RlY3RlZDoKIAogICAvLyBTdGFydCB0aW1lciB0byB1cGRhdGUgZG93bmxvYWQgcHJvZ3Jlc3Mg
aW5mb3JtYXRpb24uCiAgIG5zcmVzdWx0IFN0YXJ0UHJvZ3Jlc3MoKTsKIAogICAvLyBTdG9wIHBy
b2dyZXNzIGluZm9ybWF0aW9uIHRpbWVyLgogICBuc3Jlc3VsdCBTdG9wUHJvZ3Jlc3MoKTsKIApA
QCAtMzA3LDE2ICszMzMsMjUgQEAgcHJvdGVjdGVkOgogICAvLyBUaGlzIHNob3VsZCBvbmx5IGV2
ZXIgYmUgYWNjZXNzZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgIC8vIEl0IGlzIHNldCBpbiBJ
bml0IGFuZCBjbGVhcmVkIGluIFNodXRkb3duIHdoZW4gdGhlIGVsZW1lbnQgZ29lcyBhd2F5Lgog
ICAvLyBUaGUgZGVjb2RlciBkb2VzIG5vdCBhZGQgYSByZWZlcmVuY2UgdGhlIGVsZW1lbnQuCiAg
IG5zSFRNTE1lZGlhRWxlbWVudCogbUVsZW1lbnQ7CiAKICAgUFJJbnQzMiBtUkdCV2lkdGg7CiAg
IFBSSW50MzIgbVJHQkhlaWdodDsKIAorICAvLyBNb25pdG9yIHRvIHByb3RlY3QgYWNjZXNzIG9m
IHBsYXliYWNrIHN0YXRpc3RpY3MuCisgIE1vbml0b3IgbVN0YXRzTW9uaXRvcjsKKworICAvLyBQ
bGF5YmFjayBzdGF0aXN0aWNzIGNvdW50ZXJzLiBBY2Nlc3MgcHJvdGVjdGVkIGJ5IG1TdGF0c01v
bml0b3I7CisgIFBSVWludDMyIG1QYXJzZWRGcmFtZXM7CisgIFBSVWludDMyIG1EZWNvZGVkRnJh
bWVzOworICBQUlVpbnQzMiBtUHJlc2VudGVkRnJhbWVzOworICBQUlVpbnQzMiBtUGFpbnRlZEZy
YW1lczsKKyAgCiAgIG5zUmVmUHRyPEltYWdlQ29udGFpbmVyPiBtSW1hZ2VDb250YWluZXI7CiAK
ICAgLy8gVGltZSB0aGF0IHRoZSBsYXN0IHByb2dyZXNzIGV2ZW50IHdhcyBmaXJlZC4gUmVhZC9X
cml0ZSBmcm9tIHRoZQogICAvLyBtYWluIHRocmVhZCBvbmx5LgogICBUaW1lU3RhbXAgbVByb2dy
ZXNzVGltZTsKIAogICAvLyBUaW1lIHRoYXQgZGF0YSB3YXMgbGFzdCByZWFkIGZyb20gdGhlIG1l
ZGlhIHJlc291cmNlLiBVc2VkIGZvcgogICAvLyBjb21wdXRpbmcgaWYgdGhlIGRvd25sb2FkIGhh
cyBzdGFsbGVkIGFuZCB0byByYXRlIGxpbWl0IHByb2dyZXNzIGV2ZW50cwpkaWZmIC0tZ2l0IGEv
Y29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwIGIvY29udGVudC9tZWRpYS9vZ2cvbnNP
Z2dSZWFkZXIuY3BwCi0tLSBhL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmNwcAorKysg
Yi9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRlci5jcHAKQEAgLTI4MiwxNyArMjgyLDE3IEBA
IG5zcmVzdWx0IG5zT2dnUmVhZGVyOjpSZWFkTWV0YWRhdGEoKQogCiAgIC8vIEluaXRpYWxpemUg
dGhlIGZpcnN0IFRoZW9yYSBhbmQgVm9yYmlzIGJpdHN0cmVhbXMuIEFjY29yZGluZyB0byB0aGUK
ICAgLy8gVGhlb3JhIHNwZWMgdGhlc2UgY2FuIGJlIGNvbnNpZGVyZWQgdGhlICdwcmltYXJ5JyBi
aXRzdHJlYW1zIGZvciBwbGF5YmFjay4KICAgLy8gRXh0cmFjdCB0aGUgbWV0YWRhdGEgbmVlZGVk
IGZyb20gdGhlc2Ugc3RyZWFtcy4KICAgLy8gU2V0IGEgZGVmYXVsdCBjYWxsYmFjayBwZXJpb2Qg
Zm9yIGlmIHdlIGhhdmUgbm8gdmlkZW8gZGF0YQogICBpZiAobVRoZW9yYVN0YXRlICYmIG1UaGVv
cmFTdGF0ZS0+SW5pdCgpKSB7CiAgICAgZ2Z4SW50U2l6ZSBzeihtVGhlb3JhU3RhdGUtPm1JbmZv
LnBpY193aWR0aCwKICAgICAgICAgICAgICAgICAgIG1UaGVvcmFTdGF0ZS0+bUluZm8ucGljX2hl
aWdodCk7Ci0gICAgbURlY29kZXItPlNldFZpZGVvRGF0YShzeiwgbVRoZW9yYVN0YXRlLT5tUGl4
ZWxBc3BlY3RSYXRpbywgbnNudWxsKTsKKyAgICBtRGVjb2Rlci0+U2V0VmlkZW9EYXRhKHN6LCBt
VGhlb3JhU3RhdGUtPm1QaXhlbEFzcGVjdFJhdGlvLCBuc251bGwsIFRpbWVTdGFtcDo6Tm93KCkp
OwogICB9CiAgIGlmIChtVm9yYmlzU3RhdGUpIHsKICAgICBtVm9yYmlzU3RhdGUtPkluaXQoKTsK
ICAgfQogCiAgIGlmICghSGFzQXVkaW8oKSAmJiAhSGFzVmlkZW8oKSAmJiBtU2tlbGV0b25TdGF0
ZSkgewogICAgIC8vIFdlIGhhdmUgYSBza2VsZXRvbiB0cmFjaywgYnV0IG5vIGF1ZGlvIG9yIHZp
ZGVvLCBtYXkgYXMgd2VsbCBkaXNhYmxlCiAgICAgLy8gdGhlIHNrZWxldG9uLCB3ZSBjYW4ndCBk
byBhbnl0aGluZyB1c2VmdWwgd2l0aCB0aGlzIG1lZGlhLgpAQCAtNTU5LDE5ICs1NTksMjIgQEAg
bnNyZXN1bHQgbnNPZ2dSZWFkZXI6OkRlY29kZVRoZW9yYShuc1RBcgogICAgIH0KICAgICBpZiAo
IWFGcmFtZXMuQXBwZW5kRWxlbWVudCh2KSkgewogICAgICAgZGVsZXRlIHY7CiAgICAgfQogICB9
CiAgIHJldHVybiBOU19PSzsKIH0KIAotUFJCb29sIG5zT2dnUmVhZGVyOjpEZWNvZGVWaWRlb0Zy
YW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKQorUFJCb29sIG5zT2dnUmVhZGVyOjpEZWNv
ZGVWaWRlb0ZyYW1lKFBSQm9vbCYgYUtleWZyYW1lU2tpcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyJiBhUGFyc2VkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyJiBhRGVjb2RlZCkKIHsKKyAgYVBhcnNlZCA9
IGFEZWNvZGVkID0gMDsKICAgTW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICBOU19B
U1NFUlRJT04obURlY29kZXItPk9uU3RhdGVNYWNoaW5lVGhyZWFkKCkgfHwgbURlY29kZXItPk9u
RGVjb2RlVGhyZWFkKCksCiAgICAgICAgICAgICAgICAiU2hvdWxkIGJlIG9uIHN0YXRlIG1hY2hp
bmUgb3IgQVYgdGhyZWFkLiIpOwogICAvLyBXZSBjaG9zZSB0byBrZWVwIHRyYWNrIG9mIHRoZSBU
aGVvcmEgZ3JhbnVsZXBvcyBvdXJzZWx2ZXMsIHJhdGhlciB0aGFuCiAgIC8vIHJlbHkgb24gdGhf
ZGVjb2RlX3BhY2tldGluKCkgdG8gZG8gaXQgZm9yIHVzLiBUaGlzIGlzIGJlY2F1c2UKICAgLy8g
dGhfZGVjb2RlX3BhY2tldGluKCkgc2ltcGx5IHdvcmtzIGJ5IGluY3JlbWVudGluZyBhIGNvdW50
ZXIgZXZlcnkgdGltZQogICAvLyBpdCdzIGNhbGxlZCwgc28gaWYgd2UgZHJvcCBmcmFtZXMgYW5k
IGRvbid0IGNhbGwgaXQsIHN1YnNlcXVlbnQgZ3JhbnVsZXBvcwogICAvLyB3aWxsIGJlIHdyb25n
LiBXaGVuZXZlciB3ZSByZWFkIGEgcGFja2V0IHdoaWNoIGhhcyBhIGdyYW51bGVwb3MsIHdlIHVz
ZQpAQCAtNTkxLDE2ICs1OTQsMTcgQEAgUFJCb29sIG5zT2dnUmVhZGVyOjpEZWNvZGVWaWRlb0Zy
YW1lKFBSQgogICAgICAgICAvLyBGYWlsZWQgdG8gcmVhZCBhbm90aGVyIHBhZ2UsIG11c3QgYmUg
dGhlIGVuZCBvZiBmaWxlLiBXZSBjYW4ndCBoYXZlCiAgICAgICAgIC8vIGFscmVhZHkgZW5jb3Vu
dGVyZWQgYW4gZW5kIG9mIGJpdHN0cmVhbSBwYWNrZXQsIGVsc2Ugd2Ugd291bGRuJ3QgYmUKICAg
ICAgICAgLy8gaGVyZSwgc28gdGhpcyBiaXRzdHJlYW0gbXVzdCBiZSBtaXNzaW5nIGl0cyBlbmQg
b2Ygc3RyZWFtIHBhY2tldCwgb3IKICAgICAgICAgLy8gaXMgb3RoZXJ3aXNlIGNvcnJ1cHQgKG9n
Z3otY2hvcCBjYW4gb3V0cHV0IGZpbGVzIGxpa2UgdGhpcykuIEluZm9ybQogICAgICAgICAvLyB0
aGUgcXVldWUgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgZnJhbWVzLgogICAgICAgICBtVmlk
ZW9RdWV1ZS5GaW5pc2goKTsKICAgICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgICAgfQorICAg
ICAgYVBhcnNlZCsrOwogCiAgICAgICBpZiAocGFja2V0LmdyYW51bGVwb3MgPiAwKSB7CiAgICAg
ICAgIC8vIFdlJ3ZlIGZvdW5kIGEgcGFja2V0IHdpdGggYSBncmFudWxlcG9zLCB3ZSBjYW4gbm93
IGRldGVybWluZSB0aGUKICAgICAgICAgLy8gYnVmZmVyZWQgcGFja2V0J3MgdGltZXN0YW1wcywg
YXMgd2VsbCBhcyB0aGUgdGltZXN0YW1wcyBmb3IgYW55CiAgICAgICAgIC8vIHBhY2tldHMgd2Ug
cmVhZCBzdWJzZXF1ZW50bHkuCiAgICAgICAgIG1UaGVvcmFHcmFudWxlcG9zID0gcGFja2V0Lmdy
YW51bGVwb3M7CiAgICAgICB9CiAgICAgCkBAIC02NzcsMTYgKzY4MSwxNyBAQCBQUkJvb2wgbnNP
Z2dSZWFkZXI6OkRlY29kZVZpZGVvRnJhbWUoUFJCCiAgICAgTlNfQVNTRVJUSU9OKG1UaGVvcmFH
cmFudWxlcG9zID4gMCwgIldlIG11c3QgVGhlb3JhIGdyYW51bGVwb3MhIik7CiAgICAgCiAgICAg
aWYgKCFSZWFkT2dnUGFja2V0KG1UaGVvcmFTdGF0ZSwgJnBhY2tldCkpIHsKICAgICAgIC8vIEZh
aWxlZCB0byByZWFkIGZyb20gZmlsZSwgc28gRU9GIG9yIG90aGVyIHByZW1hdHVyZSBmYWlsdXJl
LgogICAgICAgLy8gSW5mb3JtIHRoZSBxdWV1ZSB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBm
cmFtZXMuCiAgICAgICBtVmlkZW9RdWV1ZS5GaW5pc2goKTsKICAgICAgIHJldHVybiBQUl9GQUxT
RTsKICAgICB9CisgICAgYVBhcnNlZCsrOwogCiAgICAgZW5kT2ZTdHJlYW0gPSBwYWNrZXQuZV9v
X3MgIT0gMDsKIAogICAgIC8vIE1haW50YWluIHRoZSBUaGVvcmEgZ3JhbnVsZXBvcy4gV2UgbXVz
dCBkbyB0aGlzIGV2ZW4gaWYgd2UgZHJvcCBmcmFtZXMsCiAgICAgLy8gb3RoZXJ3aXNlIG91ciBj
bG9jayB3aWxsIGJlIHdyb25nIGFmdGVyIHdlJ3ZlIHNraXBwZWQgZnJhbWVzLgogICAgIGlmIChw
YWNrZXQuZ3JhbnVsZXBvcyAhPSAtMSkgewogICAgICAgLy8gSW5jb21pbmcgcGFja2V0IGhhcyBh
IGdyYW51bGVwb3MsIHVzZSB0aGF0IGFzIGl0J3MgZ3JhbnVsZXBvcy4KICAgICAgIG1UaGVvcmFH
cmFudWxlcG9zID0gcGFja2V0LmdyYW51bGVwb3M7CkBAIC03MjksMTYgKzczNCwxNyBAQCBQUkJv
b2wgbnNPZ2dSZWFkZXI6OkRlY29kZVZpZGVvRnJhbWUoUFJCCiAgIGZvciAoUFJVaW50MzIgaSA9
IDA7IGkgPCBmcmFtZXMuTGVuZ3RoKCk7IGkrKykgewogICAgIG5zQXV0b1B0cjxWaWRlb0RhdGE+
IGRhdGEoZnJhbWVzW2ldLmZvcmdldCgpKTsKICAgICBpZiAoYUtleWZyYW1lU2tpcCAmJiBkYXRh
LT5tS2V5ZnJhbWUpIHsKICAgICAgIGFLZXlmcmFtZVNraXAgPSBQUl9GQUxTRTsKICAgICB9CiAK
ICAgICBpZiAoIWFLZXlmcmFtZVNraXApIHsKICAgICAgIG1WaWRlb1F1ZXVlLlB1c2goZGF0YS5m
b3JnZXQoKSk7CisgICAgICBhRGVjb2RlZCsrOwogICAgIH0KICAgfQogCiAgIGlmIChlbmRPZlN0
cmVhbSkgewogICAgIC8vIFdlJ3ZlIGVuY291bnRlcmVkIGFuIGVuZCBvZiBiaXRzdHJlYW0gcGFj
a2V0LiBJbmZvcm0gdGhlIHF1ZXVlIHRoYXQKICAgICAvLyB0aGVyZSB3aWxsIGJlIG5vIG1vcmUg
ZnJhbWVzLgogICAgIG1WaWRlb1F1ZXVlLkZpbmlzaCgpOwogICB9CkBAIC0xMTAyLDE3ICsxMTA4
LDE4IEBAIG5zcmVzdWx0IG5zT2dnUmVhZGVyOjpTZWVrSW5CdWZmZXJlZFJhbmcKICAgICByZXR1
cm4gcmVzOwogICB9CiAKICAgLy8gV2UgaGF2ZSBhbiBhY3RpdmUgVGhlb3JhIGJpdHN0cmVhbS4g
RGVjb2RlIHRoZSBuZXh0IFRoZW9yYSBmcmFtZSwgYW5kCiAgIC8vIGV4dHJhY3QgaXRzIGtleWZy
YW1lJ3MgdGltZS4KICAgUFJCb29sIGVvZjsKICAgZG8gewogICAgIFBSQm9vbCBza2lwID0gUFJf
RkFMU0U7Ci0gICAgZW9mID0gIURlY29kZVZpZGVvRnJhbWUoc2tpcCwgMCk7CisgICAgUFJVaW50
MzIgcGFyc2VkLCBkZWNvZGVkOworICAgIGVvZiA9ICFEZWNvZGVWaWRlb0ZyYW1lKHNraXAsIDAs
IHBhcnNlZCwgZGVjb2RlZCk7CiAgICAgewogICAgICAgTW9uaXRvckF1dG9FeGl0IGV4aXRSZWFk
ZXJNb24obU1vbml0b3IpOwogICAgICAgTW9uaXRvckF1dG9FbnRlciBkZWNvZGVyTW9uKG1EZWNv
ZGVyLT5HZXRNb25pdG9yKCkpOwogICAgICAgaWYgKG1EZWNvZGVyLT5HZXREZWNvZGVTdGF0ZSgp
ID09IG5zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmU6OkRFQ09ERVJfU1RBVEVfU0hVVERPV04p
IHsKICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAgICAgICB9CiAgICAgfQogICB9
IHdoaWxlICghZW9mICYmCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRl
ci5oIGIvY29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuaAotLS0gYS9jb250ZW50L21lZGlh
L29nZy9uc09nZ1JlYWRlci5oCisrKyBiL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmgK
QEAgLTYzLDE4ICs2MywyMCBAQCBwdWJsaWM6CiAKICAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5z
QnVpbHRpbkRlY29kZXJSZWFkZXIqIGFDbG9uZURvbm9yKTsKICAgdmlydHVhbCBuc3Jlc3VsdCBS
ZXNldERlY29kZSgpOwogICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVBdWRpb0RhdGEoKTsKIAogICAv
LyBJZiB0aGUgVGhlb3JhIGdyYW51bGVwb3MgaGFzIG5vdCBiZWVuIGNhcHR1cmVkLCBpdCBtYXkg
cmVhZCBzZXZlcmFsIHBhY2tldHMKICAgLy8gdW50aWwgb25lIHdpdGggYSBncmFudWxlcG9zIGhh
cyBiZWVuIGNhcHR1cmVkLCB0byBlbnN1cmUgdGhhdCBhbGwgcGFja2V0cwogICAvLyByZWFkIGhh
dmUgdmFsaWQgdGltZSBpbmZvLiAgCi0gIHZpcnR1YWwgUFJCb29sIERlY29kZVZpZGVvRnJhbWUo
UFJCb29sICZhS2V5ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSSW50NjQgYVRpbWVUaHJlc2hvbGQpOworICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVWaWRlb0Zy
YW1lKFBSQm9vbCYgYUtleWZyYW1lU2tpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSVWludDMyJiBhUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSVWludDMyJiBhRGVjb2RlZCk7CiAKICAgdmlydHVhbCBWaWRlb0RhdGEqIEZpbmRTdGFy
dFRpbWUoUFJJbnQ2NCBhT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUkludDY0JiBhT3V0U3RhcnRUaW1lKTsKIAogICAvLyBHZXQgdGhlIGVuZCB0aW1lIG9mIGFF
bmRPZmZzZXQuIFRoaXMgaXMgdGhlIHBsYXliYWNrIHBvc2l0aW9uIHdlJ2QgcmVhY2gKICAgLy8g
YWZ0ZXIgcGxheWJhY2sgZmluaXNoZWQgYXQgYUVuZE9mZnNldC4KICAgdmlydHVhbCBQUkludDY0
IEZpbmRFbmRUaW1lKFBSSW50NjQgYUVuZE9mZnNldCk7CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
bWVkaWEvcmF3L25zUmF3UmVhZGVyLmNwcCBiL2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVy
LmNwcAotLS0gYS9jb250ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5jcHAKKysrIGIvY29udGVu
dC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuY3BwCkBAIC0xNjMsMTggKzE2MywyMSBAQCBQUkJvb2wg
bnNSYXdSZWFkZXI6OlJlYWRGcm9tU3RyZWFtKG5zTWVkCiAgICAgYUxlbmd0aCAtPSBieXRlc1Jl
YWQ7CiAgICAgYUJ1ZiArPSBieXRlc1JlYWQ7CiAgIH0KIAogICByZXR1cm4gUFJfVFJVRTsKIH0K
IAogUFJCb29sIG5zUmF3UmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1l
U2tpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1l
VGhyZXNob2xkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQg
YVRpbWVUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJV
aW50MzImIGFQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJV
aW50MzImIGFEZWNvZGVkKQogeworICBhUGFyc2VkID0gYURlY29kZWQgPSAwOwogICBtb3ppbGxh
OjpNb25pdG9yQXV0b0VudGVyIGF1dG9FbnRlcihtTW9uaXRvcik7CiAgIE5TX0FTU0VSVElPTiht
RGVjb2Rlci0+T25TdGF0ZU1hY2hpbmVUaHJlYWQoKSB8fCBtRGVjb2Rlci0+T25EZWNvZGVUaHJl
YWQoKSwKICAgICAgICAgICAgICAgICJTaG91bGQgYmUgb24gc3RhdGUgbWFjaGluZSB0aHJlYWQg
b3IgZGVjb2RlIHRocmVhZC4iKTsKIAogICBpZiAoIW1GcmFtZVNpemUpCiAgICAgcmV0dXJuIFBS
X0ZBTFNFOyAvLyBNZXRhZGF0YSByZWFkIGZhaWxlZC4gIFdlIHNob3VsZCByZWZ1c2UgdG8gcGxh
eS4KIAogICBQUkludDY0IGN1cnJlbnRGcmFtZVRpbWUgPSAxMDAwICogbUN1cnJlbnRGcmFtZSAv
IG1GcmFtZVJhdGU7CkBAIC0xOTQsMTYgKzE5NywxOCBAQCBQUkJvb2wgbnNSYXdSZWFkZXI6OkRl
Y29kZVZpZGVvRnJhbWUoUFJCCiAgICAgICAgICEoaGVhZGVyLnBhY2tldElEID09IDB4RkYgJiYg
aGVhZGVyLmNvZGVjSUQgPT0gUkFXX0lEIC8qICJZVVYiICovKSkgewogICAgICAgcmV0dXJuIFBS
X0ZBTFNFOwogICAgIH0KIAogICAgIGlmICghUmVhZEZyb21TdHJlYW0oc3RyZWFtLCBidWZmZXIs
IGxlbmd0aCkpIHsKICAgICAgIHJldHVybiBQUl9GQUxTRTsKICAgICB9CiAKKyAgICBhUGFyc2Vk
Kys7CisKICAgICBpZiAoY3VycmVudEZyYW1lVGltZSA+PSBhVGltZVRocmVzaG9sZCkKICAgICAg
IGJyZWFrOwogCiAgICAgbUN1cnJlbnRGcmFtZSsrOwogICAgIGN1cnJlbnRGcmFtZVRpbWUgKz0g
MTAwMC4wIC8gbUZyYW1lUmF0ZTsKICAgfQogCiAgIFZpZGVvRGF0YTo6WUNiQ3JCdWZmZXIgYjsK
QEAgLTIzMiwxNiArMjM3LDE3IEBAIFBSQm9vbCBuc1Jhd1JlYWRlcjo6RGVjb2RlVmlkZW9GcmFt
ZShQUkIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMSwgLy8gSW4gcmF3IHZpZGVvIGV2ZXJ5IGZyYW1lIGlz
IGEga2V5ZnJhbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwogICBp
ZiAoIXYpCiAgICAgcmV0dXJuIFBSX0ZBTFNFOwogCiAgIG1WaWRlb1F1ZXVlLlB1c2godik7CiAg
IG1DdXJyZW50RnJhbWUrKzsKKyAgYURlY29kZWQrKzsKICAgY3VycmVudEZyYW1lVGltZSArPSAx
MDAwIC8gbUZyYW1lUmF0ZTsKIAogICByZXR1cm4gUFJfVFJVRTsKIH0KIAogbnNyZXN1bHQgbnNS
YXdSZWFkZXI6OlNlZWsoUFJJbnQ2NCBhVGltZSwgUFJJbnQ2NCBhU3RhcnRUaW1lLCBQUkludDY0
IGFFbmRUaW1lLCBQUkludDY0IGFDdXJyZW50VGltZSkKIHsKICAgbW96aWxsYTo6TW9uaXRvckF1
dG9FbnRlciBhdXRvRW50ZXIobU1vbml0b3IpOwpAQCAtMjY0LDE3ICsyNzAsMTggQEAgbnNyZXN1
bHQgbnNSYXdSZWFkZXI6OlNlZWsoUFJJbnQ2NCBhVGltZQogCiAgIG5zcmVzdWx0IHJ2ID0gc3Ry
ZWFtLT5TZWVrKG5zSVNlZWthYmxlU3RyZWFtOjpOU19TRUVLX1NFVCwgb2Zmc2V0KTsKICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBtVmlkZW9RdWV1ZS5FcmFzZSgpOwogCiAgIHdo
aWxlKG1WaWRlb1F1ZXVlLkdldFNpemUoKSA9PSAwKSB7CiAgICAgUFJCb29sIGtleWZyYW1lU2tp
cCA9IFBSX0ZBTFNFOwotICAgIGlmICghRGVjb2RlVmlkZW9GcmFtZShrZXlmcmFtZVNraXAsIDAp
KSB7CisgICAgUFJVaW50MzIgcGFyc2VkLCBkZWNvZGVkOworICAgIGlmICghRGVjb2RlVmlkZW9G
cmFtZShrZXlmcmFtZVNraXAsIDAsIHBhcnNlZCwgZGVjb2RlZCkpIHsKICAgICAgIG1DdXJyZW50
RnJhbWUgPSBmcmFtZTsKICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAog
ICAgIHsKICAgICAgIG1vemlsbGE6Ok1vbml0b3JBdXRvRXhpdCBhdXRvTW9uaXRvckV4aXQobU1v
bml0b3IpOwogICAgICAgbW96aWxsYTo6TW9uaXRvckF1dG9FbnRlciBhdXRvTW9uaXRvcihtRGVj
b2Rlci0+R2V0TW9uaXRvcigpKTsKICAgICAgIGlmIChtRGVjb2Rlci0+R2V0RGVjb2RlU3RhdGUo
KSA9PQpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuaCBiL2NvbnRl
bnQvbWVkaWEvcmF3L25zUmF3UmVhZGVyLmgKLS0tIGEvY29udGVudC9tZWRpYS9yYXcvbnNSYXdS
ZWFkZXIuaAorKysgYi9jb250ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5oCkBAIC05MiwxOCAr
OTIsMjAgQEAgY2xhc3MgbnNSYXdSZWFkZXIgOiBwdWJsaWMgbnNCdWlsdGluRGVjbwogcHVibGlj
OgogICBuc1Jhd1JlYWRlcihuc0J1aWx0aW5EZWNvZGVyKiBhRGVjb2Rlcik7CiAgIH5uc1Jhd1Jl
YWRlcigpOwogCiAgIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0J1aWx0aW5EZWNvZGVyUmVhZGVy
KiBhQ2xvbmVEb25vcik7CiAgIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXREZWNvZGUoKTsKICAgdmly
dHVhbCBQUkJvb2wgRGVjb2RlQXVkaW9EYXRhKCk7CiAKLSAgdmlydHVhbCBQUkJvb2wgRGVjb2Rl
VmlkZW9GcmFtZShQUkJvb2wgJmFLZXlmcmFtZVNraXAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCk7CisgIHZpcnR1YWwgUFJCb29sIERl
Y29kZVZpZGVvRnJhbWUoUFJCb29sJiBhS2V5ZnJhbWVTa2lwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJVaW50MzImIGFQYXJzZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJVaW50MzImIGFEZWNvZGVkKTsKIAogICB2aXJ0dWFsIFBSQm9vbCBI
YXNBdWRpbygpCiAgIHsKICAgICByZXR1cm4gUFJfRkFMU0U7CiAgIH0KIAogICB2aXJ0dWFsIFBS
Qm9vbCBIYXNWaWRlbygpCiAgIHsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dl
Yk1SZWFkZXIuY3BwIGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAKLS0tIGEv
Y29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAKKysrIGIvY29udGVudC9tZWRpYS93
ZWJtL25zV2ViTVJlYWRlci5jcHAKQEAgLTUzOCwxOSArNTM4LDIyIEBAIFBSQm9vbCBuc1dlYk1S
ZWFkZXI6OkRlY29kZUF1ZGlvRGF0YSgpCiAgIGlmICghaG9sZGVyKSB7CiAgICAgbUF1ZGlvUXVl
dWUuRmluaXNoKCk7CiAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICB9CiAKICAgcmV0dXJuIERlY29k
ZUF1ZGlvUGFja2V0KGhvbGRlci0+bVBhY2tldCwgaG9sZGVyLT5tT2Zmc2V0KTsKIH0KIAotUFJC
b29sIG5zV2ViTVJlYWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQUkJvb2wgJmFLZXlmcmFtZVNraXAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJl
c2hvbGQpCitQUkJvb2wgbnNXZWJNUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCYgYUtl
eWZyYW1lU2tpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2
NCBhVGltZVRocmVzaG9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJVaW50MzImIGFQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSVWludDMyJiBhRGVjb2RlZCkKIHsKKyAgYVBhcnNlZCA9IGFEZWNvZGVkID0gMDsKICAgTW9u
aXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICBOU19BU1NFUlRJT04obURlY29kZXItPk9u
U3RhdGVNYWNoaW5lVGhyZWFkKCkgfHwgbURlY29kZXItPk9uRGVjb2RlVGhyZWFkKCksCiAgICAg
ICAgICAgICAgICAiU2hvdWxkIGJlIG9uIHN0YXRlIG1hY2hpbmUgb3IgZGVjb2RlIHRocmVhZC4i
KTsKIAogICBuc0F1dG9SZWY8TmVzdGVnZ1BhY2tldEhvbGRlcj4gaG9sZGVyKE5leHRQYWNrZXQo
VklERU8pKTsKICAgaWYgKCFob2xkZXIpIHsKICAgICBtVmlkZW9RdWV1ZS5GaW5pc2goKTsKICAg
ICByZXR1cm4gUFJfRkFMU0U7CkBAIC02MTEsMzggKzYxNCw0MCBAQCBQUkJvb2wgbnNXZWJNUmVh
ZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSCiAgICAgfQogCiAgICAgdnB4X2NvZGVjX3N0cmVhbV9p
bmZvX3Qgc2k7CiAgICAgbWVtc2V0KCZzaSwgMCwgc2l6ZW9mKHNpKSk7CiAgICAgc2kuc3ogPSBz
aXplb2Yoc2kpOwogICAgIHZweF9jb2RlY19wZWVrX3N0cmVhbV9pbmZvKCZ2cHhfY29kZWNfdnA4
X2R4X2FsZ28sIGRhdGEsIGxlbmd0aCwgJnNpKTsKICAgICBpZiAoKGFLZXlmcmFtZVNraXAgJiYg
IXNpLmlzX2tmKSB8fCAoYUtleWZyYW1lU2tpcCAmJiBzaS5pc19rZiAmJiB0c3RhbXBfbXMgPCBh
VGltZVRocmVzaG9sZCkpIHsKICAgICAgIGFLZXlmcmFtZVNraXAgPSBQUl9UUlVFOworICAgICAg
YVBhcnNlZCsrOyAvLyBBc3N1bWUgMSBmcmFtZSBwZXIgY2h1bmsuCiAgICAgICBicmVhazsKICAg
ICB9CiAKICAgICBpZiAoYUtleWZyYW1lU2tpcCAmJiBzaS5pc19rZikgewogICAgICAgYUtleWZy
YW1lU2tpcCA9IFBSX0ZBTFNFOwogICAgIH0KIAotICAgIGlmKHZweF9jb2RlY19kZWNvZGUoJm1W
UDgsIGRhdGEsIGxlbmd0aCwgTlVMTCwgMCkpIHsKKyAgICBpZiAodnB4X2NvZGVjX2RlY29kZSgm
bVZQOCwgZGF0YSwgbGVuZ3RoLCBOVUxMLCAwKSkgewogICAgICAgcmV0dXJuIFBSX0ZBTFNFOwog
ICAgIH0KIAogICAgIC8vIElmIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHZpZGVvIGZyYW1lIGlzIGxl
c3MgdGhhbgogICAgIC8vIHRoZSB0aW1lIHRocmVzaG9sZCByZXF1aXJlZCB0aGVuIGl0IGlzIG5v
dCBhZGRlZAogICAgIC8vIHRvIHRoZSB2aWRlbyBxdWV1ZSBhbmQgd29uJ3QgYmUgZGlzcGxheWVk
LgogICAgIGlmICh0c3RhbXBfbXMgPCBhVGltZVRocmVzaG9sZCkgeworICAgICAgYVBhcnNlZCsr
OyAvLyBBc3N1bWUgMSBmcmFtZSBwZXIgY2h1bmsuCiAgICAgICBjb250aW51ZTsKICAgICB9CiAK
ICAgICB2cHhfY29kZWNfaXRlcl90ICBpdGVyID0gTlVMTDsKICAgICB2cHhfaW1hZ2VfdCAgICAg
ICppbWc7CiAKLSAgICB3aGlsZSgoaW1nID0gdnB4X2NvZGVjX2dldF9mcmFtZSgmbVZQOCwgJml0
ZXIpKSkgeworICAgIHdoaWxlICgoaW1nID0gdnB4X2NvZGVjX2dldF9mcmFtZSgmbVZQOCwgJml0
ZXIpKSkgewogICAgICAgTlNfQVNTRVJUSU9OKG1JbmZvLm1QaWN0dXJlLndpZHRoID09IHN0YXRp
Y19jYXN0PFBSSW50MzI+KGltZy0+ZF93KSwgCiAgICAgICAgICAgICAgICAgICAgIldlYk0gcGlj
dHVyZSB3aWR0aCBmcm9tIGhlYWRlciBkb2VzIG5vdCBtYXRjaCBkZWNvZGVkIGZyYW1lIik7CiAg
ICAgICBOU19BU1NFUlRJT04obUluZm8ubVBpY3R1cmUuaGVpZ2h0ID09IHN0YXRpY19jYXN0PFBS
SW50MzI+KGltZy0+ZF9oKSwKICAgICAgICAgICAgICAgICAgICAiV2ViTSBwaWN0dXJlIGhlaWdo
dCBmcm9tIGhlYWRlciBkb2VzIG5vdCBtYXRjaCBkZWNvZGVkIGZyYW1lIik7CiAgICAgICBOU19B
U1NFUlRJT04oaW1nLT5mbXQgPT0gSU1HX0ZNVF9JNDIwLCAiV2ViTSBpbWFnZSBmb3JtYXQgaXMg
bm90IEk0MjAiKTsKIAogICAgICAgLy8gQ2hyb21hIHNoaWZ0cyBhcmUgcm91bmRlZCBkb3duIGFz
IHBlciB0aGUgZGVjb2RpbmcgZXhhbXBsZXMgaW4gdGhlIFZQOCBTREsKICAgICAgIFZpZGVvRGF0
YTo6WUNiQ3JCdWZmZXIgYjsKQEAgLTY2NywxNiArNjcyLDIwIEBAIFBSQm9vbCBuc1dlYk1SZWFk
ZXI6OkRlY29kZVZpZGVvRnJhbWUoUFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRzdGFtcF9tcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5leHRfdHN0YW1wIC8gTlNfUEVSX01TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpLmlz
X2tmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwogICAgICAg
aWYgKCF2KSB7CiAgICAgICAgIHJldHVybiBQUl9GQUxTRTsKICAgICAgIH0KKyAgICAgIGFQYXJz
ZWQrKzsKKyAgICAgIGFEZWNvZGVkKys7CisgICAgICBOU19BU1NFUlRJT04oYURlY29kZWQgPD0g
YVBhcnNlZCwKKyAgICAgICAgIkV4cGVjdCBvbmx5IDEgZnJhbWUgcGVyIGNodW5rIHBlciBwYWNr
ZXQgaW4gV2ViTS4uLiIpOwogICAgICAgbVZpZGVvUXVldWUuUHVzaCh2KTsKICAgICB9CiAgIH0K
IAogICByZXR1cm4gUFJfVFJVRTsKIH0KIAogbnNyZXN1bHQgbnNXZWJNUmVhZGVyOjpTZWVrKFBS
SW50NjQgYVRhcmdldCwgUFJJbnQ2NCBhU3RhcnRUaW1lLCBQUkludDY0IGFFbmRUaW1lLApkaWZm
IC0tZ2l0IGEvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5oIGIvY29udGVudC9tZWRp
YS93ZWJtL25zV2ViTVJlYWRlci5oCi0tLSBhL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFk
ZXIuaAorKysgYi9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNUmVhZGVyLmgKQEAgLTEzMywxOCAr
MTMzLDIwIEBAIHB1YmxpYzoKIAogICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNCdWlsdGluRGVj
b2RlclJlYWRlciogYUNsb25lRG9ub3IpOwogICB2aXJ0dWFsIG5zcmVzdWx0IFJlc2V0RGVjb2Rl
KCk7CiAgIHZpcnR1YWwgUFJCb29sIERlY29kZUF1ZGlvRGF0YSgpOwogCiAgIC8vIElmIHRoZSBU
aGVvcmEgZ3JhbnVsZXBvcyBoYXMgbm90IGJlZW4gY2FwdHVyZWQsIGl0IG1heSByZWFkIHNldmVy
YWwgcGFja2V0cwogICAvLyB1bnRpbCBvbmUgd2l0aCBhIGdyYW51bGVwb3MgaGFzIGJlZW4gY2Fw
dHVyZWQsIHRvIGVuc3VyZSB0aGF0IGFsbCBwYWNrZXRzCiAgIC8vIHJlYWQgaGF2ZSB2YWxpZCB0
aW1lIGluZm8uICAKLSAgdmlydHVhbCBQUkJvb2wgRGVjb2RlVmlkZW9GcmFtZShQUkJvb2wgJmFL
ZXlmcmFtZVNraXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBh
VGltZVRocmVzaG9sZCk7CisgIHZpcnR1YWwgUFJCb29sIERlY29kZVZpZGVvRnJhbWUoUFJCb29s
JiBhS2V5ZnJhbWVTa2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50
NjQgYVRpbWVUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJV
aW50MzImIGFQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50
MzImIGFEZWNvZGVkKTsKIAogICB2aXJ0dWFsIFBSQm9vbCBIYXNBdWRpbygpCiAgIHsKICAgICBt
b3ppbGxhOjpNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAgICAgcmV0dXJuIG1IYXNB
dWRpbzsKICAgfQogCiAgIHZpcnR1YWwgUFJCb29sIEhhc1ZpZGVvKCkKZGlmZiAtLWdpdCBhL2Rv
bS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTFZpZGVvRWxlbWVudC5pZGwgYi9kb20vaW50ZXJm
YWNlcy9odG1sL25zSURPTUhUTUxWaWRlb0VsZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2Vz
L2h0bWwvbnNJRE9NSFRNTFZpZGVvRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRt
bC9uc0lET01IVE1MVmlkZW9FbGVtZW50LmlkbApAQCAtNDMsMTggKzQzLDM3IEBACiAgKiA8dmlk
ZW8+IGVsZW1lbnQuCiAgKgogICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBpbnRlcmZh
Y2UsIHBsZWFzZSBzZWUKICAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9j
dXJyZW50LXdvcmsvI3ZpZGVvCiAgKgogICogQHN0YXR1cyBVTkRFUl9ERVZFTE9QTUVOVAogICov
CiAKLVtzY3JpcHRhYmxlLCB1dWlkKGVkZjQ2OGRjLTQyZWItNDQ5NC05MjBiLTU2YTMxNTE3MjY0
MCldCitbc2NyaXB0YWJsZSwgdXVpZChlMWY1MmFhNS05OTYyLTQwMTktYjdiMy1hZjNhZWU2ZTRk
NDgpXQogaW50ZXJmYWNlIG5zSURPTUhUTUxWaWRlb0VsZW1lbnQgOiBuc0lET01IVE1MTWVkaWFF
bGVtZW50CiB7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBsb25nIHdpZHRoOyAKICAgICAgICAgICAg
YXR0cmlidXRlIGxvbmcgaGVpZ2h0OwogICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyB2aWRlb1dpZHRoOwogICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB2aWRlb0hl
aWdodDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBwb3N0ZXI7CisgICAgICAgICAg
IAorICAvLyBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdmlkZW8gZnJhbWVzIHRoYXQgaGF2ZSBk
ZW11eGVkIGZyb20gdGhlIG1lZGlhCisgIC8vIHJlc291cmNlLiBJZiB3ZSB3ZXJlIHBsYXlpbmcg
cGVyZmVjdGx5LCB3ZSdkIGJlIGFibGUgdG8gcGFpbnQgdGhpcyBtYW55CisgIC8vIGZyYW1lcy4K
KyAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbW96UGFyc2VkRnJhbWVzOworCisg
IC8vIEEgY291bnQgb2YgdGhlIG51bWJlciBvZiBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gZGVjb2Rl
ZC4gV2UgbWF5IGRyb3AKKyAgLy8gZnJhbWVzIGlmIHRoZSBkZWNvZGUgaXMgdGFraW5nIHRvbyBt
dWNoIHRpbWUuCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG1vekRlY29kZWRG
cmFtZXM7CisKKyAgLy8gQSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IGhhdmUg
YmVlbiBwcmVzZW50ZWQgdG8gdGhlIHJlbmRlcmluZworICAvLyBwaXBlbGluZS4gV2UgbWF5IGRy
b3AgZnJhbWVzIGlmIHRoZXkgYXJyaXZlIGxhdGUgYXQgdGhlIHJlbmRlcmVyLgorICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBtb3pQcmVzZW50ZWRGcmFtZXM7CisgIAorICAvLyBO
dW1iZXIgb2YgcHJlc2VudGVkIGZyYW1lcyB3aGljaCB3ZXJlIGRyYXduIG9uIHNjcmVlbi4KKyAg
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbW96UGFpbnRlZEZyYW1lczsKKyAgCisg
IC8vIFRpbWUgd2hpY2ggdGhlIGxhc3QgcGFpbnRlZCB2aWRlbyBmcmFtZSB3YXMgbGF0ZSBieSwg
aW4gc2Vjb25kcy4KKyAgcmVhZG9ubHkgYXR0cmlidXRlIGZsb2F0IG1vekZyYW1lRGVsYXk7CiB9
OwogCmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL0ltYWdlTGF5ZXJzLmggYi9nZngvbGF5ZXJzL0lt
YWdlTGF5ZXJzLmgKLS0tIGEvZ2Z4L2xheWVycy9JbWFnZUxheWVycy5oCisrKyBiL2dmeC9sYXll
cnMvSW1hZ2VMYXllcnMuaApAQCAtMzQsMTkgKzM0LDIxIEBACiAgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoKICAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpZm5kZWYgR0ZYX0lNQUdFTEFZRVJfSAogI2RlZmlu
ZSBHRlhfSU1BR0VMQVlFUl9ICiAKICNpbmNsdWRlICJMYXllcnMuaCIKKyNpbmNsdWRlICJtb3pp
bGxhL01vbml0b3IuaCIKIAogI2luY2x1ZGUgImdmeFBhdHRlcm4uaCIKICNpbmNsdWRlICJuc1Ro
cmVhZFV0aWxzLmgiCisjaW5jbHVkZSAibW96aWxsYS9UaW1lU3RhbXAuaCIKIAogbmFtZXNwYWNl
IG1vemlsbGEgewogbmFtZXNwYWNlIGxheWVycyB7CiAKIC8qKgogICogQSBjbGFzcyByZXByZXNl
bnRpbmcgYSBidWZmZXIgb2YgcGl4ZWwgZGF0YS4gVGhlIGRhdGEgY2FuIGJlIGluIG9uZQogICog
b2YgdmFyaW91cyBmb3JtYXRzIGluY2x1ZGluZyBZQ2JDci4KICAqIApAQCAtMTA4LDE4ICsxMTAs
MjAgQEAgcHJvdGVjdGVkOgogICogd2UgbmVlZCBhIHNlcGFyYXRlIGNsYXNzIGhlcmUgaXMgdGhh
dCBJbWFnZUxheWVycyBhcmVuJ3QgdGhyZWFkc2FmZQogICogKGJlY2F1c2UgbGF5ZXJzIGNhbiBv
bmx5IGJlIHVzZWQgb24gdGhlIG1haW4gdGhyZWFkKSBhbmQgd2Ugd2FudCB0bwogICogYmUgYWJs
ZSB0byBzZXQgdGhlIGN1cnJlbnQgSW1hZ2UgZnJvbSBhbnkgdGhyZWFkLCB0byBmYWNpbGl0YXRl
CiAgKiB2aWRlbyBwbGF5YmFjayB3aXRob3V0IGludm9sdmluZyB0aGUgbWFpbiB0aHJlYWQsIGZv
ciBleGFtcGxlLgogICovCiBjbGFzcyBUSEVCRVNfQVBJIEltYWdlQ29udGFpbmVyIHsKICAgVEhF
QkVTX0lOTElORV9ERUNMX1RIUkVBRFNBRkVfUkVGQ09VTlRJTkcoSW1hZ2VDb250YWluZXIpCiAK
KyAgdHlwZWRlZiBtb3ppbGxhOjpNb25pdG9yIE1vbml0b3I7CisKIHB1YmxpYzoKLSAgSW1hZ2VD
b250YWluZXIoKSB7fQorICBJbWFnZUNvbnRhaW5lcigpIDogbVRpbWVNb25pdG9yKCJJbWFnZUNv
bnRhaW5lciIpLCBtSW1hZ2VQYWludGVkKFBSX0ZBTFNFKSB7fQogICB2aXJ0dWFsIH5JbWFnZUNv
bnRhaW5lcigpIHt9CiAKICAgLyoqCiAgICAqIENyZWF0ZSBhbiBJbWFnZSBpbiBvbmUgb2YgdGhl
IGdpdmVuIGZvcm1hdHMuCiAgICAqIFBpY2tzIHRoZSAiYmVzdCIgZm9ybWF0IGZyb20gdGhlIGxp
c3QgYW5kIGNyZWF0ZXMgYW4gSW1hZ2Ugb2YgdGhhdAogICAgKiBmb3JtYXQuCiAgICAqIFJldHVy
bnMgbnVsbCBpZiB0aGlzIGJhY2tlbmQgZG9lcyBub3Qgc3VwcG9ydCBhbnkgb2YgdGhlIGZvcm1h
dHMuCiAgICAqLwpAQCAtMTgyLDIwICsxODYsNjYgQEAgcHVibGljOgogCiAgIC8qKgogICAgKiBT
ZXRzIGEgc2l6ZSB0aGF0IHRoZSBpbWFnZSBpcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBhdC4K
ICAgICogVGhpcyBpcyBhIGhpbnQgZm9yIGltYWdlIGJhY2tlbmRzIHRvIG9wdGltaXplIHNjYWxp
bmcuCiAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBjbGFzcyBpcyB0byBpZ25v
cmUgdGhlIGhpbnQuCiAgICAqLwogICB2aXJ0dWFsIHZvaWQgU2V0U2NhbGVIaW50KGNvbnN0IGdm
eEludFNpemUmIC8qIGFTY2FsZUhpbnQgKi8pIHsgfQogCisgIC8qKgorICAgKiBSZXR1cm5zIHRo
ZSBkdXJhdGlvbiB3aGljaCB0aGUgcGFpbnQgd2FzIGxhdGUgYnksIGlmIGEgcGFpbnQgdGFyZ2V0
CisgICAqIHdhcyBzcGVjaWZpZWQuCisgICAqLworICBUaW1lRHVyYXRpb24gR2V0UGFpbnREZWxh
eSgpOworCisgIC8qKgorICAgKiBOb3RpZmllcyB0aGUgSW1hZ2VMYXllciB0aGF0IGl0J3MgYmVl
biBwYWludGVkLCBzbyBpdCBjYW4gY2FsY3VsYXRlCisgICAqIHRoZSBkZWxheSBiZXR3ZWVuIHRo
ZSB0YXJnZXQgcGFpbnQgdGltZSwgYW5kIHRoZSBhY2hpZXZlZCBwYWludCB0aW1lLgorICAgKi8K
KyAgdm9pZCBOb3RpZnlQYWludGVkKFRpbWVTdGFtcCBhUGFpbnRUaW1lKTsKKworICAvKioKKyAg
ICogU2V0cyB0aGUgdGltZSBhdCB3aGljaCB3ZSdkIGxpa2UgdGhlIGNvbnRhaW5lZCB0byBiZSBp
bWFnZSBwYWludGVkLgorICAgKi8KKyAgdm9pZCBTZXRQYWludFRhcmdldChUaW1lU3RhbXAgYVRp
bWUpOworCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSB0YXJnZXQgdGltZSBhdCB3aGljaCB3ZSdk
IGxpa2UgdGhlIGNvbnRhaW5lZCBpbWFnZQorICAgKiB0byBiZSBwYWludGVkLCBhcyBwcmV2aW91
c2x5IHNldCBieSBTZXRQYWludFRhcmdldCgpLgorICAgKi8KKyAgVGltZVN0YW1wIEdldFBhaW50
VGFyZ2V0KCk7CisKIHByb3RlY3RlZDoKICAgTGF5ZXJNYW5hZ2VyKiBtTWFuYWdlcjsKIAotICBJ
bWFnZUNvbnRhaW5lcihMYXllck1hbmFnZXIqIGFNYW5hZ2VyKSA6IG1NYW5hZ2VyKGFNYW5hZ2Vy
KSB7fQorICAvKioKKyAgICogUHJvdGVjdHMgYWNjZXMgdG8gbVRhcmdldFRpbWUsIG1EZWxheSwg
YW5kIG1JbWFnZVBhaW50ZWQuCisgICAqLworICBNb25pdG9yIG1UaW1lTW9uaXRvcjsKKworICAv
KioKKyAgICogVGltZSBhdCB3aGljaCB3ZSBhaW0gdG8gcGFpbnQgdGhlIGltYWdlLiBTZXQgYnkg
U2V0UGFpbnRUYXJnZXQoKS4gVGhpcworICAgKiBpcyB0eXBpY2FsbHkgc2V0IG9uIHZpZGVvIGZy
YW1lcyBpbiB0aGUgdmlkZW8gZGVjb2Rlci4KKyAgICovCisgIFRpbWVTdGFtcCBtVGFyZ2V0VGlt
ZTsKKworICAvKioKKyAgICogRHVyYXRpb24gYnkgd2hpY2ggdGhlIHBhaW50IHdhcyBsYXRlIGJ5
LiBUaGlzIGlzIG9ubHkgdmFsaWQgaWYgYSB0YXJnZXQKKyAgICogcGFpbnQgdGltZSB3YXMgc3Bl
Y2lmaWVkLCBhbmQgaWYgdGhlIGltYWdlIGhhcyBhY3R1YWxseSBiZWVuIHBhaW50ZWQuCisgICAq
LworICBUaW1lRHVyYXRpb24gbURlbGF5OworCisgIC8qKgorICAgKiBTZXQgdG8gUFJfVFJVRSBp
ZiB0aGUgY3VycmVudGx5IGNvbnRhaW5lZCBpbWFnZSBoYXMgYmVlbiBwYWludGVkIGF0CisgICAq
IGxlYXN0IG9uY2UuCisgICAqLworICBQUkJvb2wgbUltYWdlUGFpbnRlZDsKKworICBJbWFnZUNv
bnRhaW5lcihMYXllck1hbmFnZXIqIGFNYW5hZ2VyKSA6IG1NYW5hZ2VyKGFNYW5hZ2VyKSwgbVRp
bWVNb25pdG9yKCJJbWFnZUNvbnRhaW5lciIpIHt9CiB9OwogCiAvKioKICAqIEEgTGF5ZXIgd2hp
Y2ggcmVuZGVycyBhbiBJbWFnZS4KICAqLwogY2xhc3MgVEhFQkVTX0FQSSBJbWFnZUxheWVyIDog
cHVibGljIExheWVyIHsKIHB1YmxpYzoKICAgLyoqCmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL0xh
eWVycy5jcHAgYi9nZngvbGF5ZXJzL0xheWVycy5jcHAKLS0tIGEvZ2Z4L2xheWVycy9MYXllcnMu
Y3BwCisrKyBiL2dmeC9sYXllcnMvTGF5ZXJzLmNwcApAQCAtMTgwLDE2ICsxODAsMzcgQEAgbmFt
ZXNwYWNlIGxheWVycyB7CiBhbHJlYWR5X0FkZFJlZmVkPGdmeEFTdXJmYWNlPgogTGF5ZXJNYW5h
Z2VyOjpDcmVhdGVPcHRpbWFsU3VyZmFjZShjb25zdCBnZnhJbnRTaXplICZhU2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z4QVN1cmZhY2U6OmdmeEltYWdlRm9ybWF0
IGFGb3JtYXQpCiB7CiAgIHJldHVybiBnZnhQbGF0Zm9ybTo6R2V0UGxhdGZvcm0oKS0+CiAgICAg
Q3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShhU2l6ZSwgZ2Z4QVN1cmZhY2U6OkNvbnRlbnRGcm9tRm9y
bWF0KGFGb3JtYXQpKTsKIH0KIAorc3RhdGljIHZvaWQgTm90aWZ5UGFpbnRlZChMYXllciogYUxh
eWVyLCBUaW1lU3RhbXAgYVRpbWVTdGFtcCkgeworICBOU19BU1NFUlRJT04oYUxheWVyLCAiTXVz
dCBoYXZlIHNwZWNpZmllZCBhIG5vbi1udWxsIGxheWVyIik7CisgIE5TX0FTU0VSVElPTighYVRp
bWVTdGFtcC5Jc051bGwoKSwgIk11c3QgaGF2ZSBhIHZhbGlkIHRpbWVzdGFtcCIpOworICBpZiAo
YUxheWVyLT5HZXRUeXBlKCkgPT0gTGF5ZXI6OlRZUEVfSU1BR0UpIHsKKyAgICBJbWFnZUxheWVy
KiBpbWdMYXllciA9IHN0YXRpY19jYXN0PEltYWdlTGF5ZXIqPihhTGF5ZXIpOworICAgIEltYWdl
Q29udGFpbmVyKiBjb250YWluZXIgPSBpbWdMYXllci0+R2V0Q29udGFpbmVyKCk7CisgICAgY29u
dGFpbmVyLT5Ob3RpZnlQYWludGVkKGFUaW1lU3RhbXApOworICB9CisgIExheWVyKiBjaGlsZCA9
IGFMYXllci0+R2V0Rmlyc3RDaGlsZCgpOworICBmb3IgKDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
PkdldE5leHRTaWJsaW5nKCkpIHsKKyAgICBOb3RpZnlQYWludGVkKGNoaWxkLCBhVGltZVN0YW1w
KTsKKyAgfQorfQorCit2b2lkCitMYXllck1hbmFnZXI6Ok5vdGlmeVBhaW50ZWQoKQoreworICBp
ZiAobVJvb3QpCisgICAgOjpOb3RpZnlQYWludGVkKG1Sb290LCBUaW1lU3RhbXA6Ok5vdygpKTsK
K30KKwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogLy8gTGF5ZXIKIAogUFJCb29sCiBMYXllcjo6Q2FuVXNlT3BhcXVlU3VyZmFjZSgpCiB7CiAg
IC8vIElmIHRoZSB2aXNpYmxlIGNvbnRlbnQgaW4gdGhlIGxheWVyIGlzIG9wYXF1ZSwgdGhlcmUg
aXMgbm8gbmVlZAogICAvLyBmb3IgYW4gYWxwaGEgY2hhbm5lbC4KQEAgLTY0NCwxMCArNjY1LDM4
IEBAIExheWVyTWFuYWdlcjo6UHJpbnRJbmZvKG5zQUNTdHJpbmcmIGFUbywKIAogLypzdGF0aWMq
LyB2b2lkIExheWVyTWFuYWdlcjo6SW5pdExvZygpIHt9CiAvKnN0YXRpYyovIGJvb2wgTGF5ZXJN
YW5hZ2VyOjpJc0xvZ0VuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQogCiAjZW5kaWYgLy8gTU9a
X0xBWUVSU19IQVZFX0xPRwogCiBQUkxvZ01vZHVsZUluZm8qIExheWVyTWFuYWdlcjo6c0xvZzsK
IAorVGltZUR1cmF0aW9uIEltYWdlQ29udGFpbmVyOjpHZXRQYWludERlbGF5KCkgeworICBNb25p
dG9yQXV0b0VudGVyIG1vbihtVGltZU1vbml0b3IpOworICByZXR1cm4gbURlbGF5OworfQorCit2
b2lkIEltYWdlQ29udGFpbmVyOjpOb3RpZnlQYWludGVkKFRpbWVTdGFtcCBhUGFpbnRUaW1lKSB7
CisgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1UaW1lTW9uaXRvcik7CisgIGlmIChtSW1hZ2VQYWlu
dGVkIHx8IG1UYXJnZXRUaW1lLklzTnVsbCgpIHx8IG1UYXJnZXRUaW1lID4gYVBhaW50VGltZSkK
KyAgICByZXR1cm47CisgIG1EZWxheSA9IGFQYWludFRpbWUgLSBtVGFyZ2V0VGltZTsKKyAgLy8g
UmVtZW1iZXIgdGhhdCB3ZSd2ZSBwYWludGVkIHRoaXMgaW1hZ2UsIHNvIHRoYXQgd2Ugd29uJ3Qg
cmVjYWxjdWxhdGUKKyAgLy8gYW5kIGFzc3VtZSBhIGxhcmdlciBkZWxheSBpZiB3ZSBwYWludCB0
aGlzIGltYWdlIGFnYWluLgorICBtSW1hZ2VQYWludGVkID0gUFJfVFJVRTsKK30KKworVGltZVN0
YW1wIEltYWdlQ29udGFpbmVyOjpHZXRQYWludFRhcmdldCgpIHsKKyAgTW9uaXRvckF1dG9FbnRl
ciBtb24obVRpbWVNb25pdG9yKTsKKyAgcmV0dXJuIG1UYXJnZXRUaW1lOworfQorCit2b2lkIElt
YWdlQ29udGFpbmVyOjpTZXRQYWludFRhcmdldChUaW1lU3RhbXAgYVRpbWUpIHsKKyAgTW9uaXRv
ckF1dG9FbnRlciBtb24obVRpbWVNb25pdG9yKTsKKyAgbVRhcmdldFRpbWUgPSBhVGltZTsKKyAg
Ly8gUmVzZXQgb3VyICJoYXMgYmVlbiBwYWludGVkIiBmbGFnLCBzbyB3ZSBrbm93IHRvIHJlY2Fs
Y3VsYXRlIHRoZSBwYWludAorICAvLyBkZWxheSB0aGUgZmlyc3QgdGltZSB0aGlzIGZyYW1lIGlz
IHBhaW50ZWQuCisgIG1JbWFnZVBhaW50ZWQgPSBQUl9GQUxTRTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgbGF5ZXJzIAogfSAvLyBuYW1lc3BhY2UgbW96aWxsYQpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVy
cy9MYXllcnMuaCBiL2dmeC9sYXllcnMvTGF5ZXJzLmgKLS0tIGEvZ2Z4L2xheWVycy9MYXllcnMu
aAorKysgYi9nZngvbGF5ZXJzL0xheWVycy5oCkBAIC00MTgsMTYgKzQxOCwyMyBAQCBwdWJsaWM6
CiAgICAqIExvZyBpbmZvcm1hdGlvbiBhYm91dCBqdXN0IHRoaXMgbGF5ZXIgbWFuYWdlciBpdHNl
bGYgdG8gdGhlIE5TUFIKICAgICogbG9nIChpZiBlbmFibGVkIGZvciAiTGF5ZXJzIikuCiAgICAq
LwogICB2b2lkIExvZ1NlbGYoY29uc3QgY2hhciogYVByZWZpeD0iIik7CiAKICAgc3RhdGljIGJv
b2wgSXNMb2dFbmFibGVkKCk7CiAgIHN0YXRpYyBQUkxvZ01vZHVsZUluZm8qIEdldExvZygpIHsg
cmV0dXJuIHNMb2c7IH0KIAorICAvKioKKyAgICogTm90aWZpZXMgYWxsIEltYWdlTGF5ZXJzIGlu
IHRoZSBsYXllciB0cmVlIHRoYXQgdGhleSd2ZSBiZWVuIHBhaW50ZWQsIHNvCisgICAqIHRoYXQg
dGhleSBjYW4gcmVjb3JkIHBhaW50LWRlbGF5IHN0YXRpc3RpY3MuIENhbGwgdGhpcyBhdCB0aGUg
ZW5kIG9mIGV2ZXJ5CisgICAqIEVuZFRyYW5zYWN0aW9uKCkgaW1wbGVtZW50YXRpb24uCisgICAq
LworICB2b2lkIE5vdGlmeVBhaW50ZWQoKTsKKwogcHJvdGVjdGVkOgogICBuc1JlZlB0cjxMYXll
cj4gbVJvb3Q7CiAgIExheWVyVXNlckRhdGFTZXQgbVVzZXJEYXRhOwogICBQUlBhY2tlZEJvb2wg
bURlc3Ryb3llZDsKICAgUFJQYWNrZWRCb29sIG1TbmFwRWZmZWN0aXZlVHJhbnNmb3JtczsKIAog
ICAvLyBQcmludCBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGludG8gYVRvLiAg
SW50ZXJuYWxseQogICAvLyB1c2VkIHRvIGltcGxlbWVudCBEdW1wKigpIGFuZCBMb2cqKCkuCmRp
ZmYgLS1naXQgYS9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljTGF5ZXJzLmNwcCBiL2dmeC9sYXllcnMv
YmFzaWMvQmFzaWNMYXllcnMuY3BwCi0tLSBhL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNMYXllcnMu
Y3BwCisrKyBiL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNMYXllcnMuY3BwCkBAIC0xMjMwLDE2ICsx
MjMwLDE4IEBAIEJhc2ljTGF5ZXJNYW5hZ2VyOjpFbmRUcmFuc2FjdGlvbihEcmF3VGgKICAgICBp
ZiAodXNlRG91YmxlQnVmZmVyaW5nKSB7CiAgICAgICBmaW5hbFRhcmdldC0+U2V0T3BlcmF0b3Io
Z2Z4Q29udGV4dDo6T1BFUkFUT1JfU09VUkNFKTsKICAgICAgIFBvcEdyb3VwV2l0aENhY2hlZFN1
cmZhY2UoZmluYWxUYXJnZXQsIGNhY2hlZFN1cmZhY2VPZmZzZXQpOwogICAgIH0KIAogICAgIG1U
YXJnZXQgPSBuc251bGw7CiAgIH0KIAorICBOb3RpZnlQYWludGVkKCk7CisKICNpZmRlZiBNT1pf
TEFZRVJTX0hBVkVfTE9HCiAgIExvZygpOwogICBNT1pfTEFZRVJTX0xPRygoIl0tLS0tLSBFbmRU
cmFuc2FjdGlvbiIpKTsKICNlbmRpZgogCiAjaWZkZWYgREVCVUcKICAgbVBoYXNlID0gUEhBU0Vf
Tk9ORTsKICNlbmRpZgpAQCAtMjU4MCwxNiArMjU4MiwxOCBAQCBCYXNpY1NoYWRvd0xheWVyTWFu
YWdlcjo6RW5kVHJhbnNhY3Rpb24oCiAgICAgICBkZWZhdWx0OgogICAgICAgICBOU19SVU5USU1F
QUJPUlQoIm5vdCByZWFjaGVkIik7CiAgICAgICB9CiAgICAgfQogICB9IGVsc2UgaWYgKEhhc1No
YWRvd01hbmFnZXIoKSkgewogICAgIE5TX1dBUk5JTkcoImZhaWxlZCB0byBmb3J3YXJkIExheWVy
cyB0cmFuc2FjdGlvbiIpOwogICB9CiAKKyAgTm90aWZ5UGFpbnRlZCgpOworCiAjaWZkZWYgREVC
VUcKICAgbVBoYXNlID0gUEhBU0VfTk9ORTsKICNlbmRpZgogCiAgIC8vIHRoaXMgbWF5IHJlc3Vs
dCBpbiBMYXllcnMgYmVpbmcgZGVsZXRlZCwgd2hpY2ggcmVzdWx0cyBpbgogICAvLyBQTGF5ZXI6
OlNlbmRfX2RlbGV0ZV9fKCkgYW5kIERlYWxsb2NTaG1lbSgpCiAgIG1LZWVwQWxpdmUuQ2xlYXIo
KTsKIH0KZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNkMTAvTGF5ZXJNYW5hZ2VyRDNEMTAuY3Bw
IGIvZ2Z4L2xheWVycy9kM2QxMC9MYXllck1hbmFnZXJEM0QxMC5jcHAKLS0tIGEvZ2Z4L2xheWVy
cy9kM2QxMC9MYXllck1hbmFnZXJEM0QxMC5jcHAKKysrIGIvZ2Z4L2xheWVycy9kM2QxMC9MYXll
ck1hbmFnZXJEM0QxMC5jcHAKQEAgLTI0MCwxNiArMjQwLDE3IEBAIExheWVyTWFuYWdlckQzRDEw
OjpFbmRUcmFuc2FjdGlvbihEcmF3VGgKICAgLy8gVGhlIHJlc3VsdHMgb2Ygb3VyIGRyYXdpbmcg
YWx3YXlzIGdvIGRpcmVjdGx5IGludG8gYSBwaXhlbCBidWZmZXIsCiAgIC8vIHNvIHdlIGRvbid0
IG5lZWQgdG8gcGFzcyBhbnkgZ2xvYmFsIHRyYW5zZm9ybSBoZXJlLgogICBtUm9vdC0+Q29tcHV0
ZUVmZmVjdGl2ZVRyYW5zZm9ybXMoZ2Z4M0RNYXRyaXgoKSk7CiAKICAgUmVuZGVyKCk7CiAgIG1D
dXJyZW50Q2FsbGJhY2tJbmZvLkNhbGxiYWNrID0gbnNudWxsOwogICBtQ3VycmVudENhbGxiYWNr
SW5mby5DYWxsYmFja0RhdGEgPSBuc251bGw7CiAgIG1UYXJnZXQgPSBuc251bGw7CisgIE5vdGlm
eVBhaW50ZWQoKTsKIH0KIAogYWxyZWFkeV9BZGRSZWZlZDxUaGViZXNMYXllcj4KIExheWVyTWFu
YWdlckQzRDEwOjpDcmVhdGVUaGViZXNMYXllcigpCiB7CiAgIG5zUmVmUHRyPFRoZWJlc0xheWVy
PiBsYXllciA9IG5ldyBUaGViZXNMYXllckQzRDEwKHRoaXMpOwogICByZXR1cm4gbGF5ZXIuZm9y
Z2V0KCk7CiB9CmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL2QzZDkvTGF5ZXJNYW5hZ2VyRDNEOS5j
cHAgYi9nZngvbGF5ZXJzL2QzZDkvTGF5ZXJNYW5hZ2VyRDNEOS5jcHAKLS0tIGEvZ2Z4L2xheWVy
cy9kM2Q5L0xheWVyTWFuYWdlckQzRDkuY3BwCisrKyBiL2dmeC9sYXllcnMvZDNkOS9MYXllck1h
bmFnZXJEM0Q5LmNwcApAQCAtMTYxLDE2ICsxNjEsMTggQEAgTGF5ZXJNYW5hZ2VyRDNEOTo6RW5k
VHJhbnNhY3Rpb24oRHJhd1RoZQogICBtUm9vdC0+Q29tcHV0ZUVmZmVjdGl2ZVRyYW5zZm9ybXMo
Z2Z4M0RNYXRyaXgoKSk7CiAKICAgUmVuZGVyKCk7CiAgIC8qIENsZWFuIHRoaXMgb3V0IGZvciBz
YW5pdHkgKi8KICAgbUN1cnJlbnRDYWxsYmFja0luZm8uQ2FsbGJhY2sgPSBOVUxMOwogICBtQ3Vy
cmVudENhbGxiYWNrSW5mby5DYWxsYmFja0RhdGEgPSBOVUxMOwogICAvLyBDbGVhciBtVGFyZ2V0
LCBuZXh0IHRyYW5zYWN0aW9uIGNvdWxkIGhhdmUgbm8gdGFyZ2V0CiAgIG1UYXJnZXQgPSBOVUxM
OworCisgIE5vdGlmeVBhaW50ZWQoKTsKIH0KIAogdm9pZAogTGF5ZXJNYW5hZ2VyRDNEOTo6U2V0
Um9vdChMYXllciAqYUxheWVyKQogewogICBtUm9vdCA9IGFMYXllcjsKIH0KIApkaWZmIC0tZ2l0
IGEvZ2Z4L2xheWVycy9vcGVuZ2wvTGF5ZXJNYW5hZ2VyT0dMLmNwcCBiL2dmeC9sYXllcnMvb3Bl
bmdsL0xheWVyTWFuYWdlck9HTC5jcHAKLS0tIGEvZ2Z4L2xheWVycy9vcGVuZ2wvTGF5ZXJNYW5h
Z2VyT0dMLmNwcAorKysgYi9nZngvbGF5ZXJzL29wZW5nbC9MYXllck1hbmFnZXJPR0wuY3BwCkBA
IC00MTYsMTYgKzQxNiwxOCBAQCBMYXllck1hbmFnZXJPR0w6OkVuZFRyYW5zYWN0aW9uKERyYXdU
aGViCiAgICAgUmVuZGVyKCk7CiAgIH0KIAogICBtVGhlYmVzTGF5ZXJDYWxsYmFjayA9IG5zbnVs
bDsKICAgbVRoZWJlc0xheWVyQ2FsbGJhY2tEYXRhID0gbnNudWxsOwogCiAgIG1UYXJnZXQgPSBO
VUxMOwogCisgIE5vdGlmeVBhaW50ZWQoKTsKKwogI2lmZGVmIE1PWl9MQVlFUlNfSEFWRV9MT0cK
ICAgTG9nKCk7CiAgIE1PWl9MQVlFUlNfTE9HKCgiXS0tLS0tIEVuZFRyYW5zYWN0aW9uIikpOwog
I2VuZGlmCiB9CiAKIGFscmVhZHlfQWRkUmVmZWQ8VGhlYmVzTGF5ZXI+CiBMYXllck1hbmFnZXJP
R0w6OkNyZWF0ZVRoZWJlc0xheWVyKCkKZGlmZiAtLWdpdCBhL2xheW91dC9nZW5lcmljL25zVmlk
ZW9GcmFtZS5jcHAgYi9sYXlvdXQvZ2VuZXJpYy9uc1ZpZGVvRnJhbWUuY3BwCi0tLSBhL2xheW91
dC9nZW5lcmljL25zVmlkZW9GcmFtZS5jcHAKKysrIGIvbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0Zy
YW1lLmNwcApAQCAtMjY2LDE2ICsyNjYsMjkgQEAgbnNWaWRlb0ZyYW1lOjpCdWlsZExheWVyKG5z
RGlzcGxheUxpc3RCdQogCiAgIGxheWVyLT5TZXRDb250YWluZXIoY29udGFpbmVyKTsKICAgbGF5
ZXItPlNldEZpbHRlcihuc0xheW91dFV0aWxzOjpHZXRHcmFwaGljc0ZpbHRlckZvckZyYW1lKHRo
aXMpKTsKICAgLy8gU2V0IGEgdHJhbnNmb3JtIG9uIHRoZSBsYXllciB0byBkcmF3IHRoZSB2aWRl
byBpbiB0aGUgcmlnaHQgcGxhY2UKICAgZ2Z4TWF0cml4IHRyYW5zZm9ybTsKICAgdHJhbnNmb3Jt
LlRyYW5zbGF0ZShyLnBvcyk7CiAgIHRyYW5zZm9ybS5TY2FsZShyLldpZHRoKCkvZnJhbWVTaXpl
LndpZHRoLCByLkhlaWdodCgpL2ZyYW1lU2l6ZS5oZWlnaHQpOwogICBsYXllci0+U2V0VHJhbnNm
b3JtKGdmeDNETWF0cml4OjpGcm9tMkQodHJhbnNmb3JtKSk7CisKKyAgaWYgKEhhc1ZpZGVvRWxl
bWVudCgpKSB7CisgICAgVGltZVN0YW1wIHRhcmdldCA9IGNvbnRhaW5lci0+R2V0UGFpbnRUYXJn
ZXQoKTsKKyAgICBpZiAoIXRhcmdldC5Jc051bGwoKSAmJgorICAgICAgICAobUxhc3RQYWludGVk
VGFyZ2V0LklzTnVsbCgpIHx8IHRhcmdldCAhPSBtTGFzdFBhaW50ZWRUYXJnZXQpKQorICAgIHsK
KyAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgcGFpbnRlZCB0aGlzIGZyYW1l
LCBjb3VudCBpdC4KKyAgICAgIG1MYXN0UGFpbnRlZFRhcmdldCA9IHRhcmdldDsKKyAgICAgIG5z
SFRNTFZpZGVvRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PG5zSFRNTFZpZGVvRWxlbWVu
dCo+KEdldENvbnRlbnQoKSk7CisgICAgICBlbGVtZW50LT5Ob3RpZnlQYWludGVkRnJhbWUoKTsK
KyAgICB9CisgIH0KKwogICBuc1JlZlB0cjxMYXllcj4gcmVzdWx0ID0gbGF5ZXIuZm9yZ2V0KCk7
CiAgIHJldHVybiByZXN1bHQuZm9yZ2V0KCk7CiB9CiAKIE5TX0lNRVRIT0RJTVAKIG5zVmlkZW9G
cmFtZTo6UmVmbG93KG5zUHJlc0NvbnRleHQqICAgICAgICAgICBhUHJlc0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiAgICAgYU1ldHJpY3MsCiAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxvd1N0YXRlLApk
aWZmIC0tZ2l0IGEvbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmggYi9sYXlvdXQvZ2VuZXJp
Yy9uc1ZpZGVvRnJhbWUuaAotLS0gYS9sYXlvdXQvZ2VuZXJpYy9uc1ZpZGVvRnJhbWUuaAorKysg
Yi9sYXlvdXQvZ2VuZXJpYy9uc1ZpZGVvRnJhbWUuaApAQCAtNTYsMTYgKzU2LDE3IEBAIGNsYXNz
IG5zRGlzcGxheUl0ZW07CiAKIG5zSUZyYW1lKiBOU19OZXdWaWRlb0ZyYW1lIChuc0lQcmVzU2hl
bGwqIGFQcmVzU2hlbGwsIG5zU3R5bGVDb250ZXh0KiBhQ29udGV4dCk7CiAKIGNsYXNzIG5zVmlk
ZW9GcmFtZSA6IHB1YmxpYyBuc0NvbnRhaW5lckZyYW1lLCBwdWJsaWMgbnNJQW5vbnltb3VzQ29u
dGVudENyZWF0b3IKIHsKIHB1YmxpYzoKICAgdHlwZWRlZiBtb3ppbGxhOjpsYXllcnM6OkxheWVy
IExheWVyOwogICB0eXBlZGVmIG1vemlsbGE6OmxheWVyczo6TGF5ZXJNYW5hZ2VyIExheWVyTWFu
YWdlcjsKKyAgdHlwZWRlZiBtb3ppbGxhOjpUaW1lU3RhbXAgVGltZVN0YW1wOwogCiAgIG5zVmlk
ZW9GcmFtZShuc1N0eWxlQ29udGV4dCogYUNvbnRleHQpOwogCiAgIE5TX0RFQ0xfUVVFUllGUkFN
RQogICBOU19ERUNMX0ZSQU1FQVJFTkFfSEVMUEVSUwogCiAgIE5TX0lNRVRIT0QgQnVpbGREaXNw
bGF5TGlzdChuc0Rpc3BsYXlMaXN0QnVpbGRlciogICBhQnVpbGRlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgICAgICAgICAgIGFEaXJ0eVJlY3QsCkBAIC0x
NDEsMTEgKzE0MiwxNCBAQCBwcm90ZWN0ZWQ6CiAKICAgbnNNYXJnaW4gbUJvcmRlclBhZGRpbmc7
CiAgIAogICAvLyBBbm9ueW1vdXMgY2hpbGQgd2hpY2ggaXMgYm91bmQgdmlhIFhCTCB0byB0aGUg
dmlkZW8gY29udHJvbHMuCiAgIG5zQ09NUHRyPG5zSUNvbnRlbnQ+IG1WaWRlb0NvbnRyb2xzOwog
ICAKICAgLy8gQW5vbnltb3VzIGNoaWxkIHdoaWNoIGlzIHRoZSBpbWFnZSBlbGVtZW50IG9mIHRo
ZSBwb3N0ZXIgZnJhbWUuCiAgIG5zQ09NUHRyPG5zSUNvbnRlbnQ+IG1Qb3N0ZXJJbWFnZTsKKwor
ICAvLyBUYXJnZXQgdGltZXN0YW1wIG9mIHRoZSBsYXN0IGZyYW1lIHdlIHBhaW50ZWQuCisgIFRp
bWVTdGFtcCBtTGFzdFBhaW50ZWRUYXJnZXQ7CiB9OwogCiAjZW5kaWYgLyogbnNWaWRlb0ZyYW1l
X2hfX18gKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>496254</attachid>
            <date>2010-12-08 13:25:49 -0800</date>
            <delta_ts>2011-02-23 14:35:11 -0800</delta_ts>
            <desc>Patch v2 2/3: Reduce paint delay in video playback</desc>
            <filename>580531-delay.patch</filename>
            <type>text/plain</type>
            <size>3122</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgM2MzYjc3ZWE5ZWQ5MjNjMDA3N2IwOGY0ZjliOWQyYWI1Mzg4NmQ2YQpC
dWcgNTgwNTMxIC0gUmVkdWNlIHBhaW50IGRlbGF5IGluIHZpZGVvIHBsYXliYWNrLiByPT8gYT0/
CgpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5l
LmNwcCBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5jcHAKLS0t
IGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lLmNwcAorKysgYi9j
b250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUuY3BwCkBAIC0xMjg2LDM1
ICsxMjg2LDQ1IEBAIHZvaWQgbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZTo6QWR2YW4KICAg
ICAgICAgbVJlYWRlci0+bVZpZGVvUXVldWUuUG9wRnJvbnQoKTsKICAgICAgICAgbURlY29kZXIt
PlVwZGF0ZVBsYXliYWNrT2Zmc2V0KGRhdGEtPm1PZmZzZXQpOwogICAgICAgICBpZiAobVJlYWRl
ci0+bVZpZGVvUXVldWUuR2V0U2l6ZSgpID09IDApCiAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRhdGEgPSBtUmVhZGVyLT5tVmlkZW9RdWV1ZS5QZWVrRnJvbnQoKTsKICAgICAgIH0KICAgICB9
CiAKLSAgICBQUkludDY0IGZyYW1lRHVyYXRpb24gPSBBVURJT19EVVJBVElPTl9NUzsKKyAgICAv
LyBUaGUgdGltZXN0YW1wIG9mIHRoZSBuZXh0IGZyYW1lIHRvIGJlIGRpc3BsYXllZC4KKyAgICBU
aW1lU3RhbXAgbmV4dEZyYW1lVGltZTsKKwogICAgIGlmICh2aWRlb0RhdGEpIHsKICAgICAgIC8v
IERpc3BsYXkgdGhlIG5leHQgZnJhbWUuCiAgICAgICBOU19BU1NFUlRJT04odmlkZW9EYXRhLT5t
VGltZSA+PSBtU3RhcnRUaW1lLAogICAgICAgICAgICAgICAgICAgICJTaG91bGQgaGF2ZSBwb3Np
dGl2ZSBmcmFtZSB0aW1lIik7CiAKICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc3lzdGVtLWNsb2Nr
IHRpbWUgYXQgd2hpY2ggdGhlIGZyYW1lIHNob3VsZCBzdGFydCBiZWluZyBkaXNwbGF5ZWQuCiAg
ICAgICBUaW1lU3RhbXAgcHJlc1RpbWUgPSBtUGxheVN0YXJ0VGltZSAtIG1QbGF5RHVyYXRpb24g
KwogICAgICAgICBUaW1lRHVyYXRpb246OkZyb21NaWxsaXNlY29uZHModmlkZW9EYXRhLT5tVGlt
ZSAtIG1TdGFydFRpbWUpOwogCisgICAgICAvLyBGcmFtZSBlbmQgc3lzdGVtLWNsb2NrIHRpbWUu
CisgICAgICBuZXh0RnJhbWVUaW1lID0gbVBsYXlTdGFydFRpbWUgLSBtUGxheUR1cmF0aW9uICsK
KyAgICAgICAgVGltZUR1cmF0aW9uOjpGcm9tTWlsbGlzZWNvbmRzKHZpZGVvRGF0YS0+bUVuZFRp
bWUgLSBtU3RhcnRUaW1lKTsKKwogICAgICAgTlNfQVNTRVJUSU9OKHByZXNUaW1lIDw9IFRpbWVT
dGFtcDo6Tm93KCksCiAgICAgICAgICAgICAgICAgICAgIkZyYW1lIG11c3Qgc3RhcnQgYmVmb3Jl
IG9yIGF0IG5vdyIpOwogICAgICAgewogICAgICAgICBNb25pdG9yQXV0b0V4aXQgZXhpdE1vbiht
RGVjb2Rlci0+R2V0TW9uaXRvcigpKTsKICAgICAgICAgUmVuZGVyVmlkZW9GcmFtZSh2aWRlb0Rh
dGEsIHByZXNUaW1lKTsKICAgICAgIH0KICAgICAgIG1EZWNvZGVyLT5Ob3RpZnlQcmVzZW50ZWRG
cmFtZSgpOwotICAgICAgZnJhbWVEdXJhdGlvbiA9IHZpZGVvRGF0YS0+bUVuZFRpbWUgLSB2aWRl
b0RhdGEtPm1UaW1lOworCiAgICAgICB2aWRlb0RhdGEgPSBuc251bGw7CisgICAgfSBlbHNlIHsK
KyAgICAgIC8vIFdlIGRvbid0IGhhdmUgdmlkZW8sIGp1c3QgYXNzdW1lIGFuIGFyYml0cmFyeSAi
ZnJhbWUiIGR1cmF0aW9uLgorICAgICAgbmV4dEZyYW1lVGltZSA9CisgICAgICAgIFRpbWVTdGFt
cDo6Tm93KCkgKyBUaW1lRHVyYXRpb246OkZyb21NaWxsaXNlY29uZHMoQVVESU9fRFVSQVRJT05f
TVMpOwogICAgIH0KIAogICAgIC8vIEtpY2sgdGhlIGRlY29kZSB0aHJlYWQgaW4gY2FzZSBpdCBm
aWxsZWQgaXRzIGJ1ZmZlcnMgYW5kIHB1dCBpdHNlbGYKICAgICAvLyB0byBzbGVlcC4KICAgICBt
RGVjb2Rlci0+R2V0TW9uaXRvcigpLk5vdGlmeUFsbCgpOwogCiAgICAgLy8gQ2FwIHRoZSBjdXJy
ZW50IHRpbWUgdG8gdGhlIGxhcmdlciBvZiB0aGUgYXVkaW8gYW5kIHZpZGVvIGVuZCB0aW1lLgog
ICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGlmIHdlJ3JlIHJ1bm5pbmcgb2ZmIHRoZSBzeXN0ZW0g
Y2xvY2ssIHdlIGRvbid0CkBAIC0xMzMyLDE4ICsxMzQyLDIyIEBAIHZvaWQgbnNCdWlsdGluRGVj
b2RlclN0YXRlTWFjaGluZTo6QWR2YW4KICAgICB9CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9m
IGF1ZGlvL3ZpZGVvIHNhbXBsZXMgcXVldWVkIGhhcyBjaGFuZ2VkLCBlaXRoZXIgYnkKICAgICAv
LyB0aGlzIGZ1bmN0aW9uIHBvcHBpbmcgYW5kIHBsYXlpbmcgYSB2aWRlbyBzYW1wbGUsIG9yIGJ5
IHRoZSBhdWRpbwogICAgIC8vIHRocmVhZCBwb3BwaW5nIGFuZCBwbGF5aW5nIGFuIGF1ZGlvIHNh
bXBsZSwgd2UgbWF5IG5lZWQgdG8gdXBkYXRlIG91cgogICAgIC8vIHJlYWR5IHN0YXRlLiBQb3N0
IGFuIHVwZGF0ZSB0byBkbyBzby4KICAgICBVcGRhdGVSZWFkeVN0YXRlKCk7CiAKLSAgICBOU19B
U1NFUlRJT04oZnJhbWVEdXJhdGlvbiA+PSAwLCAiRnJhbWUgZHVyYXRpb24gbXVzdCBiZSBwb3Np
dGl2ZS4iKTsKLSAgICBXYWl0KGZyYW1lRHVyYXRpb24pOworICAgIC8vIFdhaXQgdW50aWwgaXQn
cyBhYm91dCB0aW1lIHRvIGRpc3BsYXkgdGhlIG5leHQgZnJhbWUuCisgICAgVGltZVN0YW1wIG5v
dyA9IFRpbWVTdGFtcDo6Tm93KCk7CisgICAgaWYgKG5vdyA8IG5leHRGcmFtZVRpbWUpIHsKKyAg
ICAgIFdhaXQoKG5leHRGcmFtZVRpbWUgLSBub3cpLlRvTWlsbGlzZWNvbmRzKCkpOworICAgIH0K
KwogICB9IGVsc2UgewogICAgIGlmIChJc1BsYXlpbmcoKSkgewogICAgICAgU3RvcFBsYXliYWNr
KEFVRElPX1BBVVNFKTsKICAgICAgIG1EZWNvZGVyLT5HZXRNb25pdG9yKCkuTm90aWZ5QWxsKCk7
CiAgICAgfQogCiAgICAgaWYgKG1TdGF0ZSA9PSBERUNPREVSX1NUQVRFX0RFQ09ESU5HIHx8CiAg
ICAgICAgIG1TdGF0ZSA9PSBERUNPREVSX1NUQVRFX0NPTVBMRVRFRCkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>496258</attachid>
            <date>2010-12-08 13:29:34 -0800</date>
            <delta_ts>2011-02-28 17:47:51 -0800</delta_ts>
            <desc>Patch v2 3/3: Handle multiple frames per chunk per packet in WebM playback statistics.</desc>
            <filename>580531-webmreader-chunking.patch</filename>
            <type>text/plain</type>
            <size>1156</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgMTBmYzJhN2IwOGMzY2IyNjFiMmQwNjg3Njc1YWVkMmVhMTU3YThmMwpC
dWcgNTgwNTMxIC0gSGFuZGxlIG11bHRpcGxlIGZyYW1lcyBwZXIgY2h1bmsgcGVyIHBhY2tldCBp
biBXZWJNIHBsYXliYWNrIHN0YXRpc3RpY3MuIHI9PyBhPT8KCmRpZmYgLS1naXQgYS9jb250ZW50
L21lZGlhL3dlYm0vbnNXZWJNUmVhZGVyLmNwcCBiL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1S
ZWFkZXIuY3BwCi0tLSBhL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuY3BwCisrKyBi
L2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuY3BwCkBAIC02MTIsMjAgKzYxMiwyMCBA
QCBQUkJvb2wgbnNXZWJNUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSCiAgICAgaWYgKHIgPT0g
LTEpIHsKICAgICAgIHJldHVybiBQUl9GQUxTRTsKICAgICB9CiAKICAgICB2cHhfY29kZWNfc3Ry
ZWFtX2luZm9fdCBzaTsKICAgICBtZW1zZXQoJnNpLCAwLCBzaXplb2Yoc2kpKTsKICAgICBzaS5z
eiA9IHNpemVvZihzaSk7CiAgICAgdnB4X2NvZGVjX3BlZWtfc3RyZWFtX2luZm8oJnZweF9jb2Rl
Y192cDhfZHhfYWxnbywgZGF0YSwgbGVuZ3RoLCAmc2kpOwotICAgIGlmICgoYUtleWZyYW1lU2tp
cCAmJiAhc2kuaXNfa2YpIHx8IChhS2V5ZnJhbWVTa2lwICYmIHNpLmlzX2tmICYmIHRzdGFtcF9t
cyA8IGFUaW1lVGhyZXNob2xkKSkgewotICAgICAgYUtleWZyYW1lU2tpcCA9IFBSX1RSVUU7Cisg
ICAgaWYgKGFLZXlmcmFtZVNraXAgJiYgKCFzaS5pc19rZiB8fCB0c3RhbXBfbXMgPCBhVGltZVRo
cmVzaG9sZCkpIHsKKyAgICAgIC8vIFNraXBwaW5nIHRvIG5leHQga2V5ZnJhbWUuLi4KICAgICAg
IGFQYXJzZWQrKzsgLy8gQXNzdW1lIDEgZnJhbWUgcGVyIGNodW5rLgotICAgICAgYnJlYWs7Cisg
ICAgICBjb250aW51ZTsKICAgICB9CiAKICAgICBpZiAoYUtleWZyYW1lU2tpcCAmJiBzaS5pc19r
ZikgewogICAgICAgYUtleWZyYW1lU2tpcCA9IFBSX0ZBTFNFOwogICAgIH0KIAogICAgIGlmICh2
cHhfY29kZWNfZGVjb2RlKCZtVlA4LCBkYXRhLCBsZW5ndGgsIE5VTEwsIDApKSB7CiAgICAgICBy
ZXR1cm4gUFJfRkFMU0U7Cg==
</data>
<flag name="review"
          id="415942"
          type_id="937"
          status="+"
          setter="kinetik"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>514667</attachid>
            <date>2011-02-23 16:53:26 -0800</date>
            <delta_ts>2011-02-27 13:13:23 -0800</delta_ts>
            <desc>Patch 1: Demuxing/decoding stats</desc>
            <filename>580531-stats.patch</filename>
            <type>text/plain</type>
            <size>28361</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4sIENocmlzIERvdWJsZSA8Y2hyaXMuZG91YmxlQGRvdWJsZS5jby5uej4KIyBQYXJlbnQg
NjIyNTc3ODVkYzcwOTk5NDU4ZGZiMzg0YTUxMmQwMjNiMDQ3NmVmOApCdWcgNTgwNTMxIC0gQWRk
IHZpZGVvIGRlbXV4aW5nL2RlY29kaW5nIHN0YXRzLiByPT8KCmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MVmlkZW9FbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC0xNzgsOCArMTc4LDMxIEBAIG5zcmVzdWx0
IG5zSFRNTFZpZGVvRWxlbWVudDo6U2V0QWNjZXB0SGUKICAgICAgICAgImF1ZGlvLyo7cT0wLjYs
Ki8qO3E9MC41Iik7CiAKICAgICByZXR1cm4gYUNoYW5uZWwtPlNldFJlcXVlc3RIZWFkZXIoTlNf
TElURVJBTF9DU1RSSU5HKCJBY2NlcHQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
X0ZBTFNFKTsKIH0KIAogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxWaWRlb0VsZW1lbnQsIFBvc3Rl
ciwgcG9zdGVyKQorCisvKiByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBtb3pEZWNv
ZGVkRnJhbWVzOyAqLworTlNfSU1FVEhPRElNUCBuc0hUTUxWaWRlb0VsZW1lbnQ6OkdldE1velBh
cnNlZEZyYW1lcyhQUlVpbnQzMiAqYU1vekRlY29kZWRGcmFtZXMpCit7CisgIE5TX0FTU0VSVElP
TihOU19Jc01haW5UaHJlYWQoKSwgIlNob3VsZCBiZSBvbiBtYWluIHRocmVhZC4iKTsKKyAgKmFN
b3pEZWNvZGVkRnJhbWVzID0gbURlY29kZXIgPyBtRGVjb2Rlci0+R2V0UGFyc2VkRnJhbWVzKCkg
OiAwOworICByZXR1cm4gTlNfT0s7Cit9CisKKy8qIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIG1vekRyb3BwZWRGcmFtZXM7ICovCitOU19JTUVUSE9ESU1QIG5zSFRNTFZpZGVvRWxl
bWVudDo6R2V0TW96RGVjb2RlZEZyYW1lcyhQUlVpbnQzMiAqYU1vekRyb3BwZWRGcmFtZXMpCit7
CisgIE5TX0FTU0VSVElPTihOU19Jc01haW5UaHJlYWQoKSwgIlNob3VsZCBiZSBvbiBtYWluIHRo
cmVhZC4iKTsKKyAgKmFNb3pEcm9wcGVkRnJhbWVzID0gbURlY29kZXIgPyBtRGVjb2Rlci0+R2V0
RGVjb2RlZEZyYW1lcygpIDogMDsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1Q
IG5zSFRNTFZpZGVvRWxlbWVudDo6R2V0TW96UHJlc2VudGVkRnJhbWVzKFBSVWludDMyICphTW96
RHJvcHBlZEZyYW1lcykKK3sKKyAgTlNfQVNTRVJUSU9OKE5TX0lzTWFpblRocmVhZCgpLCAiU2hv
dWxkIGJlIG9uIG1haW4gdGhyZWFkLiIpOworICAqYU1vekRyb3BwZWRGcmFtZXMgPSBtRGVjb2Rl
ciA/IG1EZWNvZGVyLT5HZXRQcmVzZW50ZWRGcmFtZXMoKSA6IDA7CisgIHJldHVybiBOU19PSzsK
K30KZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5jcHAg
Yi9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuY3BwCi0tLSBhL2NvbnRlbnQv
bWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5jcHAKKysrIGIvY29udGVudC9tZWRpYS9uc0J1
aWx0aW5EZWNvZGVyUmVhZGVyLmNwcApAQCAtMzczLDE3ICszNzMsMTggQEAgbnNyZXN1bHQgbnNC
dWlsdGluRGVjb2RlclJlYWRlcjo6RGVjb2RlVAogewogICAvLyBEZWNvZGUgZm9yd2FyZCB0byB0
aGUgdGFyZ2V0IGZyYW1lLiBTdGFydCB3aXRoIHZpZGVvLCBpZiB3ZSBoYXZlIGl0LgogICBpZiAo
SGFzVmlkZW8oKSkgewogICAgIFBSQm9vbCBlb2YgPSBQUl9GQUxTRTsKICAgICBQUkludDY0IHN0
YXJ0VGltZSA9IC0xOwogICAgIHdoaWxlIChIYXNWaWRlbygpICYmICFlb2YpIHsKICAgICAgIHdo
aWxlIChtVmlkZW9RdWV1ZS5HZXRTaXplKCkgPT0gMCAmJiAhZW9mKSB7CiAgICAgICAgIFBSQm9v
bCBza2lwID0gUFJfRkFMU0U7Ci0gICAgICAgIGVvZiA9ICFEZWNvZGVWaWRlb0ZyYW1lKHNraXAs
IDApOworICAgICAgICBQUlVpbnQzMiBwYXJzZWQ9MCwgZGVjb2RlZD0wOworICAgICAgICBlb2Yg
PSAhRGVjb2RlVmlkZW9GcmFtZShza2lwLCAwLCBwYXJzZWQsIGRlY29kZWQpOwogICAgICAgICB7
CiAgICAgICAgICAgTW9uaXRvckF1dG9FeGl0IGV4aXRSZWFkZXJNb24obU1vbml0b3IpOwogICAg
ICAgICAgIE1vbml0b3JBdXRvRW50ZXIgZGVjb2Rlck1vbihtRGVjb2Rlci0+R2V0TW9uaXRvcigp
KTsKICAgICAgICAgICBpZiAobURlY29kZXItPkdldERlY29kZVN0YXRlKCkgPT0gbnNCdWlsdGlu
RGVjb2RlclN0YXRlTWFjaGluZTo6REVDT0RFUl9TVEFURV9TSFVURE9XTikgewogICAgICAgICAg
ICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICB9CmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJSZWFkZXIuaCBi
L2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5oCi0tLSBhL2NvbnRlbnQvbWVk
aWEvbnNCdWlsdGluRGVjb2RlclJlYWRlci5oCisrKyBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGlu
RGVjb2RlclJlYWRlci5oCkBAIC00NjIsMTggKzQ2MiwyMCBAQCBwdWJsaWM6CiAgIC8vIGluIG1B
dWRpb1F1ZXVlLiBSZXR1cm5zIFBSX1RSVUUgd2hlbiB0aGVyZSdzIG1vcmUgYXVkaW8gdG8gZGVj
b2RlLAogICAvLyBQUl9GQUxTRSBpZiB0aGUgYXVkaW8gaXMgZmluaXNoZWQsIGVuZCBvZiBmaWxl
IGhhcyBiZWVuIHJlYWNoZWQsCiAgIC8vIG9yIGFuIHVuLXJlY292ZXJhYmxlIHJlYWQgZXJyb3Ig
aGFzIG9jY3VyZWQuCiAgIHZpcnR1YWwgUFJCb29sIERlY29kZUF1ZGlvRGF0YSgpID0gMDsKIAog
ICAvLyBSZWFkcyBhbmQgZGVjb2RlcyBvbmUgdmlkZW8gZnJhbWUuIFBhY2tldHMgd2l0aCBhIHRp
bWVzdGFtcCBsZXNzCiAgIC8vIHRoYW4gYVRpbWVUaHJlc2hvbGQgd2lsbCBiZSBkZWNvZGVkICh1
bmxlc3MgdGhleSdyZSBub3Qga2V5ZnJhbWVzCiAgIC8vIGFuZCBhS2V5ZnJhbWVTa2lwIGlzIFBS
X1RSVUUpLCBidXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIHF1ZXVlLgotICB2aXJ0dWFsIFBS
Qm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKSA9IDA7CisgIHZp
cnR1YWwgUFJCb29sIERlY29kZVZpZGVvRnJhbWUoUFJCb29sJiBhS2V5ZnJhbWVTa2lwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzImIGFQYXJzZWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzImIGFEZWNvZGVkKSA9IDA7CiAK
ICAgdmlydHVhbCBQUkJvb2wgSGFzQXVkaW8oKSA9IDA7CiAgIHZpcnR1YWwgUFJCb29sIEhhc1Zp
ZGVvKCkgPSAwOwogCiAgIC8vIFJlYWQgaGVhZGVyIGRhdGEgZm9yIGFsbCBiaXRzdHJlYW1zIGlu
IHRoZSBmaWxlLiBGaWxscyBtSW5mbyB3aXRoCiAgIC8vIHRoZSBkYXRhIHJlcXVpcmVkIHRvIHBy
ZXNlbnQgdGhlIG1lZGlhLiBSZXR1cm5zIE5TX09LIG9uIHN1Y2Nlc3MsCiAgIC8vIG9yIE5TX0VS
Uk9SX0ZBSUxVUkUgb24gZmFpbHVyZS4KICAgdmlydHVhbCBuc3Jlc3VsdCBSZWFkTWV0YWRhdGEo
KSA9IDA7CkBAIC01MzMsMTcgKzUzNSwyMCBAQCBwcm90ZWN0ZWQ6CiAgIHRlbXBsYXRlPGNsYXNz
IERhdGE+CiAgIERhdGEqIERlY29kZVRvRmlyc3REYXRhKERlY29kZUZuIGFEZWNvZGVGbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFRdWV1ZTxEYXRhPiYgYVF1ZXVlKTsKIAogICAv
LyBXcmFwcGVyIHNvIHRoYXQgRGVjb2RlVmlkZW9GcmFtZShQUkJvb2wmLFBSSW50NjQpIGNhbiBi
ZSBjYWxsZWQgZnJvbQogICAvLyBEZWNvZGVUb0ZpcnN0RGF0YSgpLgogICBQUkJvb2wgRGVjb2Rl
VmlkZW9GcmFtZSgpIHsKICAgICBQUkJvb2wgZiA9IFBSX0ZBTFNFOwotICAgIHJldHVybiBEZWNv
ZGVWaWRlb0ZyYW1lKGYsIDApOworICAgIC8vIElnbm9yZSBwYXJzZWQvZGVjb2RlZCBzdGF0cywg
YXMgRGVjb2RlVmlkZW9GcmFtZSgpIGlzIG9ubHkgY2FsbGVkCisgICAgLy8gZHVyaW5nIHNlZWtp
bmcsIHNvIHRoZXNlIGFyZW4ndCByZWxldmFudCB0byBwbGF5YmFjayBwZXJmb3JtYW5jZS4KKyAg
ICBQUlVpbnQzMiBwYXJzZWQ9MCwgZGVjb2RlZD0wOworICAgIHJldHVybiBEZWNvZGVWaWRlb0Zy
YW1lKGYsIDAsIHBhcnNlZCwgZGVjb2RlZCk7CiAgIH0KIAogICAvLyBGaWxscyBhUmFuZ2VzIHdp
dGggQnl0ZVJhbmdlcyBkZW5vdGluZyB0aGUgc2VjdGlvbnMgb2YgdGhlIG1lZGlhIHdoaWNoCiAg
IC8vIGhhdmUgYmVlbiBkb3dubG9hZGVkIGFuZCBhcmUgc3RvcmVkIGluIHRoZSBtZWRpYSBjYWNo
ZS4gVGhlIHJlYWRlcgogICAvLyBtb25pdG9yIG11c3QgbXVzdCBiZSBoZWxkIHdpdGggZXhhY3Rs
eSBvbmUgbG9jayBjb3VudC4gVGhlIG5zTWVkaWFTdHJlYW0KICAgLy8gbXVzdCBiZSBwaW5uZWQg
d2hpbGUgY2FsbGluZyB0aGlzLgogICBuc3Jlc3VsdCBHZXRCdWZmZXJlZEJ5dGVzKG5zVEFycmF5
PEJ5dGVSYW5nZT4mIGFSYW5nZXMpOwogCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zQnVp
bHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUuY3BwIGIvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNv
ZGVyU3RhdGVNYWNoaW5lLmNwcAotLS0gYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJT
dGF0ZU1hY2hpbmUuY3BwCisrKyBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRl
TWFjaGluZS5jcHAKQEAgLTI3OCw0MyArMjc4LDUwIEBAIHZvaWQgbnNCdWlsdGluRGVjb2RlclN0
YXRlTWFjaGluZTo6RGVjb2QKICAgICAgICAgICAgdmlkZW9QbGF5aW5nICYmCiAgICAgICAgICAg
IHN0YXRpY19jYXN0PFBSVWludDMyPih2aWRlb1F1ZXVlLkdldFNpemUoKSkgPCBMT1dfVklERU9f
RlJBTUVTKSkpCiAgICAgewogICAgICAgc2tpcFRvTmV4dEtleWZyYW1lID0gUFJfVFJVRTsKICAg
ICAgIExPRyhQUl9MT0dfREVCVUcsICgiU2tpcHBpbmcgdmlkZW8gZGVjb2RlIHRvIHRoZSBuZXh0
IGtleWZyYW1lIikpOwogICAgIH0KIAogICAgIC8vIFZpZGVvIGRlY29kZS4KKyAgICBQUlVpbnQz
MiBwYXJzZWQgPSAwLCBkZWNvZGVkID0gMDsKICAgICBpZiAodmlkZW9QbGF5aW5nICYmCiAgICAg
ICAgIHN0YXRpY19jYXN0PFBSVWludDMyPih2aWRlb1F1ZXVlLkdldFNpemUoKSkgPCBBTVBMRV9W
SURFT19GUkFNRVMpCiAgICAgewogICAgICAgLy8gVGltZSB0aGUgdmlkZW8gZGVjb2RlLCBzbyB0
aGF0IGlmIGl0J3Mgc2xvdywgd2UgY2FuIGluY3JlYXNlIG91ciBsb3cKICAgICAgIC8vIGF1ZGlv
IHRocmVzaG9sZCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBhbiBhdWRpbyB1bmRlcnJ1biB3aGls
ZSB3ZSdyZQogICAgICAgLy8gd2FpdGluZyBmb3IgYSB2aWRlbyBkZWNvZGUgdG8gY29tcGxldGUu
CiAgICAgICBUaW1lRHVyYXRpb24gZGVjb2RlVGltZTsKICAgICAgIHsKICAgICAgICAgUFJJbnQ2
NCBjdXJyZW50VGltZSA9IEdldE1lZGlhVGltZSgpOwogICAgICAgICBNb25pdG9yQXV0b0V4aXQg
ZXhpdE1vbihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsKICAgICAgICAgVGltZVN0YW1wIHN0YXJ0
ID0gVGltZVN0YW1wOjpOb3coKTsKLSAgICAgICAgdmlkZW9QbGF5aW5nID0gbVJlYWRlci0+RGVj
b2RlVmlkZW9GcmFtZShza2lwVG9OZXh0S2V5ZnJhbWUsIGN1cnJlbnRUaW1lKTsKKyAgICAgICAg
dmlkZW9QbGF5aW5nID0gbVJlYWRlci0+RGVjb2RlVmlkZW9GcmFtZShza2lwVG9OZXh0S2V5ZnJh
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlY29kZWQpOwogICAgICAgICBkZWNvZGVUaW1lID0gVGltZVN0YW1wOjpOb3coKSAtIHN0
YXJ0OwogICAgICAgfQogICAgICAgaWYgKCFJc0RlY29kZUNsb3NlVG9Eb3dubG9hZCgpICYmCiAg
ICAgICAgICAgVEhSRVNIT0xEX0ZBQ1RPUiAqIGRlY29kZVRpbWUuVG9NaWxsaXNlY29uZHMoKSA+
IGxvd0F1ZGlvVGhyZXNob2xkKQogICAgICAgewogICAgICAgICBsb3dBdWRpb1RocmVzaG9sZCA9
CiAgICAgICAgICAgTlNfTUlOKHN0YXRpY19jYXN0PFBSSW50NjQ+KFRIUkVTSE9MRF9GQUNUT1Ig
KiBkZWNvZGVUaW1lLlRvTWlsbGlzZWNvbmRzKCkpLAogICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxQUkludDY0PihBTVBMRV9BVURJT19NUykpOwogICAgICAgICBhbXBsZUF1ZGlvVGhyZXNo
b2xkID0gTlNfTUFYKFRIUkVTSE9MRF9GQUNUT1IgKiBsb3dBdWRpb1RocmVzaG9sZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbXBsZUF1ZGlvVGhyZXNob2xkKTsKICAg
ICAgICAgTE9HKFBSX0xPR19ERUJVRywKICAgICAgICAgICAgICgiU2xvdyB2aWRlbyBkZWNvZGUs
IHNldCBsb3dBdWRpb1RocmVzaG9sZD0lbGxkIGFtcGxlQXVkaW9UaHJlc2hvbGQ9JWxsZCIsCiAg
ICAgICAgICAgICAgbG93QXVkaW9UaHJlc2hvbGQsIGFtcGxlQXVkaW9UaHJlc2hvbGQpKTsKICAg
ICAgIH0KICAgICB9CisgICAgaWYgKHBhcnNlZCB8fCBkZWNvZGVkKSB7CisgICAgICBtRGVjb2Rl
ci0+Tm90aWZ5RGVjb2RlZEZyYW1lcyhwYXJzZWQsIGRlY29kZWQpOworICAgIH0KIAogICAgIC8v
IEF1ZGlvIGRlY29kZS4KICAgICBpZiAoYXVkaW9QbGF5aW5nICYmCiAgICAgICAgIChHZXREZWNv
ZGVkQXVkaW9EdXJhdGlvbigpIDwgYW1wbGVBdWRpb1RocmVzaG9sZCB8fCBhdWRpb1F1ZXVlLkdl
dFNpemUoKSA9PSAwKSkKICAgICB7CiAgICAgICBNb25pdG9yQXV0b0V4aXQgZXhpdE1vbihtRGVj
b2Rlci0+R2V0TW9uaXRvcigpKTsKICAgICAgIGF1ZGlvUGxheWluZyA9IG1SZWFkZXItPkRlY29k
ZUF1ZGlvRGF0YSgpOwogICAgIH0KQEAgLTEyNzYsMTcgKzEyODMsMTkgQEAgdm9pZCBuc0J1aWx0
aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpSZW5kZQogCiAgIGlmIChhRGF0YS0+bUR1cGxpY2F0ZSkg
ewogICAgIHJldHVybjsKICAgfQogCiAgIG5zUmVmUHRyPEltYWdlPiBpbWFnZSA9IGFEYXRhLT5t
SW1hZ2U7CiAgIGlmIChpbWFnZSkgewogICAgIGNvbnN0IG5zVmlkZW9JbmZvJiBpbmZvID0gbVJl
YWRlci0+R2V0SW5mbygpOwotICAgIG1EZWNvZGVyLT5TZXRWaWRlb0RhdGEoZ2Z4SW50U2l6ZShp
bmZvLm1EaXNwbGF5LndpZHRoLCBpbmZvLm1EaXNwbGF5LmhlaWdodCksIGluZm8ubVBpeGVsQXNw
ZWN0UmF0aW8sIGltYWdlKTsKKyAgICBtRGVjb2Rlci0+U2V0VmlkZW9EYXRhKGdmeEludFNpemUo
aW5mby5tRGlzcGxheS53aWR0aCwgaW5mby5tRGlzcGxheS5oZWlnaHQpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mby5tUGl4ZWxBc3BlY3RSYXRpbywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGltYWdlKTsKICAgfQogfQogCiBQUkludDY0CiBuc0J1aWx0aW5EZWNvZGVyU3Rh
dGVNYWNoaW5lOjpHZXRBdWRpb0Nsb2NrKCkKIHsKICAgTlNfQVNTRVJUSU9OKElzQ3VycmVudFRo
cmVhZChtRGVjb2Rlci0+bVN0YXRlTWFjaGluZVRocmVhZCksICJTaG91bGQgYmUgb24gc3RhdGUg
bWFjaGluZSB0aHJlYWQuIik7CiAgIGlmICghbUF1ZGlvU3RyZWFtIHx8ICFIYXNBdWRpbygpKQpA
QCAtMTM2NCwxNiArMTM3MywxNyBAQCB2b2lkIG5zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmU6
OkFkdmFuCiAgICAgICAvLyBEZWNvZGUgb25lIGZyYW1lIGFuZCBkaXNwbGF5IGl0CiAgICAgICBO
U19BU1NFUlRJT04oY3VycmVudEZyYW1lLT5tVGltZSA+PSBtU3RhcnRUaW1lLCAiU2hvdWxkIGhh
dmUgcG9zaXRpdmUgZnJhbWUgdGltZSIpOwogICAgICAgewogICAgICAgICBNb25pdG9yQXV0b0V4
aXQgZXhpdE1vbihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsKICAgICAgICAgLy8gSWYgd2UgaGF2
ZSB2aWRlbywgd2Ugd2FudCB0byBpbmNyZW1lbnQgdGhlIGNsb2NrIGluIHN0ZXBzIG9mIHRoZSBm
cmFtZQogICAgICAgICAvLyBkdXJhdGlvbi4KICAgICAgICAgUmVuZGVyVmlkZW9GcmFtZShjdXJy
ZW50RnJhbWUpOwogICAgICAgfQorICAgICAgbURlY29kZXItPk5vdGlmeVByZXNlbnRlZEZyYW1l
KCk7CiAgICAgICBQUkludDY0IG5vdyA9IChUaW1lU3RhbXA6Ok5vdygpIC0gbVBsYXlTdGFydFRp
bWUgKyBtUGxheUR1cmF0aW9uKS5Ub01pbGxpc2Vjb25kcygpOwogICAgICAgcmVtYWluaW5nVGlt
ZSA9IGN1cnJlbnRGcmFtZS0+bUVuZFRpbWUgLSBtU3RhcnRUaW1lIC0gbm93OwogICAgICAgY3Vy
cmVudEZyYW1lID0gbnNudWxsOwogICAgIH0KIAogICAgIC8vIEtpY2sgdGhlIGRlY29kZSB0aHJl
YWQgaW4gY2FzZSBpdCBmaWxsZWQgaXRzIGJ1ZmZlcnMgYW5kIHB1dCBpdHNlbGYKICAgICAvLyB0
byBzbGVlcC4KICAgICBtRGVjb2Rlci0+R2V0TW9uaXRvcigpLk5vdGlmeUFsbCgpOwpkaWZmIC0t
Z2l0IGEvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5jcHAgYi9jb250ZW50L21lZGlhL25z
TWVkaWFEZWNvZGVyLmNwcAotLS0gYS9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmNwcAor
KysgYi9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmNwcApAQCAtNzAsMTYgKzcwLDIwIEBA
CiAvLyBuc01lZGlhRGVjb2Rlcjo6Q2FuUGxheVRocm91Z2goKSBjYWxjdWxhdGlvbiBtb3JlIHN0
YWJsZSBpbiB0aGUgY2FzZSBvZgogLy8gZmx1Y3R1YXRpbmcgYml0cmF0ZXMuCiAjZGVmaW5lIENB
Tl9QTEFZX1RIUk9VR0hfTUFSR0lOIDEwCiAKIG5zTWVkaWFEZWNvZGVyOjpuc01lZGlhRGVjb2Rl
cigpIDoKICAgbUVsZW1lbnQoMCksCiAgIG1SR0JXaWR0aCgtMSksCiAgIG1SR0JIZWlnaHQoLTEp
LAorICBtU3RhdHNNb25pdG9yKCJuc01lZGlhRGVjb2Rlci5zdGF0cyIpLAorICBtUGFyc2VkRnJh
bWVzKDApLAorICBtRGVjb2RlZEZyYW1lcygwKSwKKyAgbVByZXNlbnRlZEZyYW1lcygwKSwKICAg
bVZpZGVvVXBkYXRlTG9jayhuc251bGwpLAogICBtUGl4ZWxBc3BlY3RSYXRpbygxLjApLAogICBt
RnJhbWVCdWZmZXJMZW5ndGgoMCksCiAgIG1QaW5uZWRGb3JTZWVrKFBSX0ZBTFNFKSwKICAgbVNp
emVDaGFuZ2VkKFBSX0ZBTFNFKSwKICAgbUltYWdlQ29udGFpbmVyU2l6ZUNoYW5nZWQoUFJfRkFM
U0UpLAogICBtU2h1dHRpbmdEb3duKFBSX0ZBTFNFKQogewpAQCAtMzE5LDggKzMyMywyOSBAQCBQ
UkJvb2wgbnNNZWRpYURlY29kZXI6OkNhblBsYXlUaHJvdWdoKCkKICAgLy8gcGxheWJhY2sgcG9z
aXRpb24sIHNvIHRoYXQgaWYgdGhlIGJpdHJhdGUgb2YgdGhlIG1lZGlhIGZsdWN0dWF0ZXMsIG9y
IGlmCiAgIC8vIG91ciBkb3dubG9hZCByYXRlIG9yIGRlY29kZSByYXRlIGVzdGltYXRpb24gaXMg
b3RoZXJ3aXNlIGluYWNjdXJhdGUsCiAgIC8vIHdlIGRvbid0IHN1ZGRlbmx5IGRpc2NvdmVyIHRo
YXQgd2UgbmVlZCB0byBidWZmZXIuIFRoaXMgaXMgcGFydGljdWxhcmx5CiAgIC8vIHJlcXVpcmVk
IG5lYXIgdGhlIHN0YXJ0IG9mIHRoZSBtZWRpYSwgd2hlbiBub3QgbXVjaCBkYXRhIGlzIGRvd25s
b2FkZWQuCiAgIFBSSW50NjQgcmVhZEFoZWFkTWFyZ2luID0gc3RhdHMubVBsYXliYWNrUmF0ZSAq
IENBTl9QTEFZX1RIUk9VR0hfTUFSR0lOOwogICByZXR1cm4gc3RhdHMubVRvdGFsQnl0ZXMgPT0g
c3RhdHMubURvd25sb2FkUG9zaXRpb24gfHwKICAgICAgICAgIHN0YXRzLm1Eb3dubG9hZFBvc2l0
aW9uID4gc3RhdHMubVBsYXliYWNrUG9zaXRpb24gKyByZWFkQWhlYWRNYXJnaW47CiB9CisKK3Zv
aWQgbnNNZWRpYURlY29kZXI6Ok5vdGlmeVByZXNlbnRlZEZyYW1lKCkgeworICBtb3ppbGxhOjpN
b25pdG9yQXV0b0VudGVyIG1vbihtU3RhdHNNb25pdG9yKTsKKyAgKyttUHJlc2VudGVkRnJhbWVz
OworfQorCit2b2lkIG5zTWVkaWFEZWNvZGVyOjpOb3RpZnlEZWNvZGVkRnJhbWVzKFBSVWludDMy
IGFQYXJzZWQsIFBSVWludDMyIGFEZWNvZGVkKSB7CisgIG1vemlsbGE6Ok1vbml0b3JBdXRvRW50
ZXIgbW9uKG1TdGF0c01vbml0b3IpOworICBtUGFyc2VkRnJhbWVzICs9IGFQYXJzZWQ7CisgIG1E
ZWNvZGVkRnJhbWVzICs9IGFEZWNvZGVkOworfQorCisjZGVmaW5lIElNUExfR0VUX1NUQVRfTUVU
SE9EKFgpIFwKK1BSVWludDMyIG5zTWVkaWFEZWNvZGVyOjpHZXQjI1gjI0ZyYW1lcygpIHsgXAor
ICBtb3ppbGxhOjpNb25pdG9yQXV0b0VudGVyIG1vbihtU3RhdHNNb25pdG9yKTsgXAorICByZXR1
cm4gbSMjWCMjRnJhbWVzOyBcCit9CisKK0lNUExfR0VUX1NUQVRfTUVUSE9EKFBhcnNlZCk7CitJ
TVBMX0dFVF9TVEFUX01FVEhPRChEZWNvZGVkKTsKK0lNUExfR0VUX1NUQVRfTUVUSE9EKFByZXNl
bnRlZCk7CmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmggYi9jb250
ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmgKLS0tIGEvY29udGVudC9tZWRpYS9uc01lZGlhRGVj
b2Rlci5oCisrKyBiL2NvbnRlbnQvbWVkaWEvbnNNZWRpYURlY29kZXIuaApAQCAtNDIsMTYgKzQy
LDE3IEBACiAKICNpbmNsdWRlICJuc0lQcmluY2lwYWwuaCIKICNpbmNsdWRlICJuc1NpemUuaCIK
ICNpbmNsdWRlICJwcmxvZy5oIgogI2luY2x1ZGUgImdmeENvbnRleHQuaCIKICNpbmNsdWRlICJn
ZnhSZWN0LmgiCiAjaW5jbHVkZSAibnNJVGltZXIuaCIKICNpbmNsdWRlICJJbWFnZUxheWVycy5o
IgorI2luY2x1ZGUgIm1vemlsbGEvTW9uaXRvci5oIgogCiBjbGFzcyBuc0hUTUxNZWRpYUVsZW1l
bnQ7CiBjbGFzcyBuc01lZGlhU3RyZWFtOwogY2xhc3MgbnNJU3RyZWFtTGlzdGVuZXI7CiBjbGFz
cyBuc1RpbWVSYW5nZXM7CiAKIC8vIFRoZSBzaXplIHRvIHVzZSBmb3IgYXVkaW8gZGF0YSBmcmFt
ZXMgaW4gTW96QXVkaW9BdmFpbGFibGUgZXZlbnRzLgogLy8gVGhpcyB2YWx1ZSBpcyBwZXIgY2hh
bm5lbCwgYW5kIGlzIGNob3NlbiB0byBnaXZlIH40MyBmcHMgb2YgZXZlbnRzLApAQCAtODIsMTYg
KzgzLDE3IEBAIHByaXZhdGU6CiAvLyB3aGljaCBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVh
ZC4KIGNsYXNzIG5zTWVkaWFEZWNvZGVyIDogcHVibGljIG5zSU9ic2VydmVyCiB7CiBwdWJsaWM6
CiAgIHR5cGVkZWYgbW96aWxsYTo6VGltZVN0YW1wIFRpbWVTdGFtcDsKICAgdHlwZWRlZiBtb3pp
bGxhOjpUaW1lRHVyYXRpb24gVGltZUR1cmF0aW9uOwogICB0eXBlZGVmIG1vemlsbGE6OmxheWVy
czo6SW1hZ2VDb250YWluZXIgSW1hZ2VDb250YWluZXI7CiAgIHR5cGVkZWYgbW96aWxsYTo6bGF5
ZXJzOjpJbWFnZSBJbWFnZTsKKyAgdHlwZWRlZiBtb3ppbGxhOjpNb25pdG9yIE1vbml0b3I7CiAK
ICAgbnNNZWRpYURlY29kZXIoKTsKICAgdmlydHVhbCB+bnNNZWRpYURlY29kZXIoKTsKIAogICAv
LyBDcmVhdGUgYSBuZXcgZGVjb2RlciBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoaXMgb25lLgogICB2
aXJ0dWFsIG5zTWVkaWFEZWNvZGVyKiBDbG9uZSgpID0gMDsKIAogICAvLyBQZXJmb3JtIGFueSBp
bml0aWFsaXphdGlvbiByZXF1aXJlZCBmb3IgdGhlIGRlY29kZXIuCkBAIC0yODYsMTYgKzI4OCwz
NCBAQCBwdWJsaWM6CiAgIC8vIHRvIGJ1ZmZlciwgZ2l2ZW4gdGhlIGN1cnJlbnQgZG93bmxvYWQg
YW5kIHBsYXliYWNrIHJhdGVzLgogICBQUkJvb2wgQ2FuUGxheVRocm91Z2goKTsKIAogICAvLyBD
YWxsZWQgYnkgdGhlIG5zTWVkaWFTdHJlYW0gd2hlbiBhIHJlYWQgb24gdGhlIHN0cmVhbSBieSB0
aGUgZGVjb2RlcgogICAvLyBpcyBhYm91dCB0byBibG9jayBkdWUgdG8gaW5zdWZmaWVudCBkYXRh
LiBEZWNvZGVycyBtYXkgd2FudCB0byBwYXVzZQogICAvLyBwbGF5YmFjayBhbmQgZ28gaW50byBi
dWZmZXJpbmcgbW9kZSB3aGVuIHRoaXMgaXMgY2FsbGVkLgogICB2aXJ0dWFsIHZvaWQgTm90aWZ5
RGF0YUV4aGF1c3RlZCgpID0gMDsKIAorICAvLyBSZXR1cm5zIG51bWJlciBvZiBmcmFtZXMgd2hp
Y2ggaGF2ZSBiZWVuIHBhcnNlZCBmcm9tIHRoZSBtZWRpYS4KKyAgLy8gQ2FuIGJlIGNhbGxlZCBv
biBhbnkgdGhyZWFkLgorICBQUlVpbnQzMiBHZXRQYXJzZWRGcmFtZXMoKTsKKworICAvLyBSZXR1
cm5zIHRoZSBudW1iZXIgb2YgcGFyc2VkIGZyYW1lcyB3aGljaCBoYXZlIGJlZW4gZGVjb2RlZC4K
KyAgLy8gQ2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLgorICBQUlVpbnQzMiBHZXREZWNvZGVk
RnJhbWVzKCk7CisKKyAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlY29kZWQgZnJhbWVzIHdo
aWNoIGhhdmUgYmVlbiBzZW50IHRvIHRoZSByZW5kZXJpbmcKKyAgLy8gcGlwZWxpbmUgZm9yIHBh
aW50aW5nICgicHJlc2VudGVkIikuCisgIC8vIENhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZC4K
KyAgUFJVaW50MzIgR2V0UHJlc2VudGVkRnJhbWVzKCk7CisKKyAgLy8gUGxheWJhY2sgc3RhdGlz
dGljcyBnYXRoZXJpbmcgZnVuY3Rpb25zLiBDYWxsZWQgd2hlbiBmcmFtZXMgcmVhY2ggdmFyaW91
cworICAvLyBzdGFnZXMgdGhyb3VnaCB0aGUgZGVjb2RlL3JlbmRlcmluZyBwaXBlbGluZS4gQ2Fu
IGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLgorICB2b2lkIE5vdGlmeURlY29kZWRGcmFtZXMoUFJV
aW50MzIgYVBhcnNlZCwgUFJVaW50MzIgYURlY29kZWQpOworICB2b2lkIE5vdGlmeVByZXNlbnRl
ZEZyYW1lKCk7CisKIHByb3RlY3RlZDoKIAogICAvLyBTdGFydCB0aW1lciB0byB1cGRhdGUgZG93
bmxvYWQgcHJvZ3Jlc3MgaW5mb3JtYXRpb24uCiAgIG5zcmVzdWx0IFN0YXJ0UHJvZ3Jlc3MoKTsK
IAogICAvLyBTdG9wIHByb2dyZXNzIGluZm9ybWF0aW9uIHRpbWVyLgogICBuc3Jlc3VsdCBTdG9w
UHJvZ3Jlc3MoKTsKIApAQCAtMzEyLDE2ICszMzIsMjQgQEAgcHJvdGVjdGVkOgogICAvLyBUaGlz
IHNob3VsZCBvbmx5IGV2ZXIgYmUgYWNjZXNzZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgIC8v
IEl0IGlzIHNldCBpbiBJbml0IGFuZCBjbGVhcmVkIGluIFNodXRkb3duIHdoZW4gdGhlIGVsZW1l
bnQgZ29lcyBhd2F5LgogICAvLyBUaGUgZGVjb2RlciBkb2VzIG5vdCBhZGQgYSByZWZlcmVuY2Ug
dGhlIGVsZW1lbnQuCiAgIG5zSFRNTE1lZGlhRWxlbWVudCogbUVsZW1lbnQ7CiAKICAgUFJJbnQz
MiBtUkdCV2lkdGg7CiAgIFBSSW50MzIgbVJHQkhlaWdodDsKIAorICAvLyBNb25pdG9yIHRvIHBy
b3RlY3QgYWNjZXNzIG9mIHBsYXliYWNrIHN0YXRpc3RpY3MuCisgIE1vbml0b3IgbVN0YXRzTW9u
aXRvcjsKKworICAvLyBQbGF5YmFjayBzdGF0aXN0aWNzIGNvdW50ZXJzLiBBY2Nlc3MgcHJvdGVj
dGVkIGJ5IG1TdGF0c01vbml0b3I7CisgIFBSVWludDMyIG1QYXJzZWRGcmFtZXM7CisgIFBSVWlu
dDMyIG1EZWNvZGVkRnJhbWVzOworICBQUlVpbnQzMiBtUHJlc2VudGVkRnJhbWVzOworICAKICAg
bnNSZWZQdHI8SW1hZ2VDb250YWluZXI+IG1JbWFnZUNvbnRhaW5lcjsKIAogICAvLyBUaW1lIHRo
YXQgdGhlIGxhc3QgcHJvZ3Jlc3MgZXZlbnQgd2FzIGZpcmVkLiBSZWFkL1dyaXRlIGZyb20gdGhl
CiAgIC8vIG1haW4gdGhyZWFkIG9ubHkuCiAgIFRpbWVTdGFtcCBtUHJvZ3Jlc3NUaW1lOwogCiAg
IC8vIFRpbWUgdGhhdCBkYXRhIHdhcyBsYXN0IHJlYWQgZnJvbSB0aGUgbWVkaWEgcmVzb3VyY2Uu
IFVzZWQgZm9yCiAgIC8vIGNvbXB1dGluZyBpZiB0aGUgZG93bmxvYWQgaGFzIHN0YWxsZWQgYW5k
IHRvIHJhdGUgbGltaXQgcHJvZ3Jlc3MgZXZlbnRzCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlh
L29nZy9uc09nZ1JlYWRlci5jcHAgYi9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRlci5jcHAK
LS0tIGEvY29udGVudC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwCisrKyBiL2NvbnRlbnQvbWVk
aWEvb2dnL25zT2dnUmVhZGVyLmNwcApAQCAtNTc2LDE5ICs1NzYsMjIgQEAgbnNyZXN1bHQgbnNP
Z2dSZWFkZXI6OkRlY29kZVRoZW9yYShuc1RBcgogICAgIH0KICAgICBpZiAoIWFGcmFtZXMuQXBw
ZW5kRWxlbWVudCh2KSkgewogICAgICAgZGVsZXRlIHY7CiAgICAgfQogICB9CiAgIHJldHVybiBO
U19PSzsKIH0KIAotUFJCb29sIG5zT2dnUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAm
YUtleWZyYW1lU2tpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu
dDY0IGFUaW1lVGhyZXNob2xkKQorUFJCb29sIG5zT2dnUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1l
KFBSQm9vbCYgYUtleWZyYW1lU2tpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSVWludDMyJiBhUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSVWludDMyJiBhRGVjb2RlZCkKIHsKKyAgYVBhcnNlZCA9IGFEZWNvZGVkID0g
MDsKICAgTW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICBOU19BU1NFUlRJT04obURl
Y29kZXItPk9uU3RhdGVNYWNoaW5lVGhyZWFkKCkgfHwgbURlY29kZXItPk9uRGVjb2RlVGhyZWFk
KCksCiAgICAgICAgICAgICAgICAiU2hvdWxkIGJlIG9uIHN0YXRlIG1hY2hpbmUgb3IgQVYgdGhy
ZWFkLiIpOwogICAvLyBXZSBjaG9zZSB0byBrZWVwIHRyYWNrIG9mIHRoZSBUaGVvcmEgZ3JhbnVs
ZXBvcyBvdXJzZWx2ZXMsIHJhdGhlciB0aGFuCiAgIC8vIHJlbHkgb24gdGhfZGVjb2RlX3BhY2tl
dGluKCkgdG8gZG8gaXQgZm9yIHVzLiBUaGlzIGlzIGJlY2F1c2UKICAgLy8gdGhfZGVjb2RlX3Bh
Y2tldGluKCkgc2ltcGx5IHdvcmtzIGJ5IGluY3JlbWVudGluZyBhIGNvdW50ZXIgZXZlcnkgdGlt
ZQogICAvLyBpdCdzIGNhbGxlZCwgc28gaWYgd2UgZHJvcCBmcmFtZXMgYW5kIGRvbid0IGNhbGwg
aXQsIHN1YnNlcXVlbnQgZ3JhbnVsZXBvcwogICAvLyB3aWxsIGJlIHdyb25nLiBXaGVuZXZlciB3
ZSByZWFkIGEgcGFja2V0IHdoaWNoIGhhcyBhIGdyYW51bGVwb3MsIHdlIHVzZQpAQCAtNjA4LDE2
ICs2MTEsMTcgQEAgUFJCb29sIG5zT2dnUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQgogICAg
ICAgICAvLyBGYWlsZWQgdG8gcmVhZCBhbm90aGVyIHBhZ2UsIG11c3QgYmUgdGhlIGVuZCBvZiBm
aWxlLiBXZSBjYW4ndCBoYXZlCiAgICAgICAgIC8vIGFscmVhZHkgZW5jb3VudGVyZWQgYW4gZW5k
IG9mIGJpdHN0cmVhbSBwYWNrZXQsIGVsc2Ugd2Ugd291bGRuJ3QgYmUKICAgICAgICAgLy8gaGVy
ZSwgc28gdGhpcyBiaXRzdHJlYW0gbXVzdCBiZSBtaXNzaW5nIGl0cyBlbmQgb2Ygc3RyZWFtIHBh
Y2tldCwgb3IKICAgICAgICAgLy8gaXMgb3RoZXJ3aXNlIGNvcnJ1cHQgKG9nZ3otY2hvcCBjYW4g
b3V0cHV0IGZpbGVzIGxpa2UgdGhpcykuIEluZm9ybQogICAgICAgICAvLyB0aGUgcXVldWUgdGhh
dCB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgZnJhbWVzLgogICAgICAgICBtVmlkZW9RdWV1ZS5GaW5p
c2goKTsKICAgICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgICAgfQorICAgICAgYVBhcnNlZCsr
OwogCiAgICAgICBpZiAocGFja2V0LmdyYW51bGVwb3MgPiAwKSB7CiAgICAgICAgIC8vIFdlJ3Zl
IGZvdW5kIGEgcGFja2V0IHdpdGggYSBncmFudWxlcG9zLCB3ZSBjYW4gbm93IGRldGVybWluZSB0
aGUKICAgICAgICAgLy8gYnVmZmVyZWQgcGFja2V0J3MgdGltZXN0YW1wcywgYXMgd2VsbCBhcyB0
aGUgdGltZXN0YW1wcyBmb3IgYW55CiAgICAgICAgIC8vIHBhY2tldHMgd2UgcmVhZCBzdWJzZXF1
ZW50bHkuCiAgICAgICAgIG1UaGVvcmFHcmFudWxlcG9zID0gcGFja2V0LmdyYW51bGVwb3M7CiAg
ICAgICB9CiAgICAgCkBAIC02OTQsMTYgKzY5OCwxNyBAQCBQUkJvb2wgbnNPZ2dSZWFkZXI6OkRl
Y29kZVZpZGVvRnJhbWUoUFJCCiAgICAgTlNfQVNTRVJUSU9OKG1UaGVvcmFHcmFudWxlcG9zID4g
MCwgIldlIG11c3QgVGhlb3JhIGdyYW51bGVwb3MhIik7CiAgICAgCiAgICAgaWYgKCFSZWFkT2dn
UGFja2V0KG1UaGVvcmFTdGF0ZSwgJnBhY2tldCkpIHsKICAgICAgIC8vIEZhaWxlZCB0byByZWFk
IGZyb20gZmlsZSwgc28gRU9GIG9yIG90aGVyIHByZW1hdHVyZSBmYWlsdXJlLgogICAgICAgLy8g
SW5mb3JtIHRoZSBxdWV1ZSB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBmcmFtZXMuCiAgICAg
ICBtVmlkZW9RdWV1ZS5GaW5pc2goKTsKICAgICAgIHJldHVybiBQUl9GQUxTRTsKICAgICB9Cisg
ICAgYVBhcnNlZCsrOwogCiAgICAgZW5kT2ZTdHJlYW0gPSBwYWNrZXQuZV9vX3MgIT0gMDsKIAog
ICAgIC8vIE1haW50YWluIHRoZSBUaGVvcmEgZ3JhbnVsZXBvcy4gV2UgbXVzdCBkbyB0aGlzIGV2
ZW4gaWYgd2UgZHJvcCBmcmFtZXMsCiAgICAgLy8gb3RoZXJ3aXNlIG91ciBjbG9jayB3aWxsIGJl
IHdyb25nIGFmdGVyIHdlJ3ZlIHNraXBwZWQgZnJhbWVzLgogICAgIGlmIChwYWNrZXQuZ3JhbnVs
ZXBvcyAhPSAtMSkgewogICAgICAgLy8gSW5jb21pbmcgcGFja2V0IGhhcyBhIGdyYW51bGVwb3Ms
IHVzZSB0aGF0IGFzIGl0J3MgZ3JhbnVsZXBvcy4KICAgICAgIG1UaGVvcmFHcmFudWxlcG9zID0g
cGFja2V0LmdyYW51bGVwb3M7CkBAIC03NDYsMTYgKzc1MSwxNyBAQCBQUkJvb2wgbnNPZ2dSZWFk
ZXI6OkRlY29kZVZpZGVvRnJhbWUoUFJCCiAgIGZvciAoUFJVaW50MzIgaSA9IDA7IGkgPCBmcmFt
ZXMuTGVuZ3RoKCk7IGkrKykgewogICAgIG5zQXV0b1B0cjxWaWRlb0RhdGE+IGRhdGEoZnJhbWVz
W2ldLmZvcmdldCgpKTsKICAgICBpZiAoYUtleWZyYW1lU2tpcCAmJiBkYXRhLT5tS2V5ZnJhbWUp
IHsKICAgICAgIGFLZXlmcmFtZVNraXAgPSBQUl9GQUxTRTsKICAgICB9CiAKICAgICBpZiAoIWFL
ZXlmcmFtZVNraXApIHsKICAgICAgIG1WaWRlb1F1ZXVlLlB1c2goZGF0YS5mb3JnZXQoKSk7Cisg
ICAgICBhRGVjb2RlZCsrOwogICAgIH0KICAgfQogCiAgIGlmIChlbmRPZlN0cmVhbSkgewogICAg
IC8vIFdlJ3ZlIGVuY291bnRlcmVkIGFuIGVuZCBvZiBiaXRzdHJlYW0gcGFja2V0LiBJbmZvcm0g
dGhlIHF1ZXVlIHRoYXQKICAgICAvLyB0aGVyZSB3aWxsIGJlIG5vIG1vcmUgZnJhbWVzLgogICAg
IG1WaWRlb1F1ZXVlLkZpbmlzaCgpOwogICB9CkBAIC0xMTE5LDE3ICsxMTI1LDE4IEBAIG5zcmVz
dWx0IG5zT2dnUmVhZGVyOjpTZWVrSW5CdWZmZXJlZFJhbmcKICAgICByZXR1cm4gcmVzOwogICB9
CiAKICAgLy8gV2UgaGF2ZSBhbiBhY3RpdmUgVGhlb3JhIGJpdHN0cmVhbS4gRGVjb2RlIHRoZSBu
ZXh0IFRoZW9yYSBmcmFtZSwgYW5kCiAgIC8vIGV4dHJhY3QgaXRzIGtleWZyYW1lJ3MgdGltZS4K
ICAgUFJCb29sIGVvZjsKICAgZG8gewogICAgIFBSQm9vbCBza2lwID0gUFJfRkFMU0U7Ci0gICAg
ZW9mID0gIURlY29kZVZpZGVvRnJhbWUoc2tpcCwgMCk7CisgICAgUFJVaW50MzIgcGFyc2VkLCBk
ZWNvZGVkOworICAgIGVvZiA9ICFEZWNvZGVWaWRlb0ZyYW1lKHNraXAsIDAsIHBhcnNlZCwgZGVj
b2RlZCk7CiAgICAgewogICAgICAgTW9uaXRvckF1dG9FeGl0IGV4aXRSZWFkZXJNb24obU1vbml0
b3IpOwogICAgICAgTW9uaXRvckF1dG9FbnRlciBkZWNvZGVyTW9uKG1EZWNvZGVyLT5HZXRNb25p
dG9yKCkpOwogICAgICAgaWYgKG1EZWNvZGVyLT5HZXREZWNvZGVTdGF0ZSgpID09IG5zQnVpbHRp
bkRlY29kZXJTdGF0ZU1hY2hpbmU6OkRFQ09ERVJfU1RBVEVfU0hVVERPV04pIHsKICAgICAgICAg
cmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAgICAgICB9CiAgICAgfQogICB9IHdoaWxlICghZW9m
ICYmCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRlci5oIGIvY29udGVu
dC9tZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuaAotLS0gYS9jb250ZW50L21lZGlhL29nZy9uc09nZ1Jl
YWRlci5oCisrKyBiL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmgKQEAgLTYzLDE4ICs2
MywyMCBAQCBwdWJsaWM6CiAKICAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zQnVpbHRpbkRlY29k
ZXJSZWFkZXIqIGFDbG9uZURvbm9yKTsKICAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldERlY29kZSgp
OwogICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVBdWRpb0RhdGEoKTsKIAogICAvLyBJZiB0aGUgVGhl
b3JhIGdyYW51bGVwb3MgaGFzIG5vdCBiZWVuIGNhcHR1cmVkLCBpdCBtYXkgcmVhZCBzZXZlcmFs
IHBhY2tldHMKICAgLy8gdW50aWwgb25lIHdpdGggYSBncmFudWxlcG9zIGhhcyBiZWVuIGNhcHR1
cmVkLCB0byBlbnN1cmUgdGhhdCBhbGwgcGFja2V0cwogICAvLyByZWFkIGhhdmUgdmFsaWQgdGlt
ZSBpbmZvLiAgCi0gIHZpcnR1YWwgUFJCb29sIERlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5
ZnJhbWVTa2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRp
bWVUaHJlc2hvbGQpOworICB2aXJ0dWFsIFBSQm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCYg
YUtleWZyYW1lU2tpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0
IGFUaW1lVGhyZXNob2xkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWlu
dDMyJiBhUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy
JiBhRGVjb2RlZCk7CiAKICAgdmlydHVhbCBWaWRlb0RhdGEqIEZpbmRTdGFydFRpbWUoUFJJbnQ2
NCBhT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0JiBh
T3V0U3RhcnRUaW1lKTsKIAogICAvLyBHZXQgdGhlIGVuZCB0aW1lIG9mIGFFbmRPZmZzZXQuIFRo
aXMgaXMgdGhlIHBsYXliYWNrIHBvc2l0aW9uIHdlJ2QgcmVhY2gKICAgLy8gYWZ0ZXIgcGxheWJh
Y2sgZmluaXNoZWQgYXQgYUVuZE9mZnNldC4KICAgdmlydHVhbCBQUkludDY0IEZpbmRFbmRUaW1l
KFBSSW50NjQgYUVuZE9mZnNldCk7CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvcmF3L25z
UmF3UmVhZGVyLmNwcCBiL2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVyLmNwcAotLS0gYS9j
b250ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5jcHAKKysrIGIvY29udGVudC9tZWRpYS9yYXcv
bnNSYXdSZWFkZXIuY3BwCkBAIC0xNjMsMTggKzE2MywyMSBAQCBQUkJvb2wgbnNSYXdSZWFkZXI6
OlJlYWRGcm9tU3RyZWFtKG5zTWVkCiAgICAgYUxlbmd0aCAtPSBieXRlc1JlYWQ7CiAgICAgYUJ1
ZiArPSBieXRlc1JlYWQ7CiAgIH0KIAogICByZXR1cm4gUFJfVFJVRTsKIH0KIAogUFJCb29sIG5z
UmF3UmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hv
bGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzImIGFQYXJz
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzImIGFEZWNv
ZGVkKQogeworICBhUGFyc2VkID0gYURlY29kZWQgPSAwOwogICBtb3ppbGxhOjpNb25pdG9yQXV0
b0VudGVyIGF1dG9FbnRlcihtTW9uaXRvcik7CiAgIE5TX0FTU0VSVElPTihtRGVjb2Rlci0+T25T
dGF0ZU1hY2hpbmVUaHJlYWQoKSB8fCBtRGVjb2Rlci0+T25EZWNvZGVUaHJlYWQoKSwKICAgICAg
ICAgICAgICAgICJTaG91bGQgYmUgb24gc3RhdGUgbWFjaGluZSB0aHJlYWQgb3IgZGVjb2RlIHRo
cmVhZC4iKTsKIAogICBpZiAoIW1GcmFtZVNpemUpCiAgICAgcmV0dXJuIFBSX0ZBTFNFOyAvLyBN
ZXRhZGF0YSByZWFkIGZhaWxlZC4gIFdlIHNob3VsZCByZWZ1c2UgdG8gcGxheS4KIAogICBQUklu
dDY0IGN1cnJlbnRGcmFtZVRpbWUgPSAxMDAwICogbUN1cnJlbnRGcmFtZSAvIG1GcmFtZVJhdGU7
CkBAIC0xOTQsMTYgKzE5NywxOCBAQCBQUkJvb2wgbnNSYXdSZWFkZXI6OkRlY29kZVZpZGVvRnJh
bWUoUFJCCiAgICAgICAgICEoaGVhZGVyLnBhY2tldElEID09IDB4RkYgJiYgaGVhZGVyLmNvZGVj
SUQgPT0gUkFXX0lEIC8qICJZVVYiICovKSkgewogICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAg
IH0KIAogICAgIGlmICghUmVhZEZyb21TdHJlYW0oc3RyZWFtLCBidWZmZXIsIGxlbmd0aCkpIHsK
ICAgICAgIHJldHVybiBQUl9GQUxTRTsKICAgICB9CiAKKyAgICBhUGFyc2VkKys7CisKICAgICBp
ZiAoY3VycmVudEZyYW1lVGltZSA+PSBhVGltZVRocmVzaG9sZCkKICAgICAgIGJyZWFrOwogCiAg
ICAgbUN1cnJlbnRGcmFtZSsrOwogICAgIGN1cnJlbnRGcmFtZVRpbWUgKz0gMTAwMC4wIC8gbUZy
YW1lUmF0ZTsKICAgfQogCiAgIFZpZGVvRGF0YTo6WUNiQ3JCdWZmZXIgYjsKQEAgLTIzMiwxNiAr
MjM3LDE3IEBAIFBSQm9vbCBuc1Jhd1JlYWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQUkIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMSwgLy8gSW4gcmF3IHZpZGVvIGV2ZXJ5IGZyYW1lIGlzIGEga2V5ZnJhbWUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwogICBpZiAoIXYpCiAgICAg
cmV0dXJuIFBSX0ZBTFNFOwogCiAgIG1WaWRlb1F1ZXVlLlB1c2godik7CiAgIG1DdXJyZW50RnJh
bWUrKzsKKyAgYURlY29kZWQrKzsKICAgY3VycmVudEZyYW1lVGltZSArPSAxMDAwIC8gbUZyYW1l
UmF0ZTsKIAogICByZXR1cm4gUFJfVFJVRTsKIH0KIAogbnNyZXN1bHQgbnNSYXdSZWFkZXI6OlNl
ZWsoUFJJbnQ2NCBhVGltZSwgUFJJbnQ2NCBhU3RhcnRUaW1lLCBQUkludDY0IGFFbmRUaW1lLCBQ
UkludDY0IGFDdXJyZW50VGltZSkKIHsKICAgbW96aWxsYTo6TW9uaXRvckF1dG9FbnRlciBhdXRv
RW50ZXIobU1vbml0b3IpOwpAQCAtMjY0LDE3ICsyNzAsMTggQEAgbnNyZXN1bHQgbnNSYXdSZWFk
ZXI6OlNlZWsoUFJJbnQ2NCBhVGltZQogCiAgIG5zcmVzdWx0IHJ2ID0gc3RyZWFtLT5TZWVrKG5z
SVNlZWthYmxlU3RyZWFtOjpOU19TRUVLX1NFVCwgb2Zmc2V0KTsKICAgTlNfRU5TVVJFX1NVQ0NF
U1MocnYsIHJ2KTsKIAogICBtVmlkZW9RdWV1ZS5FcmFzZSgpOwogCiAgIHdoaWxlKG1WaWRlb1F1
ZXVlLkdldFNpemUoKSA9PSAwKSB7CiAgICAgUFJCb29sIGtleWZyYW1lU2tpcCA9IFBSX0ZBTFNF
OwotICAgIGlmICghRGVjb2RlVmlkZW9GcmFtZShrZXlmcmFtZVNraXAsIDApKSB7CisgICAgUFJV
aW50MzIgcGFyc2VkLCBkZWNvZGVkOworICAgIGlmICghRGVjb2RlVmlkZW9GcmFtZShrZXlmcmFt
ZVNraXAsIDAsIHBhcnNlZCwgZGVjb2RlZCkpIHsKICAgICAgIG1DdXJyZW50RnJhbWUgPSBmcmFt
ZTsKICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAogICAgIHsKICAgICAg
IG1vemlsbGE6Ok1vbml0b3JBdXRvRXhpdCBhdXRvTW9uaXRvckV4aXQobU1vbml0b3IpOwogICAg
ICAgbW96aWxsYTo6TW9uaXRvckF1dG9FbnRlciBhdXRvTW9uaXRvcihtRGVjb2Rlci0+R2V0TW9u
aXRvcigpKTsKICAgICAgIGlmIChtRGVjb2Rlci0+R2V0RGVjb2RlU3RhdGUoKSA9PQpkaWZmIC0t
Z2l0IGEvY29udGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuaCBiL2NvbnRlbnQvbWVkaWEvcmF3
L25zUmF3UmVhZGVyLmgKLS0tIGEvY29udGVudC9tZWRpYS9yYXcvbnNSYXdSZWFkZXIuaAorKysg
Yi9jb250ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5oCkBAIC05MiwxOCArOTIsMjAgQEAgY2xh
c3MgbnNSYXdSZWFkZXIgOiBwdWJsaWMgbnNCdWlsdGluRGVjbwogcHVibGljOgogICBuc1Jhd1Jl
YWRlcihuc0J1aWx0aW5EZWNvZGVyKiBhRGVjb2Rlcik7CiAgIH5uc1Jhd1JlYWRlcigpOwogCiAg
IHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0J1aWx0aW5EZWNvZGVyUmVhZGVyKiBhQ2xvbmVEb25v
cik7CiAgIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXREZWNvZGUoKTsKICAgdmlydHVhbCBQUkJvb2wg
RGVjb2RlQXVkaW9EYXRhKCk7CiAKLSAgdmlydHVhbCBQUkJvb2wgRGVjb2RlVmlkZW9GcmFtZShQ
UkJvb2wgJmFLZXlmcmFtZVNraXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJJbnQ2NCBhVGltZVRocmVzaG9sZCk7CisgIHZpcnR1YWwgUFJCb29sIERlY29kZVZpZGVvRnJh
bWUoUFJCb29sJiBhS2V5ZnJhbWVTa2lwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJVaW50MzImIGFQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJVaW50MzImIGFEZWNvZGVkKTsKIAogICB2aXJ0dWFsIFBSQm9vbCBIYXNBdWRpbygpCiAg
IHsKICAgICByZXR1cm4gUFJfRkFMU0U7CiAgIH0KIAogICB2aXJ0dWFsIFBSQm9vbCBIYXNWaWRl
bygpCiAgIHsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuY3Bw
IGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAKLS0tIGEvY29udGVudC9tZWRp
YS93ZWJtL25zV2ViTVJlYWRlci5jcHAKKysrIGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJl
YWRlci5jcHAKQEAgLTYwMiwxOSArNjAyLDIyIEBAIFBSQm9vbCBuc1dlYk1SZWFkZXI6OkRlY29k
ZUF1ZGlvRGF0YSgpCiAgIGlmICghaG9sZGVyKSB7CiAgICAgbUF1ZGlvUXVldWUuRmluaXNoKCk7
CiAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICB9CiAKICAgcmV0dXJuIERlY29kZUF1ZGlvUGFja2V0
KGhvbGRlci0+bVBhY2tldCwgaG9sZGVyLT5tT2Zmc2V0KTsKIH0KIAotUFJCb29sIG5zV2ViTVJl
YWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQUkJvb2wgJmFLZXlmcmFtZVNraXAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQpCitQUkJv
b2wgbnNXZWJNUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCYgYUtleWZyYW1lU2tpcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVz
aG9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzImIGFQ
YXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyJiBh
RGVjb2RlZCkKIHsKKyAgYVBhcnNlZCA9IGFEZWNvZGVkID0gMDsKICAgTW9uaXRvckF1dG9FbnRl
ciBtb24obU1vbml0b3IpOwogICBOU19BU1NFUlRJT04obURlY29kZXItPk9uU3RhdGVNYWNoaW5l
VGhyZWFkKCkgfHwgbURlY29kZXItPk9uRGVjb2RlVGhyZWFkKCksCiAgICAgICAgICAgICAgICAi
U2hvdWxkIGJlIG9uIHN0YXRlIG1hY2hpbmUgb3IgZGVjb2RlIHRocmVhZC4iKTsKIAogICBuc0F1
dG9SZWY8TmVzdGVnZ1BhY2tldEhvbGRlcj4gaG9sZGVyKE5leHRQYWNrZXQoVklERU8pKTsKICAg
aWYgKCFob2xkZXIpIHsKICAgICBtVmlkZW9RdWV1ZS5GaW5pc2goKTsKICAgICByZXR1cm4gUFJf
RkFMU0U7CkBAIC02NzUsMzggKzY3OCw0MCBAQCBQUkJvb2wgbnNXZWJNUmVhZGVyOjpEZWNvZGVW
aWRlb0ZyYW1lKFBSCiAgICAgfQogCiAgICAgdnB4X2NvZGVjX3N0cmVhbV9pbmZvX3Qgc2k7CiAg
ICAgbWVtc2V0KCZzaSwgMCwgc2l6ZW9mKHNpKSk7CiAgICAgc2kuc3ogPSBzaXplb2Yoc2kpOwog
ICAgIHZweF9jb2RlY19wZWVrX3N0cmVhbV9pbmZvKCZ2cHhfY29kZWNfdnA4X2R4X2FsZ28sIGRh
dGEsIGxlbmd0aCwgJnNpKTsKICAgICBpZiAoKGFLZXlmcmFtZVNraXAgJiYgIXNpLmlzX2tmKSB8
fCAoYUtleWZyYW1lU2tpcCAmJiBzaS5pc19rZiAmJiB0c3RhbXBfbXMgPCBhVGltZVRocmVzaG9s
ZCkpIHsKICAgICAgIGFLZXlmcmFtZVNraXAgPSBQUl9UUlVFOworICAgICAgYVBhcnNlZCsrOyAv
LyBBc3N1bWUgMSBmcmFtZSBwZXIgY2h1bmsuCiAgICAgICBicmVhazsKICAgICB9CiAKICAgICBp
ZiAoYUtleWZyYW1lU2tpcCAmJiBzaS5pc19rZikgewogICAgICAgYUtleWZyYW1lU2tpcCA9IFBS
X0ZBTFNFOwogICAgIH0KIAotICAgIGlmKHZweF9jb2RlY19kZWNvZGUoJm1WUDgsIGRhdGEsIGxl
bmd0aCwgTlVMTCwgMCkpIHsKKyAgICBpZiAodnB4X2NvZGVjX2RlY29kZSgmbVZQOCwgZGF0YSwg
bGVuZ3RoLCBOVUxMLCAwKSkgewogICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgIH0KIAogICAg
IC8vIElmIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHZpZGVvIGZyYW1lIGlzIGxlc3MgdGhhbgogICAg
IC8vIHRoZSB0aW1lIHRocmVzaG9sZCByZXF1aXJlZCB0aGVuIGl0IGlzIG5vdCBhZGRlZAogICAg
IC8vIHRvIHRoZSB2aWRlbyBxdWV1ZSBhbmQgd29uJ3QgYmUgZGlzcGxheWVkLgogICAgIGlmICh0
c3RhbXBfbXMgPCBhVGltZVRocmVzaG9sZCkgeworICAgICAgYVBhcnNlZCsrOyAvLyBBc3N1bWUg
MSBmcmFtZSBwZXIgY2h1bmsuCiAgICAgICBjb250aW51ZTsKICAgICB9CiAKICAgICB2cHhfY29k
ZWNfaXRlcl90ICBpdGVyID0gTlVMTDsKICAgICB2cHhfaW1hZ2VfdCAgICAgICppbWc7CiAKLSAg
ICB3aGlsZSgoaW1nID0gdnB4X2NvZGVjX2dldF9mcmFtZSgmbVZQOCwgJml0ZXIpKSkgeworICAg
IHdoaWxlICgoaW1nID0gdnB4X2NvZGVjX2dldF9mcmFtZSgmbVZQOCwgJml0ZXIpKSkgewogICAg
ICAgTlNfQVNTRVJUSU9OKGltZy0+Zm10ID09IElNR19GTVRfSTQyMCwgIldlYk0gaW1hZ2UgZm9y
bWF0IGlzIG5vdCBJNDIwIik7CiAKICAgICAgIC8vIENocm9tYSBzaGlmdHMgYXJlIHJvdW5kZWQg
ZG93biBhcyBwZXIgdGhlIGRlY29kaW5nIGV4YW1wbGVzIGluIHRoZSBWUDggU0RLCiAgICAgICBW
aWRlb0RhdGE6OllDYkNyQnVmZmVyIGI7CiAgICAgICBiLm1QbGFuZXNbMF0ubURhdGEgPSBpbWct
PnBsYW5lc1swXTsKICAgICAgIGIubVBsYW5lc1swXS5tU3RyaWRlID0gaW1nLT5zdHJpZGVbMF07
CiAgICAgICBiLm1QbGFuZXNbMF0ubUhlaWdodCA9IGltZy0+ZF9oOwogICAgICAgYi5tUGxhbmVz
WzBdLm1XaWR0aCA9IGltZy0+ZF93OwpAQCAtNzI3LDE2ICs3MzIsMjAgQEAgUFJCb29sIG5zV2Vi
TVJlYWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQUgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHN0YW1wX21zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV4dF90c3RhbXAgLyBOU19QRVJfTVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2kuaXNfa2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CiAg
ICAgICBpZiAoIXYpIHsKICAgICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgICAgfQorICAgICAg
YVBhcnNlZCsrOworICAgICAgYURlY29kZWQrKzsKKyAgICAgIE5TX0FTU0VSVElPTihhRGVjb2Rl
ZCA8PSBhUGFyc2VkLAorICAgICAgICAiRXhwZWN0IG9ubHkgMSBmcmFtZSBwZXIgY2h1bmsgcGVy
IHBhY2tldCBpbiBXZWJNLi4uIik7CiAgICAgICBtVmlkZW9RdWV1ZS5QdXNoKHYpOwogICAgIH0K
ICAgfQogCiAgIHJldHVybiBQUl9UUlVFOwogfQogCiBQUkJvb2wgbnNXZWJNUmVhZGVyOjpDYW5E
ZWNvZGVUb1RhcmdldChQUkludDY0IGFUYXJnZXQsCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlh
L3dlYm0vbnNXZWJNUmVhZGVyLmggYi9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNUmVhZGVyLmgK
LS0tIGEvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5oCisrKyBiL2NvbnRlbnQvbWVk
aWEvd2VibS9uc1dlYk1SZWFkZXIuaApAQCAtMTMzLDE4ICsxMzMsMjAgQEAgcHVibGljOgogCiAg
IHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0J1aWx0aW5EZWNvZGVyUmVhZGVyKiBhQ2xvbmVEb25v
cik7CiAgIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXREZWNvZGUoKTsKICAgdmlydHVhbCBQUkJvb2wg
RGVjb2RlQXVkaW9EYXRhKCk7CiAKICAgLy8gSWYgdGhlIFRoZW9yYSBncmFudWxlcG9zIGhhcyBu
b3QgYmVlbiBjYXB0dXJlZCwgaXQgbWF5IHJlYWQgc2V2ZXJhbCBwYWNrZXRzCiAgIC8vIHVudGls
IG9uZSB3aXRoIGEgZ3JhbnVsZXBvcyBoYXMgYmVlbiBjYXB0dXJlZCwgdG8gZW5zdXJlIHRoYXQg
YWxsIHBhY2tldHMKICAgLy8gcmVhZCBoYXZlIHZhbGlkIHRpbWUgaW5mby4gIAotICB2aXJ0dWFs
IFBSQm9vbCBEZWNvZGVWaWRlb0ZyYW1lKFBSQm9vbCAmYUtleWZyYW1lU2tpcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDY0IGFUaW1lVGhyZXNob2xkKTsKKyAgdmly
dHVhbCBQUkJvb2wgRGVjb2RlVmlkZW9GcmFtZShQUkJvb2wmIGFLZXlmcmFtZVNraXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiYgYVBhcnNlZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiYgYURlY29kZWQpOwogCiAgIHZp
cnR1YWwgUFJCb29sIEhhc0F1ZGlvKCkKICAgewogICAgIG1vemlsbGE6Ok1vbml0b3JBdXRvRW50
ZXIgbW9uKG1Nb25pdG9yKTsKICAgICByZXR1cm4gbUhhc0F1ZGlvOwogICB9CiAKICAgdmlydHVh
bCBQUkJvb2wgSGFzVmlkZW8oKQpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lE
T01IVE1MVmlkZW9FbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTFZp
ZGVvRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MVmlkZW9F
bGVtZW50LmlkbAorKysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxWaWRlb0VsZW1l
bnQuaWRsCkBAIC00MywxOCArNDMsMzIgQEAKICAqIDx2aWRlbz4gZWxlbWVudC4KICAqCiAgKiBG
b3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGludGVyZmFjZSwgcGxlYXNlIHNlZQogICogaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jdmlkZW8KICAq
CiAgKiBAc3RhdHVzIFVOREVSX0RFVkVMT1BNRU5UCiAgKi8KIAotW3NjcmlwdGFibGUsIHV1aWQo
ZWRmNDY4ZGMtNDJlYi00NDk0LTkyMGItNTZhMzE1MTcyNjQwKV0KK1tzY3JpcHRhYmxlLCB1dWlk
KDhhMmU1NzU2LWU5YTMtNDA0Zi05NTkyLTRlNWI1ODMwZGU4NSldCiBpbnRlcmZhY2UgbnNJRE9N
SFRNTFZpZGVvRWxlbWVudCA6IG5zSURPTUhUTUxNZWRpYUVsZW1lbnQKIHsKICAgICAgICAgICAg
YXR0cmlidXRlIGxvbmcgd2lkdGg7IAogICAgICAgICAgICBhdHRyaWJ1dGUgbG9uZyBoZWlnaHQ7
CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHZpZGVvV2lkdGg7CiAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHZpZGVvSGVpZ2h0OwogICAgICAgICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHBvc3RlcjsKKyAgICAgICAgICAgCisgIC8vIEEgY291bnQgb2YgdGhl
IG51bWJlciBvZiB2aWRlbyBmcmFtZXMgdGhhdCBoYXZlIGRlbXV4ZWQgZnJvbSB0aGUgbWVkaWEK
KyAgLy8gcmVzb3VyY2UuIElmIHdlIHdlcmUgcGxheWluZyBwZXJmZWN0bHksIHdlJ2QgYmUgYWJs
ZSB0byBwYWludCB0aGlzIG1hbnkKKyAgLy8gZnJhbWVzLgorICByZWFkb25seSBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyBtb3pQYXJzZWRGcmFtZXM7CisKKyAgLy8gQSBjb3VudCBvZiB0aGUgbnVt
YmVyIG9mIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiBkZWNvZGVkLiBXZSBtYXkgZHJvcAorICAvLyBm
cmFtZXMgaWYgdGhlIGRlY29kZSBpcyB0YWtpbmcgdG9vIG11Y2ggdGltZS4KKyAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbW96RGVjb2RlZEZyYW1lczsKKworICAvLyBBIGNvdW50
IG9mIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIHByZXNlbnRlZCB0byB0aGUg
cmVuZGVyaW5nCisgIC8vIHBpcGVsaW5lLiBXZSBtYXkgZHJvcCBmcmFtZXMgaWYgdGhleSBhcnJp
dmUgbGF0ZSBhdCB0aGUgcmVuZGVyZXIuCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIG1velByZXNlbnRlZEZyYW1lczsKKwogfTsKIAo=
</data>
<flag name="review"
          id="430856"
          type_id="937"
          status="+"
          setter="roc"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>515506</attachid>
            <date>2011-02-27 13:13:23 -0800</date>
            <delta_ts>2011-02-28 12:47:19 -0800</delta_ts>
            <desc>Patch 1 v2: Demuxing/decoding stats</desc>
            <filename>580531-stats.patch</filename>
            <type>text/plain</type>
            <size>18735</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4sIENocmlzIERvdWJsZSA8Y2hyaXMuZG91YmxlQGRvdWJsZS5jby5uej4KIyBQYXJlbnQg
NjIyNTc3ODVkYzcwOTk5NDU4ZGZiMzg0YTUxMmQwMjNiMDQ3NmVmOApCdWcgNTgwNTMxIC0gQWRk
IHZpZGVvIGRlbXV4aW5nL2RlY29kaW5nIHN0YXRzLiByPT8KCmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MVmlkZW9FbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3NyYy9uc0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC0xNzgsOCArMTc4LDI5IEBAIG5zcmVzdWx0
IG5zSFRNTFZpZGVvRWxlbWVudDo6U2V0QWNjZXB0SGUKICAgICAgICAgImF1ZGlvLyo7cT0wLjYs
Ki8qO3E9MC41Iik7CiAKICAgICByZXR1cm4gYUNoYW5uZWwtPlNldFJlcXVlc3RIZWFkZXIoTlNf
TElURVJBTF9DU1RSSU5HKCJBY2NlcHQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
X0ZBTFNFKTsKIH0KIAogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxWaWRlb0VsZW1lbnQsIFBvc3Rl
ciwgcG9zdGVyKQorCitOU19JTUVUSE9ESU1QIG5zSFRNTFZpZGVvRWxlbWVudDo6R2V0TW96UGFy
c2VkRnJhbWVzKFBSVWludDMyICphTW96UGFyc2VkRnJhbWVzKQoreworICBOU19BU1NFUlRJT04o
TlNfSXNNYWluVGhyZWFkKCksICJTaG91bGQgYmUgb24gbWFpbiB0aHJlYWQuIik7CisgICphTW96
UGFyc2VkRnJhbWVzID0gbURlY29kZXIgPyBtRGVjb2Rlci0+R2V0RnJhbWVTdGF0aXN0aWNzKCku
R2V0UGFyc2VkRnJhbWVzKCkgOiAwOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJ
TVAgbnNIVE1MVmlkZW9FbGVtZW50OjpHZXRNb3pEZWNvZGVkRnJhbWVzKFBSVWludDMyICphTW96
RGVjb2RlZEZyYW1lcykKK3sKKyAgTlNfQVNTRVJUSU9OKE5TX0lzTWFpblRocmVhZCgpLCAiU2hv
dWxkIGJlIG9uIG1haW4gdGhyZWFkLiIpOworICAqYU1vekRlY29kZWRGcmFtZXMgPSBtRGVjb2Rl
ciA/IG1EZWNvZGVyLT5HZXRGcmFtZVN0YXRpc3RpY3MoKS5HZXREZWNvZGVkRnJhbWVzKCkgOiAw
OworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAgbnNIVE1MVmlkZW9FbGVtZW50
OjpHZXRNb3pQcmVzZW50ZWRGcmFtZXMoUFJVaW50MzIgKmFNb3pQcmVzZW50ZWRGcmFtZXMpCit7
CisgIE5TX0FTU0VSVElPTihOU19Jc01haW5UaHJlYWQoKSwgIlNob3VsZCBiZSBvbiBtYWluIHRo
cmVhZC4iKTsKKyAgKmFNb3pQcmVzZW50ZWRGcmFtZXMgPSBtRGVjb2RlciA/IG1EZWNvZGVyLT5H
ZXRGcmFtZVN0YXRpc3RpY3MoKS5HZXRQcmVzZW50ZWRGcmFtZXMoKSA6IDA7CisgIHJldHVybiBO
U19PSzsKK30KZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRl
TWFjaGluZS5jcHAgYi9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUu
Y3BwCi0tLSBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5jcHAK
KysrIGIvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lLmNwcApAQCAt
MTM2NCwxNiArMTM2NCwxNyBAQCB2b2lkIG5zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmU6OkFk
dmFuCiAgICAgICAvLyBEZWNvZGUgb25lIGZyYW1lIGFuZCBkaXNwbGF5IGl0CiAgICAgICBOU19B
U1NFUlRJT04oY3VycmVudEZyYW1lLT5tVGltZSA+PSBtU3RhcnRUaW1lLCAiU2hvdWxkIGhhdmUg
cG9zaXRpdmUgZnJhbWUgdGltZSIpOwogICAgICAgewogICAgICAgICBNb25pdG9yQXV0b0V4aXQg
ZXhpdE1vbihtRGVjb2Rlci0+R2V0TW9uaXRvcigpKTsKICAgICAgICAgLy8gSWYgd2UgaGF2ZSB2
aWRlbywgd2Ugd2FudCB0byBpbmNyZW1lbnQgdGhlIGNsb2NrIGluIHN0ZXBzIG9mIHRoZSBmcmFt
ZQogICAgICAgICAvLyBkdXJhdGlvbi4KICAgICAgICAgUmVuZGVyVmlkZW9GcmFtZShjdXJyZW50
RnJhbWUpOwogICAgICAgfQorICAgICAgbURlY29kZXItPkdldEZyYW1lU3RhdGlzdGljcygpLk5v
dGlmeVByZXNlbnRlZEZyYW1lKCk7CiAgICAgICBQUkludDY0IG5vdyA9IChUaW1lU3RhbXA6Ok5v
dygpIC0gbVBsYXlTdGFydFRpbWUgKyBtUGxheUR1cmF0aW9uKS5Ub01pbGxpc2Vjb25kcygpOwog
ICAgICAgcmVtYWluaW5nVGltZSA9IGN1cnJlbnRGcmFtZS0+bUVuZFRpbWUgLSBtU3RhcnRUaW1l
IC0gbm93OwogICAgICAgY3VycmVudEZyYW1lID0gbnNudWxsOwogICAgIH0KIAogICAgIC8vIEtp
Y2sgdGhlIGRlY29kZSB0aHJlYWQgaW4gY2FzZSBpdCBmaWxsZWQgaXRzIGJ1ZmZlcnMgYW5kIHB1
dCBpdHNlbGYKICAgICAvLyB0byBzbGVlcC4KICAgICBtRGVjb2Rlci0+R2V0TW9uaXRvcigpLk5v
dGlmeUFsbCgpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5oIGIv
Y29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5oCi0tLSBhL2NvbnRlbnQvbWVkaWEvbnNNZWRp
YURlY29kZXIuaAorKysgYi9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmgKQEAgLTQyLDE2
ICs0MiwxNyBAQAogCiAjaW5jbHVkZSAibnNJUHJpbmNpcGFsLmgiCiAjaW5jbHVkZSAibnNTaXpl
LmgiCiAjaW5jbHVkZSAicHJsb2cuaCIKICNpbmNsdWRlICJnZnhDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiZ2Z4UmVjdC5oIgogI2luY2x1ZGUgIm5zSVRpbWVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VMYXll
cnMuaCIKKyNpbmNsdWRlICJtb3ppbGxhL01vbml0b3IuaCIKIAogY2xhc3MgbnNIVE1MTWVkaWFF
bGVtZW50OwogY2xhc3MgbnNNZWRpYVN0cmVhbTsKIGNsYXNzIG5zSVN0cmVhbUxpc3RlbmVyOwog
Y2xhc3MgbnNUaW1lUmFuZ2VzOwogCiAvLyBUaGUgc2l6ZSB0byB1c2UgZm9yIGF1ZGlvIGRhdGEg
ZnJhbWVzIGluIE1vekF1ZGlvQXZhaWxhYmxlIGV2ZW50cy4KIC8vIFRoaXMgdmFsdWUgaXMgcGVy
IGNoYW5uZWwsIGFuZCBpcyBjaG9zZW4gdG8gZ2l2ZSB+NDMgZnBzIG9mIGV2ZW50cywKQEAgLTgy
LDE2ICs4MywxNyBAQCBwcml2YXRlOgogLy8gd2hpY2ggY2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0
aHJlYWQuCiBjbGFzcyBuc01lZGlhRGVjb2RlciA6IHB1YmxpYyBuc0lPYnNlcnZlcgogewogcHVi
bGljOgogICB0eXBlZGVmIG1vemlsbGE6OlRpbWVTdGFtcCBUaW1lU3RhbXA7CiAgIHR5cGVkZWYg
bW96aWxsYTo6VGltZUR1cmF0aW9uIFRpbWVEdXJhdGlvbjsKICAgdHlwZWRlZiBtb3ppbGxhOjps
YXllcnM6OkltYWdlQ29udGFpbmVyIEltYWdlQ29udGFpbmVyOwogICB0eXBlZGVmIG1vemlsbGE6
OmxheWVyczo6SW1hZ2UgSW1hZ2U7CisgIHR5cGVkZWYgbW96aWxsYTo6TW9uaXRvciBNb25pdG9y
OwogCiAgIG5zTWVkaWFEZWNvZGVyKCk7CiAgIHZpcnR1YWwgfm5zTWVkaWFEZWNvZGVyKCk7CiAK
ICAgLy8gQ3JlYXRlIGEgbmV3IGRlY29kZXIgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGlzIG9uZS4K
ICAgdmlydHVhbCBuc01lZGlhRGVjb2RlciogQ2xvbmUoKSA9IDA7CiAKICAgLy8gUGVyZm9ybSBh
bnkgaW5pdGlhbGl6YXRpb24gcmVxdWlyZWQgZm9yIHRoZSBkZWNvZGVyLgpAQCAtMTc1LDIxICsx
NzcsMTA4IEBAIHB1YmxpYzoKICAgICAvLyBhIHNob3J0IHRpbWUpLgogICAgIFBSUGFja2VkQm9v
bCBtRG93bmxvYWRSYXRlUmVsaWFibGU7CiAgICAgLy8gSWYgZmFsc2UsIHRoZW4gbVBsYXliYWNr
UmF0ZSBjYW5ub3QgYmUgY29uc2lkZXJlZCBhIHJlbGlhYmxlCiAgICAgLy8gZXN0aW1hdGUgKHBy
b2JhYmx5IGJlY2F1c2UgcGxheWJhY2sgaGFzIG9ubHkgYmVlbiBydW5uaW5nCiAgICAgLy8gYSBz
aG9ydCB0aW1lKS4KICAgICBQUlBhY2tlZEJvb2wgbVBsYXliYWNrUmF0ZVJlbGlhYmxlOwogICB9
OwogCisgIC8vIEZyYW1lIGRlY29kaW5nL3BhaW50aW5nIHJlbGF0ZWQgcGVyZm9ybWFuY2UgY291
bnRlcnMuCisgIC8vIFRocmVhZHNhZmUuCisgIGNsYXNzIEZyYW1lU3RhdGlzdGljcyB7CisgIHB1
YmxpYzoKKyAgICAKKyAgICBGcmFtZVN0YXRpc3RpY3MoKSA6CisgICAgICAgIG1Nb25pdG9yKCJu
c01lZGlhRGVjb2Rlcjo6RnJhbWVTdGF0cyIpLAorICAgICAgICBtUGFyc2VkRnJhbWVzKDApLAor
ICAgICAgICBtRGVjb2RlZEZyYW1lcygwKSwKKyAgICAgICAgbVByZXNlbnRlZEZyYW1lcygwKSB7
fQorCisgICAgLy8gUmV0dXJucyBudW1iZXIgb2YgZnJhbWVzIHdoaWNoIGhhdmUgYmVlbiBwYXJz
ZWQgZnJvbSB0aGUgbWVkaWEuCisgICAgLy8gQ2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLgor
ICAgIFBSVWludDMyIEdldFBhcnNlZEZyYW1lcygpIHsKKyAgICAgIG1vemlsbGE6Ok1vbml0b3JB
dXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKKyAgICAgIHJldHVybiBtUGFyc2VkRnJhbWVzOworICAg
IH0KKworICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBwYXJzZWQgZnJhbWVzIHdoaWNoIGhh
dmUgYmVlbiBkZWNvZGVkLgorICAgIC8vIENhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZC4KKyAg
ICBQUlVpbnQzMiBHZXREZWNvZGVkRnJhbWVzKCkgeworICAgICAgbW96aWxsYTo6TW9uaXRvckF1
dG9FbnRlciBtb24obU1vbml0b3IpOworICAgICAgcmV0dXJuIG1EZWNvZGVkRnJhbWVzOworICAg
IH0KKworICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBkZWNvZGVkIGZyYW1lcyB3aGljaCBo
YXZlIGJlZW4gc2VudCB0byB0aGUgcmVuZGVyaW5nCisgICAgLy8gcGlwZWxpbmUgZm9yIHBhaW50
aW5nICgicHJlc2VudGVkIikuCisgICAgLy8gQ2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLgor
ICAgIFBSVWludDMyIEdldFByZXNlbnRlZEZyYW1lcygpIHsKKyAgICAgIG1vemlsbGE6Ok1vbml0
b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKKyAgICAgIHJldHVybiBtUHJlc2VudGVkRnJhbWVz
OworICAgIH0KKworICAgIC8vIEluY3JlbWVudHMgdGhlIHBhcnNlZCBhbmQgZGVjb2RlZCBmcmFt
ZSBjb3VudGVycyBieSB0aGUgcGFzc2VkIGluIGNvdW50cy4KKyAgICAvLyBDYW4gYmUgY2FsbGVk
IG9uIGFueSB0aHJlYWQuCisgICAgdm9pZCBOb3RpZnlEZWNvZGVkRnJhbWVzKFBSVWludDMyIGFQ
YXJzZWQsIFBSVWludDMyIGFEZWNvZGVkKSB7CisgICAgICBpZiAoYVBhcnNlZCA9PSAwICYmIGFE
ZWNvZGVkID09IDApCisgICAgICAgIHJldHVybjsKKyAgICAgIG1vemlsbGE6Ok1vbml0b3JBdXRv
RW50ZXIgbW9uKG1Nb25pdG9yKTsKKyAgICAgIG1QYXJzZWRGcmFtZXMgKz0gYVBhcnNlZDsKKyAg
ICAgIG1EZWNvZGVkRnJhbWVzICs9IGFEZWNvZGVkOworICAgIH0KKworICAgIC8vIEluY3JlbWVu
dHMgdGhlIHByZXNlbnRlZCBmcmFtZSBjb3VudGVycy4KKyAgICAvLyBDYW4gYmUgY2FsbGVkIG9u
IGFueSB0aHJlYWQuCisgICAgdm9pZCBOb3RpZnlQcmVzZW50ZWRGcmFtZSgpIHsKKyAgICAgIG1v
emlsbGE6Ok1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKKyAgICAgICsrbVByZXNlbnRl
ZEZyYW1lczsKKyAgICB9CisKKyAgcHJpdmF0ZToKKworICAgIC8vIE1vbml0b3IgdG8gcHJvdGVj
dCBhY2Nlc3Mgb2YgcGxheWJhY2sgc3RhdGlzdGljcy4KKyAgICBNb25pdG9yIG1Nb25pdG9yOwor
CisgICAgLy8gTnVtYmVyIG9mIGZyYW1lcyBwYXJzZWQgYW5kIGRlbXV4ZWQgZnJvbSBtZWRpYS4K
KyAgICAvLyBBY2Nlc3MgcHJvdGVjdGVkIGJ5IG1TdGF0c01vbml0b3IuCisgICAgUFJVaW50MzIg
bVBhcnNlZEZyYW1lczsKKworICAgIC8vIE51bWJlciBvZiBwYXJzZWQgZnJhbWVzIHdoaWNoIHdl
cmUgYWN0dWFsbHkgZGVjb2RlZC4KKyAgICAvLyBBY2Nlc3MgcHJvdGVjdGVkIGJ5IG1TdGF0c01v
bml0b3IuCisgICAgUFJVaW50MzIgbURlY29kZWRGcmFtZXM7CisKKyAgICAvLyBOdW1iZXIgb2Yg
ZGVjb2RlZCBmcmFtZXMgd2hpY2ggd2VyZSBhY3R1YWxseSBzZW50IGRvd24gdGhlIHJlbmRlcmlu
ZworICAgIC8vIHBpcGVsaW5lIHRvIGJlIHBhaW50ZWQgKCJwcmVzZW50ZWQiKS4gQWNjZXNzIHBy
b3RlY3RlZCBieSBtU3RhdHNNb25pdG9yLgorICAgIFBSVWludDMyIG1QcmVzZW50ZWRGcmFtZXM7
CisgIH07CisKKyAgLy8gU3RhY2sgYmFzZWQgY2xhc3MgdG8gYXNzaXN0IGluIG5vdGlmeWluZyB0
aGUgZnJhbWUgc3RhdGlzdGljcyBvZgorICAvLyBwYXJzZWQgYW5kIGRlY29kZWQgZnJhbWVzLiBV
c2UgaW5zaWRlIHZpZGVvIGRlbXV4ICYgZGVjb2RlIGZ1bmN0aW9ucworICAvLyB0byBlbnN1cmUg
YWxsIHBhcnNlZCBhbmQgZGVjb2RlZCBmcmFtZXMgYXJlIHJlcG9ydGVkIG9uIGFsbCByZXR1cm4g
cGF0aHMuCisgIGNsYXNzIEF1dG9Ob3RpZnlEZWNvZGVkIHsKKyAgcHVibGljOgorICAgIEF1dG9O
b3RpZnlEZWNvZGVkKG5zTWVkaWFEZWNvZGVyKiBhRGVjb2RlciwgUFJVaW50MzImIGFQYXJzZWQs
IFBSVWludDMyJiBhRGVjb2RlZCkKKyAgICAgIDogbURlY29kZXIoYURlY29kZXIpLCBtUGFyc2Vk
KGFQYXJzZWQpLCBtRGVjb2RlZChhRGVjb2RlZCkge30KKyAgICB+QXV0b05vdGlmeURlY29kZWQo
KSB7CisgICAgICBtRGVjb2Rlci0+R2V0RnJhbWVTdGF0aXN0aWNzKCkuTm90aWZ5RGVjb2RlZEZy
YW1lcyhtUGFyc2VkLCBtRGVjb2RlZCk7CisgICAgfQorICBwcml2YXRlOgorICAgIG5zTWVkaWFE
ZWNvZGVyKiBtRGVjb2RlcjsKKyAgICBQUlVpbnQzMiYgbVBhcnNlZDsKKyAgICBQUlVpbnQzMiYg
bURlY29kZWQ7CisgIH07CisKICAgLy8gUmV0dXJuIHN0YXRpc3RpY3MuIFRoaXMgaXMgdXNlZCBm
b3IgcHJvZ3Jlc3MgZXZlbnRzIGFuZCBvdGhlciB0aGluZ3MuCiAgIC8vIFRoaXMgY2FuIGJlIGNh
bGxlZCBmcm9tIGFueSB0aHJlYWQuIEl0J3Mgb25seSBhIHNuYXBzaG90IG9mIHRoZQogICAvLyBj
dXJyZW50IHN0YXRlLCBzaW5jZSBvdGhlciB0aHJlYWRzIG1pZ2h0IGJlIGNoYW5naW5nIHRoZSBz
dGF0ZQogICAvLyBhdCBhbnkgdGltZS4KICAgdmlydHVhbCBTdGF0aXN0aWNzIEdldFN0YXRpc3Rp
Y3MoKSA9IDA7CisgIAorICAvLyBSZXR1cm4gdGhlIGZyYW1lIGRlY29kZS9wYWludCByZWxhdGVk
IHN0YXRpc3RpY3MuCisgIEZyYW1lU3RhdGlzdGljcyYgR2V0RnJhbWVTdGF0aXN0aWNzKCkgeyBy
ZXR1cm4gbUZyYW1lU3RhdHM7IH0KIAogICAvLyBTZXQgdGhlIGR1cmF0aW9uIG9mIHRoZSBtZWRp
YSByZXNvdXJjZSBpbiB1bml0cyBvZiBtaWxsaXNlY29uZHMuCiAgIC8vIFRoaXMgaXMgY2FsbGVk
IHZpYSBhIGNoYW5uZWwgbGlzdGVuZXIgaWYgaXQgY2FuIHBpY2sgdXAgdGhlIGR1cmF0aW9uCiAg
IC8vIGZyb20gYSBjb250ZW50IGhlYWRlci4gTXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQgb25seS4KICAgdmlydHVhbCB2b2lkIFNldER1cmF0aW9uKFBSSW50NjQgYUR1cmF0aW9u
KSA9IDA7CiAKICAgLy8gU2V0IGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgc2Vla2luZyBpcyBz
dXBwb3J0ZWQKICAgdmlydHVhbCB2b2lkIFNldFNlZWthYmxlKFBSQm9vbCBhU2Vla2FibGUpID0g
MDsKQEAgLTMwMCwyOCArMzg5LDMwIEBAIHByb3RlY3RlZDoKICAgbnNyZXN1bHQgU3RvcFByb2dy
ZXNzKCk7CiAKICAgLy8gRW5zdXJlcyBvdXIgbWVkaWEgc3RyZWFtIGhhcyBiZWVuIHBpbm5lZC4K
ICAgdm9pZCBQaW5Gb3JTZWVrKCk7CiAKICAgLy8gRW5zdXJlcyBvdXIgbWVkaWEgc3RyZWFtIGhh
cyBiZWVuIHVucGlubmVkLgogICB2b2lkIFVucGluRm9yU2VlaygpOwogCi1wcm90ZWN0ZWQ6CiAg
IC8vIFRpbWVyIHVzZWQgZm9yIHVwZGF0aW5nIHByb2dyZXNzIGV2ZW50cwogICBuc0NPTVB0cjxu
c0lUaW1lcj4gbVByb2dyZXNzVGltZXI7CiAKICAgLy8gVGhpcyBzaG91bGQgb25seSBldmVyIGJl
IGFjY2Vzc2VkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAvLyBJdCBpcyBzZXQgaW4gSW5pdCBh
bmQgY2xlYXJlZCBpbiBTaHV0ZG93biB3aGVuIHRoZSBlbGVtZW50IGdvZXMgYXdheS4KICAgLy8g
VGhlIGRlY29kZXIgZG9lcyBub3QgYWRkIGEgcmVmZXJlbmNlIHRoZSBlbGVtZW50LgogICBuc0hU
TUxNZWRpYUVsZW1lbnQqIG1FbGVtZW50OwogCiAgIFBSSW50MzIgbVJHQldpZHRoOwogICBQUklu
dDMyIG1SR0JIZWlnaHQ7CiAKKyAgLy8gQ291bnRlcnMgcmVsYXRlZCB0byBkZWNvZGUgYW5kIHBy
ZXNlbnRhdGlvbiBvZiBmcmFtZXMuCisgIEZyYW1lU3RhdGlzdGljcyBtRnJhbWVTdGF0czsKKwog
ICBuc1JlZlB0cjxJbWFnZUNvbnRhaW5lcj4gbUltYWdlQ29udGFpbmVyOwogCiAgIC8vIFRpbWUg
dGhhdCB0aGUgbGFzdCBwcm9ncmVzcyBldmVudCB3YXMgZmlyZWQuIFJlYWQvV3JpdGUgZnJvbSB0
aGUKICAgLy8gbWFpbiB0aHJlYWQgb25seS4KICAgVGltZVN0YW1wIG1Qcm9ncmVzc1RpbWU7CiAK
ICAgLy8gVGltZSB0aGF0IGRhdGEgd2FzIGxhc3QgcmVhZCBmcm9tIHRoZSBtZWRpYSByZXNvdXJj
ZS4gVXNlZCBmb3IKICAgLy8gY29tcHV0aW5nIGlmIHRoZSBkb3dubG9hZCBoYXMgc3RhbGxlZCBh
bmQgdG8gcmF0ZSBsaW1pdCBwcm9ncmVzcyBldmVudHMKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVk
aWEvb2dnL25zT2dnUmVhZGVyLmNwcCBiL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVhZGVyLmNw
cAotLS0gYS9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRlci5jcHAKKysrIGIvY29udGVudC9t
ZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwCkBAIC01ODIsMTYgKzU4MiwyMiBAQCBuc3Jlc3VsdCBu
c09nZ1JlYWRlcjo6RGVjb2RlVGhlb3JhKG5zVEFyCiB9CiAKIFBSQm9vbCBuc09nZ1JlYWRlcjo6
RGVjb2RlVmlkZW9GcmFtZShQUkJvb2wgJmFLZXlmcmFtZVNraXAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJJbnQ2NCBhVGltZVRocmVzaG9sZCkKIHsKICAgTW9uaXRv
ckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICBOU19BU1NFUlRJT04obURlY29kZXItPk9uU3Rh
dGVNYWNoaW5lVGhyZWFkKCkgfHwgbURlY29kZXItPk9uRGVjb2RlVGhyZWFkKCksCiAgICAgICAg
ICAgICAgICAiU2hvdWxkIGJlIG9uIHN0YXRlIG1hY2hpbmUgb3IgQVYgdGhyZWFkLiIpOworCisg
IC8vIFJlY29yZCBudW1iZXIgb2YgZnJhbWVzIGRlY29kZWQgYW5kIHBhcnNlZC4gQXV0b21hdGlj
YWxseSB1cGRhdGUgdGhlCisgIC8vIHN0YXRzIGNvdW50ZXJzIHVzaW5nIHRoZSBBdXRvTm90aWZ5
RGVjb2RlZCBzdGFjay1iYXNlZCBjbGFzcy4KKyAgUFJVaW50MzIgcGFyc2VkID0gMCwgZGVjb2Rl
ZCA9IDA7CisgIG5zTWVkaWFEZWNvZGVyOjpBdXRvTm90aWZ5RGVjb2RlZCBhdXRvTm90aWZ5KG1E
ZWNvZGVyLCBwYXJzZWQsIGRlY29kZWQpOworCiAgIC8vIFdlIGNob3NlIHRvIGtlZXAgdHJhY2sg
b2YgdGhlIFRoZW9yYSBncmFudWxlcG9zIG91cnNlbHZlcywgcmF0aGVyIHRoYW4KICAgLy8gcmVs
eSBvbiB0aF9kZWNvZGVfcGFja2V0aW4oKSB0byBkbyBpdCBmb3IgdXMuIFRoaXMgaXMgYmVjYXVz
ZQogICAvLyB0aF9kZWNvZGVfcGFja2V0aW4oKSBzaW1wbHkgd29ya3MgYnkgaW5jcmVtZW50aW5n
IGEgY291bnRlciBldmVyeSB0aW1lCiAgIC8vIGl0J3MgY2FsbGVkLCBzbyBpZiB3ZSBkcm9wIGZy
YW1lcyBhbmQgZG9uJ3QgY2FsbCBpdCwgc3Vic2VxdWVudCBncmFudWxlcG9zCiAgIC8vIHdpbGwg
YmUgd3JvbmcuIFdoZW5ldmVyIHdlIHJlYWQgYSBwYWNrZXQgd2hpY2ggaGFzIGEgZ3JhbnVsZXBv
cywgd2UgdXNlCiAgIC8vIGl0cyBncmFudWxlcG9zLCBvdGhlcndpc2Ugd2UgaW5jcmVtZW50IHRo
ZSBwcmV2aW91cyBwYWNrZXQncyBncmFudWxlcG9zLgogCiAgIG5zQXV0b1RBcnJheTxuc0F1dG9Q
dHI8VmlkZW9EYXRhPiwgOD4gZnJhbWVzOwpAQCAtNjA4LDE2ICs2MTQsMTcgQEAgUFJCb29sIG5z
T2dnUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBSQgogICAgICAgICAvLyBGYWlsZWQgdG8gcmVh
ZCBhbm90aGVyIHBhZ2UsIG11c3QgYmUgdGhlIGVuZCBvZiBmaWxlLiBXZSBjYW4ndCBoYXZlCiAg
ICAgICAgIC8vIGFscmVhZHkgZW5jb3VudGVyZWQgYW4gZW5kIG9mIGJpdHN0cmVhbSBwYWNrZXQs
IGVsc2Ugd2Ugd291bGRuJ3QgYmUKICAgICAgICAgLy8gaGVyZSwgc28gdGhpcyBiaXRzdHJlYW0g
bXVzdCBiZSBtaXNzaW5nIGl0cyBlbmQgb2Ygc3RyZWFtIHBhY2tldCwgb3IKICAgICAgICAgLy8g
aXMgb3RoZXJ3aXNlIGNvcnJ1cHQgKG9nZ3otY2hvcCBjYW4gb3V0cHV0IGZpbGVzIGxpa2UgdGhp
cykuIEluZm9ybQogICAgICAgICAvLyB0aGUgcXVldWUgdGhhdCB0aGVyZSB3aWxsIGJlIG5vIG1v
cmUgZnJhbWVzLgogICAgICAgICBtVmlkZW9RdWV1ZS5GaW5pc2goKTsKICAgICAgICAgcmV0dXJu
IFBSX0ZBTFNFOwogICAgICAgfQorICAgICAgcGFyc2VkKys7CiAKICAgICAgIGlmIChwYWNrZXQu
Z3JhbnVsZXBvcyA+IDApIHsKICAgICAgICAgLy8gV2UndmUgZm91bmQgYSBwYWNrZXQgd2l0aCBh
IGdyYW51bGVwb3MsIHdlIGNhbiBub3cgZGV0ZXJtaW5lIHRoZQogICAgICAgICAvLyBidWZmZXJl
ZCBwYWNrZXQncyB0aW1lc3RhbXBzLCBhcyB3ZWxsIGFzIHRoZSB0aW1lc3RhbXBzIGZvciBhbnkK
ICAgICAgICAgLy8gcGFja2V0cyB3ZSByZWFkIHN1YnNlcXVlbnRseS4KICAgICAgICAgbVRoZW9y
YUdyYW51bGVwb3MgPSBwYWNrZXQuZ3JhbnVsZXBvczsKICAgICAgIH0KICAgICAKQEAgLTY5NCwx
NiArNzAxLDE3IEBAIFBSQm9vbCBuc09nZ1JlYWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQUkIKICAg
ICBOU19BU1NFUlRJT04obVRoZW9yYUdyYW51bGVwb3MgPiAwLCAiV2UgbXVzdCBUaGVvcmEgZ3Jh
bnVsZXBvcyEiKTsKICAgICAKICAgICBpZiAoIVJlYWRPZ2dQYWNrZXQobVRoZW9yYVN0YXRlLCAm
cGFja2V0KSkgewogICAgICAgLy8gRmFpbGVkIHRvIHJlYWQgZnJvbSBmaWxlLCBzbyBFT0Ygb3Ig
b3RoZXIgcHJlbWF0dXJlIGZhaWx1cmUuCiAgICAgICAvLyBJbmZvcm0gdGhlIHF1ZXVlIHRoYXQg
dGhlcmUgd2lsbCBiZSBubyBtb3JlIGZyYW1lcy4KICAgICAgIG1WaWRlb1F1ZXVlLkZpbmlzaCgp
OwogICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgIH0KKyAgICBwYXJzZWQrKzsKIAogICAgIGVu
ZE9mU3RyZWFtID0gcGFja2V0LmVfb19zICE9IDA7CiAKICAgICAvLyBNYWludGFpbiB0aGUgVGhl
b3JhIGdyYW51bGVwb3MuIFdlIG11c3QgZG8gdGhpcyBldmVuIGlmIHdlIGRyb3AgZnJhbWVzLAog
ICAgIC8vIG90aGVyd2lzZSBvdXIgY2xvY2sgd2lsbCBiZSB3cm9uZyBhZnRlciB3ZSd2ZSBza2lw
cGVkIGZyYW1lcy4KICAgICBpZiAocGFja2V0LmdyYW51bGVwb3MgIT0gLTEpIHsKICAgICAgIC8v
IEluY29taW5nIHBhY2tldCBoYXMgYSBncmFudWxlcG9zLCB1c2UgdGhhdCBhcyBpdCdzIGdyYW51
bGVwb3MuCiAgICAgICBtVGhlb3JhR3JhbnVsZXBvcyA9IHBhY2tldC5ncmFudWxlcG9zOwpAQCAt
NzQ2LDE2ICs3NTQsMTcgQEAgUFJCb29sIG5zT2dnUmVhZGVyOjpEZWNvZGVWaWRlb0ZyYW1lKFBS
QgogICBmb3IgKFBSVWludDMyIGkgPSAwOyBpIDwgZnJhbWVzLkxlbmd0aCgpOyBpKyspIHsKICAg
ICBuc0F1dG9QdHI8VmlkZW9EYXRhPiBkYXRhKGZyYW1lc1tpXS5mb3JnZXQoKSk7CiAgICAgaWYg
KGFLZXlmcmFtZVNraXAgJiYgZGF0YS0+bUtleWZyYW1lKSB7CiAgICAgICBhS2V5ZnJhbWVTa2lw
ID0gUFJfRkFMU0U7CiAgICAgfQogCiAgICAgaWYgKCFhS2V5ZnJhbWVTa2lwKSB7CiAgICAgICBt
VmlkZW9RdWV1ZS5QdXNoKGRhdGEuZm9yZ2V0KCkpOworICAgICAgZGVjb2RlZCsrOwogICAgIH0K
ICAgfQogCiAgIGlmIChlbmRPZlN0cmVhbSkgewogICAgIC8vIFdlJ3ZlIGVuY291bnRlcmVkIGFu
IGVuZCBvZiBiaXRzdHJlYW0gcGFja2V0LiBJbmZvcm0gdGhlIHF1ZXVlIHRoYXQKICAgICAvLyB0
aGVyZSB3aWxsIGJlIG5vIG1vcmUgZnJhbWVzLgogICAgIG1WaWRlb1F1ZXVlLkZpbmlzaCgpOwog
ICB9CmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5jcHAgYi9jb250
ZW50L21lZGlhL3Jhdy9uc1Jhd1JlYWRlci5jcHAKLS0tIGEvY29udGVudC9tZWRpYS9yYXcvbnNS
YXdSZWFkZXIuY3BwCisrKyBiL2NvbnRlbnQvbWVkaWEvcmF3L25zUmF3UmVhZGVyLmNwcApAQCAt
MTY5LDE2ICsxNjksMjEgQEAgUFJCb29sIG5zUmF3UmVhZGVyOjpSZWFkRnJvbVN0cmVhbShuc01l
ZAogCiBQUkJvb2wgbnNSYXdSZWFkZXI6OkRlY29kZVZpZGVvRnJhbWUoUFJCb29sICZhS2V5ZnJh
bWVTa2lwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRp
bWVUaHJlc2hvbGQpCiB7CiAgIG1vemlsbGE6Ok1vbml0b3JBdXRvRW50ZXIgYXV0b0VudGVyKG1N
b25pdG9yKTsKICAgTlNfQVNTRVJUSU9OKG1EZWNvZGVyLT5PblN0YXRlTWFjaGluZVRocmVhZCgp
IHx8IG1EZWNvZGVyLT5PbkRlY29kZVRocmVhZCgpLAogICAgICAgICAgICAgICAgIlNob3VsZCBi
ZSBvbiBzdGF0ZSBtYWNoaW5lIHRocmVhZCBvciBkZWNvZGUgdGhyZWFkLiIpOwogCisgIC8vIFJl
Y29yZCBudW1iZXIgb2YgZnJhbWVzIGRlY29kZWQgYW5kIHBhcnNlZC4gQXV0b21hdGljYWxseSB1
cGRhdGUgdGhlCisgIC8vIHN0YXRzIGNvdW50ZXJzIHVzaW5nIHRoZSBBdXRvTm90aWZ5RGVjb2Rl
ZCBzdGFjay1iYXNlZCBjbGFzcy4KKyAgUFJVaW50MzIgcGFyc2VkID0gMCwgZGVjb2RlZCA9IDA7
CisgIG5zTWVkaWFEZWNvZGVyOjpBdXRvTm90aWZ5RGVjb2RlZCBhdXRvTm90aWZ5KG1EZWNvZGVy
LCBwYXJzZWQsIGRlY29kZWQpOworCiAgIGlmICghbUZyYW1lU2l6ZSkKICAgICByZXR1cm4gUFJf
RkFMU0U7IC8vIE1ldGFkYXRhIHJlYWQgZmFpbGVkLiAgV2Ugc2hvdWxkIHJlZnVzZSB0byBwbGF5
LgogCiAgIFBSSW50NjQgY3VycmVudEZyYW1lVGltZSA9IDEwMDAgKiBtQ3VycmVudEZyYW1lIC8g
bUZyYW1lUmF0ZTsKICAgUFJVaW50MzIgbGVuZ3RoID0gbUZyYW1lU2l6ZSAtIHNpemVvZihuc1Jh
d1BhY2tldEhlYWRlcik7CiAKICAgbnNBdXRvUHRyPFBSVWludDg+IGJ1ZmZlcihuZXcgUFJVaW50
OFtsZW5ndGhdKTsKICAgbnNNZWRpYVN0cmVhbSogc3RyZWFtID0gbURlY29kZXItPkdldEN1cnJl
bnRTdHJlYW0oKTsKQEAgLTE5NCwxNiArMTk5LDE4IEBAIFBSQm9vbCBuc1Jhd1JlYWRlcjo6RGVj
b2RlVmlkZW9GcmFtZShQUkIKICAgICAgICAgIShoZWFkZXIucGFja2V0SUQgPT0gMHhGRiAmJiBo
ZWFkZXIuY29kZWNJRCA9PSBSQVdfSUQgLyogIllVViIgKi8pKSB7CiAgICAgICByZXR1cm4gUFJf
RkFMU0U7CiAgICAgfQogCiAgICAgaWYgKCFSZWFkRnJvbVN0cmVhbShzdHJlYW0sIGJ1ZmZlciwg
bGVuZ3RoKSkgewogICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgIH0KIAorICAgIHBhcnNlZCsr
OworCiAgICAgaWYgKGN1cnJlbnRGcmFtZVRpbWUgPj0gYVRpbWVUaHJlc2hvbGQpCiAgICAgICBi
cmVhazsKIAogICAgIG1DdXJyZW50RnJhbWUrKzsKICAgICBjdXJyZW50RnJhbWVUaW1lICs9IDEw
MDAuMCAvIG1GcmFtZVJhdGU7CiAgIH0KIAogICBWaWRlb0RhdGE6OllDYkNyQnVmZmVyIGI7CkBA
IC0yMzIsMTYgKzIzOSwxNyBAQCBQUkJvb2wgbnNSYXdSZWFkZXI6OkRlY29kZVZpZGVvRnJhbWUo
UFJCCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEsIC8vIEluIHJhdyB2aWRlbyBldmVyeSBmcmFtZSBpcyBh
IGtleWZyYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKICAgaWYg
KCF2KQogICAgIHJldHVybiBQUl9GQUxTRTsKIAogICBtVmlkZW9RdWV1ZS5QdXNoKHYpOwogICBt
Q3VycmVudEZyYW1lKys7CisgIGRlY29kZWQrKzsKICAgY3VycmVudEZyYW1lVGltZSArPSAxMDAw
IC8gbUZyYW1lUmF0ZTsKIAogICByZXR1cm4gUFJfVFJVRTsKIH0KIAogbnNyZXN1bHQgbnNSYXdS
ZWFkZXI6OlNlZWsoUFJJbnQ2NCBhVGltZSwgUFJJbnQ2NCBhU3RhcnRUaW1lLCBQUkludDY0IGFF
bmRUaW1lLCBQUkludDY0IGFDdXJyZW50VGltZSkKIHsKICAgbW96aWxsYTo6TW9uaXRvckF1dG9F
bnRlciBhdXRvRW50ZXIobU1vbml0b3IpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS93ZWJt
L25zV2ViTVJlYWRlci5jcHAgYi9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNUmVhZGVyLmNwcAot
LS0gYS9jb250ZW50L21lZGlhL3dlYm0vbnNXZWJNUmVhZGVyLmNwcAorKysgYi9jb250ZW50L21l
ZGlhL3dlYm0vbnNXZWJNUmVhZGVyLmNwcApAQCAtNjA5LDE2ICs2MDksMjEgQEAgUFJCb29sIG5z
V2ViTVJlYWRlcjo6RGVjb2RlQXVkaW9EYXRhKCkKIAogUFJCb29sIG5zV2ViTVJlYWRlcjo6RGVj
b2RlVmlkZW9GcmFtZShQUkJvb2wgJmFLZXlmcmFtZVNraXAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSSW50NjQgYVRpbWVUaHJlc2hvbGQpCiB7CiAgIE1vbml0b3JB
dXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKICAgTlNfQVNTRVJUSU9OKG1EZWNvZGVyLT5PblN0YXRl
TWFjaGluZVRocmVhZCgpIHx8IG1EZWNvZGVyLT5PbkRlY29kZVRocmVhZCgpLAogICAgICAgICAg
ICAgICAgIlNob3VsZCBiZSBvbiBzdGF0ZSBtYWNoaW5lIG9yIGRlY29kZSB0aHJlYWQuIik7CiAK
KyAgLy8gUmVjb3JkIG51bWJlciBvZiBmcmFtZXMgZGVjb2RlZCBhbmQgcGFyc2VkLiBBdXRvbWF0
aWNhbGx5IHVwZGF0ZSB0aGUKKyAgLy8gc3RhdHMgY291bnRlcnMgdXNpbmcgdGhlIEF1dG9Ob3Rp
ZnlEZWNvZGVkIHN0YWNrLWJhc2VkIGNsYXNzLgorICBQUlVpbnQzMiBwYXJzZWQgPSAwLCBkZWNv
ZGVkID0gMDsKKyAgbnNNZWRpYURlY29kZXI6OkF1dG9Ob3RpZnlEZWNvZGVkIGF1dG9Ob3RpZnko
bURlY29kZXIsIHBhcnNlZCwgZGVjb2RlZCk7CisKICAgbnNBdXRvUmVmPE5lc3RlZ2dQYWNrZXRI
b2xkZXI+IGhvbGRlcihOZXh0UGFja2V0KFZJREVPKSk7CiAgIGlmICghaG9sZGVyKSB7CiAgICAg
bVZpZGVvUXVldWUuRmluaXNoKCk7CiAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICB9CiAKICAgbmVz
dGVnZ19wYWNrZXQqIHBhY2tldCA9IGhvbGRlci0+bVBhY2tldDsKICAgdW5zaWduZWQgaW50IHRy
YWNrID0gMDsKQEAgLTY3NSwzOCArNjgwLDQwIEBAIFBSQm9vbCBuc1dlYk1SZWFkZXI6OkRlY29k
ZVZpZGVvRnJhbWUoUFIKICAgICB9CiAKICAgICB2cHhfY29kZWNfc3RyZWFtX2luZm9fdCBzaTsK
ICAgICBtZW1zZXQoJnNpLCAwLCBzaXplb2Yoc2kpKTsKICAgICBzaS5zeiA9IHNpemVvZihzaSk7
CiAgICAgdnB4X2NvZGVjX3BlZWtfc3RyZWFtX2luZm8oJnZweF9jb2RlY192cDhfZHhfYWxnbywg
ZGF0YSwgbGVuZ3RoLCAmc2kpOwogICAgIGlmICgoYUtleWZyYW1lU2tpcCAmJiAhc2kuaXNfa2Yp
IHx8IChhS2V5ZnJhbWVTa2lwICYmIHNpLmlzX2tmICYmIHRzdGFtcF9tcyA8IGFUaW1lVGhyZXNo
b2xkKSkgewogICAgICAgYUtleWZyYW1lU2tpcCA9IFBSX1RSVUU7CisgICAgICBwYXJzZWQrKzsg
Ly8gQXNzdW1lIDEgZnJhbWUgcGVyIGNodW5rLgogICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
aWYgKGFLZXlmcmFtZVNraXAgJiYgc2kuaXNfa2YpIHsKICAgICAgIGFLZXlmcmFtZVNraXAgPSBQ
Ul9GQUxTRTsKICAgICB9CiAKLSAgICBpZih2cHhfY29kZWNfZGVjb2RlKCZtVlA4LCBkYXRhLCBs
ZW5ndGgsIE5VTEwsIDApKSB7CisgICAgaWYgKHZweF9jb2RlY19kZWNvZGUoJm1WUDgsIGRhdGEs
IGxlbmd0aCwgTlVMTCwgMCkpIHsKICAgICAgIHJldHVybiBQUl9GQUxTRTsKICAgICB9CiAKICAg
ICAvLyBJZiB0aGUgdGltZXN0YW1wIG9mIHRoZSB2aWRlbyBmcmFtZSBpcyBsZXNzIHRoYW4KICAg
ICAvLyB0aGUgdGltZSB0aHJlc2hvbGQgcmVxdWlyZWQgdGhlbiBpdCBpcyBub3QgYWRkZWQKICAg
ICAvLyB0byB0aGUgdmlkZW8gcXVldWUgYW5kIHdvbid0IGJlIGRpc3BsYXllZC4KICAgICBpZiAo
dHN0YW1wX21zIDwgYVRpbWVUaHJlc2hvbGQpIHsKKyAgICAgIHBhcnNlZCsrOyAvLyBBc3N1bWUg
MSBmcmFtZSBwZXIgY2h1bmsuCiAgICAgICBjb250aW51ZTsKICAgICB9CiAKICAgICB2cHhfY29k
ZWNfaXRlcl90ICBpdGVyID0gTlVMTDsKICAgICB2cHhfaW1hZ2VfdCAgICAgICppbWc7CiAKLSAg
ICB3aGlsZSgoaW1nID0gdnB4X2NvZGVjX2dldF9mcmFtZSgmbVZQOCwgJml0ZXIpKSkgeworICAg
IHdoaWxlICgoaW1nID0gdnB4X2NvZGVjX2dldF9mcmFtZSgmbVZQOCwgJml0ZXIpKSkgewogICAg
ICAgTlNfQVNTRVJUSU9OKGltZy0+Zm10ID09IElNR19GTVRfSTQyMCwgIldlYk0gaW1hZ2UgZm9y
bWF0IGlzIG5vdCBJNDIwIik7CiAKICAgICAgIC8vIENocm9tYSBzaGlmdHMgYXJlIHJvdW5kZWQg
ZG93biBhcyBwZXIgdGhlIGRlY29kaW5nIGV4YW1wbGVzIGluIHRoZSBWUDggU0RLCiAgICAgICBW
aWRlb0RhdGE6OllDYkNyQnVmZmVyIGI7CiAgICAgICBiLm1QbGFuZXNbMF0ubURhdGEgPSBpbWct
PnBsYW5lc1swXTsKICAgICAgIGIubVBsYW5lc1swXS5tU3RyaWRlID0gaW1nLT5zdHJpZGVbMF07
CiAgICAgICBiLm1QbGFuZXNbMF0ubUhlaWdodCA9IGltZy0+ZF9oOwogICAgICAgYi5tUGxhbmVz
WzBdLm1XaWR0aCA9IGltZy0+ZF93OwpAQCAtNzI3LDE2ICs3MzQsMjAgQEAgUFJCb29sIG5zV2Vi
TVJlYWRlcjo6RGVjb2RlVmlkZW9GcmFtZShQUgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHN0YW1wX21zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV4dF90c3RhbXAgLyBOU19QRVJfTVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2kuaXNfa2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CiAg
ICAgICBpZiAoIXYpIHsKICAgICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgICAgfQorICAgICAg
cGFyc2VkKys7CisgICAgICBkZWNvZGVkKys7CisgICAgICBOU19BU1NFUlRJT04oZGVjb2RlZCA8
PSBwYXJzZWQsCisgICAgICAgICJFeHBlY3Qgb25seSAxIGZyYW1lIHBlciBjaHVuayBwZXIgcGFj
a2V0IGluIFdlYk0uLi4iKTsKICAgICAgIG1WaWRlb1F1ZXVlLlB1c2godik7CiAgICAgfQogICB9
CiAKICAgcmV0dXJuIFBSX1RSVUU7CiB9CiAKIFBSQm9vbCBuc1dlYk1SZWFkZXI6OkNhbkRlY29k
ZVRvVGFyZ2V0KFBSSW50NjQgYVRhcmdldCwKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZhY2VzL2h0
bWwvbnNJRE9NSFRNTFZpZGVvRWxlbWVudC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURP
TUhUTUxWaWRlb0VsZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRN
TFZpZGVvRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MVmlk
ZW9FbGVtZW50LmlkbApAQCAtNDMsMTggKzQzLDMyIEBACiAgKiA8dmlkZW8+IGVsZW1lbnQuCiAg
KgogICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBpbnRlcmZhY2UsIHBsZWFzZSBzZWUK
ICAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3Zp
ZGVvCiAgKgogICogQHN0YXR1cyBVTkRFUl9ERVZFTE9QTUVOVAogICovCiAKLVtzY3JpcHRhYmxl
LCB1dWlkKGVkZjQ2OGRjLTQyZWItNDQ5NC05MjBiLTU2YTMxNTE3MjY0MCldCitbc2NyaXB0YWJs
ZSwgdXVpZCg4YTJlNTc1Ni1lOWEzLTQwNGYtOTU5Mi00ZTViNTgzMGRlODUpXQogaW50ZXJmYWNl
IG5zSURPTUhUTUxWaWRlb0VsZW1lbnQgOiBuc0lET01IVE1MTWVkaWFFbGVtZW50CiB7CiAgICAg
ICAgICAgIGF0dHJpYnV0ZSBsb25nIHdpZHRoOyAKICAgICAgICAgICAgYXR0cmlidXRlIGxvbmcg
aGVpZ2h0OwogICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB2aWRlb1dpZHRoOwog
ICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB2aWRlb0hlaWdodDsKICAgICAgICAg
ICAgYXR0cmlidXRlIERPTVN0cmluZyBwb3N0ZXI7CisgICAgICAgICAgIAorICAvLyBBIGNvdW50
IG9mIHRoZSBudW1iZXIgb2YgdmlkZW8gZnJhbWVzIHRoYXQgaGF2ZSBkZW11eGVkIGZyb20gdGhl
IG1lZGlhCisgIC8vIHJlc291cmNlLiBJZiB3ZSB3ZXJlIHBsYXlpbmcgcGVyZmVjdGx5LCB3ZSdk
IGJlIGFibGUgdG8gcGFpbnQgdGhpcyBtYW55CisgIC8vIGZyYW1lcy4KKyAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgbW96UGFyc2VkRnJhbWVzOworCisgIC8vIEEgY291bnQgb2Yg
dGhlIG51bWJlciBvZiBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gZGVjb2RlZC4gV2UgbWF5IGRyb3AK
KyAgLy8gZnJhbWVzIGlmIHRoZSBkZWNvZGUgaXMgdGFraW5nIHRvbyBtdWNoIHRpbWUuCisgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIG1vekRlY29kZWRGcmFtZXM7CisKKyAgLy8g
QSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiBwcmVzZW50ZWQg
dG8gdGhlIHJlbmRlcmluZworICAvLyBwaXBlbGluZS4gV2UgbWF5IGRyb3AgZnJhbWVzIGlmIHRo
ZXkgYXJyaXZlIGxhdGUgYXQgdGhlIHJlbmRlcmVyLgorICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBtb3pQcmVzZW50ZWRGcmFtZXM7CisKIH07CiAK
</data>
<flag name="review"
          id="431525"
          type_id="937"
          status="+"
          setter="kinetik"
    />
    <flag name="superreview"
          id="431526"
          type_id="5"
          status="+"
          setter="roc"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>515799</attachid>
            <date>2011-02-28 17:47:51 -0800</date>
            <delta_ts>2011-02-28 17:47:51 -0800</delta_ts>
            <desc>Patch: Handle multiple frames per chunk per packet in WebM playback statistics.</desc>
            <filename>580531-webmreader-chunking.patch</filename>
            <type>text/plain</type>
            <size>1157</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgZWM3MDg5ZjQzNmFiYzAxZTU0ZTRlODVlMWZlODU2ZGM4NmNlMWY4MgpC
dWcgNTgwNTMxIC0gSGFuZGxlIG11bHRpcGxlIGZyYW1lcyBwZXIgY2h1bmsgcGVyIHBhY2tldCBp
biBXZWJNIHBsYXliYWNrIHN0YXRpc3RpY3MuIHI9a2luZXRpawoKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvbWVkaWEvd2VibS9uc1dlYk1SZWFkZXIuY3BwIGIvY29udGVudC9tZWRpYS93ZWJtL25zV2Vi
TVJlYWRlci5jcHAKLS0tIGEvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAKKysr
IGIvY29udGVudC9tZWRpYS93ZWJtL25zV2ViTVJlYWRlci5jcHAKQEAgLTY3OCwyMCArNjc4LDIw
IEBAIFBSQm9vbCBuc1dlYk1SZWFkZXI6OkRlY29kZVZpZGVvRnJhbWUoUFIKICAgICBpZiAociA9
PSAtMSkgewogICAgICAgcmV0dXJuIFBSX0ZBTFNFOwogICAgIH0KIAogICAgIHZweF9jb2RlY19z
dHJlYW1faW5mb190IHNpOwogICAgIG1lbXNldCgmc2ksIDAsIHNpemVvZihzaSkpOwogICAgIHNp
LnN6ID0gc2l6ZW9mKHNpKTsKICAgICB2cHhfY29kZWNfcGVla19zdHJlYW1faW5mbygmdnB4X2Nv
ZGVjX3ZwOF9keF9hbGdvLCBkYXRhLCBsZW5ndGgsICZzaSk7Ci0gICAgaWYgKChhS2V5ZnJhbWVT
a2lwICYmICFzaS5pc19rZikgfHwgKGFLZXlmcmFtZVNraXAgJiYgc2kuaXNfa2YgJiYgdHN0YW1w
X21zIDwgYVRpbWVUaHJlc2hvbGQpKSB7Ci0gICAgICBhS2V5ZnJhbWVTa2lwID0gUFJfVFJVRTsK
KyAgICBpZiAoYUtleWZyYW1lU2tpcCAmJiAoIXNpLmlzX2tmIHx8IHRzdGFtcF9tcyA8IGFUaW1l
VGhyZXNob2xkKSkgeworICAgICAgLy8gU2tpcHBpbmcgdG8gbmV4dCBrZXlmcmFtZS4uLgogICAg
ICAgcGFyc2VkKys7IC8vIEFzc3VtZSAxIGZyYW1lIHBlciBjaHVuay4KLSAgICAgIGJyZWFrOwor
ICAgICAgY29udGludWU7CiAgICAgfQogCiAgICAgaWYgKGFLZXlmcmFtZVNraXAgJiYgc2kuaXNf
a2YpIHsKICAgICAgIGFLZXlmcmFtZVNraXAgPSBQUl9GQUxTRTsKICAgICB9CiAKICAgICBpZiAo
dnB4X2NvZGVjX2RlY29kZSgmbVZQOCwgZGF0YSwgbGVuZ3RoLCBOVUxMLCAwKSkgewogICAgICAg
cmV0dXJuIFBSX0ZBTFNFOwo=
</data>
<flag name="review"
          id="431784"
          type_id="937"
          status="+"
          setter="chris"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>516082</attachid>
            <date>2011-03-01 16:47:38 -0800</date>
            <delta_ts>2011-03-01 17:56:44 -0800</delta_ts>
            <desc>Patch: add paint time to Images</desc>
            <filename>580531-gfx-paint-time.patch</filename>
            <type>text/plain</type>
            <size>15468</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgYmFmY2JmMDhjNWI4YmUwNzViMjYwMjU5MDA1ZGZiMDRlYzdmZTIxNwpC
dWcgNTgwNTMxIC0gUmVjb3JkIGZpcnN0IHBhaW50IHRpbWUgYW5kIG51bWJlciBvZiBpbWFnZXMg
cGFpbnRlZCBpbiBJbWFnZUNvbnRhaW5lci4gcj0/CgpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9J
bWFnZUxheWVycy5oIGIvZ2Z4L2xheWVycy9JbWFnZUxheWVycy5oCi0tLSBhL2dmeC9sYXllcnMv
SW1hZ2VMYXllcnMuaAorKysgYi9nZngvbGF5ZXJzL0ltYWdlTGF5ZXJzLmgKQEAgLTM0LDE2ICsz
NCwxNyBAQAogICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0
aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaWZu
ZGVmIEdGWF9JTUFHRUxBWUVSX0gKICNkZWZpbmUgR0ZYX0lNQUdFTEFZRVJfSAogCiAjaW5jbHVk
ZSAiTGF5ZXJzLmgiCisjaW5jbHVkZSAibW96aWxsYS9UaW1lU3RhbXAuaCIKIAogI2luY2x1ZGUg
ImdmeFBhdHRlcm4uaCIKICNpbmNsdWRlICJuc1RocmVhZFV0aWxzLmgiCiAjaW5jbHVkZSAibnND
b3JlQW5pbWF0aW9uU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgbW96aWxsYSB7CiBuYW1lc3BhY2Ug
bGF5ZXJzIHsKIApAQCAtMTA1LDM4ICsxMDYsNjEgQEAgcHVibGljOgogICAgICAqIEl0IHdyYXBz
IGFuIElPU3VyZmFjZSBvYmplY3QgYW5kIGJpbmRzIGl0IGRpcmVjdGx5IHRvIGEgR0wgdGV4dHVy
ZS4KICAgICAgKi8KICAgICBNQUNfSU9fU1VSRkFDRQogICB9OwogCiAgIEZvcm1hdCBHZXRGb3Jt
YXQoKSB7IHJldHVybiBtRm9ybWF0OyB9CiAgIHZvaWQqIEdldEltcGxEYXRhKCkgeyByZXR1cm4g
bUltcGxEYXRhOyB9CiAKKyAgLyoqCisgICAqIFJldHVybiBQUl9UUlVFIGlmIHRoaXMgaW1hZ2Ug
aGFzIGJlZW4gcGFpbnRlZCBhdCBsZWFzdCBvbmNlLgorICAgKiBDYWxsIG9uIG1haW4gdGhyZWFk
IG9ubHkuCisgICAqLworICBQUkJvb2wgSGFzQmVlblBhaW50ZWQoKSBjb25zdCB7CisgICAgTlNf
UFJFQ09ORElUSU9OKE5TX0lzTWFpblRocmVhZCgpLCAiTXVzdCBiZSBjYWxsZWQgb24gbWFpbiB0
aHJlYWQiKTsKKyAgICByZXR1cm4gbVBhaW50ZWQ7CisgIH0KKworICAvKioKKyAgICogTWFya3Mg
dGhpcyBpbWFnZSBhcyBoYXZpbmcgYmVlbiBwYWludGVkLgorICAgKiBDYWxsIG9uIG1haW4gdGhy
ZWFkIG9ubHkuCisgICAqLworICB2b2lkIE1hcmtQYWludGVkKCkgeworICAgIE5TX1BSRUNPTkRJ
VElPTihOU19Jc01haW5UaHJlYWQoKSwgIk11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFkIik7
CisgICAgbVBhaW50ZWQgPSBQUl9UUlVFOworICB9CisKIHByb3RlY3RlZDoKICAgSW1hZ2Uodm9p
ZCogYUltcGxEYXRhLCBGb3JtYXQgYUZvcm1hdCkgOgogICAgIG1JbXBsRGF0YShhSW1wbERhdGEp
LAotICAgIG1Gb3JtYXQoYUZvcm1hdCkKKyAgICBtRm9ybWF0KGFGb3JtYXQpLAorICAgIG1QYWlu
dGVkKFBSX0ZBTFNFKQogICB7fQogCiAgIHZvaWQqIG1JbXBsRGF0YTsKICAgRm9ybWF0IG1Gb3Jt
YXQ7CisKKyAgLy8gUFJfVFJVRSBpZiB0aGUgaW1hZ2UgaGFzIGJlZW4gcGFpbnRlZCBhdCBsZWFz
dCBvbmNlLgorICAvLyBBY2Nlc3NlZCBvbiBtYWluIHRocmVhZCBvbmx5LgorICBQUkJvb2wgbVBh
aW50ZWQ7CiB9OwogCiAvKioKICAqIEEgY2xhc3MgdGhhdCBtYW5hZ2VzIEltYWdlcyBmb3IgYW4g
SW1hZ2VMYXllci4gVGhlIG9ubHkgcmVhc29uCiAgKiB3ZSBuZWVkIGEgc2VwYXJhdGUgY2xhc3Mg
aGVyZSBpcyB0aGF0IEltYWdlTGF5ZXJzIGFyZW4ndCB0aHJlYWRzYWZlCiAgKiAoYmVjYXVzZSBs
YXllcnMgY2FuIG9ubHkgYmUgdXNlZCBvbiB0aGUgbWFpbiB0aHJlYWQpIGFuZCB3ZSB3YW50IHRv
CiAgKiBiZSBhYmxlIHRvIHNldCB0aGUgY3VycmVudCBJbWFnZSBmcm9tIGFueSB0aHJlYWQsIHRv
IGZhY2lsaXRhdGUKICAqIHZpZGVvIHBsYXliYWNrIHdpdGhvdXQgaW52b2x2aW5nIHRoZSBtYWlu
IHRocmVhZCwgZm9yIGV4YW1wbGUuCiAgKi8KIGNsYXNzIFRIRUJFU19BUEkgSW1hZ2VDb250YWlu
ZXIgewogICBUSEVCRVNfSU5MSU5FX0RFQ0xfVEhSRUFEU0FGRV9SRUZDT1VOVElORyhJbWFnZUNv
bnRhaW5lcikKIAogcHVibGljOgotICBJbWFnZUNvbnRhaW5lcigpIHt9CisgIEltYWdlQ29udGFp
bmVyKCkgOiBtUGFpbnRDb3VudCgwKSB7fQogICB2aXJ0dWFsIH5JbWFnZUNvbnRhaW5lcigpIHt9
CiAKICAgLyoqCiAgICAqIENyZWF0ZSBhbiBJbWFnZSBpbiBvbmUgb2YgdGhlIGdpdmVuIGZvcm1h
dHMuCiAgICAqIFBpY2tzIHRoZSAiYmVzdCIgZm9ybWF0IGZyb20gdGhlIGxpc3QgYW5kIGNyZWF0
ZXMgYW4gSW1hZ2Ugb2YgdGhhdAogICAgKiBmb3JtYXQuCiAgICAqIFJldHVybnMgbnVsbCBpZiB0
aGlzIGJhY2tlbmQgZG9lcyBub3Qgc3VwcG9ydCBhbnkgb2YgdGhlIGZvcm1hdHMuCiAgICAqLwpA
QCAtMjA2LDIwICsyMzAsNTIgQEAgcHVibGljOgogCiAgIC8qKgogICAgKiBHZXQgdGhlIGxheWVy
IG1hbmFnZXIgdHlwZSB0aGlzIGltYWdlIGNvbnRhaW5lciB3YXMgY3JlYXRlZCB3aXRoLAogICAg
KiBwcmVzdW1hYmx5IGl0cyB1c2VycyBtaWdodCB3YW50IHRvIGRvIHNvbWV0aGluZyBzcGVjaWFs
IGlmIHR5cGVzIGRvIG5vdAogICAgKiBtYXRjaC4KICAgICovCiAgIHZpcnR1YWwgTGF5ZXJNYW5h
Z2VyOjpMYXllcnNCYWNrZW5kIEdldEJhY2tlbmRUeXBlKCkgPSAwOwogCisgIC8qKgorICAgKiBS
ZXR1cm5zIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBjdXJyZW50bHkgY29udGFpbmVkIGltYWdlIHdh
cyBmaXJzdAorICAgKiBwYWludGVkLiAgVGhpcyBpcyByZXNldCBldmVyeSB0aW1lIGEgbmV3IGlt
YWdlIGlzIHNldCBhcyB0aGUgY3VycmVudAorICAgKiBpbWFnZS4gIE5vdGUgdGhpcyBtYXkgcmV0
dXJuIGEgbnVsbCB0aW1lc3RhbXAgaWYgdGhlIGN1cnJlbnQgaW1hZ2UKKyAgICogaGFzIG5vdCB5
ZXQgYmVlbiBwYWludGVkLiAgVGhyZWFkc2FmZS4KKyAgICovCisgIHZpcnR1YWwgVGltZVN0YW1w
IEdldFBhaW50VGltZSgpID0gMDsKKworICAvKioKKyAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9m
IGltYWdlcyB3aGljaCBoYXZlIGJlZW4gY29udGFpbmVkIGluIHRoaXMgY29udGFpbmVyCisgICAq
IGFuZCBwYWludGVkIGF0IGxlYXN0IG9uY2UuICBUaHJlYWRzYWZlLgorICAgKi8KKyAgdmlydHVh
bCBQUlVpbnQzMiBHZXRQYWludENvdW50KCkgPSAwOworCisgIC8qKgorICAgKiBOb3RpZmllcyB0
aGUgY29udGFpbmVyIHRoYXQgYUltYWdlIGhhcyBiZWVuIHBhaW50ZWQuICBOb3RlIHdlIG11c3Qg
cGFzcworICAgKiBpbiBhIHBvaW50ZXIgdG8gdGhlIGltYWdlIHRoYXQgaGFzIGJlZW4gcGFpbnRl
ZCwgYXMgdGhlIGN1cnJlbnQgaW1hZ2UKKyAgICogY2FuIGNoYW5nZSB3aGlsZSB3ZSdyZSByZW5k
ZXJpbmcsIGFuZCBpbiB0aGF0IGNhc2Ugd2UgZG9uJ3Qgd2FudCB0bworICAgKiByZWNvcmQgdGhl
IHBhaW50IHRpbWUgb2YgdGhlIGp1c3QgcGFpbnRlZCBpbWFnZSBhcyB0aGUgcGFpbnQgdGltZSBv
ZiB0aGUKKyAgICogY3VycmVudCBpbWFnZS4gIFRocmVhZHNhZmUuCisgICAqLworICB2aXJ0dWFs
IHZvaWQgTm90aWZ5UGFpbnRlZEltYWdlKEltYWdlKiBhSW1hZ2UpID0gMDsKKwogcHJvdGVjdGVk
OgogICBMYXllck1hbmFnZXIqIG1NYW5hZ2VyOwogCi0gIEltYWdlQ29udGFpbmVyKExheWVyTWFu
YWdlciogYU1hbmFnZXIpIDogbU1hbmFnZXIoYU1hbmFnZXIpIHt9CisgIEltYWdlQ29udGFpbmVy
KExheWVyTWFuYWdlciogYU1hbmFnZXIpIDogbU1hbmFnZXIoYU1hbmFnZXIpLCBtUGFpbnRDb3Vu
dCgwKSB7fQorCisgIC8vIE51bWJlciBvZiBjb250aWFuZWQgaW1hZ2VzIHRoYXQgaGF2ZSBiZWVu
IHBhaW50ZWQgYXQgbGVzdCBvbmNlLiAgSXQncyB1cAorICAvLyB0byB0aGUgSW1hZ2VDb250YWlu
ZXIgaW1wbGVtZW50YXRpb24gdG8gZW5zdXJlIGFjY2Vzc2VzIHRvIHRoaXMgYXJlCisgIC8vIHRo
cmVhZHNhZmUuCisgIFBSVWludDMyIG1QYWludENvdW50OworCisgIC8vIFRpbWUgc3RhbXAgYXQg
d2hpY2ggdGhlIGN1cnJlbnQgaW1hZ2Ugd2FzIGZpcnN0IHBhaW50ZWQuICBJdCdzIHVwIHRvIHRo
ZQorICAvLyBJbWFnZUNvbnRhaW5lciBpbXBsZW1lbnRhdGlvbiB0byBlbnN1cmUgYWNjZXNzZXMg
dG8gdGhpcyBhcmUgdGhyZWFkc2FmZS4KKyAgVGltZVN0YW1wIG1QYWludFRpbWU7CiB9OwogCiAv
KioKICAqIEEgTGF5ZXIgd2hpY2ggcmVuZGVycyBhbiBJbWFnZS4KICAqLwogY2xhc3MgVEhFQkVT
X0FQSSBJbWFnZUxheWVyIDogcHVibGljIExheWVyIHsKIHB1YmxpYzoKICAgLyoqCmRpZmYgLS1n
aXQgYS9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljSW1hZ2VzLmNwcCBiL2dmeC9sYXllcnMvYmFzaWMv
QmFzaWNJbWFnZXMuY3BwCi0tLSBhL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNJbWFnZXMuY3BwCisr
KyBiL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNJbWFnZXMuY3BwCkBAIC0zMDIsMTYgKzMwMiwyMCBA
QCBwdWJsaWM6CiAgIHZpcnR1YWwgYWxyZWFkeV9BZGRSZWZlZDxJbWFnZT4gR2V0Q3VycmVudElt
YWdlKCk7CiAgIHZpcnR1YWwgYWxyZWFkeV9BZGRSZWZlZDxnZnhBU3VyZmFjZT4gR2V0Q3VycmVu
dEFzU3VyZmFjZShnZnhJbnRTaXplKiBhU2l6ZSk7CiAgIHZpcnR1YWwgZ2Z4SW50U2l6ZSBHZXRD
dXJyZW50U2l6ZSgpOwogICB2aXJ0dWFsIFBSQm9vbCBTZXRMYXllck1hbmFnZXIoTGF5ZXJNYW5h
Z2VyICphTWFuYWdlcik7CiAgIHZpcnR1YWwgdm9pZCBTZXRTY2FsZUhpbnQoY29uc3QgZ2Z4SW50
U2l6ZSYgYVNjYWxlSGludCk7CiAgIHZvaWQgU2V0T2Zmc2NyZWVuRm9ybWF0KGdmeEltYWdlRm9y
bWF0IGFGb3JtYXQpIHsgbU9mZnNjcmVlbkZvcm1hdCA9IGFGb3JtYXQ7IH0KICAgdmlydHVhbCBM
YXllck1hbmFnZXI6OkxheWVyc0JhY2tlbmQgR2V0QmFja2VuZFR5cGUoKSB7IHJldHVybiBMYXll
ck1hbmFnZXI6OkxBWUVSU19CQVNJQzsgfQogCisgIFRpbWVTdGFtcCBHZXRQYWludFRpbWUoKTsK
KyAgUFJVaW50MzIgR2V0UGFpbnRDb3VudCgpOworICB2b2lkIE5vdGlmeVBhaW50ZWRJbWFnZShJ
bWFnZSogYUltYWdlKTsKKwogcHJvdGVjdGVkOgogICBNb25pdG9yIG1Nb25pdG9yOwogICBuc1Jl
ZlB0cjxJbWFnZT4gbUltYWdlOwogICBnZnhJbnRTaXplIG1TY2FsZUhpbnQ7CiAgIGdmeEltYWdl
Rm9ybWF0IG1PZmZzY3JlZW5Gb3JtYXQ7CiB9OwogCiAvKioKQEAgLTM0MCwyMCArMzQ0LDQ1IEBA
IEJhc2ljSW1hZ2VDb250YWluZXI6OkNyZWF0ZUltYWdlKGNvbnN0IEkKICAgfSBlbHNlIGlmIChG
b3JtYXRJbkxpc3QoYUZvcm1hdHMsIGFOdW1Gb3JtYXRzLCBJbWFnZTo6UExBTkFSX1lDQkNSKSkg
ewogICAgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKICAgICBpbWFnZSA9IG5ldyBC
YXNpY1BsYW5hcllDYkNySW1hZ2UobVNjYWxlSGludCk7CiAgICAgc3RhdGljX2Nhc3Q8QmFzaWNQ
bGFuYXJZQ2JDckltYWdlKj4oaW1hZ2UuZ2V0KCkpLT5TZXRPZmZzY3JlZW5Gb3JtYXQobU9mZnNj
cmVlbkZvcm1hdCk7CiAgIH0KICAgcmV0dXJuIGltYWdlLmZvcmdldCgpOwogfQogCitUaW1lU3Rh
bXAKK0Jhc2ljSW1hZ2VDb250YWluZXI6OkdldFBhaW50VGltZSgpCit7CisgIE1vbml0b3JBdXRv
RW50ZXIgbW9uKG1Nb25pdG9yKTsKKyAgcmV0dXJuIG1QYWludFRpbWU7Cit9CisKK1BSVWludDMy
CitCYXNpY0ltYWdlQ29udGFpbmVyOjpHZXRQYWludENvdW50KCkKK3sKKyAgTW9uaXRvckF1dG9F
bnRlciBtb24obU1vbml0b3IpOworICByZXR1cm4gbVBhaW50Q291bnQ7Cit9CisKK3ZvaWQKK0Jh
c2ljSW1hZ2VDb250YWluZXI6Ok5vdGlmeVBhaW50ZWRJbWFnZShJbWFnZSogYUltYWdlKQorewor
ICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CisgIG1QYWludENvdW50Kys7CisgIGlm
IChhSW1hZ2UgPT0gbUltYWdlKSB7CisgICAgbVBhaW50VGltZSA9IFRpbWVTdGFtcDo6Tm93KCk7
CisgIH0KK30KKwogdm9pZAogQmFzaWNJbWFnZUNvbnRhaW5lcjo6U2V0Q3VycmVudEltYWdlKElt
YWdlKiBhSW1hZ2UpCiB7CiAgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKKyAgbVBh
aW50VGltZSA9IFRpbWVTdGFtcCgpOwogICBtSW1hZ2UgPSBhSW1hZ2U7CiB9CiAKIGFscmVhZHlf
QWRkUmVmZWQ8SW1hZ2U+CiBCYXNpY0ltYWdlQ29udGFpbmVyOjpHZXRDdXJyZW50SW1hZ2UoKQog
ewogICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAgIG5zUmVmUHRyPEltYWdlPiBp
bWFnZSA9IG1JbWFnZTsKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNMYXllcnMu
Y3BwIGIvZ2Z4L2xheWVycy9iYXNpYy9CYXNpY0xheWVycy5jcHAKLS0tIGEvZ2Z4L2xheWVycy9i
YXNpYy9CYXNpY0xheWVycy5jcHAKKysrIGIvZ2Z4L2xheWVycy9iYXNpYy9CYXNpY0xheWVycy5j
cHAKQEAgLTcyOCwxNiArNzI4LDE4IEBAIEJhc2ljSW1hZ2VMYXllcjo6UGFpbnQoZ2Z4Q29udGV4
dCogYUNvbnQKIAogYWxyZWFkeV9BZGRSZWZlZDxnZnhQYXR0ZXJuPgogQmFzaWNJbWFnZUxheWVy
OjpHZXRBbmRQYWludEN1cnJlbnRJbWFnZShnZnhDb250ZXh0KiBhQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYU9wYWNpdHkpCiB7CiAgIGlm
ICghbUNvbnRhaW5lcikKICAgICByZXR1cm4gbnNudWxsOwogCisgIG5zUmVmUHRyPEltYWdlPiBp
bWFnZSA9IG1Db250YWluZXItPkdldEN1cnJlbnRJbWFnZSgpOworCiAgIG5zUmVmUHRyPGdmeEFT
dXJmYWNlPiBzdXJmYWNlID0gbUNvbnRhaW5lci0+R2V0Q3VycmVudEFzU3VyZmFjZSgmbVNpemUp
OwogICBpZiAoIXN1cmZhY2UpIHsKICAgICByZXR1cm4gbnNudWxsOwogICB9CiAKICAgbnNSZWZQ
dHI8Z2Z4UGF0dGVybj4gcGF0ID0gbmV3IGdmeFBhdHRlcm4oc3VyZmFjZSk7CiAgIGlmICghcGF0
KSB7CiAgICAgcmV0dXJuIG5zbnVsbDsKQEAgLTc0NywxNyArNzQ5LDIzIEBAIEJhc2ljSW1hZ2VM
YXllcjo6R2V0QW5kUGFpbnRDdXJyZW50SW1hZ2UKIAogICAvLyBUaGUgdmlzaWJsZSByZWdpb24g
Y2FuIGV4dGVuZCBvdXRzaWRlIHRoZSBpbWFnZS4gIElmIHdlJ3JlIG5vdAogICAvLyB0aWxpbmcs
IHdlIGRvbid0IHdhbnQgdG8gZHJhdyBpbnRvIHRoYXQgYXJlYSwgc28ganVzdCBkcmF3IHdpdGhp
bgogICAvLyB0aGUgaW1hZ2UgYm91bmRzLgogICBjb25zdCBuc0ludFJlY3QqIHRpbGVTcmNSZWN0
ID0gR2V0VGlsZVNvdXJjZVJlY3QoKTsKICAgUGFpbnRDb250ZXh0KHBhdCwKICAgICAgICAgICAg
ICAgIHRpbGVTcmNSZWN0ID8gR2V0VmlzaWJsZVJlZ2lvbigpIDogbnNJbnRSZWdpb24obnNJbnRS
ZWN0KDAsIDAsIG1TaXplLndpZHRoLCBtU2l6ZS5oZWlnaHQpKSwKICAgICAgICAgICAgICAgIHRp
bGVTcmNSZWN0LAotICAgICAgICAgICAgICAgYU9wYWNpdHksIGFDb250ZXh0KTsgCisgICAgICAg
ICAgICAgICBhT3BhY2l0eSwgYUNvbnRleHQpOworCisgIGlmICghaW1hZ2UtPkhhc0JlZW5QYWlu
dGVkKCkpIHsKKyAgICBpbWFnZS0+TWFya1BhaW50ZWQoKTsKKyAgICBHZXRDb250YWluZXIoKS0+
Tm90aWZ5UGFpbnRlZEltYWdlKGltYWdlKTsKKyAgfQorCiAgIHJldHVybiBwYXQuZm9yZ2V0KCk7
CiB9CiAKIC8qc3RhdGljKi8gdm9pZAogQmFzaWNJbWFnZUxheWVyOjpQYWludENvbnRleHQoZ2Z4
UGF0dGVybiogYVBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c0ludFJlZ2lvbiYgYVZpc2libGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc0ludFJlY3QqIGFUaWxlU291cmNlUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IGFPcGFjaXR5LApkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9kM2QxMC9JbWFnZUxh
eWVyRDNEMTAuY3BwIGIvZ2Z4L2xheWVycy9kM2QxMC9JbWFnZUxheWVyRDNEMTAuY3BwCi0tLSBh
L2dmeC9sYXllcnMvZDNkMTAvSW1hZ2VMYXllckQzRDEwLmNwcAorKysgYi9nZngvbGF5ZXJzL2Qz
ZDEwL0ltYWdlTGF5ZXJEM0QxMC5jcHAKQEAgLTEyMCwxOCArMTIwLDQwIEBAIEltYWdlQ29udGFp
bmVyRDNEMTA6OkNyZWF0ZUltYWdlKGNvbnN0IEkKICAgfQogICByZXR1cm4gaW1nLmZvcmdldCgp
OwogfQogCiB2b2lkCiBJbWFnZUNvbnRhaW5lckQzRDEwOjpTZXRDdXJyZW50SW1hZ2UoSW1hZ2Ug
KmFJbWFnZSkKIHsKICAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3RpdmVJbWFnZUxvY2spOworICAK
KyAgbVBhaW50VGltZSA9IFRpbWVTdGFtcCgpOworICBtQWN0aXZlSW1hZ2UgPSBhSW1hZ2U7Cit9
CiAKLSAgbUFjdGl2ZUltYWdlID0gYUltYWdlOworVGltZVN0YW1wIEltYWdlQ29udGFpbmVyRDNE
MTA6OkdldFBhaW50VGltZSgpIHsKKyAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3RpdmVJbWFnZUxv
Y2spOworCisgIHJldHVybiBtUGFpbnRUaW1lOworfQorCitQUlVpbnQzMiBJbWFnZUNvbnRhaW5l
ckQzRDEwOjpHZXRQYWludENvdW50KCkgeworICBNdXRleEF1dG9Mb2NrIGxvY2sobUFjdGl2ZUlt
YWdlTG9jayk7CisKKyAgcmV0dXJuIG1QYWludENvdW50OworfQorCit2b2lkIEltYWdlQ29udGFp
bmVyRDNEMTA6Ok5vdGlmeVBhaW50ZWRJbWFnZShJbWFnZSogYUltYWdlKSB7CisgIE11dGV4QXV0
b0xvY2sgbG9jayhtQWN0aXZlSW1hZ2VMb2NrKTsKKworICBtUGFpbnRDb3VudCsrOworICBpZiAo
YUltYWdlID09IG1BY3RpdmVJbWFnZSkgeworICAgIG1QYWludFRpbWUgPSBUaW1lU3RhbXA6Ok5v
dygpOworICB9CiB9CiAKIGFscmVhZHlfQWRkUmVmZWQ8SW1hZ2U+CiBJbWFnZUNvbnRhaW5lckQz
RDEwOjpHZXRDdXJyZW50SW1hZ2UoKQogewogICBNdXRleEF1dG9Mb2NrIGxvY2sobUFjdGl2ZUlt
YWdlTG9jayk7CiAKICAgbnNSZWZQdHI8SW1hZ2U+IHJldHZhbCA9IG1BY3RpdmVJbWFnZTsKQEAg
LTM0OSwxNiArMzcxLDIxIEBAIEltYWdlTGF5ZXJEM0QxMDo6UmVuZGVyTGF5ZXIoKQogICAgICAg
ICAoZmxvYXQpMCwKICAgICAgICAgKGZsb2F0KXl1dkltYWdlLT5tU2l6ZS53aWR0aCwKICAgICAg
ICAgKGZsb2F0KXl1dkltYWdlLT5tU2l6ZS5oZWlnaHQpCiAgICAgICApOwogICB9CiAKICAgdGVj
aG5pcXVlLT5HZXRQYXNzQnlJbmRleCgwKS0+QXBwbHkoMCk7CiAgIGRldmljZSgpLT5EcmF3KDQs
IDApOworCisgIGlmICghaW1hZ2UtPkhhc0JlZW5QYWludGVkKCkpIHsKKyAgICBpbWFnZS0+TWFy
a1BhaW50ZWQoKTsKKyAgICBHZXRDb250YWluZXIoKS0+Tm90aWZ5UGFpbnRlZEltYWdlKGltYWdl
KTsKKyAgfQogfQogCiBQbGFuYXJZQ2JDckltYWdlRDNEMTA6OlBsYW5hcllDYkNySW1hZ2VEM0Qx
MChJRDNEMTBEZXZpY2UxICphRGV2aWNlKQogICA6IFBsYW5hcllDYkNySW1hZ2Uoc3RhdGljX2Nh
c3Q8SW1hZ2VEM0QxMCo+KHRoaXMpKQogICAsIG1EZXZpY2UoYURldmljZSkKICAgLCBtSGFzRGF0
YShQUl9GQUxTRSkKIHsKIH0KZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNkMTAvSW1hZ2VMYXll
ckQzRDEwLmggYi9nZngvbGF5ZXJzL2QzZDEwL0ltYWdlTGF5ZXJEM0QxMC5oCi0tLSBhL2dmeC9s
YXllcnMvZDNkMTAvSW1hZ2VMYXllckQzRDEwLmgKKysrIGIvZ2Z4L2xheWVycy9kM2QxMC9JbWFn
ZUxheWVyRDNEMTAuaApAQCAtNjUsMTYgKzY1LDIwIEBAIHB1YmxpYzoKIAogICB2aXJ0dWFsIFBS
Qm9vbCBTZXRMYXllck1hbmFnZXIoTGF5ZXJNYW5hZ2VyICphTWFuYWdlcik7CiAKICAgdmlydHVh
bCBMYXllck1hbmFnZXI6OkxheWVyc0JhY2tlbmQgR2V0QmFja2VuZFR5cGUoKSB7IHJldHVybiBM
YXllck1hbmFnZXI6OkxBWUVSU19EM0QxMDsgfQogCiAgIElEM0QxMERldmljZTEgKmRldmljZSgp
IHsgcmV0dXJuIG1EZXZpY2U7IH0KICAgdm9pZCBTZXREZXZpY2UoSUQzRDEwRGV2aWNlMSAqYURl
dmljZSkgeyBtRGV2aWNlID0gYURldmljZTsgfQogCisgIFRpbWVTdGFtcCBHZXRQYWludFRpbWUo
KTsKKyAgUFJVaW50MzIgR2V0UGFpbnRDb3VudCgpOworICB2b2lkIE5vdGlmeVBhaW50ZWRJbWFn
ZShJbWFnZSogYUltYWdlKTsKKwogcHJpdmF0ZToKICAgdHlwZWRlZiBtb3ppbGxhOjpNdXRleCBN
dXRleDsKIAogICBuc1JlZlB0cjxJbWFnZT4gbUFjdGl2ZUltYWdlOwogICBuc1JlZlB0cjxJRDNE
MTBEZXZpY2UxPiBtRGV2aWNlOwogCiAgIE11dGV4IG1BY3RpdmVJbWFnZUxvY2s7CiB9OwpkaWZm
IC0tZ2l0IGEvZ2Z4L2xheWVycy9kM2Q5L0ltYWdlTGF5ZXJEM0Q5LmNwcCBiL2dmeC9sYXllcnMv
ZDNkOS9JbWFnZUxheWVyRDNEOS5jcHAKLS0tIGEvZ2Z4L2xheWVycy9kM2Q5L0ltYWdlTGF5ZXJE
M0Q5LmNwcAorKysgYi9nZngvbGF5ZXJzL2QzZDkvSW1hZ2VMYXllckQzRDkuY3BwCkBAIC0xNTEs
MjEgKzE1MSw0OSBAQCBJbWFnZUNvbnRhaW5lckQzRDk6OkNyZWF0ZUltYWdlKGNvbnN0IEltCiAg
IGlmIChhRm9ybWF0c1swXSA9PSBJbWFnZTo6UExBTkFSX1lDQkNSKSB7CiAgICAgaW1nID0gbmV3
IFBsYW5hcllDYkNySW1hZ2VEM0Q5KCk7CiAgIH0gZWxzZSBpZiAoYUZvcm1hdHNbMF0gPT0gSW1h
Z2U6OkNBSVJPX1NVUkZBQ0UpIHsKICAgICBpbWcgPSBuZXcgQ2Fpcm9JbWFnZUQzRDkobURldmlj
ZSk7CiAgIH0KICAgcmV0dXJuIGltZy5mb3JnZXQoKTsKIH0KIAorVGltZVN0YW1wCitJbWFnZUNv
bnRhaW5lckQzRDk6OkdldFBhaW50VGltZSgpCit7CisgIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0
aXZlSW1hZ2VMb2NrKTsKKworICByZXR1cm4gbVBhaW50VGltZTsKK30KKworUFJVaW50MzIKK0lt
YWdlQ29udGFpbmVyRDNEOTo6R2V0UGFpbnRDb3VudCgpCit7CisgIE11dGV4QXV0b0xvY2sgbG9j
ayhtQWN0aXZlSW1hZ2VMb2NrKTsKKworICByZXR1cm4gbVBhaW50Q291bnQ7Cit9CisKK3ZvaWQK
K0ltYWdlQ29udGFpbmVyRDNEOTo6Tm90aWZ5UGFpbnRlZEltYWdlKEltYWdlKiBhSW1hZ2UpCit7
CisgIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0aXZlSW1hZ2VMb2NrKTsKKworICBtUGFpbnRDb3Vu
dCsrOworICBpZiAoYUltYWdlID09IG1BY3RpdmVJbWFnZSkgeworICAgIG1QYWludFRpbWUgPSBU
aW1lU3RhbXA6Ok5vdygpOworICB9Cit9CisKIHZvaWQKIEltYWdlQ29udGFpbmVyRDNEOTo6U2V0
Q3VycmVudEltYWdlKEltYWdlICphSW1hZ2UpCiB7CiAgIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0
aXZlSW1hZ2VMb2NrKTsKIAorICBtUGFpbnRUaW1lID0gVGltZVN0YW1wKCk7CiAgIG1BY3RpdmVJ
bWFnZSA9IGFJbWFnZTsKIH0KIAogYWxyZWFkeV9BZGRSZWZlZDxJbWFnZT4KIEltYWdlQ29udGFp
bmVyRDNEOTo6R2V0Q3VycmVudEltYWdlKCkKIHsKICAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3Rp
dmVJbWFnZUxvY2spOwogCkBAIC0zNzAsMTYgKzM5OCwyMSBAQCBJbWFnZUxheWVyRDNEOTo6UmVu
ZGVyTGF5ZXIoKQogICAgIH0KICAgICBkZXZpY2UoKS0+U2V0VGV4dHVyZSgwLCBjYWlyb0ltYWdl
LT5HZXRPckNyZWF0ZVRleHR1cmUoKSk7CiAgICAgZGV2aWNlKCktPkRyYXdQcmltaXRpdmUoRDNE
UFRfVFJJQU5HTEVTVFJJUCwgMCwgMik7CiAgICAgaWYgKG1GaWx0ZXIgPT0gZ2Z4UGF0dGVybjo6
RklMVEVSX05FQVJFU1QpIHsKICAgICAgIGRldmljZSgpLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNE
U0FNUF9NQUdGSUxURVIsIEQzRFRFWEZfTElORUFSKTsKICAgICAgIGRldmljZSgpLT5TZXRTYW1w
bGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKICAgICB9CiAg
IH0KKworICBpZiAoIWltYWdlLT5IYXNCZWVuUGFpbnRlZCgpKSB7CisgICAgaW1hZ2UtPk1hcmtQ
YWludGVkKCk7CisgICAgR2V0Q29udGFpbmVyKCktPk5vdGlmeVBhaW50ZWRJbWFnZShpbWFnZSk7
CisgIH0KIH0KIAogUGxhbmFyWUNiQ3JJbWFnZUQzRDk6OlBsYW5hcllDYkNySW1hZ2VEM0Q5KCkK
ICAgOiBQbGFuYXJZQ2JDckltYWdlKHN0YXRpY19jYXN0PEltYWdlRDNEOSo+KHRoaXMpKQogICAs
IG1IYXNEYXRhKFBSX0ZBTFNFKQogewogfQogCmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL2QzZDkv
SW1hZ2VMYXllckQzRDkuaCBiL2dmeC9sYXllcnMvZDNkOS9JbWFnZUxheWVyRDNEOS5oCi0tLSBh
L2dmeC9sYXllcnMvZDNkOS9JbWFnZUxheWVyRDNEOS5oCisrKyBiL2dmeC9sYXllcnMvZDNkOS9J
bWFnZUxheWVyRDNEOS5oCkBAIC02NSwxNiArNjUsMjAgQEAgcHVibGljOgogCiAgIHZpcnR1YWwg
UFJCb29sIFNldExheWVyTWFuYWdlcihMYXllck1hbmFnZXIgKmFNYW5hZ2VyKTsKIAogICB2aXJ0
dWFsIExheWVyTWFuYWdlcjo6TGF5ZXJzQmFja2VuZCBHZXRCYWNrZW5kVHlwZSgpIHsgcmV0dXJu
IExheWVyTWFuYWdlcjo6TEFZRVJTX0QzRDk7IH0KIAogICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UoKSB7IHJldHVybiBtRGV2aWNlOyB9CiAgIHZvaWQgU2V0RGV2aWNlKElEaXJlY3QzRERldmlj
ZTkgKmFEZXZpY2UpIHsgbURldmljZSA9IGFEZXZpY2U7IH0KIAorICBUaW1lU3RhbXAgR2V0UGFp
bnRUaW1lKCk7CisgIFBSVWludDMyIEdldFBhaW50Q291bnQoKTsKKyAgdm9pZCBOb3RpZnlQYWlu
dGVkSW1hZ2UoSW1hZ2UqIGFJbWFnZSk7CisKIHByaXZhdGU6CiAgIHR5cGVkZWYgbW96aWxsYTo6
TXV0ZXggTXV0ZXg7CiAKICAgbnNSZWZQdHI8SW1hZ2U+IG1BY3RpdmVJbWFnZTsKIAogICBuc1Jl
ZlB0cjxJRGlyZWN0M0REZXZpY2U5PiBtRGV2aWNlOwogCiAgIE11dGV4IG1BY3RpdmVJbWFnZUxv
Y2s7CmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL29wZW5nbC9JbWFnZUxheWVyT0dMLmNwcCBiL2dm
eC9sYXllcnMvb3BlbmdsL0ltYWdlTGF5ZXJPR0wuY3BwCi0tLSBhL2dmeC9sYXllcnMvb3Blbmds
L0ltYWdlTGF5ZXJPR0wuY3BwCisrKyBiL2dmeC9sYXllcnMvb3BlbmdsL0ltYWdlTGF5ZXJPR0wu
Y3BwCkBAIC0yMjMsMjQgKzIyMyw1MiBAQCBJbWFnZUNvbnRhaW5lck9HTDo6Q3JlYXRlSW1hZ2Uo
Y29uc3QgSW1hCiAgIGVsc2UgaWYgKGFGb3JtYXRzWzBdID09IEltYWdlOjpNQUNfSU9fU1VSRkFD
RSkgewogICAgIGltZyA9IG5ldyBNYWNJT1N1cmZhY2VJbWFnZU9HTChzdGF0aWNfY2FzdDxMYXll
ck1hbmFnZXJPR0wqPihtTWFuYWdlcikpOwogICB9CiAjZW5kaWYKIAogICByZXR1cm4gaW1nLmZv
cmdldCgpOwogfQogCitUaW1lU3RhbXAKK0ltYWdlQ29udGFpbmVyT0dMOjpHZXRQYWludFRpbWUo
KQoreworICBNdXRleEF1dG9Mb2NrIGxvY2sobUFjdGl2ZUltYWdlTG9jayk7CisKKyAgcmV0dXJu
IG1QYWludFRpbWU7Cit9CisKK1BSVWludDMyCitJbWFnZUNvbnRhaW5lck9HTDo6R2V0UGFpbnRD
b3VudCgpCit7CisgIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0aXZlSW1hZ2VMb2NrKTsKKworICBy
ZXR1cm4gbVBhaW50Q291bnQ7Cit9CisKK3ZvaWQKK0ltYWdlQ29udGFpbmVyT0dMOjpOb3RpZnlQ
YWludGVkSW1hZ2UoSW1hZ2UqIGFJbWFnZSkKK3sKKyAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3Rp
dmVJbWFnZUxvY2spOworCisgIG1QYWludENvdW50Kys7CisgIGlmIChhSW1hZ2UgPT0gbUFjdGl2
ZUltYWdlKSB7CisgICAgbVBhaW50VGltZSA9IFRpbWVTdGFtcDo6Tm93KCk7CisgIH0KK30KKwog
dm9pZAogSW1hZ2VDb250YWluZXJPR0w6OlNldEN1cnJlbnRJbWFnZShJbWFnZSAqYUltYWdlKQog
ewogICBuc1JlZlB0cjxJbWFnZT4gb2xkSW1hZ2U7CiAKICAgewogICAgIE11dGV4QXV0b0xvY2sg
bG9jayhtQWN0aXZlSW1hZ2VMb2NrKTsKIAorICAgIG1QYWludFRpbWUgPSBUaW1lU3RhbXAoKTsK
ICAgICBvbGRJbWFnZSA9IG1BY3RpdmVJbWFnZS5mb3JnZXQoKTsKICAgICBtQWN0aXZlSW1hZ2Ug
PSBhSW1hZ2U7CiAgIH0KIAogICAvLyBNYWtlIHN1cmUgb2xkSW1hZ2UgaXMgcmVsZWFzZWQgb3V0
c2lkZSB0aGUgbG9jaywgc28gaXQgY2FuIHRha2Ugb3VyCiAgIC8vIGxvY2sgaW4gUmVjeWNsZUJ1
ZmZlcgogfQogCkBAIC00OTYsMTYgKzUyNCwyMCBAQCBJbWFnZUxheWVyT0dMOjpSZW5kZXJMYXll
cihpbnQsCiAgICAgIHByb2dyYW0tPlNldExheWVyT3BhY2l0eShHZXRFZmZlY3RpdmVPcGFjaXR5
KCkpOwogICAgICBwcm9ncmFtLT5TZXRSZW5kZXJPZmZzZXQoYU9mZnNldCk7CiAgICAgIHByb2dy
YW0tPlNldFRleHR1cmVVbml0KDApOwogICAgIAogICAgICBtT0dMTWFuYWdlci0+QmluZEFuZERy
YXdRdWFkKHByb2dyYW0pOwogICAgICBnbCgpLT5mQmluZFRleHR1cmUoTE9DQUxfR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQVJCLCAwKTsKICNlbmRpZgogICB9CisgIGlmICghaW1hZ2UtPkhhc0JlZW5Q
YWludGVkKCkpIHsKKyAgICBpbWFnZS0+TWFya1BhaW50ZWQoKTsKKyAgICBHZXRDb250YWluZXIo
KS0+Tm90aWZ5UGFpbnRlZEltYWdlKGltYWdlKTsKKyAgfQogfQogCiBzdGF0aWMgdm9pZAogSW5p
dFRleHR1cmUoR0xDb250ZXh0KiBhR0wsIEdMdWludCBhVGV4dHVyZSwgR0xlbnVtIGFGb3JtYXQs
IGNvbnN0IGdmeEludFNpemUmIGFTaXplKQogewogICBhR0wtPmZCaW5kVGV4dHVyZShMT0NBTF9H
TF9URVhUVVJFXzJELCBhVGV4dHVyZSk7CiAgIGFHTC0+ZlRleFBhcmFtZXRlcmkoTE9DQUxfR0xf
VEVYVFVSRV8yRCwgTE9DQUxfR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBMT0NBTF9HTF9MSU5FQVIp
OwogICBhR0wtPmZUZXhQYXJhbWV0ZXJpKExPQ0FMX0dMX1RFWFRVUkVfMkQsIExPQ0FMX0dMX1RF
WFRVUkVfTUFHX0ZJTFRFUiwgTE9DQUxfR0xfTElORUFSKTsKZGlmZiAtLWdpdCBhL2dmeC9sYXll
cnMvb3BlbmdsL0ltYWdlTGF5ZXJPR0wuaCBiL2dmeC9sYXllcnMvb3BlbmdsL0ltYWdlTGF5ZXJP
R0wuaAotLS0gYS9nZngvbGF5ZXJzL29wZW5nbC9JbWFnZUxheWVyT0dMLmgKKysrIGIvZ2Z4L2xh
eWVycy9vcGVuZ2wvSW1hZ2VMYXllck9HTC5oCkBAIC0xNTMsMTYgKzE1MywyMCBAQCBwdWJsaWM6
CiAgIHZpcnR1YWwgYWxyZWFkeV9BZGRSZWZlZDxnZnhBU3VyZmFjZT4gR2V0Q3VycmVudEFzU3Vy
ZmFjZShnZnhJbnRTaXplKiBhU2l6ZSk7CiAKICAgdmlydHVhbCBnZnhJbnRTaXplIEdldEN1cnJl
bnRTaXplKCk7CiAKICAgdmlydHVhbCBQUkJvb2wgU2V0TGF5ZXJNYW5hZ2VyKExheWVyTWFuYWdl
ciAqYU1hbmFnZXIpOwogCiAgIHZpcnR1YWwgTGF5ZXJNYW5hZ2VyOjpMYXllcnNCYWNrZW5kIEdl
dEJhY2tlbmRUeXBlKCkgeyByZXR1cm4gTGF5ZXJNYW5hZ2VyOjpMQVlFUlNfT1BFTkdMOyB9CiAK
KyAgVGltZVN0YW1wIEdldFBhaW50VGltZSgpOworICBQUlVpbnQzMiBHZXRQYWludENvdW50KCk7
CisgIHZvaWQgTm90aWZ5UGFpbnRlZEltYWdlKEltYWdlKiBhSW1hZ2UpOworCiBwcml2YXRlOgog
ICB0eXBlZGVmIG1vemlsbGE6Ok11dGV4IE11dGV4OwogCiAgIG5zUmVmUHRyPFJlY3ljbGVCaW4+
IG1SZWN5Y2xlQmluOwogCiAgIC8vIFRoaXMgcHJvdGVjdHMgbUFjdGl2ZUltYWdlCiAgIE11dGV4
IG1BY3RpdmVJbWFnZUxvY2s7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>516083</attachid>
            <date>2011-03-01 16:49:22 -0800</date>
            <delta_ts>2011-03-01 21:19:22 -0800</delta_ts>
            <desc>Patch: Implement mozFrameDelay and mozPaintCount</desc>
            <filename>580531-paint-delay.patch</filename>
            <type>text/plain</type>
            <size>14579</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgYzRkZTM2M2NhNTk3MWFjZWMxNzUyMDU5Mzk3MzRjNmYzOTFjZjY4YgpC
dWcgNTgwNTMxIC0gSW1wbGVtZW50IEhUTUxNZWRpYUVsZW1lbnQubW96UGFpbnRlZEZyYW1lcyBh
bmQgbW96RnJhbWVEZWxheS4gcj0/CgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQv
c3JjL25zSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNI
VE1MVmlkZW9FbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1M
VmlkZW9FbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MVmlk
ZW9FbGVtZW50LmNwcApAQCAtMTk5LDggKzE5OSwyMSBAQCBOU19JTUVUSE9ESU1QIG5zSFRNTFZp
ZGVvRWxlbWVudDo6R2V0TW96CiB9CiAKIE5TX0lNRVRIT0RJTVAgbnNIVE1MVmlkZW9FbGVtZW50
OjpHZXRNb3pQcmVzZW50ZWRGcmFtZXMoUFJVaW50MzIgKmFNb3pQcmVzZW50ZWRGcmFtZXMpCiB7
CiAgIE5TX0FTU0VSVElPTihOU19Jc01haW5UaHJlYWQoKSwgIlNob3VsZCBiZSBvbiBtYWluIHRo
cmVhZC4iKTsKICAgKmFNb3pQcmVzZW50ZWRGcmFtZXMgPSBtRGVjb2RlciA/IG1EZWNvZGVyLT5H
ZXRGcmFtZVN0YXRpc3RpY3MoKS5HZXRQcmVzZW50ZWRGcmFtZXMoKSA6IDA7CiAgIHJldHVybiBO
U19PSzsKIH0KKworTlNfSU1FVEhPRElNUCBuc0hUTUxWaWRlb0VsZW1lbnQ6OkdldE1velBhaW50
ZWRGcmFtZXMoUFJVaW50MzIgKmFNb3pQYWludGVkRnJhbWVzKQoreworICBOU19BU1NFUlRJT04o
TlNfSXNNYWluVGhyZWFkKCksICJTaG91bGQgYmUgb24gbWFpbiB0aHJlYWQuIik7CisgICphTW96
UGFpbnRlZEZyYW1lcyA9ICghbURlY29kZXIgfHwgIUdldEltYWdlQ29udGFpbmVyKCkpID8gMCA6
IEdldEltYWdlQ29udGFpbmVyKCktPkdldFBhaW50Q291bnQoKTsKKyAgcmV0dXJuIE5TX09LOwor
fQorCitOU19JTUVUSE9ESU1QIG5zSFRNTFZpZGVvRWxlbWVudDo6R2V0TW96RnJhbWVEZWxheShk
b3VibGUgKmFNb3pGcmFtZURlbGF5KSB7CisgIE5TX0FTU0VSVElPTihOU19Jc01haW5UaHJlYWQo
KSwgIlNob3VsZCBiZSBvbiBtYWluIHRocmVhZC4iKTsKKyAgKmFNb3pGcmFtZURlbGF5ID0gbURl
Y29kZXIgPyBtRGVjb2Rlci0+R2V0RnJhbWVEZWxheSgpIDogMDsKKyAgcmV0dXJuIE5TX09LOwor
fQpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5l
LmNwcCBiL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZS5jcHAKLS0t
IGEvY29udGVudC9tZWRpYS9uc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lLmNwcAorKysgYi9j
b250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUuY3BwCkBAIC05ODAsMTcg
Kzk4MCwxNyBAQCBuc3Jlc3VsdCBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpSCiAgICAg
ICAgIExvYWRNZXRhZGF0YSgpOwogICAgICAgICBpZiAobVN0YXRlID09IERFQ09ERVJfU1RBVEVf
U0hVVERPV04pIHsKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIFZp
ZGVvRGF0YSogdmlkZW9EYXRhID0gRmluZFN0YXJ0VGltZSgpOwogICAgICAgICBpZiAodmlkZW9E
YXRhKSB7CiAgICAgICAgICAgTW9uaXRvckF1dG9FeGl0IGV4aXRNb24obURlY29kZXItPkdldE1v
bml0b3IoKSk7Ci0gICAgICAgICAgUmVuZGVyVmlkZW9GcmFtZSh2aWRlb0RhdGEpOworICAgICAg
ICAgIFJlbmRlclZpZGVvRnJhbWUodmlkZW9EYXRhLCBUaW1lU3RhbXA6Ok5vdygpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFN0YXJ0IHRoZSBkZWNvZGUgdGhyZWFkcywgc28gdGhhdCB3ZSBj
YW4gcHJlIGJ1ZmZlciB0aGUgc3RyZWFtcy4KICAgICAgICAgLy8gYW5kIGNhbGN1bGF0ZSB0aGUg
c3RhcnQgdGltZSBpbiBvcmRlciB0byBkZXRlcm1pbmUgdGhlIGR1cmF0aW9uLgogICAgICAgICBp
ZiAoTlNfRkFJTEVEKFN0YXJ0RGVjb2RlVGhyZWFkcygpKSkgewogICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAKQEAgLTExMDIsMTcgKzExMDIsMTcgQEAgbnNyZXN1bHQgbnNCdWlsdGlu
RGVjb2RlclN0YXRlTWFjaGluZTo6UgogICAgICAgICAgICAgUFJJbnQ2NCBzdGFydFRpbWUgPSAo
YXVkaW8gJiYgYXVkaW8tPm1UaW1lIDwgc2Vla1RpbWUpID8gYXVkaW8tPm1UaW1lIDogc2Vla1Rp
bWU7CiAgICAgICAgICAgICBtQXVkaW9TdGFydFRpbWUgPSBzdGFydFRpbWU7CiAgICAgICAgICAg
ICBtUGxheUR1cmF0aW9uID0gVGltZUR1cmF0aW9uOjpGcm9tTWlsbGlzZWNvbmRzKHN0YXJ0VGlt
ZSAtIG1TdGFydFRpbWUpOwogICAgICAgICAgICAgaWYgKEhhc1ZpZGVvKCkpIHsKICAgICAgICAg
ICAgICAgbnNBdXRvUHRyPFZpZGVvRGF0YT4gdmlkZW8obVJlYWRlci0+bVZpZGVvUXVldWUuUGVl
a0Zyb250KCkpOwogICAgICAgICAgICAgICBpZiAodmlkZW8pIHsKICAgICAgICAgICAgICAgICBO
U19BU1NFUlRJT04odmlkZW8tPm1UaW1lIDw9IHNlZWtUaW1lICYmIHNlZWtUaW1lIDw9IHZpZGVv
LT5tRW5kVGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZWsgdGFyZ2V0IHNo
b3VsZCBsaWUgaW5zaWRlIHRoZSBmaXJzdCBmcmFtZSBhZnRlciBzZWVrIik7Ci0gICAgICAgICAg
ICAgICAgUmVuZGVyVmlkZW9GcmFtZSh2aWRlbyk7CisgICAgICAgICAgICAgICAgUmVuZGVyVmlk
ZW9GcmFtZSh2aWRlbywgVGltZVN0YW1wOjpOb3coKSk7CiAgICAgICAgICAgICAgICAgbVJlYWRl
ci0+bVZpZGVvUXVldWUuUG9wRnJvbnQoKTsKICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lS
dW5uYWJsZT4gZXZlbnQgPQogICAgICAgICAgICAgICAgICAgTlNfTmV3UnVubmFibGVNZXRob2Qo
bURlY29kZXIsICZuc0J1aWx0aW5EZWNvZGVyOjpJbnZhbGlkYXRlKTsKICAgICAgICAgICAgICAg
ICBOU19EaXNwYXRjaFRvTWFpblRocmVhZChldmVudCwgTlNfRElTUEFUQ0hfTk9STUFMKTsKICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTI2NSwyOCArMTI2NSwzMiBAQCBuc3Jlc3VsdCBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5l
OjpSCiAgICAgICB9CiAgICAgICBicmVhazsKICAgICB9CiAgIH0KIAogICByZXR1cm4gTlNfT0s7
CiB9CiAKLXZvaWQgbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGluZTo6UmVuZGVyVmlkZW9GcmFt
ZShWaWRlb0RhdGEqIGFEYXRhKQordm9pZCBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpS
ZW5kZXJWaWRlb0ZyYW1lKFZpZGVvRGF0YSogYURhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZVN0YW1wIGFUYXJnZXQpCiB7CiAgIE5T
X0FTU0VSVElPTihJc0N1cnJlbnRUaHJlYWQobURlY29kZXItPm1TdGF0ZU1hY2hpbmVUaHJlYWQp
LCAiU2hvdWxkIGJlIG9uIHN0YXRlIG1hY2hpbmUgdGhyZWFkLiIpOwogCiAgIGlmIChhRGF0YS0+
bUR1cGxpY2F0ZSkgewogICAgIHJldHVybjsKICAgfQogCiAgIG5zUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IGFEYXRhLT5tSW1hZ2U7CiAgIGlmIChpbWFnZSkgewogICAgIGNvbnN0IG5zVmlkZW9JbmZv
JiBpbmZvID0gbVJlYWRlci0+R2V0SW5mbygpOwotICAgIG1EZWNvZGVyLT5TZXRWaWRlb0RhdGEo
Z2Z4SW50U2l6ZShpbmZvLm1EaXNwbGF5LndpZHRoLCBpbmZvLm1EaXNwbGF5LmhlaWdodCksIGlu
Zm8ubVBpeGVsQXNwZWN0UmF0aW8sIGltYWdlKTsKKyAgICBtRGVjb2Rlci0+U2V0VmlkZW9EYXRh
KGdmeEludFNpemUoaW5mby5tRGlzcGxheS53aWR0aCwgaW5mby5tRGlzcGxheS5oZWlnaHQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5tUGl4ZWxBc3BlY3RSYXRpbywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
YVRhcmdldCk7CiAgIH0KIH0KIAogUFJJbnQ2NAogbnNCdWlsdGluRGVjb2RlclN0YXRlTWFjaGlu
ZTo6R2V0QXVkaW9DbG9jaygpCiB7CiAgIE5TX0FTU0VSVElPTihJc0N1cnJlbnRUaHJlYWQobURl
Y29kZXItPm1TdGF0ZU1hY2hpbmVUaHJlYWQpLCAiU2hvdWxkIGJlIG9uIHN0YXRlIG1hY2hpbmUg
dGhyZWFkLiIpOwogICBpZiAoIW1BdWRpb1N0cmVhbSB8fCAhSGFzQXVkaW8oKSkKQEAgLTEzNTcs
MjIgKzEzNjEsMjQgQEAgdm9pZCBuc0J1aWx0aW5EZWNvZGVyU3RhdGVNYWNoaW5lOjpBZHZhbgog
ICAgICAgaWYgKGZyYW1lICYmICFjdXJyZW50RnJhbWUpIHsKICAgICAgICAgUFJJbnQ2NCBub3cg
PSAoVGltZVN0YW1wOjpOb3coKSAtIG1QbGF5U3RhcnRUaW1lICsgbVBsYXlEdXJhdGlvbikuVG9N
aWxsaXNlY29uZHMoKTsKICAgICAgICAgcmVtYWluaW5nVGltZSA9IGZyYW1lLT5tVGltZSAtIG1T
dGFydFRpbWUgLSBub3c7CiAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRGcmFtZSkg
ewogICAgICAgLy8gRGVjb2RlIG9uZSBmcmFtZSBhbmQgZGlzcGxheSBpdAorICAgICAgVGltZVN0
YW1wIHByZXNUaW1lID0gbVBsYXlTdGFydFRpbWUgLSBtUGxheUR1cmF0aW9uICsKKyAgICAgICAg
VGltZUR1cmF0aW9uOjpGcm9tTWlsbGlzZWNvbmRzKGN1cnJlbnRGcmFtZS0+bVRpbWUgLSBtU3Rh
cnRUaW1lKTsKICAgICAgIE5TX0FTU0VSVElPTihjdXJyZW50RnJhbWUtPm1UaW1lID49IG1TdGFy
dFRpbWUsICJTaG91bGQgaGF2ZSBwb3NpdGl2ZSBmcmFtZSB0aW1lIik7CiAgICAgICB7CiAgICAg
ICAgIE1vbml0b3JBdXRvRXhpdCBleGl0TW9uKG1EZWNvZGVyLT5HZXRNb25pdG9yKCkpOwogICAg
ICAgICAvLyBJZiB3ZSBoYXZlIHZpZGVvLCB3ZSB3YW50IHRvIGluY3JlbWVudCB0aGUgY2xvY2sg
aW4gc3RlcHMgb2YgdGhlIGZyYW1lCiAgICAgICAgIC8vIGR1cmF0aW9uLgotICAgICAgICBSZW5k
ZXJWaWRlb0ZyYW1lKGN1cnJlbnRGcmFtZSk7CisgICAgICAgIFJlbmRlclZpZGVvRnJhbWUoY3Vy
cmVudEZyYW1lLCBwcmVzVGltZSk7CiAgICAgICB9CiAgICAgICBtRGVjb2Rlci0+R2V0RnJhbWVT
dGF0aXN0aWNzKCkuTm90aWZ5UHJlc2VudGVkRnJhbWUoKTsKICAgICAgIFBSSW50NjQgbm93ID0g
KFRpbWVTdGFtcDo6Tm93KCkgLSBtUGxheVN0YXJ0VGltZSArIG1QbGF5RHVyYXRpb24pLlRvTWls
bGlzZWNvbmRzKCk7CiAgICAgICByZW1haW5pbmdUaW1lID0gY3VycmVudEZyYW1lLT5tRW5kVGlt
ZSAtIG1TdGFydFRpbWUgLSBub3c7CiAgICAgICBjdXJyZW50RnJhbWUgPSBuc251bGw7CiAgICAg
fQogCiAgICAgLy8gS2ljayB0aGUgZGVjb2RlIHRocmVhZCBpbiBjYXNlIGl0IGZpbGxlZCBpdHMg
YnVmZmVycyBhbmQgcHV0IGl0c2VsZgpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9uc0J1aWx0
aW5EZWNvZGVyU3RhdGVNYWNoaW5lLmggYi9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJT
dGF0ZU1hY2hpbmUuaAotLS0gYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1h
Y2hpbmUuaAorKysgYi9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXJTdGF0ZU1hY2hpbmUu
aApAQCAtMzAzLDE3ICszMDMsMTggQEAgcHJvdGVjdGVkOgogICAvLyBVcGRhdGUgb25seSB0aGUg
c3RhdGUgbWFjaGluZSdzIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gKGFuZCBkdXJhdGlvbiwK
ICAgLy8gaWYgdW5rbm93bikuICBEb2VzIG5vdCB1cGRhdGUgdGhlIHBsYXliYWNrIHBvc2l0aW9u
IG9uIHRoZSBkZWNvZGVyIG9yCiAgIC8vIG1lZGlhIGVsZW1lbnQgLS0gdXNlIFVwZGF0ZVBsYXli
YWNrUG9zaXRpb24gZm9yIHRoYXQuICBDYWxsZWQgb24gdGhlIHN0YXRlCiAgIC8vIG1hY2hpbmUg
dGhyZWFkLCBjYWxsZXIgbXVzdCBob2xkIHRoZSBkZWNvZGVyIGxvY2suCiAgIHZvaWQgVXBkYXRl
UGxheWJhY2tQb3NpdGlvbkludGVybmFsKFBSSW50NjQgYVRpbWUpOwogCiAgIC8vIFBlcmZvcm1z
IFlDYkNyIHRvIFJHQiBjb252ZXJzaW9uLCBhbmQgcHVzaGVzIHRoZSBpbWFnZSBkb3duIHRoZQog
ICAvLyByZW5kZXJpbmcgcGlwZWxpbmUuIENhbGxlZCBvbiB0aGUgc3RhdGUgbWFjaGluZSB0aHJl
YWQuCi0gIHZvaWQgUmVuZGVyVmlkZW9GcmFtZShWaWRlb0RhdGEqIGFEYXRhKTsKKyAgdm9pZCBS
ZW5kZXJWaWRlb0ZyYW1lKFZpZGVvRGF0YSogYURhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICBUaW1lU3RhbXAgYVRhcmdldCk7CiAKICAgLy8gSWYgd2UgaGF2ZSB2aWRlbywgZGlzcGxheSBh
IHZpZGVvIGZyYW1lIGlmIGl0J3MgdGltZSBmb3IgZGlzcGxheSBoYXMKICAgLy8gYXJyaXZlZCwg
b3RoZXJ3aXNlIHNsZWVwIHVudGlsIGl0J3MgdGltZSBmb3IgdGhlIG5leHQgc2FtcGxlLiBVcGRh
dGUKICAgLy8gdGhlIGN1cnJlbnQgZnJhbWUgdGltZSBhcyBhcHByb3ByaWF0ZSwgYW5kIHRyaWdn
ZXIgcmVhZHkgc3RhdGUgdXBkYXRlLgogICAvLyBUaGUgZGVjb2RlciBtb25pdG9yIG11c3QgYmUg
aGVsZCB3aXRoIGV4YWN0bHkgb25lIGxvY2sgY291bnQuIENhbGxlZAogICAvLyBvbiB0aGUgc3Rh
dGUgbWFjaGluZSB0aHJlYWQuCiAgIHZvaWQgQWR2YW5jZUZyYW1lKCk7CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvbWVkaWEvbnNNZWRpYURlY29kZXIuY3BwIGIvY29udGVudC9tZWRpYS9uc01lZGlh
RGVjb2Rlci5jcHAKLS0tIGEvY29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5jcHAKKysrIGIv
Y29udGVudC9tZWRpYS9uc01lZGlhRGVjb2Rlci5jcHAKQEAgLTI1MCwzNSArMjUwLDUwIEBAIHZv
aWQgbnNNZWRpYURlY29kZXI6OkZpcmVUaW1lVXBkYXRlKCkKIHsKICAgaWYgKCFtRWxlbWVudCkK
ICAgICByZXR1cm47CiAgIG1FbGVtZW50LT5GaXJlVGltZVVwZGF0ZShQUl9UUlVFKTsKIH0KIAog
dm9pZCBuc01lZGlhRGVjb2Rlcjo6U2V0VmlkZW9EYXRhKGNvbnN0IGdmeEludFNpemUmIGFTaXpl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFQaXhlbEFzcGVjdFJh
dGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlKiBhSW1hZ2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2UqIGFJbWFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3RhbXAgYVRhcmdldCkKIHsKICAgbnNBdXRv
TG9jayBsb2NrKG1WaWRlb1VwZGF0ZUxvY2spOwogCiAgIGlmIChtUkdCV2lkdGggIT0gYVNpemUu
d2lkdGggfHwgbVJHQkhlaWdodCAhPSBhU2l6ZS5oZWlnaHQgfHwKICAgICAgIG1QaXhlbEFzcGVj
dFJhdGlvICE9IGFQaXhlbEFzcGVjdFJhdGlvKSB7CiAgICAgbVJHQldpZHRoID0gYVNpemUud2lk
dGg7CiAgICAgbVJHQkhlaWdodCA9IGFTaXplLmhlaWdodDsKICAgICBtUGl4ZWxBc3BlY3RSYXRp
byA9IGFQaXhlbEFzcGVjdFJhdGlvOwogICAgIG1TaXplQ2hhbmdlZCA9IFBSX1RSVUU7CiAgIH0K
ICAgaWYgKG1JbWFnZUNvbnRhaW5lciAmJiBhSW1hZ2UpIHsKICAgICBnZnhJbnRTaXplIG9sZEZy
YW1lU2l6ZSA9IG1JbWFnZUNvbnRhaW5lci0+R2V0Q3VycmVudFNpemUoKTsKKworICAgIFRpbWVT
dGFtcCBwYWludFRpbWUgPSBtSW1hZ2VDb250YWluZXItPkdldFBhaW50VGltZSgpOworICAgIGlm
ICghcGFpbnRUaW1lLklzTnVsbCgpICYmICFtUGFpbnRUYXJnZXQuSXNOdWxsKCkpIHsKKyAgICAg
IG1QYWludERlbGF5ID0gcGFpbnRUaW1lIC0gbVBhaW50VGFyZ2V0OworICAgIH0KKwogICAgIG1J
bWFnZUNvbnRhaW5lci0+U2V0Q3VycmVudEltYWdlKGFJbWFnZSk7CiAgICAgZ2Z4SW50U2l6ZSBu
ZXdGcmFtZVNpemUgPSBtSW1hZ2VDb250YWluZXItPkdldEN1cnJlbnRTaXplKCk7CiAgICAgaWYg
KG9sZEZyYW1lU2l6ZSAhPSBuZXdGcmFtZVNpemUpIHsKICAgICAgIG1JbWFnZUNvbnRhaW5lclNp
emVDaGFuZ2VkID0gUFJfVFJVRTsKICAgICB9CiAgIH0KKworICBtUGFpbnRUYXJnZXQgPSBhVGFy
Z2V0OworfQorCitkb3VibGUgbnNNZWRpYURlY29kZXI6OkdldEZyYW1lRGVsYXkoKQoreworICBu
c0F1dG9Mb2NrIGxvY2sobVZpZGVvVXBkYXRlTG9jayk7CisgIHJldHVybiBtUGFpbnREZWxheS5U
b1NlY29uZHMoKTsKIH0KIAogdm9pZCBuc01lZGlhRGVjb2Rlcjo6UGluRm9yU2VlaygpCiB7CiAg
IG5zTWVkaWFTdHJlYW0qIHN0cmVhbSA9IEdldEN1cnJlbnRTdHJlYW0oKTsKICAgaWYgKCFzdHJl
YW0gfHwgbVBpbm5lZEZvclNlZWspIHsKICAgICByZXR1cm47CiAgIH0KZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvbWVkaWEvbnNNZWRpYURlY29kZXIuaCBiL2NvbnRlbnQvbWVkaWEvbnNNZWRpYURlY29k
ZXIuaAotLS0gYS9jb250ZW50L21lZGlhL25zTWVkaWFEZWNvZGVyLmgKKysrIGIvY29udGVudC9t
ZWRpYS9uc01lZGlhRGVjb2Rlci5oCkBAIC0yNjEsMTYgKzI2MSwyMSBAQCBwdWJsaWM6CiAgICAg
ICBtRGVjb2Rlci0+R2V0RnJhbWVTdGF0aXN0aWNzKCkuTm90aWZ5RGVjb2RlZEZyYW1lcyhtUGFy
c2VkLCBtRGVjb2RlZCk7CiAgICAgfQogICBwcml2YXRlOgogICAgIG5zTWVkaWFEZWNvZGVyKiBt
RGVjb2RlcjsKICAgICBQUlVpbnQzMiYgbVBhcnNlZDsKICAgICBQUlVpbnQzMiYgbURlY29kZWQ7
CiAgIH07CiAKKyAgLy8gVGltZSBpbiBzZWNvbmRzIGJ5IHdoaWNoIHRoZSBsYXN0IHBhaW50ZWQg
dmlkZW8gZnJhbWUgd2FzIGxhdGUgYnkuCisgIC8vIEUuZy4gaWYgdGhlIGxhc3QgcGFpbnRlZCBm
cmFtZSBzaG91bGQgaGF2ZSBiZWVuIHBhaW50ZWQgYXQgdGltZSB0LAorICAvLyBidXQgd2FzIGFj
dHVhbGx5IHBhaW50ZWQgYXQgdCtuLCB0aGlzIHJldHVybnMgbiBpbiBzZWNvbmRzLiBUaHJlYWRz
YWZlLgorICBkb3VibGUgR2V0RnJhbWVEZWxheSgpOworCiAgIC8vIFJldHVybiBzdGF0aXN0aWNz
LiBUaGlzIGlzIHVzZWQgZm9yIHByb2dyZXNzIGV2ZW50cyBhbmQgb3RoZXIgdGhpbmdzLgogICAv
LyBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLiBJdCdzIG9ubHkgYSBzbmFwc2hv
dCBvZiB0aGUKICAgLy8gY3VycmVudCBzdGF0ZSwgc2luY2Ugb3RoZXIgdGhyZWFkcyBtaWdodCBi
ZSBjaGFuZ2luZyB0aGUgc3RhdGUKICAgLy8gYXQgYW55IHRpbWUuCiAgIHZpcnR1YWwgU3RhdGlz
dGljcyBHZXRTdGF0aXN0aWNzKCkgPSAwOwogICAKICAgLy8gUmV0dXJuIHRoZSBmcmFtZSBkZWNv
ZGUvcGFpbnQgcmVsYXRlZCBzdGF0aXN0aWNzLgogICBGcmFtZVN0YXRpc3RpY3MmIEdldEZyYW1l
U3RhdGlzdGljcygpIHsgcmV0dXJuIG1GcmFtZVN0YXRzOyB9CkBAIC0zNTYsMjEgKzM2MSwyMyBA
QCBwdWJsaWM6CiAgIC8vIHRoZWlyIG5zTWVkaWFTdHJlYW0uCiAgIHZpcnR1YWwgdm9pZCBNb3Zl
TG9hZHNUb0JhY2tncm91bmQoKT0wOwogCiAgIC8vIEdldHMgdGhlIGltYWdlIGNvbnRhaW5lciBm
b3IgdGhlIG1lZGlhIGVsZW1lbnQuIFdpbGwgcmV0dXJuIG51bGwgaWYKICAgLy8gdGhlIGVsZW1l
bnQgaXMgbm90IGEgdmlkZW8gZWxlbWVudC4gVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW55CiAg
IC8vIHRocmVhZDsgSW1hZ2VDb250YWluZXJzIGNhbiBiZSB1c2VkIGZyb20gYW55IHRocmVhZC4K
ICAgSW1hZ2VDb250YWluZXIqIEdldEltYWdlQ29udGFpbmVyKCkgeyByZXR1cm4gbUltYWdlQ29u
dGFpbmVyOyB9CiAKLSAgLy8gU2V0IHRoZSB2aWRlbyB3aWR0aCwgaGVpZ2h0LCBwaXhlbCBhc3Bl
Y3QgcmF0aW8sIGFuZCBjdXJyZW50IGltYWdlLgotICAvLyBPd25lcnNoaXAgb2YgdGhlIGltYWdl
IGlzIHRyYW5zZmVycmVkIHRvIHRoZSBkZWNvZGVyLgorICAvLyBTZXQgdGhlIHZpZGVvIHdpZHRo
LCBoZWlnaHQsIHBpeGVsIGFzcGVjdCByYXRpbywgY3VycmVudCBpbWFnZSBhbmQKKyAgLy8gdGFy
Z2V0IHBhaW50IHRpbWUgb2YgdGhlIG5leHQgdmlkZW8gZnJhbWUgdG8gYmUgZGlzcGxheWVkLgor
ICAvLyBPd25lcnNoaXAgb2YgdGhlIGltYWdlIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBsYXllcnMg
c3Vic3lzdGVtLgogICB2b2lkIFNldFZpZGVvRGF0YShjb25zdCBnZnhJbnRTaXplJiBhU2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVBpeGVsQXNwZWN0UmF0aW8sCi0gICAgICAgICAg
ICAgICAgICAgIEltYWdlKiBhSW1hZ2UpOworICAgICAgICAgICAgICAgICAgICBJbWFnZSogYUlt
YWdlLAorICAgICAgICAgICAgICAgICAgICBUaW1lU3RhbXAgYVRhcmdldCk7CiAKICAgLy8gQ29u
c3RydWN0cyB0aGUgdGltZSByYW5nZXMgcmVwcmVzZW50aW5nIHdoYXQgc2VnbWVudHMgb2YgdGhl
IG1lZGlhCiAgIC8vIGFyZSBidWZmZXJlZCBhbmQgcGxheWFibGUuCiAgIHZpcnR1YWwgbnNyZXN1
bHQgR2V0QnVmZmVyZWQobnNUaW1lUmFuZ2VzKiBhQnVmZmVyZWQpID0gMDsKIAogICAvLyBSZXR1
cm5zIFBSX1RSVUUgaWYgd2UgY2FuIHBsYXkgdGhlIGVudGlyZSBtZWRpYSB0aHJvdWdoIHdpdGhv
dXQgc3RvcHBpbmcKICAgLy8gdG8gYnVmZmVyLCBnaXZlbiB0aGUgY3VycmVudCBkb3dubG9hZCBh
bmQgcGxheWJhY2sgcmF0ZXMuCiAgIFBSQm9vbCBDYW5QbGF5VGhyb3VnaCgpOwpAQCAtNDAzLDE2
ICs0MTAsMjUgQEAgcHJvdGVjdGVkOgogICBuc0hUTUxNZWRpYUVsZW1lbnQqIG1FbGVtZW50Owog
CiAgIFBSSW50MzIgbVJHQldpZHRoOwogICBQUkludDMyIG1SR0JIZWlnaHQ7CiAKICAgLy8gQ291
bnRlcnMgcmVsYXRlZCB0byBkZWNvZGUgYW5kIHByZXNlbnRhdGlvbiBvZiBmcmFtZXMuCiAgIEZy
YW1lU3RhdGlzdGljcyBtRnJhbWVTdGF0czsKIAorICAvLyBUaGUgdGltZSBhdCB3aGljaCB0aGUg
Y3VycmVudCB2aWRlbyBmcmFtZSBzaG91bGQgaGF2ZSBiZWVuIHBhaW50ZWQuCisgIC8vIEFjY2Vz
cyBwcm90ZWN0ZWQgYnkgbVZpZGVvVXBkYXRlTG9jay4KKyAgVGltZVN0YW1wIG1QYWludFRhcmdl
dDsKKworICAvLyBUaGUgZGVsYXkgYmV0d2VlbiB0aGUgbGFzdCB2aWRlbyBmcmFtZSBiZWluZyBw
cmVzZW50ZWQgYW5kIGl0IGJlaW5nCisgIC8vIHBhaW50ZWQuIFRoaXMgaXMgdGltZSBlbGFwc2Vk
IGFmdGVyIG1QYWludFRhcmdldCB1bnRpbCB0aGUgbW9zdCByZWNlbnRseQorICAvLyBwYWludGVk
IGZyYW1lIGFwcGVhcmVkIG9uIHNjcmVlbi4gQWNjZXNzIHByb3RlY3RlZCBieSBtVmlkZW9VcGRh
dGVMb2NrLgorICBUaW1lRHVyYXRpb24gbVBhaW50RGVsYXk7CisKICAgbnNSZWZQdHI8SW1hZ2VD
b250YWluZXI+IG1JbWFnZUNvbnRhaW5lcjsKIAogICAvLyBUaW1lIHRoYXQgdGhlIGxhc3QgcHJv
Z3Jlc3MgZXZlbnQgd2FzIGZpcmVkLiBSZWFkL1dyaXRlIGZyb20gdGhlCiAgIC8vIG1haW4gdGhy
ZWFkIG9ubHkuCiAgIFRpbWVTdGFtcCBtUHJvZ3Jlc3NUaW1lOwogCiAgIC8vIFRpbWUgdGhhdCBk
YXRhIHdhcyBsYXN0IHJlYWQgZnJvbSB0aGUgbWVkaWEgcmVzb3VyY2UuIFVzZWQgZm9yCiAgIC8v
IGNvbXB1dGluZyBpZiB0aGUgZG93bmxvYWQgaGFzIHN0YWxsZWQgYW5kIHRvIHJhdGUgbGltaXQg
cHJvZ3Jlc3MgZXZlbnRzCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRl
ci5jcHAgYi9jb250ZW50L21lZGlhL29nZy9uc09nZ1JlYWRlci5jcHAKLS0tIGEvY29udGVudC9t
ZWRpYS9vZ2cvbnNPZ2dSZWFkZXIuY3BwCisrKyBiL2NvbnRlbnQvbWVkaWEvb2dnL25zT2dnUmVh
ZGVyLmNwcApAQCAtMzgsMTYgKzM4LDE3IEBACiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAq
KioqKiAqLwogI2luY2x1ZGUgIm5zRXJyb3IuaCIKICNpbmNsdWRlICJuc0J1aWx0aW5EZWNvZGVy
U3RhdGVNYWNoaW5lLmgiCiAjaW5jbHVkZSAibnNCdWlsdGluRGVjb2Rlci5oIgogI2luY2x1ZGUg
Im5zT2dnUmVhZGVyLmgiCiAjaW5jbHVkZSAiVmlkZW9VdGlscy5oIgogI2luY2x1ZGUgInRoZW9y
YS90aGVvcmFkZWMuaCIKICNpbmNsdWRlICJuc1RpbWVSYW5nZXMuaCIKKyNpbmNsdWRlICJtb3pp
bGxhL1RpbWVTdGFtcC5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIAogLy8gVW4tY29t
bWVudCB0byBlbmFibGUgbG9nZ2luZyBvZiBzZWVrIGJpc2VjdGlvbnMuCiAvLyNkZWZpbmUgU0VF
S19MT0dHSU5HCiAKICNpZmRlZiBQUl9MT0dHSU5HCiBleHRlcm4gUFJMb2dNb2R1bGVJbmZvKiBn
QnVpbHRpbkRlY29kZXJMb2c7CkBAIC0yODUsMTcgKzI4NiwxNyBAQCBuc3Jlc3VsdCBuc09nZ1Jl
YWRlcjo6UmVhZE1ldGFkYXRhKCkKIAogICAvLyBJbml0aWFsaXplIHRoZSBmaXJzdCBUaGVvcmEg
YW5kIFZvcmJpcyBiaXRzdHJlYW1zLiBBY2NvcmRpbmcgdG8gdGhlCiAgIC8vIFRoZW9yYSBzcGVj
IHRoZXNlIGNhbiBiZSBjb25zaWRlcmVkIHRoZSAncHJpbWFyeScgYml0c3RyZWFtcyBmb3IgcGxh
eWJhY2suCiAgIC8vIEV4dHJhY3QgdGhlIG1ldGFkYXRhIG5lZWRlZCBmcm9tIHRoZXNlIHN0cmVh
bXMuCiAgIC8vIFNldCBhIGRlZmF1bHQgY2FsbGJhY2sgcGVyaW9kIGZvciBpZiB3ZSBoYXZlIG5v
IHZpZGVvIGRhdGEKICAgaWYgKG1UaGVvcmFTdGF0ZSAmJiBtVGhlb3JhU3RhdGUtPkluaXQoKSkg
ewogICAgIGdmeEludFNpemUgc3oobVRoZW9yYVN0YXRlLT5tSW5mby5waWNfd2lkdGgsCiAgICAg
ICAgICAgICAgICAgICBtVGhlb3JhU3RhdGUtPm1JbmZvLnBpY19oZWlnaHQpOwotICAgIG1EZWNv
ZGVyLT5TZXRWaWRlb0RhdGEoc3osIG1UaGVvcmFTdGF0ZS0+bVBpeGVsQXNwZWN0UmF0aW8sIG5z
bnVsbCk7CisgICAgbURlY29kZXItPlNldFZpZGVvRGF0YShzeiwgbVRoZW9yYVN0YXRlLT5tUGl4
ZWxBc3BlY3RSYXRpbywgbnNudWxsLCBUaW1lU3RhbXA6Ok5vdygpKTsKICAgfQogICBpZiAobVZv
cmJpc1N0YXRlKSB7CiAgICAgbVZvcmJpc1N0YXRlLT5Jbml0KCk7CiAgIH0KIAogICBpZiAoIUhh
c0F1ZGlvKCkgJiYgIUhhc1ZpZGVvKCkgJiYgbVNrZWxldG9uU3RhdGUpIHsKICAgICAvLyBXZSBo
YXZlIGEgc2tlbGV0b24gdHJhY2ssIGJ1dCBubyBhdWRpbyBvciB2aWRlbywgbWF5IGFzIHdlbGwg
ZGlzYWJsZQogICAgIC8vIHRoZSBza2VsZXRvbiwgd2UgY2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVs
IHdpdGggdGhpcyBtZWRpYS4KZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9N
SFRNTFZpZGVvRWxlbWVudC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxWaWRl
b0VsZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTFZpZGVvRWxl
bWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MVmlkZW9FbGVtZW50
LmlkbApAQCAtNDMsMTcgKzQzLDE3IEBACiAgKiA8dmlkZW8+IGVsZW1lbnQuCiAgKgogICogRm9y
IG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBpbnRlcmZhY2UsIHBsZWFzZSBzZWUKICAqIGh0dHA6
Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3ZpZGVvCiAgKgog
ICogQHN0YXR1cyBVTkRFUl9ERVZFTE9QTUVOVAogICovCiAKLVtzY3JpcHRhYmxlLCB1dWlkKDhh
MmU1NzU2LWU5YTMtNDA0Zi05NTkyLTRlNWI1ODMwZGU4NSldCitbc2NyaXB0YWJsZSwgdXVpZChl
MWY1MmFhNS05OTYyLTQwMTktYjdiMy1hZjNhZWU2ZTRkNDgpXQogaW50ZXJmYWNlIG5zSURPTUhU
TUxWaWRlb0VsZW1lbnQgOiBuc0lET01IVE1MTWVkaWFFbGVtZW50CiB7CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBsb25nIHdpZHRoOyAKICAgICAgICAgICAgYXR0cmlidXRlIGxvbmcgaGVpZ2h0Owog
ICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB2aWRlb1dpZHRoOwogICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB2aWRlb0hlaWdodDsKICAgICAgICAgICAgYXR0cmli
dXRlIERPTVN0cmluZyBwb3N0ZXI7CiAgICAgICAgICAgIApAQCAtNjUsMTAgKzY1LDE1IEBAIGlu
dGVyZmFjZSBuc0lET01IVE1MVmlkZW9FbGVtZW50IDogbnNJRE8KICAgLy8gQSBjb3VudCBvZiB0
aGUgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiBkZWNvZGVkLiBXZSBtYXkgZHJvcAog
ICAvLyBmcmFtZXMgaWYgdGhlIGRlY29kZSBpcyB0YWtpbmcgdG9vIG11Y2ggdGltZS4KICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbW96RGVjb2RlZEZyYW1lczsKIAogICAvLyBB
IGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIHByZXNlbnRlZCB0
byB0aGUgcmVuZGVyaW5nCiAgIC8vIHBpcGVsaW5lLiBXZSBtYXkgZHJvcCBmcmFtZXMgaWYgdGhl
eSBhcnJpdmUgbGF0ZSBhdCB0aGUgcmVuZGVyZXIuCiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBsb25nIG1velByZXNlbnRlZEZyYW1lczsKIAorICAvLyBOdW1iZXIgb2YgcHJlc2VudGVk
IGZyYW1lcyB3aGljaCB3ZXJlIHBhaW50ZWQgb24gc2NyZWVuLgorICByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBtb3pQYWludGVkRnJhbWVzOworCisgIC8vIFRpbWUgd2hpY2ggdGhl
IGxhc3QgcGFpbnRlZCB2aWRlbyBmcmFtZSB3YXMgbGF0ZSBieSwgaW4gc2Vjb25kcy4KKyAgcmVh
ZG9ubHkgYXR0cmlidXRlIGRvdWJsZSBtb3pGcmFtZURlbGF5OwogfTsKIAo=
</data>
<flag name="review"
          id="432067"
          type_id="937"
          status="+"
          setter="roc"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>516105</attachid>
            <date>2011-03-01 17:56:44 -0800</date>
            <delta_ts>2011-03-01 20:02:55 -0800</delta_ts>
            <desc>Patch: add paint time to Images</desc>
            <filename>580531-gfx-paint-time.patch</filename>
            <type>text/plain</type>
            <size>15469</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgYmFmY2JmMDhjNWI4YmUwNzViMjYwMjU5MDA1ZGZiMDRlYzdmZTIxNwpC
dWcgNTgwNTMxIC0gUmVjb3JkIGZpcnN0IHBhaW50IHRpbWUgYW5kIG51bWJlciBvZiBpbWFnZXMg
cGFpbnRlZCBpbiBJbWFnZUNvbnRhaW5lci4gcj0/CgpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9J
bWFnZUxheWVycy5oIGIvZ2Z4L2xheWVycy9JbWFnZUxheWVycy5oCi0tLSBhL2dmeC9sYXllcnMv
SW1hZ2VMYXllcnMuaAorKysgYi9nZngvbGF5ZXJzL0ltYWdlTGF5ZXJzLmgKQEAgLTM0LDE2ICsz
NCwxNyBAQAogICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0
aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaWZu
ZGVmIEdGWF9JTUFHRUxBWUVSX0gKICNkZWZpbmUgR0ZYX0lNQUdFTEFZRVJfSAogCiAjaW5jbHVk
ZSAiTGF5ZXJzLmgiCisjaW5jbHVkZSAibW96aWxsYS9UaW1lU3RhbXAuaCIKIAogI2luY2x1ZGUg
ImdmeFBhdHRlcm4uaCIKICNpbmNsdWRlICJuc1RocmVhZFV0aWxzLmgiCiAjaW5jbHVkZSAibnND
b3JlQW5pbWF0aW9uU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgbW96aWxsYSB7CiBuYW1lc3BhY2Ug
bGF5ZXJzIHsKIApAQCAtMTA1LDM4ICsxMDYsNjEgQEAgcHVibGljOgogICAgICAqIEl0IHdyYXBz
IGFuIElPU3VyZmFjZSBvYmplY3QgYW5kIGJpbmRzIGl0IGRpcmVjdGx5IHRvIGEgR0wgdGV4dHVy
ZS4KICAgICAgKi8KICAgICBNQUNfSU9fU1VSRkFDRQogICB9OwogCiAgIEZvcm1hdCBHZXRGb3Jt
YXQoKSB7IHJldHVybiBtRm9ybWF0OyB9CiAgIHZvaWQqIEdldEltcGxEYXRhKCkgeyByZXR1cm4g
bUltcGxEYXRhOyB9CiAKKyAgLyoqCisgICAqIFJldHVybiBQUl9UUlVFIGlmIHRoaXMgaW1hZ2Ug
aGFzIGJlZW4gcGFpbnRlZCBhdCBsZWFzdCBvbmNlLgorICAgKiBDYWxsIG9uIG1haW4gdGhyZWFk
IG9ubHkuCisgICAqLworICBQUkJvb2wgSGFzQmVlblBhaW50ZWQoKSBjb25zdCB7CisgICAgTlNf
UFJFQ09ORElUSU9OKE5TX0lzTWFpblRocmVhZCgpLCAiTXVzdCBiZSBjYWxsZWQgb24gbWFpbiB0
aHJlYWQiKTsKKyAgICByZXR1cm4gbVBhaW50ZWQ7CisgIH0KKworICAvKioKKyAgICogTWFya3Mg
dGhpcyBpbWFnZSBhcyBoYXZpbmcgYmVlbiBwYWludGVkLgorICAgKiBDYWxsIG9uIG1haW4gdGhy
ZWFkIG9ubHkuCisgICAqLworICB2b2lkIE1hcmtQYWludGVkKCkgeworICAgIE5TX1BSRUNPTkRJ
VElPTihOU19Jc01haW5UaHJlYWQoKSwgIk11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFkIik7
CisgICAgbVBhaW50ZWQgPSBQUl9UUlVFOworICB9CisKIHByb3RlY3RlZDoKICAgSW1hZ2Uodm9p
ZCogYUltcGxEYXRhLCBGb3JtYXQgYUZvcm1hdCkgOgogICAgIG1JbXBsRGF0YShhSW1wbERhdGEp
LAotICAgIG1Gb3JtYXQoYUZvcm1hdCkKKyAgICBtRm9ybWF0KGFGb3JtYXQpLAorICAgIG1QYWlu
dGVkKFBSX0ZBTFNFKQogICB7fQogCiAgIHZvaWQqIG1JbXBsRGF0YTsKICAgRm9ybWF0IG1Gb3Jt
YXQ7CisKKyAgLy8gUFJfVFJVRSBpZiB0aGUgaW1hZ2UgaGFzIGJlZW4gcGFpbnRlZCBhdCBsZWFz
dCBvbmNlLgorICAvLyBBY2Nlc3NlZCBvbiBtYWluIHRocmVhZCBvbmx5LgorICBQUkJvb2wgbVBh
aW50ZWQ7CiB9OwogCiAvKioKICAqIEEgY2xhc3MgdGhhdCBtYW5hZ2VzIEltYWdlcyBmb3IgYW4g
SW1hZ2VMYXllci4gVGhlIG9ubHkgcmVhc29uCiAgKiB3ZSBuZWVkIGEgc2VwYXJhdGUgY2xhc3Mg
aGVyZSBpcyB0aGF0IEltYWdlTGF5ZXJzIGFyZW4ndCB0aHJlYWRzYWZlCiAgKiAoYmVjYXVzZSBs
YXllcnMgY2FuIG9ubHkgYmUgdXNlZCBvbiB0aGUgbWFpbiB0aHJlYWQpIGFuZCB3ZSB3YW50IHRv
CiAgKiBiZSBhYmxlIHRvIHNldCB0aGUgY3VycmVudCBJbWFnZSBmcm9tIGFueSB0aHJlYWQsIHRv
IGZhY2lsaXRhdGUKICAqIHZpZGVvIHBsYXliYWNrIHdpdGhvdXQgaW52b2x2aW5nIHRoZSBtYWlu
IHRocmVhZCwgZm9yIGV4YW1wbGUuCiAgKi8KIGNsYXNzIFRIRUJFU19BUEkgSW1hZ2VDb250YWlu
ZXIgewogICBUSEVCRVNfSU5MSU5FX0RFQ0xfVEhSRUFEU0FGRV9SRUZDT1VOVElORyhJbWFnZUNv
bnRhaW5lcikKIAogcHVibGljOgotICBJbWFnZUNvbnRhaW5lcigpIHt9CisgIEltYWdlQ29udGFp
bmVyKCkgOiBtUGFpbnRDb3VudCgwKSB7fQogICB2aXJ0dWFsIH5JbWFnZUNvbnRhaW5lcigpIHt9
CiAKICAgLyoqCiAgICAqIENyZWF0ZSBhbiBJbWFnZSBpbiBvbmUgb2YgdGhlIGdpdmVuIGZvcm1h
dHMuCiAgICAqIFBpY2tzIHRoZSAiYmVzdCIgZm9ybWF0IGZyb20gdGhlIGxpc3QgYW5kIGNyZWF0
ZXMgYW4gSW1hZ2Ugb2YgdGhhdAogICAgKiBmb3JtYXQuCiAgICAqIFJldHVybnMgbnVsbCBpZiB0
aGlzIGJhY2tlbmQgZG9lcyBub3Qgc3VwcG9ydCBhbnkgb2YgdGhlIGZvcm1hdHMuCiAgICAqLwpA
QCAtMjA2LDIwICsyMzAsNTIgQEAgcHVibGljOgogCiAgIC8qKgogICAgKiBHZXQgdGhlIGxheWVy
IG1hbmFnZXIgdHlwZSB0aGlzIGltYWdlIGNvbnRhaW5lciB3YXMgY3JlYXRlZCB3aXRoLAogICAg
KiBwcmVzdW1hYmx5IGl0cyB1c2VycyBtaWdodCB3YW50IHRvIGRvIHNvbWV0aGluZyBzcGVjaWFs
IGlmIHR5cGVzIGRvIG5vdAogICAgKiBtYXRjaC4KICAgICovCiAgIHZpcnR1YWwgTGF5ZXJNYW5h
Z2VyOjpMYXllcnNCYWNrZW5kIEdldEJhY2tlbmRUeXBlKCkgPSAwOwogCisgIC8qKgorICAgKiBS
ZXR1cm5zIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBjdXJyZW50bHkgY29udGFpbmVkIGltYWdlIHdh
cyBmaXJzdAorICAgKiBwYWludGVkLiAgVGhpcyBpcyByZXNldCBldmVyeSB0aW1lIGEgbmV3IGlt
YWdlIGlzIHNldCBhcyB0aGUgY3VycmVudAorICAgKiBpbWFnZS4gIE5vdGUgdGhpcyBtYXkgcmV0
dXJuIGEgbnVsbCB0aW1lc3RhbXAgaWYgdGhlIGN1cnJlbnQgaW1hZ2UKKyAgICogaGFzIG5vdCB5
ZXQgYmVlbiBwYWludGVkLiAgVGhyZWFkc2FmZS4KKyAgICovCisgIHZpcnR1YWwgVGltZVN0YW1w
IEdldFBhaW50VGltZSgpID0gMDsKKworICAvKioKKyAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9m
IGltYWdlcyB3aGljaCBoYXZlIGJlZW4gY29udGFpbmVkIGluIHRoaXMgY29udGFpbmVyCisgICAq
IGFuZCBwYWludGVkIGF0IGxlYXN0IG9uY2UuICBUaHJlYWRzYWZlLgorICAgKi8KKyAgdmlydHVh
bCBQUlVpbnQzMiBHZXRQYWludENvdW50KCkgPSAwOworCisgIC8qKgorICAgKiBOb3RpZmllcyB0
aGUgY29udGFpbmVyIHRoYXQgYUltYWdlIGhhcyBiZWVuIHBhaW50ZWQuICBOb3RlIHdlIG11c3Qg
cGFzcworICAgKiBpbiBhIHBvaW50ZXIgdG8gdGhlIGltYWdlIHRoYXQgaGFzIGJlZW4gcGFpbnRl
ZCwgYXMgdGhlIGN1cnJlbnQgaW1hZ2UKKyAgICogY2FuIGNoYW5nZSB3aGlsZSB3ZSdyZSByZW5k
ZXJpbmcsIGFuZCBpbiB0aGF0IGNhc2Ugd2UgZG9uJ3Qgd2FudCB0bworICAgKiByZWNvcmQgdGhl
IHBhaW50IHRpbWUgb2YgdGhlIGp1c3QgcGFpbnRlZCBpbWFnZSBhcyB0aGUgcGFpbnQgdGltZSBv
ZiB0aGUKKyAgICogY3VycmVudCBpbWFnZS4gIFRocmVhZHNhZmUuCisgICAqLworICB2aXJ0dWFs
IHZvaWQgTm90aWZ5UGFpbnRlZEltYWdlKEltYWdlKiBhSW1hZ2UpID0gMDsKKwogcHJvdGVjdGVk
OgogICBMYXllck1hbmFnZXIqIG1NYW5hZ2VyOwogCi0gIEltYWdlQ29udGFpbmVyKExheWVyTWFu
YWdlciogYU1hbmFnZXIpIDogbU1hbmFnZXIoYU1hbmFnZXIpIHt9CisgIEltYWdlQ29udGFpbmVy
KExheWVyTWFuYWdlciogYU1hbmFnZXIpIDogbU1hbmFnZXIoYU1hbmFnZXIpLCBtUGFpbnRDb3Vu
dCgwKSB7fQorCisgIC8vIE51bWJlciBvZiBjb250YWluZWQgaW1hZ2VzIHRoYXQgaGF2ZSBiZWVu
IHBhaW50ZWQgYXQgbGVhc3Qgb25jZS4gIEl0J3MgdXAKKyAgLy8gdG8gdGhlIEltYWdlQ29udGFp
bmVyIGltcGxlbWVudGF0aW9uIHRvIGVuc3VyZSBhY2Nlc3NlcyB0byB0aGlzIGFyZQorICAvLyB0
aHJlYWRzYWZlLgorICBQUlVpbnQzMiBtUGFpbnRDb3VudDsKKworICAvLyBUaW1lIHN0YW1wIGF0
IHdoaWNoIHRoZSBjdXJyZW50IGltYWdlIHdhcyBmaXJzdCBwYWludGVkLiAgSXQncyB1cCB0byB0
aGUKKyAgLy8gSW1hZ2VDb250YWluZXIgaW1wbGVtZW50YXRpb24gdG8gZW5zdXJlIGFjY2Vzc2Vz
IHRvIHRoaXMgYXJlIHRocmVhZHNhZmUuCisgIFRpbWVTdGFtcCBtUGFpbnRUaW1lOwogfTsKIAog
LyoqCiAgKiBBIExheWVyIHdoaWNoIHJlbmRlcnMgYW4gSW1hZ2UuCiAgKi8KIGNsYXNzIFRIRUJF
U19BUEkgSW1hZ2VMYXllciA6IHB1YmxpYyBMYXllciB7CiBwdWJsaWM6CiAgIC8qKgpkaWZmIC0t
Z2l0IGEvZ2Z4L2xheWVycy9iYXNpYy9CYXNpY0ltYWdlcy5jcHAgYi9nZngvbGF5ZXJzL2Jhc2lj
L0Jhc2ljSW1hZ2VzLmNwcAotLS0gYS9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljSW1hZ2VzLmNwcAor
KysgYi9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljSW1hZ2VzLmNwcApAQCAtMzAyLDE2ICszMDIsMjAg
QEAgcHVibGljOgogICB2aXJ0dWFsIGFscmVhZHlfQWRkUmVmZWQ8SW1hZ2U+IEdldEN1cnJlbnRJ
bWFnZSgpOwogICB2aXJ0dWFsIGFscmVhZHlfQWRkUmVmZWQ8Z2Z4QVN1cmZhY2U+IEdldEN1cnJl
bnRBc1N1cmZhY2UoZ2Z4SW50U2l6ZSogYVNpemUpOwogICB2aXJ0dWFsIGdmeEludFNpemUgR2V0
Q3VycmVudFNpemUoKTsKICAgdmlydHVhbCBQUkJvb2wgU2V0TGF5ZXJNYW5hZ2VyKExheWVyTWFu
YWdlciAqYU1hbmFnZXIpOwogICB2aXJ0dWFsIHZvaWQgU2V0U2NhbGVIaW50KGNvbnN0IGdmeElu
dFNpemUmIGFTY2FsZUhpbnQpOwogICB2b2lkIFNldE9mZnNjcmVlbkZvcm1hdChnZnhJbWFnZUZv
cm1hdCBhRm9ybWF0KSB7IG1PZmZzY3JlZW5Gb3JtYXQgPSBhRm9ybWF0OyB9CiAgIHZpcnR1YWwg
TGF5ZXJNYW5hZ2VyOjpMYXllcnNCYWNrZW5kIEdldEJhY2tlbmRUeXBlKCkgeyByZXR1cm4gTGF5
ZXJNYW5hZ2VyOjpMQVlFUlNfQkFTSUM7IH0KIAorICBUaW1lU3RhbXAgR2V0UGFpbnRUaW1lKCk7
CisgIFBSVWludDMyIEdldFBhaW50Q291bnQoKTsKKyAgdm9pZCBOb3RpZnlQYWludGVkSW1hZ2Uo
SW1hZ2UqIGFJbWFnZSk7CisKIHByb3RlY3RlZDoKICAgTW9uaXRvciBtTW9uaXRvcjsKICAgbnNS
ZWZQdHI8SW1hZ2U+IG1JbWFnZTsKICAgZ2Z4SW50U2l6ZSBtU2NhbGVIaW50OwogICBnZnhJbWFn
ZUZvcm1hdCBtT2Zmc2NyZWVuRm9ybWF0OwogfTsKIAogLyoqCkBAIC0zNDAsMjAgKzM0NCw0NSBA
QCBCYXNpY0ltYWdlQ29udGFpbmVyOjpDcmVhdGVJbWFnZShjb25zdCBJCiAgIH0gZWxzZSBpZiAo
Rm9ybWF0SW5MaXN0KGFGb3JtYXRzLCBhTnVtRm9ybWF0cywgSW1hZ2U6OlBMQU5BUl9ZQ0JDUikp
IHsKICAgICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAgICAgaW1hZ2UgPSBuZXcg
QmFzaWNQbGFuYXJZQ2JDckltYWdlKG1TY2FsZUhpbnQpOwogICAgIHN0YXRpY19jYXN0PEJhc2lj
UGxhbmFyWUNiQ3JJbWFnZSo+KGltYWdlLmdldCgpKS0+U2V0T2Zmc2NyZWVuRm9ybWF0KG1PZmZz
Y3JlZW5Gb3JtYXQpOwogICB9CiAgIHJldHVybiBpbWFnZS5mb3JnZXQoKTsKIH0KIAorVGltZVN0
YW1wCitCYXNpY0ltYWdlQ29udGFpbmVyOjpHZXRQYWludFRpbWUoKQoreworICBNb25pdG9yQXV0
b0VudGVyIG1vbihtTW9uaXRvcik7CisgIHJldHVybiBtUGFpbnRUaW1lOworfQorCitQUlVpbnQz
MgorQmFzaWNJbWFnZUNvbnRhaW5lcjo6R2V0UGFpbnRDb3VudCgpCit7CisgIE1vbml0b3JBdXRv
RW50ZXIgbW9uKG1Nb25pdG9yKTsKKyAgcmV0dXJuIG1QYWludENvdW50OworfQorCit2b2lkCitC
YXNpY0ltYWdlQ29udGFpbmVyOjpOb3RpZnlQYWludGVkSW1hZ2UoSW1hZ2UqIGFJbWFnZSkKK3sK
KyAgTW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOworICBtUGFpbnRDb3VudCsrOworICBp
ZiAoYUltYWdlID09IG1JbWFnZSkgeworICAgIG1QYWludFRpbWUgPSBUaW1lU3RhbXA6Ok5vdygp
OworICB9Cit9CisKIHZvaWQKIEJhc2ljSW1hZ2VDb250YWluZXI6OlNldEN1cnJlbnRJbWFnZShJ
bWFnZSogYUltYWdlKQogewogICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CisgIG1Q
YWludFRpbWUgPSBUaW1lU3RhbXAoKTsKICAgbUltYWdlID0gYUltYWdlOwogfQogCiBhbHJlYWR5
X0FkZFJlZmVkPEltYWdlPgogQmFzaWNJbWFnZUNvbnRhaW5lcjo6R2V0Q3VycmVudEltYWdlKCkK
IHsKICAgTW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICBuc1JlZlB0cjxJbWFnZT4g
aW1hZ2UgPSBtSW1hZ2U7CmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljTGF5ZXJz
LmNwcCBiL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNMYXllcnMuY3BwCi0tLSBhL2dmeC9sYXllcnMv
YmFzaWMvQmFzaWNMYXllcnMuY3BwCisrKyBiL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNMYXllcnMu
Y3BwCkBAIC03MjgsMTYgKzcyOCwxOCBAQCBCYXNpY0ltYWdlTGF5ZXI6OlBhaW50KGdmeENvbnRl
eHQqIGFDb250CiAKIGFscmVhZHlfQWRkUmVmZWQ8Z2Z4UGF0dGVybj4KIEJhc2ljSW1hZ2VMYXll
cjo6R2V0QW5kUGFpbnRDdXJyZW50SW1hZ2UoZ2Z4Q29udGV4dCogYUNvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFPcGFjaXR5KQogewogICBp
ZiAoIW1Db250YWluZXIpCiAgICAgcmV0dXJuIG5zbnVsbDsKIAorICBuc1JlZlB0cjxJbWFnZT4g
aW1hZ2UgPSBtQ29udGFpbmVyLT5HZXRDdXJyZW50SW1hZ2UoKTsKKwogICBuc1JlZlB0cjxnZnhB
U3VyZmFjZT4gc3VyZmFjZSA9IG1Db250YWluZXItPkdldEN1cnJlbnRBc1N1cmZhY2UoJm1TaXpl
KTsKICAgaWYgKCFzdXJmYWNlKSB7CiAgICAgcmV0dXJuIG5zbnVsbDsKICAgfQogCiAgIG5zUmVm
UHRyPGdmeFBhdHRlcm4+IHBhdCA9IG5ldyBnZnhQYXR0ZXJuKHN1cmZhY2UpOwogICBpZiAoIXBh
dCkgewogICAgIHJldHVybiBuc251bGw7CkBAIC03NDcsMTcgKzc0OSwyMyBAQCBCYXNpY0ltYWdl
TGF5ZXI6OkdldEFuZFBhaW50Q3VycmVudEltYWdlCiAKICAgLy8gVGhlIHZpc2libGUgcmVnaW9u
IGNhbiBleHRlbmQgb3V0c2lkZSB0aGUgaW1hZ2UuICBJZiB3ZSdyZSBub3QKICAgLy8gdGlsaW5n
LCB3ZSBkb24ndCB3YW50IHRvIGRyYXcgaW50byB0aGF0IGFyZWEsIHNvIGp1c3QgZHJhdyB3aXRo
aW4KICAgLy8gdGhlIGltYWdlIGJvdW5kcy4KICAgY29uc3QgbnNJbnRSZWN0KiB0aWxlU3JjUmVj
dCA9IEdldFRpbGVTb3VyY2VSZWN0KCk7CiAgIFBhaW50Q29udGV4dChwYXQsCiAgICAgICAgICAg
ICAgICB0aWxlU3JjUmVjdCA/IEdldFZpc2libGVSZWdpb24oKSA6IG5zSW50UmVnaW9uKG5zSW50
UmVjdCgwLCAwLCBtU2l6ZS53aWR0aCwgbVNpemUuaGVpZ2h0KSksCiAgICAgICAgICAgICAgICB0
aWxlU3JjUmVjdCwKLSAgICAgICAgICAgICAgIGFPcGFjaXR5LCBhQ29udGV4dCk7IAorICAgICAg
ICAgICAgICAgYU9wYWNpdHksIGFDb250ZXh0KTsKKworICBpZiAoIWltYWdlLT5IYXNCZWVuUGFp
bnRlZCgpKSB7CisgICAgaW1hZ2UtPk1hcmtQYWludGVkKCk7CisgICAgR2V0Q29udGFpbmVyKCkt
Pk5vdGlmeVBhaW50ZWRJbWFnZShpbWFnZSk7CisgIH0KKwogICByZXR1cm4gcGF0LmZvcmdldCgp
OwogfQogCiAvKnN0YXRpYyovIHZvaWQKIEJhc2ljSW1hZ2VMYXllcjo6UGFpbnRDb250ZXh0KGdm
eFBhdHRlcm4qIGFQYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNJbnRSZWdpb24mIGFWaXNpYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNJbnRSZWN0KiBhVGlsZVNvdXJjZVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBhT3BhY2l0eSwKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNkMTAvSW1hZ2VM
YXllckQzRDEwLmNwcCBiL2dmeC9sYXllcnMvZDNkMTAvSW1hZ2VMYXllckQzRDEwLmNwcAotLS0g
YS9nZngvbGF5ZXJzL2QzZDEwL0ltYWdlTGF5ZXJEM0QxMC5jcHAKKysrIGIvZ2Z4L2xheWVycy9k
M2QxMC9JbWFnZUxheWVyRDNEMTAuY3BwCkBAIC0xMjAsMTggKzEyMCw0MCBAQCBJbWFnZUNvbnRh
aW5lckQzRDEwOjpDcmVhdGVJbWFnZShjb25zdCBJCiAgIH0KICAgcmV0dXJuIGltZy5mb3JnZXQo
KTsKIH0KIAogdm9pZAogSW1hZ2VDb250YWluZXJEM0QxMDo6U2V0Q3VycmVudEltYWdlKEltYWdl
ICphSW1hZ2UpCiB7CiAgIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0aXZlSW1hZ2VMb2NrKTsKKyAg
CisgIG1QYWludFRpbWUgPSBUaW1lU3RhbXAoKTsKKyAgbUFjdGl2ZUltYWdlID0gYUltYWdlOwor
fQogCi0gIG1BY3RpdmVJbWFnZSA9IGFJbWFnZTsKK1RpbWVTdGFtcCBJbWFnZUNvbnRhaW5lckQz
RDEwOjpHZXRQYWludFRpbWUoKSB7CisgIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0aXZlSW1hZ2VM
b2NrKTsKKworICByZXR1cm4gbVBhaW50VGltZTsKK30KKworUFJVaW50MzIgSW1hZ2VDb250YWlu
ZXJEM0QxMDo6R2V0UGFpbnRDb3VudCgpIHsKKyAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3RpdmVJ
bWFnZUxvY2spOworCisgIHJldHVybiBtUGFpbnRDb3VudDsKK30KKwordm9pZCBJbWFnZUNvbnRh
aW5lckQzRDEwOjpOb3RpZnlQYWludGVkSW1hZ2UoSW1hZ2UqIGFJbWFnZSkgeworICBNdXRleEF1
dG9Mb2NrIGxvY2sobUFjdGl2ZUltYWdlTG9jayk7CisKKyAgbVBhaW50Q291bnQrKzsKKyAgaWYg
KGFJbWFnZSA9PSBtQWN0aXZlSW1hZ2UpIHsKKyAgICBtUGFpbnRUaW1lID0gVGltZVN0YW1wOjpO
b3coKTsKKyAgfQogfQogCiBhbHJlYWR5X0FkZFJlZmVkPEltYWdlPgogSW1hZ2VDb250YWluZXJE
M0QxMDo6R2V0Q3VycmVudEltYWdlKCkKIHsKICAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3RpdmVJ
bWFnZUxvY2spOwogCiAgIG5zUmVmUHRyPEltYWdlPiByZXR2YWwgPSBtQWN0aXZlSW1hZ2U7CkBA
IC0zNDksMTYgKzM3MSwyMSBAQCBJbWFnZUxheWVyRDNEMTA6OlJlbmRlckxheWVyKCkKICAgICAg
ICAgKGZsb2F0KTAsCiAgICAgICAgIChmbG9hdCl5dXZJbWFnZS0+bVNpemUud2lkdGgsCiAgICAg
ICAgIChmbG9hdCl5dXZJbWFnZS0+bVNpemUuaGVpZ2h0KQogICAgICAgKTsKICAgfQogCiAgIHRl
Y2huaXF1ZS0+R2V0UGFzc0J5SW5kZXgoMCktPkFwcGx5KDApOwogICBkZXZpY2UoKS0+RHJhdyg0
LCAwKTsKKworICBpZiAoIWltYWdlLT5IYXNCZWVuUGFpbnRlZCgpKSB7CisgICAgaW1hZ2UtPk1h
cmtQYWludGVkKCk7CisgICAgR2V0Q29udGFpbmVyKCktPk5vdGlmeVBhaW50ZWRJbWFnZShpbWFn
ZSk7CisgIH0KIH0KIAogUGxhbmFyWUNiQ3JJbWFnZUQzRDEwOjpQbGFuYXJZQ2JDckltYWdlRDNE
MTAoSUQzRDEwRGV2aWNlMSAqYURldmljZSkKICAgOiBQbGFuYXJZQ2JDckltYWdlKHN0YXRpY19j
YXN0PEltYWdlRDNEMTAqPih0aGlzKSkKICAgLCBtRGV2aWNlKGFEZXZpY2UpCiAgICwgbUhhc0Rh
dGEoUFJfRkFMU0UpCiB7CiB9CmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL2QzZDEwL0ltYWdlTGF5
ZXJEM0QxMC5oIGIvZ2Z4L2xheWVycy9kM2QxMC9JbWFnZUxheWVyRDNEMTAuaAotLS0gYS9nZngv
bGF5ZXJzL2QzZDEwL0ltYWdlTGF5ZXJEM0QxMC5oCisrKyBiL2dmeC9sYXllcnMvZDNkMTAvSW1h
Z2VMYXllckQzRDEwLmgKQEAgLTY1LDE2ICs2NSwyMCBAQCBwdWJsaWM6CiAKICAgdmlydHVhbCBQ
UkJvb2wgU2V0TGF5ZXJNYW5hZ2VyKExheWVyTWFuYWdlciAqYU1hbmFnZXIpOwogCiAgIHZpcnR1
YWwgTGF5ZXJNYW5hZ2VyOjpMYXllcnNCYWNrZW5kIEdldEJhY2tlbmRUeXBlKCkgeyByZXR1cm4g
TGF5ZXJNYW5hZ2VyOjpMQVlFUlNfRDNEMTA7IH0KIAogICBJRDNEMTBEZXZpY2UxICpkZXZpY2Uo
KSB7IHJldHVybiBtRGV2aWNlOyB9CiAgIHZvaWQgU2V0RGV2aWNlKElEM0QxMERldmljZTEgKmFE
ZXZpY2UpIHsgbURldmljZSA9IGFEZXZpY2U7IH0KIAorICBUaW1lU3RhbXAgR2V0UGFpbnRUaW1l
KCk7CisgIFBSVWludDMyIEdldFBhaW50Q291bnQoKTsKKyAgdm9pZCBOb3RpZnlQYWludGVkSW1h
Z2UoSW1hZ2UqIGFJbWFnZSk7CisKIHByaXZhdGU6CiAgIHR5cGVkZWYgbW96aWxsYTo6TXV0ZXgg
TXV0ZXg7CiAKICAgbnNSZWZQdHI8SW1hZ2U+IG1BY3RpdmVJbWFnZTsKICAgbnNSZWZQdHI8SUQz
RDEwRGV2aWNlMT4gbURldmljZTsKIAogICBNdXRleCBtQWN0aXZlSW1hZ2VMb2NrOwogfTsKZGlm
ZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNkOS9JbWFnZUxheWVyRDNEOS5jcHAgYi9nZngvbGF5ZXJz
L2QzZDkvSW1hZ2VMYXllckQzRDkuY3BwCi0tLSBhL2dmeC9sYXllcnMvZDNkOS9JbWFnZUxheWVy
RDNEOS5jcHAKKysrIGIvZ2Z4L2xheWVycy9kM2Q5L0ltYWdlTGF5ZXJEM0Q5LmNwcApAQCAtMTUx
LDIxICsxNTEsNDkgQEAgSW1hZ2VDb250YWluZXJEM0Q5OjpDcmVhdGVJbWFnZShjb25zdCBJbQog
ICBpZiAoYUZvcm1hdHNbMF0gPT0gSW1hZ2U6OlBMQU5BUl9ZQ0JDUikgewogICAgIGltZyA9IG5l
dyBQbGFuYXJZQ2JDckltYWdlRDNEOSgpOwogICB9IGVsc2UgaWYgKGFGb3JtYXRzWzBdID09IElt
YWdlOjpDQUlST19TVVJGQUNFKSB7CiAgICAgaW1nID0gbmV3IENhaXJvSW1hZ2VEM0Q5KG1EZXZp
Y2UpOwogICB9CiAgIHJldHVybiBpbWcuZm9yZ2V0KCk7CiB9CiAKK1RpbWVTdGFtcAorSW1hZ2VD
b250YWluZXJEM0Q5OjpHZXRQYWludFRpbWUoKQoreworICBNdXRleEF1dG9Mb2NrIGxvY2sobUFj
dGl2ZUltYWdlTG9jayk7CisKKyAgcmV0dXJuIG1QYWludFRpbWU7Cit9CisKK1BSVWludDMyCitJ
bWFnZUNvbnRhaW5lckQzRDk6OkdldFBhaW50Q291bnQoKQoreworICBNdXRleEF1dG9Mb2NrIGxv
Y2sobUFjdGl2ZUltYWdlTG9jayk7CisKKyAgcmV0dXJuIG1QYWludENvdW50OworfQorCit2b2lk
CitJbWFnZUNvbnRhaW5lckQzRDk6Ok5vdGlmeVBhaW50ZWRJbWFnZShJbWFnZSogYUltYWdlKQor
eworICBNdXRleEF1dG9Mb2NrIGxvY2sobUFjdGl2ZUltYWdlTG9jayk7CisKKyAgbVBhaW50Q291
bnQrKzsKKyAgaWYgKGFJbWFnZSA9PSBtQWN0aXZlSW1hZ2UpIHsKKyAgICBtUGFpbnRUaW1lID0g
VGltZVN0YW1wOjpOb3coKTsKKyAgfQorfQorCiB2b2lkCiBJbWFnZUNvbnRhaW5lckQzRDk6OlNl
dEN1cnJlbnRJbWFnZShJbWFnZSAqYUltYWdlKQogewogICBNdXRleEF1dG9Mb2NrIGxvY2sobUFj
dGl2ZUltYWdlTG9jayk7CiAKKyAgbVBhaW50VGltZSA9IFRpbWVTdGFtcCgpOwogICBtQWN0aXZl
SW1hZ2UgPSBhSW1hZ2U7CiB9CiAKIGFscmVhZHlfQWRkUmVmZWQ8SW1hZ2U+CiBJbWFnZUNvbnRh
aW5lckQzRDk6OkdldEN1cnJlbnRJbWFnZSgpCiB7CiAgIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0
aXZlSW1hZ2VMb2NrKTsKIApAQCAtMzcwLDE2ICszOTgsMjEgQEAgSW1hZ2VMYXllckQzRDk6OlJl
bmRlckxheWVyKCkKICAgICB9CiAgICAgZGV2aWNlKCktPlNldFRleHR1cmUoMCwgY2Fpcm9JbWFn
ZS0+R2V0T3JDcmVhdGVUZXh0dXJlKCkpOwogICAgIGRldmljZSgpLT5EcmF3UHJpbWl0aXZlKEQz
RFBUX1RSSUFOR0xFU1RSSVAsIDAsIDIpOwogICAgIGlmIChtRmlsdGVyID09IGdmeFBhdHRlcm46
OkZJTFRFUl9ORUFSRVNUKSB7CiAgICAgICBkZXZpY2UoKS0+U2V0U2FtcGxlclN0YXRlKDAsIEQz
RFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX0xJTkVBUik7CiAgICAgICBkZXZpY2UoKS0+U2V0U2Ft
cGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RURVhGX0xJTkVBUik7CiAgICAgfQog
ICB9CisKKyAgaWYgKCFpbWFnZS0+SGFzQmVlblBhaW50ZWQoKSkgeworICAgIGltYWdlLT5NYXJr
UGFpbnRlZCgpOworICAgIEdldENvbnRhaW5lcigpLT5Ob3RpZnlQYWludGVkSW1hZ2UoaW1hZ2Up
OworICB9CiB9CiAKIFBsYW5hcllDYkNySW1hZ2VEM0Q5OjpQbGFuYXJZQ2JDckltYWdlRDNEOSgp
CiAgIDogUGxhbmFyWUNiQ3JJbWFnZShzdGF0aWNfY2FzdDxJbWFnZUQzRDkqPih0aGlzKSkKICAg
LCBtSGFzRGF0YShQUl9GQUxTRSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9kM2Q5
L0ltYWdlTGF5ZXJEM0Q5LmggYi9nZngvbGF5ZXJzL2QzZDkvSW1hZ2VMYXllckQzRDkuaAotLS0g
YS9nZngvbGF5ZXJzL2QzZDkvSW1hZ2VMYXllckQzRDkuaAorKysgYi9nZngvbGF5ZXJzL2QzZDkv
SW1hZ2VMYXllckQzRDkuaApAQCAtNjUsMTYgKzY1LDIwIEBAIHB1YmxpYzoKIAogICB2aXJ0dWFs
IFBSQm9vbCBTZXRMYXllck1hbmFnZXIoTGF5ZXJNYW5hZ2VyICphTWFuYWdlcik7CiAKICAgdmly
dHVhbCBMYXllck1hbmFnZXI6OkxheWVyc0JhY2tlbmQgR2V0QmFja2VuZFR5cGUoKSB7IHJldHVy
biBMYXllck1hbmFnZXI6OkxBWUVSU19EM0Q5OyB9CiAKICAgSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlKCkgeyByZXR1cm4gbURldmljZTsgfQogICB2b2lkIFNldERldmljZShJRGlyZWN0M0REZXZp
Y2U5ICphRGV2aWNlKSB7IG1EZXZpY2UgPSBhRGV2aWNlOyB9CiAKKyAgVGltZVN0YW1wIEdldFBh
aW50VGltZSgpOworICBQUlVpbnQzMiBHZXRQYWludENvdW50KCk7CisgIHZvaWQgTm90aWZ5UGFp
bnRlZEltYWdlKEltYWdlKiBhSW1hZ2UpOworCiBwcml2YXRlOgogICB0eXBlZGVmIG1vemlsbGE6
Ok11dGV4IE11dGV4OwogCiAgIG5zUmVmUHRyPEltYWdlPiBtQWN0aXZlSW1hZ2U7CiAKICAgbnNS
ZWZQdHI8SURpcmVjdDNERGV2aWNlOT4gbURldmljZTsKIAogICBNdXRleCBtQWN0aXZlSW1hZ2VM
b2NrOwpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9vcGVuZ2wvSW1hZ2VMYXllck9HTC5jcHAgYi9n
ZngvbGF5ZXJzL29wZW5nbC9JbWFnZUxheWVyT0dMLmNwcAotLS0gYS9nZngvbGF5ZXJzL29wZW5n
bC9JbWFnZUxheWVyT0dMLmNwcAorKysgYi9nZngvbGF5ZXJzL29wZW5nbC9JbWFnZUxheWVyT0dM
LmNwcApAQCAtMjIzLDI0ICsyMjMsNTIgQEAgSW1hZ2VDb250YWluZXJPR0w6OkNyZWF0ZUltYWdl
KGNvbnN0IEltYQogICBlbHNlIGlmIChhRm9ybWF0c1swXSA9PSBJbWFnZTo6TUFDX0lPX1NVUkZB
Q0UpIHsKICAgICBpbWcgPSBuZXcgTWFjSU9TdXJmYWNlSW1hZ2VPR0woc3RhdGljX2Nhc3Q8TGF5
ZXJNYW5hZ2VyT0dMKj4obU1hbmFnZXIpKTsKICAgfQogI2VuZGlmCiAKICAgcmV0dXJuIGltZy5m
b3JnZXQoKTsKIH0KIAorVGltZVN0YW1wCitJbWFnZUNvbnRhaW5lck9HTDo6R2V0UGFpbnRUaW1l
KCkKK3sKKyAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3RpdmVJbWFnZUxvY2spOworCisgIHJldHVy
biBtUGFpbnRUaW1lOworfQorCitQUlVpbnQzMgorSW1hZ2VDb250YWluZXJPR0w6OkdldFBhaW50
Q291bnQoKQoreworICBNdXRleEF1dG9Mb2NrIGxvY2sobUFjdGl2ZUltYWdlTG9jayk7CisKKyAg
cmV0dXJuIG1QYWludENvdW50OworfQorCit2b2lkCitJbWFnZUNvbnRhaW5lck9HTDo6Tm90aWZ5
UGFpbnRlZEltYWdlKEltYWdlKiBhSW1hZ2UpCit7CisgIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0
aXZlSW1hZ2VMb2NrKTsKKworICBtUGFpbnRDb3VudCsrOworICBpZiAoYUltYWdlID09IG1BY3Rp
dmVJbWFnZSkgeworICAgIG1QYWludFRpbWUgPSBUaW1lU3RhbXA6Ok5vdygpOworICB9Cit9CisK
IHZvaWQKIEltYWdlQ29udGFpbmVyT0dMOjpTZXRDdXJyZW50SW1hZ2UoSW1hZ2UgKmFJbWFnZSkK
IHsKICAgbnNSZWZQdHI8SW1hZ2U+IG9sZEltYWdlOwogCiAgIHsKICAgICBNdXRleEF1dG9Mb2Nr
IGxvY2sobUFjdGl2ZUltYWdlTG9jayk7CiAKKyAgICBtUGFpbnRUaW1lID0gVGltZVN0YW1wKCk7
CiAgICAgb2xkSW1hZ2UgPSBtQWN0aXZlSW1hZ2UuZm9yZ2V0KCk7CiAgICAgbUFjdGl2ZUltYWdl
ID0gYUltYWdlOwogICB9CiAKICAgLy8gTWFrZSBzdXJlIG9sZEltYWdlIGlzIHJlbGVhc2VkIG91
dHNpZGUgdGhlIGxvY2ssIHNvIGl0IGNhbiB0YWtlIG91cgogICAvLyBsb2NrIGluIFJlY3ljbGVC
dWZmZXIKIH0KIApAQCAtNDk2LDE2ICs1MjQsMjAgQEAgSW1hZ2VMYXllck9HTDo6UmVuZGVyTGF5
ZXIoaW50LAogICAgICBwcm9ncmFtLT5TZXRMYXllck9wYWNpdHkoR2V0RWZmZWN0aXZlT3BhY2l0
eSgpKTsKICAgICAgcHJvZ3JhbS0+U2V0UmVuZGVyT2Zmc2V0KGFPZmZzZXQpOwogICAgICBwcm9n
cmFtLT5TZXRUZXh0dXJlVW5pdCgwKTsKICAgICAKICAgICAgbU9HTE1hbmFnZXItPkJpbmRBbmRE
cmF3UXVhZChwcm9ncmFtKTsKICAgICAgZ2woKS0+ZkJpbmRUZXh0dXJlKExPQ0FMX0dMX1RFWFRV
UkVfUkVDVEFOR0xFX0FSQiwgMCk7CiAjZW5kaWYKICAgfQorICBpZiAoIWltYWdlLT5IYXNCZWVu
UGFpbnRlZCgpKSB7CisgICAgaW1hZ2UtPk1hcmtQYWludGVkKCk7CisgICAgR2V0Q29udGFpbmVy
KCktPk5vdGlmeVBhaW50ZWRJbWFnZShpbWFnZSk7CisgIH0KIH0KIAogc3RhdGljIHZvaWQKIElu
aXRUZXh0dXJlKEdMQ29udGV4dCogYUdMLCBHTHVpbnQgYVRleHR1cmUsIEdMZW51bSBhRm9ybWF0
LCBjb25zdCBnZnhJbnRTaXplJiBhU2l6ZSkKIHsKICAgYUdMLT5mQmluZFRleHR1cmUoTE9DQUxf
R0xfVEVYVFVSRV8yRCwgYVRleHR1cmUpOwogICBhR0wtPmZUZXhQYXJhbWV0ZXJpKExPQ0FMX0dM
X1RFWFRVUkVfMkQsIExPQ0FMX0dMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgTE9DQUxfR0xfTElORUFS
KTsKICAgYUdMLT5mVGV4UGFyYW1ldGVyaShMT0NBTF9HTF9URVhUVVJFXzJELCBMT0NBTF9HTF9U
RVhUVVJFX01BR19GSUxURVIsIExPQ0FMX0dMX0xJTkVBUik7CmRpZmYgLS1naXQgYS9nZngvbGF5
ZXJzL29wZW5nbC9JbWFnZUxheWVyT0dMLmggYi9nZngvbGF5ZXJzL29wZW5nbC9JbWFnZUxheWVy
T0dMLmgKLS0tIGEvZ2Z4L2xheWVycy9vcGVuZ2wvSW1hZ2VMYXllck9HTC5oCisrKyBiL2dmeC9s
YXllcnMvb3BlbmdsL0ltYWdlTGF5ZXJPR0wuaApAQCAtMTUzLDE2ICsxNTMsMjAgQEAgcHVibGlj
OgogICB2aXJ0dWFsIGFscmVhZHlfQWRkUmVmZWQ8Z2Z4QVN1cmZhY2U+IEdldEN1cnJlbnRBc1N1
cmZhY2UoZ2Z4SW50U2l6ZSogYVNpemUpOwogCiAgIHZpcnR1YWwgZ2Z4SW50U2l6ZSBHZXRDdXJy
ZW50U2l6ZSgpOwogCiAgIHZpcnR1YWwgUFJCb29sIFNldExheWVyTWFuYWdlcihMYXllck1hbmFn
ZXIgKmFNYW5hZ2VyKTsKIAogICB2aXJ0dWFsIExheWVyTWFuYWdlcjo6TGF5ZXJzQmFja2VuZCBH
ZXRCYWNrZW5kVHlwZSgpIHsgcmV0dXJuIExheWVyTWFuYWdlcjo6TEFZRVJTX09QRU5HTDsgfQog
CisgIFRpbWVTdGFtcCBHZXRQYWludFRpbWUoKTsKKyAgUFJVaW50MzIgR2V0UGFpbnRDb3VudCgp
OworICB2b2lkIE5vdGlmeVBhaW50ZWRJbWFnZShJbWFnZSogYUltYWdlKTsKKwogcHJpdmF0ZToK
ICAgdHlwZWRlZiBtb3ppbGxhOjpNdXRleCBNdXRleDsKIAogICBuc1JlZlB0cjxSZWN5Y2xlQmlu
PiBtUmVjeWNsZUJpbjsKIAogICAvLyBUaGlzIHByb3RlY3RzIG1BY3RpdmVJbWFnZQogICBNdXRl
eCBtQWN0aXZlSW1hZ2VMb2NrOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>516139</attachid>
            <date>2011-03-01 20:02:55 -0800</date>
            <delta_ts>2011-03-02 14:48:54 -0800</delta_ts>
            <desc>Patch: add paint stats to ImagesContainer</desc>
            <filename>580531-gfx-paint-time.patch</filename>
            <type>text/plain</type>
            <size>15851</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgYmFmY2JmMDhjNWI4YmUwNzViMjYwMjU5MDA1ZGZiMDRlYzdmZTIxNwpC
dWcgNTgwNTMxIC0gUmVjb3JkIGZpcnN0IHBhaW50IHRpbWUgYW5kIG51bWJlciBvZiBpbWFnZXMg
cGFpbnRlZCBpbiBJbWFnZUNvbnRhaW5lci4gcj0/CgpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9J
bWFnZUxheWVycy5oIGIvZ2Z4L2xheWVycy9JbWFnZUxheWVycy5oCi0tLSBhL2dmeC9sYXllcnMv
SW1hZ2VMYXllcnMuaAorKysgYi9nZngvbGF5ZXJzL0ltYWdlTGF5ZXJzLmgKQEAgLTM0LDE2ICsz
NCwxNyBAQAogICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0
aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaWZu
ZGVmIEdGWF9JTUFHRUxBWUVSX0gKICNkZWZpbmUgR0ZYX0lNQUdFTEFZRVJfSAogCiAjaW5jbHVk
ZSAiTGF5ZXJzLmgiCisjaW5jbHVkZSAibW96aWxsYS9UaW1lU3RhbXAuaCIKIAogI2luY2x1ZGUg
ImdmeFBhdHRlcm4uaCIKICNpbmNsdWRlICJuc1RocmVhZFV0aWxzLmgiCiAjaW5jbHVkZSAibnND
b3JlQW5pbWF0aW9uU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgbW96aWxsYSB7CiBuYW1lc3BhY2Ug
bGF5ZXJzIHsKIApAQCAtMTI2LDMxICsxMjcsMzMgQEAgcHJvdGVjdGVkOgogICogKGJlY2F1c2Ug
bGF5ZXJzIGNhbiBvbmx5IGJlIHVzZWQgb24gdGhlIG1haW4gdGhyZWFkKSBhbmQgd2Ugd2FudCB0
bwogICogYmUgYWJsZSB0byBzZXQgdGhlIGN1cnJlbnQgSW1hZ2UgZnJvbSBhbnkgdGhyZWFkLCB0
byBmYWNpbGl0YXRlCiAgKiB2aWRlbyBwbGF5YmFjayB3aXRob3V0IGludm9sdmluZyB0aGUgbWFp
biB0aHJlYWQsIGZvciBleGFtcGxlLgogICovCiBjbGFzcyBUSEVCRVNfQVBJIEltYWdlQ29udGFp
bmVyIHsKICAgVEhFQkVTX0lOTElORV9ERUNMX1RIUkVBRFNBRkVfUkVGQ09VTlRJTkcoSW1hZ2VD
b250YWluZXIpCiAKIHB1YmxpYzoKLSAgSW1hZ2VDb250YWluZXIoKSB7fQorICBJbWFnZUNvbnRh
aW5lcigpIDogbVBhaW50Q291bnQoMCksIG1QcmV2aW91c0ltYWdlUGFpbnRlZChQUl9GQUxTRSkg
e30KICAgdmlydHVhbCB+SW1hZ2VDb250YWluZXIoKSB7fQogCiAgIC8qKgogICAgKiBDcmVhdGUg
YW4gSW1hZ2UgaW4gb25lIG9mIHRoZSBnaXZlbiBmb3JtYXRzLgogICAgKiBQaWNrcyB0aGUgImJl
c3QiIGZvcm1hdCBmcm9tIHRoZSBsaXN0IGFuZCBjcmVhdGVzIGFuIEltYWdlIG9mIHRoYXQKICAg
ICogZm9ybWF0LgogICAgKiBSZXR1cm5zIG51bGwgaWYgdGhpcyBiYWNrZW5kIGRvZXMgbm90IHN1
cHBvcnQgYW55IG9mIHRoZSBmb3JtYXRzLgogICAgKi8KICAgdmlydHVhbCBhbHJlYWR5X0FkZFJl
ZmVkPEltYWdlPiBDcmVhdGVJbWFnZShjb25zdCBJbWFnZTo6Rm9ybWF0KiBhRm9ybWF0cywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTnVt
Rm9ybWF0cykgPSAwOwogCiAgIC8qKgogICAgKiBTZXQgYW4gSW1hZ2UgYXMgdGhlIGN1cnJlbnQg
aW1hZ2UgdG8gZGlzcGxheS4gVGhlIEltYWdlIG11c3QgaGF2ZQogICAgKiBiZWVuIGNyZWF0ZWQg
YnkgdGhpcyBJbWFnZUNvbnRhaW5lci4KKyAgICoKKyAgICogSW1wbGVtZW50YXRpb25zIG11c3Qg
Y2FsbCBDdXJyZW50SW1hZ2VDaGFuZ2VkKCkgaW4gYSB0aHJlYWRzYWZlIG1hbm5lci4KICAgICog
CiAgICAqIFRoZSBJbWFnZSBkYXRhIG11c3Qgbm90IGJlIG1vZGlmaWVkIGFmdGVyIHRoaXMgbWV0
aG9kIGlzIGNhbGxlZCEKICAgICovCiAgIHZpcnR1YWwgdm9pZCBTZXRDdXJyZW50SW1hZ2UoSW1h
Z2UqIGFJbWFnZSkgPSAwOwogCiAgIC8qKgogICAgKiBHZXQgdGhlIGN1cnJlbnQgSW1hZ2UuCiAg
ICAqIFRoaXMgaGFzIHRvIGFkZCBhIHJlZmVyZW5jZSBzaW5jZSBvdGhlcndpc2UgdGhlcmUgYXJl
IHJhY2UgY29uZGl0aW9ucwpAQCAtMjA2LDIwICsyMDksODcgQEAgcHVibGljOgogCiAgIC8qKgog
ICAgKiBHZXQgdGhlIGxheWVyIG1hbmFnZXIgdHlwZSB0aGlzIGltYWdlIGNvbnRhaW5lciB3YXMg
Y3JlYXRlZCB3aXRoLAogICAgKiBwcmVzdW1hYmx5IGl0cyB1c2VycyBtaWdodCB3YW50IHRvIGRv
IHNvbWV0aGluZyBzcGVjaWFsIGlmIHR5cGVzIGRvIG5vdAogICAgKiBtYXRjaC4KICAgICovCiAg
IHZpcnR1YWwgTGF5ZXJNYW5hZ2VyOjpMYXllcnNCYWNrZW5kIEdldEJhY2tlbmRUeXBlKCkgPSAw
OwogCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBjdXJyZW50bHkg
Y29udGFpbmVkIGltYWdlIHdhcyBmaXJzdAorICAgKiBwYWludGVkLiAgVGhpcyBpcyByZXNldCBl
dmVyeSB0aW1lIGEgbmV3IGltYWdlIGlzIHNldCBhcyB0aGUgY3VycmVudAorICAgKiBpbWFnZS4g
IE5vdGUgdGhpcyBtYXkgcmV0dXJuIGEgbnVsbCB0aW1lc3RhbXAgaWYgdGhlIGN1cnJlbnQgaW1h
Z2UKKyAgICogaGFzIG5vdCB5ZXQgYmVlbiBwYWludGVkLiAgVGhyZWFkc2FmZS4KKyAgICovCisg
IHZpcnR1YWwgVGltZVN0YW1wIEdldFBhaW50VGltZSgpID0gMDsKKworICAvKioKKyAgICogUmV0
dXJucyB0aGUgbnVtYmVyIG9mIGltYWdlcyB3aGljaCBoYXZlIGJlZW4gY29udGFpbmVkIGluIHRo
aXMgY29udGFpbmVyCisgICAqIGFuZCBwYWludGVkIGF0IGxlYXN0IG9uY2UuICBUaHJlYWRzYWZl
LgorICAgKi8KKyAgdmlydHVhbCBQUlVpbnQzMiBHZXRQYWludENvdW50KCkgPSAwOworCisgIC8q
KgorICAgKiBOb3RpZmllcyB0aGUgY29udGFpbmVyIHRoYXQgYUltYWdlIGhhcyBiZWVuIHBhaW50
ZWQuICBOb3RlIHdlIG11c3QgcGFzcworICAgKiBpbiBhIHBvaW50ZXIgdG8gdGhlIGltYWdlIHRo
YXQgaGFzIGJlZW4gcGFpbnRlZCwgYXMgdGhlIGN1cnJlbnQgaW1hZ2UKKyAgICogY2FuIGNoYW5n
ZSB3aGlsZSB3ZSdyZSByZW5kZXJpbmcsIGFuZCBpbiB0aGF0IGNhc2Ugd2UgZG9uJ3Qgd2FudCB0
bworICAgKiByZWNvcmQgdGhlIHBhaW50IHRpbWUgb2YgdGhlIGp1c3QgcGFpbnRlZCBpbWFnZSBh
cyB0aGUgcGFpbnQgdGltZSBvZiB0aGUKKyAgICogY3VycmVudCBpbWFnZS4gIFRocmVhZHNhZmUu
CisgICAqLworICB2aXJ0dWFsIHZvaWQgTm90aWZ5UGFpbnRlZEltYWdlKEltYWdlKiBhSW1hZ2Up
ID0gMDsKKwogcHJvdGVjdGVkOgogICBMYXllck1hbmFnZXIqIG1NYW5hZ2VyOwogCi0gIEltYWdl
Q29udGFpbmVyKExheWVyTWFuYWdlciogYU1hbmFnZXIpIDogbU1hbmFnZXIoYU1hbmFnZXIpIHt9
CisgIEltYWdlQ29udGFpbmVyKExheWVyTWFuYWdlciogYU1hbmFnZXIpCisgICAgOiBtTWFuYWdl
cihhTWFuYWdlciksCisgICAgICBtUGFpbnRDb3VudCgwKSwKKyAgICAgIG1QcmV2aW91c0ltYWdl
UGFpbnRlZChQUl9GQUxTRSkKKyAge30KKworICAvLyBJbmNyZW1lbnRzIG1QYWludENvdW50IGlm
IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgYVBhaW50ZWQgaGFzIGJlZW4KKyAgLy8gcGFpbnRlZCwg
YW5kIHNldHMgbVBhaW50VGltZSBpZiB0aGUgcGFpbnRlZCBpbWFnZSBpcyB0aGUgY3VycmVudCBp
bWFnZQorICAvLyAoYUN1cnJlbnQpLiAgSXQncyB1cCB0byB0aGUgSW1hZ2VDb250YWluZXIgaW1w
bGVtZW50YXRpb24gdG8gZW5zdXJlIHRoaXMKKyAgLy8gaXMgY2FsbGVkIGluIGEgdGhyZWFkc2Fm
ZSBtYW5uZXIuCisgIHZvaWQgUmVjb3JkUGFpbnRTdGF0cyhJbWFnZSogYVBhaW50ZWQsIEltYWdl
KiBhQ3VycmVudCkKKyAgeworICAgIGlmIChhUGFpbnRlZCA9PSBhQ3VycmVudCkgeworICAgICAg
aWYgKG1QYWludFRpbWUuSXNOdWxsKCkpIHsKKyAgICAgICAgbVBhaW50VGltZSA9IFRpbWVTdGFt
cDo6Tm93KCk7CisgICAgICAgIG1QYWludENvdW50Kys7CisgICAgICB9CisgICAgfSBlbHNlIGlm
ICghbVByZXZpb3VzSW1hZ2VQYWludGVkKSB7CisgICAgICAvLyBXaGlsZSB3ZSB3ZXJlIHBhaW50
aW5nIHRoaXMgaW1hZ2UsIHRoZSBjdXJyZW50IGltYWdlIGNoYW5nZWQuIFdlCisgICAgICAvLyBz
dGlsbCBtdXN0IGNvdW50IGl0IGFzIHBhaW50ZWQsIGJ1dCBjYW4ndCBzZXQgbVBhaW50VGltZSwg
c2luY2Ugd2UncmUKKyAgICAgIC8vIG5vIGxvbmdlciB0aGUgY3VycmVudCBpbWFnZS4KKyAgICAg
IG1QYWludENvdW50Kys7CisgICAgICBtUHJldmlvdXNJbWFnZVBhaW50ZWQgPSBQUl9UUlVFOwor
ICAgIH0KKyAgfQorCisgIC8vIFBlcmZvcm1zIG5lY2Vzc2FyeSBob3VzZWtlZXBpbmcgdG8gZW5z
dXJlIHRoZSBwYWludGVkIGZyYW1lIHN0YXRpc3RpY3MKKyAgLy8gYXJlIGFjY3VyYXRlLiBNdXN0
IGJlIGNhbGxlZCBieSBTZXRDdXJyZW50SW1hZ2UoKSBpbXBsZW1lbnRhdGlvbnMgaW4gYQorICAv
LyB0aHJlYWQgc2FmZSBtYW5uZXIuCisgIHZvaWQgQ3VycmVudEltYWdlQ2hhbmdlZCgpIHsKKyAg
ICBtUHJldmlvdXNJbWFnZVBhaW50ZWQgPSAhbVBhaW50VGltZS5Jc051bGwoKTsKKyAgICBtUGFp
bnRUaW1lID0gVGltZVN0YW1wKCk7CisgIH0KKworICAvLyBOdW1iZXIgb2YgY29udGFpbmVkIGlt
YWdlcyB0aGF0IGhhdmUgYmVlbiBwYWludGVkIGF0IGxlYXN0IG9uY2UuICBJdCdzIHVwCisgIC8v
IHRvIHRoZSBJbWFnZUNvbnRhaW5lciBpbXBsZW1lbnRhdGlvbiB0byBlbnN1cmUgYWNjZXNzZXMg
dG8gdGhpcyBhcmUKKyAgLy8gdGhyZWFkc2FmZS4KKyAgUFJVaW50MzIgbVBhaW50Q291bnQ7CisK
KyAgLy8gVGltZSBzdGFtcCBhdCB3aGljaCB0aGUgY3VycmVudCBpbWFnZSB3YXMgZmlyc3QgcGFp
bnRlZC4gIEl0J3MgdXAgdG8gdGhlCisgIC8vIEltYWdlQ29udGFpbmVyIGltcGxlbWVudGF0aW9u
IHRvIGVuc3VyZSBhY2Nlc3NlcyB0byB0aGlzIGFyZSB0aHJlYWRzYWZlLgorICBUaW1lU3RhbXAg
bVBhaW50VGltZTsKKworICAvLyBEZW5vdGVzIHdoZXRoZXIgdGhlIHByZXZpb3VzIGltYWdlIHdh
cyBwYWludGVkLgorICBQUkJvb2wgbVByZXZpb3VzSW1hZ2VQYWludGVkOwogfTsKIAogLyoqCiAg
KiBBIExheWVyIHdoaWNoIHJlbmRlcnMgYW4gSW1hZ2UuCiAgKi8KIGNsYXNzIFRIRUJFU19BUEkg
SW1hZ2VMYXllciA6IHB1YmxpYyBMYXllciB7CiBwdWJsaWM6CiAgIC8qKgpkaWZmIC0tZ2l0IGEv
Z2Z4L2xheWVycy9iYXNpYy9CYXNpY0ltYWdlcy5jcHAgYi9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2lj
SW1hZ2VzLmNwcAotLS0gYS9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljSW1hZ2VzLmNwcAorKysgYi9n
ZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljSW1hZ2VzLmNwcApAQCAtMzAyLDE2ICszMDIsMjAgQEAgcHVi
bGljOgogICB2aXJ0dWFsIGFscmVhZHlfQWRkUmVmZWQ8SW1hZ2U+IEdldEN1cnJlbnRJbWFnZSgp
OwogICB2aXJ0dWFsIGFscmVhZHlfQWRkUmVmZWQ8Z2Z4QVN1cmZhY2U+IEdldEN1cnJlbnRBc1N1
cmZhY2UoZ2Z4SW50U2l6ZSogYVNpemUpOwogICB2aXJ0dWFsIGdmeEludFNpemUgR2V0Q3VycmVu
dFNpemUoKTsKICAgdmlydHVhbCBQUkJvb2wgU2V0TGF5ZXJNYW5hZ2VyKExheWVyTWFuYWdlciAq
YU1hbmFnZXIpOwogICB2aXJ0dWFsIHZvaWQgU2V0U2NhbGVIaW50KGNvbnN0IGdmeEludFNpemUm
IGFTY2FsZUhpbnQpOwogICB2b2lkIFNldE9mZnNjcmVlbkZvcm1hdChnZnhJbWFnZUZvcm1hdCBh
Rm9ybWF0KSB7IG1PZmZzY3JlZW5Gb3JtYXQgPSBhRm9ybWF0OyB9CiAgIHZpcnR1YWwgTGF5ZXJN
YW5hZ2VyOjpMYXllcnNCYWNrZW5kIEdldEJhY2tlbmRUeXBlKCkgeyByZXR1cm4gTGF5ZXJNYW5h
Z2VyOjpMQVlFUlNfQkFTSUM7IH0KIAorICBUaW1lU3RhbXAgR2V0UGFpbnRUaW1lKCk7CisgIFBS
VWludDMyIEdldFBhaW50Q291bnQoKTsKKyAgdm9pZCBOb3RpZnlQYWludGVkSW1hZ2UoSW1hZ2Uq
IGFJbWFnZSk7CisKIHByb3RlY3RlZDoKICAgTW9uaXRvciBtTW9uaXRvcjsKICAgbnNSZWZQdHI8
SW1hZ2U+IG1JbWFnZTsKICAgZ2Z4SW50U2l6ZSBtU2NhbGVIaW50OwogICBnZnhJbWFnZUZvcm1h
dCBtT2Zmc2NyZWVuRm9ybWF0OwogfTsKIAogLyoqCkBAIC0zNDAsMjEgKzM0NCw0MyBAQCBCYXNp
Y0ltYWdlQ29udGFpbmVyOjpDcmVhdGVJbWFnZShjb25zdCBJCiAgIH0gZWxzZSBpZiAoRm9ybWF0
SW5MaXN0KGFGb3JtYXRzLCBhTnVtRm9ybWF0cywgSW1hZ2U6OlBMQU5BUl9ZQ0JDUikpIHsKICAg
ICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAgICAgaW1hZ2UgPSBuZXcgQmFzaWNQ
bGFuYXJZQ2JDckltYWdlKG1TY2FsZUhpbnQpOwogICAgIHN0YXRpY19jYXN0PEJhc2ljUGxhbmFy
WUNiQ3JJbWFnZSo+KGltYWdlLmdldCgpKS0+U2V0T2Zmc2NyZWVuRm9ybWF0KG1PZmZzY3JlZW5G
b3JtYXQpOwogICB9CiAgIHJldHVybiBpbWFnZS5mb3JnZXQoKTsKIH0KIAorVGltZVN0YW1wCitC
YXNpY0ltYWdlQ29udGFpbmVyOjpHZXRQYWludFRpbWUoKQoreworICBNb25pdG9yQXV0b0VudGVy
IG1vbihtTW9uaXRvcik7CisgIHJldHVybiBtUGFpbnRUaW1lOworfQorCitQUlVpbnQzMgorQmFz
aWNJbWFnZUNvbnRhaW5lcjo6R2V0UGFpbnRDb3VudCgpCit7CisgIE1vbml0b3JBdXRvRW50ZXIg
bW9uKG1Nb25pdG9yKTsKKyAgcmV0dXJuIG1QYWludENvdW50OworfQorCit2b2lkCitCYXNpY0lt
YWdlQ29udGFpbmVyOjpOb3RpZnlQYWludGVkSW1hZ2UoSW1hZ2UqIGFJbWFnZSkKK3sKKyAgTW9u
aXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOworICBSZWNvcmRQYWludFN0YXRzKGFJbWFnZSwg
bUltYWdlKTsKK30KKwogdm9pZAogQmFzaWNJbWFnZUNvbnRhaW5lcjo6U2V0Q3VycmVudEltYWdl
KEltYWdlKiBhSW1hZ2UpCiB7CiAgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKICAg
bUltYWdlID0gYUltYWdlOworICBDdXJyZW50SW1hZ2VDaGFuZ2VkKCk7CiB9CiAKIGFscmVhZHlf
QWRkUmVmZWQ8SW1hZ2U+CiBCYXNpY0ltYWdlQ29udGFpbmVyOjpHZXRDdXJyZW50SW1hZ2UoKQog
ewogICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAgIG5zUmVmUHRyPEltYWdlPiBp
bWFnZSA9IG1JbWFnZTsKICAgcmV0dXJuIGltYWdlLmZvcmdldCgpOwpkaWZmIC0tZ2l0IGEvZ2Z4
L2xheWVycy9iYXNpYy9CYXNpY0xheWVycy5jcHAgYi9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljTGF5
ZXJzLmNwcAotLS0gYS9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljTGF5ZXJzLmNwcAorKysgYi9nZngv
bGF5ZXJzL2Jhc2ljL0Jhc2ljTGF5ZXJzLmNwcApAQCAtNzI4LDE2ICs3MjgsMTggQEAgQmFzaWNJ
bWFnZUxheWVyOjpQYWludChnZnhDb250ZXh0KiBhQ29udAogCiBhbHJlYWR5X0FkZFJlZmVkPGdm
eFBhdHRlcm4+CiBCYXNpY0ltYWdlTGF5ZXI6OkdldEFuZFBhaW50Q3VycmVudEltYWdlKGdmeENv
bnRleHQqIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBhT3BhY2l0eSkKIHsKICAgaWYgKCFtQ29udGFpbmVyKQogICAgIHJldHVybiBuc251
bGw7CiAKKyAgbnNSZWZQdHI8SW1hZ2U+IGltYWdlID0gbUNvbnRhaW5lci0+R2V0Q3VycmVudElt
YWdlKCk7CisKICAgbnNSZWZQdHI8Z2Z4QVN1cmZhY2U+IHN1cmZhY2UgPSBtQ29udGFpbmVyLT5H
ZXRDdXJyZW50QXNTdXJmYWNlKCZtU2l6ZSk7CiAgIGlmICghc3VyZmFjZSkgewogICAgIHJldHVy
biBuc251bGw7CiAgIH0KIAogICBuc1JlZlB0cjxnZnhQYXR0ZXJuPiBwYXQgPSBuZXcgZ2Z4UGF0
dGVybihzdXJmYWNlKTsKICAgaWYgKCFwYXQpIHsKICAgICByZXR1cm4gbnNudWxsOwpAQCAtNzQ3
LDE3ICs3NDksMjAgQEAgQmFzaWNJbWFnZUxheWVyOjpHZXRBbmRQYWludEN1cnJlbnRJbWFnZQog
CiAgIC8vIFRoZSB2aXNpYmxlIHJlZ2lvbiBjYW4gZXh0ZW5kIG91dHNpZGUgdGhlIGltYWdlLiAg
SWYgd2UncmUgbm90CiAgIC8vIHRpbGluZywgd2UgZG9uJ3Qgd2FudCB0byBkcmF3IGludG8gdGhh
dCBhcmVhLCBzbyBqdXN0IGRyYXcgd2l0aGluCiAgIC8vIHRoZSBpbWFnZSBib3VuZHMuCiAgIGNv
bnN0IG5zSW50UmVjdCogdGlsZVNyY1JlY3QgPSBHZXRUaWxlU291cmNlUmVjdCgpOwogICBQYWlu
dENvbnRleHQocGF0LAogICAgICAgICAgICAgICAgdGlsZVNyY1JlY3QgPyBHZXRWaXNpYmxlUmVn
aW9uKCkgOiBuc0ludFJlZ2lvbihuc0ludFJlY3QoMCwgMCwgbVNpemUud2lkdGgsIG1TaXplLmhl
aWdodCkpLAogICAgICAgICAgICAgICAgdGlsZVNyY1JlY3QsCi0gICAgICAgICAgICAgICBhT3Bh
Y2l0eSwgYUNvbnRleHQpOyAKKyAgICAgICAgICAgICAgIGFPcGFjaXR5LCBhQ29udGV4dCk7CisK
KyAgR2V0Q29udGFpbmVyKCktPk5vdGlmeVBhaW50ZWRJbWFnZShpbWFnZSk7CisKICAgcmV0dXJu
IHBhdC5mb3JnZXQoKTsKIH0KIAogLypzdGF0aWMqLyB2b2lkCiBCYXNpY0ltYWdlTGF5ZXI6OlBh
aW50Q29udGV4dChnZnhQYXR0ZXJuKiBhUGF0dGVybiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zSW50UmVnaW9uJiBhVmlzaWJsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zSW50UmVjdCogYVRpbGVTb3VyY2VSZWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgYU9wYWNpdHksCmRpZmYgLS1naXQgYS9nZngvbGF5ZXJz
L2QzZDEwL0ltYWdlTGF5ZXJEM0QxMC5jcHAgYi9nZngvbGF5ZXJzL2QzZDEwL0ltYWdlTGF5ZXJE
M0QxMC5jcHAKLS0tIGEvZ2Z4L2xheWVycy9kM2QxMC9JbWFnZUxheWVyRDNEMTAuY3BwCisrKyBi
L2dmeC9sYXllcnMvZDNkMTAvSW1hZ2VMYXllckQzRDEwLmNwcApAQCAtMTIwLDE4ICsxMjAsMzcg
QEAgSW1hZ2VDb250YWluZXJEM0QxMDo6Q3JlYXRlSW1hZ2UoY29uc3QgSQogICB9CiAgIHJldHVy
biBpbWcuZm9yZ2V0KCk7CiB9CiAKIHZvaWQKIEltYWdlQ29udGFpbmVyRDNEMTA6OlNldEN1cnJl
bnRJbWFnZShJbWFnZSAqYUltYWdlKQogewogICBNdXRleEF1dG9Mb2NrIGxvY2sobUFjdGl2ZUlt
YWdlTG9jayk7CisgIAorICBtQWN0aXZlSW1hZ2UgPSBhSW1hZ2U7CisgIEN1cnJlbnRJbWFnZUNo
YW5nZWQoKTsKK30KIAotICBtQWN0aXZlSW1hZ2UgPSBhSW1hZ2U7CitUaW1lU3RhbXAgSW1hZ2VD
b250YWluZXJEM0QxMDo6R2V0UGFpbnRUaW1lKCkgeworICBNdXRleEF1dG9Mb2NrIGxvY2sobUFj
dGl2ZUltYWdlTG9jayk7CisKKyAgcmV0dXJuIG1QYWludFRpbWU7Cit9CisKK1BSVWludDMyIElt
YWdlQ29udGFpbmVyRDNEMTA6OkdldFBhaW50Q291bnQoKSB7CisgIE11dGV4QXV0b0xvY2sgbG9j
ayhtQWN0aXZlSW1hZ2VMb2NrKTsKKworICByZXR1cm4gbVBhaW50Q291bnQ7Cit9CisKK3ZvaWQg
SW1hZ2VDb250YWluZXJEM0QxMDo6Tm90aWZ5UGFpbnRlZEltYWdlKEltYWdlKiBhSW1hZ2UpIHsK
KyAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3RpdmVJbWFnZUxvY2spOworCisgIFJlY29yZFBhaW50
U3RhdHMoYUltYWdlLCBtQWN0aXZlSW1hZ2UpOwogfQogCiBhbHJlYWR5X0FkZFJlZmVkPEltYWdl
PgogSW1hZ2VDb250YWluZXJEM0QxMDo6R2V0Q3VycmVudEltYWdlKCkKIHsKICAgTXV0ZXhBdXRv
TG9jayBsb2NrKG1BY3RpdmVJbWFnZUxvY2spOwogCiAgIG5zUmVmUHRyPEltYWdlPiByZXR2YWwg
PSBtQWN0aXZlSW1hZ2U7CkBAIC0zNDksMTYgKzM2OCwxOCBAQCBJbWFnZUxheWVyRDNEMTA6OlJl
bmRlckxheWVyKCkKICAgICAgICAgKGZsb2F0KTAsCiAgICAgICAgIChmbG9hdCl5dXZJbWFnZS0+
bVNpemUud2lkdGgsCiAgICAgICAgIChmbG9hdCl5dXZJbWFnZS0+bVNpemUuaGVpZ2h0KQogICAg
ICAgKTsKICAgfQogCiAgIHRlY2huaXF1ZS0+R2V0UGFzc0J5SW5kZXgoMCktPkFwcGx5KDApOwog
ICBkZXZpY2UoKS0+RHJhdyg0LCAwKTsKKworICBHZXRDb250YWluZXIoKS0+Tm90aWZ5UGFpbnRl
ZEltYWdlKGltYWdlKTsKIH0KIAogUGxhbmFyWUNiQ3JJbWFnZUQzRDEwOjpQbGFuYXJZQ2JDcklt
YWdlRDNEMTAoSUQzRDEwRGV2aWNlMSAqYURldmljZSkKICAgOiBQbGFuYXJZQ2JDckltYWdlKHN0
YXRpY19jYXN0PEltYWdlRDNEMTAqPih0aGlzKSkKICAgLCBtRGV2aWNlKGFEZXZpY2UpCiAgICwg
bUhhc0RhdGEoUFJfRkFMU0UpCiB7CiB9CmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL2QzZDEwL0lt
YWdlTGF5ZXJEM0QxMC5oIGIvZ2Z4L2xheWVycy9kM2QxMC9JbWFnZUxheWVyRDNEMTAuaAotLS0g
YS9nZngvbGF5ZXJzL2QzZDEwL0ltYWdlTGF5ZXJEM0QxMC5oCisrKyBiL2dmeC9sYXllcnMvZDNk
MTAvSW1hZ2VMYXllckQzRDEwLmgKQEAgLTY1LDE2ICs2NSwyMCBAQCBwdWJsaWM6CiAKICAgdmly
dHVhbCBQUkJvb2wgU2V0TGF5ZXJNYW5hZ2VyKExheWVyTWFuYWdlciAqYU1hbmFnZXIpOwogCiAg
IHZpcnR1YWwgTGF5ZXJNYW5hZ2VyOjpMYXllcnNCYWNrZW5kIEdldEJhY2tlbmRUeXBlKCkgeyBy
ZXR1cm4gTGF5ZXJNYW5hZ2VyOjpMQVlFUlNfRDNEMTA7IH0KIAogICBJRDNEMTBEZXZpY2UxICpk
ZXZpY2UoKSB7IHJldHVybiBtRGV2aWNlOyB9CiAgIHZvaWQgU2V0RGV2aWNlKElEM0QxMERldmlj
ZTEgKmFEZXZpY2UpIHsgbURldmljZSA9IGFEZXZpY2U7IH0KIAorICBUaW1lU3RhbXAgR2V0UGFp
bnRUaW1lKCk7CisgIFBSVWludDMyIEdldFBhaW50Q291bnQoKTsKKyAgdm9pZCBOb3RpZnlQYWlu
dGVkSW1hZ2UoSW1hZ2UqIGFJbWFnZSk7CisKIHByaXZhdGU6CiAgIHR5cGVkZWYgbW96aWxsYTo6
TXV0ZXggTXV0ZXg7CiAKICAgbnNSZWZQdHI8SW1hZ2U+IG1BY3RpdmVJbWFnZTsKICAgbnNSZWZQ
dHI8SUQzRDEwRGV2aWNlMT4gbURldmljZTsKIAogICBNdXRleCBtQWN0aXZlSW1hZ2VMb2NrOwog
fTsKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNkOS9JbWFnZUxheWVyRDNEOS5jcHAgYi9nZngv
bGF5ZXJzL2QzZDkvSW1hZ2VMYXllckQzRDkuY3BwCi0tLSBhL2dmeC9sYXllcnMvZDNkOS9JbWFn
ZUxheWVyRDNEOS5jcHAKKysrIGIvZ2Z4L2xheWVycy9kM2Q5L0ltYWdlTGF5ZXJEM0Q5LmNwcApA
QCAtMTUxLDIyICsxNTEsNDcgQEAgSW1hZ2VDb250YWluZXJEM0Q5OjpDcmVhdGVJbWFnZShjb25z
dCBJbQogICBpZiAoYUZvcm1hdHNbMF0gPT0gSW1hZ2U6OlBMQU5BUl9ZQ0JDUikgewogICAgIGlt
ZyA9IG5ldyBQbGFuYXJZQ2JDckltYWdlRDNEOSgpOwogICB9IGVsc2UgaWYgKGFGb3JtYXRzWzBd
ID09IEltYWdlOjpDQUlST19TVVJGQUNFKSB7CiAgICAgaW1nID0gbmV3IENhaXJvSW1hZ2VEM0Q5
KG1EZXZpY2UpOwogICB9CiAgIHJldHVybiBpbWcuZm9yZ2V0KCk7CiB9CiAKK1RpbWVTdGFtcAor
SW1hZ2VDb250YWluZXJEM0Q5OjpHZXRQYWludFRpbWUoKQoreworICBNdXRleEF1dG9Mb2NrIGxv
Y2sobUFjdGl2ZUltYWdlTG9jayk7CisKKyAgcmV0dXJuIG1QYWludFRpbWU7Cit9CisKK1BSVWlu
dDMyCitJbWFnZUNvbnRhaW5lckQzRDk6OkdldFBhaW50Q291bnQoKQoreworICBNdXRleEF1dG9M
b2NrIGxvY2sobUFjdGl2ZUltYWdlTG9jayk7CisKKyAgcmV0dXJuIG1QYWludENvdW50OworfQor
Cit2b2lkCitJbWFnZUNvbnRhaW5lckQzRDk6Ok5vdGlmeVBhaW50ZWRJbWFnZShJbWFnZSogYUlt
YWdlKQoreworICBNdXRleEF1dG9Mb2NrIGxvY2sobUFjdGl2ZUltYWdlTG9jayk7CisKKyAgUmVj
b3JkUGFpbnRTdGF0cyhhSW1hZ2UsIG1BY3RpdmVJbWFnZSk7Cit9CisKIHZvaWQKIEltYWdlQ29u
dGFpbmVyRDNEOTo6U2V0Q3VycmVudEltYWdlKEltYWdlICphSW1hZ2UpCiB7CiAgIE11dGV4QXV0
b0xvY2sgbG9jayhtQWN0aXZlSW1hZ2VMb2NrKTsKIAogICBtQWN0aXZlSW1hZ2UgPSBhSW1hZ2U7
CisgIEN1cnJlbnRJbWFnZUNoYW5nZWQoKTsKIH0KIAogYWxyZWFkeV9BZGRSZWZlZDxJbWFnZT4K
IEltYWdlQ29udGFpbmVyRDNEOTo6R2V0Q3VycmVudEltYWdlKCkKIHsKICAgTXV0ZXhBdXRvTG9j
ayBsb2NrKG1BY3RpdmVJbWFnZUxvY2spOwogCiAgIG5zUmVmUHRyPEltYWdlPiByZXR2YWwgPSBt
QWN0aXZlSW1hZ2U7CkBAIC0zNzAsMTYgKzM5NSwxOCBAQCBJbWFnZUxheWVyRDNEOTo6UmVuZGVy
TGF5ZXIoKQogICAgIH0KICAgICBkZXZpY2UoKS0+U2V0VGV4dHVyZSgwLCBjYWlyb0ltYWdlLT5H
ZXRPckNyZWF0ZVRleHR1cmUoKSk7CiAgICAgZGV2aWNlKCktPkRyYXdQcmltaXRpdmUoRDNEUFRf
VFJJQU5HTEVTVFJJUCwgMCwgMik7CiAgICAgaWYgKG1GaWx0ZXIgPT0gZ2Z4UGF0dGVybjo6RklM
VEVSX05FQVJFU1QpIHsKICAgICAgIGRldmljZSgpLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9NQUdGSUxURVIsIEQzRFRFWEZfTElORUFSKTsKICAgICAgIGRldmljZSgpLT5TZXRTYW1wbGVy
U3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfTElORUFSKTsKICAgICB9CiAgIH0K
KworICBHZXRDb250YWluZXIoKS0+Tm90aWZ5UGFpbnRlZEltYWdlKGltYWdlKTsKIH0KIAogUGxh
bmFyWUNiQ3JJbWFnZUQzRDk6OlBsYW5hcllDYkNySW1hZ2VEM0Q5KCkKICAgOiBQbGFuYXJZQ2JD
ckltYWdlKHN0YXRpY19jYXN0PEltYWdlRDNEOSo+KHRoaXMpKQogICAsIG1IYXNEYXRhKFBSX0ZB
TFNFKQogewogfQogCmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL2QzZDkvSW1hZ2VMYXllckQzRDku
aCBiL2dmeC9sYXllcnMvZDNkOS9JbWFnZUxheWVyRDNEOS5oCi0tLSBhL2dmeC9sYXllcnMvZDNk
OS9JbWFnZUxheWVyRDNEOS5oCisrKyBiL2dmeC9sYXllcnMvZDNkOS9JbWFnZUxheWVyRDNEOS5o
CkBAIC02NSwxNiArNjUsMjAgQEAgcHVibGljOgogCiAgIHZpcnR1YWwgUFJCb29sIFNldExheWVy
TWFuYWdlcihMYXllck1hbmFnZXIgKmFNYW5hZ2VyKTsKIAogICB2aXJ0dWFsIExheWVyTWFuYWdl
cjo6TGF5ZXJzQmFja2VuZCBHZXRCYWNrZW5kVHlwZSgpIHsgcmV0dXJuIExheWVyTWFuYWdlcjo6
TEFZRVJTX0QzRDk7IH0KIAogICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UoKSB7IHJldHVybiBt
RGV2aWNlOyB9CiAgIHZvaWQgU2V0RGV2aWNlKElEaXJlY3QzRERldmljZTkgKmFEZXZpY2UpIHsg
bURldmljZSA9IGFEZXZpY2U7IH0KIAorICBUaW1lU3RhbXAgR2V0UGFpbnRUaW1lKCk7CisgIFBS
VWludDMyIEdldFBhaW50Q291bnQoKTsKKyAgdm9pZCBOb3RpZnlQYWludGVkSW1hZ2UoSW1hZ2Uq
IGFJbWFnZSk7CisKIHByaXZhdGU6CiAgIHR5cGVkZWYgbW96aWxsYTo6TXV0ZXggTXV0ZXg7CiAK
ICAgbnNSZWZQdHI8SW1hZ2U+IG1BY3RpdmVJbWFnZTsKIAogICBuc1JlZlB0cjxJRGlyZWN0M0RE
ZXZpY2U5PiBtRGV2aWNlOwogCiAgIE11dGV4IG1BY3RpdmVJbWFnZUxvY2s7CmRpZmYgLS1naXQg
YS9nZngvbGF5ZXJzL29wZW5nbC9JbWFnZUxheWVyT0dMLmNwcCBiL2dmeC9sYXllcnMvb3Blbmds
L0ltYWdlTGF5ZXJPR0wuY3BwCi0tLSBhL2dmeC9sYXllcnMvb3BlbmdsL0ltYWdlTGF5ZXJPR0wu
Y3BwCisrKyBiL2dmeC9sYXllcnMvb3BlbmdsL0ltYWdlTGF5ZXJPR0wuY3BwCkBAIC0yMjMsMjYg
KzIyMyw1MSBAQCBJbWFnZUNvbnRhaW5lck9HTDo6Q3JlYXRlSW1hZ2UoY29uc3QgSW1hCiAgIGVs
c2UgaWYgKGFGb3JtYXRzWzBdID09IEltYWdlOjpNQUNfSU9fU1VSRkFDRSkgewogICAgIGltZyA9
IG5ldyBNYWNJT1N1cmZhY2VJbWFnZU9HTChzdGF0aWNfY2FzdDxMYXllck1hbmFnZXJPR0wqPiht
TWFuYWdlcikpOwogICB9CiAjZW5kaWYKIAogICByZXR1cm4gaW1nLmZvcmdldCgpOwogfQogCitU
aW1lU3RhbXAKK0ltYWdlQ29udGFpbmVyT0dMOjpHZXRQYWludFRpbWUoKQoreworICBNdXRleEF1
dG9Mb2NrIGxvY2sobUFjdGl2ZUltYWdlTG9jayk7CisKKyAgcmV0dXJuIG1QYWludFRpbWU7Cit9
CisKK1BSVWludDMyCitJbWFnZUNvbnRhaW5lck9HTDo6R2V0UGFpbnRDb3VudCgpCit7CisgIE11
dGV4QXV0b0xvY2sgbG9jayhtQWN0aXZlSW1hZ2VMb2NrKTsKKworICByZXR1cm4gbVBhaW50Q291
bnQ7Cit9CisKK3ZvaWQKK0ltYWdlQ29udGFpbmVyT0dMOjpOb3RpZnlQYWludGVkSW1hZ2UoSW1h
Z2UqIGFJbWFnZSkKK3sKKyAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3RpdmVJbWFnZUxvY2spOwor
CisgIFJlY29yZFBhaW50U3RhdHMoYUltYWdlLCBtQWN0aXZlSW1hZ2UpOworfQorCiB2b2lkCiBJ
bWFnZUNvbnRhaW5lck9HTDo6U2V0Q3VycmVudEltYWdlKEltYWdlICphSW1hZ2UpCiB7CiAgIG5z
UmVmUHRyPEltYWdlPiBvbGRJbWFnZTsKIAogICB7CiAgICAgTXV0ZXhBdXRvTG9jayBsb2NrKG1B
Y3RpdmVJbWFnZUxvY2spOwogCiAgICAgb2xkSW1hZ2UgPSBtQWN0aXZlSW1hZ2UuZm9yZ2V0KCk7
CiAgICAgbUFjdGl2ZUltYWdlID0gYUltYWdlOworICAgIEN1cnJlbnRJbWFnZUNoYW5nZWQoKTsK
ICAgfQogCiAgIC8vIE1ha2Ugc3VyZSBvbGRJbWFnZSBpcyByZWxlYXNlZCBvdXRzaWRlIHRoZSBs
b2NrLCBzbyBpdCBjYW4gdGFrZSBvdXIKICAgLy8gbG9jayBpbiBSZWN5Y2xlQnVmZmVyCiB9CiAK
IGFscmVhZHlfQWRkUmVmZWQ8SW1hZ2U+CiBJbWFnZUNvbnRhaW5lck9HTDo6R2V0Q3VycmVudElt
YWdlKCkKQEAgLTQ5NiwxNiArNTIxLDE3IEBAIEltYWdlTGF5ZXJPR0w6OlJlbmRlckxheWVyKGlu
dCwKICAgICAgcHJvZ3JhbS0+U2V0TGF5ZXJPcGFjaXR5KEdldEVmZmVjdGl2ZU9wYWNpdHkoKSk7
CiAgICAgIHByb2dyYW0tPlNldFJlbmRlck9mZnNldChhT2Zmc2V0KTsKICAgICAgcHJvZ3JhbS0+
U2V0VGV4dHVyZVVuaXQoMCk7CiAgICAgCiAgICAgIG1PR0xNYW5hZ2VyLT5CaW5kQW5kRHJhd1F1
YWQocHJvZ3JhbSk7CiAgICAgIGdsKCktPmZCaW5kVGV4dHVyZShMT0NBTF9HTF9URVhUVVJFX1JF
Q1RBTkdMRV9BUkIsIDApOwogI2VuZGlmCiAgIH0KKyAgR2V0Q29udGFpbmVyKCktPk5vdGlmeVBh
aW50ZWRJbWFnZShpbWFnZSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBJbml0VGV4dHVyZShHTENvbnRl
eHQqIGFHTCwgR0x1aW50IGFUZXh0dXJlLCBHTGVudW0gYUZvcm1hdCwgY29uc3QgZ2Z4SW50U2l6
ZSYgYVNpemUpCiB7CiAgIGFHTC0+ZkJpbmRUZXh0dXJlKExPQ0FMX0dMX1RFWFRVUkVfMkQsIGFU
ZXh0dXJlKTsKICAgYUdMLT5mVGV4UGFyYW1ldGVyaShMT0NBTF9HTF9URVhUVVJFXzJELCBMT0NB
TF9HTF9URVhUVVJFX01JTl9GSUxURVIsIExPQ0FMX0dMX0xJTkVBUik7CiAgIGFHTC0+ZlRleFBh
cmFtZXRlcmkoTE9DQUxfR0xfVEVYVFVSRV8yRCwgTE9DQUxfR0xfVEVYVFVSRV9NQUdfRklMVEVS
LCBMT0NBTF9HTF9MSU5FQVIpOwpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9vcGVuZ2wvSW1hZ2VM
YXllck9HTC5oIGIvZ2Z4L2xheWVycy9vcGVuZ2wvSW1hZ2VMYXllck9HTC5oCi0tLSBhL2dmeC9s
YXllcnMvb3BlbmdsL0ltYWdlTGF5ZXJPR0wuaAorKysgYi9nZngvbGF5ZXJzL29wZW5nbC9JbWFn
ZUxheWVyT0dMLmgKQEAgLTE1MywxNiArMTUzLDIwIEBAIHB1YmxpYzoKICAgdmlydHVhbCBhbHJl
YWR5X0FkZFJlZmVkPGdmeEFTdXJmYWNlPiBHZXRDdXJyZW50QXNTdXJmYWNlKGdmeEludFNpemUq
IGFTaXplKTsKIAogICB2aXJ0dWFsIGdmeEludFNpemUgR2V0Q3VycmVudFNpemUoKTsKIAogICB2
aXJ0dWFsIFBSQm9vbCBTZXRMYXllck1hbmFnZXIoTGF5ZXJNYW5hZ2VyICphTWFuYWdlcik7CiAK
ICAgdmlydHVhbCBMYXllck1hbmFnZXI6OkxheWVyc0JhY2tlbmQgR2V0QmFja2VuZFR5cGUoKSB7
IHJldHVybiBMYXllck1hbmFnZXI6OkxBWUVSU19PUEVOR0w7IH0KIAorICBUaW1lU3RhbXAgR2V0
UGFpbnRUaW1lKCk7CisgIFBSVWludDMyIEdldFBhaW50Q291bnQoKTsKKyAgdm9pZCBOb3RpZnlQ
YWludGVkSW1hZ2UoSW1hZ2UqIGFJbWFnZSk7CisKIHByaXZhdGU6CiAgIHR5cGVkZWYgbW96aWxs
YTo6TXV0ZXggTXV0ZXg7CiAKICAgbnNSZWZQdHI8UmVjeWNsZUJpbj4gbVJlY3ljbGVCaW47CiAK
ICAgLy8gVGhpcyBwcm90ZWN0cyBtQWN0aXZlSW1hZ2UKICAgTXV0ZXggbUFjdGl2ZUltYWdlTG9j
azsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>516418</attachid>
            <date>2011-03-02 14:48:54 -0800</date>
            <delta_ts>2011-03-03 12:28:15 -0800</delta_ts>
            <desc>Patch: Push ImageContainer subclass&apos; locks up into a superclass monitor.</desc>
            <filename>580531-layers-monitor.patch</filename>
            <type>text/plain</type>
            <size>14864</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgYzc5M2I0Zjg3MzE4OTNiYzViM2U5YTM2YTE1ZmY0YWVjMmNjNDNjNgpC
dWcgNTgwNTMxIC0gUHVzaCBJbWFnZUNvbnRhaW5lciBzdWJjbGFzcycgbG9ja3MgdXAgaW50byBh
IHN1cGVyY2xhc3MgbW9uaXRvci4gcj0/CgpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9JbWFnZUxh
eWVycy5oIGIvZ2Z4L2xheWVycy9JbWFnZUxheWVycy5oCi0tLSBhL2dmeC9sYXllcnMvSW1hZ2VM
YXllcnMuaAorKysgYi9nZngvbGF5ZXJzL0ltYWdlTGF5ZXJzLmgKQEAgLTM4LDE2ICszOCwxNyBA
QAogI2lmbmRlZiBHRlhfSU1BR0VMQVlFUl9ICiAjZGVmaW5lIEdGWF9JTUFHRUxBWUVSX0gKIAog
I2luY2x1ZGUgIkxheWVycy5oIgogCiAjaW5jbHVkZSAiZ2Z4UGF0dGVybi5oIgogI2luY2x1ZGUg
Im5zVGhyZWFkVXRpbHMuaCIKICNpbmNsdWRlICJuc0NvcmVBbmltYXRpb25TdXBwb3J0LmgiCisj
aW5jbHVkZSAibW96aWxsYS9Nb25pdG9yLmgiCiAKIG5hbWVzcGFjZSBtb3ppbGxhIHsKIG5hbWVz
cGFjZSBsYXllcnMgewogCiBlbnVtIFN0ZXJlb01vZGUgewogICBTVEVSRU9fTU9ERV9NT05PLAog
ICBTVEVSRU9fTU9ERV9MRUZUX1JJR0hULAogICBTVEVSRU9fTU9ERV9SSUdIVF9MRUZULApAQCAt
MTI2LDE3ICsxMjcsMTcgQEAgcHJvdGVjdGVkOgogICogKGJlY2F1c2UgbGF5ZXJzIGNhbiBvbmx5
IGJlIHVzZWQgb24gdGhlIG1haW4gdGhyZWFkKSBhbmQgd2Ugd2FudCB0bwogICogYmUgYWJsZSB0
byBzZXQgdGhlIGN1cnJlbnQgSW1hZ2UgZnJvbSBhbnkgdGhyZWFkLCB0byBmYWNpbGl0YXRlCiAg
KiB2aWRlbyBwbGF5YmFjayB3aXRob3V0IGludm9sdmluZyB0aGUgbWFpbiB0aHJlYWQsIGZvciBl
eGFtcGxlLgogICovCiBjbGFzcyBUSEVCRVNfQVBJIEltYWdlQ29udGFpbmVyIHsKICAgVEhFQkVT
X0lOTElORV9ERUNMX1RIUkVBRFNBRkVfUkVGQ09VTlRJTkcoSW1hZ2VDb250YWluZXIpCiAKIHB1
YmxpYzoKLSAgSW1hZ2VDb250YWluZXIoKSB7fQorICBJbWFnZUNvbnRhaW5lcigpIDogbU1vbml0
b3IoIkltYWdlQ29udGFpbmVyIikge30KICAgdmlydHVhbCB+SW1hZ2VDb250YWluZXIoKSB7fQog
CiAgIC8qKgogICAgKiBDcmVhdGUgYW4gSW1hZ2UgaW4gb25lIG9mIHRoZSBnaXZlbiBmb3JtYXRz
LgogICAgKiBQaWNrcyB0aGUgImJlc3QiIGZvcm1hdCBmcm9tIHRoZSBsaXN0IGFuZCBjcmVhdGVz
IGFuIEltYWdlIG9mIHRoYXQKICAgICogZm9ybWF0LgogICAgKiBSZXR1cm5zIG51bGwgaWYgdGhp
cyBiYWNrZW5kIGRvZXMgbm90IHN1cHBvcnQgYW55IG9mIHRoZSBmb3JtYXRzLgogICAgKi8KQEAg
LTIwNywxOSArMjA4LDIxIEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbGF5ZXIgbWFu
YWdlciB0eXBlIHRoaXMgaW1hZ2UgY29udGFpbmVyIHdhcyBjcmVhdGVkIHdpdGgsCiAgICAqIHBy
ZXN1bWFibHkgaXRzIHVzZXJzIG1pZ2h0IHdhbnQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwgaWYg
dHlwZXMgZG8gbm90CiAgICAqIG1hdGNoLgogICAgKi8KICAgdmlydHVhbCBMYXllck1hbmFnZXI6
OkxheWVyc0JhY2tlbmQgR2V0QmFja2VuZFR5cGUoKSA9IDA7CiAKIHByb3RlY3RlZDoKKyAgdHlw
ZWRlZiBtb3ppbGxhOjpNb25pdG9yIE1vbml0b3I7CiAgIExheWVyTWFuYWdlciogbU1hbmFnZXI7
CisgIE1vbml0b3IgbU1vbml0b3I7CiAKLSAgSW1hZ2VDb250YWluZXIoTGF5ZXJNYW5hZ2VyKiBh
TWFuYWdlcikgOiBtTWFuYWdlcihhTWFuYWdlcikge30KKyAgSW1hZ2VDb250YWluZXIoTGF5ZXJN
YW5hZ2VyKiBhTWFuYWdlcikgOiBtTWFuYWdlcihhTWFuYWdlciksIG1Nb25pdG9yKCJJbWFnZUNv
bnRhaW5lciIpICB7fQogfTsKIAogLyoqCiAgKiBBIExheWVyIHdoaWNoIHJlbmRlcnMgYW4gSW1h
Z2UuCiAgKi8KIGNsYXNzIFRIRUJFU19BUEkgSW1hZ2VMYXllciA6IHB1YmxpYyBMYXllciB7CiBw
dWJsaWM6CiAgIC8qKgpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9iYXNpYy9CYXNpY0ltYWdlcy5j
cHAgYi9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljSW1hZ2VzLmNwcAotLS0gYS9nZngvbGF5ZXJzL2Jh
c2ljL0Jhc2ljSW1hZ2VzLmNwcAorKysgYi9nZngvbGF5ZXJzL2Jhc2ljL0Jhc2ljSW1hZ2VzLmNw
cApAQCAtMjg3LDMzICsyODcsMzIgQEAgQmFzaWNQbGFuYXJZQ2JDckltYWdlOjpHZXRBc1N1cmZh
Y2UoKQogICogZm9yIHRoZSBpbWFnZSBvYmplY3RzLiBXZSB1c2UgYSBNb25pdG9yIHRvIHN5bmNo
cm9uaXplIGFjY2VzcyB0bwogICogbUltYWdlLgogICovCiBjbGFzcyBCYXNpY0ltYWdlQ29udGFp
bmVyIDogcHVibGljIEltYWdlQ29udGFpbmVyIHsKIHB1YmxpYzoKICAgdHlwZWRlZiBnZnhBU3Vy
ZmFjZTo6Z2Z4SW1hZ2VGb3JtYXQgZ2Z4SW1hZ2VGb3JtYXQ7CiAKICAgQmFzaWNJbWFnZUNvbnRh
aW5lcigpIDoKLSAgICBJbWFnZUNvbnRhaW5lcihuc251bGwpLCBtTW9uaXRvcigiQmFzaWNJbWFn
ZUNvbnRhaW5lciIpLAorICAgIEltYWdlQ29udGFpbmVyKG5zbnVsbCksCiAgICAgbVNjYWxlSGlu
dCgtMSwgLTEpLAogICAgIG1PZmZzY3JlZW5Gb3JtYXQoZ2Z4QVN1cmZhY2U6OkltYWdlRm9ybWF0
VW5rbm93bikKICAge30KICAgdmlydHVhbCBhbHJlYWR5X0FkZFJlZmVkPEltYWdlPiBDcmVhdGVJ
bWFnZShjb25zdCBJbWFnZTo6Rm9ybWF0KiBhRm9ybWF0cywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTnVtRm9ybWF0cyk7CiAgIHZpcnR1
YWwgdm9pZCBTZXRDdXJyZW50SW1hZ2UoSW1hZ2UqIGFJbWFnZSk7CiAgIHZpcnR1YWwgYWxyZWFk
eV9BZGRSZWZlZDxJbWFnZT4gR2V0Q3VycmVudEltYWdlKCk7CiAgIHZpcnR1YWwgYWxyZWFkeV9B
ZGRSZWZlZDxnZnhBU3VyZmFjZT4gR2V0Q3VycmVudEFzU3VyZmFjZShnZnhJbnRTaXplKiBhU2l6
ZSk7CiAgIHZpcnR1YWwgZ2Z4SW50U2l6ZSBHZXRDdXJyZW50U2l6ZSgpOwogICB2aXJ0dWFsIFBS
Qm9vbCBTZXRMYXllck1hbmFnZXIoTGF5ZXJNYW5hZ2VyICphTWFuYWdlcik7CiAgIHZpcnR1YWwg
dm9pZCBTZXRTY2FsZUhpbnQoY29uc3QgZ2Z4SW50U2l6ZSYgYVNjYWxlSGludCk7CiAgIHZvaWQg
U2V0T2Zmc2NyZWVuRm9ybWF0KGdmeEltYWdlRm9ybWF0IGFGb3JtYXQpIHsgbU9mZnNjcmVlbkZv
cm1hdCA9IGFGb3JtYXQ7IH0KICAgdmlydHVhbCBMYXllck1hbmFnZXI6OkxheWVyc0JhY2tlbmQg
R2V0QmFja2VuZFR5cGUoKSB7IHJldHVybiBMYXllck1hbmFnZXI6OkxBWUVSU19CQVNJQzsgfQog
CiBwcm90ZWN0ZWQ6Ci0gIE1vbml0b3IgbU1vbml0b3I7CiAgIG5zUmVmUHRyPEltYWdlPiBtSW1h
Z2U7CiAgIGdmeEludFNpemUgbVNjYWxlSGludDsKICAgZ2Z4SW1hZ2VGb3JtYXQgbU9mZnNjcmVl
bkZvcm1hdDsKIH07CiAKIC8qKgogICogUmV0dXJucyB0cnVlIGlmIGFGb3JtYXQgaXMgaW4gdGhl
IGdpdmVuIGZvcm1hdCBhcnJheS4KICAqLwpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9kM2QxMC9J
bWFnZUxheWVyRDNEMTAuY3BwIGIvZ2Z4L2xheWVycy9kM2QxMC9JbWFnZUxheWVyRDNEMTAuY3Bw
Ci0tLSBhL2dmeC9sYXllcnMvZDNkMTAvSW1hZ2VMYXllckQzRDEwLmNwcAorKysgYi9nZngvbGF5
ZXJzL2QzZDEwL0ltYWdlTGF5ZXJEM0QxMC5jcHAKQEAgLTQwLDE4ICs0MCwxNiBAQAogI2luY2x1
ZGUgImdmeEQyRFN1cmZhY2UuaCIKICNpbmNsdWRlICJnZnhXaW5kb3dzU3VyZmFjZS5oIgogI2lu
Y2x1ZGUgInl1dl9jb252ZXJ0LmgiCiAjaW5jbHVkZSAiLi4vZDNkOS9OdjNEVlV0aWxzLmgiCiAK
IG5hbWVzcGFjZSBtb3ppbGxhIHsKIG5hbWVzcGFjZSBsYXllcnMgewogCi11c2luZyBtb3ppbGxh
OjpNdXRleEF1dG9Mb2NrOwotCiBzdGF0aWMgYWxyZWFkeV9BZGRSZWZlZDxJRDNEMTBUZXh0dXJl
MkQ+CiBTdXJmYWNlVG9UZXh0dXJlKElEM0QxMERldmljZSAqYURldmljZSwKICAgICAgICAgICAg
ICAgICAgZ2Z4QVN1cmZhY2UgKmFTdXJmYWNlLAogICAgICAgICAgICAgICAgICBjb25zdCBnZnhJ
bnRTaXplICZhU2l6ZSkKIHsKICAgaWYgKGFTdXJmYWNlICYmIGFTdXJmYWNlLT5HZXRUeXBlKCkg
PT0gZ2Z4QVN1cmZhY2U6OlN1cmZhY2VUeXBlRDJEKSB7CiAgICAgdm9pZCAqZGF0YSA9IGFTdXJm
YWNlLT5HZXREYXRhKCZnS2V5RDNEMTBUZXh0dXJlKTsKICAgICBpZiAoZGF0YSkgewpAQCAtOTYs
MTcgKzk0LDE2IEBAIFN1cmZhY2VUb1RleHR1cmUoSUQzRDEwRGV2aWNlICphRGV2aWNlLAogICB9
CiAKICAgcmV0dXJuIHRleHR1cmUuZm9yZ2V0KCk7CiB9CiAKIEltYWdlQ29udGFpbmVyRDNEMTA6
OkltYWdlQ29udGFpbmVyRDNEMTAoSUQzRDEwRGV2aWNlMSAqYURldmljZSkKICAgOiBJbWFnZUNv
bnRhaW5lcihuc251bGwpCiAgICwgbURldmljZShhRGV2aWNlKQotICAsIG1BY3RpdmVJbWFnZUxv
Y2soIm1vemlsbGEubGF5ZXJzLkltYWdlQ29udGFpbmVyRDNEMTAubUFjdGl2ZUltYWdlTG9jayIp
CiB7CiB9CiAKIGFscmVhZHlfQWRkUmVmZWQ8SW1hZ2U+CiBJbWFnZUNvbnRhaW5lckQzRDEwOjpD
cmVhdGVJbWFnZShjb25zdCBJbWFnZTo6Rm9ybWF0ICphRm9ybWF0cywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFOdW1Gb3JtYXRzKQogewogICBpZiAoIWFOdW1G
b3JtYXRzKSB7CkBAIC0xMTksMzQgKzExNiwzNCBAQCBJbWFnZUNvbnRhaW5lckQzRDEwOjpDcmVh
dGVJbWFnZShjb25zdCBJCiAgICAgaW1nID0gbmV3IENhaXJvSW1hZ2VEM0QxMChtRGV2aWNlKTsK
ICAgfQogICByZXR1cm4gaW1nLmZvcmdldCgpOwogfQogCiB2b2lkCiBJbWFnZUNvbnRhaW5lckQz
RDEwOjpTZXRDdXJyZW50SW1hZ2UoSW1hZ2UgKmFJbWFnZSkKIHsKLSAgTXV0ZXhBdXRvTG9jayBs
b2NrKG1BY3RpdmVJbWFnZUxvY2spOworICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7
CiAKICAgbUFjdGl2ZUltYWdlID0gYUltYWdlOwogfQogCiBhbHJlYWR5X0FkZFJlZmVkPEltYWdl
PgogSW1hZ2VDb250YWluZXJEM0QxMDo6R2V0Q3VycmVudEltYWdlKCkKIHsKLSAgTXV0ZXhBdXRv
TG9jayBsb2NrKG1BY3RpdmVJbWFnZUxvY2spOworICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9u
aXRvcik7CiAKICAgbnNSZWZQdHI8SW1hZ2U+IHJldHZhbCA9IG1BY3RpdmVJbWFnZTsKICAgcmV0
dXJuIHJldHZhbC5mb3JnZXQoKTsKIH0KIAogYWxyZWFkeV9BZGRSZWZlZDxnZnhBU3VyZmFjZT4K
IEltYWdlQ29udGFpbmVyRDNEMTA6OkdldEN1cnJlbnRBc1N1cmZhY2UoZ2Z4SW50U2l6ZSAqYVNp
emUpCiB7Ci0gIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0aXZlSW1hZ2VMb2NrKTsKKyAgTW9uaXRv
ckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICBpZiAoIW1BY3RpdmVJbWFnZSkgewogICAgIHJl
dHVybiBuc251bGw7CiAgIH0KIAogICBpZiAobUFjdGl2ZUltYWdlLT5HZXRGb3JtYXQoKSA9PSBJ
bWFnZTo6UExBTkFSX1lDQkNSKSB7CiAgICAgUGxhbmFyWUNiQ3JJbWFnZUQzRDEwICp5dXZJbWFn
ZSA9CiAgICAgICBzdGF0aWNfY2FzdDxQbGFuYXJZQ2JDckltYWdlRDNEMTAqPihtQWN0aXZlSW1h
Z2UuZ2V0KCkpOwogICAgIGlmICh5dXZJbWFnZS0+SGFzRGF0YSgpKSB7CkBAIC0xNTksMTcgKzE1
NiwxNyBAQCBJbWFnZUNvbnRhaW5lckQzRDEwOjpHZXRDdXJyZW50QXNTdXJmYWNlCiAgIH0KIAog
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SW1hZ2VEM0QxMCo+KG1BY3RpdmVJbWFnZS0+R2V0SW1wbERh
dGEoKSktPkdldEFzU3VyZmFjZSgpOwogfQogCiBnZnhJbnRTaXplCiBJbWFnZUNvbnRhaW5lckQz
RDEwOjpHZXRDdXJyZW50U2l6ZSgpCiB7Ci0gIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0aXZlSW1h
Z2VMb2NrKTsKKyAgTW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICBpZiAoIW1BY3Rp
dmVJbWFnZSkgewogICAgIHJldHVybiBnZnhJbnRTaXplKDAsMCk7CiAgIH0KICAgaWYgKG1BY3Rp
dmVJbWFnZS0+R2V0Rm9ybWF0KCkgPT0gSW1hZ2U6OlBMQU5BUl9ZQ0JDUikgewogICAgIFBsYW5h
cllDYkNySW1hZ2VEM0QxMCAqeXV2SW1hZ2UgPQogICAgICAgc3RhdGljX2Nhc3Q8UGxhbmFyWUNi
Q3JJbWFnZUQzRDEwKj4obUFjdGl2ZUltYWdlLmdldCgpKTsKICAgICBpZiAoIXl1dkltYWdlLT5I
YXNEYXRhKCkpIHsKICAgICAgIHJldHVybiBnZnhJbnRTaXplKDAsMCk7CmRpZmYgLS1naXQgYS9n
ZngvbGF5ZXJzL2QzZDEwL0ltYWdlTGF5ZXJEM0QxMC5oIGIvZ2Z4L2xheWVycy9kM2QxMC9JbWFn
ZUxheWVyRDNEMTAuaAotLS0gYS9nZngvbGF5ZXJzL2QzZDEwL0ltYWdlTGF5ZXJEM0QxMC5oCisr
KyBiL2dmeC9sYXllcnMvZDNkMTAvSW1hZ2VMYXllckQzRDEwLmgKQEAgLTM2LDE3ICszNiwxNiBA
QAogICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KIAogI2lmbmRlZiBHRlhfSU1B
R0VMQVlFUkQzRDEwX0gKICNkZWZpbmUgR0ZYX0lNQUdFTEFZRVJEM0QxMF9ICiAKICNpbmNsdWRl
ICJMYXllck1hbmFnZXJEM0QxMC5oIgogI2luY2x1ZGUgIkltYWdlTGF5ZXJzLmgiCiAjaW5jbHVk
ZSAieXV2X2NvbnZlcnQuaCIKLSNpbmNsdWRlICJtb3ppbGxhL011dGV4LmgiCiAKIG5hbWVzcGFj
ZSBtb3ppbGxhIHsKIG5hbWVzcGFjZSBsYXllcnMgewogCiBjbGFzcyBUSEVCRVNfQVBJIEltYWdl
Q29udGFpbmVyRDNEMTAgOiBwdWJsaWMgSW1hZ2VDb250YWluZXIKIHsKIHB1YmxpYzoKICAgSW1h
Z2VDb250YWluZXJEM0QxMChJRDNEMTBEZXZpY2UxICphRGV2aWNlKTsKQEAgLTY2LDIyICs2NSwx
OCBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgUFJCb29sIFNldExheWVyTWFuYWdlcihMYXllck1hbmFn
ZXIgKmFNYW5hZ2VyKTsKIAogICB2aXJ0dWFsIExheWVyTWFuYWdlcjo6TGF5ZXJzQmFja2VuZCBH
ZXRCYWNrZW5kVHlwZSgpIHsgcmV0dXJuIExheWVyTWFuYWdlcjo6TEFZRVJTX0QzRDEwOyB9CiAK
ICAgSUQzRDEwRGV2aWNlMSAqZGV2aWNlKCkgeyByZXR1cm4gbURldmljZTsgfQogICB2b2lkIFNl
dERldmljZShJRDNEMTBEZXZpY2UxICphRGV2aWNlKSB7IG1EZXZpY2UgPSBhRGV2aWNlOyB9CiAK
IHByaXZhdGU6Ci0gIHR5cGVkZWYgbW96aWxsYTo6TXV0ZXggTXV0ZXg7Ci0KICAgbnNSZWZQdHI8
SW1hZ2U+IG1BY3RpdmVJbWFnZTsKICAgbnNSZWZQdHI8SUQzRDEwRGV2aWNlMT4gbURldmljZTsK
LQotICBNdXRleCBtQWN0aXZlSW1hZ2VMb2NrOwogfTsKIAogY2xhc3MgVEhFQkVTX0FQSSBJbWFn
ZUxheWVyRDNEMTAgOiBwdWJsaWMgSW1hZ2VMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIExheWVyRDNEMTAKIHsKIHB1YmxpYzoKICAgSW1hZ2VMYXllckQz
RDEwKExheWVyTWFuYWdlckQzRDEwICphTWFuYWdlcikKICAgICA6IEltYWdlTGF5ZXIoYU1hbmFn
ZXIsIE5VTEwpCmRpZmYgLS1naXQgYS9nZngvbGF5ZXJzL2QzZDkvSW1hZ2VMYXllckQzRDkuY3Bw
IGIvZ2Z4L2xheWVycy9kM2Q5L0ltYWdlTGF5ZXJEM0Q5LmNwcAotLS0gYS9nZngvbGF5ZXJzL2Qz
ZDkvSW1hZ2VMYXllckQzRDkuY3BwCisrKyBiL2dmeC9sYXllcnMvZDNkOS9JbWFnZUxheWVyRDNE
OS5jcHAKQEAgLTQxLDE4ICs0MSwxNiBAQAogI2luY2x1ZGUgIm5zSVNlcnZpY2VNYW5hZ2VyLmgi
IAogI2luY2x1ZGUgIm5zSUNvbnNvbGVTZXJ2aWNlLmgiIAogI2luY2x1ZGUgIm5zUHJpbnRmQ1N0
cmluZy5oIiAKICNpbmNsdWRlICJOdjNEVlV0aWxzLmgiCiAKIG5hbWVzcGFjZSBtb3ppbGxhIHsK
IG5hbWVzcGFjZSBsYXllcnMgewogCi11c2luZyBtb3ppbGxhOjpNdXRleEF1dG9Mb2NrOwotCiBz
dGF0aWMgYWxyZWFkeV9BZGRSZWZlZDxJRGlyZWN0M0RUZXh0dXJlOT4KIFN1cmZhY2VUb1RleHR1
cmUoSURpcmVjdDNERGV2aWNlOSAqYURldmljZSwKICAgICAgICAgICAgICAgICAgZ2Z4QVN1cmZh
Y2UgKmFTdXJmYWNlLAogICAgICAgICAgICAgICAgICBjb25zdCBnZnhJbnRTaXplICZhU2l6ZSkK
IHsKIAogICBuc1JlZlB0cjxnZnhJbWFnZVN1cmZhY2U+IGltYWdlU3VyZmFjZSA9IGFTdXJmYWNl
LT5HZXRBc0ltYWdlU3VyZmFjZSgpOwogCkBAIC0xMzEsMTcgKzEyOSwxNiBAQCBTdXJmYWNlVG9U
ZXh0dXJlKElEaXJlY3QzRERldmljZTkgKmFEZXZpCiAgIH0KIAogICByZXR1cm4gdGV4dHVyZS5m
b3JnZXQoKTsKIH0KIAogSW1hZ2VDb250YWluZXJEM0Q5OjpJbWFnZUNvbnRhaW5lckQzRDkoSURp
cmVjdDNERGV2aWNlOSAqYURldmljZSkKICAgOiBJbWFnZUNvbnRhaW5lcihuc251bGwpCiAgICwg
bURldmljZShhRGV2aWNlKQotICAsIG1BY3RpdmVJbWFnZUxvY2soIm1vemlsbGEubGF5ZXJzLklt
YWdlQ29udGFpbmVyRDNEOS5tQWN0aXZlSW1hZ2VMb2NrIikKIHsKIH0KIAogYWxyZWFkeV9BZGRS
ZWZlZDxJbWFnZT4KIEltYWdlQ29udGFpbmVyRDNEOTo6Q3JlYXRlSW1hZ2UoY29uc3QgSW1hZ2U6
OkZvcm1hdCAqYUZvcm1hdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50
MzIgYU51bUZvcm1hdHMpCiB7CiAgIGlmICghYU51bUZvcm1hdHMpIHsKQEAgLTE1NCwzNCArMTUx
LDM0IEBAIEltYWdlQ29udGFpbmVyRDNEOTo6Q3JlYXRlSW1hZ2UoY29uc3QgSW0KICAgICBpbWcg
PSBuZXcgQ2Fpcm9JbWFnZUQzRDkobURldmljZSk7CiAgIH0KICAgcmV0dXJuIGltZy5mb3JnZXQo
KTsKIH0KIAogdm9pZAogSW1hZ2VDb250YWluZXJEM0Q5OjpTZXRDdXJyZW50SW1hZ2UoSW1hZ2Ug
KmFJbWFnZSkKIHsKLSAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3RpdmVJbWFnZUxvY2spOworICBN
b25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAKICAgbUFjdGl2ZUltYWdlID0gYUltYWdl
OwogfQogCiBhbHJlYWR5X0FkZFJlZmVkPEltYWdlPgogSW1hZ2VDb250YWluZXJEM0Q5OjpHZXRD
dXJyZW50SW1hZ2UoKQogewotICBNdXRleEF1dG9Mb2NrIGxvY2sobUFjdGl2ZUltYWdlTG9jayk7
CisgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKIAogICBuc1JlZlB0cjxJbWFnZT4g
cmV0dmFsID0gbUFjdGl2ZUltYWdlOwogICByZXR1cm4gcmV0dmFsLmZvcmdldCgpOwogfQogCiBh
bHJlYWR5X0FkZFJlZmVkPGdmeEFTdXJmYWNlPgogSW1hZ2VDb250YWluZXJEM0Q5OjpHZXRDdXJy
ZW50QXNTdXJmYWNlKGdmeEludFNpemUgKmFTaXplKQogewotICBNdXRleEF1dG9Mb2NrIGxvY2so
bUFjdGl2ZUltYWdlTG9jayk7CisgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKICAg
aWYgKCFtQWN0aXZlSW1hZ2UpIHsKICAgICByZXR1cm4gbnNudWxsOwogICB9CiAKICAgaWYgKG1B
Y3RpdmVJbWFnZS0+R2V0Rm9ybWF0KCkgPT0gSW1hZ2U6OlBMQU5BUl9ZQ0JDUikgewogICAgIFBs
YW5hcllDYkNySW1hZ2VEM0Q5ICp5dXZJbWFnZSA9CiAgICAgICBzdGF0aWNfY2FzdDxQbGFuYXJZ
Q2JDckltYWdlRDNEOSo+KG1BY3RpdmVJbWFnZS5nZXQoKSk7CiAgICAgaWYgKHl1dkltYWdlLT5I
YXNEYXRhKCkpIHsKQEAgLTE5NCwxNyArMTkxLDE3IEBAIEltYWdlQ29udGFpbmVyRDNEOTo6R2V0
Q3VycmVudEFzU3VyZmFjZSgKICAgfQogCiAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZUQzRDkq
PihtQWN0aXZlSW1hZ2UtPkdldEltcGxEYXRhKCkpLT5HZXRBc1N1cmZhY2UoKTsKIH0KIAogZ2Z4
SW50U2l6ZQogSW1hZ2VDb250YWluZXJEM0Q5OjpHZXRDdXJyZW50U2l6ZSgpCiB7Ci0gIE11dGV4
QXV0b0xvY2sgbG9jayhtQWN0aXZlSW1hZ2VMb2NrKTsKKyAgTW9uaXRvckF1dG9FbnRlciBtb24o
bU1vbml0b3IpOwogICBpZiAoIW1BY3RpdmVJbWFnZSkgewogICAgIHJldHVybiBnZnhJbnRTaXpl
KDAsMCk7CiAgIH0KICAgaWYgKG1BY3RpdmVJbWFnZS0+R2V0Rm9ybWF0KCkgPT0gSW1hZ2U6OlBM
QU5BUl9ZQ0JDUikgewogICAgIFBsYW5hcllDYkNySW1hZ2VEM0Q5ICp5dXZJbWFnZSA9CiAgICAg
ICBzdGF0aWNfY2FzdDxQbGFuYXJZQ2JDckltYWdlRDNEOSo+KG1BY3RpdmVJbWFnZS5nZXQoKSk7
CiAgICAgaWYgKCF5dXZJbWFnZS0+SGFzRGF0YSgpKSB7CiAgICAgICByZXR1cm4gZ2Z4SW50U2l6
ZSgwLDApOwpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9kM2Q5L0ltYWdlTGF5ZXJEM0Q5LmggYi9n
ZngvbGF5ZXJzL2QzZDkvSW1hZ2VMYXllckQzRDkuaAotLS0gYS9nZngvbGF5ZXJzL2QzZDkvSW1h
Z2VMYXllckQzRDkuaAorKysgYi9nZngvbGF5ZXJzL2QzZDkvSW1hZ2VMYXllckQzRDkuaApAQCAt
MzYsMTcgKzM2LDE2IEBACiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAj
aWZuZGVmIEdGWF9JTUFHRUxBWUVSRDNEOV9ICiAjZGVmaW5lIEdGWF9JTUFHRUxBWUVSRDNEOV9I
CiAKICNpbmNsdWRlICJMYXllck1hbmFnZXJEM0Q5LmgiCiAjaW5jbHVkZSAiSW1hZ2VMYXllcnMu
aCIKICNpbmNsdWRlICJ5dXZfY29udmVydC5oIgotI2luY2x1ZGUgIm1vemlsbGEvTXV0ZXguaCIK
IAogbmFtZXNwYWNlIG1vemlsbGEgewogbmFtZXNwYWNlIGxheWVycyB7CiAKIGNsYXNzIFRIRUJF
U19BUEkgSW1hZ2VDb250YWluZXJEM0Q5IDogcHVibGljIEltYWdlQ29udGFpbmVyCiB7CiBwdWJs
aWM6CiAgIEltYWdlQ29udGFpbmVyRDNEOShJRGlyZWN0M0REZXZpY2U5ICphRGV2aWNlKTsKQEAg
LTY2LDIzICs2NSwxOSBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgUFJCb29sIFNldExheWVyTWFuYWdl
cihMYXllck1hbmFnZXIgKmFNYW5hZ2VyKTsKIAogICB2aXJ0dWFsIExheWVyTWFuYWdlcjo6TGF5
ZXJzQmFja2VuZCBHZXRCYWNrZW5kVHlwZSgpIHsgcmV0dXJuIExheWVyTWFuYWdlcjo6TEFZRVJT
X0QzRDk7IH0KIAogICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UoKSB7IHJldHVybiBtRGV2aWNl
OyB9CiAgIHZvaWQgU2V0RGV2aWNlKElEaXJlY3QzRERldmljZTkgKmFEZXZpY2UpIHsgbURldmlj
ZSA9IGFEZXZpY2U7IH0KIAogcHJpdmF0ZToKLSAgdHlwZWRlZiBtb3ppbGxhOjpNdXRleCBNdXRl
eDsKLQogICBuc1JlZlB0cjxJbWFnZT4gbUFjdGl2ZUltYWdlOwogCiAgIG5zUmVmUHRyPElEaXJl
Y3QzRERldmljZTk+IG1EZXZpY2U7Ci0KLSAgTXV0ZXggbUFjdGl2ZUltYWdlTG9jazsKIH07CiAK
IGNsYXNzIFRIRUJFU19BUEkgSW1hZ2VMYXllckQzRDkgOiBwdWJsaWMgSW1hZ2VMYXllciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgTGF5ZXJEM0Q5CiB7CiBwdWJs
aWM6CiAgIEltYWdlTGF5ZXJEM0Q5KExheWVyTWFuYWdlckQzRDkgKmFNYW5hZ2VyKQogICAgIDog
SW1hZ2VMYXllcihhTWFuYWdlciwgTlVMTCkKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvb3Blbmds
L0ltYWdlTGF5ZXJPR0wuY3BwIGIvZ2Z4L2xheWVycy9vcGVuZ2wvSW1hZ2VMYXllck9HTC5jcHAK
LS0tIGEvZ2Z4L2xheWVycy9vcGVuZ2wvSW1hZ2VMYXllck9HTC5jcHAKKysrIGIvZ2Z4L2xheWVy
cy9vcGVuZ2wvSW1hZ2VMYXllck9HTC5jcHAKQEAgLTQ2LDE4ICs0NiwxNiBAQAogI2luY2x1ZGUg
IkdMQ29udGV4dFByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiTWFjSU9TdXJmYWNlSW1hZ2VPR0wuaCIK
IAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmdsOwogCiBuYW1lc3BhY2UgbW96aWxsYSB7CiBu
YW1lc3BhY2UgbGF5ZXJzIHsKIAotdXNpbmcgbW96aWxsYTo6TXV0ZXhBdXRvTG9jazsKLQogLyoq
CiAgKiBUaGlzIGlzIGFuIGV2ZW50IHVzZWQgdG8gdW5yZWYgYSBHTENvbnRleHQgb24gdGhlIG1h
aW4gdGhyZWFkIGFuZAogICogb3B0aW9uYWxseSBkZWxldGUgYSB0ZXh0dXJlIGFzc29jaWF0ZWQg
d2l0aCB0aGF0IGNvbnRleHQuCiAgKi8KIGNsYXNzIFRleHR1cmVEZWxldGVyIDogcHVibGljIG5z
UnVubmFibGUgewogcHVibGljOgogICBUZXh0dXJlRGVsZXRlcihhbHJlYWR5X0FkZFJlZmVkPEdM
Q29udGV4dD4gYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgIEdMdWludCBhVGV4dHVyZSkKQEAg
LTE4NywxNyArMTg1LDE2IEBAIFJlY3ljbGVCaW46OkdldFRleHR1cmUoVGV4dHVyZVR5cGUgYVR5
cGUKICAgUFJVaW50MzIgbGFzdCA9IG1SZWN5Y2xlZFRleHR1cmVzW2FUeXBlXS5MZW5ndGgoKSAt
IDE7CiAgIGFPdXRUZXh0dXJlLT5UYWtlRnJvbSgmbVJlY3ljbGVkVGV4dHVyZXNbYVR5cGVdLkVs
ZW1lbnRBdChsYXN0KSk7CiAgIG1SZWN5Y2xlZFRleHR1cmVzW2FUeXBlXS5SZW1vdmVFbGVtZW50
QXQobGFzdCk7CiB9CiAKIEltYWdlQ29udGFpbmVyT0dMOjpJbWFnZUNvbnRhaW5lck9HTChMYXll
ck1hbmFnZXJPR0wgKmFNYW5hZ2VyKQogICA6IEltYWdlQ29udGFpbmVyKGFNYW5hZ2VyKQogICAs
IG1SZWN5Y2xlQmluKG5ldyBSZWN5Y2xlQmluKCkpCi0gICwgbUFjdGl2ZUltYWdlTG9jaygibW96
aWxsYS5sYXllcnMuSW1hZ2VDb250YWluZXJPR0wubUFjdGl2ZUltYWdlTG9jayIpCiB7CiB9CiAK
IEltYWdlQ29udGFpbmVyT0dMOjp+SW1hZ2VDb250YWluZXJPR0woKQogewogICBpZiAobU1hbmFn
ZXIpIHsKICAgICBOU19BU1NFUlRJT04obU1hbmFnZXItPkdldEJhY2tlbmRUeXBlKCkgPT0gTGF5
ZXJNYW5hZ2VyOjpMQVlFUlNfT1BFTkdMLCAiV3JvbmcgbGF5ZXIgbWFuYWdlciBnb3QgYXNzaWdu
ZWQgdG8gSW1hZ2VDb250YWluZXJPR0whIik7CiAKQEAgLTIyOSwzOSArMjI2LDM5IEBAIEltYWdl
Q29udGFpbmVyT0dMOjpDcmVhdGVJbWFnZShjb25zdCBJbWEKIH0KIAogdm9pZAogSW1hZ2VDb250
YWluZXJPR0w6OlNldEN1cnJlbnRJbWFnZShJbWFnZSAqYUltYWdlKQogewogICBuc1JlZlB0cjxJ
bWFnZT4gb2xkSW1hZ2U7CiAKICAgewotICAgIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0aXZlSW1h
Z2VMb2NrKTsKKyAgICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAKICAgICBvbGRJ
bWFnZSA9IG1BY3RpdmVJbWFnZS5mb3JnZXQoKTsKICAgICBtQWN0aXZlSW1hZ2UgPSBhSW1hZ2U7
CiAgIH0KIAogICAvLyBNYWtlIHN1cmUgb2xkSW1hZ2UgaXMgcmVsZWFzZWQgb3V0c2lkZSB0aGUg
bG9jaywgc28gaXQgY2FuIHRha2Ugb3VyCiAgIC8vIGxvY2sgaW4gUmVjeWNsZUJ1ZmZlcgogfQog
CiBhbHJlYWR5X0FkZFJlZmVkPEltYWdlPgogSW1hZ2VDb250YWluZXJPR0w6OkdldEN1cnJlbnRJ
bWFnZSgpCiB7Ci0gIE11dGV4QXV0b0xvY2sgbG9jayhtQWN0aXZlSW1hZ2VMb2NrKTsKKyAgTW9u
aXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogCiAgIG5zUmVmUHRyPEltYWdlPiByZXR2YWwg
PSBtQWN0aXZlSW1hZ2U7CiAgIHJldHVybiByZXR2YWwuZm9yZ2V0KCk7CiB9CiAKIGFscmVhZHlf
QWRkUmVmZWQ8Z2Z4QVN1cmZhY2U+CiBJbWFnZUNvbnRhaW5lck9HTDo6R2V0Q3VycmVudEFzU3Vy
ZmFjZShnZnhJbnRTaXplICphU2l6ZSkKIHsKLSAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3RpdmVJ
bWFnZUxvY2spOworICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAKICAgaWYgKCFt
QWN0aXZlSW1hZ2UpIHsKICAgICAqYVNpemUgPSBnZnhJbnRTaXplKDAsMCk7CiAgICAgcmV0dXJu
IG5zbnVsbDsKICAgfQogCiAgIEdMQ29udGV4dCAqZ2wgPSBuc251bGw7CiAgIC8vIHRleDEgd2ls
bCBiZSBSR0JBIG9yIFksIHRleDIgd2lsbCBDYiwgdGV4MyB3aWxsIGJlIENyCkBAIC0zMDksMTcg
KzMwNiwxNyBAQCBJbWFnZUNvbnRhaW5lck9HTDo6R2V0Q3VycmVudEFzU3VyZmFjZShnCiAgIG5z
UmVmUHRyPGdmeEltYWdlU3VyZmFjZT4gcyA9IGdsLT5SZWFkVGV4dHVyZUltYWdlKHRleDEsIHNp
emUsIExPQ0FMX0dMX1JHQkEpOwogICAqYVNpemUgPSBzaXplOwogICByZXR1cm4gcy5mb3JnZXQo
KTsKIH0KIAogZ2Z4SW50U2l6ZQogSW1hZ2VDb250YWluZXJPR0w6OkdldEN1cnJlbnRTaXplKCkK
IHsKLSAgTXV0ZXhBdXRvTG9jayBsb2NrKG1BY3RpdmVJbWFnZUxvY2spOworICBNb25pdG9yQXV0
b0VudGVyIG1vbihtTW9uaXRvcik7CiAgIGlmICghbUFjdGl2ZUltYWdlKSB7CiAgICAgcmV0dXJu
IGdmeEludFNpemUoMCwwKTsKICAgfQogCiAgIGlmIChtQWN0aXZlSW1hZ2UtPkdldEZvcm1hdCgp
ID09IEltYWdlOjpQTEFOQVJfWUNCQ1IpIHsKICAgICBQbGFuYXJZQ2JDckltYWdlT0dMICp5dXZJ
bWFnZSA9CiAgICAgICBzdGF0aWNfY2FzdDxQbGFuYXJZQ2JDckltYWdlT0dMKj4obUFjdGl2ZUlt
YWdlLmdldCgpKTsKICAgICBpZiAoIXl1dkltYWdlLT5IYXNEYXRhKCkpIHsKZGlmZiAtLWdpdCBh
L2dmeC9sYXllcnMvb3BlbmdsL0ltYWdlTGF5ZXJPR0wuaCBiL2dmeC9sYXllcnMvb3BlbmdsL0lt
YWdlTGF5ZXJPR0wuaAotLS0gYS9nZngvbGF5ZXJzL29wZW5nbC9JbWFnZUxheWVyT0dMLmgKKysr
IGIvZ2Z4L2xheWVycy9vcGVuZ2wvSW1hZ2VMYXllck9HTC5oCkBAIC0xNTQsMjMgKzE1NCwxOCBA
QCBwdWJsaWM6CiAKICAgdmlydHVhbCBnZnhJbnRTaXplIEdldEN1cnJlbnRTaXplKCk7CiAKICAg
dmlydHVhbCBQUkJvb2wgU2V0TGF5ZXJNYW5hZ2VyKExheWVyTWFuYWdlciAqYU1hbmFnZXIpOwog
CiAgIHZpcnR1YWwgTGF5ZXJNYW5hZ2VyOjpMYXllcnNCYWNrZW5kIEdldEJhY2tlbmRUeXBlKCkg
eyByZXR1cm4gTGF5ZXJNYW5hZ2VyOjpMQVlFUlNfT1BFTkdMOyB9CiAKIHByaXZhdGU6Ci0gIHR5
cGVkZWYgbW96aWxsYTo6TXV0ZXggTXV0ZXg7CiAKICAgbnNSZWZQdHI8UmVjeWNsZUJpbj4gbVJl
Y3ljbGVCaW47Ci0KLSAgLy8gVGhpcyBwcm90ZWN0cyBtQWN0aXZlSW1hZ2UKLSAgTXV0ZXggbUFj
dGl2ZUltYWdlTG9jazsKLQogICBuc1JlZlB0cjxJbWFnZT4gbUFjdGl2ZUltYWdlOwogfTsKIAog
Y2xhc3MgVEhFQkVTX0FQSSBJbWFnZUxheWVyT0dMIDogcHVibGljIEltYWdlTGF5ZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgTGF5ZXJPR0wKIHsKIHB1YmxpYzoK
ICAgSW1hZ2VMYXllck9HTChMYXllck1hbmFnZXJPR0wgKmFNYW5hZ2VyKQo=
</data>
<flag name="review"
          id="432342"
          type_id="937"
          status="+"
          setter="roc"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>516419</attachid>
            <date>2011-03-02 14:51:13 -0800</date>
            <delta_ts>2012-05-02 22:10:08 -0700</delta_ts>
            <desc>Patch: add paint stats to ImagesContainer</desc>
            <filename>580531-gfx-paint-time.patch</filename>
            <type>text/plain</type>
            <size>10668</size>
            <attacher>chris</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIENocmlzIFBlYXJjZSA8Y2hyaXNAcGVhcmNlLm9y
Zy5uej4KIyBQYXJlbnQgNzZhZTQ3NjE4ODE5NTUwY2U4M2ExYjgxZTM3OGQ3OWYwMzgwODM4ZApC
dWcgNTgwNTMxIC0gUmVjb3JkIGZpcnN0IHBhaW50IHRpbWUgYW5kIG51bWJlciBvZiBpbWFnZXMg
cGFpbnRlZCBpbiBJbWFnZUNvbnRhaW5lci4gcj0/CgpkaWZmIC0tZ2l0IGEvZ2Z4L2xheWVycy9J
bWFnZUxheWVycy5oIGIvZ2Z4L2xheWVycy9JbWFnZUxheWVycy5oCi0tLSBhL2dmeC9sYXllcnMv
SW1hZ2VMYXllcnMuaAorKysgYi9nZngvbGF5ZXJzL0ltYWdlTGF5ZXJzLmgKQEAgLTM5LDE2ICsz
OSwxNyBAQAogI2RlZmluZSBHRlhfSU1BR0VMQVlFUl9ICiAKICNpbmNsdWRlICJMYXllcnMuaCIK
IAogI2luY2x1ZGUgImdmeFBhdHRlcm4uaCIKICNpbmNsdWRlICJuc1RocmVhZFV0aWxzLmgiCiAj
aW5jbHVkZSAibnNDb3JlQW5pbWF0aW9uU3VwcG9ydC5oIgogI2luY2x1ZGUgIm1vemlsbGEvTW9u
aXRvci5oIgorI2luY2x1ZGUgIm1vemlsbGEvVGltZVN0YW1wLmgiCiAKIG5hbWVzcGFjZSBtb3pp
bGxhIHsKIG5hbWVzcGFjZSBsYXllcnMgewogCiBlbnVtIFN0ZXJlb01vZGUgewogICBTVEVSRU9f
TU9ERV9NT05PLAogICBTVEVSRU9fTU9ERV9MRUZUX1JJR0hULAogICBTVEVSRU9fTU9ERV9SSUdI
VF9MRUZULApAQCAtMTI3LDMyICsxMjgsNDAgQEAgcHJvdGVjdGVkOgogICogKGJlY2F1c2UgbGF5
ZXJzIGNhbiBvbmx5IGJlIHVzZWQgb24gdGhlIG1haW4gdGhyZWFkKSBhbmQgd2Ugd2FudCB0bwog
ICogYmUgYWJsZSB0byBzZXQgdGhlIGN1cnJlbnQgSW1hZ2UgZnJvbSBhbnkgdGhyZWFkLCB0byBm
YWNpbGl0YXRlCiAgKiB2aWRlbyBwbGF5YmFjayB3aXRob3V0IGludm9sdmluZyB0aGUgbWFpbiB0
aHJlYWQsIGZvciBleGFtcGxlLgogICovCiBjbGFzcyBUSEVCRVNfQVBJIEltYWdlQ29udGFpbmVy
IHsKICAgVEhFQkVTX0lOTElORV9ERUNMX1RIUkVBRFNBRkVfUkVGQ09VTlRJTkcoSW1hZ2VDb250
YWluZXIpCiAKIHB1YmxpYzoKLSAgSW1hZ2VDb250YWluZXIoKSA6IG1Nb25pdG9yKCJJbWFnZUNv
bnRhaW5lciIpIHt9CisKKyAgSW1hZ2VDb250YWluZXIoKSA6CisgICAgbU1vbml0b3IoIkltYWdl
Q29udGFpbmVyIiksCisgICAgbVBhaW50Q291bnQoMCksCisgICAgbVByZXZpb3VzSW1hZ2VQYWlu
dGVkKFBSX0ZBTFNFKQorICB7fQorCiAgIHZpcnR1YWwgfkltYWdlQ29udGFpbmVyKCkge30KIAog
ICAvKioKICAgICogQ3JlYXRlIGFuIEltYWdlIGluIG9uZSBvZiB0aGUgZ2l2ZW4gZm9ybWF0cy4K
ICAgICogUGlja3MgdGhlICJiZXN0IiBmb3JtYXQgZnJvbSB0aGUgbGlzdCBhbmQgY3JlYXRlcyBh
biBJbWFnZSBvZiB0aGF0CiAgICAqIGZvcm1hdC4KICAgICogUmV0dXJucyBudWxsIGlmIHRoaXMg
YmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IGFueSBvZiB0aGUgZm9ybWF0cy4KICAgICovCiAgIHZp
cnR1YWwgYWxyZWFkeV9BZGRSZWZlZDxJbWFnZT4gQ3JlYXRlSW1hZ2UoY29uc3QgSW1hZ2U6OkZv
cm1hdCogYUZvcm1hdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJVaW50MzIgYU51bUZvcm1hdHMpID0gMDsKIAogICAvKioKICAgICogU2V0IGFuIElt
YWdlIGFzIHRoZSBjdXJyZW50IGltYWdlIHRvIGRpc3BsYXkuIFRoZSBJbWFnZSBtdXN0IGhhdmUK
ICAgICogYmVlbiBjcmVhdGVkIGJ5IHRoaXMgSW1hZ2VDb250YWluZXIuCiAgICAqIAorICAgKiBJ
bXBsZW1lbnRhdGlvbnMgbXVzdCBjYWxsIEN1cnJlbnRJbWFnZUNoYW5nZWQoKSB3aGlsZSBob2xk
aW5nIG1Nb25pdG9yLgorICAgKgogICAgKiBUaGUgSW1hZ2UgZGF0YSBtdXN0IG5vdCBiZSBtb2Rp
ZmllZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQhCiAgICAqLwogICB2aXJ0dWFsIHZvaWQg
U2V0Q3VycmVudEltYWdlKEltYWdlKiBhSW1hZ2UpID0gMDsKIAogICAvKioKICAgICogR2V0IHRo
ZSBjdXJyZW50IEltYWdlLgogICAgKiBUaGlzIGhhcyB0byBhZGQgYSByZWZlcmVuY2Ugc2luY2Ug
b3RoZXJ3aXNlIHRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMKICAgICogd2hlcmUgdGhlIGN1cnJl
bnQgaW1hZ2UgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgY2FsbGVyIGNhbiBhZGQKQEAgLTIwNywy
MiArMjE2LDkwIEBAIHB1YmxpYzoKIAogICAvKioKICAgICogR2V0IHRoZSBsYXllciBtYW5hZ2Vy
IHR5cGUgdGhpcyBpbWFnZSBjb250YWluZXIgd2FzIGNyZWF0ZWQgd2l0aCwKICAgICogcHJlc3Vt
YWJseSBpdHMgdXNlcnMgbWlnaHQgd2FudCB0byBkbyBzb21ldGhpbmcgc3BlY2lhbCBpZiB0eXBl
cyBkbyBub3QKICAgICogbWF0Y2guCiAgICAqLwogICB2aXJ0dWFsIExheWVyTWFuYWdlcjo6TGF5
ZXJzQmFja2VuZCBHZXRCYWNrZW5kVHlwZSgpID0gMDsKIAorICAvKioKKyAgICogUmV0dXJucyB0
aGUgdGltZSBhdCB3aGljaCB0aGUgY3VycmVudGx5IGNvbnRhaW5lZCBpbWFnZSB3YXMgZmlyc3QK
KyAgICogcGFpbnRlZC4gIFRoaXMgaXMgcmVzZXQgZXZlcnkgdGltZSBhIG5ldyBpbWFnZSBpcyBz
ZXQgYXMgdGhlIGN1cnJlbnQKKyAgICogaW1hZ2UuICBOb3RlIHRoaXMgbWF5IHJldHVybiBhIG51
bGwgdGltZXN0YW1wIGlmIHRoZSBjdXJyZW50IGltYWdlCisgICAqIGhhcyBub3QgeWV0IGJlZW4g
cGFpbnRlZC4gIENhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICAgKi8KKyAgVGltZVN0
YW1wIEdldFBhaW50VGltZSgpIHsKKyAgICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7
CisgICAgcmV0dXJuIG1QYWludFRpbWU7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0aGUg
bnVtYmVyIG9mIGltYWdlcyB3aGljaCBoYXZlIGJlZW4gY29udGFpbmVkIGluIHRoaXMgY29udGFp
bmVyCisgICAqIGFuZCBwYWludGVkIGF0IGxlYXN0IG9uY2UuICBDYW4gYmUgY2FsbGVkIGZyb20g
YW55IHRocmVhZC4KKyAgICovCisgIFBSVWludDMyIEdldFBhaW50Q291bnQoKSB7CisgICAgTW9u
aXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOworICAgIHJldHVybiBtUGFpbnRDb3VudDsKKyAg
fQorCisgIC8qKgorICAgKiBJbmNyZW1lbnRzIG1QYWludENvdW50IGlmIHRoaXMgaXMgdGhlIGZp
cnN0IHRpbWUgYVBhaW50ZWQgaGFzIGJlZW4KKyAgICogcGFpbnRlZCwgYW5kIHNldHMgbVBhaW50
VGltZSBpZiB0aGUgcGFpbnRlZCBpbWFnZSBpcyB0aGUgY3VycmVudCBpbWFnZS4KKyAgICogY3Vy
cmVudCBpbWFnZS4gIENhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICAgKi8KKyAgdm9p
ZCBOb3RpZnlQYWludGVkSW1hZ2UoSW1hZ2UqIGFQYWludGVkKSB7CisgICAgTW9uaXRvckF1dG9F
bnRlciBtb24obU1vbml0b3IpOworICAgIG5zUmVmUHRyPEltYWdlPiBjdXJyZW50ID0gR2V0Q3Vy
cmVudEltYWdlKCk7CisgICAgaWYgKGFQYWludGVkID09IGN1cnJlbnQpIHsKKyAgICAgIGlmICht
UGFpbnRUaW1lLklzTnVsbCgpKSB7CisgICAgICAgIG1QYWludFRpbWUgPSBUaW1lU3RhbXA6Ok5v
dygpOworICAgICAgICBtUGFpbnRDb3VudCsrOworICAgICAgfQorICAgIH0gZWxzZSBpZiAoIW1Q
cmV2aW91c0ltYWdlUGFpbnRlZCkgeworICAgICAgLy8gV2hpbGUgd2Ugd2VyZSBwYWludGluZyB0
aGlzIGltYWdlLCB0aGUgY3VycmVudCBpbWFnZSBjaGFuZ2VkLiBXZQorICAgICAgLy8gc3RpbGwg
bXVzdCBjb3VudCBpdCBhcyBwYWludGVkLCBidXQgY2FuJ3Qgc2V0IG1QYWludFRpbWUsIHNpbmNl
IHdlJ3JlCisgICAgICAvLyBubyBsb25nZXIgdGhlIGN1cnJlbnQgaW1hZ2UuCisgICAgICBtUGFp
bnRDb3VudCsrOworICAgICAgbVByZXZpb3VzSW1hZ2VQYWludGVkID0gUFJfVFJVRTsKKyAgICB9
CisgIH0KKwogcHJvdGVjdGVkOgogICB0eXBlZGVmIG1vemlsbGE6Ok1vbml0b3IgTW9uaXRvcjsK
ICAgTGF5ZXJNYW5hZ2VyKiBtTWFuYWdlcjsKICAgTW9uaXRvciBtTW9uaXRvcjsKIAotICBJbWFn
ZUNvbnRhaW5lcihMYXllck1hbmFnZXIqIGFNYW5hZ2VyKSA6IG1NYW5hZ2VyKGFNYW5hZ2VyKSwg
bU1vbml0b3IoIkltYWdlQ29udGFpbmVyIikgIHt9CisgIEltYWdlQ29udGFpbmVyKExheWVyTWFu
YWdlciogYU1hbmFnZXIpIDoKKyAgICBtTWFuYWdlcihhTWFuYWdlciksCisgICAgbU1vbml0b3Io
IkltYWdlQ29udGFpbmVyIiksCisgICAgbVBhaW50Q291bnQoMCksCisgICAgbVByZXZpb3VzSW1h
Z2VQYWludGVkKFBSX0ZBTFNFKQorICB7fQorCisgIC8vIFBlcmZvcm1zIG5lY2Vzc2FyeSBob3Vz
ZWtlZXBpbmcgdG8gZW5zdXJlIHRoZSBwYWludGVkIGZyYW1lIHN0YXRpc3RpY3MKKyAgLy8gYXJl
IGFjY3VyYXRlLiBNdXN0IGJlIGNhbGxlZCBieSBTZXRDdXJyZW50SW1hZ2UoKSBpbXBsZW1lbnRh
dGlvbnMgd2l0aAorICAvLyBtTW9uaXRvciBoZWxkLgorICB2b2lkIEN1cnJlbnRJbWFnZUNoYW5n
ZWQoKSB7CisgICAgbU1vbml0b3IuQXNzZXJ0Q3VycmVudFRocmVhZEluKCk7CisgICAgbVByZXZp
b3VzSW1hZ2VQYWludGVkID0gIW1QYWludFRpbWUuSXNOdWxsKCk7CisgICAgbVBhaW50VGltZSA9
IFRpbWVTdGFtcCgpOworICB9CisKKyAgLy8gTnVtYmVyIG9mIGNvbnRhaW5lZCBpbWFnZXMgdGhh
dCBoYXZlIGJlZW4gcGFpbnRlZCBhdCBsZWFzdCBvbmNlLiAgSXQncyB1cAorICAvLyB0byB0aGUg
SW1hZ2VDb250YWluZXIgaW1wbGVtZW50YXRpb24gdG8gZW5zdXJlIGFjY2Vzc2VzIHRvIHRoaXMg
YXJlCisgIC8vIHRocmVhZHNhZmUuCisgIFBSVWludDMyIG1QYWludENvdW50OworCisgIC8vIFRp
bWUgc3RhbXAgYXQgd2hpY2ggdGhlIGN1cnJlbnQgaW1hZ2Ugd2FzIGZpcnN0IHBhaW50ZWQuICBJ
dCdzIHVwIHRvIHRoZQorICAvLyBJbWFnZUNvbnRhaW5lciBpbXBsZW1lbnRhdGlvbiB0byBlbnN1
cmUgYWNjZXNzZXMgdG8gdGhpcyBhcmUgdGhyZWFkc2FmZS4KKyAgVGltZVN0YW1wIG1QYWludFRp
bWU7CisKKyAgLy8gRGVub3RlcyB3aGV0aGVyIHRoZSBwcmV2aW91cyBpbWFnZSB3YXMgcGFpbnRl
ZC4KKyAgUFJQYWNrZWRCb29sIG1QcmV2aW91c0ltYWdlUGFpbnRlZDsKIH07CiAKIC8qKgogICog
QSBMYXllciB3aGljaCByZW5kZXJzIGFuIEltYWdlLgogICovCiBjbGFzcyBUSEVCRVNfQVBJIElt
YWdlTGF5ZXIgOiBwdWJsaWMgTGF5ZXIgewogcHVibGljOgogICAvKioKZGlmZiAtLWdpdCBhL2dm
eC9sYXllcnMvYmFzaWMvQmFzaWNJbWFnZXMuY3BwIGIvZ2Z4L2xheWVycy9iYXNpYy9CYXNpY0lt
YWdlcy5jcHAKLS0tIGEvZ2Z4L2xheWVycy9iYXNpYy9CYXNpY0ltYWdlcy5jcHAKKysrIGIvZ2Z4
L2xheWVycy9iYXNpYy9CYXNpY0ltYWdlcy5jcHAKQEAgLTM0NCwxNiArMzQ0LDE3IEBAIEJhc2lj
SW1hZ2VDb250YWluZXI6OkNyZWF0ZUltYWdlKGNvbnN0IEkKICAgcmV0dXJuIGltYWdlLmZvcmdl
dCgpOwogfQogCiB2b2lkCiBCYXNpY0ltYWdlQ29udGFpbmVyOjpTZXRDdXJyZW50SW1hZ2UoSW1h
Z2UqIGFJbWFnZSkKIHsKICAgTW9uaXRvckF1dG9FbnRlciBtb24obU1vbml0b3IpOwogICBtSW1h
Z2UgPSBhSW1hZ2U7CisgIEN1cnJlbnRJbWFnZUNoYW5nZWQoKTsKIH0KIAogYWxyZWFkeV9BZGRS
ZWZlZDxJbWFnZT4KIEJhc2ljSW1hZ2VDb250YWluZXI6OkdldEN1cnJlbnRJbWFnZSgpCiB7CiAg
IE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKICAgbnNSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gbUltYWdlOwogICByZXR1cm4gaW1hZ2UuZm9yZ2V0KCk7CmRpZmYgLS1naXQgYS9nZngvbGF5
ZXJzL2Jhc2ljL0Jhc2ljTGF5ZXJzLmNwcCBiL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNMYXllcnMu
Y3BwCi0tLSBhL2dmeC9sYXllcnMvYmFzaWMvQmFzaWNMYXllcnMuY3BwCisrKyBiL2dmeC9sYXll
cnMvYmFzaWMvQmFzaWNMYXllcnMuY3BwCkBAIC03MjgsMTYgKzcyOCwxOCBAQCBCYXNpY0ltYWdl
TGF5ZXI6OlBhaW50KGdmeENvbnRleHQqIGFDb250CiAKIGFscmVhZHlfQWRkUmVmZWQ8Z2Z4UGF0
dGVybj4KIEJhc2ljSW1hZ2VMYXllcjo6R2V0QW5kUGFpbnRDdXJyZW50SW1hZ2UoZ2Z4Q29udGV4
dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IGFPcGFjaXR5KQogewogICBpZiAoIW1Db250YWluZXIpCiAgICAgcmV0dXJuIG5zbnVsbDsK
IAorICBuc1JlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtQ29udGFpbmVyLT5HZXRDdXJyZW50SW1hZ2Uo
KTsKKwogICBuc1JlZlB0cjxnZnhBU3VyZmFjZT4gc3VyZmFjZSA9IG1Db250YWluZXItPkdldEN1
cnJlbnRBc1N1cmZhY2UoJm1TaXplKTsKICAgaWYgKCFzdXJmYWNlKSB7CiAgICAgcmV0dXJuIG5z
bnVsbDsKICAgfQogCiAgIG5zUmVmUHRyPGdmeFBhdHRlcm4+IHBhdCA9IG5ldyBnZnhQYXR0ZXJu
KHN1cmZhY2UpOwogICBpZiAoIXBhdCkgewogICAgIHJldHVybiBuc251bGw7CkBAIC03NDcsMTcg
Kzc0OSwyMCBAQCBCYXNpY0ltYWdlTGF5ZXI6OkdldEFuZFBhaW50Q3VycmVudEltYWdlCiAKICAg
Ly8gVGhlIHZpc2libGUgcmVnaW9uIGNhbiBleHRlbmQgb3V0c2lkZSB0aGUgaW1hZ2UuICBJZiB3
ZSdyZSBub3QKICAgLy8gdGlsaW5nLCB3ZSBkb24ndCB3YW50IHRvIGRyYXcgaW50byB0aGF0IGFy
ZWEsIHNvIGp1c3QgZHJhdyB3aXRoaW4KICAgLy8gdGhlIGltYWdlIGJvdW5kcy4KICAgY29uc3Qg
bnNJbnRSZWN0KiB0aWxlU3JjUmVjdCA9IEdldFRpbGVTb3VyY2VSZWN0KCk7CiAgIFBhaW50Q29u
dGV4dChwYXQsCiAgICAgICAgICAgICAgICB0aWxlU3JjUmVjdCA/IEdldFZpc2libGVSZWdpb24o
KSA6IG5zSW50UmVnaW9uKG5zSW50UmVjdCgwLCAwLCBtU2l6ZS53aWR0aCwgbVNpemUuaGVpZ2h0
KSksCiAgICAgICAgICAgICAgICB0aWxlU3JjUmVjdCwKLSAgICAgICAgICAgICAgIGFPcGFjaXR5
LCBhQ29udGV4dCk7IAorICAgICAgICAgICAgICAgYU9wYWNpdHksIGFDb250ZXh0KTsKKworICBH
ZXRDb250YWluZXIoKS0+Tm90aWZ5UGFpbnRlZEltYWdlKGltYWdlKTsKKwogICByZXR1cm4gcGF0
LmZvcmdldCgpOwogfQogCiAvKnN0YXRpYyovIHZvaWQKIEJhc2ljSW1hZ2VMYXllcjo6UGFpbnRD
b250ZXh0KGdmeFBhdHRlcm4qIGFQYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNJbnRSZWdpb24mIGFWaXNpYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNJbnRSZWN0KiBhVGlsZVNvdXJjZVJlY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBhT3BhY2l0eSwKZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNk
MTAvSW1hZ2VMYXllckQzRDEwLmNwcCBiL2dmeC9sYXllcnMvZDNkMTAvSW1hZ2VMYXllckQzRDEw
LmNwcAotLS0gYS9nZngvbGF5ZXJzL2QzZDEwL0ltYWdlTGF5ZXJEM0QxMC5jcHAKKysrIGIvZ2Z4
L2xheWVycy9kM2QxMC9JbWFnZUxheWVyRDNEMTAuY3BwCkBAIC0xMTksMTYgKzExOSwxNyBAQCBJ
bWFnZUNvbnRhaW5lckQzRDEwOjpDcmVhdGVJbWFnZShjb25zdCBJCiB9CiAKIHZvaWQKIEltYWdl
Q29udGFpbmVyRDNEMTA6OlNldEN1cnJlbnRJbWFnZShJbWFnZSAqYUltYWdlKQogewogICBNb25p
dG9yQXV0b0VudGVyIG1vbihtTW9uaXRvcik7CiAKICAgbUFjdGl2ZUltYWdlID0gYUltYWdlOwor
ICBDdXJyZW50SW1hZ2VDaGFuZ2VkKCk7CiB9CiAKIGFscmVhZHlfQWRkUmVmZWQ8SW1hZ2U+CiBJ
bWFnZUNvbnRhaW5lckQzRDEwOjpHZXRDdXJyZW50SW1hZ2UoKQogewogICBNb25pdG9yQXV0b0Vu
dGVyIG1vbihtTW9uaXRvcik7CiAKICAgbnNSZWZQdHI8SW1hZ2U+IHJldHZhbCA9IG1BY3RpdmVJ
bWFnZTsKQEAgLTM0NiwxNiArMzQ3LDE4IEBAIEltYWdlTGF5ZXJEM0QxMDo6UmVuZGVyTGF5ZXIo
KQogICAgICAgICAoZmxvYXQpMCwKICAgICAgICAgKGZsb2F0KXl1dkltYWdlLT5tU2l6ZS53aWR0
aCwKICAgICAgICAgKGZsb2F0KXl1dkltYWdlLT5tU2l6ZS5oZWlnaHQpCiAgICAgICApOwogICB9
CiAKICAgdGVjaG5pcXVlLT5HZXRQYXNzQnlJbmRleCgwKS0+QXBwbHkoMCk7CiAgIGRldmljZSgp
LT5EcmF3KDQsIDApOworCisgIEdldENvbnRhaW5lcigpLT5Ob3RpZnlQYWludGVkSW1hZ2UoaW1h
Z2UpOwogfQogCiBQbGFuYXJZQ2JDckltYWdlRDNEMTA6OlBsYW5hcllDYkNySW1hZ2VEM0QxMChJ
RDNEMTBEZXZpY2UxICphRGV2aWNlKQogICA6IFBsYW5hcllDYkNySW1hZ2Uoc3RhdGljX2Nhc3Q8
SW1hZ2VEM0QxMCo+KHRoaXMpKQogICAsIG1EZXZpY2UoYURldmljZSkKICAgLCBtSGFzRGF0YShQ
Ul9GQUxTRSkKIHsKIH0KZGlmZiAtLWdpdCBhL2dmeC9sYXllcnMvZDNkOS9JbWFnZUxheWVyRDNE
OS5jcHAgYi9nZngvbGF5ZXJzL2QzZDkvSW1hZ2VMYXllckQzRDkuY3BwCi0tLSBhL2dmeC9sYXll
cnMvZDNkOS9JbWFnZUxheWVyRDNEOS5jcHAKKysrIGIvZ2Z4L2xheWVycy9kM2Q5L0ltYWdlTGF5
ZXJEM0Q5LmNwcApAQCAtMTU0LDE2ICsxNTQsMTcgQEAgSW1hZ2VDb250YWluZXJEM0Q5OjpDcmVh
dGVJbWFnZShjb25zdCBJbQogfQogCiB2b2lkCiBJbWFnZUNvbnRhaW5lckQzRDk6OlNldEN1cnJl
bnRJbWFnZShJbWFnZSAqYUltYWdlKQogewogICBNb25pdG9yQXV0b0VudGVyIG1vbihtTW9uaXRv
cik7CiAKICAgbUFjdGl2ZUltYWdlID0gYUltYWdlOworICBDdXJyZW50SW1hZ2VDaGFuZ2VkKCk7
CiB9CiAKIGFscmVhZHlfQWRkUmVmZWQ8SW1hZ2U+CiBJbWFnZUNvbnRhaW5lckQzRDk6OkdldEN1
cnJlbnRJbWFnZSgpCiB7CiAgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25pdG9yKTsKIAogICBu
c1JlZlB0cjxJbWFnZT4gcmV0dmFsID0gbUFjdGl2ZUltYWdlOwpAQCAtMzY3LDE2ICszNjgsMTgg
QEAgSW1hZ2VMYXllckQzRDk6OlJlbmRlckxheWVyKCkKICAgICB9CiAgICAgZGV2aWNlKCktPlNl
dFRleHR1cmUoMCwgY2Fpcm9JbWFnZS0+R2V0T3JDcmVhdGVUZXh0dXJlKCkpOwogICAgIGRldmlj
ZSgpLT5EcmF3UHJpbWl0aXZlKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDAsIDIpOwogICAgIGlmICht
RmlsdGVyID09IGdmeFBhdHRlcm46OkZJTFRFUl9ORUFSRVNUKSB7CiAgICAgICBkZXZpY2UoKS0+
U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX0xJTkVBUik7CiAg
ICAgICBkZXZpY2UoKS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfTUlORklMVEVSLCBEM0RU
RVhGX0xJTkVBUik7CiAgICAgfQogICB9CisKKyAgR2V0Q29udGFpbmVyKCktPk5vdGlmeVBhaW50
ZWRJbWFnZShpbWFnZSk7CiB9CiAKIFBsYW5hcllDYkNySW1hZ2VEM0Q5OjpQbGFuYXJZQ2JDcklt
YWdlRDNEOSgpCiAgIDogUGxhbmFyWUNiQ3JJbWFnZShzdGF0aWNfY2FzdDxJbWFnZUQzRDkqPih0
aGlzKSkKICAgLCBtSGFzRGF0YShQUl9GQUxTRSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvZ2Z4L2xh
eWVycy9vcGVuZ2wvSW1hZ2VMYXllck9HTC5jcHAgYi9nZngvbGF5ZXJzL29wZW5nbC9JbWFnZUxh
eWVyT0dMLmNwcAotLS0gYS9nZngvbGF5ZXJzL29wZW5nbC9JbWFnZUxheWVyT0dMLmNwcAorKysg
Yi9nZngvbGF5ZXJzL29wZW5nbC9JbWFnZUxheWVyT0dMLmNwcApAQCAtMjMwLDE2ICsyMzAsMTcg
QEAgSW1hZ2VDb250YWluZXJPR0w6OlNldEN1cnJlbnRJbWFnZShJbWFnZQogewogICBuc1JlZlB0
cjxJbWFnZT4gb2xkSW1hZ2U7CiAKICAgewogICAgIE1vbml0b3JBdXRvRW50ZXIgbW9uKG1Nb25p
dG9yKTsKIAogICAgIG9sZEltYWdlID0gbUFjdGl2ZUltYWdlLmZvcmdldCgpOwogICAgIG1BY3Rp
dmVJbWFnZSA9IGFJbWFnZTsKKyAgICBDdXJyZW50SW1hZ2VDaGFuZ2VkKCk7CiAgIH0KIAogICAv
LyBNYWtlIHN1cmUgb2xkSW1hZ2UgaXMgcmVsZWFzZWQgb3V0c2lkZSB0aGUgbG9jaywgc28gaXQg
Y2FuIHRha2Ugb3VyCiAgIC8vIGxvY2sgaW4gUmVjeWNsZUJ1ZmZlcgogfQogCiBhbHJlYWR5X0Fk
ZFJlZmVkPEltYWdlPgogSW1hZ2VDb250YWluZXJPR0w6OkdldEN1cnJlbnRJbWFnZSgpCkBAIC00
OTMsMTYgKzQ5NCwxNyBAQCBJbWFnZUxheWVyT0dMOjpSZW5kZXJMYXllcihpbnQsCiAgICAgIHBy
b2dyYW0tPlNldExheWVyT3BhY2l0eShHZXRFZmZlY3RpdmVPcGFjaXR5KCkpOwogICAgICBwcm9n
cmFtLT5TZXRSZW5kZXJPZmZzZXQoYU9mZnNldCk7CiAgICAgIHByb2dyYW0tPlNldFRleHR1cmVV
bml0KDApOwogICAgIAogICAgICBtT0dMTWFuYWdlci0+QmluZEFuZERyYXdRdWFkKHByb2dyYW0p
OwogICAgICBnbCgpLT5mQmluZFRleHR1cmUoTE9DQUxfR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJC
LCAwKTsKICNlbmRpZgogICB9CisgIEdldENvbnRhaW5lcigpLT5Ob3RpZnlQYWludGVkSW1hZ2Uo
aW1hZ2UpOwogfQogCiBzdGF0aWMgdm9pZAogSW5pdFRleHR1cmUoR0xDb250ZXh0KiBhR0wsIEdM
dWludCBhVGV4dHVyZSwgR0xlbnVtIGFGb3JtYXQsIGNvbnN0IGdmeEludFNpemUmIGFTaXplKQog
ewogICBhR0wtPmZCaW5kVGV4dHVyZShMT0NBTF9HTF9URVhUVVJFXzJELCBhVGV4dHVyZSk7CiAg
IGFHTC0+ZlRleFBhcmFtZXRlcmkoTE9DQUxfR0xfVEVYVFVSRV8yRCwgTE9DQUxfR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBMT0NBTF9HTF9MSU5FQVIpOwogICBhR0wtPmZUZXhQYXJhbWV0ZXJpKExP
Q0FMX0dMX1RFWFRVUkVfMkQsIExPQ0FMX0dMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgTE9DQUxfR0xf
TElORUFSKTsK
</data>

          </attachment>


    </bug>

</bugzilla>