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

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

    <bug>
          <bug_id>341604</bug_id>
          <alias>framesandbox</alias>
          <filed_via>unknown</filed_via>
          <creation_ts>2006-06-14 22:07:08 -0700</creation_ts>
          <short_desc>Implement HTML5 sandbox attribute for IFRAMEs</short_desc>
          <delta_ts>2019-03-31 01:57:03 -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>Security</component>
          <version>Trunk</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_type>enhancement</bug_type>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugzilla.mozilla.org/show_bug.cgi?id=449358</see_also>
    
    <see_also>https://launchpad.net/bugs/1022741</see_also>
          <bug_file_loc>https://wiki.mozilla.org/Features/Platform/Iframe_Sandbox</bug_file_loc>
          <status_whiteboard>[sg:want]</status_whiteboard>
          <keywords>dev-doc-complete, sec-want</keywords>
          <priority>--</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>mozilla17</target_milestone>
          <dependson>710292</dependson>
    
    <dependson>747580</dependson>
    
    <dependson>752529</dependson>
    
    <dependson>754202</dependson>
    
    <dependson>766282</dependson>
    
    <dependson>781126</dependson>
    
    <dependson>785310</dependson>
    
    <dependson>793255</dependson>
    
    <dependson>838692</dependson>
    
    <dependson>849791</dependson>
    
    <dependson>886262</dependson>
    
    <dependson>1054646</dependson>
    
    <dependson>1287989</dependson>
          <blocked>568516</blocked>
    
    <blocked>752551</blocked>
    
    <blocked>752563</blocked>
    
    <blocked>768664</blocked>
    
    <blocked>416574</blocked>
    
    <blocked>671389</blocked>
    
    <blocked>752559</blocked>
    
    <blocked>765780</blocked>
    
    <blocked>783958</blocked>
    
    <blocked>784402</blocked>
    
    <blocked>802882</blocked>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>nrlz</reporter>
          <assigned_to name="Ian Melven :imelven">ian.melven</assigned_to>
          <cc>0460f4mta</cc>
    
    <cc>21</cc>
    
    <cc>abarth-mozilla</cc>
    
    <cc>annevk</cc>
    
    <cc>anthony</cc>
    
    <cc>antoine.mozilla</cc>
    
    <cc>brandon</cc>
    
    <cc>bruant.d</cc>
    
    <cc>brunoaiss</cc>
    
    <cc>bugmail</cc>
    
    <cc>bugmail</cc>
    
    <cc>bugs</cc>
    
    <cc>bugzilla.mozilla.org</cc>
    
    <cc>bugzilla.x.0x</cc>
    
    <cc>bugzilla</cc>
    
    <cc>bzbarsky</cc>
    
    <cc>chottan_mottan</cc>
    
    <cc>ckerschb</cc>
    
    <cc>daira</cc>
    
    <cc>deprecationmail</cc>
    
    <cc>dev.akhawe+mozilla</cc>
    
    <cc>dgtb1994</cc>
    
    <cc>dveditz</cc>
    
    <cc>ehsan.akhgari</cc>
    
    <cc>esigra</cc>
    
    <cc>evilpies</cc>
    
    <cc>fastest963</cc>
    
    <cc>felipc</cc>
    
    <cc>fullmetaljacket.xp+bugmail</cc>
    
    <cc>futtta</cc>
    
    <cc>gavin.sharp</cc>
    
    <cc>glob</cc>
    
    <cc>grenavitar</cc>
    
    <cc>harshid</cc>
    
    <cc>ian.melven</cc>
    
    <cc>ian</cc>
    
    <cc>ian</cc>
    
    <cc>ioana.chiorean</cc>
    
    <cc>johnp</cc>
    
    <cc>jonathan.protzenko</cc>
    
    <cc>josh</cc>
    
    <cc>jstenback+bmo</cc>
    
    <cc>justin.lebar+bug</cc>
    
    <cc>jvarga</cc>
    
    <cc>jypenator</cc>
    
    <cc>khuey</cc>
    
    <cc>ladamski</cc>
    
    <cc>lh.bennett</cc>
    
    <cc>martijn.martijn</cc>
    
    <cc>matjk7</cc>
    
    <cc>mdykun</cc>
    
    <cc>mike</cc>
    
    <cc>mkmelin+mozilla</cc>
    
    <cc>ml.lipsin</cc>
    
    <cc>mounir</cc>
    
    <cc>mozilla.bugs</cc>
    
    <cc>mozilla</cc>
    
    <cc>Ms2ger</cc>
    
    <cc>nth10sd</cc>
    
    <cc>patilkr</cc>
    
    <cc>paul</cc>
    
    <cc>Pidgeot18</cc>
    
    <cc>reed</cc>
    
    <cc>roc</cc>
    
    <cc>rpaplin</cc>
    
    <cc>smaug</cc>
    
    <cc>sonny.piers</cc>
    
    <cc>TanviHacks</cc>
    
    <cc>teramako</cc>
    
    <cc>thebnich+bmo</cc>
    
    <cc>vandamkoo</cc>
    
    <cc>vulcain</cc>
    
    <cc>warner-bugzilla</cc>
    
    <cc>webmaster</cc>
    
    <cc>xian_nicolae2004</cc>
    
    <cc>xKhorasan+mozilla</cc>
    
    <cc>xtc4uall</cc>
    
    <cc>ydelendik</cc>
          
          <cf_tracking_p11>---</cf_tracking_p11>
          <cf_root_cause>---</cf_root_cause>
          <cf_tracking_win>---</cf_tracking_win>
          <cf_backlog>---</cf_backlog>
          <cf_tracking_e10s>---</cf_tracking_e10s>
          <cf_firefox_messaging_system>---</cf_firefox_messaging_system>
          <cf_platform_rel>---</cf_platform_rel>
          <cf_bmo_component_move>---</cf_bmo_component_move>
          <cf_geckoview>---</cf_geckoview>
          <cf_blocking_webextensions>---</cf_blocking_webextensions>
          <cf_data_science_product_support_area>---</cf_data_science_product_support_area>
          <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_a11y_review_project_flag>---</cf_a11y_review_project_flag>
          <cf_status_firefox9>---</cf_status_firefox9>
          <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_accessibility_severity>---</cf_accessibility_severity>
          <cf_status_firefox14>---</cf_status_firefox14>
          <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_status_firefox24>---</cf_status_firefox24>
          <cf_performance_impact>---</cf_performance_impact>
          <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_size_estimate>---</cf_size_estimate>
          <cf_status_firefox29>---</cf_status_firefox29>
          <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_status_firefox34>---</cf_status_firefox34>
          <cf_webcompat_priority>---</cf_webcompat_priority>
          <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_status_firefox38_0_5>---</cf_status_firefox38_0_5>
          <cf_tracking_firefox39>---</cf_tracking_firefox39>
          <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_b2g_1_4>---</cf_status_b2g_1_4>
          <cf_status_20>---</cf_status_20>
          <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_tracking_relnote_b2g>---</cf_tracking_relnote_b2g>
          <cf_tracking_thunderbird_relnote>---</cf_tracking_thunderbird_relnote>
          <cf_status_191>---</cf_status_191>
          <cf_status_conduit_push>---</cf_status_conduit_push>
          <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_seamonkey21>---</cf_status_seamonkey21>
          <cf_status_thunderbird_41>---</cf_status_thunderbird_41>
          <cf_tracking_seamonkey22>---</cf_tracking_seamonkey22>
          <cf_tracking_thunderbird_42>---</cf_tracking_thunderbird_42>
          <cf_status_seamonkey22>---</cf_status_seamonkey22>
          <cf_status_thunderbird_42>---</cf_status_thunderbird_42>
          <cf_tracking_thunderbird_43>---</cf_tracking_thunderbird_43>
          <cf_tracking_seamonkey23>---</cf_tracking_seamonkey23>
          <cf_status_seamonkey23>---</cf_status_seamonkey23>
          <cf_status_thunderbird_43>---</cf_status_thunderbird_43>
          <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_seamonkey224>---</cf_tracking_seamonkey224>
          <cf_tracking_thunderbird_45>---</cf_tracking_thunderbird_45>
          <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_seamonkey229>---</cf_tracking_seamonkey229>
          <cf_colo_site>---</cf_colo_site>
          <cf_tracking_thunderbird_esr24>---</cf_tracking_thunderbird_esr24>
          <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_thunderbird_esr38>---</cf_status_thunderbird_esr38>
          <cf_status_seamonkey230>---</cf_status_seamonkey230>
          <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_esr102>---</cf_tracking_thunderbird_esr102>
          <cf_tracking_thunderbird_55>---</cf_tracking_thunderbird_55>
          <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_thunderbird_57>---</cf_tracking_thunderbird_57>
          <cf_tracking_seamonkey234>---</cf_tracking_seamonkey234>
          <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_thunderbird_65>---</cf_status_thunderbird_65>
          <cf_status_seamonkey237>---</cf_status_seamonkey237>
          <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_seamonkey238>---</cf_tracking_seamonkey238>
          <cf_tracking_thunderbird_68>---</cf_tracking_thunderbird_68>
          <cf_status_thunderbird_68>---</cf_status_thunderbird_68>
          <cf_status_seamonkey238>---</cf_status_seamonkey238>
          <cf_status_thunderbird_69>---</cf_status_thunderbird_69>
          <cf_tracking_seamonkey239>---</cf_tracking_seamonkey239>
          <cf_tracking_thunderbird_69>---</cf_tracking_thunderbird_69>
          <cf_status_thunderbird_70>---</cf_status_thunderbird_70>
          <cf_status_seamonkey239>---</cf_status_seamonkey239>
          <cf_crash_signature></cf_crash_signature>
          <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_seamonkey241>---</cf_tracking_seamonkey241>
          <cf_tracking_thunderbird_71>---</cf_tracking_thunderbird_71>
          <cf_status_seamonkey241>---</cf_status_seamonkey241>
          <cf_status_thunderbird_72>---</cf_status_thunderbird_72>
          <cf_tracking_seamonkey242>---</cf_tracking_seamonkey242>
          <cf_tracking_thunderbird_72>---</cf_tracking_thunderbird_72>
          <cf_status_seamonkey242>---</cf_status_seamonkey242>
          <cf_status_thunderbird_73>---</cf_status_thunderbird_73>
          <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_tracking_thunderbird_74>---</cf_tracking_thunderbird_74>
          <cf_tracking_seamonkey244>---</cf_tracking_seamonkey244>
          <cf_status_thunderbird_75>---</cf_status_thunderbird_75>
          <cf_status_thunderbird_76>---</cf_status_thunderbird_76>
          <cf_tracking_thunderbird_75>---</cf_tracking_thunderbird_75>
          <cf_status_seamonkey244>---</cf_status_seamonkey244>
          <cf_tracking_thunderbird_76>---</cf_tracking_thunderbird_76>
          <cf_tracking_seamonkey245>---</cf_tracking_seamonkey245>
          <cf_status_thunderbird_77>---</cf_status_thunderbird_77>
          <cf_status_thunderbird_78>---</cf_status_thunderbird_78>
          <cf_tracking_thunderbird_77>---</cf_tracking_thunderbird_77>
          <cf_status_seamonkey245>---</cf_status_seamonkey245>
          <cf_status_thunderbird_79>---</cf_status_thunderbird_79>
          <cf_tracking_thunderbird_78>---</cf_tracking_thunderbird_78>
          <cf_tracking_seamonkey246>---</cf_tracking_seamonkey246>
          <cf_tracking_thunderbird_79>---</cf_tracking_thunderbird_79>
          <cf_status_thunderbird_80>---</cf_status_thunderbird_80>
          <cf_status_seamonkey246>---</cf_status_seamonkey246>
          <cf_tracking_thunderbird_80>---</cf_tracking_thunderbird_80>
          <cf_status_thunderbird_81>---</cf_status_thunderbird_81>
          <cf_tracking_seamonkey247>---</cf_tracking_seamonkey247>
          <cf_tracking_thunderbird_81>---</cf_tracking_thunderbird_81>
          <cf_status_seamonkey247>---</cf_status_seamonkey247>
          <cf_status_thunderbird_82>---</cf_status_thunderbird_82>
          <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_status_seamonkey249>---</cf_status_seamonkey249>
          <cf_status_thunderbird_88>---</cf_status_thunderbird_88>
          <cf_blocking_basecamp>---</cf_blocking_basecamp>
          <cf_tracking_thunderbird_88>---</cf_tracking_thunderbird_88>
          <cf_feature_b2g>---</cf_feature_b2g>
          <cf_tracking_seamonkey250>---</cf_tracking_seamonkey250>
          <cf_status_thunderbird_89>---</cf_status_thunderbird_89>
          <cf_tracking_thunderbird_89>---</cf_tracking_thunderbird_89>
          <cf_tracking_b2g>---</cf_tracking_b2g>
          <cf_ux_b2g>---</cf_ux_b2g>
          <cf_status_seamonkey250>---</cf_status_seamonkey250>
          <cf_status_thunderbird_90>---</cf_status_thunderbird_90>
          <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_thunderbird_92>---</cf_status_thunderbird_92>
          <cf_status_seamonkey251>---</cf_status_seamonkey251>
          <cf_tracking_thunderbird_92>---</cf_tracking_thunderbird_92>
          <cf_status_thunderbird_93>---</cf_status_thunderbird_93>
          <cf_tracking_seamonkey252>---</cf_tracking_seamonkey252>
          <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_tracking_seamonkey254>---</cf_tracking_seamonkey254>
          <cf_status_thunderbird_96>---</cf_status_thunderbird_96>
          <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_tracking_seamonkey255>---</cf_tracking_seamonkey255>
          <cf_status_thunderbird_98>---</cf_status_thunderbird_98>
          <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_seamonkey256>---</cf_status_seamonkey256>
          <cf_status_thunderbird_100>---</cf_status_thunderbird_100>
          <cf_tracking_thunderbird_100>---</cf_tracking_thunderbird_100>
          <cf_tracking_seamonkey256>---</cf_tracking_seamonkey256>
          <cf_status_thunderbird_101>---</cf_status_thunderbird_101>
          <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_tracking_seamonkey258>---</cf_tracking_seamonkey258>
          <cf_status_thunderbird_104>---</cf_status_thunderbird_104>
          <cf_tracking_thunderbird_104>---</cf_tracking_thunderbird_104>
          <cf_status_thunderbird_105>---</cf_status_thunderbird_105>
          <cf_status_seamonkey259>---</cf_status_seamonkey259>
          <cf_tracking_thunderbird_105>---</cf_tracking_thunderbird_105>
          <cf_tracking_thunderbird_esr115>---</cf_tracking_thunderbird_esr115>
          <cf_tracking_seamonkey259>---</cf_tracking_seamonkey259>
          <cf_status_thunderbird_106>---</cf_status_thunderbird_106>
          <cf_status_fxios_v1_0>---</cf_status_fxios_v1_0>
          <cf_tracking_thunderbird_106>---</cf_tracking_thunderbird_106>
          <cf_status_thunderbird_esr115>---</cf_status_thunderbird_esr115>
          <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_fxios_v4_0>---</cf_status_fxios_v4_0>
          <cf_status_seamonkey260>---</cf_status_seamonkey260>
          <cf_status_thunderbird_107>---</cf_status_thunderbird_107>
          <cf_tracking_thunderbird_esr128>---</cf_tracking_thunderbird_esr128>
          <cf_tracking_thunderbird_107>---</cf_tracking_thunderbird_107>
          <cf_status_thunderbird_esr128>---</cf_status_thunderbird_esr128>
          <cf_status_thunderbird_108>---</cf_status_thunderbird_108>
          <cf_tracking_thunderbird_esr140>---</cf_tracking_thunderbird_esr140>
          <cf_tracking_seamonkey260>---</cf_tracking_seamonkey260>
          <cf_status_fxios_v5_0>---</cf_status_fxios_v5_0>
          <cf_status_fxios_v5_1>---</cf_status_fxios_v5_1>
          <cf_status_thunderbird_esr140>---</cf_status_thunderbird_esr140>
          <cf_tracking_thunderbird_108>---</cf_tracking_thunderbird_108>
          <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_status_thunderbird_109>---</cf_status_thunderbird_109>
          <cf_tracking_thunderbird_esr153>---</cf_tracking_thunderbird_esr153>
          <cf_tracking_thunderbird_109>---</cf_tracking_thunderbird_109>
          <cf_status_thunderbird_esr153>---</cf_status_thunderbird_esr153>
          <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_status_fxios_v7_3>---</cf_status_fxios_v7_3>
          <cf_tracking_thunderbird_111>---</cf_tracking_thunderbird_111>
          <cf_status_thunderbird_112>---</cf_status_thunderbird_112>
          <cf_status_fxios_v7_4>---</cf_status_fxios_v7_4>
          <cf_tracking_thunderbird_112>---</cf_tracking_thunderbird_112>
          <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>2012-08-21 13:30:41</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_status_thunderbird_157>---</cf_status_thunderbird_157>
          <cf_tracking_thunderbird_157>---</cf_tracking_thunderbird_157>
          <cf_status_thunderbird_158>---</cf_status_thunderbird_158>
          <cf_tracking_thunderbird_158>---</cf_tracking_thunderbird_158>
          <cf_status_thunderbird_159>---</cf_status_thunderbird_159>
          <cf_tracking_thunderbird_159>---</cf_tracking_thunderbird_159>
          <cf_status_thunderbird_160>---</cf_status_thunderbird_160>
          <cf_tracking_thunderbird_160>---</cf_tracking_thunderbird_160>
          <cf_status_thunderbird_161>---</cf_status_thunderbird_161>
          <cf_tracking_thunderbird_161>---</cf_tracking_thunderbird_161>
          <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_tracking_firefox72>---</cf_tracking_firefox72>
          <cf_status_firefox72>---</cf_status_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_firefox158>---</cf_tracking_firefox158>
          <cf_status_firefox158>---</cf_status_firefox158>
          <cf_tracking_firefox159>---</cf_tracking_firefox159>
          <cf_status_firefox159>---</cf_status_firefox159>
          <cf_tracking_firefox160>---</cf_tracking_firefox160>
          <cf_status_firefox160>---</cf_status_firefox160>
          <cf_tracking_firefox161>---</cf_tracking_firefox161>
          <cf_status_firefox161>---</cf_status_firefox161>
          <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>2012-08-21 13:30:41</cf_last_resolved>
          
          <votes>22</votes>

      

      

      <flag name="in-testsuite"
          id="540252"
          type_id="37"
          status="+"
          setter="ian.melven"
    />

          <long_desc isprivate="0">
            <commentid>2883165</commentid>
            <who name="">nrlz</who>
            <bug_when>2006-06-14 22:07:08 -0700</bug_when>
            <thetext>User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4

IE has an attribute that can be specified on IFRAMEs that can lower the security zone of that iframe only. see: http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/security.asp
It can be used to restrict javascript and other dynamic behaviors of content in that iframes.

I suggest we implement something similar, which can be a big help for webmail providers as it can provide a fallback mechanism incase they fail to filter out all dynamic (malicious) content from emails.

The current approaches to filtering out such content are:
1. filtering out all unsafe tags and styles (difficult)
2. loading the (semi-filtered) content in an iframe from another domain (to trigger the natural cross-domain security protection)

With the iframe security attribute, we can have the browser restrict the content which is much more efficient and error-proof.

In order to remain standards compliant, perhaps such a feature should be triggered with javascript instead of with HTML markup.

Reproducible: Always</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>2883260</commentid>
            <who name="Jesse Ruderman">jruderman</who>
            <bug_when>2006-06-15 01:26:25 -0700</bug_when>
            <thetext>Sounds like a good idea.  Hixie, is there anything similar in W3C or WhatWG specs?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>2883287</commentid>
            <who name="Anne (:annevk)">annevk</who>
            <bug_when>2006-06-15 03:05:24 -0700</bug_when>
            <thetext>Triggering it with javascript would make it more standards compliant? :-O

FWIW, there is no such feature anywhere (yet).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>2885087</commentid>
            <who name="Hixie (not reading bugmail)">ian</who>
            <bug_when>2006-06-16 14:33:25 -0700</bug_when>
            <thetext>WHATWG has had several proposals for sandboxing ideas like this. I haven&apos;t looked at any in detail yet; Gerv might know more.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>3128597</commentid>
            <who name="Jesse Ruderman">jruderman</who>
            <bug_when>2007-03-06 17:26:48 -0800</bug_when>
            <thetext>*** Bug 372805 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>3130143</commentid>
            <who name="Ian Macfarlane">ian</who>
            <bug_when>2007-03-08 03:37:41 -0800</bug_when>
            <thetext>Preventing access to parent documents (parent, top, etc) would probably be sufficient for the large majority of use cases (throw a permission denied error to JavaScript trying to access this).

This isn&apos;t just useful for webmail providers, it&apos;s useful in a number of other cases, for example Yahoo! Images use it, and I&apos;m currently writing an internal company tool that would benefit greatly from this. I&apos;m sure there&apos;s tons of other use cases for embedding bits of other websites in a page.

I would dearly love to have this for Firefox 3.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>3130222</commentid>
            <who name="Gervase Markham [:gerv]">gerv</who>
            <bug_when>2007-03-08 06:35:42 -0800</bug_when>
            <thetext>See http://www.gerv.net/security/content-restrictions/, which allows you to make this sort of restriction.

Gerv
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>3485011</commentid>
            <who name="Nitin Gupta">chottan_mottan</who>
            <bug_when>2008-02-15 19:12:33 -0800</bug_when>
            <thetext>*** Bug 416574 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>3491436</commentid>
            <who name="Daniel Veditz [:dveditz]">dveditz</who>
            <bug_when>2008-02-20 11:01:11 -0800</bug_when>
            <thetext>We&apos;d probably only implement this if it got standardized in HTML5. Would it make more sense to simply copy IE for broader compatibility, or come up with a more useful (more flexible? more powerful?) set of restrictions but not compatible?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>3803855</commentid>
            <who name="Daniel Veditz [:dveditz]">dveditz</who>
            <bug_when>2008-10-03 13:36:32 -0700</bug_when>
            <thetext>HTML5 now has a &quot;sandbox&quot; attribute, different but the same kind of idea. Since HTML5 is on a standards track that&apos;s probably the more useful version of this idea, although it is by no means finalized.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>3803859</commentid>
            <who name="Daniel Veditz [:dveditz]">dveditz</who>
            <bug_when>2008-10-03 13:37:31 -0700</bug_when>
            <thetext>*** Bug 458143 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4452326</commentid>
            <who name="Jean-Yves Perrier [:teoli]">jypenator</who>
            <bug_when>2009-12-16 02:27:04 -0800</bug_when>
            <thetext>It looks like the HTML5 IFrame&apos;s sandbox attribute has been implemented in Webkit (WebKit@51577) and is available in the latest Chrome 4 beta.

One question: 
Should the title of this bug be updated to &quot;[HTML5] Implement IFRAME&apos;s sandbox attribute&quot; or should a new bug be filled?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4452895</commentid>
            <who name="Adam Barth">abarth-mozilla</who>
            <bug_when>2009-12-16 08:49:31 -0800</bug_when>
            <thetext>&gt; It looks like the HTML5 IFrame&apos;s sandbox attribute has been implemented in
&gt; Webkit (WebKit@51577) and is available in the latest Chrome 4 beta.

The @sandbox attribute is not available in the beta channel, but it is available in the dev channel, which will become Chrome 5.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5058451</commentid>
            <who name="Artur Adib">arturadib</who>
            <bug_when>2010-11-04 08:11:08 -0700</bug_when>
            <thetext>Because of its implementation in Chrome/Safari over the last several months, the HTML5 sandbox attribute is already getting a lot of attention from the community. Try Googling &quot;html5 sandbox&quot; to see how many articles are already dedicated to the topic.

Is Firefox en route to implementing HTML5&apos;s sandbox attribute any time soon?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5566688</commentid>
            <who name="Leman Bennett [Omega]">lh.bennett</who>
            <bug_when>2011-06-30 01:32:56 -0700</bug_when>
            <thetext>This has now shown up in IE10&apos;s Preview #2.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5803330</commentid>
            <who name="Xavier">xavier</who>
            <bug_when>2011-10-25 08:48:01 -0700</bug_when>
            <thetext>While the feature is documented here:
https://developer.mozilla.org/en/HTML/Element/iframe
it does not seem to work, or at least &quot;allow-top-navigation&quot; does not work, since its absence still allows an iframe to modify the top window location.

Is there any hope at all ?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5803363</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-10-25 08:55:58 -0700</bug_when>
            <thetext>(In reply to Xavier from comment #15)
&gt; While the feature is documented here:
&gt; https://developer.mozilla.org/en/HTML/Element/iframe
&gt; it does not seem to work, or at least &quot;allow-top-navigation&quot; does not work,
&gt; since its absence still allows an iframe to modify the top window location.
&gt; 
&gt; Is there any hope at all ?

i am (very slowly due to other tasks) working on this. there is no sandbox attribute support in Firefox currently. i hope to at least get some prototype/rough/experimental patches up to show possible implementation routes.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5847567</commentid>
              <attachid>574383</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-11-14 12:49:28 -0800</bug_when>
            <thetext>Created attachment 574383
WIP - experimental prototype v1

a Work In Progress patch - this is an experimental prototype implementing some very basic parts of the iframe sandbox. i&apos;m continuing to iterate on this patch, i&apos;m putting it up here in case others are interested and to possibly collect more feedback on the direction i&apos;m going. there are many parts of the spec still yet to be implemented.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5848306</commentid>
              <attachid>574480</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-11-14 17:02:53 -0800</bug_when>
            <thetext>Created attachment 574480
WIP - experimental prototype

now with less silly bugs !

the next steps are to figure out more of the attribute handling using nsDOMSettableTokenList and add parsing for some of the values, probably starting with allow-scripts and allow-same-domain</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5859793</commentid>
              <attachid>575603</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-11-18 16:52:32 -0800</bug_when>
            <thetext>Created attachment 575603
WIP - experimental prototype

this patch adds a possible implementation for allow-scripts and allow-same-origin. i&apos;m looking at allow-top-navigation at the moment and then planning on moving on to allow-forms. 

there are also many TODO&apos;s and questions in this patch still :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5859959</commentid>
              <attachid>575617</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-11-18 19:29:55 -0800</bug_when>
            <thetext>Created attachment 575617
WIP - experimental prototype

a possible implementation for &apos;allow-forms&apos;

still working on &apos;allow-top-navigation&apos; - and there are still many details to iron out after that</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5861310</commentid>
              <attachid>575617</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-11-20 08:46:36 -0800</bug_when>
            <thetext>Comment on attachment 575617
WIP - experimental prototype

this patch passes the browserscope.org iframe sandbox check fwiw :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5864384</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-11-21 17:56:02 -0800</bug_when>
            <thetext>Microsoft has a public test suite for HTML5 iframe sandbox at http://samples.msdn.microsoft.com/ietestcenter/#html5Sandbox

the current prototype patch passes ~50% of the tests there (some of the failures are due to no allow-top-navigation yet, no cookie/localStorage restrictions, no video autoplay restriction yet, etc as a high level summary of what&apos;s still to be done) 

as part of the work on implementing iframe sandbox, we will need mochitests of our own in the tree to test the functionality as outlined in the HTML5 spec. i will probably end up working on making this happen also.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5886961</commentid>
              <attachid>578433</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-12-01 16:08:53 -0800</bug_when>
            <thetext>Created attachment 578433
WIP - experimental prototype

adds a possible implementation of blocking window.open, &lt;a target = &quot;_blank&quot;&gt; and showModalDialog()</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5890153</commentid>
              <attachid>578799</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-12-02 18:42:22 -0800</bug_when>
            <thetext>Created attachment 578799
WIP - experimental prototype

a possible implementation of allow-top-navigation that attempts to also implement the navigation rules 

this patch passes 20 of the 30 tests MS test suite now. i need to look into why the XHR tests pass - i assume it&apos;s because we block XHR for a null principal, which a sandboxed iframe has and we let the iframe have its natural principal when allow-same-domain is specified. 

the MS video autoplay tests don&apos;t work in Firefox since they use MP4/H264 format video which we don&apos;t support. the MS autofocus test passes in current Firefox, so i need to look into that more as well. i also would like to have some more testing around frame navigation that the tests in the MS suite (which this current patch passes). 

i think i&apos;m going start working on the test suite at this point due to the above.

it would be awesome if some people could take a look at the patch and tell me if the code is sane at all. there&apos;s a fair number of TODO&apos;s in it and a lot of questions around what to do if things fail.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5890713</commentid>
              <attachid>578799</attachid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2011-12-03 09:05:17 -0800</bug_when>
            <thetext>Comment on attachment 578799
WIP - experimental prototype

Review of attachment 578799:
-----------------------------------------------------------------

Drive by comments.  These should definitely not be taken as exhaustive.

Looks like this doesn&apos;t attempt to cover plugins?  Also looks like this doesn&apos;t attempt to deal with scripts?  I expect those are going to be a significant amount of work.

We should detect the situation called out in the first warning (and maybe the second too?) at http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox and send a warning to the error console.

Reading the spec and the proto-patch here, I think storing the sandbox flags on both the docshell and the document is going to be a source of great pain.  I think you&apos;re going to want one canonical set of sandbox flags (on the outer window, perhaps?).

Also, you really should request f? from a specific person.  I gave an f-, but at this stage that is to be expected.

Finally, this is going to need lots of tests ...

::: content/base/public/nsContentUtils.h
@@ +1838,5 @@
&gt;    static bool SetUpChannelOwner(nsIPrincipal* aLoadingPrincipal,
&gt;                                  nsIChannel* aChannel,
&gt;                                  nsIURI* aURI,
&gt; +                                bool aSetUpForAboutBlank,
&gt; +                                bool aForceOwner);

You could make aForceOwner default to false here.

@@ +1864,5 @@
&gt; +   *
&gt; +   * @param aAttribute 	the value of the sandbox attribute as an nsIDOMDOMSettableTokenList
&gt; +   * @return 			the set of flags
&gt; +   */
&gt; +  static PRUint32 ParseSandboxAttributeToFlags(nsIDOMDOMSettableTokenList * aAttribute);

80 character lines please.

::: content/base/public/nsIDocument.h
@@ +462,5 @@
&gt;    }
&gt;    
&gt;    /**
&gt; +   * Set the sandbox flags for this document. This should only happen at 
&gt; +   * at document load, the flags are immutable after being set at load time.

Can you assert that this is being called during load? (by checking for READYSTATE_LOADING or something?)

@@ +471,5 @@
&gt; +    mSandboxFlags = aSandboxFlags;
&gt; +  }
&gt; +  
&gt; +  /** 
&gt; +   * Get the sandox flags for this document

sandbox

@@ +1786,5 @@
&gt;  
&gt; +  // The sandbox flags on the document. These reflect the value of the sandbox attribute of the 
&gt; +  // associated IFRAME or CSP-protectable content, if existent. These are set at load time and
&gt; +  //are immutable - see nsDocShell.idl for the possible flags   
&gt; +  PRUint32 mSandboxFlags;

nsIDocument needs an IID bump for this.

::: content/base/src/nsContentUtils.cpp
@@ +699,5 @@
&gt; + * @param aAttribute    the value of the sandbox attribute as an nsIDOMDOMSettableTokenList
&gt; + * @return 			    the set of flags
&gt; + */
&gt; +PRUint32
&gt; +nsContentUtils::ParseSandboxAttributeToFlags(nsIDOMDOMSettableTokenList * aAttribute)

You should rewrite this function to use nsCharSeparatedTokenizer&lt;nsContentUtils::IsHTMLWhitespace&gt;.  As it is it&apos;ll match things like &quot;allow-scriptsallow-same-origin&quot; which are not allowed per spec.

I&apos;d give extra points for putting a

typedef nsCharSeparatedTokenizer&lt;nsContentUtils::IsHTMLWhitespace&gt; HTMLSplitOnSpacesTokenizer (or something)

in nsContentUtils.h and changing the existing users in the tree.

@@ +702,5 @@
&gt; +PRUint32
&gt; +nsContentUtils::ParseSandboxAttributeToFlags(nsIDOMDOMSettableTokenList * aAttribute)
&gt; +{
&gt; +  // TODO: how to handle errors in this function ? if we&apos;re here, something has a sandbox
&gt; +  // attribute set and expects content to be sandboxed... perhaps consider failing closed ??

You can do this one of three ways:

1) Return an explicit nsresult and pass the flags back in a PRUint32 outparam.
2) Return a clearly bogus value for failure (e.g. -1)
3) Fail closed (-1 effectively does this if somebody forgets the check).

What in here is fallible though?  Simple tokenization and comparison should be infallible, I think.

@@ +711,5 @@
&gt; +  out |= nsIDocShell::SANDBOX_FLAGS_SANDBOXED;
&gt; +  
&gt; +  bool allowed = false;
&gt; +  
&gt; +  // TODO: should i try to use atoms even though Contains wants a string ? 

Yes, you should use the atoms and do &apos;if (atom-&gt;Equals(token)) ...&apos;

::: content/base/src/nsDocument.cpp
@@ +2394,5 @@
&gt; +  nsCOMPtr&lt;nsIDocShell&gt; docShell = do_QueryInterface(aContainer);
&gt; +  
&gt; +  if (docShell) {
&gt; +     nsresult rv = docShell-&gt;GetSandboxFlags(&amp;mSandboxFlags);
&gt; +	 NS_ENSURE_SUCCESS(rv, rv);

ugh tabs

::: content/base/src/nsFrameLoader.cpp
@@ +506,5 @@
&gt; +      // and it may not be - maybe fail closed (all restrictions) ??? 
&gt; +    }
&gt; +     
&gt; +    if (parentSandboxFlags) { 
&gt; +      // do the intersection with the current flags in the docshell!

I didn&apos;t look at this too closely, I assume that permissions can only be removed, not added, for children?

e.g. if I have:

- Top Level Doc (A)
  - Sandboxed Iframe (B)
     - Sandboxed Iframe (C)

And B has permissions 1 and 2 there&apos;s no way for C to have permission 3, right?

::: content/html/content/src/nsHTMLFormElement.cpp
@@ +691,5 @@
&gt; +      PRUint32 sandboxFlags = doc-&gt;GetSandboxFlags();
&gt; +      
&gt; +      if (!(sandboxFlags &amp; nsIDocShell::SANDBOX_FLAGS_SANDBOXED) || 
&gt; +          (sandboxFlags &amp; nsIDocShell::SANDBOX_FLAGS_ALLOW_FORM_SUBMIT))
&gt; +        rv = DoSubmit(aEvent);

Does this check avoid doing form validation and the like when sandboxed? (I think it does).  You&apos;ll want tests for that.

::: content/html/content/src/nsHTMLIFrameElement.cpp
@@ +306,5 @@
&gt; +                                  bool aNotify)
&gt; +{
&gt; +  if (aName == nsGkAtoms::sandbox &amp;&amp; aNameSpaceID == kNameSpaceID_None) {
&gt; +    // parse the new value of the sandbox attribute, and if we have a docshell
&gt; +    // set its sandbox flags appropriately

When is a sandbox attribute set supposed to take effect?

&quot;While the sandbox attribute is specified, the iframe element&apos;s nested browsing context must have the flags given in the following list set. In addition, any browsing contexts nested within an iframe, either directly or indirectly, must have all the flags set on them as were set on the iframe&apos;s Document&apos;s browsing context when the iframe&apos;s Document was created.&quot;

So it sounds like a sandbox attr change should only take effect for the next document in the iframe.  Setting them on the docshell immediately means they&apos;ll take affect for future subloads even on the same document, right?  You&apos;ll want either tests to show that this isn&apos;t the case or to change the code so that it isn&apos;t (and then tests :-)).

::: docshell/base/nsDocShell.cpp
@@ +755,5 @@
&gt;      mIsBeingDestroyed(false),
&gt;      mIsExecutingOnLoadHandler(false),
&gt;      mIsPrintingOrPP(false),
&gt; +    mSavingOldViewer(false),
&gt; +    mSandboxFlags(0)

Please order intializers in the same order variables are declared (doing otherwise will give warnings on gcc).

@@ +2887,5 @@
&gt; +            // If our document is sandboxed, we need to do some extra checks
&gt; +            PRUint32 sandboxFlags = 0;
&gt; +           
&gt; +            if (mContentViewer) {
&gt; +                nsCOMPtr&lt;nsIDocument&gt; doc = mContentViewer-&gt;GetDocument();

No need to use an nsCOMPtr here.  nsIDocument* doc is fine.

@@ +2944,5 @@
&gt; +                        parentAsItem = tmp;
&gt; +                    }
&gt; +                }
&gt; +            } 
&gt; +            

Somebody who understand docshell (read bz, smaug) should look at this stuff.  In my five minutes of looking at docshell it looks like this logic might fit better in CanAccessItem.

@@ +4996,5 @@
&gt; +
&gt; +NS_IMETHODIMP
&gt; +nsDocShell::GetSandboxFlags(PRUint32  *aSandboxFlags)
&gt; +{
&gt; +  NS_ENSURE_ARG_POINTER(aSandboxFlags);

Usually we don&apos;t bother with this.  If you pass in null, you crash.

@@ +8201,5 @@
&gt; +            PRUint32 sandboxFlags = 0;
&gt; +            sandboxFlags = doc-&gt;GetSandboxFlags();
&gt; +            if (sandboxFlags &amp; nsIDocShell::SANDBOX_FLAGS_SANDBOXED) {
&gt; +              return NS_ERROR_FAILURE;
&gt; +            }

Same comment as above about somebody who knows docshell looking at this.

@@ +8996,5 @@
&gt; +      nsContentUtils::SetUpChannelOwner(ownerPrincipal, channel, aURI, true, true);
&gt; +    }
&gt; +    else {
&gt; +      nsContentUtils::SetUpChannelOwner(ownerPrincipal, channel, aURI, true, false);
&gt; +    }

I think this would be easier to follow with one callsite whose final parameter varies.

::: docshell/base/nsIDocShell.idl
@@ +561,5 @@
&gt; +   * They are only used when loading new content, sandbox flags are also immutably set on the document
&gt; +   * when it is loaded. The sandbox flags of a document depend on the sandbox flags on its docshell
&gt; +   * and of its parent document, if any. 
&gt; +   */   
&gt; +  attribute unsigned long sandboxFlags;

nsIDocShell needs an IID bump for this.

@@ +576,5 @@
&gt; +   
&gt; +  /**
&gt; +   * The content is sandboxed but allowed to have its natural domain. 
&gt; +   */
&gt; +  const unsigned long SANDBOX_FLAGS_ALLOW_SAME_DOMAIN = 0x4;

please make this ALLOW_SAME_ORIGIN so that the terminology is consistent.

::: dom/interfaces/html/nsIDOMHTMLIFrameElement.idl
@@ +68,5 @@
&gt;    readonly attribute nsIDOMDocument   contentDocument;
&gt;    readonly attribute nsIDOMWindow     contentWindow;
&gt; +  
&gt; +  // HTML5 sandbox attribute
&gt; +  readonly attribute nsIDOMDOMSettableTokenList sandbox;

Needs an IID bump.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5890714</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2011-12-03 09:08:13 -0800</bug_when>
            <thetext>&gt; 3) Fail closed (-1 effectively does this if somebody forgets the check).

Actually, -1 does not do this (it does the opposite!).  I had the polarity of the flags wrong.  That said, I think after you rewrite this function nothing it in will be fallible and you won&apos;t need to care.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5890786</commentid>
              <attachid>578799</attachid>
            <who name=":Ms2ger (he/him; ⌚ UTC+1/+2)">Ms2ger</who>
            <bug_when>2011-12-03 10:21:27 -0800</bug_when>
            <thetext>Comment on attachment 578799
WIP - experimental prototype

&gt;--- a/content/base/public/nsIDocument.h
&gt;+++ b/content/base/public/nsIDocument.h
&gt;   /**
&gt;+   * Set the sandbox flags for this document. This should only happen at 
&gt;+   * at document load, the flags are immutable after being set at load time.
&gt;+   * @ see nsDocShell.idl for the possible flags

nsDocShell.idl doesn&apos;t exist. (Three times or so.)

&gt;--- a/content/base/src/nsFrameLoader.cpp
&gt;+++ b/content/base/src/nsFrameLoader.cpp
&gt;+  nsCOMPtr&lt;nsIDocShellTreeItem&gt; curDocShellItem(do_QueryInterface(mDocShell));

&apos;nsCOMPtr&lt;nsIDocShellTreeItem&gt; curDocShellItem = do_QueryInterface(mDocShell);&apos;

&gt;+  // is this an &lt;iframe&gt; with a sandbox attribute or a frame whose parent
&gt;+  // is sandboxed ?  
&gt;+  if (mOwnerContent-&gt;IsHTML(nsGkAtoms::iframe) &amp;&amp; 
&gt;+      (parentSandboxFlags || mOwnerContent-&gt;GetAttr(kNameSpaceID_None, nsGkAtoms::sandbox, sandboxAttr))) {

Instead of this, add a nsHTMLIFrameElement* nsHTMLIFrameElement::FromContent(nsIContent*) and expose a method on nsHTMLIFrameElement that returns the flags, and move the code you added to nsContentUtils there. Also use it in nsHTMLIFrameElement::AfterSetAttr.

&gt;+    PRUint32 sandboxFlags = 0;
&gt;+  
&gt;+    nsCOMPtr&lt;nsIDOMHTMLIFrameElement&gt; iframe = do_QueryInterface(mOwnerContent);
&gt;+  
&gt;+    if (iframe) {
&gt;+      nsCOMPtr&lt;nsIDOMDOMSettableTokenList&gt; sandbox;
&gt;+    
&gt;+      nsresult result = iframe-&gt;GetSandbox(getter_AddRefs(sandbox));
&gt;+      // TODO : what to do if this fails ? (see below also) 
&gt;+    
&gt;+      sandboxFlags = nsContentUtils::ParseSandboxAttributeToFlags(sandbox);
&gt;+      // TODO: what to do if this fails ? the content was intended to be sandboxed
&gt;+      // and it may not be - maybe fail closed (all restrictions) ??? 
&gt;+    }
&gt;+     
&gt;+    if (parentSandboxFlags) { 
&gt;+      // do the intersection with the current flags in the docshell!

Doesn&apos;t sandboxFlags &amp;= parentSandboxFlags do the right thing, and if not, why not?

&gt;+  }
&gt;+
&gt;+  else { 

} else {

&gt;--- a/content/html/content/src/nsHTMLIFrameElement.cpp
&gt;+++ b/content/html/content/src/nsHTMLIFrameElement.cpp
&gt;+  virtual nsresult AfterSetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
&gt;+                                  const nsAString* aValue,
&gt;+                                  bool aNotify);

Indentation

&gt;--- a/docshell/base/nsDocShell.cpp
&gt;+++ b/docshell/base/nsDocShell.cpp
&gt;+    // If the content is sandboxed, force the passed in owner (which should be 
&gt;+    // a null principal) to be set on the channel, UNLESS the sandbox allow-same-domain flag is also
&gt;+    // set. In that case, allow the content to asssume its &quot;natural domain&quot; as it
&gt;+    // normally would. 
&gt;+    if ((mSandboxFlags &amp; SANDBOX_FLAGS_SANDBOXED) &amp;&amp; 
&gt;+        (mSandboxFlags &amp; SANDBOX_FLAGS_ALLOW_SAME_DOMAIN) != SANDBOX_FLAGS_ALLOW_SAME_DOMAIN) {
&gt;+      nsContentUtils::SetUpChannelOwner(ownerPrincipal, channel, aURI, true, true);
&gt;+    }
&gt;+    else {
&gt;+      nsContentUtils::SetUpChannelOwner(ownerPrincipal, channel, aURI, true, false);
&gt;+    }

nsContentUtils::SetUpChannelOwner(ownerPrincipal, channel, aURI, true,
                                  (mSandboxFlags &amp; SANDBOX_FLAGS_SANDBOXED) &amp;&amp; 
                                  (mSandboxFlags &amp; SANDBOX_FLAGS_ALLOW_SAME_DOMAIN) != SANDBOX_FLAGS_ALLOW_SAME_DOMAIN);

&gt;--- a/dom/interfaces/html/nsIDOMHTMLIFrameElement.idl
&gt;+++ b/dom/interfaces/html/nsIDOMHTMLIFrameElement.idl
&gt;-
&gt;+  
&gt;+  // HTML5 sandbox attribute

This interface is specified in HTML, so no need for the comment. Also, leave the two empty lines between the HTML-specified members and the Mozilla extensions.

Also check the entire patch for tabs and trailing whitespace, and make sure the comments you add are full sentences (including capital letters and full stops).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5890823</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-12-03 10:51:03 -0800</bug_when>
            <thetext>Thanks very much for the feedback khuey and Ms2ger !

Adding a note here that on try this crashed in a mochitest : 

TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway2.js | Exited with code 1 during test run
PROCESS-CRASH | chrome://mochitests/content/browser/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway2.js | application crashed (minidump found)
Thread 0 (crashed)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5896006</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-12-06 16:01:49 -0800</bug_when>
            <thetext>(In reply to Kyle Huey [:khuey] (khuey@mozilla.com) from comment #25)
&gt; Comment on attachment 578799 [diff] [details] [review]
&gt; WIP - experimental prototype
&gt; 
&gt; Review of attachment 578799 [diff] [details] [review]:
&gt; -----------------------------------------------------------------
&gt; 
&gt; Drive by comments.  These should definitely not be taken as exhaustive.
&gt; 
&gt; Looks like this doesn&apos;t attempt to cover plugins?  Also looks like this
&gt; doesn&apos;t attempt to deal with scripts?  I expect those are going to be a
&gt; significant amount of work.

Plugins and scripts are both handled by this patch. The frame loader code does :
+      if (!(sandboxFlags &amp; nsIDocShell::SANDBOX_FLAGS_ALLOW_SCRIPTS)) {
+        mDocShell-&gt;SetAllowJavascript(false);
+      }
+    
+      // _always_ disallow plugins when sandboxed
+      mDocShell-&gt;SetAllowPlugins(false);

&gt; We should detect the situation called out in the first warning (and maybe
&gt; the second too?) at
&gt; http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-
&gt; element.html#attr-iframe-sandbox and send a warning to the error console.

This sounds really good to me. 
 
&gt; Reading the spec and the proto-patch here, I think storing the sandbox flags
&gt; on both the docshell and the document is going to be a source of great pain.
&gt; I think you&apos;re going to want one canonical set of sandbox flags (on the
&gt; outer window, perhaps?).

Yeah, i discussed the docshell/document split with bz initially - i need to go back and reread those emails. We also use the flags on the document when doing checks. We may not need to store them on the docshell at all ? It seems like it would be better to just read the current value of the attribute when the load happens and use that as the fixed set of flags.  

&gt; Also, you really should request f? from a specific person.  I gave an f-,
&gt; but at this stage that is to be expected.

Right. I was going to ping bz, sicking and smaug (those are the folks i have been emailing with discussing this work) to see who were good folks to ask specifically for feedback - i _really_ appreciate you giving drive by feedback before i got to that though ! :)
 
&gt; Finally, this is going to need lots of tests ...

I wholeheartedly agree - a test suite is needed for this to land, bz also suggested submitting our tests back to the W3C as well. 

&gt; ::: content/base/public/nsContentUtils.h
&gt; @@ +1838,5 @@
&gt; &gt;    static bool SetUpChannelOwner(nsIPrincipal* aLoadingPrincipal,
&gt; &gt;                                  nsIChannel* aChannel,
&gt; &gt;                                  nsIURI* aURI,
&gt; &gt; +                                bool aSetUpForAboutBlank,
&gt; &gt; +                                bool aForceOwner);
&gt; 
&gt; You could make aForceOwner default to false here.

will do.

&gt; @@ +1864,5 @@
&gt; &gt; +   *
&gt; &gt; +   * @param aAttribute 	the value of the sandbox attribute as an nsIDOMDOMSettableTokenList
&gt; &gt; +   * @return 			the set of flags
&gt; &gt; +   */
&gt; &gt; +  static PRUint32 ParseSandboxAttributeToFlags(nsIDOMDOMSettableTokenList * aAttribute);
&gt; 
&gt; 80 character lines please.

will fix.

&gt; ::: content/base/public/nsIDocument.h
&gt; @@ +462,5 @@
&gt; &gt;    }
&gt; &gt;    
&gt; &gt;    /**
&gt; &gt; +   * Set the sandbox flags for this document. This should only happen at 
&gt; &gt; +   * at document load, the flags are immutable after being set at load time.
&gt; 
&gt; Can you assert that this is being called during load? (by checking for
&gt; READYSTATE_LOADING or something?)

good idea - i&apos;ll look into this.
 
&gt; @@ +471,5 @@
&gt; &gt; +    mSandboxFlags = aSandboxFlags;
&gt; &gt; +  }
&gt; &gt; +  
&gt; &gt; +  /** 
&gt; &gt; +   * Get the sandox flags for this document
&gt; 
&gt; sandbox

will fix.

&gt; @@ +1786,5 @@
&gt; &gt;  
&gt; &gt; +  // The sandbox flags on the document. These reflect the value of the sandbox attribute of the 
&gt; &gt; +  // associated IFRAME or CSP-protectable content, if existent. These are set at load time and
&gt; &gt; +  //are immutable - see nsDocShell.idl for the possible flags   
&gt; &gt; +  PRUint32 mSandboxFlags;
&gt; 
&gt; nsIDocument needs an IID bump for this.

thanks, will fix.

&gt; ::: content/base/src/nsContentUtils.cpp
&gt; @@ +699,5 @@
&gt; &gt; + * @param aAttribute    the value of the sandbox attribute as an nsIDOMDOMSettableTokenList
&gt; &gt; + * @return 			    the set of flags
&gt; &gt; + */
&gt; &gt; +PRUint32
&gt; &gt; +nsContentUtils::ParseSandboxAttributeToFlags(nsIDOMDOMSettableTokenList * aAttribute)
&gt; 
&gt; You should rewrite this function to use
&gt; nsCharSeparatedTokenizer&lt;nsContentUtils::IsHTMLWhitespace&gt;.  As it is it&apos;ll
&gt; match things like &quot;allow-scriptsallow-same-origin&quot; which are not allowed per
&gt; spec.
&gt; 
&gt; I&apos;d give extra points for putting a
&gt; 
&gt; typedef nsCharSeparatedTokenizer&lt;nsContentUtils::IsHTMLWhitespace&gt;
&gt; HTMLSplitOnSpacesTokenizer (or something)
&gt; 
&gt; in nsContentUtils.h and changing the existing users in the tree.

yeah, this patch fails the MS test on whitespace etc. so i knew there were some issues here - thanks for the suggestion. i&apos;m not opposed to doing the HTMLSplitOnSpacesTokenizer approach here, i could split off the work to change existing users and add the typedef as a separate blocking bug and knock that out first.

&gt; @@ +702,5 @@
&gt; &gt; +PRUint32
&gt; &gt; +nsContentUtils::ParseSandboxAttributeToFlags(nsIDOMDOMSettableTokenList * aAttribute)
&gt; &gt; +{
&gt; &gt; +  // TODO: how to handle errors in this function ? if we&apos;re here, something has a sandbox
&gt; &gt; +  // attribute set and expects content to be sandboxed... perhaps consider failing closed ??
&gt; 
&gt; You can do this one of three ways:
&gt; 
&gt; 1) Return an explicit nsresult and pass the flags back in a PRUint32
&gt; outparam.
&gt; 2) Return a clearly bogus value for failure (e.g. -1)
&gt; 3) Fail closed (-1 effectively does this if somebody forgets the check).
&gt; 
&gt; What in here is fallible though?  Simple tokenization and comparison should
&gt; be infallible, I think.

yeah - i will look at that code to verify if it can fail when i make the change above.

&gt; @@ +711,5 @@
&gt; &gt; +  out |= nsIDocShell::SANDBOX_FLAGS_SANDBOXED;
&gt; &gt; +  
&gt; &gt; +  bool allowed = false;
&gt; &gt; +  
&gt; &gt; +  // TODO: should i try to use atoms even though Contains wants a string ? 
&gt; 
&gt; Yes, you should use the atoms and do &apos;if (atom-&gt;Equals(token)) ...&apos;

will do.

&gt; ::: content/base/src/nsDocument.cpp
&gt; @@ +2394,5 @@
&gt; &gt; +  nsCOMPtr&lt;nsIDocShell&gt; docShell = do_QueryInterface(aContainer);
&gt; &gt; +  
&gt; &gt; +  if (docShell) {
&gt; &gt; +     nsresult rv = docShell-&gt;GetSandboxFlags(&amp;mSandboxFlags);
&gt; &gt; +	 NS_ENSURE_SUCCESS(rv, rv);
&gt; 
&gt; ugh tabs

sorry - i was mainly wanting to know if the approach was sane, apologies for the formatting/tabs/whitespace stuff, i knew that needed cleaning up. 

&gt; ::: content/base/src/nsFrameLoader.cpp
&gt; @@ +506,5 @@
&gt; &gt; +      // and it may not be - maybe fail closed (all restrictions) ??? 
&gt; &gt; +    }
&gt; &gt; +     
&gt; &gt; +    if (parentSandboxFlags) { 
&gt; &gt; +      // do the intersection with the current flags in the docshell!
&gt; 
&gt; I didn&apos;t look at this too closely, I assume that permissions can only be
&gt; removed, not added, for children?
&gt; 
&gt; e.g. if I have:
&gt; 
&gt; - Top Level Doc (A)
&gt;   - Sandboxed Iframe (B)
&gt;      - Sandboxed Iframe (C)
&gt; 
&gt; And B has permissions 1 and 2 there&apos;s no way for C to have permission 3,
&gt; right?

yes - permissions can only be tightened/removed, never added/loosened. ms2ger commented on this below, i know there&apos;s a bug in the existing patch with inheritance and i think ms2ger&apos;s suggestion is the right one after thinking it over for a bit. 

&gt; ::: content/html/content/src/nsHTMLFormElement.cpp
&gt; @@ +691,5 @@
&gt; &gt; +      PRUint32 sandboxFlags = doc-&gt;GetSandboxFlags();
&gt; &gt; +      
&gt; &gt; +      if (!(sandboxFlags &amp; nsIDocShell::SANDBOX_FLAGS_SANDBOXED) || 
&gt; &gt; +          (sandboxFlags &amp; nsIDocShell::SANDBOX_FLAGS_ALLOW_FORM_SUBMIT))
&gt; &gt; +        rv = DoSubmit(aEvent);
&gt; 
&gt; Does this check avoid doing form validation and the like when sandboxed? (I
&gt; think it does).  You&apos;ll want tests for that.

i think it does too - but yes, this should be a test in the suite. Thanks. 

&gt; ::: content/html/content/src/nsHTMLIFrameElement.cpp
&gt; @@ +306,5 @@
&gt; &gt; +                                  bool aNotify)
&gt; &gt; +{
&gt; &gt; +  if (aName == nsGkAtoms::sandbox &amp;&amp; aNameSpaceID == kNameSpaceID_None) {
&gt; &gt; +    // parse the new value of the sandbox attribute, and if we have a docshell
&gt; &gt; +    // set its sandbox flags appropriately
&gt; 
&gt; When is a sandbox attribute set supposed to take effect?
&gt; 
&gt; &quot;While the sandbox attribute is specified, the iframe element&apos;s nested
&gt; browsing context must have the flags given in the following list set. In
&gt; addition, any browsing contexts nested within an iframe, either directly or
&gt; indirectly, must have all the flags set on them as were set on the iframe&apos;s
&gt; Document&apos;s browsing context when the iframe&apos;s Document was created.&quot;
&gt; 
&gt; So it sounds like a sandbox attr change should only take effect for the next
&gt; document in the iframe.  Setting them on the docshell immediately means
&gt; they&apos;ll take affect for future subloads even on the same document, right? 
&gt; You&apos;ll want either tests to show that this isn&apos;t the case or to change the
&gt; code so that it isn&apos;t (and then tests :-)).

yeah, that&apos;s my reading of the spec - an attr change only takes effect when the next document is loaded in the iframe. Future subloads are an important case to point out here, thanks - i believe that they should be based on the flags on the document, NOT the docshell. And yes, this needs tests around it for sure !

&gt; ::: docshell/base/nsDocShell.cpp
&gt; @@ +755,5 @@
&gt; &gt;      mIsBeingDestroyed(false),
&gt; &gt;      mIsExecutingOnLoadHandler(false),
&gt; &gt;      mIsPrintingOrPP(false),
&gt; &gt; +    mSavingOldViewer(false),
&gt; &gt; +    mSandboxFlags(0)
&gt; 
&gt; Please order intializers in the same order variables are declared (doing
&gt; otherwise will give warnings on gcc).

will do.

&gt; @@ +2887,5 @@
&gt; &gt; +            // If our document is sandboxed, we need to do some extra checks
&gt; &gt; +            PRUint32 sandboxFlags = 0;
&gt; &gt; +           
&gt; &gt; +            if (mContentViewer) {
&gt; &gt; +                nsCOMPtr&lt;nsIDocument&gt; doc = mContentViewer-&gt;GetDocument();
&gt; 
&gt; No need to use an nsCOMPtr here.  nsIDocument* doc is fine.

will change.
 
&gt; @@ +2944,5 @@
&gt; &gt; +                        parentAsItem = tmp;
&gt; &gt; +                    }
&gt; &gt; +                }
&gt; &gt; +            } 
&gt; &gt; +            
&gt; 
&gt; Somebody who understand docshell (read bz, smaug) should look at this stuff.
&gt; In my five minutes of looking at docshell it looks like this logic might fit
&gt; better in CanAccessItem.

i discussed this over email with bz and asked about putting this in CanAccessItem and in the end, it was decided that it shouldn&apos;t. 

&gt; @@ +4996,5 @@
&gt; &gt; +
&gt; &gt; +NS_IMETHODIMP
&gt; &gt; +nsDocShell::GetSandboxFlags(PRUint32  *aSandboxFlags)
&gt; &gt; +{
&gt; &gt; +  NS_ENSURE_ARG_POINTER(aSandboxFlags);
&gt; 
&gt; Usually we don&apos;t bother with this.  If you pass in null, you crash.

heh, ok, i&apos;ll drop it for consistency. 

&gt; @@ +8201,5 @@
&gt; &gt; +            PRUint32 sandboxFlags = 0;
&gt; &gt; +            sandboxFlags = doc-&gt;GetSandboxFlags();
&gt; &gt; +            if (sandboxFlags &amp; nsIDocShell::SANDBOX_FLAGS_SANDBOXED) {
&gt; &gt; +              return NS_ERROR_FAILURE;
&gt; &gt; +            }
&gt; 
&gt; Same comment as above about somebody who knows docshell looking at this.

thanks - i&apos;ll ping one of the folks you mentioned on this part.

&gt; @@ +8996,5 @@
&gt; &gt; +      nsContentUtils::SetUpChannelOwner(ownerPrincipal, channel, aURI, true, true);
&gt; &gt; +    }
&gt; &gt; +    else {
&gt; &gt; +      nsContentUtils::SetUpChannelOwner(ownerPrincipal, channel, aURI, true, false);
&gt; &gt; +    }
&gt; 
&gt; I think this would be easier to follow with one callsite whose final
&gt; parameter varies.

yeah, ms2ger has a good suggestion below here i&apos;m going to take.

&gt; ::: docshell/base/nsIDocShell.idl
&gt; @@ +561,5 @@
&gt; &gt; +   * They are only used when loading new content, sandbox flags are also immutably set on the document
&gt; &gt; +   * when it is loaded. The sandbox flags of a document depend on the sandbox flags on its docshell
&gt; &gt; +   * and of its parent document, if any. 
&gt; &gt; +   */   
&gt; &gt; +  attribute unsigned long sandboxFlags;
&gt; 
&gt; nsIDocShell needs an IID bump for this.

thanks, will do.

&gt; @@ +576,5 @@
&gt; &gt; +   
&gt; &gt; +  /**
&gt; &gt; +   * The content is sandboxed but allowed to have its natural domain. 
&gt; &gt; +   */
&gt; &gt; +  const unsigned long SANDBOX_FLAGS_ALLOW_SAME_DOMAIN = 0x4;
&gt; 
&gt; please make this ALLOW_SAME_ORIGIN so that the terminology is consistent.

will do.

&gt; ::: dom/interfaces/html/nsIDOMHTMLIFrameElement.idl
&gt; @@ +68,5 @@
&gt; &gt;    readonly attribute nsIDOMDocument   contentDocument;
&gt; &gt;    readonly attribute nsIDOMWindow     contentWindow;
&gt; &gt; +  
&gt; &gt; +  // HTML5 sandbox attribute
&gt; &gt; +  readonly attribute nsIDOMDOMSettableTokenList sandbox;
&gt; 
&gt; Needs an IID bump.

thanks, will do.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5896038</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-12-06 16:11:10 -0800</bug_when>
            <thetext>(In reply to Ms2ger from comment #27)
&gt; Comment on attachment 578799 [diff] [details] [review]
&gt; WIP - experimental prototype

Again, thanks very much for jumping on this patch and giving me feedback, it&apos;s greatly appreciated :)
 
&gt; &gt;--- a/content/base/public/nsIDocument.h
&gt; &gt;+++ b/content/base/public/nsIDocument.h
&gt; &gt;   /**
&gt; &gt;+   * Set the sandbox flags for this document. This should only happen at 
&gt; &gt;+   * at document load, the flags are immutable after being set at load time.
&gt; &gt;+   * @ see nsDocShell.idl for the possible flags
&gt; 
&gt; nsDocShell.idl doesn&apos;t exist. (Three times or so.)

oops, sorry, will fix.

&gt; &gt;--- a/content/base/src/nsFrameLoader.cpp
&gt; &gt;+++ b/content/base/src/nsFrameLoader.cpp
&gt; &gt;+  nsCOMPtr&lt;nsIDocShellTreeItem&gt; curDocShellItem(do_QueryInterface(mDocShell));
&gt; 
&gt; &apos;nsCOMPtr&lt;nsIDocShellTreeItem&gt; curDocShellItem =
&gt; do_QueryInterface(mDocShell);&apos;

thanks, will fix.

&gt; &gt;+  // is this an &lt;iframe&gt; with a sandbox attribute or a frame whose parent
&gt; &gt;+  // is sandboxed ?  
&gt; &gt;+  if (mOwnerContent-&gt;IsHTML(nsGkAtoms::iframe) &amp;&amp; 
&gt; &gt;+      (parentSandboxFlags || mOwnerContent-&gt;GetAttr(kNameSpaceID_None, nsGkAtoms::sandbox, sandboxAttr))) {
&gt; 
&gt; Instead of this, add a nsHTMLIFrameElement*
&gt; nsHTMLIFrameElement::FromContent(nsIContent*) and expose a method on
&gt; nsHTMLIFrameElement that returns the flags, and move the code you added to
&gt; nsContentUtils there. Also use it in nsHTMLIFrameElement::AfterSetAttr.

ok, i took a look at an example FromContent() on another element and I think I understand
what you&apos;d like me to do here. I put the code to parse the flags etc in nsContentUtils so it could be used by CSP Sandbox (bug 671389) - does that change your opinion at all on how to rework this ? (that&apos;s why i didn&apos;t put the flag parsing in the iframe element originally). We also discussed support @sandbox on &lt;frame&gt;, which it seemed like there was interest in (just as an fyi). 

&gt; &gt;+    PRUint32 sandboxFlags = 0;
&gt; &gt;+  
&gt; &gt;+    nsCOMPtr&lt;nsIDOMHTMLIFrameElement&gt; iframe = do_QueryInterface(mOwnerContent);
&gt; &gt;+  
&gt; &gt;+    if (iframe) {
&gt; &gt;+      nsCOMPtr&lt;nsIDOMDOMSettableTokenList&gt; sandbox;
&gt; &gt;+    
&gt; &gt;+      nsresult result = iframe-&gt;GetSandbox(getter_AddRefs(sandbox));
&gt; &gt;+      // TODO : what to do if this fails ? (see below also) 
&gt; &gt;+    
&gt; &gt;+      sandboxFlags = nsContentUtils::ParseSandboxAttributeToFlags(sandbox);
&gt; &gt;+      // TODO: what to do if this fails ? the content was intended to be sandboxed
&gt; &gt;+      // and it may not be - maybe fail closed (all restrictions) ??? 
&gt; &gt;+    }
&gt; &gt;+     
&gt; &gt;+    if (parentSandboxFlags) { 
&gt; &gt;+      // do the intersection with the current flags in the docshell!
&gt; 
&gt; Doesn&apos;t sandboxFlags &amp;= parentSandboxFlags do the right thing, and if not,
&gt; why not?

yeah. as i mentioned above, i think &amp;= is the right thing here. i will fix this. 

&gt; &gt;+  }
&gt; &gt;+
&gt; &gt;+  else { 
&gt; 
&gt; } else {
&gt; 
&gt; &gt;--- a/content/html/content/src/nsHTMLIFrameElement.cpp
&gt; &gt;+++ b/content/html/content/src/nsHTMLIFrameElement.cpp
&gt; &gt;+  virtual nsresult AfterSetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
&gt; &gt;+                                  const nsAString* aValue,
&gt; &gt;+                                  bool aNotify);
&gt; 
&gt; Indentation

will fix, sorry.

&gt; &gt;--- a/docshell/base/nsDocShell.cpp
&gt; &gt;+++ b/docshell/base/nsDocShell.cpp
&gt; &gt;+    // If the content is sandboxed, force the passed in owner (which should be 
&gt; &gt;+    // a null principal) to be set on the channel, UNLESS the sandbox allow-same-domain flag is also
&gt; &gt;+    // set. In that case, allow the content to asssume its &quot;natural domain&quot; as it
&gt; &gt;+    // normally would. 
&gt; &gt;+    if ((mSandboxFlags &amp; SANDBOX_FLAGS_SANDBOXED) &amp;&amp; 
&gt; &gt;+        (mSandboxFlags &amp; SANDBOX_FLAGS_ALLOW_SAME_DOMAIN) != SANDBOX_FLAGS_ALLOW_SAME_DOMAIN) {
&gt; &gt;+      nsContentUtils::SetUpChannelOwner(ownerPrincipal, channel, aURI, true, true);
&gt; &gt;+    }
&gt; &gt;+    else {
&gt; &gt;+      nsContentUtils::SetUpChannelOwner(ownerPrincipal, channel, aURI, true, false);
&gt; &gt;+    }
&gt; 
&gt; nsContentUtils::SetUpChannelOwner(ownerPrincipal, channel, aURI, true,
&gt;                                   (mSandboxFlags &amp; SANDBOX_FLAGS_SANDBOXED)
&gt; &amp;&amp; 
&gt;                                   (mSandboxFlags &amp;
&gt; SANDBOX_FLAGS_ALLOW_SAME_DOMAIN) != SANDBOX_FLAGS_ALLOW_SAME_DOMAIN);

thanks, much cleaner, will fix.

&gt; &gt;--- a/dom/interfaces/html/nsIDOMHTMLIFrameElement.idl
&gt; &gt;+++ b/dom/interfaces/html/nsIDOMHTMLIFrameElement.idl
&gt; &gt;-
&gt; &gt;+  
&gt; &gt;+  // HTML5 sandbox attribute
&gt; 
&gt; This interface is specified in HTML, so no need for the comment. Also, leave
&gt; the two empty lines between the HTML-specified members and the Mozilla
&gt; extensions.

Thanks, will fix.

&gt; Also check the entire patch for tabs and trailing whitespace, and make sure
&gt; the comments you add are full sentences (including capital letters and full
&gt; stops).

Will do - sorry, this patch wasn&apos;t totally cleaned up, thanks for the sanity check on the code, i will clean it all up ! :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5896051</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2011-12-06 16:13:21 -0800</bug_when>
            <thetext>(In reply to Kyle Huey [:khuey] (khuey@mozilla.com) from comment #26)
&gt; &gt; 3) Fail closed (-1 effectively does this if somebody forgets the check).
&gt; 
&gt; Actually, -1 does not do this (it does the opposite!).  I had the polarity
&gt; of the flags wrong.  That said, I think after you rewrite this function
&gt; nothing it in will be fallible and you won&apos;t need to care.

re: the polarity of the flags, in addition to all the other stuff i need to address from the feedback from you and ms2ger, i think i want to rework the patch so the flags have the exact same semantics as the HTML5 spec. i think i just resisted their blacklisting approach to sandbox permissions. i think it&apos;s most important to follow the spec here though.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5897331</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2011-12-07 07:11:32 -0800</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #29)
&gt; (In reply to Kyle Huey [:khuey] (khuey@mozilla.com) from comment #25)
&gt; &gt; Comment on attachment 578799 [diff] [details] [review] [diff] [details] [review]
&gt; &gt; WIP - experimental prototype
&gt; &gt; 
&gt; &gt; Review of attachment 578799 [diff] [details] [review] [diff] [details] [review]:
&gt; &gt; -----------------------------------------------------------------
&gt; &gt; 
&gt; &gt; Drive by comments.  These should definitely not be taken as exhaustive.
&gt; &gt; 
&gt; &gt; Looks like this doesn&apos;t attempt to cover plugins?  Also looks like this
&gt; &gt; doesn&apos;t attempt to deal with scripts?  I expect those are going to be a
&gt; &gt; significant amount of work.
&gt; 
&gt; Plugins and scripts are both handled by this patch. The frame loader code
&gt; does :
&gt; +      if (!(sandboxFlags &amp; nsIDocShell::SANDBOX_FLAGS_ALLOW_SCRIPTS)) {
&gt; +        mDocShell-&gt;SetAllowJavascript(false);
&gt; +      }
&gt; +    
&gt; +      // _always_ disallow plugins when sandboxed
&gt; +      mDocShell-&gt;SetAllowPlugins(false);

Ok.  For plugins you&apos;ll want tests for both plugins (embed, object, etc) and plugin documents (a subframe whose URL is a type loaded by a plugin).

For JavaScript, does disabling JS on the docshell affect XBL bindings?  That&apos;ll break video controls, among other things.

It looks like SetAllowPlugins(false) and SetAllowJavascript(false) will block plugin and javascript *loads* in addition to execution/instantiation, which I don&apos;t believe is the desired behavior here (this is script observable too, at least for plugin subdocuments (do &lt;script&gt;s have load events?)).
 
&gt; &gt; Finally, this is going to need lots of tests ...
&gt; 
&gt; I wholeheartedly agree - a test suite is needed for this to land, bz also
&gt; suggested submitting our tests back to the W3C as well. 

Indeed.

&gt; &gt; ::: content/base/src/nsContentUtils.cpp
&gt; &gt; @@ +699,5 @@
&gt; &gt; &gt; + * @param aAttribute    the value of the sandbox attribute as an nsIDOMDOMSettableTokenList
&gt; &gt; &gt; + * @return 			    the set of flags
&gt; &gt; &gt; + */
&gt; &gt; &gt; +PRUint32
&gt; &gt; &gt; +nsContentUtils::ParseSandboxAttributeToFlags(nsIDOMDOMSettableTokenList * aAttribute)
&gt; &gt; 
&gt; &gt; You should rewrite this function to use
&gt; &gt; nsCharSeparatedTokenizer&lt;nsContentUtils::IsHTMLWhitespace&gt;.  As it is it&apos;ll
&gt; &gt; match things like &quot;allow-scriptsallow-same-origin&quot; which are not allowed per
&gt; &gt; spec.
&gt; &gt; 
&gt; &gt; I&apos;d give extra points for putting a
&gt; &gt; 
&gt; &gt; typedef nsCharSeparatedTokenizer&lt;nsContentUtils::IsHTMLWhitespace&gt;
&gt; &gt; HTMLSplitOnSpacesTokenizer (or something)
&gt; &gt; 
&gt; &gt; in nsContentUtils.h and changing the existing users in the tree.
&gt; 
&gt; yeah, this patch fails the MS test on whitespace etc. so i knew there were
&gt; some issues here - thanks for the suggestion. i&apos;m not opposed to doing the
&gt; HTMLSplitOnSpacesTokenizer approach here, i could split off the work to
&gt; change existing users and add the typedef as a separate blocking bug and
&gt; knock that out first.

Yeah, you don&apos;t need to do that here (or even before).  But filing a bug for it so someone else can do it would be nice ;-)  Might be a decent good first bug.

&gt; &gt; ::: content/html/content/src/nsHTMLIFrameElement.cpp
&gt; &gt; @@ +306,5 @@
&gt; &gt; &gt; +                                  bool aNotify)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +  if (aName == nsGkAtoms::sandbox &amp;&amp; aNameSpaceID == kNameSpaceID_None) {
&gt; &gt; &gt; +    // parse the new value of the sandbox attribute, and if we have a docshell
&gt; &gt; &gt; +    // set its sandbox flags appropriately
&gt; &gt; 
&gt; &gt; When is a sandbox attribute set supposed to take effect?
&gt; &gt; 
&gt; &gt; &quot;While the sandbox attribute is specified, the iframe element&apos;s nested
&gt; &gt; browsing context must have the flags given in the following list set. In
&gt; &gt; addition, any browsing contexts nested within an iframe, either directly or
&gt; &gt; indirectly, must have all the flags set on them as were set on the iframe&apos;s
&gt; &gt; Document&apos;s browsing context when the iframe&apos;s Document was created.&quot;
&gt; &gt; 
&gt; &gt; So it sounds like a sandbox attr change should only take effect for the next
&gt; &gt; document in the iframe.  Setting them on the docshell immediately means
&gt; &gt; they&apos;ll take affect for future subloads even on the same document, right? 
&gt; &gt; You&apos;ll want either tests to show that this isn&apos;t the case or to change the
&gt; &gt; code so that it isn&apos;t (and then tests :-)).
&gt; 
&gt; yeah, that&apos;s my reading of the spec - an attr change only takes effect when
&gt; the next document is loaded in the iframe. Future subloads are an important
&gt; case to point out here, thanks - i believe that they should be based on the
&gt; flags on the document, NOT the docshell. And yes, this needs tests around it
&gt; for sure !

Yes, lots of tests. :-)
 
&gt; &gt; @@ +2944,5 @@
&gt; &gt; &gt; +                        parentAsItem = tmp;
&gt; &gt; &gt; +                    }
&gt; &gt; &gt; +                }
&gt; &gt; &gt; +            } 
&gt; &gt; &gt; +            
&gt; &gt; 
&gt; &gt; Somebody who understand docshell (read bz, smaug) should look at this stuff.
&gt; &gt; In my five minutes of looking at docshell it looks like this logic might fit
&gt; &gt; better in CanAccessItem.
&gt; 
&gt; i discussed this over email with bz and asked about putting this in
&gt; CanAccessItem and in the end, it was decided that it shouldn&apos;t. 

Ok.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5899022</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2011-12-07 15:56:31 -0800</bug_when>
            <thetext>(In reply to Kyle Huey [:khuey] (khuey@mozilla.com) from comment #32)
&gt; For JavaScript, does disabling JS on the docshell affect XBL bindings? 
&gt; That&apos;ll break video controls, among other things.

That is true but it&apos;s not Ian&apos;s problem.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5900192</commentid>
            <who name="[Baboo]">bugzilla.x.0x</who>
            <bug_when>2011-12-08 03:51:57 -0800</bug_when>
            <thetext>(In reply to Robert O&apos;Callahan (:roc) (Mozilla Corporation) from comment #33)
&gt; 
&gt; That is true but it&apos;s not Ian&apos;s problem.

But it&apos;s a problem that might become more visible once this here is implemented.
Bug 449358 is tracking it BTW.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5952316</commentid>
              <attachid>585561</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-01-03 14:33:03 -0800</bug_when>
            <thetext>Created attachment 585561
WIP - reworked prototype

- nsIDocument, nsIDocShell, nsIDOMHTMLIFrameElement IIDs bumped 

- added nsHTMLIFrameElement::FromContent(nsIContent*) 

- added PRUint32 nsHTMLIFrameElement::GetSandboxFlags()

- to better match the HTML5 spec, break the flags up more, reverse their polarity and rename them.

- change sandbox attribute parsing to use nsCharSeparatedTokenizerTemplate&lt;nsContentUtils::IsHTMLWhitespace&gt;

- add NULL check to fix crash with chrome://mochitests/content/browser/toolkit/mozapps/extensions/test/xpinstall/browser_navigateaway2.js

- lots of other misc. cleanup from feedback from ms2ger and khuey

next up:

doing some more debugging of the MS test suite tests that I think should be passing but are not - and then moving on to document.cookie and blocking it appropriately. 

The big outstanding question at the moment : do I want to make the tests for this manual (as the Microsoft test suite is) or attempt to make automated tests ? Manual tests have the problem that they don&apos;t always get run on every checkin - automated tests would need (I think) some sort of event that happens when something is blocked (CSP does this with an observable notification, for example) - the con here is this doesn&apos;t test the thing attempting to be blocked actually is blocked, just that the event was fired.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5952828</commentid>
              <attachid>585605</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-01-03 16:52:24 -0800</bug_when>
            <thetext>Created attachment 585605
WIP - prototype

Do case insensitive compare when looking at sandbox attribute and comparing it to the appropriate atoms. Makes another of the MS sandbox test cases pass (http://samples.msdn.microsoft.com/ietestcenter/html5/sandbox/sandbox-attribute-value-tokens-separated-by-space-characters.htm)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5952835</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-01-03 16:54:27 -0800</bug_when>
            <thetext>Also need to re-examine keeping the flags on the docshell and the document. Right now this patch essentially only uses the docshell flags to pass the correct flags on to the document when its loaded. The frame loader always checks (and parses) the actual current value of the sandbox attribute on the IFRAME being loaded and uses this to set the flags on the docshell - if this seems acceptable, the AfterSetAttr() code in nsHTMLIFrameElement needs to be removed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5953053</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2012-01-03 18:29:10 -0800</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #35)
&gt; Manual tests have the problem that they don&apos;t always get run on
&gt; every checkin - automated tests would need (I think) some sort of event that
&gt; happens when something is blocked (CSP does this with an observable
&gt; notification, for example) - the con here is this doesn&apos;t test the thing
&gt; attempting to be blocked actually is blocked, just that the event was fired.

Automated tests of course :-). Manual tests are a bit useless.

I think most of the features can be automatically checked fairly easily. In some cases you may need chrome privileges to inject synthetic events into the sandboxed document. Are there any features that you can&apos;t think of a way to test automatically?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5953107</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-01-03 18:53:03 -0800</bug_when>
            <thetext>(In reply to Robert O&apos;Callahan (:roc) (Mozilla Corporation) from comment #38)
&gt; (In reply to Ian Melven :imelven from comment #35)
&gt; &gt; Manual tests have the problem that they don&apos;t always get run on
&gt; &gt; every checkin - automated tests would need (I think) some sort of event that
&gt; &gt; happens when something is blocked (CSP does this with an observable
&gt; &gt; notification, for example) - the con here is this doesn&apos;t test the thing
&gt; &gt; attempting to be blocked actually is blocked, just that the event was fired.
&gt; 
&gt; Automated tests of course :-). Manual tests are a bit useless.
&gt; 
&gt; I think most of the features can be automatically checked fairly easily. In
&gt; some cases you may need chrome privileges to inject synthetic events into
&gt; the sandboxed document. Are there any features that you can&apos;t think of a way
&gt; to test automatically?

Thanks for the feedback ! Can&apos;t think of anything specific offhand that I&apos;m certain will be impossible to test automatically, maybe blocking video autoplay ? I&apos;ll see how it shakes out when I attempt writing the automated tests.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5953140</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2012-01-03 19:15:22 -0800</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #39)
&gt; Can&apos;t think of anything specific offhand that I&apos;m
&gt; certain will be impossible to test automatically, maybe blocking video
&gt; autoplay ?

Reach into the sandboxed document (using chrome privileges if you want to test cross-origin), and add an event listener on the element&apos;s &quot;playing&quot; event. Wait for &quot;suspended&quot; to fire to signal that the element has finished downloading, and make sure the &quot;playing&quot; event hasn&apos;t fired.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5970810</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-01-10 17:47:10 -0800</bug_when>
            <thetext>(In reply to Robert O&apos;Callahan (:roc) (Mozilla Corporation) from comment #40)
&gt; (In reply to Ian Melven :imelven from comment #39)
&gt; &gt; Can&apos;t think of anything specific offhand that I&apos;m
&gt; &gt; certain will be impossible to test automatically, maybe blocking video
&gt; &gt; autoplay ?
&gt; 
&gt; Reach into the sandboxed document (using chrome privileges if you want to
&gt; test cross-origin), and add an event listener on the element&apos;s &quot;playing&quot;
&gt; event. Wait for &quot;suspended&quot; to fire to signal that the element has finished
&gt; downloading, and make sure the &quot;playing&quot; event hasn&apos;t fired.

actually re video autoplay, due to bug 449358 (i assume), video doesn&apos;t show up 
at all when allow-scripts isn&apos;t specified when I tested this with an ogg file. 

I also found another bug :

If I do 

&lt;iframe sandbox=&quot;allow-scripts&quot;&gt;
&lt;video width=&quot;320&quot; height=&quot;240&quot; controls=&quot;controls&quot; autoplay&gt;
  &lt;source src=&quot;stockholm-vfr.ogg&quot; type=&quot;video/ogg&quot; /&gt;
&lt;/video&gt;
&lt;/iframe&gt;

the video doesn&apos;t show up and play as it should. If I move the &lt;video&gt; tag into another HTML file and use &lt;iframe src=&quot;video_autoplay.html&quot; sandbox=&quot;allow-scripts&quot;&gt; the video shows up and starts playing as expected.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5970830</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2012-01-10 17:56:31 -0800</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #41)
&gt; actually re video autoplay, due to bug 449358 (i assume), video doesn&apos;t show
&gt; up 
&gt; at all when allow-scripts isn&apos;t specified when I tested this with an ogg
&gt; file.

Autoplay shouldn&apos;t depend on bug 449358, it&apos;s all in C++.

&gt; I also found another bug :
&gt; 
&gt; If I do 
&gt; 
&gt; &lt;iframe sandbox=&quot;allow-scripts&quot;&gt;
&gt; &lt;video width=&quot;320&quot; height=&quot;240&quot; controls=&quot;controls&quot; autoplay&gt;
&gt;   &lt;source src=&quot;stockholm-vfr.ogg&quot; type=&quot;video/ogg&quot; /&gt;
&gt; &lt;/video&gt;
&gt; &lt;/iframe&gt;
&gt; 
&gt; the video doesn&apos;t show up and play as it should.

There you&apos;re specifying the &lt;video&gt; as fallback for the &lt;iframe&gt;. Since we support &lt;iframe&gt;, the video is ignored.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5970865</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-01-10 18:17:44 -0800</bug_when>
            <thetext>(In reply to Robert O&apos;Callahan (:roc) (Mozilla Corporation) from comment #42)
&gt; (In reply to Ian Melven :imelven from comment #41)
&gt; 
&gt; Autoplay shouldn&apos;t depend on bug 449358, it&apos;s all in C++.

the video doesn&apos;t show up at all if JS is disabled it seems. 

&gt; There you&apos;re specifying the &lt;video&gt; as fallback for the &lt;iframe&gt;. Since we
&gt; support &lt;iframe&gt;, the video is ignored.

oh, that makes sense. Thanks. It doesn&apos;t seem to work that way in Chrome, but that&apos;s up to them :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5970906</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2012-01-10 18:38:09 -0800</bug_when>
            <thetext>The spec says
&quot;Descendants of iframe elements represent nothing. (In legacy user agents that do not support iframe elements, the contents would be parsed as markup that could act as fallback content.)&quot;
So if Chrome shows the video there, that&apos;s a Webkit bug.

(In reply to Ian Melven :imelven from comment #43)
&gt; the video doesn&apos;t show up at all if JS is disabled it seems. 

Odd. Can you reproduce if JS is just turned off in the browser? Anyway, it must be a separate bug.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5990157</commentid>
              <attachid>589638</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-01-18 14:00:45 -0800</bug_when>
            <thetext>Created attachment 589638
WIP - prototype


- possible implementation of blocking reading or writing document.cookie if sandboxed origin flag is set
- possible implementation of blocking access to localStorage and sessionStorage if sandboxed origin flag is set
- use HTMLSplitOnSpacesTokenizer (thanks Santiago Gimeno!)
- only create nsCaseInsensitiveStringComparator once and then reuse it 

Note : there needs to be a test that document.cookie can be redefined when
actually reading or writing the cookie is not allowed due to sandboxing.
This was brought up by Devdatta Akhawe. Adam Barth says Chrome considers
this bug and will fix it. I believe this patch should allow that but it needs 
a test.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6015536</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-01-27 13:57:57 -0800</bug_when>
            <thetext>(In reply to Robert O&apos;Callahan (:roc) (Mozilla Corporation) from comment #44)
&gt;
&gt; Odd. Can you reproduce if JS is just turned off in the browser? Anyway, it
&gt; must be a separate bug.

No, I can&apos;t - it works fine with JS turned off - my suspicion is it might be something to do with removing the iframe&apos;s document&apos;s natural origin/principal.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6030630</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-02 14:46:15 -0800</bug_when>
            <thetext>For reference, here&apos;s some statements by Hixie on the WHATWG list :

&quot;I don&apos;t intend to add sandbox=&quot;&quot; to &lt;frame&gt; unless implementors find it
easier to support than not support.&quot;

&quot;Adding sandbox=&quot;&quot; to &lt;object&gt; has all kinds of weird edge cases because
&lt;object&gt; sometimes has a browsing context and sometimes does not, so I do
not intend to add this either.&quot;

There had been some consensus about not adding sandbox to &lt;object&gt; for the very reason Hixie states. &lt;frame&gt; was more up in the air. Based on my work in the attached patch, I don&apos;t believe it&apos;s easier to support &lt;frame&gt; than not - there were some other objections about adding new attributes to a deprecated tag as well - so I&apos;m not planning on supporting sandbox on &lt;frame&gt;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6030663</commentid>
            <who name="Adam Barth">abarth-mozilla</who>
            <bug_when>2012-02-02 14:56:54 -0800</bug_when>
            <thetext>&gt; so I&apos;m not planning on supporting sandbox on &lt;frame&gt;.

That matches the WebKit implementation.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6033874</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-03 15:46:42 -0800</bug_when>
            <thetext>I spent a bit looking into how XHR works with the current patch. The summary is that (without allow-same-origin) requests via XHR behave like other cross domain XHR requests. The request hits the server but a status of 0 is returned and the response is not available. CORS won&apos;t be able to allow these requests unless you could somehow magically know the random domain of the null principal assigned to the sandboxed document. This all seems OK to me at the moment, but I&apos;m open as always to differing opinions/feedback.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6033966</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-03 16:16:35 -0800</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #46)
&gt; (In reply to Robert O&apos;Callahan (:roc) (Mozilla Corporation) from comment #44)
&gt; &gt;
&gt; &gt; Odd. Can you reproduce if JS is just turned off in the browser? Anyway, it
&gt; &gt; must be a separate bug.
&gt; 
&gt; No, I can&apos;t - it works fine with JS turned off - my suspicion is it might be
&gt; something to do with removing the iframe&apos;s document&apos;s natural
&gt; origin/principal.

I actually think the bug i was seeing is triggered when you have a &lt;video&gt; tag with a format Firefox can&apos;t play and JS turned off (in the sandbox&apos;s case, via disabling it on the sandboxed docshell). I wasn&apos;t seeing the &quot;Video format or MIME type is not supported&quot; graphic. I can reproduce THIS bug by turning off Javascript via Options. Note to self : file followup bug on this.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6033971</commentid>
            <who name="Daira Hopwood">daira</who>
            <bug_when>2012-02-03 16:18:22 -0800</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #49)
&gt; I spent a bit looking into how XHR works with the current patch. The summary
&gt; is that (without allow-same-origin) requests via XHR behave like other cross
&gt; domain XHR requests. The request hits the server but a status of 0 is
&gt; returned and the response is not available. CORS won&apos;t be able to allow
&gt; these requests unless you could somehow magically know the random domain of
&gt; the null principal assigned to the sandboxed document.

Even if the server sends &quot;Access-Control-Allow-Origin: *&quot; ? Why, what&apos;s the
security rationale for that?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6033986</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-03 16:26:36 -0800</bug_when>
            <thetext>(In reply to David-Sarah Hopwood from comment #51)
&gt; (In reply to Ian Melven :imelven from comment #49)
&gt; &gt; I spent a bit looking into how XHR works with the current patch. The summary
&gt; &gt; is that (without allow-same-origin) requests via XHR behave like other cross
&gt; &gt; domain XHR requests. The request hits the server but a status of 0 is
&gt; &gt; returned and the response is not available. CORS won&apos;t be able to allow
&gt; &gt; these requests unless you could somehow magically know the random domain of
&gt; &gt; the null principal assigned to the sandboxed document.
&gt; 
&gt; Even if the server sends &quot;Access-Control-Allow-Origin: *&quot; ? Why, what&apos;s the
&gt; security rationale for that?

Oh yeah, * should of course be able to allow it - thanks for pointing that out !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6039095</commentid>
              <attachid>589638</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-06 16:29:32 -0800</bug_when>
            <thetext>Comment on attachment 589638
WIP - prototype

At this point, the patch has (I think) most of the functionality needed. The remaining functionality that doesn&apos;t have a possible implementation is blocking autoplay of a &lt;video&gt; within a sandboxed iframe without allow-scripts and not doing an autofocus on an input field within a sandboxed iframe without allow-scripts. I&apos;d like to move on to start working on the test suite that will be needed for this feature. I know this needs TONS of tests (and have a list of a bunch of ones people have suggested earlier). It would be awesome to get feedback on the possible implementation in the patch so far in parallel with this :)

The biggest question for me is : do we need nsHTMLIFrameElement::AfterSetAttr still ? at this point the frame loader uses the flags on the parent document and the attributes specified when the &lt;iframe&gt; is loaded. This removes the need (I think) for having a set of flags on the docshell and document and needing to keep them in sync (and also eliminates a race with subloads of the sandboxed &lt;iframe&gt;). It seems cleaner to me, but as always, I&apos;m very open to feedback.

Thanks !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6039110</commentid>
              <attachid>594862</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-06 16:34:27 -0800</bug_when>
            <thetext>Created attachment 594862
WIP - prototype

This version is more recent and not (or at least hopefully less) bitrotted.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6039544</commentid>
              <attachid>594862</attachid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-02-06 19:45:23 -0800</bug_when>
            <thetext>Comment on attachment 594862
WIP - prototype

General comments:

1)  Sandbox flag setter on the document seems to be unused.
2)  Getter on document should probably just be SandboxFlags.
3)  The case-insensitive compares in nsContentUtils::ParseSandboxAttributeToFlags should
    just use LowerCaseEqualsLiteral with literal ASCII strings, I think.
4)  The code duplication in nsFrameLoader::ReallyStartLoadingInternal is bad.  Computing
    sandbox flags up front (and explicitly setting them to 0 for the non-iframe case),
    then having one clause at the end to set the principal based on those would be better.
5)  There are various places where random comments are being removed for no reason or
    indentation is off.
6)  You should document that the attr needs to be parsed as an attr array so that the
    token list code can work with it.
7)  You need to handle a null aValue in AfterSetAttr; that needs to reset the sandbox
    flags.  Note also that aValue is about to change to an nsAttrValue* there... And add
    the newline at end of file.  You also need to handle there being no docshell when
    AfterSetAttr is called.
8)  &quot;using namespace&quot; doesn&apos;t belong in headers.  Please take that part out.
9)  In the docshell code, getting the document from mContentViewer is wrong, I think. 
    Shouldn&apos;t we get it from the originating item?  I didn&apos;t review the rest of that code
    for now.
10) In the global window code, just use mDoc.
11) Do we really need the various manual checks for SANDBOXED_ORIGIN?  Is having the null
    principal not enough? 

Most of this looks pretty good, I think.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6039556</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-02-06 19:54:58 -0800</bug_when>
            <thetext>Forgive me if I am missing something, but I don&apos;t see any note on implementing support for srcdoc. Am I missing something, or is this another bug? My search didn&apos;t bring up anything.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6039610</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-02-06 20:42:36 -0800</bug_when>
            <thetext>srcdoc is completely unrelated to sandbox.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6039794</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-02-06 23:08:25 -0800</bug_when>
            <thetext>Yes, I realize that. But consider this: you want to isolate evil.html and bad.html from each other while showing them on good.com. What do you do? you serve them via iframe sandbox on good.com? But then an attacker could just do &lt;iframe src=good.com/evil.html&gt; on his own page. If you host it on good2.com domain, you protect good.com, but don&apos;t isolate evil.html and bad.html.

The ony way to achieve this, if I am not wrong, is to make them evil.txt and bad.txt (via content type) and then XHR the content, load it up in an iframe with srcdoc set to the text. As a result, I thought srcdoc is related: srcdoc+sandbox can be a *really* powerful tool.

Am I missing any other primitive?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6039796</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-02-06 23:09:12 -0800</bug_when>
            <thetext>(at least, this is true till csp adopts sandbox directive; which it may or may not. Adam might be able to answer that.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6041157</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-02-07 10:45:37 -0800</bug_when>
            <thetext>None of that has anything to do with this bug.  Please file a separate bug on srcdoc if you want it and there isn&apos;t one already.  Note that the use case from comment 48 can already be handled via data: URIs.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6041746</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-07 13:42:07 -0800</bug_when>
            <thetext>(In reply to dev from comment #59)
&gt; (at least, this is true till csp adopts sandbox directive; which it may or
&gt; may not. Adam might be able to answer that.

yeah, i was under the impression the use case you bring up (of content asking to be sandboxed itself rather than a page choosing to sandbox it) is addressed via CSP sandbox.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6051351</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-10 11:44:19 -0800</bug_when>
            <thetext>(In reply to Boris Zbarsky (:bz) from comment #55)
&gt; Comment on attachment 594862
&gt; WIP - prototype

Thanks very much for the feedback.

I still have a question about whether we need AfterSetAttr or not - currently it changes
the flags on the docshell when the attribute is changed, but the flags on the docshell
are only used to pass along the flags to the document when its created. This introduces a race between the time the load starts and the time the document is created. We do still need to keep the flags on the docshell to pass them to the document but do we need to have this race ? If the attribute is changed, it will still be read on a reload etc which is when the new sandbox flags are supposed to take effect. 

&gt; 5)  There are various places where random comments are being removed for no
&gt; reason or
&gt;     indentation is off.

Sorry about this, I see I somehow dropped a comment in nsContentUtils.h. I&apos;ll make another pass for indentation etc on the next iteration of the patch :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6052244</commentid>
              <attachid>596206</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-10 15:58:21 -0800</bug_when>
            <thetext>Created attachment 596206
WIP - iframe sandbox v1

(In reply to Boris Zbarsky (:bz) from comment #55)

This patch addresses items 1-8 and 10 from your feedback. Thanks ! 

&gt; 9)  In the docshell code, getting the document from mContentViewer is wrong,
&gt; I think. Shouldn&apos;t we get it from the originating item?  I didn&apos;t review the rest
&gt; of that code for now.

Did you mean both places in nsDocShell.cpp ? (ie the FindItemWithName code and InternalLoad code). I assume for the latter I&apos;d use the requestingElement&apos;s ownerDocument  ? For the former, I think I can use aOriginalRequestor and then use do_GetInterface to get the nsIDocument for that nsIDocShellTreeItem ? 

&gt; 11) Do we really need the various manual checks for SANDBOXED_ORIGIN?  Is
&gt; having the null principal not enough? 

These were driven by making the MS test suite pass mostly. In some cases the null principal is enough (for example, XHR, which didn&apos;t need a manual check), in some cases it wasn&apos;t (cookies and localStorage, for example).

I left AfterSetAttr in for now until we make a decision on whether it&apos;s needed (please see comment #62)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6052514</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-02-10 18:20:37 -0800</bug_when>
            <thetext>&gt; Did you mean both places in nsDocShell.cpp ?

No, just the FindItemWithName code, I think.

&gt; For the former, I think I can use aOriginalRequestor

Yes, precisely.

&gt; These were driven by making the MS test suite pass mostly.

Ah, ok.  Hurray for tests!

As far as comment 62, you do need the AfterSetAttr, as far as I can tell.  Otherwise nothing will change the docshell flags, and then a navigation in that docshell that&apos;s not due to the src on the frame changing (most simply, a link click inside the iframe) won&apos;t pick up the new flags, right?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6052524</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-10 18:32:37 -0800</bug_when>
            <thetext>(In reply to Boris Zbarsky (:bz) from comment #64)
&gt; &gt; Did you mean both places in nsDocShell.cpp ?
&gt; 
&gt; No, just the FindItemWithName code, I think.
&gt; &gt; For the former, I think I can use aOriginalRequestor
&gt; 
&gt; Yes, precisely.

ok, great ! i&apos;ll make this change in the next iteration. For now, i&apos;m going to put up a version of the patch from earlier today that actually compiles so smaug can take a look at it as he said he will try to in the next couple of days :)

&gt; As far as comment 62, you do need the AfterSetAttr, as far as I can tell. 
&gt; Otherwise nothing will change the docshell flags, and then a navigation in
&gt; that docshell that&apos;s not due to the src on the frame changing (most simply,
&gt; a link click inside the iframe) won&apos;t pick up the new flags, right?

won&apos;t this go through the frame loader again and pick up the new flags (and set them on the docshell) when it reads the iframe&apos;s sandbox attribute ? if it doesn&apos;t go through the frame loader again, then it won&apos;t get the null principal etc. I smell something that needs a test case here at any rate. I also should probably walk through this in the debugger so I better understand the code.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6052539</commentid>
              <attachid>596250</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-10 18:40:31 -0800</bug_when>
            <thetext>Created attachment 596250
WIP - iframe sandbox v2

Same as v1 but fixed the typos/parens etc so it compiles. 

See comment #63 and comment #64 which discuss a change to the FindItemWithName code that this still needs.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6052702</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-02-10 20:59:43 -0800</bug_when>
            <thetext>&gt; won&apos;t this go through the frame loader again

No.  The only things that go through the frame loader are changes to the src attribute on the iframe.

&gt; if it doesn&apos;t go through the frame loader again, then it won&apos;t get the null principal etc.

Good catch.  That should get pushed down into the docshell, perhaps.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6058294</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-13 16:54:20 -0800</bug_when>
            <thetext>(In reply to Boris Zbarsky (:bz) from comment #67)
&gt; &gt; won&apos;t this go through the frame loader again
&gt; 
&gt; No.  The only things that go through the frame loader are changes to the src
&gt; attribute on the iframe.
&gt; 
&gt; &gt; if it doesn&apos;t go through the frame loader again, then it won&apos;t get the null principal etc.
&gt; 
&gt; Good catch.  That should get pushed down into the docshell, perhaps.

This is actually already taken care of in the patch. The null principal is set up in nsDocShell::DoURILoad (if the sandbox flags on the docshell say it should be) which gets called on a link click - so it behaves as we would like. 

I agree we need the AfterSetAttr now, thanks for working through that with me. There should be no way for an &lt;iframe&gt; contained document to change its flags without having allow-same-origin and allow-scripts as pointed out in the HTML5 spec. That case will get picked up by AfterSetAttr and then if load is triggered, the docshell flags that have been updated should be used. I might also need to move the JS and plugin disabling into the docshell though. Consider the case where an iframe has sandbox=&quot;allow-same-origin allow-scripts&quot; and the sandboxed document accesses its parent and removes &apos;allow-scripts&apos; and then triggers a reload. To summarize, &apos;this needs a test&apos; :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6058381</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-13 17:21:02 -0800</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #68)
&gt;
&gt; &gt; &gt; if it doesn&apos;t go through the frame loader again, then it won&apos;t get the null principal etc.
&gt; &gt; 
&gt; &gt; Good catch.  That should get pushed down into the docshell, perhaps.
&gt; 
&gt; This is actually already taken care of in the patch. The null principal is
&gt; set up in nsDocShell::DoURILoad (if the sandbox flags on the docshell say it
&gt; should be) which gets called on a link click - so it behaves as we would
&gt; like. 

Actually, this isn&apos;t quite right - in DoURILoad, SetupChannelOwner will be forced into setting the principal BUT it won&apos;t be the null principal as it should be in this case. So this does require further work in the patch.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6058526</commentid>
              <attachid>596886</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-13 18:09:45 -0800</bug_when>
            <thetext>Created attachment 596886
WIP - iframe sandbox v3

Made the change in FindItemWithName to use aOriginalRequestor as discussed in comment #63 and comment #64

I found another bug earlier as well, one of the MS tests (http://samples.msdn.microsoft.com/ietestcenter/html5/sandbox/top-navigation-block-target-top.htm) fails when it&apos;s run directly from that URL and not wrapped in the main test suite frame. Going to look into that and fix up the null principal on click handling as mentioned in comment #69 next - and then start in on the tests.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6061884</commentid>
              <attachid>597213</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-14 15:38:10 -0800</bug_when>
            <thetext>Created attachment 597213
WIP - iframe sandbox v4

This version of the patch moves the null principal assignment into the docshell so null principals are correctly assigned to documents loaded into the sandboxed iframe via for example, clicking a link in a sandboxed document.

It also fixes the bug in nsDocShell::FindItemWithName mentioned in comment #70

On to the tests, which I am going to work on in a separate patch.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6092069</commentid>
              <attachid>600577</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-02-24 17:13:17 -0800</bug_when>
            <thetext>Created attachment 600577
WIP - iframe sandbox v5

this makes the change with AfterSetAttr passing nsAttrValue that bz warned me about earlier. 

i&apos;m working on the tests now and will upload them as a new patch once i get them to a good baseline (and then ask for feedback on them)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6119204</commentid>
              <attachid>603453</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-06 14:01:18 -0800</bug_when>
            <thetext>Created attachment 603453
iframe sandbox tests - inheritance

After struggling with working on the tests in one big monolithic patch, I&apos;ve decided to break them up into smaller patches containing subsets of the tests. This should make it easier to get some stuff up here for feedback. There are subsets for same-origin tests and a main/general test containing forms/scripts and generic tests coming after I&apos;ve split those out of the big patch I was working on. There&apos;s also some navigation tests that I was having issues with that helped prompt this decomposition. Some of the subsets of tests have issues/TODO&apos;s, I&apos;ll note those as I post each patch. There still need to be tests written for plugins. There still need to be a test written for allow-top-navigation (I think this might need to be a browser-chrome test ?). 

This particular patch contains a set of tests around inheritance of sandboxing. Ideas for more tests to increase coverage are very welcome ! There are no issues I&apos;m aware of with the tests in this patch.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6119699</commentid>
              <attachid>603514</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-06 16:32:00 -0800</bug_when>
            <thetext>Created attachment 603514
iframe sandbox tests - same origin

split out from the large test patch i was working on. these all pass and don&apos;t seem to have any issues. feedback, especially ideas for additional tests, very welcome !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6122902</commentid>
              <attachid>603903</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-07 15:58:20 -0800</bug_when>
            <thetext>Created attachment 603903
iframe sandbox tests - general

Here is a patch with the &apos;general&apos;/misc. tests split out. It includes tests for script execution (allow-scripts), form submsission (allow-forms) and window opening.

There is one issue with this patch, the form submit test causes an assertion : \

###!!! ASSERTION: Adding a child where we already have a child? This may misbeha
ve: &apos;Error&apos;, file c:/Users/imelven/src/mozilla/docshell/shistory/src/nsSHEntry.c
pp, line 628
LdrLoadDll: Blocking load of &apos;&apos; (SearchPathW didn&apos;t find it?)
xul!nsDocShell::AddChildSHEntry+0x0000000000000073 (c:\users\imelven\src\mozilla
\docshell\base\nsdocshell.cpp, line 3484)
xul!nsDocShell::DoAddChildSHEntry+0x00000000000000DC (c:\users\imelven\src\mozil
la\docshell\base\nsdocshell.cpp, line 3564)
xul!nsDocShell::AddToSessionHistory+0x0000000000000B78 (c:\users\imelven\src\moz
illa\docshell\base\nsdocshell.cpp, line 10097)
xul!nsDocShell::OnNewURI+0x0000000000000888 (c:\users\imelven\src\mozilla\docshe
ll\base\nsdocshell.cpp, line 9515)
xul!nsDocShell::OnLoadingSite+0x00000000000000A6 (c:\users\imelven\src\mozilla\d
ocshell\base\nsdocshell.cpp, line 9578)
xul!nsDocShell::CreateContentViewer+0x000000000000048C (c:\users\imelven\src\moz
illa\docshell\base\nsdocshell.cpp, line 7532)
xul!nsDSURIContentListener::DoContent+0x0000000000000155 (c:\users\imelven\src\m
ozilla\docshell\base\nsdsuricontentlistener.cpp, line 164)
xul!nsDocumentOpenInfo::TryContentListener+0x00000000000002F5 (c:\users\imelven\
src\mozilla\uriloader\base\nsuriloader.cpp, line 709)
xul!nsDocumentOpenInfo::DispatchContent+0x00000000000002FF (c:\users\imelven\src
\mozilla\uriloader\base\nsuriloader.cpp, line 406)
xul!nsDocumentOpenInfo::OnStartRequest+0x00000000000001CA (c:\users\imelven\src\
mozilla\uriloader\base\nsuriloader.cpp, line 294)
xul!nsHttpChannel::CallOnStartRequest+0x000000000000045B (c:\users\imelven\src\m
ozilla\netwerk\protocol\http\nshttpchannel.cpp, line 764)
xul!nsHttpChannel::ContinueProcessNormal+0x0000000000000205 (c:\users\imelven\sr
c\mozilla\netwerk\protocol\http\nshttpchannel.cpp, line 1260)
xul!nsHttpChannel::ProcessNormal+0x0000000000000103 (c:\users\imelven\src\mozill
a\netwerk\protocol\http\nshttpchannel.cpp, line 1198)
xul!nsHttpChannel::ProcessResponse+0x0000000000000287 (c:\users\imelven\src\mozi
lla\netwerk\protocol\http\nshttpchannel.cpp, line 1033)
xul!nsHttpChannel::OnStartRequest+0x000000000000028F (c:\users\imelven\src\mozil
la\netwerk\protocol\http\nshttpchannel.cpp, line 4186)
xul!nsInputStreamPump::OnStateStart+0x00000000000000B1 (c:\users\imelven\src\moz
illa\netwerk\base\src\nsinputstreampump.cpp, line 444)
xul!nsInputStreamPump::OnInputStreamReady+0x000000000000007D (c:\users\imelven\s
rc\mozilla\netwerk\base\src\nsinputstreampump.cpp, line 399)
xul!nsInputStreamReadyEvent::Run+0x000000000000004A (c:\users\imelven\src\mozill
a\xpcom\io\nsstreamutils.cpp, line 115)
xul!nsThread::ProcessNextEvent+0x0000000000000347 (c:\users\imelven\src\mozilla\
xpcom\threads\nsthread.cpp, line 657)
xul!NS_ProcessNextEvent_P+0x0000000000000054 (c:\users\imelven\src\mozilla\objdi
r-dbg\xpcom\build\nsthreadutils.cpp, line 245)
xul!mozilla::ipc::MessagePump::Run+0x00000000000001DF (c:\users\imelven\src\mozi
lla\ipc\glue\messagepump.cpp, line 134)
xul!MessageLoop::RunInternal+0x000000000000004E (c:\users\imelven\src\mozilla\ip
c\chromium\src\base\message_loop.cc, line 209)
xul!MessageLoop::RunHandler+0x0000000000000082 (c:\users\imelven\src\mozilla\ipc
\chromium\src\base\message_loop.cc, line 202)
xul!MessageLoop::Run+0x000000000000001D (c:\users\imelven\src\mozilla\ipc\chromi
um\src\base\message_loop.cc, line 176)
xul!nsBaseAppShell::Run+0x0000000000000050 (c:\users\imelven\src\mozilla\widget\
xpwidgets\nsbaseappshell.cpp, line 191)
xul!nsAppShell::Run+0x0000000000000047 (c:\users\imelven\src\mozilla\widget\wind
ows\nsappshell.cpp, line 256)
xul!nsAppStartup::Run+0x000000000000006A (c:\users\imelven\src\mozilla\toolkit\c
omponents\startup\nsappstartup.cpp, line 295)
xul!XRE_main+0x00000000000033B1 (c:\users\imelven\src\mozilla\toolkit\xre\nsappr
unner.cpp, line 3564)
firefox!do_main+0x00000000000002BC (c:\users\imelven\src\mozilla\browser\app\nsb
rowserapp.cpp, line 190)
firefox!NS_internal_main+0x0000000000000226 (c:\users\imelven\src\mozilla\browse
r\app\nsbrowserapp.cpp, line 277)
firefox!wmain+0x0000000000000129 (c:\users\imelven\src\mozilla\toolkit\xre\nswin
dowswmain.cpp, line 107)
firefox!__tmainCRTStartup+0x00000000000001BF (f:\dd\vctools\crt_bld\self_x86\crt
\src\crtexe.c, line 552)
firefox!wmainCRTStartup+0x000000000000000F (f:\dd\vctools\crt_bld\self_x86\crt\s
rc\crtexe.c, line 371)
kernel32!BaseThreadI++DOMWINDOW == 21 (0D46E048) [serial = 21] [outer = 0D46CF60
]
nitThunk+0x0000000000000012
ntdll!RtlInitializeExceptionChain+0x0000000000000063
ntdll!RtlInitializeExceptionChain+0x0000000000000036

any help with this would be greatly appreciated !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6122917</commentid>
            <who name="Gary Kwong [:gkw] [:nth10sd] (NOT official MoCo now)">nth10sd</who>
            <bug_when>2012-03-07 16:03:53 -0800</bug_when>
            <thetext>&gt; ###!!! ASSERTION: Adding a child where we already have a child? This may
&gt; misbeha
&gt; ve: &apos;Error&apos;, file

I hope you&apos;re not hitting bug 645229.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6129131</commentid>
              <attachid>604565</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-09 16:42:13 -0800</bug_when>
            <thetext>Created attachment 604565
iframe sandbox tests - navigation

iframe sandbox tests for navigation. these are based on the possible targets mentioned in the HTML spec, aside from target=&apos;_top&apos; (which is affected by &apos;allow-top-navigation&apos;). i&apos;m going to work on tests for _top and plugins next.

these navigation tests trigger the same assertion mentioned in comment 75, khuey said on irc that this may not be an issue though, so for now i&apos;ll move on to adding more tests.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6129195</commentid>
              <attachid>604572</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-09 17:25:27 -0800</bug_when>
            <thetext>Created attachment 604572
iframe sandbox tests - navigation v2

it helps to remember to add the new files into the patch...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6134462</commentid>
              <attachid>605220</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-12 16:50:26 -0700</bug_when>
            <thetext>Created attachment 605220
iframe sandbox tests - plugins

This patch contains a test for plugins not being allowed in sandboxed iframes. It tests loading a plugin via 1) &lt;embed&gt; 2) &lt;object&gt; and 3) a sandboxed iframe with src set to a document of a content type that is handled by a plugin. Thanks to Josh Aas for the tips on the plugin tests !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6142920</commentid>
              <attachid>606238</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-15 08:56:24 -0700</bug_when>
            <thetext>Created attachment 606238
WIP - iframe sandbox v6

While working on a test to see if form validation happened when a submit is blocked inside a sandbox without &apos;allow-forms&apos;, i found it did. This is incorrect according to the HTML5 spec. This is a hacky fix sort of - there may be a better way along the lines of preventing the validation event from firing when blocking the actual submit. I&apos;m still working on a mochitest for this - the validation API makes it very difficult to detect if validation has occurred since validation happens on initial load (ie the .validationMessage is set) and changing the content of a field also causes validation to occur. I could see it was happening when testing manually, my only idea right now is to try to detect some sort of styling change to the field when validation occurs on submit.

I have a couple more test cases to add to the navigation tests, need to figure out how to finish the top-navigation tests i wrote, and then need to look into how JS workers interact with the sandbox. Discussing with Adam Barth, it seems like we should allow JS workers, but only when &apos;allow-scripts&apos; and &apos;allow-same-origin&apos; are specified. I need to look into what happens with this patch and what other browsers do here as well.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6146941</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-16 11:48:33 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #80)
&gt; Created attachment 606238
&gt; WIP - iframe sandbox v6

&gt; I could see it was happening when testing manually, my
&gt; only idea right now is to try to detect some sort of styling change to the
&gt; field when validation occurs on submit.

the style of the input element doesn&apos;t seem to change when the validation happens, so this won&apos;t work. Still open to suggestions on ways to test if form validation happens from content :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6149430</commentid>
              <attachid>606927</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-17 19:21:39 -0700</bug_when>
            <thetext>Created attachment 606927
iframe sandbox tests - navigation v3

add two tests to the iframe sandbox navigation tests:

1) If an iframe has sandbox=&quot;allow-same-origin allow-scripts&quot;, and then then the sandboxed document that it contains accesses its parent and removes 
&apos;allow-same-origin&apos; from its sandbox attribute and then triggers a reload, the reloaded sandboxed document should not be able to access its parent.
  
2)) If an iframe has sandbox=&quot;allow-same-origin allow-scripts&quot;, and then the sandboxed document that it contains accesses its parent and removes 
&apos;allow-scripts&apos; and then triggers a reload of itself, the reloaded sandboxed 
document should not be able to run a script and access its parent.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6149437</commentid>
              <attachid>606928</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-17 19:28:36 -0700</bug_when>
            <thetext>Created attachment 606928
WIP - iframe sandbox v7

while writing navigation tests, i found that the change in comment 72 to account for AfterSetAttr now taking an nsAttrValue needed a little more work.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6153055</commentid>
              <attachid>607321</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-19 14:23:26 -0700</bug_when>
            <thetext>Created attachment 607321
iframe sandbox tests - inheritance v2

Improve the inheritance tests slightly and add a new test to make sure that changing the sandbox attribute of an iframe doesn&apos;t affect the sandboxing of subloads of content within that iframe.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6157387</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-20 16:23:13 -0700</bug_when>
            <thetext>Just a note that I confirmed by manual testing that the issue raised by Devdatta Akhawe via email(being able to redefine document.cookie, for example, within an iframe with sandbox = &apos;allow-scripts) is not an issue with the attached iframe sandbox patch :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6157527</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-20 17:02:38 -0700</bug_when>
            <thetext>Another note that Web Workers work as I expected them to (and the way that Adam Barth and I agreed over email, we thought they would) - if you have &apos;allow-scripts&apos; and &apos;allow-same-origin&apos; you can create and start a worker, without both those attributes, you cannot.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6157550</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-03-20 17:10:19 -0700</bug_when>
            <thetext>Can you expand on the reasons behind that decision? Why not allow workers without allow-same-origin?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6157566</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-20 17:14:48 -0700</bug_when>
            <thetext>(In reply to dev from comment #87)
&gt; Can you expand on the reasons behind that decision? Why not allow workers
&gt; without allow-same-origin?

A worker needs to be same origin with its &apos;entry script&apos; per the web worker spec. Script inside an iframe sandboxed without &apos;allow-same-origin&apos; will have a unique origin, and can&apos;t be same origin with the worker.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6157689</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2012-03-20 17:50:57 -0700</bug_when>
            <thetext>What if the worker uses a data: URI, or a URI for a Blob created with window.createObjectURL?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6157703</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-20 17:58:09 -0700</bug_when>
            <thetext>(In reply to Robert O&apos;Callahan (:roc) (Mozilla Corporation) from comment #89)
&gt; What if the worker uses a data: URI, or a URI for a Blob created with
&gt; window.createObjectURL?

Good question. I assume these cases work fine in the non-sandboxed world. I&apos;ll have to think about this some more.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6157770</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-03-20 18:22:10 -0700</bug_when>
            <thetext>https://developer.mozilla.org/en/Using_web_workers#Spawning_a_worker has the info you need.

Also, I suggest thinking about newer platforms like B2G. It might be useful for a sandboxed app to run things with a worker? Does anyone have a reference (to probably the mailing list thread) as to why web worker scripts were not allowed cross origin ?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6176157</commentid>
              <attachid>609874</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-27 13:55:25 -0700</bug_when>
            <thetext>Created attachment 609874
iframe sandbox tests - navigation v4

add allow-top-navigation tests to the navigation tests.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6178523</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-28 09:23:59 -0700</bug_when>
            <thetext>(In reply to dev from comment #91)
&gt; https://developer.mozilla.org/en/Using_web_workers#Spawning_a_worker has the
&gt; info you need.
&gt; 
&gt; Also, I suggest thinking about newer platforms like B2G. It might be useful
&gt; for a sandboxed app to run things with a worker? Does anyone have a
&gt; reference (to probably the mailing list thread) as to why web worker scripts
&gt; were not allowed cross origin ?

After some discussion with Jonas, i think we agree that workers should be able to use data: URLs without &apos;allow-same-origin&apos;. Note that Firefox supports using data: URLs in Web Workers in normal, unsandboxed documents, which IE10 and Webkit do not AFAICT. We also think that workers should be able to use Blob URL&apos;s as long as the Blob was created by the sandboxed document that creates the worker - if the Blob was created in some other document, sandboxed or not, it will not have the same unique domain as the worker, and should not be allowed. Note that this is different from the Webkit implementation which requires &apos;allow-same-origin&apos; for a sandboxed document to be able to load a worker with a Blob URL. AFAICT, IE10 does not allow workers to be loaded with Blob URL&apos;s, even in non-sandboxed documents. Note that the current patch does not behave this way, in Gecko, workers cannot currently be loaded with content with a null principal, I&apos;m discussing this with some folks currently.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6178543</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-28 09:28:01 -0700</bug_when>
            <thetext>Also, i sent the patch and all the tests to try and it appears to have some hang issues (across multiple platforms) - so the tests need some more work : 

84063 ERROR TEST-UNEXPECTED-FAIL | /tests/content/html/content/test/test_iframe_sandbox_general.html | Test timed out.
84067 ERROR TEST-UNEXPECTED-FAIL | /tests/content/html/content/test/test_iframe_sandbox_inheritance.html | Test timed out.
84072 ERROR TEST-UNEXPECTED-FAIL | /tests/content/html/content/test/test_iframe_sandbox_navigation.html | Test timed out.
84085 ERROR TEST-UNEXPECTED-FAIL | /tests/content/html/content/test/test_iframe_sandbox_same_origin.html | XHR should work normally in an iframe sandboxed with &apos;allow-same-origin&apos;
84086 ERROR TEST-UNEXPECTED-FAIL | /tests/content/html/content/test/test_iframe_sandbox_same_origin.html | Test timed out.
84087 ERROR TEST-UNEXPECTED-FAIL | (SimpleTest/TestRunner.js) | 4 test timeouts, giving up.
84088 ERROR TEST-UNEXPECTED-FAIL | (SimpleTest/TestRunner.js) | Skipping 228 remaining tests.
84089 INFO TEST-UNEXPECTED-FAIL | (SimpleTest/TestRunner.js) | finished in a non-clean fashion (in /tests/content/html/content/test/test_iframe_sandbox_same_origin.html)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6178570</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-28 09:35:16 -0700</bug_when>
            <thetext>And another note that the type of the attribute is currently being discussed on the WHATWG list : 

1) in general, folks don&apos;t like [PutForwards=value], which the HTML5 spec has on the DOMSettableTokenList sandbox attribute - but without forwarding to value, e.g. iframe.sandbox = &apos;allow-scripts&apos; is a silent nop - it works as one would expect in IE10 (which does the forward) and Webkit (which doesn&apos;t implement the attribute as a DOMSettableTokenList). Although I don&apos;t like PutForwards much either, I really don&apos;t like the inconsistency with other implementations here. 

2) content authors need to use removeAttribute and hasAttribute to clear or detect the difference between &lt;iframe&gt; and &lt;iframe sandbox=&quot;&quot;&gt; since iframe.sandbox = &quot;&quot; is true in both cases. There is discussion about adding another attribute to the DOMSettableTokenList (e.g. iframe.sandbox.present) 

3) bz pointed out that as it stands iframe1.sandbox = iframe2.sandbox may behave surprisingly - consider that iframe1 and iframe2 are originally not sandboxed (their sandbox attribute will be &quot;&quot;). Doing this assignment will result in iframe1 being sandboxed with no granted permissions (when the document in iframe1 is reloaded and the new sandboxing is applied).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6178583</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-28 09:39:34 -0700</bug_when>
            <thetext>Also, on reflection (and discussion with Sid Stamm), I think the JS disabling in this patch is too heavy handed. I would like to rework it to use the same choke points CSP does for executing scripts - this should remove the issues with for example, video controls not working in a sandboxed document, and should be a much more useful implementation. Feedback on this idea is very welcome - the immediate concerns seems to be performance impact (but I&apos;m hopeful that in the usual, non sandboxed case, just checking the sandboxFlags member of the document won&apos;t be too bad) and whether the CSP choke points cover all the cases we would want to block if allow-scripts isn&apos;t specified.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6178784</commentid>
              <attachid>610203</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-28 10:49:41 -0700</bug_when>
            <thetext>Created attachment 610203
WIP - iframe sandbox v8

dom/interfaces/html/nsIDOMHTMLIFrameElement.idl bitrotted, updated.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6180490</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-28 17:48:31 -0700</bug_when>
            <thetext>I&apos;m also thinking that maybe it makes more sense for the sandbox flags to be on nsIDocument rather than nsIDocShell.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6180498</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-03-28 17:54:13 -0700</bug_when>
            <thetext>Which particular sandbox flags?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6180501</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-28 17:55:53 -0700</bug_when>
            <thetext>(In reply to Boris Zbarsky (:bz) from comment #99)
&gt; Which particular sandbox flags?

the constants - both the docshell and the document have actual flags set on them. ie instead of nsIDocShell::SANDBOXED_ORIGIN it&apos;s nsIDocument::SANDBOXED_ORIGIN</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6180503</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-03-28 17:57:29 -0700</bug_when>
            <thetext>Oh, OK.  You could also just have a small header file with an enum for the flags in it.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6180518</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-28 18:04:52 -0700</bug_when>
            <thetext>(In reply to Boris Zbarsky (:bz) from comment #101)
&gt; Oh, OK.  You could also just have a small header file with an enum for the
&gt; flags in it.

yeah, that might be a little cleaner - maybe in content/base/public/ 

i&apos;ll probably do that when i try to fix up the script blocking, after i sort out this worker stuff :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6186658</commentid>
              <attachid>611076</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-30 16:27:52 -0700</bug_when>
            <thetext>Created attachment 611076
iframe sandbox tests - same origin v2

i broke the XHR test during the refactor, fixed now, and also cleaned up a bunch of evil whitespace.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6186788</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-03-30 17:39:55 -0700</bug_when>
            <thetext>some updates : 

* i now plan to change the implementation of sandbox to be a DOMString after discussion on the WHATWG list 

* the workers code needs some changes to have Blob and data: URL&apos;s work as described in comment 93, i have a hacky solution and am waiting for feedback

next, i&apos;m going to rework the script blocking as described in comment 96 and move the flags to their own header as bz suggested in comment 101</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6190999</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-02 12:45:35 -0700</bug_when>
            <thetext>Just a quick note that with script blocking reworked to use the same choke points that CSP uses, the issues mentioned in comment 50 and comment 34 are no longer present - that is to say, with the improved script blocking, the &apos;unsupported media coded&apos; error graphic and video controls all work correctly in a sandboxed document without &apos;allow-scripts&apos; - i think this is a strong argument for going with this implementation. 

I&apos;ll attach a new patch once I write some more tests - I realized for script blocking we should also test blocking javascript: URLs and &lt;script src=...&gt; in a sandboxed document without &apos;allow-scripts&apos;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6195305</commentid>
              <attachid>612006</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-03 16:14:11 -0700</bug_when>
            <thetext>Created attachment 612006
iframe sandbox tests - general v2

Add tests for executing script (or blocking it, as appropriate) from &lt;script src=.. &gt; and javascript: urls as well as inline &lt;script&gt;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6197901</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-04 12:00:54 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #106)
&gt; Created attachment 612006
&gt; iframe sandbox tests - general v2
&gt; 
&gt; Add tests for executing script (or blocking it, as appropriate) from &lt;script
&gt; src=.. &gt; and javascript: urls as well as inline &lt;script&gt;.

This javascript: URL test (which is in an onLoad handler) led me to discover that the patch with more specific script blocking allows script in &lt;body onload=.. to run. I verified that it does block javascript: URLs when they&apos;re the href of a clicked on &lt;a&gt; tag. I&apos;m sticking it in the bug but need to dig into this.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6197929</commentid>
              <attachid>612287</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-04 12:06:33 -0700</bug_when>
            <thetext>Created attachment 612287
WIP - iframe sandbox v8 - more granular script disabling

This is the patch with more granular script disabling - I need to fix script not being blocked in onload handlers in it. This patch also moves the sandbox flags to content/base/src/nsSandboxFlags. They&apos;re just consts now, I&apos;m happy to put them in an enum or as static members of a class, etc. if needed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6197960</commentid>
            <who name="Mardeg">mardeg</who>
            <bug_when>2012-04-04 12:16:15 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #108)
&gt; I need to fix script not being blocked in onload handlers in it.
Will that also include onclick/onkeydown/onhashchange/etc?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6198547</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-04 14:36:16 -0700</bug_when>
            <thetext>(In reply to Mardeg from comment #109)
&gt; (In reply to Ian Melven :imelven from comment #108)
&gt; &gt; I need to fix script not being blocked in onload handlers in it.
&gt; Will that also include onclick/onkeydown/onhashchange/etc?

yes - in a sandboxed iframe without &apos;allow-scripts&apos;, no content scripts (inline scripts, &lt;script src=..&gt;, javascript: URLs or event handler scripts should be run.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6198747</commentid>
              <attachid>612372</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-04 15:34:37 -0700</bug_when>
            <thetext>Created attachment 612372
WIP - iframe sandbox v9

This iteration of the patch blocks adding event listeners in the same place CSP does and stops onload scripts from working. I need to rework the script blocking tests in &apos;iframe sandbox tests - general&apos; to better test javascript: urls and add a test for event listeners.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6199217</commentid>
              <attachid>612425</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-04 18:31:54 -0700</bug_when>
            <thetext>Created attachment 612425
iframe sandbox tests - general v3

Improve the script blocking tests in the general tests - a better test for script in javascript: urls and an added test for script in event listeners.

Next up I&apos;m going to tackle the workers stuff as described in comment 93, including writing tests. This will also require changing the worker code to not use string origins or tackling that in a followup bug.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6212553</commentid>
              <attachid>613831</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-10 17:22:10 -0700</bug_when>
            <thetext>Created attachment 613831
WIP - iframe sandbox v10

unbitrot.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6231508</commentid>
              <attachid>615917</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-17 15:46:17 -0700</bug_when>
            <thetext>Created attachment 615917
workaround for workers needing a string origin

This is the patch to let workers run with a null principal (ie in a sandboxed iframe) and work around workers needing a string origin - bz, I just wanted you to be able to have a look at it so you can see what the workaround was - the intent is to clean this up in a followup after iframe sandbox lands with a change to not use the string origin in the worker at all, if that&apos;s still alright. :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6231550</commentid>
              <attachid>615924</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-17 15:55:50 -0700</bug_when>
            <thetext>Created attachment 615924
CheckMayLoad changes to allow sandboxed workers to load blob and data URIs

This is the CheckMayLoad change that adds a new flag, aAllowIfInheritsPrincipal, as discussed. 

When discussing with dveditz he mentioned we might want to make this a uint32 instead of a bool to give us some room to expand (which would probably mean folding in the existing report bool as a flag as well) - just mentioning it :)

There&apos;s some places called out with // REVIEW where I wasn&apos;t quite sure what we want to do and would appreciate feedback.

This patch allows sandboxed workers to successfully load blob URI&apos;s (created by the sandboxed document) and data URI&apos;s.

Once this and the string origin workaround look alright, I&apos;ll fold them into the main iframe sandbox patch.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6231553</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-17 15:57:26 -0700</bug_when>
            <thetext>Note that javascript: URI&apos;s are currently (and also with the iframe sandbox/CheckMayLoad changes) unable to be used to load workers, this fails in nsJSThunk::EvaluateScript since the nsJSChannel does not have an owner/principal.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6231564</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-17 15:59:42 -0700</bug_when>
            <thetext>A try run with iframe sandbox v10 patch, the check may load patch and the worker
string origin workaround patch, it looks pretty good to me fwiw

https://tbpl.mozilla.org/?tree=Try&amp;rev=9c13ae50406e</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6231586</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-17 16:04:04 -0700</bug_when>
            <thetext>Next up :

* change the implementation of sandbox to be a DOMString instead of of a DOMSettableTokenList

Then:

* add tests for workers in sandboxed frames and loading them from various kinds of URIs

* push to try with all code patches and all tests - this hung last time and timed out, I think I know why, need to tweak the tests to not use window.top since it&apos;s different when running in the whole mochitest suite as opposed to one single mochitest

After these are done, there&apos;s a couple followups to file and then I&apos;d like to start getting feedback/review on the patch and associated tests :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6232629</commentid>
              <attachid>616023</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-17 23:11:13 -0700</bug_when>
            <thetext>Created attachment 616023
WIP - iframe sandbox v11

changes the sandbox attribute to be a string instead of a DOMSettableTokenList</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6232632</commentid>
              <attachid>616024</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-17 23:12:29 -0700</bug_when>
            <thetext>Created attachment 616024
iframe sandbox tests - general v4

changes the general tests to account for the attribute becoming a string</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6235999</commentid>
              <attachid>616395</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-18 18:11:10 -0700</bug_when>
            <thetext>Created attachment 616395
iframe sandbox test - workers

tests for workers in sandboxed iframes

* test that a worker in a sandboxed iframe with &apos;allow-scripts&apos; can be loaded
  from a data: URI

* test that a worker in a sandboxed iframe with &apos;allow-scripts&apos; can be loaded
  from a blob URI created by the sandboxed document itself

* test that a worker in a sandboxed iframe with &apos;allow-scripts&apos; without
  &apos;allow-same-origin&apos; cannot load a script via a relative URI
  done by file_iframe_sandbox_g_if1.html)

* when bug 722126 &quot;Can&apos;t transfer File objects with postMessage cross 
  domain&quot; is fixed, need to add a test that a worker in a sandboxed iframe with 
  &apos;allow-scripts&apos; cannot be loaded from a blob URI not created by the  
  sandboxed document itself (marked with a // TODO in this patch)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6236029</commentid>
              <attachid>616405</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-18 18:23:18 -0700</bug_when>
            <thetext>Created attachment 616405
iframe sandbox v12

Unbitrot.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6236070</commentid>
              <attachid>615924</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-18 18:49:43 -0700</bug_when>
            <thetext>Comment on attachment 615924
CheckMayLoad changes to allow sandboxed workers to load blob and data URIs

Dan, you probably have some thoughts on this too :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6237925</commentid>
              <attachid>616649</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-19 10:38:34 -0700</bug_when>
            <thetext>Created attachment 616649
iframe sandbox tests - general v5

Fix the hang on the try server by not using window.top since it&apos;s different when running as part of the suite than when running as a standalone test, this made it through try and looks good : https://tbpl.mozilla.org/?tree=Try&amp;rev=9707b0406fee

Kyle, if you have a moment, could you give this set of tests a look over ? The other sets of tests are much along the same lines so any overall feedback based on this set will affect them too. I also need to go through the other tests and fix them up to avoid hangs as was done for this set of tests - when I do that I&apos;ll push all the code patches and all the test patches together to try.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6240167</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2012-04-20 00:17:12 -0700</bug_when>
            <thetext>Unfortunately its likely to be well into May before I have time to look through these in depth, so if you need this in a reasonable timeframe I suggest looking for someone else :-/</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6241699</commentid>
              <attachid>616649</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-20 11:53:35 -0700</bug_when>
            <thetext>Comment on attachment 616649
iframe sandbox tests - general v5

Feedback on this set of tests appreciated - feel free to look at the other tests as well, I am in the middle of fixing them up to not use window.top and pushing everything to try</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6242355</commentid>
              <attachid>617117</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-20 15:11:17 -0700</bug_when>
            <thetext>Created attachment 617117
iframe sandbox tests - inheritance v3

Clean up whitespace, fix hang by using .parent instead of .top to report success/failure.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6242371</commentid>
              <attachid>617118</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-20 15:16:04 -0700</bug_when>
            <thetext>Created attachment 617118
iframe sandbox tests - same origin v3

Clean up whitespace, change tests to use .parent instead of .top to avoid hangs</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6242476</commentid>
              <attachid>617129</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-20 15:49:43 -0700</bug_when>
            <thetext>Created attachment 617129
iframe sandbox tests - navigation v5

Clean up whitespace, change the tests to use .parent instead of .top so they work when running the whole test suite, fix up a test that depended on .sandbox.value which doesn&apos;t exist any more</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6243377</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-21 09:34:31 -0700</bug_when>
            <thetext>A try run with all the code patches and all the tests - looks pretty good to me. 

https://tbpl.mozilla.org/?tree=Try&amp;rev=d160e769296f</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6254134</commentid>
              <attachid>616649</attachid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2012-04-25 12:55:40 -0700</bug_when>
            <thetext>Comment on attachment 616649
iframe sandbox tests - general v5

These tests look good to me!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6254470</commentid>
              <attachid>616649</attachid>
            <who name="Mounir Lamouri (:mounir)">mounir</who>
            <bug_when>2012-04-25 14:27:53 -0700</bug_when>
            <thetext>Comment on attachment 616649
iframe sandbox tests - general v5

Review of attachment 616649:
-----------------------------------------------------------------

Looks generally good. I can&apos;t say a lot about the content being tested given that I don&apos;t know the spec that well.

::: content/html/content/test/file_iframe_sandbox_c_if1.html
@@ +28,5 @@
&gt; +&lt;script src=&apos;file_iframe_sandbox_pass.js&apos;&gt;&lt;/script&gt;
&gt; +&lt;body onLoad=&apos;ok(true, &quot;documents sandboxed with allow-scripts should be able to run script from event listeners&quot;);doStuff();&apos;&gt;
&gt; +  I am sandboxed but with &quot;allow-scripts&quot;
&gt; +
&gt; +  &lt;form method=&quot;get&quot; action=&quot;file_iframe_sandbox_form_pass.html&quot; id=&quot;a_form&quot;&gt;

Why the form should be submitted if &apos;allow-forms&apos; isn&apos;t passed?

@@ +31,5 @@
&gt; +
&gt; +  &lt;form method=&quot;get&quot; action=&quot;file_iframe_sandbox_form_pass.html&quot; id=&quot;a_form&quot;&gt;
&gt; +    First name: &lt;input type=&quot;text&quot; name=&quot;firstname&quot;&gt;
&gt; +    Last name: &lt;input type=&quot;text&quot; name=&quot;lastname&quot;&gt;
&gt; +    &lt;input type=&quot;submit&quot; onclick=&quot;doSubmit()&quot; id=&quot;a_button&quot;&gt;

Why not just call .submit() directly instead of synthetizing a mouse event?

::: content/html/content/test/file_iframe_sandbox_c_if4.html
@@ +21,5 @@
&gt; +    // should it ?
&gt; +    try {
&gt; +      window.open(&quot;file_iframe_sandbox_open_window_fail.html&quot;);
&gt; +    } catch (error) {
&gt; +      ok(true, &quot;window.open threw a JS exception and was not allowed&quot;);

Note that if it&apos;s not throwing, you will not hear about it. You should use something like |var caught = false;|, set it to true in the |catch| block and test that value after the try/catch.
Same for the try/catch block below.

::: content/html/content/test/test_iframe_sandbox_general.html
@@ +30,5 @@
&gt; +
&gt; +function ok_wrapper(result, desc) {
&gt; +  ok(result, desc);
&gt; +
&gt; +  completedTests++;

In general, I think it would have been better to use a specific message like &quot;complete&quot; for each iframe instead of counting how many tests are done and waiting for all of them. It&apos;s just about making sure those tests are scaling correctly. In the short term, it&apos;s not very important.

@@ +41,5 @@
&gt; +  //console.log(&quot;RESULT : &quot; + result + &quot; DESC : &quot; + desc);
&gt; +
&gt; +  // REVIEW : if one of these tests fails and this isn&apos;t called
&gt; +  // this means this test will hang until the time out happens :(
&gt; +  // advice on better ways to synchronize things appreciated !

Test failing on timeout is not a problem. You shouldn&apos;t worry about that unless you got random failures ;)

@@ +43,5 @@
&gt; +  // REVIEW : if one of these tests fails and this isn&apos;t called
&gt; +  // this means this test will hang until the time out happens :(
&gt; +  // advice on better ways to synchronize things appreciated !
&gt; +  if (completedTests == 9) {
&gt; +    ok(passedTests == 9, &quot;There are 9 general tests that should pass&quot;);

Please use is(passedTests, 9, &quot;...&quot;);

@@ +49,5 @@
&gt; +  }
&gt; +}
&gt; +
&gt; +function doTest() {
&gt; +  SimpleTest.waitForExplicitFinish();

I would prefer that method to be called outside of the load event handler.

@@ +124,5 @@
&gt; +  // the window it attempts to open calls window.opener.ok(false, ...) and file_iframe_c_if4.html has an ok()
&gt; +  // function that calls window.parent.ok_wrapper
&gt; +}
&gt; +&lt;/script&gt;
&gt; +&lt;body onload=&quot;doTest()&quot;&gt;

Why not addLoadEvent(doTest)?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6257925</commentid>
              <attachid>615917</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-26 13:46:26 -0700</bug_when>
            <thetext>Comment on attachment 615917
workaround for workers needing a string origin

This is a workaround for workers needing string origins, which a null principal worker (in a sandboxed document won&apos;t have)  - the plan is to, in a followup, fix workers to not need this - it looks like they use it for max worker count and also some memory reporting on a first pass. If this patch looks ok, i&apos;ll fold it into the main iframe sandbox code patch.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6258270</commentid>
              <attachid>616405</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-26 15:02:04 -0700</bug_when>
            <thetext>Comment on attachment 616405
iframe sandbox v12

Talked to jst, r?&apos;ing to smaug</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6258292</commentid>
              <attachid>615924</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-04-26 15:10:40 -0700</bug_when>
            <thetext>Comment on attachment 615924
CheckMayLoad changes to allow sandboxed workers to load blob and data URIs

jst : this is the CheckMayLoad patch i was talking about - would appreciate a look. thanks !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6258384</commentid>
              <attachid>615917</attachid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2012-04-26 15:36:28 -0700</bug_when>
            <thetext>Comment on attachment 615917
workaround for workers needing a string origin

r=jst to land this and file a followup to do this better later.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6258811</commentid>
              <attachid>615924</attachid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2012-04-26 18:07:57 -0700</bug_when>
            <thetext>Comment on attachment 615924
CheckMayLoad changes to allow sandboxed workers to load blob and data URIs

- In caps/idl/nsIPrincipal.idl:

-    void checkMayLoad(in nsIURI uri, in boolean report);
+    void checkMayLoad(in nsIURI uri, in boolean report,
+                      in boolean allowIfInheritsPrincipal);

This is a binary incompatible change you need to bump the uuid for this interface.

- In nsNullPrincipal::CheckMayLoad():

+    // If the caller specified to allow loads of URIs that inherit
+    // our (null) principal, allow the load if the loadee URI has
+    // the URI_INHERITS_SECURITY_CONTEXT flag set.
+    bool doesInheritSecurityContext;
+    nsresult rv =
+    NS_URIChainHasFlags(aURI,
+                        nsIProtocolHandler::URI_INHERITS_SECURITY_CONTEXT,
+                        &amp;doesInheritSecurityContext);
+
+    if (NS_SUCCEEDED(rv) &amp;&amp; doesInheritSecurityContext) {
+      return NS_OK;
+    }

This hunk of code is identical to the code in nsPrincipal.cpp. Maybe split this piece out into a static inline helper in nsPrincipal.h? Won&apos;t save any code here, but at least the details around this check will be centralized.

- In nsPrincipal::CheckMayLoad():

+    // Also allow the load if the principal of the URI being checked is exactly
+    // us ie this.
+    nsCOMPtr&lt;nsIURIWithPrincipal&gt; uriPrinc = do_QueryInterface(aURI);
+    if (uriPrinc) {
+      nsCOMPtr&lt;nsIPrincipal&gt; principal;
+      uriPrinc-&gt;GetPrincipal(getter_AddRefs(principal));
+
+      if (principal &amp;&amp; principal == this) {
+        return NS_OK;
+      }
+    }

This check seems unnecessary here, the following same origin check will succeed if the principals are the same.

- In nsExternalResourceMap::PendingLoad::StartLoad():

+
+  // REVIEW : is it really ok to allow javascript: URI&apos;s here ??
+

AFAIK, yes, this is fine.

- In nsXMLHttpRequest::CheckChannelForCrossSiteRequest():

   // ...or if this is a same-origin request.
   if (nsContentUtils::CheckMayLoad(mPrincipal, aChannel)) {
     return NS_OK;
   }
 
+  // REVIEW: since the check above is on the channel and the one
+  // below is on the final channel URI, I&apos;m not sure we want to
+  // pass true for aAllowIfInheritsPrincipal to CheckMayLoad above
+  // the below could be replaced with a call to CheckMayLoad for
+  // channelURI passing true for aAllowIfInheritsPrincipal though,
+  // if we wanted to allow other URI&apos;s that inherit the principal of
+  // their creator as well as data URIs.

nsContentUtils::CheckMayLoad() also extracts the final channel URI, so only one URI involved here...

- In nsXMLDocument::Load():

   nsCOMPtr&lt;nsIPrincipal&gt; principal = NodePrincipal();
   if (!nsContentUtils::IsSystemPrincipal(principal)) {
-    rv = principal-&gt;CheckMayLoad(uri, false);
+    // REVIEW : it might be desirable to pass true as the
+    // 3rd param here and allow loading of URIs that inherit
+    // the principal of their creator. Not sure about javascript:
+    // though.
+    rv = principal-&gt;CheckMayLoad(uri, false, false);

This is fairly well a deprecated API (nobody calls document.load() any more), so I&apos;m happy to leave this unchanged.

This generally looks good, but I&apos;d like to look over an updated patch, so feedback- until then.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6281906</commentid>
              <attachid>621201</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-04 15:46:29 -0700</bug_when>
            <thetext>Created attachment 621201
iframe sandbox tests - workers v2

clean up the workers tests with the applicable feedback from Mounir in comment 132, sending for review</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6281909</commentid>
              <attachid>621203</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-04 15:47:26 -0700</bug_when>
            <thetext>Created attachment 621203
iframe sandbox v13

unbitrot</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6281929</commentid>
              <attachid>621205</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-04 15:51:53 -0700</bug_when>
            <thetext>Created attachment 621205
CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v2

Address jst&apos;s feedback in comment 137

&gt; - In caps/idl/nsIPrincipal.idl:
&gt; This is a binary incompatible change you need to bump the uuid for this
&gt; interface.

done
 
&gt; - In nsNullPrincipal::CheckMayLoad():
&gt; This hunk of code is identical to the code in nsPrincipal.cpp. Maybe split
&gt; this piece out into a static inline helper in nsPrincipal.h? Won&apos;t save any
&gt; code here, but at least the details around this check will be centralized.

i moved this check to be a static in nsPrincipal, i&apos;m happy to avoid duplication of code !

&gt; - In nsPrincipal::CheckMayLoad():
&gt; This check seems unnecessary here, the following same origin check will
&gt; succeed if the principals are the same.

right, i removed this block

&gt; - In nsXMLHttpRequest::CheckChannelForCrossSiteRequest():
&gt; nsContentUtils::CheckMayLoad() also extracts the final channel URI, so only
&gt; one URI involved here...

thanks for pointing that out - i changed this to call nsContentUtils::CheckMayload and passed true (allow inherited principals) for the new param
 
&gt; This generally looks good, but I&apos;d like to look over an updated patch, so
&gt; feedback- until then.

Thanks very much for looking this over !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6282061</commentid>
              <attachid>621221</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-04 16:49:03 -0700</bug_when>
            <thetext>Created attachment 621221
iframe sandbox tests - general v6

address Mounir&apos;s feedback from comment 132 : fix the blocked form test (thanks for catching that!) and do the other cleanup. I couldn&apos;t get .submit to work originally, but it seems to work fine now (probably because I don&apos;t have display:none on the test content iframe any more). Also add a test that adding an event listener (onerror) to an &lt;img&gt; is blocked.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6286164</commentid>
              <attachid>621203</attachid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-05-07 10:26:18 -0700</bug_when>
            <thetext>Comment on attachment 621203
iframe sandbox v13


&gt;   /**
&gt;+   * A helper function that parses a sandbox attribute (of an &lt;iframe&gt; or
&gt;+   * a CSP directive) and converts it to the set of flags used internally.
&gt;+   *
&gt;+   * @param aAttribute 	the value of the sandbox attribute
&gt;+   * @return 			the set of flags
&gt;+   */
&gt;+  static PRUint32 ParseSandboxAttributeToFlags(const nsAString&amp;
&gt;+                                                 sandboxAttr);
Parameters should be in form
aParameterName. Same also elsewhere in the patch.


&gt;+
&gt;+  if (!sandboxAttrValue.IsEmpty()) {
&gt;+    // The separator optional flag is used because the HTML5 spec says any
&gt;+    // whitespace is ok as a separator, which is what this does.
&gt;+    HTMLSplitOnSpacesTokenizer tokenizer(sandboxAttrValue, &apos; &apos;,
&gt;+      nsCharSeparatedTokenizerTemplate&lt;nsContentUtils::IsHTMLWhitespace&gt;::SEPARATOR_OPTIONAL);
You have tests for various whitespaces? \t \n &apos; &apos; ?



&gt; 
&gt; #ifdef MOZ_XTF
&gt; nsIXTFService*
&gt; nsContentUtils::GetXTFService()
&gt; {
&gt;   if (!sXTFService) {
&gt;     nsresult rv = CallGetService(kXTFServiceCID, &amp;sXTFService);
&gt;     if (NS_FAILED(rv)) {
&gt;@@ -6453,17 +6500,18 @@ nsContentUtils::URIInheritsSecurityConte
&gt;                              aResult);
&gt; }
&gt; 
&gt; // static
&gt; bool
&gt; nsContentUtils::SetUpChannelOwner(nsIPrincipal* aLoadingPrincipal,
&gt;                                   nsIChannel* aChannel,
&gt;                                   nsIURI* aURI,
&gt;-                                  bool aSetUpForAboutBlank)
&gt;+                                  bool aSetUpForAboutBlank,
&gt;+                                  bool aForceOwner)
&gt; {
&gt;   //
&gt;   // Set the owner of the channel, but only for channels that can&apos;t
&gt;   // provide their own security context.
&gt;   //
&gt;   // XXX: It seems wrong that the owner is ignored - even if one is
&gt;   //      supplied) unless the URI is javascript or data or about:blank.
&gt;   // XXX: If this is ever changed, check all callers for what owners
&gt;@@ -6471,23 +6519,27 @@ nsContentUtils::SetUpChannelOwner(nsIPri
&gt;   //      comments in nsDocShell::LoadURI where we fall back on
&gt;   //      inheriting the owner if called from chrome.  That would be
&gt;   //      very wrong if this code changed anything but channels that
&gt;   //      can&apos;t provide their own security context!
&gt;   //
&gt;   //      (Currently chrome URIs set the owner when they are created!
&gt;   //      So setting a NULL owner would be bad!)
&gt;   //
&gt;+  // If aForceOwner is true, the owner will be set, even for a channel that
&gt;+  // can provide its own security context. This is used for the HTML5 IFRAME
&gt;+  // sandbox attribute, so we can force the channel (and its document) to
&gt;+  // explicitly have a null principal.
Well, is there ever a case when we have aForceOwner == true and aLoadingPrincipal isn&apos;t
nullprincipal? The current setup is a bit error prone.
At least add an assertion (MOZ_ASSERT) that if aForceOwner is true, aLoadingPrincipal is nullprincipal



&gt;@@ -2415,16 +2415,25 @@ nsDocument::StartDocumentLoad(const char
&gt;     FindCharInReadable(&apos;;&apos;, semicolon, end);
&gt;     SetContentTypeInternal(Substring(start, semicolon));
&gt;   }
&gt; 
&gt;   RetrieveRelevantHeaders(aChannel);
&gt; 
&gt;   mChannel = aChannel;
&gt; 
&gt;+  // If this document is being loaded by a docshell, copy its sandbox flags
&gt;+  // to the document. These are immutable after being set here.
&gt;+  nsCOMPtr&lt;nsIDocShell&gt; docShell = do_QueryInterface(aContainer);
&gt;+
&gt;+  if (docShell) {
&gt;+    nsresult rv = docShell-&gt;GetSandboxFlags(&amp;mSandboxFlags);
&gt;+    NS_ENSURE_SUCCESS(rv, rv);
&gt;+  }
So, it is not quite clear to me why both docshell and document have the flags


&gt;@@ -473,16 +476,60 @@ nsFrameLoader::ReallyStartLoadingInterna
&gt;   // Just to be safe, recheck uri.
&gt;   rv = CheckURILoad(mURIToLoad);
&gt;   NS_ENSURE_SUCCESS(rv, rv);
&gt; 
&gt;   nsCOMPtr&lt;nsIDocShellLoadInfo&gt; loadInfo;
&gt;   mDocShell-&gt;CreateLoadInfo(getter_AddRefs(loadInfo));
&gt;   NS_ENSURE_TRUE(loadInfo, NS_ERROR_FAILURE);
&gt; 
&gt;+  // Is this an &lt;iframe&gt; with a sandbox attribute or a parent which is
&gt;+  // sandboxed ?
&gt;+  nsHTMLIFrameElement * iframe =
&gt;+    nsHTMLIFrameElement::FromContent(mOwnerContent);
Extra space between nsHTMLIFrameElement and *


&gt;+
&gt;+  PRUint32 sandboxFlags = 0;
&gt;+
&gt;+  if (iframe) {
&gt;+    sandboxFlags = iframe-&gt;GetSandboxFlags();
&gt;+
&gt;+    PRUint32 parentSandboxFlags = 0;
&gt;+
&gt;+    // Get the parent&apos;s sandbox flags, they&apos;re needed to determine if the
&gt;+    // frame being loaded needs to be sandboxed.
&gt;+    nsCOMPtr&lt;nsIDocShellTreeItem&gt; parentDocShellItem;
&gt;+    nsCOMPtr&lt;nsIDocShellTreeItem&gt; curDocShellItem = do_QueryInterface(mDocShell);
&gt;+
&gt;+    if (NS_SUCCEEDED(curDocShellItem-&gt;GetParent(getter_AddRefs(parentDocShellItem)))) {
&gt;+      nsCOMPtr&lt;nsIDocument&gt; parentDoc = do_GetInterface(parentDocShellItem);
&gt;+
&gt;+      if (parentDoc) {
&gt;+        parentSandboxFlags = parentDoc-&gt;SandboxFlags();
&gt;+      }
&gt;+    }
Any reason why not
PRUint32 parentSandboxFlags = iframe-&gt;OwnerDoc()-&gt;GetParentDocument() ?
  iframe-&gt;OwnerDoc()-&gt;GetParentDocument()-&gt;SandboxFlags() : 0;



&gt;+
&gt;+    if (sandboxFlags || parentSandboxFlags) {
&gt;+      if (parentSandboxFlags) {
do you need this if for anything?

&gt;-    return DoSubmit(aEvent);
&gt;+    // Don&apos;t submit if we&apos;re in a sandboxed frame and form submit
&gt;+    // is disabled.
&gt;+    PRUint32 sandboxFlags = doc-&gt;SandboxFlags();
&gt;+
&gt;+    if (!(sandboxFlags &amp; SANDBOXED_FORMS)) {
&gt;+      return DoSubmit(aEvent);
&gt;+    }
Maybe
return doc-&gt;SandboxFlags() &amp; SANDBOXED_FORMS) ? NS_OK : DoSubmit(aEvent);


&gt;+  // Don&apos;t do validation for a form submit done by a sandboxed document that
&gt;+  // doesn&apos;t have &apos;allow-forms&apos;, the submit will have been blocked and the
&gt;+  // HTML5 spec says we shouldn&apos;t validate in this case.
&gt;+  nsIDocument* doc = GetCurrentDoc();
&gt;+  if (doc) {
&gt;+    PRUint32 sandboxFlags = doc-&gt;SandboxFlags();
&gt;+
&gt;+    if (sandboxFlags &amp; SANDBOXED_FORMS) {
&gt;+      return true;
&gt;+    }
No reason for the sandboxFlags variable. Just use the
value from SandboxFlags()

&gt;+nsHTMLIFrameElement::AfterSetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
&gt;+                                    const nsAttrValue* aValue,
&gt;+                                    bool aNotify)

Are there any tests for bfcached documents?
I mean the case when you first load a document to an iframe which has certain sandbox
attribute. Then a new document is loaded. Then sandbox attribute is modified, and
back() is executed so that iframe gets the old document.


&gt;+  // nsIContent
&gt;+  virtual bool ParseAttribute(PRInt32 aNamespaceID,
&gt;+                                nsIAtom* aAttribute,
&gt;+                                const nsAString&amp; aValue,
&gt;+                                nsAttrValue&amp; aResult);
indentation

&gt;+  PRUint32 GetSandboxFlags() {
{ should be in the next line

&gt;+  static nsHTMLIFrameElement* FromContent(nsIContent *aContent)
&gt;+  {
&gt;+    if (aContent-&gt;IsHTML(nsGkAtoms::iframe))
&gt;+      return static_cast&lt;nsHTMLIFrameElement*&gt;(aContent);
if (expr) {
  stmt;
}

&gt;+  // If the document&apos;s sandboxed origin flag is set, access to read cookies
&gt;+  // is prohibited.
&gt;+  if (mSandboxFlags &amp; SANDBOXED_ORIGIN)
&gt;+    return NS_ERROR_DOM_SECURITY_ERR;
if (expr) {
  stmt;
}

&gt;+  // If the document&apos;s sandboxed origin flag is set, access to write cookies
&gt;+  // is prohibited.
&gt;+  if (mSandboxFlags &amp; SANDBOXED_ORIGIN)
&gt;+    return NS_ERROR_DOM_SECURITY_ERR;
ditto


&gt;@@ -2986,16 +2988,73 @@ nsDocShell::FindItemWithName(const PRUni
&gt;             foundItem = nsnull;
&gt;         }
&gt; 
&gt;         if (foundItem) {
&gt;             // We return foundItem here even if it&apos;s not an active
&gt;             // item since all the names we&apos;ve dealt with so far are
&gt;             // special cases that we won&apos;t bother looking for further.
&gt; 
&gt;+            // If our document is sandboxed, we need to do some extra checks.
&gt;+            PRUint32 sandboxFlags = 0;
&gt;+
&gt;+            nsCOMPtr&lt;nsIDocument&gt; doc = do_GetInterface(aOriginalRequestor);
&gt;+
&gt;+            if (doc) {
&gt;+              sandboxFlags = doc-&gt;SandboxFlags();
Docshell uses 4 space indentation. (I know, it is strange.)
You&apos;re mixing 2 and 4 spaces</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6287487</commentid>
              <attachid>621221</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-07 15:43:48 -0700</bug_when>
            <thetext>Comment on attachment 621221
iframe sandbox tests - general v6

Cancelling review, smaug made a good point that the general tests should check the whitespace handling of the attribute works as spec&apos;d - i&apos;ve tested this manually using the MS sandbox test suite and it passes but i think this should be in our automated test suite as well. Will re-submit for review when I get these added.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6293361</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-09 09:44:45 -0700</bug_when>
            <thetext>While addressing smaug&apos;s review comments and working on adding whitespace tests to the general test suite, I found opening the web console now causes an assertion and then a crash : 

Assertion failure: principals == JS_GetCompartmentPrincipals((js::GetContextComp
artment(cx))), at c:/Users/imelven/src/mozilla/caps/src/nsScriptSecurityManager.
cpp:208
TEST-UNEXPECTED-FAIL | automation.py | Exited with code -1073741819 during test
run
INFO | automation.py | Application ran for: 0:00:18.239000
INFO | automation.py | Reading PID log: c:\users\imelven\appdata\local\temp\tmp6
a8av1pidlog
PROCESS-CRASH | automation.py | application crashed (minidump found)

looks like this code changed about a month ago as part of the fix to Bug 739825 - i suspect this might be the result of iframe sandbox&apos;s use of null principals, 
i need to debug to see what&apos;s going on here</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6293426</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-09 10:00:44 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #142)
&gt; Comment on attachment 621203
&gt; iframe sandbox v13

Thanks very much for the feedback - i&apos;ve cleaned up the patch with all of your suggestions. I will reupload it once I sort out the crash in comment 144 and making sure the cleaned up patch passes the bfcache tests I will add to the navigation tests and the whitespace tests I have added to the general tests - i&apos;ve tested both of those manually but completely agree they should be in the automated tests for iframe sandbox.

&gt; Well, is there ever a case when we have aForceOwner == true and
&gt; aLoadingPrincipal isn&apos;t
&gt; nullprincipal? The current setup is a bit error prone.
&gt; At least add an assertion (MOZ_ASSERT) that if aForceOwner is true,
&gt; aLoadingPrincipal is nullprincipal

no, there is no case like that currently - i get the URI from aLoadingPrincipal and then assert that SchemeIs(loadingURI, NS_NULLPRINCIPAL_SCHEME), does that sound alright ? 
 
&gt; So, it is not quite clear to me why both docshell and document have the flags

the idea here is to satisfy the spec requiring that changes to the sandbox flags only take place when the document is next loaded - changes to the attribute get put on the docshell via AfterSetAttr and then are set on the document when it&apos;s loaded. The flags on the document are always used for checking whether things are allowed or not. eg running scripts. 

this is discussed a little in comment 62, 64, 65, 67, 68 

i&apos;m open to other approaches, for example, the document could keep the flags set via AfterSetAttr in another variable and then move them from the current attribute state to the document itself on load. it seems like we will always need to keep the current &apos;desired state&apos; (the attribute) separate from the current &apos;applied state&apos; somehow. 

&gt; Docshell uses 4 space indentation. (I know, it is strange.)
&gt; You&apos;re mixing 2 and 4 spaces

indentation in docshell ALWAYS gets me :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6293444</commentid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-05-09 10:04:22 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #145)
&gt; &gt; So, it is not quite clear to me why both docshell and document have the flags
&gt; 
&gt; the idea here is to satisfy the spec requiring that changes to the sandbox
&gt; flags only take place when the document is next loaded
Ah, ok. Makes sense.
Just add some tests for it, especially for bfcached documents.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6293489</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-09 10:14:55 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #146)
&gt; (In reply to Ian Melven :imelven from comment #145)
&gt; &gt; &gt; So, it is not quite clear to me why both docshell and document have the flags
&gt; &gt; 
&gt; &gt; the idea here is to satisfy the spec requiring that changes to the sandbox
&gt; &gt; flags only take place when the document is next loaded
&gt; Ah, ok. Makes sense.
&gt; Just add some tests for it, especially for bfcached documents.

Most definitely - thanks for the suggestion on using back() - i&apos;m going to add a test like this to the navigation tests 

there&apos;s some other tests along these lines in the navigation tests :

// 5) When a link is clicked in a sandboxed iframe, the document navigated to is sandboxed
// the same as the original document and is not same origin with parent document
// (done by file_iframe_sandbox_d_if6.html which simulates a link click and navigates
// to file_iframe_sandbox_d_if7.html which attempts to call back into its parent).

// 6) An iframe (if_8) has sandbox=&quot;allow-same-origin allow-scripts&quot;, the sandboxed document
// (file_iframe_sandbox_d_if_8.html) that it contains accesses its parent (this file) and removes
// &apos;allow-same-origin&apos; and then triggers a reload.
// The document should not be able to access its parent (this file).

// 7) An iframe (if_9) has sandbox=&quot;allow-same-origin allow-scripts&quot;, the sandboxed document
// (file_iframe_sandbox_d_if_9.html) that it contains accesses its parent (this file) and removes
// &apos;allow-scripts&apos; and then triggers a reload.
// The document should not be able to run a script and access its parent (this file).

are there other cases i should add as well ?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6293556</commentid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-05-09 10:28:56 -0700</bug_when>
            <thetext>Oh, hmm, we don&apos;t actually enable bfcache for frames, at least not by default.
browser.sessionhistory.cache_subframes controls it. So, perhaps no need to test that after all.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6303346</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-12 17:56:30 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #144)
&gt; While addressing smaug&apos;s review comments and working on adding whitespace
&gt; tests to the general test suite, I found opening the web console now causes
&gt; an assertion and then a crash : 
&gt; 
&gt; Assertion failure: principals ==
&gt; JS_GetCompartmentPrincipals((js::GetContextComp
&gt; artment(cx))), at
&gt; c:/Users/imelven/src/mozilla/caps/src/nsScriptSecurityManager.
&gt; cpp:208

the call stack for this looks like :
&gt;	xul.dll!PushPrincipalCallback(JSContext * cx, JSPrincipals * principals)  Line 208 + 0xa bytes	C++
 	mozjs.dll!AutoEnterCompartmentAndPushPrincipal::enter(JSContext * cx, JSObject * target)  Line 523 + 0x19 bytes	C++
 	mozjs.dll!JSStructuredCloneWriter::startWrite(const JS::Value &amp; v)  Line 566 + 0x15 bytes	C++
 	mozjs.dll!JSStructuredCloneWriter::write(const JS::Value &amp; v)  Line 603 + 0xf bytes	C++
 	mozjs.dll!js::WriteStructuredClone(JSContext * cx, const JS::Value &amp; v, unsigned __int64 * * bufp, unsigned int * nbytesp, const JSStructuredCloneCallbacks * cb, void * cbClosure)  Line 69 + 0x21 bytes	C++
 	mozjs.dll!JS_WriteStructuredClone(JSContext * cx, JS::Value v, unsigned __int64 * * bufp, unsigned int * nbytesp, const JSStructuredCloneCallbacks * optionalCallbacks, void * closure)  Line 5978 + 0x1d bytes	C++
 	mozjs.dll!JSAutoStructuredCloneBuffer::write(JSContext * cx, JS::Value v, const JSStructuredCloneCallbacks * optionalCallbacks, void * closure)  Line 6065 + 0x24 bytes	C++
 	xul.dll!nsGlobalWindow::PostMessageMoz(const JS::Value &amp; aMessage, const nsAString_internal &amp; aOrigin, JSContext * aCx)  Line 6208 + 0x23 bytes	C++
 	xul.dll!nsGlobalWindow::PostMessageMoz(const JS::Value &amp; aMessage, const nsAString_internal &amp; aOrigin, JSContext * aCx)  Line 6116 + 0x6e bytes	C++
 	xul.dll!NS_InvokeByIndex_P(nsISupports * that, unsigned int methodIndex, unsigned int paramCount, nsXPTCVariant * params)  Line 103	C++

principals	0x066058fc {refcount=35 debugToken=200546144 }	JSPrincipals *
compartment-&gt;principals principals 0x085a08b4 {refcount=124 debugToken=200546144 }	JSPrincipals *

i&apos;m looking at bug 728250 to try and learn how to use the debugtokens to get more insight into what&apos;s going on here</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6303348</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2012-05-12 18:00:09 -0700</bug_when>
            <thetext>That&apos;s probably just bug 754156.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6303678</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-13 07:39:28 -0700</bug_when>
            <thetext>(In reply to Kyle Huey [:khuey] (khuey@mozilla.com) from comment #150)
&gt; That&apos;s probably just bug 754156.

Ah, thanks Kyle ! i wasn&apos;t sure if it was something introduced by this patch. i&apos;ll watch that and bug 754202 as well. right now the crash happens if you try to open the web console, i&apos;ll try and use another way to debug the tests i&apos;m adding.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6310669</commentid>
              <attachid>624214</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-15 15:32:19 -0700</bug_when>
            <thetext>Created attachment 624214
iframe sandbox tests - general v7

add tests for using the allowed whitespace characters to separate keywords in the value of the sandbox attribute</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6310689</commentid>
              <attachid>624217</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-15 15:37:40 -0700</bug_when>
            <thetext>Created attachment 624217
CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v3

unbitrot.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6310703</commentid>
              <attachid>624220</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-15 15:44:18 -0700</bug_when>
            <thetext>Created attachment 624220
iframe sandbox v14

Address review comments, see comment 145 for some more details. This version of the patch incorporates all of smaug&apos;s suggestions from comment 142.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6313244</commentid>
              <attachid>624484</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-16 12:11:01 -0700</bug_when>
            <thetext>Created attachment 624484
iframe sandbox tests - same origin v4

make the changes to tests suggested by Mounir</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6313258</commentid>
              <attachid>624220</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-16 12:14:39 -0700</bug_when>
            <thetext>Comment on attachment 624220
iframe sandbox v14

The inheritance tests are broken - cancelling review for now.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6313641</commentid>
              <attachid>624522</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-16 14:00:53 -0700</bug_when>
            <thetext>Created attachment 624522
iframe sandbox tests - plugins v2

Make the changes suggested by Mounir</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6320737</commentid>
              <attachid>625316</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-18 17:38:21 -0700</bug_when>
            <thetext>Created attachment 625316
iframe sandbox tests - inheritance v4

Make the changes suggested by Mounir to the inheritance tests.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6320856</commentid>
              <attachid>625329</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-05-18 18:41:53 -0700</bug_when>
            <thetext>Created attachment 625329
iframe sandbox v15

Fix the problem with the inheritance tests. Still working on a test for .back (even though smaug said bfcache isn&apos;t turned on for subframes, i think it&apos;s good to have a test for this) and another test suggested by dveditz that an iframe without &apos;allow-same-origin&apos; when navigated, gets a new, different null principal than it had before the navigation.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6360662</commentid>
              <attachid>625329</attachid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-06-04 03:11:07 -0700</bug_when>
            <thetext>Comment on attachment 625329
iframe sandbox v15


&gt;+nsContentUtils::ParseSandboxAttributeToFlags(const nsAString&amp; aSandboxAttrValue)
&gt;+{
&gt;+  // If there&apos;s a sandbox attribute at all (and there is if this is being
&gt;+  // called), start off by setting all the restriction flags.
&gt;+  PRUint32 out = SANDBOXED_NAVIGATION |
&gt;+    SANDBOXED_TOPLEVEL_NAVIGATION |
&gt;+    SANDBOXED_PLUGINS | SANDBOXED_ORIGIN |
&gt;+    SANDBOXED_FORMS | SANDBOXED_SCRIPTS |
&gt;+    SANDBOXED_AUTOMATIC_FEATURES;
Nit, would be easier to read this if all the values were aligned.
  PRUint32 out = SANDBOXED_NAVIGATION |
                 SANDBOXED_TOPLEVEL_NAVIGATION |
                 SANDBOXED_PLUGINS |
                 SANDBOXED_ORIGIN |
                 SANDBOXED_FORMS |
                 SANDBOXED_SCRIPTS |
                 SANDBOXED_AUTOMATIC_FEATURES;


&gt;   bool inherit;
&gt;   // We expect URIInheritsSecurityContext to return success for an
&gt;   // about:blank URI, so don&apos;t call NS_IsAboutBlank() if this call fails.
&gt;   // This condition needs to match the one in nsDocShell::InternalLoad where
&gt;   // we&apos;re checking for things that will use the owner.
&gt;-  if (NS_SUCCEEDED(URIInheritsSecurityContext(aURI, &amp;inherit)) &amp;&amp;
&gt;-      (inherit || (aSetUpForAboutBlank &amp;&amp; NS_IsAboutBlank(aURI)))) {
&gt;+  if (aForceOwner || ((NS_SUCCEEDED(URIInheritsSecurityContext(aURI, &amp;inherit)) &amp;&amp;
&gt;+      (inherit || (aSetUpForAboutBlank &amp;&amp; NS_IsAboutBlank(aURI)))))) {
&gt;+    // Be certain that aForceOwner is only set for null principals
&gt;+    if (aForceOwner) {
&gt;+      nsCOMPtr&lt;nsIURI&gt; ownerURI;
&gt;+      nsresult rv = aLoadingPrincipal-&gt;GetURI(getter_AddRefs(ownerURI));
&gt;+      MOZ_ASSERT(NS_SUCCEEDED(rv) &amp;&amp; SchemeIs(ownerURI, NS_NULLPRINCIPAL_SCHEME));
&gt;+    }
The if (aForceOwner) is for the assert only, right? Then it should be inside #ifdef DEBUG


&gt;+  if (iframe) {
&gt;+    sandboxFlags = iframe-&gt;GetSandboxFlags();
&gt;+
&gt;+    // The OwnerDoc of an iframe node is the parent document of that &lt;iframe&gt;.
Useless comment.

&gt;+    PRUint32 parentSandboxFlags = iframe-&gt;OwnerDoc() ?
OwnerDoc() is never null, otherwise the method would be called GetOwnerDoc()

&gt;+nsHTMLIFrameElement::AfterSetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
&gt;+                                    const nsAttrValue* aValue,
&gt;+                                    bool aNotify)
&gt;+{
&gt;+  if (aName == nsGkAtoms::sandbox &amp;&amp; aNameSpaceID == kNameSpaceID_None) {
&gt;+    // Parse the new value of the sandbox attribute, and if we have a docshell
&gt;+    // set its sandbox flags appropriately.
&gt;+    if (mFrameLoader) {
&gt;+      nsCOMPtr&lt;nsIDocShell&gt; docshell = mFrameLoader-&gt;GetExistingDocShell();
&gt;+
&gt;+      if (docshell) {
&gt;+        PRUint32 newFlags = 0;
&gt;+        // If a NULL aValue is passed in, we want to clear the sandbox flags
&gt;+        // which we will do by setting them to 0.
&gt;+        if (aValue) {
&gt;+          nsAutoString strValue;
&gt;+          aValue-&gt;ToString(strValue);
&gt;+          newFlags = nsContentUtils::ParseSandboxAttributeToFlags(
&gt;+            strValue);
&gt;+        }
&gt;+        docshell-&gt;SetSandboxFlags(newFlags);
Add some comment why you don&apos;t need to disable plugins here
(you do disabled plugins in nsFrameLoader::ReallyStartLoadingInternal).

&gt;+      }
&gt;+    }
&gt;+  }
&gt;+  return nsGenericHTMLElement::AfterSetAttr(aNameSpaceID, aName, aValue,
&gt;+                                            aNotify);
&gt;+
I hope you have plenty of tests for cases when sandbox attribute is changed dynamically and then
some new page is loaded to iframe.

&gt;+    // Sandboxed document check: javascript: URI&apos;s are disabled
&gt;+    // in a sandboxed document unless &apos;allow-scripts&apos; was specified
&gt;+
&gt;+    // REVIEW - it seems like the original inner window would be the one
&gt;+    // that will execute the javascript with its principal - is this
&gt;+    // assumption correct ?? (and is GetExtantDocument() the right way
&gt;+    // to get the right document ??
&gt;+    nsCOMPtr&lt;nsIDocument&gt; doc = do_QueryInterface(aOriginalInnerWindow-&gt;GetExtantDocument());
&gt;+    if (doc &amp;&amp; (doc-&gt;SandboxFlags() &amp; SANDBOXED_SCRIPTS)) {
&gt;+      return NS_ERROR_DOM_RETVAL_UNDEFINED;
&gt;+    }
There is the inner window check below. So based on that the check looks right.
Though, is it possible to get to this place without a document.
If possible, you should check the sandbox flags of docshell.

...which reminds me, does the patch handle about:blank document properly?
Those documents which are created in nsDocShell::CreateAboutBlankContentViewer


No major problems, but I could take another look, so, new patch please.
This probably requires a review from someone else too.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6366193</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-05 14:31:25 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #160)
&gt; Comment on attachment 625329
&gt; iframe sandbox v15

Thanks for the review ! 

i&apos;ll clean up the stuff you pointed out - i&apos;ll also test about:blank and maybe add some tests around that. I do have quite a few tests around changing the attribute and then reloading the frame or navigating it elsewhere (including the .back test which I added :) )

I also wanted to call out that this patch experiences some asserts/crashes if built without  the patches for bug 754202, i&apos;ve seen the assert mentioned in 144 a couple times and it usually is followed with a crash - i haven&apos;t had time to debug more to understand exactly what the issue is - but in general, i think this patch needs the fix to bug 754202 to land before landing. I would love to understand better why those patches fix the issue and what exactly is going on, I will try to dig in if i have some time.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6366215</commentid>
              <attachid>630331</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-05 14:38:29 -0700</bug_when>
            <thetext>Created attachment 630331
iframe sandbox tests - navigation v6

add two tests :

1) verify that when a new document is loaded into a sandboxed iframe that doesn&apos;t have &apos;allow-same-origin&apos; it gets a new null principal, different from the null principal of the previously loaded document

2) load a document with sandbox=&apos;allow-scripts&apos;, then navigate
it to a new document, then change the sandbox attribute to &apos;allow-scripts allow-same-origin&apos;, navigate back to the original document using .back and verify it can now access its parent, since it is now same origin with it</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6366219</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-05 14:39:51 -0700</bug_when>
            <thetext>one last quick update : i pushed all the patches with the patches for 754202 to try - everything looked good, except the inheritance tests hung and timed out - i can reproduce locally, need to fix them up again.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6382751</commentid>
            <who name="Justin Lebar (not reading bugmail)">justin.lebar+bug</who>
            <bug_when>2012-06-11 21:28:41 -0700</bug_when>
            <thetext>FYI, in bug 742944 I&apos;m also adding an nsHTMLIFrameElement.h.  I may beat you to it.  :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6385422</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-12 13:53:39 -0700</bug_when>
            <thetext>(In reply to Justin Lebar [:jlebar] from comment #164)
&gt; FYI, in bug 742944 I&apos;m also adding an nsHTMLIFrameElement.h.  I may beat you
&gt; to it.  :)

Thanks for the heads up !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6392510</commentid>
              <attachid>633207</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-14 11:32:27 -0700</bug_when>
            <thetext>Created attachment 633207
CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v4

Unbitrot.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6392521</commentid>
              <attachid>633209</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-14 11:35:02 -0700</bug_when>
            <thetext>Created attachment 633209
iframe sandbox v16

Still need to look into the inheritance test hang and address Smaug&apos;s review comments, but unbitrotting so Dev can experiment with CSP sandbox.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6393276</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-14 15:01:09 -0700</bug_when>
            <thetext>Adding 754202 as a dependency. Right now i&apos;m building with this patch queue : 

imelven@WINDOWZ4LYFE ~/src/mozilla
$ hg qseries
iframe_sandbox
iframe_sandbox_worker_string_origin_workaround
iframe_sandbox_check_may_load
Bug-754202-1.patch
Bug-754202-2.patch
Bug-754202-3.patch
Bug-754202-4.patch
Bug-754202-5.patch
Bug-754202-6.patch
Bug-754202-7.patch
Bug-754202-8.patch</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6393628</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-14 16:45:52 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #160)
&gt; Comment on attachment 625329
&gt; iframe sandbox v15

&gt;+nsHTMLIFrameElement::AfterSetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
&gt;+                                    const nsAttrValue* aValue,
&gt;+                                    bool aNotify)
&gt;+{
&gt;+  if (aName == nsGkAtoms::sandbox &amp;&amp; aNameSpaceID == kNameSpaceID_None) {
&gt;+    // Parse the new value of the sandbox attribute, and if we have a docshell
&gt;+    // set its sandbox flags appropriately.
&gt;+    if (mFrameLoader) {
&gt;+      nsCOMPtr&lt;nsIDocShell&gt; docshell = mFrameLoader-&gt;GetExistingDocShell();
&gt;+
&gt;+      if (docshell) {
&gt;+        PRUint32 newFlags = 0;
&gt;+        // If a NULL aValue is passed in, we want to clear the sandbox flags
&gt;+        // which we will do by setting them to 0.
&gt;+        if (aValue) {
&gt;+          nsAutoString strValue;
&gt;+          aValue-&gt;ToString(strValue);
&gt;+          newFlags = nsContentUtils::ParseSandboxAttributeToFlags(
&gt;+            strValue);
&gt;+        }
&gt;+        docshell-&gt;SetSandboxFlags(newFlags);
&gt; Add some comment why you don&apos;t need to disable plugins here
&gt; (you do disabled plugins in nsFrameLoader::ReallyStartLoadingInternal).

is &apos;We don&apos;t disable plugins here because the change in the sandbox attribute
shouldn&apos;t take effect until the document is loaded&apos; an acceptable comment ?
 
i&apos;m not clear if you were suggesting i should possibly disable plugins here - 
maybe that would be something to add to the plugin tests - adding a sandbox
attribute to an iframe that formerly didn&apos;t have one and making sure that plugins
are disabled on reload. i can at least test it manually.

also you mentioned having someone else do a review - can you suggest someone who would be suitable please ? :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6394128</commentid>
              <attachid>633207</attachid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2012-06-14 22:36:13 -0700</bug_when>
            <thetext>Comment on attachment 633207
CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v4

This patch looks great. The only risk I see here is the fact that this means we&apos;re taking a binary incompatible change to nsIPrincipal, which might cause trouble with binary addons etc, but that alone should IMO not be reason enough not to do this cleanup and pave the way for sandboxed workers to do more stuff.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6394135</commentid>
              <attachid>624214</attachid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2012-06-14 22:43:16 -0700</bug_when>
            <thetext>Comment on attachment 624214
iframe sandbox tests - general v7

- In content/base/src/nsContentUtils.cpp:

   if (URIIsLocalFile(aURI) &amp;&amp; aLoadingPrincipal &amp;&amp;
-      NS_SUCCEEDED(aLoadingPrincipal-&gt;CheckMayLoad(aURI, false)) &amp;&amp;
+      NS_SUCCEEDED(aLoadingPrincipal-&gt;CheckMayLoad(aURI, false, false)) &amp;&amp;

This change doesn&apos;t belong in this test patch :)

- In content/html/content/test/file_iframe_sandbox_c_if4.html:

+    threw = false;
+    try {
+      window.showModalDialog(&quot;about:blank&quot;);
+    } catch(error) {
+      threw = true;
+    }

Beware that showModalDialog() is disabled on android and b2g. Probably doesn&apos;t really matter here, so just sayin&apos;.

r=jst</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6394147</commentid>
              <attachid>624484</attachid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2012-06-14 23:02:34 -0700</bug_when>
            <thetext>Comment on attachment 624484
iframe sandbox tests - same origin v4

+    // should NOT be able to access document.cookie
+    try {
+      var foo = document.cookie;
+    } catch(error) {
+      ok(true, &quot;a document sandboxed without allow-same-origin should NOT be able to access document.cookie&quot;);
+    }
+
+    // should NOT be able to access localStorage
+    try {
+      var foo = window.localStorage;
+    } catch(error) {
+      ok(true, &quot;a document sandboxed without allow-same-origin should NOT be able to access localStorage&quot;);
+    }
...

This is more a comment on the functionality here rather than this test, but is this per spec? Seems odd that simply touching a property on the scripts own windnow/document throws an exception... I would&apos;ve expected hiding information, but not throwing on accessing a property that is the base property of a feature. If this matches the spec and other browsers, then so be it, but it seems it&apos;d be more developer friendly if we simply didn&apos;t expose any data through localStorage, or document.cookies was an empty string, etc.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6394233</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-06-15 00:08:47 -0700</bug_when>
            <thetext>@jst: I think the idea is to avoid a data loss: right now, the document being sandboxed doesn&apos;t really have a say in being sandboxed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6394355</commentid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-06-15 01:36:42 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #169)
&gt; &gt; Add some comment why you don&apos;t need to disable plugins here
&gt; &gt; (you do disabled plugins in nsFrameLoader::ReallyStartLoadingInternal).
&gt; 
&gt; is &apos;We don&apos;t disable plugins here because the change in the sandbox attribute
&gt; shouldn&apos;t take effect until the document is loaded&apos; an acceptable comment ?
&quot;... until the next document is loaded...&quot;
But yes, looks ok</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6395732</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-15 10:39:50 -0700</bug_when>
            <thetext>(In reply to Johnny Stenback (:jst, jst@mozilla.com) from comment #171)
&gt; Comment on attachment 624214
&gt; iframe sandbox tests - general v7

Thanks for reviewing the tests !

&gt; This change doesn&apos;t belong in this test patch :)

oops, thanks for catching that.
 
&gt; - In content/html/content/test/file_iframe_sandbox_c_if4.html:
&gt; 
&gt; +    threw = false;
&gt; +    try {
&gt; +      window.showModalDialog(&quot;about:blank&quot;);
&gt; +    } catch(error) {
&gt; +      threw = true;
&gt; +    }
&gt; 
&gt; Beware that showModalDialog() is disabled on android and b2g. Probably
&gt; doesn&apos;t really matter here, so just sayin&apos;.

thanks for the heads up here, as well.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6395742</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-15 10:45:41 -0700</bug_when>
            <thetext>(In reply to Johnny Stenback (:jst, jst@mozilla.com) from comment #172)
&gt; [code that tests that accessing document.cookie in a sandboxed document throws an exception removed for brevity] 
&gt;
&gt; This is more a comment on the functionality here rather than this test, but
&gt; is this per spec? Seems odd that simply touching a property on the scripts
&gt; own windnow/document throws an exception... I would&apos;ve expected hiding
&gt; information, but not throwing on accessing a property that is the base
&gt; property of a feature. If this matches the spec and other browsers, then so
&gt; be it, but it seems it&apos;d be more developer friendly if we simply didn&apos;t
&gt; expose any data through localStorage, or document.cookies was an empty
&gt; string, etc.

I&apos;ll test in a few other browsers. I think I remember that IE does throw an exception in this case. I&apos;m curious now and have previously wondered if this was the correct behavior. 

The spec (http://dev.w3.org/html5/spec/dom.html#sandboxCookies) says : &quot;On getting, if the document is a cookie-free Document object, then the user agent must return the empty string. Otherwise, if the Document&apos;s origin is not a scheme/host/port tuple, the user agent must throw a SecurityError exception.&quot; which seems like it applies to sandboxed documents, fwiw.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396171</commentid>
              <attachid>633639</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-15 13:10:12 -0700</bug_when>
            <thetext>Created attachment 633639
iframe sandbox tests - navigation v7

this patch seems to have been corrupted somehow, i fixed it up. carrying over r+ from jst.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396242</commentid>
              <attachid>633652</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-15 13:32:40 -0700</bug_when>
            <thetext>Created attachment 633652
iframe sandbox tests - general v8

remove the .cpp change that snuck into this patch, thanks Johnny !

carrying over the r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396324</commentid>
            <who name="Daira Hopwood">daira</who>
            <bug_when>2012-06-15 14:07:10 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #176)
&gt; The spec (http://dev.w3.org/html5/spec/dom.html#sandboxCookies) says : &quot;On
&gt; getting, if the document is a cookie-free Document object, then the user
&gt; agent must return the empty string. Otherwise, if the Document&apos;s origin is
&gt; not a scheme/host/port tuple, the user agent must throw a SecurityError
&gt; exception.&quot; which seems like it applies to sandboxed documents, fwiw.

Ugh, that&apos;s mandating an information leak about whether the document has cookies. Maybe a minor leak, but I don&apos;t understand why it should exist: if allow-same-origin is not set, then the clear intent is that no information about cookies should be available.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396359</commentid>
            <who name="Daira Hopwood">daira</who>
            <bug_when>2012-06-15 14:14:28 -0700</bug_when>
            <thetext>(In reply to David-Sarah Hopwood from comment #179)
&gt; Ugh, that&apos;s mandating an information leak about whether the document has
&gt; cookies. Maybe a minor leak, but I don&apos;t understand why it should exist: if
&gt; allow-same-origin is not set, then the clear intent is that no information
&gt; about cookies should be available.

Oh, and another reason not to do it that way is that it&apos;s a testing hazard for web developers. They test when there are no cookies, it works, then the parent document adds cookies (which has no reason to make any difference), and it breaks because the code in the sandboxed document didn&apos;t expect the exception.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396508</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-15 14:59:09 -0700</bug_when>
            <thetext>(In reply to David-Sarah Hopwood from comment #180)
&gt; (In reply to David-Sarah Hopwood from comment #179)
&gt; &gt; Ugh, that&apos;s mandating an information leak about whether the document has
&gt; &gt; cookies. Maybe a minor leak, but I don&apos;t understand why it should exist: if
&gt; &gt; allow-same-origin is not set, then the clear intent is that no information
&gt; &gt; about cookies should be available.
&gt; 
&gt; Oh, and another reason not to do it that way is that it&apos;s a testing hazard
&gt; for web developers. They test when there are no cookies, it works, then the
&gt; parent document adds cookies (which has no reason to make any difference),
&gt; and it breaks because the code in the sandboxed document didn&apos;t expect the
&gt; exception.

those are good points. the implementation in the patch in this bug throws an exception even when there are no cookies for a site.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396608</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-15 15:25:52 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #176)
&gt;
&gt; I&apos;ll test in a few other browsers. I think I remember that IE does throw an
&gt; exception in this case. I&apos;m curious now and have previously wondered if this
&gt; was the correct behavior. 

IE 10 and Webkit (Chome) do both throw exceptions (security error) on accessing document.cookie from a sandboxed document, even when the site has not set any cookies.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396638</commentid>
            <who name="Daira Hopwood">daira</who>
            <bug_when>2012-06-15 15:34:19 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #182)
&gt; IE 10 and Webkit (Chome) do both throw exceptions (security error) on
&gt; accessing document.cookie from a sandboxed document, even when the site has
&gt; not set any cookies.

OK, can someone raise it with WHATWG to get the spec changed for the no-cookie case?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396854</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-15 16:57:50 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #160)
&gt; Comment on attachment 625329
&gt; iframe sandbox v15
&gt;
&gt; ...which reminds me, does the patch handle about:blank document properly?
&gt; Those documents which are created in
&gt; nsDocShell::CreateAboutBlankContentViewer

I tested manually, and it looks to me like about:blank is correctly sandboxed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396857</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-15 16:59:24 -0700</bug_when>
            <thetext>(In reply to David-Sarah Hopwood from comment #183)
&gt; (In reply to Ian Melven :imelven from comment #182)
&gt; &gt; IE 10 and Webkit (Chome) do both throw exceptions (security error) on
&gt; &gt; accessing document.cookie from a sandboxed document, even when the site has
&gt; &gt; not set any cookies.
&gt; 
&gt; OK, can someone raise it with WHATWG to get the spec changed for the
&gt; no-cookie case?

I posted to the WHATWG list, thanks for bringing this up ! Adam Barth agrees that the existing behavior, which is as you described, makes sense, as do I.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396928</commentid>
              <attachid>633731</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-15 17:25:36 -0700</bug_when>
            <thetext>Created attachment 633731
iframe sandbox tests - inheritance v5

Fix the problem with the inheritance tests never finishing - carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6396961</commentid>
              <attachid>633735</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-15 17:38:43 -0700</bug_when>
            <thetext>Created attachment 633735
iframe sandbox v17

I checked manually to make sure plugins behave as expected when adding and removing a sandbox attribute and think I&apos;ve addressed the previous round of review comments.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6404179</commentid>
              <attachid>633735</attachid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-06-19 11:49:04 -0700</bug_when>
            <thetext>Comment on attachment 633735
iframe sandbox v17


&gt;+  static PRUint32 ParseSandboxAttributeToFlags(const nsAString&amp;
&gt;+                                                 aSandboxAttr);
Odd indentation. aSandboxAttr should fit in to the previous line.


&gt;+      if (token.LowerCaseEqualsLiteral(&quot;allow-scripts&quot;)) {
&gt;+        out &amp;= ~SANDBOXED_SCRIPTS;
&gt;+      } else if (token.LowerCaseEqualsLiteral(&quot;allow-same-origin&quot;)) {
&gt;+        out &amp;= ~SANDBOXED_ORIGIN;
&gt;+      } else if (token.LowerCaseEqualsLiteral(&quot;allow-forms&quot;)) {
&gt;+        out &amp;= ~SANDBOXED_FORMS;
&gt;+      } else if (token.LowerCaseEqualsLiteral(&quot;allow-scripts&quot;)) {
&gt;+        // allow-scripts removes both SANDBOXED_SCRIPTS and
&gt;+        // SANDBOXED_AUTOMATIC_FEATURES.
&gt;+        out &amp;= ~SANDBOXED_SCRIPTS;
&gt;+        out &amp;= ~SANDBOXED_AUTOMATIC_FEATURES;
&gt;+      } else if (token.LowerCaseEqualsLiteral(&quot;allow-top-navigation&quot;)) {
&gt;+        out &amp;= ~SANDBOXED_TOPLEVEL_NAVIGATION;
&gt;+      }
&gt;+    }
&gt;+  }

So why you don&apos;t handle allow-popups?
And why you handle allow-scripts twice?
Do you have any tests for not having SANDBOXED_AUTOMATIC_FEATURES?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6404383</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-19 12:46:53 -0700</bug_when>
            <thetext>allow-popups seems to have made it into the spec - i would like to add it to this initial implementation.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6404656</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-19 13:42:29 -0700</bug_when>
            <thetext>After a little more thought, i think it makes more sense to focus on landing this initial iframe sandbox support and handling allow-popups in a follow up, i&apos;ve filed bug 766282 as this follow up. Right now, the current patch for this bug always blocks popups, so this is a &apos;fail closed&apos; situation - there&apos;s just no way to opt in to allowing popups yet. 

As discussed with smaug on irc, there&apos;s no automatic features tests yet because automatic features are also intended to be done in a followup, which is bug 752551.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6404798</commentid>
              <attachid>634584</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-19 14:12:36 -0700</bug_when>
            <thetext>Created attachment 634584
iframe sandbox v18

(In reply to Olli Pettay [:smaug] from comment #188)
&gt; Comment on attachment 633735
&gt; iframe sandbox v17
&gt; 
&gt; 
&gt; &gt;+  static PRUint32 ParseSandboxAttributeToFlags(const nsAString&amp;
&gt; &gt;+                                                 aSandboxAttr);
&gt; Odd indentation. aSandboxAttr should fit in to the previous line.

oops, it does, fixed - thanks ! 

&gt; So why you don&apos;t handle allow-popups?

filed a followup for allow-popups, see previous comment for details

&gt; And why you handle allow-scripts twice?

oops - thanks for catching this ! fixed in this patch.

&gt; Do you have any tests for not having SANDBOXED_AUTOMATIC_FEATURES?

explained in previous comment

thanks !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6405093</commentid>
              <attachid>634620</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-19 15:22:30 -0700</bug_when>
            <thetext>Created attachment 634620
workaround for workers needing a string origin v2

unbitrot, carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6412273</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-21 14:46:12 -0700</bug_when>
            <thetext>I was curious just how dependent on 754202 these patches are so i pushed just the iframe sandbox tests to try : https://tbpl.mozilla.org/?tree=Try&amp;rev=b4c4bdc7cb94

the results look pretty good, actually. i&apos;m going to try using a Nightly with iframe sandbox support for a bit to get a better sense of the stability.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6414594</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-22 09:23:35 -0700</bug_when>
            <thetext>Dev suggested making SetSandboxFlags fail if the flags would be less restrictive than the currently are - with a special case for clearing the flags completely. This seems like a nice little bit of defense in depth, I&apos;ll look at adding this some time in the near future, could always be done as a quick followup too.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6414668</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-06-22 09:41:39 -0700</bug_when>
            <thetext>Further, a &apos;IntersectSandboxFlags&apos; function that implements the intersection algorithm that you implemented for nested sandboxes, which I can then use for CSP Sandbox.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6414891</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-22 10:43:31 -0700</bug_when>
            <thetext>(In reply to Devdatta Akhawe from comment #195)
&gt; Further, a &apos;IntersectSandboxFlags&apos; function that implements the intersection
&gt; algorithm that you implemented for nested sandboxes, which I can then use
&gt; for CSP Sandbox.

that&apos;s just a OR between the parent and the child&apos;s flags, since the flags always add restrictions, see the code in nsFrameLoader in the patch</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6416318</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-22 18:19:12 -0700</bug_when>
            <thetext>Looking at the try results again I got &quot;15217 ERROR TEST-UNEXPECTED-FAIL | /tests/content/html/content/test/test_iframe_sandbox_plugins.html | an unexpected uncaught JS exception reported through window.onerror - TypeError: p.startWatchingInstanceCount is not a function at http://mochi.test:8888/tests/content/html/content/test/test_iframe_sandbox_plugins.html:31&quot; on Android opt.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6419649</commentid>
              <attachid>634584</attachid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-06-25 07:37:40 -0700</bug_when>
            <thetext>Comment on attachment 634584
iframe sandbox v18

&gt;+
&gt;+      // Set up the actual sandboxing for plugins as specified.
&gt;+      if (sandboxFlags &amp; SANDBOXED_PLUGINS) {
&gt;+        mDocShell-&gt;SetAllowPlugins(false);
&gt;+      }
&gt;+    }
&gt;+  }
So it is never possible to enable plugins if they are once disabled for an iframe?


&gt; 
&gt;+  // If this document is sandboxed without &apos;allow-scripts&apos;, abort.
&gt;+  if (mDocument-&gt;SandboxFlags() &amp; SANDBOXED_SCRIPTS) {
&gt;+    // REVIEW : this probably isn&apos;t the right error..
&gt;+    return NS_ERROR_DOM_SECURITY_ERR;
&gt;+  }
Do we want to return error at all? Would NS_OK work - just don&apos;t execute or load the script?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6420078</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-06-25 09:24:27 -0700</bug_when>
            <thetext>I think throwing a security error is useful. Say I wanted to allow scripts but had a typo and ended up saying allw-scripts. It is useful to debug that during testing if the console shows me a security error &quot;refused to execute scripts&quot;</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6420876</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-25 12:27:44 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #198)
&gt; Comment on attachment 634584
&gt; iframe sandbox v18
&gt; 
&gt; &gt;+
&gt; &gt;+      // Set up the actual sandboxing for plugins as specified.
&gt; &gt;+      if (sandboxFlags &amp; SANDBOXED_PLUGINS) {
&gt; &gt;+        mDocShell-&gt;SetAllowPlugins(false);
&gt; &gt;+      }
&gt; &gt;+    }
&gt; &gt;+  }
&gt; So it is never possible to enable plugins if they are once disabled for an
&gt; iframe?

as discussed on IRC, if the sandbox attribute is removed from the iframe, plugins should be re-enabled for the next document loaded - reading back through the comments, i realized i tested the other case (adding a sandbox attribute and reloading blocks plugins) but not this case. I&apos;ll fix this case and see if I can add a test to the mochitests for it as well. 
 
&gt; &gt; 
&gt; &gt;+  // If this document is sandboxed without &apos;allow-scripts&apos;, abort.
&gt; &gt;+  if (mDocument-&gt;SandboxFlags() &amp; SANDBOXED_SCRIPTS) {
&gt; &gt;+    // REVIEW : this probably isn&apos;t the right error..
&gt; &gt;+    return NS_ERROR_DOM_SECURITY_ERR;
&gt; &gt;+  }
&gt; Do we want to return error at all? Would NS_OK work - just don&apos;t execute or
&gt; load the script?

The closest piece of the spec I can find says :

&quot;If scripting is disabled for browsing context passed to this algorithm, then abort these steps, as if the script did nothing but return void.&quot;

which implies to me there should not be an error. It&apos;s probably a good idea for me to check what the other browsers do in this case as well.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6424452</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-26 11:28:27 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #200)
&gt; &gt; &gt; 
&gt; &gt; &gt;+  // If this document is sandboxed without &apos;allow-scripts&apos;, abort.
&gt; &gt; &gt;+  if (mDocument-&gt;SandboxFlags() &amp; SANDBOXED_SCRIPTS) {
&gt; &gt; &gt;+    // REVIEW : this probably isn&apos;t the right error..
&gt; &gt; &gt;+    return NS_ERROR_DOM_SECURITY_ERR;
&gt; &gt; &gt;+  }
&gt; &gt; Do we want to return error at all? Would NS_OK work - just don&apos;t execute or
&gt; &gt; load the script?
&gt; 
&gt; The closest piece of the spec I can find says :
&gt; 
&gt; &quot;If scripting is disabled for browsing context passed to this algorithm,
&gt; then abort these steps, as if the script did nothing but return void.&quot;
&gt; 
&gt; which implies to me there should not be an error. It&apos;s probably a good idea
&gt; for me to check what the other browsers do in this case as well.

I verified that Chrome and IE 10 don&apos;t throw an error in this case, i&apos;ll change the patch to return NS_OK as suggested when i clean up the plugin stuff. Thanks for the suggestion here, smaug !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6424508</commentid>
            <who name="Daira Hopwood">daira</who>
            <bug_when>2012-06-26 11:42:55 -0700</bug_when>
            <thetext>It seems to me that the spec (and other browsers) saying not to throw a visible error, does not imply that there can&apos;t or shouldn&apos;t be a warning on the console. Warnings are purely a quality of implementation issue, and I agree with Devdatta Akhawe in comment:199 that it might help debugging.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6424557</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-26 11:55:12 -0700</bug_when>
            <thetext>(In reply to David-Sarah Hopwood from comment #202)
&gt; It seems to me that the spec (and other browsers) saying not to throw a
&gt; visible error, does not imply that there can&apos;t or shouldn&apos;t be a warning on
&gt; the console. Warnings are purely a quality of implementation issue, and I
&gt; agree with Devdatta Akhawe in comment:199 that it might help debugging.

That&apos;s a reasonable point, i suggest this would be best as a followup, please feel free to file a bug for the warning, dependent on this bug. There&apos;s already another followup bug to add logging when an iframe&apos;s sandbox attribute is such that the sandbox could be removed, see bug 752559.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6425255</commentid>
            <who name="Daira Hopwood">daira</who>
            <bug_when>2012-06-26 15:07:05 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #203)
&gt; That&apos;s a reasonable point, i suggest this would be best as a followup,
&gt; please feel free to file a bug for the warning, dependent on this bug.

Filed as bug 768664.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6425262</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-26 15:09:46 -0700</bug_when>
            <thetext>(In reply to David-Sarah Hopwood from comment #204)
&gt; (In reply to Ian Melven :imelven from comment #203)
&gt; &gt; That&apos;s a reasonable point, i suggest this would be best as a followup,
&gt; &gt; please feel free to file a bug for the warning, dependent on this bug.
&gt; 
&gt; Filed as bug 768664.

Thank you for filing ! I like that the bug is quite general - and it fits in nicely with our efforts to do more logging around CSP and mixed content issues in the console as well.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6434743</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-06-29 13:36:36 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #197)
&gt; Looking at the try results again I got &quot;15217 ERROR TEST-UNEXPECTED-FAIL |
&gt; /tests/content/html/content/test/test_iframe_sandbox_plugins.html | an
&gt; unexpected uncaught JS exception reported through window.onerror -
&gt; TypeError: p.startWatchingInstanceCount is not a function at
&gt; http://mochi.test:8888/tests/content/html/content/test/
&gt; test_iframe_sandbox_plugins.html:31&quot; on Android opt.

i spoke to jmaher on irc and it seems that plugin tests should be skipped on Android. i&apos;ll take care of that in the updated plugin test patch i&apos;m working on.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6439957</commentid>
              <attachid>638540</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-02 16:56:54 -0700</bug_when>
            <thetext>Created attachment 638540
workaround for workers needing a string origin v3

Unbitrot, carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6439971</commentid>
              <attachid>638541</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-02 17:03:11 -0700</bug_when>
            <thetext>Created attachment 638541
iframe sandbox v19

* Add a flag to docshell to track if a sandbox attribute was cleared from a document - if so, plugins need to be re-enabled for the next document loaded in the docshell. I&apos;m open to other ways of doing this, so please let me know if another approach is preferred.

* Change the script blocking to return NS_OK as discussed in comment 200 and comment 201</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6440032</commentid>
              <attachid>638547</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-02 17:32:06 -0700</bug_when>
            <thetext>Created attachment 638547
iframe sandbox tests - plugins v3

Add these tests :

* test that when a plugin is loaded in an unsandboxed iframe, a sandbox attribute is then added to the iframe and the document containing the plugin is reloaded, the plugin does not load in the sandboxed iframe 

* test that when when a sandboxed iframe&apos;s sandbox attribute is removed,
and a new document is loaded into the iframe, the plugin loads 

I still need to make these tests be skipped on Android, will do that shortly.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6442455</commentid>
              <attachid>638823</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-03 11:55:22 -0700</bug_when>
            <thetext>Created attachment 638823
iframe sandbox tests - plugins v4

Skip the plugin tests on Android (thanks for the help jmaher!)

Johnny, not sure if adding the new tests warrants more review so I r?&apos;d to you instead of carrying over the previous r+ :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6442901</commentid>
              <attachid>638541</attachid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-07-03 14:07:18 -0700</bug_when>
            <thetext>Comment on attachment 638541
iframe sandbox v19


&gt;+  // If this document is being loaded by a docshell, copy its sandbox flags
&gt;+  // to the document. These are immutable after being set here.
&gt;+  nsCOMPtr&lt;nsIDocShell&gt; docShell = do_QueryInterface(aContainer);
&gt;+
&gt;+  if (docShell) {
&gt;+    nsresult rv = docShell-&gt;GetSandboxFlags(&amp;mSandboxFlags);
&gt;+    NS_ENSURE_SUCCESS(rv, rv);
&gt;+
&gt;+    // Additionally, if this docshell had its document&apos;s sandbox
&gt;+    // attribute removed prior to this load, we need to re-enable
&gt;+    // plugins for this docshell.
&gt;+    bool sandboxCleared;
&gt;+    if (NS_SUCCEEDED(docShell-&gt;GetSandboxCleared(&amp;sandboxCleared)) &amp;&amp;
&gt;+         sandboxCleared) {
&gt;+      docShell-&gt;SetAllowPlugins(true);
&gt;+      docShell-&gt;SetSandboxCleared(false);
&gt;+    } 
&gt;+  }
This doesn&apos;t work if you remove sandbox attribute and add it then back and then load a new document.



&gt;+    // Sandboxed document check: javascript: URI&apos;s are disabled
&gt;+    // in a sandboxed document unless &apos;allow-scripts&apos; was specified.
&gt;+    nsCOMPtr&lt;nsIDocument&gt; doc = do_QueryInterface(aOriginalInnerWindow-&gt;GetExtantDocument());
No need for nsCOMPtr if you use aOriginalInnerWindow-&gt;GetExtantDoc()</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6442920</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-03 14:12:07 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #211)
&gt; Comment on attachment 638541
&gt; iframe sandbox v19
&gt; 
&gt; 
&gt; &gt;+  // If this document is being loaded by a docshell, copy its sandbox flags
&gt; &gt;+  // to the document. These are immutable after being set here.
&gt; &gt;+  nsCOMPtr&lt;nsIDocShell&gt; docShell = do_QueryInterface(aContainer);
&gt; &gt;+
&gt; &gt;+  if (docShell) {
&gt; &gt;+    nsresult rv = docShell-&gt;GetSandboxFlags(&amp;mSandboxFlags);
&gt; &gt;+    NS_ENSURE_SUCCESS(rv, rv);
&gt; &gt;+
&gt; &gt;+    // Additionally, if this docshell had its document&apos;s sandbox
&gt; &gt;+    // attribute removed prior to this load, we need to re-enable
&gt; &gt;+    // plugins for this docshell.
&gt; &gt;+    bool sandboxCleared;
&gt; &gt;+    if (NS_SUCCEEDED(docShell-&gt;GetSandboxCleared(&amp;sandboxCleared)) &amp;&amp;
&gt; &gt;+         sandboxCleared) {
&gt; &gt;+      docShell-&gt;SetAllowPlugins(true);
&gt; &gt;+      docShell-&gt;SetSandboxCleared(false);
&gt; &gt;+    } 
&gt; &gt;+  }
&gt; This doesn&apos;t work if you remove sandbox attribute and add it then back and
&gt; then load a new document.

Gah, thanks for catching that.. I&apos;ll fix that. Seems like I can handle that case by doing a SetSandboxCleared(false) in AfterSetAttr if the attribute is being added. 

&gt; &gt;+    // Sandboxed document check: javascript: URI&apos;s are disabled
&gt; &gt;+    // in a sandboxed document unless &apos;allow-scripts&apos; was specified.
&gt; &gt;+    nsCOMPtr&lt;nsIDocument&gt; doc = do_QueryInterface(aOriginalInnerWindow-&gt;GetExtantDocument());
&gt; No need for nsCOMPtr if you use aOriginalInnerWindow-&gt;GetExtantDoc()

cool, i&apos;ll fix that up too.

Thanks for your ongoing reviews !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6443187</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-07-03 15:27:20 -0700</bug_when>
            <thetext>In bug 671389, we apply the sandbox flags to the document and not the docshell (since in CSP, the sandbox is only for the document). Relying on docshell flags for enforcing the &quot;disallow plugins&quot; requirement, won&apos;t work for CSP sandbox. Does anyone have a suggestion for how to fix this concern?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6448893</commentid>
              <attachid>639552</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-05 18:37:13 -0700</bug_when>
            <thetext>Created attachment 639552
iframe sandbox v20

This fixes the issue discussed in comment 211 and 212 involving adding and removing the sandbox attribute and correctly enabling and disabling plugins. I tested adding and removing the attribute in various combinations and then navigating the sandbox document. 

I did a try run earlier this week and there were problems with some of the tests timing out, I&apos;m looking into that now.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6449477</commentid>
              <attachid>639552</attachid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-07-06 03:26:41 -0700</bug_when>
            <thetext>Comment on attachment 639552
iframe sandbox v20


&gt;+  // If this document is being loaded by a docshell, copy its sandbox flags
&gt;+  // to the document. These are immutable after being set here.
&gt;+  nsCOMPtr&lt;nsIDocShell&gt; docShell = do_QueryInterface(aContainer);
&gt;+
&gt;+  if (docShell) {
&gt;+    nsresult rv = docShell-&gt;GetSandboxFlags(&amp;mSandboxFlags);
&gt;+    NS_ENSURE_SUCCESS(rv, rv);
&gt;+
&gt;+    // Additionally, if this docshell had its document&apos;s sandbox
&gt;+    // attribute removed prior to this load, we need to re-enable
&gt;+    // plugins for this docshell.
&gt;+    bool sandboxCleared;
&gt;+    if (NS_SUCCEEDED(docShell-&gt;GetSandboxCleared(&amp;sandboxCleared)) &amp;&amp;
&gt;+         sandboxCleared) {
&gt;+      docShell-&gt;SetAllowPlugins(true);
&gt;+      docShell-&gt;SetSandboxCleared(false);

This looks wrong. What if user has explicitly disabled all the plugins?
Also, I don&apos;t understand how the sandboxCleared handles the case when sandbox attribute
isn&apos;t removed but just changed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6450613</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-06 11:08:48 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #215)
&gt; Comment on attachment 639552
&gt; iframe sandbox v20
&gt; 
&gt; 
&gt; &gt;+  // If this document is being loaded by a docshell, copy its sandbox flags
&gt; &gt;+  // to the document. These are immutable after being set here.
&gt; &gt;+  nsCOMPtr&lt;nsIDocShell&gt; docShell = do_QueryInterface(aContainer);
&gt; &gt;+
&gt; &gt;+  if (docShell) {
&gt; &gt;+    nsresult rv = docShell-&gt;GetSandboxFlags(&amp;mSandboxFlags);
&gt; &gt;+    NS_ENSURE_SUCCESS(rv, rv);
&gt; &gt;+
&gt; &gt;+    // Additionally, if this docshell had its document&apos;s sandbox
&gt; &gt;+    // attribute removed prior to this load, we need to re-enable
&gt; &gt;+    // plugins for this docshell.
&gt; &gt;+    bool sandboxCleared;
&gt; &gt;+    if (NS_SUCCEEDED(docShell-&gt;GetSandboxCleared(&amp;sandboxCleared)) &amp;&amp;
&gt; &gt;+         sandboxCleared) {
&gt; &gt;+      docShell-&gt;SetAllowPlugins(true);
&gt; &gt;+      docShell-&gt;SetSandboxCleared(false);
&gt; 
&gt; This looks wrong. What if user has explicitly disabled all the plugins?

I&apos;m not sure how to handle the &apos;plugins are explicitly disabled&apos; case. I thought about setting another flag if the sandbox disabled plugins but this doesn&apos;t fix the problem. I suppose I could check the pref (i assume there is one) but that seems a little heavyweight? I&apos;ll look to see if there&apos;s other ways I can tell the user has explicitly disabled plugins.

&gt; Also, I don&apos;t understand how the sandboxCleared handles the case when
&gt; sandbox attribute
&gt; isn&apos;t removed but just changed.

In this case I think plugins should already be disabled from when the sandbox attribute was first added and sandboxCleared doesn&apos;t need to do anything, or am I missing something ?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6450729</commentid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-07-06 11:40:20 -0700</bug_when>
            <thetext>But what if the new value for the sandbox should enable plugins?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6450820</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-06 12:02:28 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #217)
&gt; But what if the new value for the sandbox should enable plugins?

plugins are always disabled in a sandboxed document, per the spec (unless the plugin is &apos;securable&apos; which means it understands and obeys any sandboxing restrictions on the document embedding it - afaik no plugin yet does this).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6450830</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-06 12:05:33 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #216)
&gt; 
&gt; I&apos;m not sure how to handle the &apos;plugins are explicitly disabled&apos; case. I
&gt; thought about setting another flag if the sandbox disabled plugins but this
&gt; doesn&apos;t fix the problem. I suppose I could check the pref (i assume there is
&gt; one) but that seems a little heavyweight? I&apos;ll look to see if there&apos;s other
&gt; ways I can tell the user has explicitly disabled plugins.

keeler pointed me to some code in nsPluginHost that checks the pref plugin.disable

http://mxr.mozilla.org/mozilla-central/source/dom/plugins/base/nsPluginHost.cpp#318

318   mPluginsDisabled = Preferences::GetBool(&quot;plugin.disable&quot;, false);

I need to look into the plugin code more to see where the docshell flag is checked to see if there&apos;s an issue here, it may be that the pref overrides whether plugins are enabled on the docshell or not (it should, since they will be in the usual, non-sandboxed case).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6451214</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-07-06 14:07:58 -0700</bug_when>
            <thetext>Why do we need this sandboxcleared stuff at all?

I thought the model was @sandbox sets flags on docshell.  Document inherits docshell flags at creation time.  All checks use the document&apos;s flags.  Are we actually using SetAllowPlugins on the docshell to disable plugins as far as sandbox is concerned?  If so, that&apos;s wrong.  What we should do instead is find the places that GetAllowPlugins and have those ask the _document_ instead.  And the document can GetAllowPlugins(), and if true check its sandbox flags and so forth.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6451230</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-07-06 14:11:05 -0700</bug_when>
            <thetext>In particular, you probably just need to fix nsWebBrowserContentPolicy.cpp here, I bet.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6451252</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-06 14:15:35 -0700</bug_when>
            <thetext>(In reply to Boris Zbarsky (:bz) from comment #221)
&gt; In particular, you probably just need to fix nsWebBrowserContentPolicy.cpp
&gt; here, I bet.

ok, this approach makes a lot of sense and is more consistent with the rest of the functionality and the spec as well. It also addresses Dev&apos;s concern with disabling plugins via CSP sandbox and follows the approach he discussed with dveditz, of asking the docshell first and then asking the document (really meaning see if it has SANDBOXED_PLUGINS set)

Thanks Boris !!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6471091</commentid>
              <attachid>642024</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-13 13:36:47 -0700</bug_when>
            <thetext>Created attachment 642024
iframe sandbox v21

I changed the handling of plugins to be as bz described in comment 220.

In this patch all the callers of GetAllowPlugins always ask the document, which first asks the docshell and then checks if its SANDBOXED_PLUGINS flag is set. 

This passes the plugin tests attached in this bug.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6476998</commentid>
              <attachid>642024</attachid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-07-16 12:06:01 -0700</bug_when>
            <thetext>Comment on attachment 642024
iframe sandbox v21


&gt;         bool isNewWindow = false;
&gt;         if (!targetDocShell) {
&gt;+            // If the docshell&apos;s document is sandboxed and was trying to
&gt;+            // navigate/load a frame it wasn&apos;t allowed to access, the
&gt;+            // FindItemWithName above will have returned null for the target
&gt;+            // item - we don&apos;t want to actually open a new window in this case
&gt;+            // though. Check if we are sandboxed and bail out here if so.
&gt;+            NS_ENSURE_TRUE(mContentViewer, NS_ERROR_FAILURE);
&gt;+            nsIDocument* doc = mContentViewer-&gt;GetDocument();
&gt;+            PRUint32 sandboxFlags = 0;
&gt;+            sandboxFlags = doc-&gt;SandboxFlags();
Null check doc


&gt;+  nsCOMPtr&lt;nsIContentViewer&gt; cv;
&gt;+  docShell-&gt;GetContentViewer(getter_AddRefs(cv));
&gt;+  NS_ENSURE_SUCCESS(rv, rv);
&gt;+  NS_ENSURE_TRUE(cv, NS_ERROR_FAILURE);
&gt;+
&gt;+  nsIDocument * doc = cv-&gt;GetDocument();
&gt;+  NS_ENSURE_TRUE(doc, NS_ERROR_FAILURE);
&gt;+
&gt;+  rv = doc-&gt;GetAllowPlugins(&amp;tmp);
This code is repeated many times. We really need some helper code.
Perhaps add 
[noscript, notxpcom] pluginsAllowedInCurrentDoc(); 
to nsIDocShell.

Then in C++ you could just call
NS_ENSURE_STATE(docshell-&gt;PluginsAllowedInCurrentDoc());

Or 
NS_ENSURE_TRUE(docshell-&gt;PluginsAllowedInCurrentDoc(), &lt;the error code you want to use&gt;);</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6477052</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-16 12:25:08 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #224)
&gt; Comment on attachment 642024
&gt; iframe sandbox v21
&gt;
&gt; &gt;+            nsIDocument* doc = mContentViewer-&gt;GetDocument();
&gt; &gt;+            PRUint32 sandboxFlags = 0;
&gt; &gt;+            sandboxFlags = doc-&gt;SandboxFlags();
&gt; Null check doc

will do.
 
&gt; &gt;+  nsCOMPtr&lt;nsIContentViewer&gt; cv;
&gt; &gt;+  docShell-&gt;GetContentViewer(getter_AddRefs(cv));
&gt; &gt;+  NS_ENSURE_SUCCESS(rv, rv);
&gt; &gt;+  NS_ENSURE_TRUE(cv, NS_ERROR_FAILURE);
&gt; &gt;+
&gt; &gt;+  nsIDocument * doc = cv-&gt;GetDocument();
&gt; &gt;+  NS_ENSURE_TRUE(doc, NS_ERROR_FAILURE);
&gt; &gt;+
&gt; &gt;+  rv = doc-&gt;GetAllowPlugins(&amp;tmp);
&gt; This code is repeated many times. We really need some helper code.
&gt; Perhaps add 
&gt; [noscript, notxpcom] pluginsAllowedInCurrentDoc(); 
&gt; to nsIDocShell.
&gt; 
&gt; Then in C++ you could just call
&gt; NS_ENSURE_STATE(docshell-&gt;PluginsAllowedInCurrentDoc());
&gt; 
&gt; Or 
&gt; NS_ENSURE_TRUE(docshell-&gt;PluginsAllowedInCurrentDoc(), &lt;the error code you
&gt; want to use&gt;);

i like that idea a lot, i will make this change.

I am still having problems with the general and navigation tests - they are hanging in a weird way that I need to look into some more.

Before landing, I also need to sync up with dveditz again to make sure the secreview requirements are addressed.

Additionally, in comment 160, Olli suggested having someone else look at the patch - when I make the changes above I will r? to jst and Johnny can either look at it or suggest a good additional reviewer :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6478492</commentid>
              <attachid>638823</attachid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2012-07-16 19:03:00 -0700</bug_when>
            <thetext>Comment on attachment 638823
iframe sandbox tests - plugins v4

+function doTest() { 
+	// 1) test that a plugin can&apos;t be loaded with &lt;embed&gt; inside a sandboxed &lt;iframe&gt;
+	// (done by file_iframe_sandbox_f_if1.html loaded in if1 below)
+	// 2) test that a plugin can&apos;t be loaded with &lt;object&gt; inside a sandboxed &lt;iframe&gt;
+	// (done by file_iframe_sandbox_f_if1.html loaded in if1 below)
+	// 3) test that plugin can&apos;t be loaded by a sandboxed &lt;iframe&gt; with src pointing to
+	// a document that is handled by a plugin (done by if_2 below)
+  // 4) test that when a plugin is loaded in an unsandboxed iframe, a sandbox attribute
+  // is then added to the iframe and the document containing the plugin is reloaded,
+  // the plugin does not load in the sandboxed iframe (done with if_3 below)
...

Looks like a mix of spaces and tabs used for indentation here, in this whole file. Maybe go through and remove all tabs to be consistent...

r=jst</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6480608</commentid>
              <attachid>643055</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-17 11:29:12 -0700</bug_when>
            <thetext>Created attachment 643055
iframe sandbox tests - plugins v5

Clean up tabs and whitespace in these tests, thanks jst ! Carrying over the r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6485023</commentid>
              <attachid>643557</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-18 13:29:04 -0700</bug_when>
            <thetext>Created attachment 643557
iframe sandbox v22

Make the changes described by smaug in comment 224, including creating pluginsAllowedInCurrentDoc(). Carrying over the r+ but please feel free to take another look !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6485293</commentid>
              <attachid>643557</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-18 14:31:06 -0700</bug_when>
            <thetext>Comment on attachment 643557
iframe sandbox v22

Olli suggested that someone else look at this - jst: could you take a look or suggest a good second reviewer ? Thanks !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6485632</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-18 16:08:25 -0700</bug_when>
            <thetext>The problem with the general and navigation tests looks to be that the load event isn&apos;t firing, so doTest() never gets called. I&apos;m trying to figure out why...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6485727</commentid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-07-18 16:37:38 -0700</bug_when>
            <thetext>What kinds of tests are you writing? Use pageshow which fires for bfcached documents too.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6485743</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-18 16:42:35 -0700</bug_when>
            <thetext>(In reply to Olli Pettay [:smaug] from comment #231)
&gt; What kinds of tests are you writing? Use pageshow which fires for bfcached
&gt; documents too.

mochitests - the patches attached to this bug. They were working previously, then I updated m-c and they no longer work. What&apos;s weird is that the other sets of tests (plugins, same-origin etc) also all use addLoadEvent() and seem to be working fine. I will give pageshow a try, although it seems like the bfcache shouldn&apos;t be an issue ?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6492834</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-20 15:11:54 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #230)
&gt; The problem with the general and navigation tests looks to be that the load
&gt; event isn&apos;t firing, so doTest() never gets called. I&apos;m trying to figure out
&gt; why...

ok, onload isn&apos;t firing for iframes without &apos;allow-scripts&apos;

i&apos;ll add a test for this after i fix it, as well.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6492896</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-20 15:23:32 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #233)
&gt; (In reply to Ian Melven :imelven from comment #230)
&gt; &gt; The problem with the general and navigation tests looks to be that the load
&gt; &gt; event isn&apos;t firing, so doTest() never gets called. I&apos;m trying to figure out
&gt; &gt; why...
&gt; 
&gt; ok, onload isn&apos;t firing for iframes without &apos;allow-scripts&apos;
&gt; 
&gt; i&apos;ll add a test for this after i fix it, as well.

Actually i&apos;m not sure if that&apos;s exactly the problem, since i&apos;m not sure if onload not firing for the child frame means the onload for the top level page won&apos;t fire. What i&apos;m seeing is that when iframes without allow-scripts are included in the top level page, the top level&apos;s page onload doesn&apos;t fire, and the onload for the child frame without &apos;allow-scripts&apos; also doesn&apos;t fire.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6493127</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-20 16:37:41 -0700</bug_when>
            <thetext>Ok, it&apos;s this change to nsScriptLoader.cpp from comment 208 that broke my tests :

// If this document is sandboxed without &apos;allow-scripts&apos;, abort.
if (mDocument-&gt;SandboxFlags() &amp; SANDBOXED_SCRIPTS) {
-  return NS_ERROR_DOM_SECURITY_ERR;
+  return NS_OK;
}

it seems that if i return NS_OK here, the onload handlers for the iframe with the sandbox attribute and its parent page don&apos;t fire.

i need to dig more.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6493294</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-20 17:51:32 -0700</bug_when>
            <thetext>I debugged nsScriptLoader some more and tried out returning different values from and setting requests as blocking the parser in ProcessScriptElement and have a very slightly betetr idea what&apos;s going on but i&apos;m not sure what the right thing to do here is yet.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6493838</commentid>
              <attachid>643557</attachid>
            <who name=":Ms2ger (he/him; ⌚ UTC+1/+2)">Ms2ger</who>
            <bug_when>2012-07-21 03:47:53 -0700</bug_when>
            <thetext>Comment on attachment 643557
iframe sandbox v22

Review of attachment 643557:
-----------------------------------------------------------------

::: content/base/src/nsDocument.h
@@ +566,5 @@
&gt;                                 nsStyleSet* aStyleSet,
&gt;                                 nsIPresShell** aInstancePtrResult);
&gt;    virtual void DeleteShell();
&gt;  
&gt; +  virtual nsresult GetAllowPlugins (bool* aAllowPlugins);

Np space before (

::: content/html/content/src/nsHTMLFormElement.cpp
@@ +656,5 @@
&gt;        return NS_OK;
&gt;      }
&gt; +    // Don&apos;t submit if we&apos;re in a sandboxed frame and form submit
&gt; +    // is disabled.
&gt; +    return (doc-&gt;SandboxFlags() &amp; SANDBOXED_FORMS) ? NS_OK : DoSubmit(aEvent);

I&apos;d prefer

// Don&apos;t submit if we&apos;re not in a document or if we&apos;re in
// a sandboxed frame and form submit is disabled.
if (!doc || (doc-&gt;SandboxFlags() &amp; SANDBOXED_FORMS)) {
  return NS_OK;
}
return DoSubmit(aEvent);

@@ +1662,5 @@
&gt; +  // doesn&apos;t have &apos;allow-forms&apos;, the submit will have been blocked and the
&gt; +  // HTML5 spec says we shouldn&apos;t validate in this case.
&gt; +  nsIDocument* doc = GetCurrentDoc();
&gt; +  if (doc &amp;&amp; (doc-&gt;SandboxFlags() &amp; SANDBOXED_FORMS)) {
&gt; +      return true;

Two-space indentation

::: content/html/content/src/nsHTMLIFrameElement.cpp
@@ +202,5 @@
&gt;  
&gt; +nsresult
&gt; +nsHTMLIFrameElement::AfterSetAttr(PRInt32 aNameSpaceID, nsIAtom* aName,
&gt; +                                    const nsAttrValue* aValue,
&gt; +                                    bool aNotify)

Indentation is off

::: content/html/content/src/nsHTMLIFrameElement.h
@@ +12,5 @@
&gt; +#include &quot;nsMappedAttributes.h&quot;
&gt; +#include &quot;nsDOMError.h&quot;
&gt; +#include &quot;nsRuleData.h&quot;
&gt; +#include &quot;nsStyleConsts.h&quot;
&gt; +#include &quot;nsContentUtils.h&quot;

I have to say I find it hard to believe that you need all of those in the header.

::: docshell/base/Makefile.in
@@ +89,5 @@
&gt;    -I$(srcdir)/../shistory/src \
&gt;    -I$(topsrcdir)/dom/base \
&gt;    -I$(topsrcdir)/layout/base \
&gt;    -I$(topsrcdir)/xpcom/ds \
&gt; +  -I$(topsrcdir)/content/base/src \

Just put nsSandboxFlags.h in EXPORTS instead.

::: docshell/base/nsDocShell.cpp
@@ +3064,5 @@
&gt; +                        if (tmp &amp;&amp; tmp == foundItem) {
&gt; +                            // This is an ancestor, and we are sandboxed.
&gt; +                            // Unless allow-top-navigation is set, we can&apos;t allow this.
&gt; +                            if (sandboxFlags &amp; SANDBOXED_TOPLEVEL_NAVIGATION) {
&gt; +                              foundItem = nsnull;

Indentation

@@ +11942,5 @@
&gt; +nsDocShell::PluginsAllowedInCurrentDoc()
&gt; +{
&gt; +  bool pluginsAllowed = false;
&gt; +
&gt; +  if (mContentViewer) {

Early return if mContentViewer or doc is null

@@ +11943,5 @@
&gt; +{
&gt; +  bool pluginsAllowed = false;
&gt; +
&gt; +  if (mContentViewer) {
&gt; +    nsIDocument * doc = mContentViewer-&gt;GetDocument();

* to the left

::: dom/base/nsGlobalWindow.cpp
@@ +8230,5 @@
&gt;      }
&gt;  
&gt; +    // If the document has the sandboxed origin flag set
&gt; +    // don&apos;t allow access to localStorage.
&gt; +    if (mDoc &amp;&amp; (mDoc-&gt;SandboxFlags() &amp; SANDBOXED_ORIGIN)) {

Fail open or fail closed when mDoc is null? Ask someone who knows when that happens

::: dom/base/nsPluginArray.cpp
@@ +66,5 @@
&gt;  
&gt;  bool
&gt;  nsPluginArray::AllowPlugins()
&gt;  {
&gt;    bool allowPlugins = false;

No need for this local

::: dom/src/jsurl/Makefile.in
@@ +29,5 @@
&gt;  LOCAL_INCLUDES += \
&gt;  		-I$(srcdir) \
&gt;  		-I$(topsrcdir)/dom/base \
&gt;  		-I$(topsrcdir)/netwerk/base/src \
&gt; +		-I$(topsrcdir)/content/base/src \

Same here

::: dom/src/jsurl/nsJSProtocolHandler.cpp
@@ +194,5 @@
&gt; +    // Sandboxed document check: javascript: URI&apos;s are disabled
&gt; +    // in a sandboxed document unless &apos;allow-scripts&apos; was specified.
&gt; +    nsIDocument* doc = aOriginalInnerWindow-&gt;GetExtantDoc();
&gt; +    if (doc &amp;&amp; (doc-&gt;SandboxFlags() &amp; SANDBOXED_SCRIPTS)) {
&gt; +      return NS_ERROR_DOM_RETVAL_UNDEFINED;

4-space, I think

::: editor/composer/src/nsEditingSession.cpp
@@ +201,2 @@
&gt;  
&gt;    mPluginsEnabled = tmp;

mPluginsEnabled = docShell-&gt;PluginsAllowedInCurrentDoc();

::: embedding/browser/webBrowser/nsWebBrowserContentPolicy.cpp
@@ +38,5 @@
&gt;          return NS_OK;
&gt;  
&gt;      nsresult rv;
&gt;      bool allowed = true;
&gt; +    nsCOMPtr&lt;nsIContentViewer&gt; cv;

I have no idea what this is for

@@ +43,4 @@
&gt;  
&gt;      switch (contentType) {
&gt;        case nsIContentPolicy::TYPE_OBJECT:
&gt; +        allowed = shell-&gt;PluginsAllowedInCurrentDoc();

You&apos;re no initializing rv here, so you&apos;re touching bogus memory later in this function.

::: embedding/components/windowwatcher/src/Makefile.in
@@ +29,5 @@
&gt;  FORCE_STATIC_LIB = 1
&gt;  
&gt;  # For nsJSUtils
&gt; +LOCAL_INCLUDES += -I$(topsrcdir)/dom/base \
&gt; +		  -I$(topsrcdir)/content/base/src \

Same

::: embedding/components/windowwatcher/src/nsWindowWatcher.cpp
@@ +586,5 @@
&gt; +      if (doc) {
&gt; +        PRUint32 sandboxFlags = 0;
&gt; +        sandboxFlags = doc-&gt;SandboxFlags();
&gt; +
&gt; +        if (sandboxFlags &amp; SANDBOXED_NAVIGATION) {

if (doc &amp;&amp; (doc-&gt;SandboxFlags() &amp; SANDBOXED_NAVIGATION)) {</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6494076</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-21 08:05:07 -0700</bug_when>
            <thetext>(In reply to :Ms2ger from comment #237)

thanks for the review !

i&apos;ll work on cleaning all this up - one thing :

&gt;&gt; +    return (doc-&gt;SandboxFlags() &amp; SANDBOXED_FORMS) ? NS_OK : DoSubmit(aEvent);

&gt; I&apos;d prefer
&gt; // Don&apos;t submit if we&apos;re not in a document or if we&apos;re in
&gt; // a sandboxed frame and form submit is disabled.
&gt; if (!doc || (doc-&gt;SandboxFlags() &amp; SANDBOXED_FORMS)) {
&gt;   return NS_OK;

smaug asked for this bit to be this way in the review in comment 142. to be honest, personally i prefer the style of your suggestion, i find it easier to read. 

and of course, i still need to figure out what to do with blocking scripts and firing onload correctly as discussed in comment 236.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6509097</commentid>
              <attachid>646296</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-26 13:33:11 -0700</bug_when>
            <thetext>Created attachment 646296
iframe sandbox v23

* With help from Jonas, fix the onload problems with blocking script mentioned - the general and navigation tests work again

* Address ms2ger&apos;s review comments from comment  with help from bz

* Carrying over Olli&apos;s r+ but would be happy to have it looked over again if he likes, and r? to jst for review or to find a 2nd reviewer.

Next up : try out the cases dveditz and I discussed during our secreview meeting and see if that uncovers any issues. 

Recent try run (looks quite good) : https://tbpl.mozilla.org/?tree=Try&amp;rev=553e91717ded</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6509103</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-26 13:34:45 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #239)

oops ! should be : 

&gt; * Address ms2ger&apos;s review comments from comment 237 with help from bz</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6509643</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-26 15:22:50 -0700</bug_when>
            <thetext>Here is how one of the test cases that dveditz suggested behaves :

&lt;iframe sandbox=&quot;&quot; src=&apos;javascript:&quot;&lt;html&gt;&lt;script&gt;window.alert(1);&lt;/script&gt;INNER FRAME FROM JS&lt;/html&gt;&quot;;&apos;&gt;&lt;/iframe&gt;

in this case, the frame loads and shows &apos;INNER FRAME FROM JS&apos; but the alert does not fire, unless &apos;allow-scripts&apos; is specified for the sandbox attribute. This seems correct to me.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6509919</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-26 16:44:49 -0700</bug_when>
            <thetext>Another test case from dveditz :

start with &lt;iframe sandbox=&apos;allow-same-origin&apos;&gt;
then change this iframe&apos;s src via JS to be &apos;javascript:&quot;&lt;html&gt;&lt;script&gt;window.alert(1);&lt;/script&gt;INNER FRAME FROM JS&lt;/html&gt;&quot;;&apos;

this does not work unless the iframe has sandbox=&apos;allow-scripts&apos; as well. This does seem a little weird, I was expecting that this would work but the alert would not fire along the lines of comment 241. I&apos;m not too concerned about this, I suppose, but will discuss it with dveditz.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6510199</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-07-26 18:17:35 -0700</bug_when>
            <thetext>&gt; this does not work unless the iframe has sandbox=&apos;allow-scripts&apos; as well. 

I believe this is expected.  Certainly in our implementation, but presumably per spec too.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6510306</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-26 19:04:22 -0700</bug_when>
            <thetext>(In reply to Boris Zbarsky (:bz) from comment #243)
&gt; &gt; this does not work unless the iframe has sandbox=&apos;allow-scripts&apos; as well. 
&gt; 
&gt; I believe this is expected.  Certainly in our implementation, but presumably
&gt; per spec too.

I suppose the difference is the javascript: URI being assigned to src is evaluated in the context of the existing document when there is one whereas for &lt;iframe src=&quot;javascript: etc&quot;&gt; there&apos;s no existing doc that&apos;s been sandboxed yet until the javascript: URI is evaluated ?  That makes some sense to me.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6510312</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-07-26 19:06:42 -0700</bug_when>
            <thetext>There&apos;s an existing doc in the &lt;iframe src=&quot;javascript:&quot;&gt; case as well.  I don&apos;t see why they aren&apos;t behaving identically; they should be.  If they&apos;re not, _that_&apos;s a bug.  Imo.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6510324</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-26 19:12:49 -0700</bug_when>
            <thetext>(In reply to Boris Zbarsky (:bz) from comment #245)
&gt; There&apos;s an existing doc in the &lt;iframe src=&quot;javascript:&quot;&gt; case as well.  I
&gt; don&apos;t see why they aren&apos;t behaving identically; they should be.  If they&apos;re
&gt; not, _that_&apos;s a bug.  Imo.

ok - that matches my original assumption: both the case with &lt;iframe sandbox=&quot;&quot; src=&quot;javascript:&quot;&gt; and the case where an existing &lt;iframe sandbox=&quot;&quot;&gt; has its src modified by its parent should behave the same. 

Thanks, I&apos;ll do some debugging !</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6512407</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-27 12:14:08 -0700</bug_when>
            <thetext>Results of testing another of Dan&apos;s ideas : using a data:text/html URI as the source for an iframe with the sandbox attribute. This works as I would expect with embedding script tags in the data URI, at least - they do not execute unless the sandbox attribute specifies &apos;allow-scripts&apos;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6512493</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-27 12:42:22 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #247)
&gt; Results of testing another of Dan&apos;s ideas : using a data:text/html URI as
&gt; the source for an iframe with the sandbox attribute. This works as I would
&gt; expect with embedding script tags in the data URI, at least - they do not
&gt; execute unless the sandbox attribute specifies &apos;allow-scripts&apos;.

A note to myself to make sure origins and &apos;allow-same-origin&apos; work as it seems they should in these cases as well - ie for javascript: data: and blob URI&apos;s as the src of a sandboxed iframe.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6512544</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-27 12:57:18 -0700</bug_when>
            <thetext>Blob URIs work as I would expect - if you use a Blob URI as the src for an iframe with a sandbox attribute, scripts embedded in the blob do not execute without &apos;allow-scripts&apos; and the iframe is not same origin with its parent without &apos;allow-same-origin. I checked that a data: URI as the src of an iframe with a sandbox attribute is also not same origin with its parent unless &apos;allow-same-origin&apos; is specified. 

Looks like I need to clean up the javascript: discrepancy discussed in comment 246 and test origin stuff for javascript: URI&apos;s and then see if Dan has any more ideas :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6512626</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-27 13:28:26 -0700</bug_when>
            <thetext>Origins and &apos;allow-same-origin&apos; with javascript: URIs seems to work correctly.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6512631</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-27 13:29:11 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #250)
&gt; Origins and &apos;allow-same-origin&apos; with javascript: URIs seems to work
&gt; correctly.

when using javascript: URI&apos;s as the src of a sandboxed iframe, i mean.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6513271</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-27 16:15:39 -0700</bug_when>
            <thetext>(In reply to Boris Zbarsky (:bz) from comment #245)
&gt; There&apos;s an existing doc in the &lt;iframe src=&quot;javascript:&quot;&gt; case as well.  I
&gt; don&apos;t see why they aren&apos;t behaving identically; they should be.  If they&apos;re
&gt; not, _that_&apos;s a bug.  Imo.

i understand what&apos;s going on with the test cases now, to some degree :

the relevant code is in dom/src/jsurl/nsJSProtocolHandler.cpp&apos;s JSThunk::EvaluateScript() :

+    // Sandboxed document check: javascript: URI&apos;s are disabled
+    // in a sandboxed document unless &apos;allow-scripts&apos; was specified.
+    nsIDocument* doc = aOriginalInnerWindow-&gt;GetExtantDoc();
+    if (doc &amp;&amp; (doc-&gt;SandboxFlags() &amp; SANDBOXED_SCRIPTS)) {
+        return NS_ERROR_DOM_RETVAL_UNDEFINED;
+    }
+

the intent of this is to stop stuff like onload=&apos;javascript: ...&apos; working when scripts are disabled due to sandboxing. 

The test case with &lt;iframe sandbox=&apos;&apos; src=&apos;javascript: ...html...&apos;&gt; goes through this code and doc is &apos;about:blank&apos;

The test case with &lt;iframe sandbox=&apos;&apos; src=&apos;some_html_file.html&apos;&gt;, if you change the src in an event handler such as a button click or onload, when this code is hit, doc will point to that html document, which will have its sandbox flags set. 

This behavior does seem a little strange - suggestions on how to address it are welcome, I&apos;ll keep thinking about it.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6513291</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-07-27 16:24:58 -0700</bug_when>
            <thetext>You should probably set sandbox flags correctly in CreateAboutBlankContentViewer?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6513374</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-27 16:51:42 -0700</bug_when>
            <thetext>(In reply to Boris Zbarsky (:bz) from comment #253)
&gt; You should probably set sandbox flags correctly in
&gt; CreateAboutBlankContentViewer?

gah, smaug mentioned that before - when he did, i tested &lt;iframe src=&apos;about:blank&apos;&gt; which works as it goes through the frame loader and is correctly sandboxed. The about:blank that&apos;s in an iframe before loading any src attribute is not correctly sandboxed as you point out. 

I&apos;m curious about how other browsers handle this case, it seems pretty weird to check if the &lt;iframe&gt;&apos;s sandbox attribute allows scripting to control whether the parent can successfully set its src to be a javascript: URI ?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6513615</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-07-27 19:02:59 -0700</bug_when>
            <thetext>&lt;iframe src=&quot;javascript:&quot;&gt; runs the script in the script context of the iframe, not the parent.  So it should probably apply the iframe&apos;s sandbox flags.  But it&apos;s worth double-checking what the spec actually says for this case.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6513667</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-07-27 19:52:11 -0700</bug_when>
            <thetext>Me and imelven chatted about this. 

Let me paste some spec writings:

Note 1:
&quot;When a browsing context is first created, it must be created with a single Document in its session history, whose address is about:blank&quot;
from http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#browsing-context

Note 2:
&quot;These flags only take effect when the nested browsing context of the iframe is navigated.&quot;
from http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox


Note 3:
&quot;
If a browsing context is being navigated to a javascript: URL, and the source browsing context for that navigation, if any, has scripting disabled
let result be void
&quot; 

From from http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#concept-js-deref

-----
the key question is: Is the loading of about:blank on docshell creation (note 1) a navigation event (note 2)? Looking at the way the spec is phrased (note 1), I would say it is not. This means, the about:blank doc doesn&apos;t have any sandboxing flags, which means the javascript: should execute.

Note that, even if the src=javascript: executes, the alert below shouldn&apos;t execute

&lt;iframe sandbox=&quot;&quot; src=&quot;javascript:&apos;&lt;script&gt;alert();&lt;/script&gt;&apos;&quot;&gt;

because when the document with this 1 script node is created, a navigation event happened, and the sandbox flags should be copied, and the alert should be disabled.

----

that said, I think we are going against the spirit of the spec. I think the spec really should be changed to say &quot;When a browsing context is created, navigate it to about:blank&quot;  instead of &quot;create it with about:blank in session history&quot;. Alternatively, one could say &quot;create with about:blank in session history&quot; really means &quot;navigate from ⊥ to about:blank&quot;. 

The iframe spec for example also says
&quot;The sandbox attribute, when specified, enables a set of extra restrictions on any content hosted by the iframe.&quot;

which I would argue, also includes the about:blank first loaded.

Chrome also disables the javascript: for src, which is what we should aim for. Thus I vote for fixing this in aboutblankcontentviewer</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6513685</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2012-07-27 20:21:27 -0700</bug_when>
            <thetext>&gt; Is the loading of about:blank on docshell creation (note 1) a navigation event

I don&apos;t believe it is.

Which means that if you have &lt;iframe sandbox&gt; (no src) and you createElement a &lt;script&gt; and put it inside, it should run, per current spec.  It sounds like you want to not do that, and I tend to agree.  What do other UAs do?

&gt; which means the javascript: should execute.

That depends on the definition of &quot;source browsing context for that navigation&quot;, right?  Sounds to me like the spec is saying that it&apos;s the scripting state of the source browsing context, not the scripting state of the browsing context that&apos;s being navigated, that&apos;s relevant here, so it&apos;s possible that a javascript: src should execute in some of these cases even if the document it&apos;s running against is in fact sandboxed.  Again, worth checking what other UAs do and whether the spec makes sense.

&gt; Note that, even if the src=javascript: executes, the alert below shouldn&apos;t execute

Agreed.

&gt; I think the spec really should be changed to say &quot;When a browsing context is created,
&gt; navigate it to about:blank&quot;

No, because &quot;navigate&quot; is a specific, asynchronous, algorithm.

But it might make sense for the spec to say that when this about:blank creation happens the current sandbox flags of the navigation context are applied to the resulting document.

Whatever we decide to do, we should:

1)  Make sure we have tests for all the cases involved in our tree.
2)  Raise any discrepancies between what we do and what the spec says as spec issues.
3)  Contribute the testcases to the spec test suite.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6513722</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-07-27 21:51:27 -0700</bug_when>
            <thetext>Chrome doesn&apos;t execute javascript: URI src if sandbox is set. I think we should replicate that behavior. 

&gt; But it might make sense for the spec to say that when this about:blank
&gt; creation happens the current sandbox flags of the navigation context are
&gt; applied to the resulting document.

+1</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6514542</commentid>
            <who name="Hixie (not reading bugmail)">ian</who>
            <bug_when>2012-07-28 11:06:47 -0700</bug_when>
            <thetext>I&apos;ll fix the spec. The intent is that the magic initial about:blank also be sandboxed. For various reasons, navigating to it isn&apos;t quite the right solution, but I don&apos;t recall off-hand what those reasons are. Please assume for now that the spec will be updated to say that the about:blank initial document acts for sandboxing as if the iframe had been navigated to it. (Not sure when I&apos;ll be able to actually fix the spec.)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6517838</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-07-30 12:59:46 -0700</bug_when>
            <thetext>Thanks devd, bz and hixie for the discussion ! I&apos;m going to make CreateAboutBlankContentViewer apply the sandbox flags and add tests for various cases of &lt;iframe sandbox=&quot;&quot; src=javascript: ...&gt; to the general tests in this patch. 

Note to self : have a quick look at data: and blob: again after making this change as well.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6531215</commentid>
              <attachid>648903</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-03 16:57:10 -0700</bug_when>
            <thetext>Created attachment 648903
iframe sandbox tests - general v9

Add tests for src=&quot;javascript:&apos;... some HTML with script call in it ...&apos;;&quot; both as the initial src of a sandboxed iframe with and without &apos;allow-scripts&apos; and as a navigated src of a sandboxed iframe with and without &apos;allow-scripts&apos;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6531889</commentid>
              <attachid>649004</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-04 09:07:10 -0700</bug_when>
            <thetext>Created attachment 649004
CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v5

Unbitrot, carry over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6531893</commentid>
              <attachid>649005</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-04 09:09:09 -0700</bug_when>
            <thetext>Created attachment 649005
workaround for workers needing a string origin v4

Unbitrot, carrying over the r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6531897</commentid>
              <attachid>649006</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-04 09:18:01 -0700</bug_when>
            <thetext>Created attachment 649006
iframe sandbox v24

* Apply the docshell&apos;s sandbox flags to the document created by CreateAboutBlankContentViewer, this fixes the discrepancy discussed in comment 252 through comment 259, thanks again bz, devd, and hixie :D 

r?&apos;ing to jst for a 2nd review or to find a 2nd reviewer after smaug&apos;s r+ 

i will ping dveditz again to see how he feels about this secreview wise. 

My goal is to try and land this in Firefox 17, if possible.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6531898</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-04 09:19:02 -0700</bug_when>
            <thetext>A try run with the current set of patches : https://tbpl.mozilla.org/?tree=Try&amp;rev=473ab79f4881</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6535151</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-06 14:50:31 -0700</bug_when>
            <thetext>Just spoke to dveditz again about the secreview for this bug and he has said it&apos;s ok to land this on nightly with the test suite in this bug :)

When we move on to CSP sandbox, &apos;allow-popups&apos; or other additions to iframe sandbox, those should be discussed with dveditz and go through secreview again.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6535585</commentid>
              <attachid>649006</attachid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2012-08-06 16:55:23 -0700</bug_when>
            <thetext>Comment on attachment 649006
iframe sandbox v24

Given that we block access to localStorage if the SANDBOXED_ORIGIN flag is set, should we do the same thing for IndexedDB?

r=jst for this patch either way, if need be, we can follow up in separate patches to block access to IndexedDB.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6535595</commentid>
            <who name="Robert O&apos;Callahan (:roc) (email my personal email if necessary)">roc</who>
            <bug_when>2012-08-06 16:59:30 -0700</bug_when>
            <thetext>A sandboxed iframe must definitely not have access to the IndexedDB databases of its origin!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6535612</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-06 17:04:08 -0700</bug_when>
            <thetext>(In reply to Robert O&apos;Callahan (:roc) (Mozilla Corporation) from comment #268)
&gt; A sandboxed iframe must definitely not have access to the IndexedDB
&gt; databases of its origin!

yeah, jst and i just chatted about that, i&apos;m in total agreement. Going to post to whatwg to bring it up there spec-wise. i assume that Webkit and IE 10 have implemented this restriction too, but we will see :)

I&apos;ll add another patch to block indexedDB if &apos;allow-same-origin&apos; isn&apos;t specified and also add some tests around this.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6535909</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-06 20:00:51 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #269)
&gt;
&gt; I&apos;ll add another patch to block indexedDB if &apos;allow-same-origin&apos; isn&apos;t
&gt; specified and also add some tests around this.

indexedDB is blocked in an iframe that&apos;s sandboxed without &apos;allow-same-origin&apos; - the error when you try to open the DB is &quot;UnknownError: The operation failed for reasons unrelated to the database itself and not covered by any other error code.&quot;. We could possibly log a better error in this case, but that seems ok to do as a followup. 

I&apos;ll add a couple tests to the general tests and also clean up the patches wrt bug #&apos;s in  commit messages etc. to get ready for landing.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6535921</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-08-06 20:07:39 -0700</bug_when>
            <thetext>In general, any persistent mechanism should automatically fail since we are running in  a NullPrincipal. This includes cookies, localStorage, indexedDb, sessionStorage, the filesystem APIs and so on. If it does succeed (i.e., no JS error is shown), the result won&apos;t ever be accessible again. If this is not the case, then that&apos;s a separate bug.

We do want to fail loudly so as to prevent data loss. This sucks because every new persistent storage mechanism will require a &quot;sandbox failure mode&quot; patch.

I suggest creating a separate bug that tries to catch all such persistent write failures, and automatically replaces those errors with a &quot;Failed because you are sandboxed&quot;</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6541166</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 11:47:52 -0700</bug_when>
            <thetext>(In reply to Devdatta Akhawe from comment #271)
&gt; In general, any persistent mechanism should automatically fail since we are
&gt; running in  a NullPrincipal. This includes cookies, localStorage, indexedDb,
&gt; sessionStorage, the filesystem APIs and so on. If it does succeed (i.e., no
&gt; JS error is shown), the result won&apos;t ever be accessible again. If this is
&gt; not the case, then that&apos;s a separate bug.
&gt; 
&gt; We do want to fail loudly so as to prevent data loss. This sucks because
&gt; every new persistent storage mechanism will require a &quot;sandbox failure mode&quot;
&gt; patch.
&gt; 
&gt; I suggest creating a separate bug that tries to catch all such persistent
&gt; write failures, and automatically replaces those errors with a &quot;Failed
&gt; because you are sandboxed&quot;

does bug 768664 cover this ?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6541260</commentid>
            <who name="Devdatta Akhawe [:devd]">dev.akhawe+mozilla</who>
            <bug_when>2012-08-08 12:04:29 -0700</bug_when>
            <thetext>yes!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542197</commentid>
              <attachid>650371</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:07:20 -0700</bug_when>
            <thetext>Created attachment 650371
iframe sandbox v25

Unbitrot, clean up commit message in patch in preparation for landing.

Carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542201</commentid>
              <attachid>650373</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:09:07 -0700</bug_when>
            <thetext>Created attachment 650373
CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v6

Unbitrot, clean up commit message in patch in preparation for landing.

Carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542204</commentid>
              <attachid>650374</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:10:06 -0700</bug_when>
            <thetext>Created attachment 650374
workaround for workers needing a string origin v5

Unbitrot, clean up commit message in patch in preparation for landing.

Carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542212</commentid>
              <attachid>650376</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:13:34 -0700</bug_when>
            <thetext>Created attachment 650376
iframe sandbox tests - general v10

Clean up commit message in patch in preparation for landing.

Carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542215</commentid>
              <attachid>650377</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:14:35 -0700</bug_when>
            <thetext>Created attachment 650377
iframe sandbox tests - inheritance v6

Clean up commit message in patch in preparation for landing.

Carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542216</commentid>
              <attachid>650378</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:15:21 -0700</bug_when>
            <thetext>Created attachment 650378
iframe sandbox tests - workers v3

Clean up commit message in patch in preparation for landing.

Carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542218</commentid>
              <attachid>650379</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:17:19 -0700</bug_when>
            <thetext>Created attachment 650379
iframe sandbox tests - same origin v5

Clean up commit message in patch in preparation for landing.

Carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542221</commentid>
              <attachid>650381</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:18:17 -0700</bug_when>
            <thetext>Created attachment 650381
iframe sandbox tests - navigation v8

Clean up commit message in patch in preparation for landing.

Carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542230</commentid>
              <attachid>650383</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:21:14 -0700</bug_when>
            <thetext>Created attachment 650383
iframe sandbox tests - plugins v6

Clean up commit message in patch in preparation for landing.

Carrying over r+</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542236</commentid>
              <attachid>650384</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:24:55 -0700</bug_when>
            <thetext>Created attachment 650384
block indexed db in a sandboxed document without &apos;allow-same-origin&apos; + tests

I decided to explicitly block indexedDB the same way I did localStorage and sessionStorage, it seems safer that way.

I also added tests that indexedDB access is blocked in a sandboxed document without &apos;allow-same-origin&apos; and allowed in a sandboxed document with &apos;allow-same-origin&apos;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542253</commentid>
              <attachid>650386</attachid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:35:40 -0700</bug_when>
            <thetext>Created attachment 650386
650384: block indexed db in a sandboxed document without &apos;allow-same-origin&apos; + tests

Add r=jst to commit message to be ready to land :D</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6542260</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-08 17:37:27 -0700</bug_when>
            <thetext>I&apos;ll just leave this here for now : https://tbpl.mozilla.org/?tree=Try&amp;rev=56803dd3e7cd</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6544330</commentid>
            <who name=":Ms2ger (he/him; ⌚ UTC+1/+2)">Ms2ger</who>
            <bug_when>2012-08-09 11:26:54 -0700</bug_when>
            <thetext>Looks pretty orange to me.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6544392</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-09 11:41:15 -0700</bug_when>
            <thetext>(In reply to :Ms2ger from comment #286)
&gt; Looks pretty orange to me.

Yeah, the iframe sandbox plugin tests seem to have broken - it&apos;s happening locally for me as well and I&apos;m working on fixing it :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6547651</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-10 13:41:20 -0700</bug_when>
            <thetext>I think the plugin tests might be failing because of Bug 781126 - AllowPlugins = false on docshell is no longer working ? | Thunderbird Permanent TEST-UNEXPECTED-FAIL | test-plugins-policy.js | Plugin has not been blocked in message as expected.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6564892</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-18 08:55:33 -0700</bug_when>
            <thetext>https://tbpl.mozilla.org/?tree=Try&amp;rev=a5e8c5717e80

looking much better than the last time...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6568138</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-20 11:39:50 -0700</bug_when>
            <thetext>https://hg.mozilla.org/integration/mozilla-inbound/rev/63a4ad84d4c8
https://hg.mozilla.org/integration/mozilla-inbound/rev/9eb507cc06e5
https://hg.mozilla.org/integration/mozilla-inbound/rev/7bd4f494eb06
https://hg.mozilla.org/integration/mozilla-inbound/rev/b5cda7690840
https://hg.mozilla.org/integration/mozilla-inbound/rev/43418ba7faff
https://hg.mozilla.org/integration/mozilla-inbound/rev/fbeb787ced41
https://hg.mozilla.org/integration/mozilla-inbound/rev/58eac2139a58
https://hg.mozilla.org/integration/mozilla-inbound/rev/22442334592f
https://hg.mozilla.org/integration/mozilla-inbound/rev/15963019be1b
https://hg.mozilla.org/integration/mozilla-inbound/rev/f2b98e6e2f9c</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6570518</commentid>
            <who name="Ed Morley [:emorley]">emorley</who>
            <bug_when>2012-08-21 06:30:41 -0700</bug_when>
            <thetext>https://hg.mozilla.org/mozilla-central/rev/63a4ad84d4c8
https://hg.mozilla.org/mozilla-central/rev/9eb507cc06e5
https://hg.mozilla.org/mozilla-central/rev/7bd4f494eb06
https://hg.mozilla.org/mozilla-central/rev/b5cda7690840
https://hg.mozilla.org/mozilla-central/rev/43418ba7faff
https://hg.mozilla.org/mozilla-central/rev/fbeb787ced41
https://hg.mozilla.org/mozilla-central/rev/58eac2139a58
https://hg.mozilla.org/mozilla-central/rev/22442334592f
https://hg.mozilla.org/mozilla-central/rev/15963019be1b
https://hg.mozilla.org/mozilla-central/rev/f2b98e6e2f9c</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6570899</commentid>
              <attachid>650374</attachid>
            <who name=":Ms2ger (he/him; ⌚ UTC+1/+2)">Ms2ger</who>
            <bug_when>2012-08-21 08:40:19 -0700</bug_when>
            <thetext>Comment on attachment 650374
workaround for workers needing a string origin v5

Review of attachment 650374:
-----------------------------------------------------------------

::: dom/workers/WorkerPrivate.cpp
@@ +2594,5 @@
&gt;            domain = file;
&gt;          }
&gt; +        // Workaround for workers needing a string domain - will be fixed
&gt; +        // in a followup after this lands.
&gt; +        else if (document-&gt;GetSandboxFlags() &amp; SANDBOXED_ORIGIN) {

This was filed?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6571741</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-21 11:47:39 -0700</bug_when>
            <thetext>(In reply to :Ms2ger from comment #292)
&gt; Comment on attachment 650374
&gt; workaround for workers needing a string origin v5
&gt; 
&gt; Review of attachment 650374:
&gt; -----------------------------------------------------------------
&gt; 
&gt; ::: dom/workers/WorkerPrivate.cpp
&gt; @@ +2594,5 @@
&gt; &gt;            domain = file;
&gt; &gt;          }
&gt; &gt; +        // Workaround for workers needing a string domain - will be fixed
&gt; &gt; +        // in a followup after this lands.
&gt; &gt; +        else if (document-&gt;GetSandboxFlags() &amp; SANDBOXED_ORIGIN) {
&gt; 
&gt; This was filed?

Indeed it was, see bug 752529 - there&apos;s some patches there r?&apos;d to bz too.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6583483</commentid>
            <who name="Jean-Yves Perrier [:teoli]">jypenator</who>
            <bug_when>2012-08-25 07:43:00 -0700</bug_when>
            <thetext>Updated: https://developer.mozilla.org/en-US/docs/HTML/Element/iframe
and
https://developer.mozilla.org/en-US/docs/Firefox_17_for_developers

Ian, are you interested in writing a Hacks article about the subject? It is a pretty big feature that will get a lot of interest…</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6583740</commentid>
            <who name="Ian Melven :imelven">ian.melven</who>
            <bug_when>2012-08-25 12:26:13 -0700</bug_when>
            <thetext>(In reply to Jean-Yves Perrier [:teoli] from comment #294)
&gt; Updated: https://developer.mozilla.org/en-US/docs/HTML/Element/iframe
&gt; and
&gt; https://developer.mozilla.org/en-US/docs/Firefox_17_for_developers
&gt; 
&gt; Ian, are you interested in writing a Hacks article about the subject? It is
&gt; a pretty big feature that will get a lot of interest…

Jean-Yves - yes, I was planning on writing a post about this feature - there&apos;s a few things I think it would be better to finish up first though, I&apos;ll drop you a note.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6584087</commentid>
            <who name="Paul Rouget [:paul]">paul</who>
            <bug_when>2012-08-25 18:56:29 -0700</bug_when>
            <thetext>(In reply to Ian Melven :imelven from comment #295)
&gt; Jean-Yves - yes, I was planning on writing a post about this feature

If you do, please make sure it ends up on hacks.mozilla.org (check with Chris Heilmann, or send me an email).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6655330</commentid>
            <who name="James Hartig">fastest963</who>
            <bug_when>2012-09-21 10:57:11 -0700</bug_when>
            <thetext>I had noticed that you&apos;re not testing for window.top.location being prevented when not using allow-top-navigation, but instead you&apos;re testing using the target attribute on an anchor tag. Shouldn&apos;t window.top.location changing be prevented like it is in IE and Webkit?

I was testing on Aurora (17.0a2 (2012-09-21)) and Nightly (18a1 (2012-09-21)).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6655392</commentid>
            <who name="Olli Pettay [:smaug][bugs@pettay.fi]">smaug</who>
            <bug_when>2012-09-21 11:15:08 -0700</bug_when>
            <thetext>Uh, yes, please file a new bug and make it block this one.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6670027</commentid>
            <who name="Hixie (not reading bugmail)">ian</who>
            <bug_when>2012-09-26 14:58:13 -0700</bug_when>
            <thetext>FYI, I finally got around to fixing the spec.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>11064005</commentid>
            <who name="The 8472">bugzilla.mozilla.org</who>
            <bug_when>2016-01-11 06:42:16 -0800</bug_when>
            <thetext>For the purpose of content blocking addons, would it be possible to add a flag that prevents cross-origin communication (postMessage&amp;co) with the sandbox?

The idea is to maintain compartmentalization of a no-cross-origin default policy while whitelisting embedded content that are sufficiently isolated that it might as well be a distinct top level window.</thetext>
          </long_desc>

          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>574383</attachid>
            <date>2011-11-14 12:49:28 -0800</date>
            <delta_ts>2011-11-14 17:02:53 -0800</delta_ts>
            <desc>WIP - experimental prototype v1</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>24064</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMTM1OTBjYjk0ZWFiMWVkN2U2MzJiYmQ0NTdl
ZjNmOWNiMDkyOThiMwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtMTgxOSwzMiArMTgxOSw0NSBAQCBwdWJsaWM6CiAgICAqIGZy
b20gdGhlIGRvY3VtZW50IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQg
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsK
IAogICAvKioKICAgICogU2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRo
ZSBnaXZlbiBjaGFubmVsLCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBv
ZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JB
Ym91dEJsYW5rIGlzIHRydWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHBy
aW5jaXBhbCBzZXQgdXAgb24gaXQuCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LiBJ
ZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQgb24gdGhl
IGNoYW5uZWwsIGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAorICAgKiBm
cm9tIHRoZSBjaGFubmVsLiAKICAgICoKICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVy
IHRoZSBwcmluY2lwYWwgd2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5u
ZWwuCiAgICAqLwogICBzdGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwq
IGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD
aGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJ
KiBhVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFi
b3V0QmxhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZv
ckFib3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNl
T3duZXIpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBCdG9hKGNvbnN0IG5zQVN0cmluZyYgYUJpbmFy
eURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUFzY2lpQmFzZTY0U3Ry
aW5nKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgQXRvYihjb25zdCBuc0FTdHJpbmcmIGFBc2NpaVN0
cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSk7CiAg
IAorICAvKioKKyAgICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0
dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAgICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29u
dmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFsbHkKKyAgICoKKyAgICog
QHBhcmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAg
ICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZsYWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIg
UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhuc1N0cmluZyAmIGFBdHRyaWJ1dGUpOworCisg
IAogcHJpdmF0ZToKICAgc3RhdGljIGJvb2wgSW5pdGlhbGl6ZUV2ZW50VGFibGUoKTsKIAogICBz
dGF0aWMgbnNyZXN1bHQgRW5zdXJlU3RyaW5nQnVuZGxlKFByb3BlcnRpZXNGaWxlIGFGaWxlKTsK
IAogICBzdGF0aWMgbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9yeSAqR2V0RE9NU2NyaXB0T2JqZWN0
RmFjdG9yeSgpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBIb2xkU2NyaXB0T2JqZWN0KFBSVWludDMy
IGFMYW5nSUQsIHZvaWQqIGFPYmplY3QpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3B1Ymxp
Yy9uc0lEb2N1bWVudC5oIGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCi0tLSBh
L2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaAorKysgYi9jb250ZW50L2Jhc2UvcHVi
bGljL25zSURvY3VtZW50LmgKQEAgLTQ0OSwxNiArNDQ5LDM1IEBAIHB1YmxpYzoKICAgICogQHNl
ZSBuc0JpZGlVdGlscy5oCiAgICAqLwogICB2b2lkIFNldEJpZGlPcHRpb25zKFBSVWludDMyIGFC
aWRpT3B0aW9ucykKICAgewogICAgIG1CaWRpT3B0aW9ucyA9IGFCaWRpT3B0aW9uczsKICAgfQog
ICAKICAgLyoqCisgICAqIFNldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4g
VGhpcyBzaG91bGQgb25seSBoYXBwZW4gYXQgCisgICAqIGF0IGRvY3VtZW50IGxvYWQsIHRoZSBm
bGFncyBhcmUgaW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBhdCBsb2FkIHRpbWUuCisgICAqIEAg
c2VlIG5zRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIHZvaWQg
U2V0U2FuZGJveEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCisgIHsKKyAgICBtU2FuZGJv
eEZsYWdzID0gYVNhbmRib3hGbGFnczsKKyAgfQorICAKKyAgLyoqIAorICAgKiBHZXQgdGhlIHNh
bmRveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudAorICAgKiBAc2VlIG5zRG9jU2hlbGwuaWRsIGZv
ciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIEdldFNhbmRib3hGbGFncygp
IGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAgfQorICAgCisgIC8qKgog
ICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxzbyBnZXQgc2V0IGZyb20g
b3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncykuCiAgICAqLwogICB2aXJ0
dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmllbGQsIG5zQVN0cmluZyYg
YURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRlckRhdGEobnNJQXRvbSog
YWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7CiAKICAgLyoqCiAgICAq
IENyZWF0ZSBhIG5ldyBwcmVzZW50YXRpb24gc2hlbGwgdGhhdCB3aWxsIHVzZSBhQ29udGV4dCBm
b3IgaXRzCkBAIC0xNzMyLDE2ICsxNzUxLDIxIEBAIHByb3RlY3RlZDoKICAgLy8gSWYgbUlzU3Rh
dGljRG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBvcmln
aW5hbAogICAvLyBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5hbERv
Y3VtZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQuICBXaGF0
IHRoaXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5oCiAg
IFBSVWludDMyIG1CaWRpT3B0aW9uczsKIAorICAvLyBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUg
ZG9jdW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZSBvZiB0aGUgCisgIC8vIGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250
ZW50LCBpZiBleGlzdGVudC4gVGhlc2UgYXJlIHNldCBhdCBsb2FkIHRpbWUgYW5kCisgIC8vYXJl
IGltbXV0YWJsZSAtIHNlZSBuc0RvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzICAg
CisgIFBSVWludDMyIG1TYW5kYm94RmxhZ3M7CisgIAogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5n
dWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAK
ICAgLy8gVGhlIGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0
cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRl
bnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9j
b250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3Jj
L25zQ29udGVudFV0aWxzLmNwcApAQCAtNjY0LDE3ICs2NjQsMzYgQEAgbnNDb250ZW50VXRpbHM6
OkdldFBhcnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1Bh
cnNlclNlcnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikp
IHsKICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVy
biBzUGFyc2VyU2VydmljZTsKIH0KLQorLyoqCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBh
cnNlcyBhIHNhbmRib3ggYXR0cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICogYSBDU1AgZGly
ZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFs
bHkKKyAqCisgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0
dHJpYnV0ZQorICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZsYWdzCisgKi8KK1BSVWludDMyCitu
c0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhuc1N0cmluZyAmIGFB
dHRyaWJ1dGUpCit7CisgIFBSVWludDMyIG91dCA9IDA7CisgIAorICAvLyBpZiB0aGVyZSdzIGEg
c2FuZGJveCBhdHRyaWJ1dGUgYXQgYWxsLCBzZXQgU0FOREJPWF9GTEFHU19TQU5EQk9YRUQKKyAg
b3V0IHw9IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX1NBTkRCT1hFRDsKKyAgCisgIC8vIFRP
RE86IGFkZCB0aGUgcmVzdCBvZiB0aGUgcGFyc2luZyBoZXJlCisgIAorICByZXR1cm4gb3V0Owor
fQorICAKICNpZmRlZiBNT1pfWFRGCiBuc0lYVEZTZXJ2aWNlKgogbnNDb250ZW50VXRpbHM6Okdl
dFhURlNlcnZpY2UoKQogewogICBpZiAoIXNYVEZTZXJ2aWNlKSB7CiAgICAgbnNyZXN1bHQgcnYg
PSBDYWxsR2V0U2VydmljZShrWFRGU2VydmljZUNJRCwgJnNYVEZTZXJ2aWNlKTsKICAgICBpZiAo
TlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1hURlNlcnZpY2UgPSBuc251bGw7CkBAIC01NzU2LDE3
ICs1Nzc1LDE4IEBAIG5zQ29udGVudFV0aWxzOjpVUklJbmhlcml0c1NlY3VyaXR5Q29udGUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJlc3VsdCk7CiB9CiAKIC8vIHN0YXRpYwogYm9v
bAogbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRp
bmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5l
bCogYUNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBh
VVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJv
dXRCbGFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZv
ckFib3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9y
Y2VPd25lcikKIHsKICAgLy8KICAgLy8gU2V0IHRoZSBvd25lciBvZiB0aGUgY2hhbm5lbCwgYnV0
IG9ubHkgZm9yIGNoYW5uZWxzIHRoYXQgY2FuJ3QKICAgLy8gcHJvdmlkZSB0aGVpciBvd24gc2Vj
dXJpdHkgY29udGV4dC4KICAgLy8KICAgLy8gWFhYOiBJdCBzZWVtcyB3cm9uZyB0aGF0IHRoZSBv
d25lciBpcyBpZ25vcmVkIC0gZXZlbiBpZiBvbmUgaXMKICAgLy8gICAgICBzdXBwbGllZCkgdW5s
ZXNzIHRoZSBVUkkgaXMgamF2YXNjcmlwdCBvciBkYXRhIG9yIGFib3V0OmJsYW5rLgogICAvLyBY
WFg6IElmIHRoaXMgaXMgZXZlciBjaGFuZ2VkLCBjaGVjayBhbGwgY2FsbGVycyBmb3Igd2hhdCBv
d25lcnMKQEAgLTU3NzQsMjMgKzU3OTQsMjcgQEAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5l
bE93bmVyKG5zSVByaQogICAvLyAgICAgIGNvbW1lbnRzIGluIG5zRG9jU2hlbGw6OkxvYWRVUkkg
d2hlcmUgd2UgZmFsbCBiYWNrIG9uCiAgIC8vICAgICAgaW5oZXJpdGluZyB0aGUgb3duZXIgaWYg
Y2FsbGVkIGZyb20gY2hyb21lLiAgVGhhdCB3b3VsZCBiZQogICAvLyAgICAgIHZlcnkgd3Jvbmcg
aWYgdGhpcyBjb2RlIGNoYW5nZWQgYW55dGhpbmcgYnV0IGNoYW5uZWxzIHRoYXQKICAgLy8gICAg
ICBjYW4ndCBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBjb250ZXh0IQogICAvLwogICAvLyAg
ICAgIChDdXJyZW50bHkgY2hyb21lIFVSSXMgc2V0IHRoZSBvd25lciB3aGVuIHRoZXkgYXJlIGNy
ZWF0ZWQhCiAgIC8vICAgICAgU28gc2V0dGluZyBhIE5VTEwgb3duZXIgd291bGQgYmUgYmFkISkK
ICAgLy8KKyAgLy8gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyIHdpbGwgYmUgc2V0
LCBldmVuIGZvciBhIGNoYW5uZWwgdGhhdAorICAvLyBjYW4gcHJvdmlkZSBpdHMgb3duIHNlY3Vy
aXR5IGNvbnRlbnQuIFRoaXMgaXMgdXNlZCBmb3IgdGhlIEhUTUw1IElGUkFNRQorICAvLyBzYW5k
Ym94IGF0dHJpYnV0ZSwgc28gd2UgY2FuIGZvcmNlIHRoZSBjaGFubmVsIChhbmQgaXRzIGRvY3Vt
ZW50KSB0bworICAvLyBleHBsaWNpdGx5IGhhdmUgYSBudWxsIHByaW5jaXBhbAogICBib29sIGlu
aGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dCB0byByZXR1
cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24ndCBjYWxsIE5T
X0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBjb25kaXRpb24g
bmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQgd2hlcmUK
ICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRoZSBvd25lci4K
LSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5o
ZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19J
c0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChOU19TVUNDRUVE
RUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgorICAgICAg
KGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkp
KSkpKSkgewogICAgIGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAg
cmV0dXJuIHRydWU7CiAgIH0KIAogICAvLwogICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcK
ICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBm
aWxlOiB0aGVuIGl0IG1heSBuZWVkCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9j
dW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50
L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVu
dC5jcHAKQEAgLTIzNzAsMTYgKzIzNzAsMjUgQEAgbnNEb2N1bWVudDo6U3RhcnREb2N1bWVudExv
YWQoY29uc3QgY2hhcgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgnOycsIHNlbWljb2xvbiwgZW5k
KTsKICAgICBTZXRDb250ZW50VHlwZUludGVybmFsKFN1YnN0cmluZyhzdGFydCwgc2VtaWNvbG9u
KSk7CiAgIH0KIAogICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhhQ2hhbm5lbCk7CiAKICAgbUNo
YW5uZWwgPSBhQ2hhbm5lbDsKIAorICAvLyBpZiB0aGlzIGRvY3VtZW50IGlzIGJlaW5nIGxvYWRl
ZCBieSBhIGRvY3NoZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdzCisgIC8vIHRvIHRoZSBkb2N1
bWVudC4gVGhlc2UgYXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgaGVyZS4KKyAgbnNDT01Q
dHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNvbnRhaW5lcik7
CisgIAorICBpZiAoZG9jU2hlbGwpIHsKKyAgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0
U2FuZGJveEZsYWdzKCZtU2FuZGJveEZsYWdzKTsKKwkgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2
KTsKKyAgfQorICAKICAgbnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNEb2N1bWVu
dDo6SW5pdENTUCgpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaCBi
L2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNE
b2N1bWVudC5oCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5oCkBAIC0xMjY3LDE3
ICsxMjY3LDE3IEBAIHByaXZhdGU6CiAgIG5zQ1N0cmluZyBtU2Nyb2xsVG9SZWY7CiAgIFBSVWlu
dDggbVNjcm9sbGVkVG9SZWZBbHJlYWR5IDogMTsKICAgUFJVaW50OCBtQ2hhbmdlU2Nyb2xsUG9z
V2hlblNjcm9sbGluZ1RvUmVmIDogMTsKIAogICAvLyBUcmFja2luZyBmb3IgaW1hZ2VzIGluIHRo
ZSBkb2N1bWVudC4KICAgbnNEYXRhSGFzaHRhYmxlPCBuc1B0ckhhc2hLZXk8aW1nSVJlcXVlc3Q+
LCBQUlVpbnQzMj4gbUltYWdlVHJhY2tlcjsKIAogICBWaXNpYmlsaXR5U3RhdGUgbVZpc2liaWxp
dHlTdGF0ZTsKLQorICAKICNpZmRlZiBERUJVRwogcHJvdGVjdGVkOgogICBib29sIG1XaWxsUmVw
YXJlbnQ7CiAjZW5kaWYKIH07CiAKICNkZWZpbmUgTlNfRE9DVU1FTlRfSU5URVJGQUNFX1RBQkxF
X0JFR0lOKF9jbGFzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgTlNfTk9ERV9P
RkZTRVRfQU5EX0lOVEVSRkFDRV9UQUJMRV9CRUdJTihfY2xhc3MpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5j
cHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCi0tLSBhL2NvbnRlbnQvYmFz
ZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9h
ZGVyLmNwcApAQCAtNDY2LDIwICs0NjYsMTAzIEBAIG5zRnJhbWVMb2FkZXI6OlJlYWxseVN0YXJ0
TG9hZGluZ0ludGVybmEKICAgLy8gSnVzdCB0byBiZSBzYWZlLCByZWNoZWNrIHVyaS4KICAgcnYg
PSBDaGVja1VSSUxvYWQobVVSSVRvTG9hZCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7
CiAKICAgbnNDT01QdHI8bnNJRG9jU2hlbGxMb2FkSW5mbz4gbG9hZEluZm87CiAgIG1Eb2NTaGVs
bC0+Q3JlYXRlTG9hZEluZm8oZ2V0dGVyX0FkZFJlZnMobG9hZEluZm8pKTsKICAgTlNfRU5TVVJF
X1RSVUUobG9hZEluZm8sIE5TX0VSUk9SX0ZBSUxVUkUpOwogCi0gIC8vIFdlJ2xsIHVzZSBvdXIg
cHJpbmNpcGFsLCBub3QgdGhhdCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRo
aXMKLSAgLy8gaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tz
IG9uIGRvY3VtZW50cyBsb2FkZWQgaW4KLSAgLy8gc3ViZnJhbWVzIQotICBsb2FkSW5mby0+U2V0
T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKKyAgbnNTdHJpbmcgc2FuZGJv
eEF0dHI7CQorICBQUlVpbnQzMiBwYXJlbnRTYW5kYm94RmxhZ3MgPSAwOworCisgIC8vIGdldCB0
aGUgcGFyZW50J3Mgc2FuZGJveCBmbGFncywgdGhleSdyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlm
IHRoZQorICAvLyBmcmFtZSBiZWluZyBsb2FkZWQgYmVsb3cgbmVlZHMgdG8gYmUgc2FuZGJveGVk
CisJbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50RG9jU2hlbGxJdGVtOworCW5z
Q09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IGN1ckRvY1NoZWxsSXRlbShkb19RdWVyeUludGVy
ZmFjZShtRG9jU2hlbGwpKTsKKwkKKwlpZiAoTlNfU1VDQ0VFREVEKGN1ckRvY1NoZWxsSXRlbS0+
R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudERvY1NoZWxsSXRlbSkpKSkgeworCSAgbnND
T01QdHI8bnNJRG9jdW1lbnQ+IHBhcmVudERvYyA9IGRvX0dldEludGVyZmFjZShwYXJlbnREb2NT
aGVsbEl0ZW0pOworCSAgCisJICBpZiAocGFyZW50RG9jKSB7CisJICAgIHBhcmVudFNhbmRib3hG
bGFncyA9IHBhcmVudERvYy0+R2V0U2FuZGJveEZsYWdzKCk7CisgICAgfQorICB9ICAKKworICAv
LyBpcyB0aGlzIGFuIDxpZnJhbWU+IHdpdGggYSBzYW5kYm94IGF0dHJpYnV0ZSBvciBhIGZyYW1l
IHdob3NlIHBhcmVudAorICAvLyBpcyBzYW5kYm94ZWQgPyAgCisgIGlmIChwYXJlbnRTYW5kYm94
RmxhZ3MgfHwgCisgICAgIChtT3duZXJDb250ZW50LT5HZXRBdHRyKGtOYW1lU3BhY2VJRF9Ob25l
LCBuc0drQXRvbXM6OnNhbmRib3gsIHNhbmRib3hBdHRyKSAmJgorICAgICAgbU93bmVyQ29udGVu
dC0+SXNIVE1MKG5zR2tBdG9tczo6aWZyYW1lKSkpIHsgCisJCisgICAgUFJVaW50MzIgc2FuZGJv
eEZsYWdzID0gbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2Fu
ZGJveEF0dHIpOworCisJCWlmIChwYXJlbnRTYW5kYm94RmxhZ3MpIHsgCisJICAgIC8vIGRvIHRo
ZSBpbnRlcnNlY3Rpb24gd2l0aCB0aGUgY3VycmVudCBmbGFncyBpbiB0aGUgZG9jc2hlbGwhCisJ
CSAgCisgICAgICAvLyBUT0RPOiBwcm9iYWJseSB3YW50IHRvIG1ha2UgdGhpcyBhIGZ1bmN0aW9u
IGluIG5zQ29udGVudFV0aWxzIAorICAgICAgLy8gd2lsbCBsaWtlbHkgYmUgbmVlZGVkIGVsc2V3
aGVyZSAoZS5nLiBDU1Agc2FuZGJveCBpbnRlcnNlY3Rpb24pIAorCisgICAgICAvLyBpZiBwYXJl
bnQgaXMgc2FuZGJveGVkLCBjdXJyZW50IGRvY3NoZWxsIGlzIHNhbmRib3hlZAorICAgICAgc2Fu
ZGJveEZsYWdzIHw9IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX1NBTkRCT1hFRDsKKyAgCisg
ICAgICAvLyBpZiBjdXJyZW50IGRvY3NoZWxsIGhhcyBhbGxvdy1zYW1lLWRvbWFpbiBidXQgcGFy
ZW50IGRvZXMgbm90LAorICAgICAgLy8gY2xlYXIgYWxsb3ctc2FtZS1kb21haW4KKyAgICAgIGlm
ICgoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9E
T01BSU4pICYmCisgICAgICAgICAgIShwYXJlbnRTYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6
U0FOREJPWF9GTEFHU19BTExPV19TQU1FX0RPTUFJTikpCisgICAgICAgIHNhbmRib3hGbGFncyB8
PSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9ET01BSU47CisJCQkKKyAg
ICAgIC8vIGlmIGN1cnJlbnQgZG9jc2hlbGwgaGFzIGFsbG93LXNjcmlwdHMgYnV0IHBhcmVudCBk
b2VzIG5vdCwKKyAgICAgIC8vIGNsZWFyIGFsbG93LXNjcmlwdHMKKyAgICAgIGlmICgoc2FuZGJv
eEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0NSSVBUUykgJiYKKyAg
ICAgICAgICAhKHBhcmVudFNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdT
X0FMTE9XX1NDUklQVFMpKQorICAgICAgICBzYW5kYm94RmxhZ3MgfD0gfm5zSURvY1NoZWxsOjpT
QU5EQk9YX0ZMQUdTX0FMTE9XX1NDUklQVFM7CisJCQkKKyAgICAgICAvLyBpZiBjdXJyZW50IGRv
Y3NoZWxsIGhhcyBhbGxvdy10b3AtbmF2aWdhdGlvbiBidXQgcGFyZW50IGRvZXMgbm90LAorICAg
ICAgIC8vIGNsZWFyIGFsbG93LXRvcC1uYXZpZ2F0aW9uCisgICAgICAgaWYgKChzYW5kYm94Rmxh
Z3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19UT1BfTkFWSUdBVElPTikgJiYK
KyAgICAgICAgICAgIShwYXJlbnRTYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9G
TEFHU19BTExPV19UT1BfTkFWSUdBVElPTikpCisgICAgICAgICBzYW5kYm94RmxhZ3MgfD0gfm5z
SURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1RPUF9OQVZJR0FUSU9OOworCQkJCisgICAg
ICAgLy8gaWYgY3VycmVudCBkb2NzaGVsbCBoYXMgYWxsb3ctZm9ybXMgYnV0IHBhcmVudCBkb2Vz
IG5vdCwKKyAgICAgICAvLyBjbGVhciBhbGxvdy1mb3JtcworICAgICAgIGlmICgoc2FuZGJveEZs
YWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfRk9STV9TVUJNSVQpICYmCisg
ICAgICAgICAgICEocGFyZW50U2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxB
R1NfQUxMT1dfRk9STV9TVUJNSVQpKQorICAgICAgICAgc2FuZGJveEZsYWdzIHw9IH5uc0lEb2NT
aGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NVQk1JVDsKKyAgICAgfQorICAKKwkgIG1E
b2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFncyk7CisJCisJICAvLyBzZXQgdXAg
dGhlIGFjdHVhbCBzYW5kYm94aW5nIGFzIHNwZWNpZmllZCAKKwkgIGlmIChzYW5kYm94RmxhZ3Mg
JiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19TQU5EQk9YRUQpIHsKKwkgICAgaWYgKChzYW5k
Ym94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19TQU1FX0RPTUFJTikg
IT0gbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9ET01BSU4pIHsKKwkgICAg
ICAvLyBhbGxvdy1zYW1lLWRvbWFpbiB3YXNuJ3Qgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGNyZWF0
ZSBhIG5ldyBudWxsIHByaW5jaXBhbCBhbmQgCisgIAkJICAvLyB1c2UgdGhhdCBhcyB0aGUgb3du
ZXIKKwkgICAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG51bGxQcmluY2lwYWwgPSBkb19DcmVh
dGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL251bGxwcmluY2lwYWw7MSIpOworCSAgICAgIGxvYWRJ
bmZvLT5TZXRPd25lcihudWxsUHJpbmNpcGFsKTsKKwkgICAgfSBlbHNlIHsgCisJICAgICAgLy8g
dXNlIHRoZSAnbm9ybWFsJyBwcmluY2lwYWwgZm9yIHRoZSA8aWZyYW1lPiAtIHNlZSBub3RlIGJl
bG93CisJICAgICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lw
YWwoKSk7CisJICAgIH0KKwkKKwkgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpT
QU5EQk9YX0ZMQUdTX0FMTE9XX1NDUklQVFMgIT0gbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1Nf
QUxMT1dfU0NSSVBUUykgeworCSAgICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dKYXZhc2NyaXB0KGZh
bHNlKTsKKwkgICAgfQorCSAgCisJICAgIC8vIF9hbHdheXNfIGRpc2FsbG93IHBsdWdpbnMgd2hl
biBzYW5kYm94ZWQKKwkgICAgbURvY1NoZWxsLT5TZXRBbGxvd1BsdWdpbnMoZmFsc2UpOworICAg
IH0gCisgIH0KKworICBlbHNlIHsgCisgICAgLy8gbm90IHNhbmRib3hlZCBzbyB3ZSB1c2Ugb3Vy
IHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3VtZW50IGxvYWRlZCBpbnNpZGUgdXMuICBU
aGlzCisgICAgLy8gaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRh
Y2tzIG9uIGRvY3VtZW50cyBsb2FkZWQgaW4KKyAgICAvLyBzdWJmcmFtZXMhCisgICAgbG9hZElu
Zm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7CisgIH0KIAogICBu
c0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwogICBydiA9IG1Pd25lckNvbnRlbnQtPk5vZGVQcmlu
Y2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKHJlZmVycmVyKSk7CiAgIE5TX0VOU1VSRV9T
VUNDRVNTKHJ2LCBydik7CiAKICAgbG9hZEluZm8tPlNldFJlZmVycmVyKHJlZmVycmVyKTsKIAog
ICAvLyBLaWNrIG9mZiB0aGUgbG9hZC4uLgpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9u
c0drQXRvbUxpc3QuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKLS0tIGEvY29u
dGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tB
dG9tTGlzdC5oCkBAIC04NzYsMTYgKzg3NiwxNyBAQCBHS19BVE9NKHJvd3NwYW4sICJyb3dzcGFu
IikKIEdLX0FUT00ocnAsICJycCIpCiBHS19BVE9NKHJ0LCAicnQiKQogR0tfQVRPTShydGwsICJy
dGwiKQogR0tfQVRPTShydWJ5LCAicnVieSIpCiBHS19BVE9NKHJ1bGUsICJydWxlIikKIEdLX0FU
T00ocnVsZXMsICJydWxlcyIpCiBHS19BVE9NKHMsICJzIikKIEdLX0FUT00oc2FtcCwgInNhbXAi
KQorR0tfQVRPTShzYW5kYm94LCAic2FuZGJveCIpCiBHS19BVE9NKHNiYXR0ciwgInNiYXR0ciIp
CiBHS19BVE9NKHNjYWxlLCAic2NhbGUiKQogR0tfQVRPTShzY2FuLCAic2NhbiIpCiBHS19BVE9N
KHNjaGVtZSwgInNjaGVtZSIpCiBHS19BVE9NKHNjb3BlLCAic2NvcGUiKQogR0tfQVRPTShzY29w
ZWQsICJzY29wZWQiKQogR0tfQVRPTShzY3JlZW4sICJzY3JlZW4iKQogR0tfQVRPTShzY3JlZW5Y
LCAic2NyZWVuWCIpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zT2JqZWN0TG9hZGlu
Z0NvbnRlbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc09iamVjdExvYWRpbmdDb250ZW50LmNw
cAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zT2JqZWN0TG9hZGluZ0NvbnRlbnQuY3BwCisrKyBi
L2NvbnRlbnQvYmFzZS9zcmMvbnNPYmplY3RMb2FkaW5nQ29udGVudC5jcHAKQEAgLTE0NTcsMTcg
KzE0NTcsMTcgQEAgbnNPYmplY3RMb2FkaW5nQ29udGVudDo6TG9hZE9iamVjdChuc0lVUgogICAg
IE5TX1BhcnNlQ29udGVudFR5cGUoYVR5cGVIaW50LCB0eXBlSGludCwgZHVtbXkpOwogICAgIGlm
ICghdHlwZUhpbnQuSXNFbXB0eSgpKSB7CiAgICAgICBjaGFuLT5TZXRDb250ZW50VHlwZSh0eXBl
SGludCk7CiAgICAgfQogICB9CiAKICAgLy8gU2V0IHVwIHRoZSBjaGFubmVsJ3MgcHJpbmNpcGFs
IGFuZCBzdWNoLCBsaWtlIG5zRG9jU2hlbGw6OkRvVVJJTG9hZCBkb2VzCiAgIG5zQ29udGVudFV0
aWxzOjpTZXRVcENoYW5uZWxPd25lcih0aGlzQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbiwgYVVSSSwgdHJ1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuLCBhVVJJLCB0cnVlLCBmYWxzZSk7
CiAKICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5
SW50ZXJmYWNlKGNoYW4pOwogICBpZiAoc2NyaXB0Q2hhbm5lbCkgewogICAgIC8vIEFsbG93IGV4
ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAg
c2NyaXB0Q2hhbm5lbC0+CiAgICAgICBTZXRFeGVjdXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5l
bDo6RVhFQ1VURV9OT1JNQUwpOwogICB9CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Ny
Yy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMv
bnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
SFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC04NCwxNiArODQsMjAgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpOwogICBOU19JTUVU
SE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBhQXR0cmlidXRlKSBj
b25zdDsKICAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdldEF0dHJpYnV0ZU1h
cHBpbmdGdW5jdGlvbigpIGNvbnN0OwogCiAgIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJTm9k
ZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0OwogICB2aXJ0dWFsIG5z
WFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKKyAgCisgIHZpcnR1YWwgbnNyZXN1bHQgQWZ0
ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcqIGFWYWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpOwogfTsKIAogCiBOU19J
TVBMX05TX05FV19IVE1MX0VMRU1FTlRfQ0hFQ0tfUEFSU0VSKElGcmFtZSkKIAogCiBuc0hUTUxJ
RnJhbWVFbGVtZW50Ojpuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9k
ZUluZm8+IGFOb2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRnJvbVBhcnNlciBhRnJvbVBhcnNlcikKQEAgLTI2OCw4ICsyNzIsMjUgQEAgbnNIVE1MSUZy
YW1lRWxlbWVudDo6SXNBdHRyaWJ1dGVNYXBwZWQoYwogCiAKIG5zTWFwUnVsZVRvQXR0cmlidXRl
c0Z1bmMKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigp
IGNvbnN0CiB7CiAgIHJldHVybiAmTWFwQXR0cmlidXRlc0ludG9SdWxlOwogfQogCituc3Jlc3Vs
dAorbnNIVE1MSUZyYW1lRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlE
LCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc0FTdHJpbmcqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFOb3RpZnkpCit7CisgIGlmIChhTmFtZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5h
bWVTcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CisgICAgLy8gcGFyc2UgdGhlIG5ldyBz
YW5kYm94IGF0dHJpYnV0ZSdzIHZhbHVlIGFuZCBzZXQgdGhlIHNhbmRib3ggZmxhZ3MgaW4gdGhl
IGRvY3NoZWxsIGFwcHJvcHJpYXRlbHkKKyAgICAvLyBUT0RPOiBtYWtlIGEgJ2NvbnZlcnQgc2Fu
ZGJveCBzdHJpbmcgYXR0cmlidXRlIHRvIGZsYWdzJyBmdW5jdGlvbgorICAgIC8vIFRPRE86IGFz
IHBhcnQgb2YgZmlndXJpbmcgb3V0IGEgc2luZ2xlIGhvbWUgZm9yIHRoZSBzYW5kYm94IGZsYWcg
Y29uc3RhbnRzLCBmaWd1cmUgb3V0IGhvdworICAgIC8vIHRvIGluY2x1ZGUgdGhhdCBzaW5nbGUg
aG9tZSdzIGRlZmluaXRpb25zIHNvIHdlIGNhbiB1c2UgdGhlbSBoZXJlCisJaWYgKG1GcmFtZUxv
YWRlcikKKyAgICAgIG1GcmFtZUxvYWRlci0+R2V0RXhpc3RpbmdEb2NTaGVsbCgpLT5TZXRTYW5k
Ym94RmxhZ3MoMSk7CisgIH0KKyAgcmV0dXJuIG5zR2VuZXJpY0hUTUxFbGVtZW50OjpBZnRlclNl
dEF0dHIoYU5hbWVTcGFjZUlELCBhTmFtZSwgYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhTm90aWZ5KTsKK30KKwpkaWZmIC0tZ2l0IGEvZG9jc2hl
bGwvYmFzZS9uc0RvY1NoZWxsLmNwcCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKLS0t
IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAorKysgYi9kb2NzaGVsbC9iYXNlL25zRG9j
U2hlbGwuY3BwCkBAIC03NDUsMTcgKzc0NSwxOCBAQCBuc0RvY1NoZWxsOjpuc0RvY1NoZWxsKCk6
CiAgICAgbUlzQXBwVGFiKGZhbHNlKSwKICAgICBtVXNlR2xvYmFsSGlzdG9yeShmYWxzZSksCiAg
ICAgbUZpcmVkVW5sb2FkRXZlbnQoZmFsc2UpLAogICAgIG1FT0RGb3JDdXJyZW50RG9jdW1lbnQo
ZmFsc2UpLAogICAgIG1VUklSZXN1bHRlZEluRG9jdW1lbnQoZmFsc2UpLAogICAgIG1Jc0JlaW5n
RGVzdHJveWVkKGZhbHNlKSwKICAgICBtSXNFeGVjdXRpbmdPbkxvYWRIYW5kbGVyKGZhbHNlKSwK
ICAgICBtSXNQcmludGluZ09yUFAoZmFsc2UpLAotICAgIG1TYXZpbmdPbGRWaWV3ZXIoZmFsc2Up
CisgICAgbVNhdmluZ09sZFZpZXdlcihmYWxzZSksCisgICAgbVNhbmRib3hGbGFncygwKQogI2lm
ZGVmIERFQlVHCiAgICAgLCBtSW5FbnN1cmVTY3JpcHRFbnYoZmFsc2UpCiAjZW5kaWYKIHsKICAg
ICBtSGlzdG9yeUlEID0gKytnRG9jc2hlbGxJRENvdW50ZXI7CiAgICAgaWYgKGdEb2NTaGVsbENv
dW50KysgPT0gMCkgewogICAgICAgICBOU19BU1NFUlRJT04oc1VSSUZpeHVwID09IG5zbnVsbCwK
ICAgICAgICAgICAgICAgICAgICAgICJIdWgsIHNVUklGaXh1cCBub3QgbnVsbCBpbiBmaXJzdCBu
c0RvY1NoZWxsIGN0b3IhIik7CkBAIC00OTE1LDE2ICs0OTE2LDMyIEBAIG5zRG9jU2hlbGw6OlNl
dElzQXBwVGFiKGJvb2wgYUlzQXBwVGFiKQogTlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6R2V0
SXNBcHBUYWIoYm9vbCAqYUlzQXBwVGFiKQogewogICAqYUlzQXBwVGFiID0gbUlzQXBwVGFiOwog
ICByZXR1cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6OlNldFNhbmRi
b3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQoreworICBtU2FuZGJveEZsYWdzID0gYVNh
bmRib3hGbGFnczsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCituc0RvY1No
ZWxsOjpHZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgICphU2FuZGJveEZsYWdzKQoreworICBOU19F
TlNVUkVfQVJHX1BPSU5URVIoYVNhbmRib3hGbGFncyk7CisgIAorICAqYVNhbmRib3hGbGFncyA9
IG1TYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAogbnNE
b2NTaGVsbDo6U2V0VmlzaWJpbGl0eShib29sIGFWaXNpYmlsaXR5KQogewogICAgIGlmICghbUNv
bnRlbnRWaWV3ZXIpCiAgICAgICAgIHJldHVybiBOU19PSzsKICAgICBpZiAoYVZpc2liaWxpdHkp
IHsKICAgICAgICAgbUNvbnRlbnRWaWV3ZXItPlNob3coKTsKICAgICB9CiAgICAgZWxzZSB7CkBA
IC04ODg5LDE4ICs4OTA2LDMwIEBAIG5zRG9jU2hlbGw6OkRvVVJJTG9hZChuc0lVUkkgKiBhVVJJ
LAogICAgICAgICB9CiAgICAgICAgIC8vIFNldCB0aGUgcmVmZXJyZXIgZXhwbGljaXRseQogICAg
ICAgICBpZiAoYVJlZmVycmVyVVJJICYmIGFTZW5kUmVmZXJyZXIpIHsKICAgICAgICAgICAgIC8v
IFJlZmVycmVyIGlzIGN1cnJlbmx5IG9ubHkgc2V0IGZvciBsaW5rIGNsaWNrcyBoZXJlLgogICAg
ICAgICAgICAgaHR0cENoYW5uZWwtPlNldFJlZmVycmVyKGFSZWZlcnJlclVSSSk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFsKGRv
X1F1ZXJ5SW50ZXJmYWNlKGFPd25lcikpOwotICAgIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5u
ZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSk7CisJbnNDT01QdHI8
bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChkb19RdWVyeUludGVyZmFjZShhT3duZXIpKTsK
KwkKKyAgICAvLyBJZiB0aGUgY29udGVudCBpcyBzYW5kYm94ZWQsIGZvcmNlIHRoZSBwYXNzZWQg
aW4gb3duZXIgKHdoaWNoIHNob3VsZCBiZSAKKwkvLyBhIG51bGwgcHJpbmNpcGFsKSB0byBiZSBz
ZXQgb24gdGhlIGNoYW5uZWwsIFVOTEVTUyB0aGUgc2FuZGJveCBhbGxvdy1zYW1lLWRvbWFpbiBm
bGFnIGlzIGFsc28KKyAgICAvLyBzZXQuIEluIHRoYXQgY2FzZSwgYWxsb3cgdGhlIGNvbnRlbnQg
dG8gYXNzc3VtZSBpdHMgIm5hdHVyYWwgZG9tYWluIiBhcyBpdAorICAgIC8vIG5vcm1hbGx5IHdv
dWxkLiAKKyAgICBpZiAoKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YX0ZMQUdTX1NBTkRCT1hFRCkg
JiYgCisgICAgICAgIChtU2FuZGJveEZsYWdzICYgU0FOREJPWF9GTEFHU19BTExPV19TQU1FX0RP
TUFJTikgIT0gU0FOREJPWF9GTEFHU19BTExPV19TQU1FX0RPTUFJTikgeworICAgICAgbnNDb250
ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJ
LCB0cnVlLCB0cnVlKTsKKyAgICB9CisJCisgICAgZWxzZSB7CisgICAgICBuc0NvbnRlbnRVdGls
czo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUs
IGZhbHNlKTsKKyAgICB9CiAKICAgICBuc0NPTVB0cjxuc0lTY3JpcHRDaGFubmVsPiBzY3JpcHRD
aGFubmVsID0gZG9fUXVlcnlJbnRlcmZhY2UoY2hhbm5lbCk7CiAgICAgaWYgKHNjcmlwdENoYW5u
ZWwpIHsKICAgICAgICAgLy8gQWxsb3cgZXhlY3V0aW9uIGFnYWluc3Qgb3VyIGNvbnRleHQgaWYg
dGhlIHByaW5jaXBhbHMgbWF0Y2gKICAgICAgICAgc2NyaXB0Q2hhbm5lbC0+CiAgICAgICAgICAg
ICBTZXRFeGVjdXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhFQ1VURV9OT1JNQUwpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmggYi9kb2NzaGVs
bC9iYXNlL25zRG9jU2hlbGwuaAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAorKysg
Yi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaApAQCAtNzgzLDE2ICs3ODMsMTggQEAgcHJvdGVj
dGVkOgogICAgIC8vIENyZWF0ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUgaXMgbm90IGV4cGVjdGVk
IHRvIGNoYW5nZS4KICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtSXRlbVR5cGU7CiAK
ICAgICAvLyBJbmRleCBpbnRvIHRoZSBTSFRyYW5zYWN0aW9uIGxpc3QsIGluZGljYXRpbmcgdGhl
IHByZXZpb3VzIGFuZCBjdXJyZW50CiAgICAgLy8gdHJhbnNhY3Rpb24gYXQgdGhlIHRpbWUgdGhh
dCB0aGlzIERvY1NoZWxsIGJlZ2lucyB0byBsb2FkCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAg
ICAgICAgbVByZXZpb3VzVHJhbnNJbmRleDsKICAgICBQUkludDMyICAgICAgICAgICAgICAgICAg
ICBtTG9hZGVkVHJhbnNJbmRleDsKIAorICAgIFBSVWludDMyICAgICAgICAgICAgICAgICAgIG1T
YW5kYm94RmxhZ3M7CisgICAgCiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUNyZWF0
ZWQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93U3ViZnJhbWVzOwogICAg
IGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1BsdWdpbnM7CiAgICAgYm9vbCAgICAg
ICAgICAgICAgICAgICAgICAgbUFsbG93SmF2YXNjcmlwdDsKICAgICBib29sICAgICAgICAgICAg
ICAgICAgICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzOwogICAgIGJvb2wgICAgICAgICAgICAgICAg
ICAgICAgIG1BbGxvd0ltYWdlczsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxs
b3dETlNQcmVmZXRjaDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dXaW5k
b3dDb250cm9sOwpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwgYi9k
b2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAotLS0gYS9kb2NzaGVsbC9iYXNlL25zSURvY1No
ZWxsLmlkbAorKysgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbApAQCAtNTQ4LDkgKzU0
OCw0NCBAQCBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogICAgKi8KICAgYXR0
cmlidXRlIGJvb2xlYW4gaXNBcHBUYWI7CiAKICAgLyoqCiAgICAqIENyZWF0ZSBhIG5ldyBhYm91
dDpibGFuayBkb2N1bWVudCBhbmQgY29udGVudCB2aWV3ZXIuCiAgICAqIEBwYXJhbSBhUHJpbmNp
cGFsIHRoZSBwcmluY2lwYWwgdG8gdXNlIGZvciB0aGUgbmV3IGRvY3VtZW50LgogICAgKi8KICAg
dm9pZCBjcmVhdGVBYm91dEJsYW5rQ29udGVudFZpZXdlcihpbiBuc0lQcmluY2lwYWwgYVByaW5j
aXBhbCk7CisgIAorICAvKiogCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2NzaGVs
bC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRo
ZSAKKyAgICogYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNvbnRlbnQsIGlm
IGV4aXN0ZW50LiBTZWUgdGhlIEhUTUw1IHNwZWMgZm9yIG1vcmUgZGV0YWlscy4KKyAgICogVGhl
c2UgZmxhZ3Mgb24gdGhlIGRvY3NoZWxsIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhl
IHNhbmRib3ggYXR0cmlidXRlLCB3aGljaCBpcyBtb2RpZmlhYmxlLgorICAgKiBUaGV5IGFyZSBv
bmx5IHVzZWQgd2hlbiBsb2FkaW5nIG5ldyBjb250ZW50LCBzYW5kYm94IGZsYWdzIGFyZSBhbHNv
IGltbXV0YWJseSBzZXQgb24gdGhlIGRvY3VtZW50CisgICAqIHdoZW4gaXQgaXMgbG9hZGVkLiBU
aGUgc2FuZGJveCBmbGFncyBvZiBhIGRvY3VtZW50IGRlcGVuZCBvbiB0aGUgc2FuZGJveCBmbGFn
cyBvbiBpdHMgZG9jc2hlbGwKKyAgICogYW5kIG9mIGl0cyBwYXJlbnQgZG9jdW1lbnQsIGlmIGFu
eS4gCisgICAqLyAgIAorICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzYW5kYm94RmxhZ3M7Cisg
IAorICAvKiogCisgICAqIFRoZSBjb250ZW50IGlzIHNhbmRib3hlZCBhbmQgaXNvbGF0ZWQgd2l0
aCBhIG51bGwgcHJpbmNpcGFsLgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9Y
X0ZMQUdTX1NBTkRCT1hFRCAgPSAweDE7IAorICAKKyAgLyoqCisgICAqIFRoZSBjb250ZW50IGlz
IHNhbmRib3hlZCBhbmQgaXNvbGF0ZWQgd2l0aCBudWxsIHByaW5jaXBhbCBvcmlnaW5hbGx5IGJ1
dCB0b3AgbmF2aWdhdGlvbiBpcyBhbGxvd2VkLiAKKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxv
bmcgU0FOREJPWF9GTEFHU19BTExPV19UT1BfTkFWSUdBVElPTiA9IDB4MjsKKyAgIAorICAvKioK
KyAgICogVGhlIGNvbnRlbnQgaXMgc2FuZGJveGVkIGJ1dCBhbGxvd2VkIHRvIGhhdmUgaXRzIG5h
dHVyYWwgZG9tYWluLiAKKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWF9GTEFH
U19BTExPV19TQU1FX0RPTUFJTiA9IDB4NDsKKyAgCisgIC8qKgorICAgKiBUaGUgY29udGVudCBp
cyBzYW5kYm94ZWQgYnV0IGZvcm0gc3VibWlzc2lvbiBpcyBhbGxvd2VkCisgICAqLworICBjb25z
dCB1bnNpZ25lZCBsb25nIFNBTkRCT1hfRkxBR1NfQUxMT1dfRk9STV9TVUJNSVQgPSAweDg7IAor
ICAgCisgIC8qKgorICAgKiBUaGUgY29udGVudCBpcyBzYW5kYm94ZWQgYnV0IHNjcmlwdCBleGVj
dXRpb24gaXMgYWxsb3dlZAorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YX0ZM
QUdTX0FMTE9XX1NDUklQVFMgPSAweDEwOyAKIH07CmRpZmYgLS1naXQgYS9pbWFnZS9zcmMvaW1n
TG9hZGVyLmNwcCBiL2ltYWdlL3NyYy9pbWdMb2FkZXIuY3BwCi0tLSBhL2ltYWdlL3NyYy9pbWdM
b2FkZXIuY3BwCisrKyBiL2ltYWdlL3NyYy9pbWdMb2FkZXIuY3BwCkBAIC01NTMsMTcgKzU1Mywx
NyBAQCBzdGF0aWMgbnNyZXN1bHQgTmV3SW1hZ2VDaGFubmVsKG5zSUNoYW5uCiAKICAgICBpZiAo
YUxvYWRGbGFncyAmIG5zSVJlcXVlc3Q6OkxPQURfQkFDS0dST1VORCkKICAgICAgICsrcHJpb3Jp
dHk7IC8vIGZ1cnRoZXIgcmVkdWNlIHByaW9yaXR5IGZvciBiYWNrZ3JvdW5kIGxvYWRzCiAKICAg
ICBwLT5BZGp1c3RQcmlvcml0eShwcmlvcml0eSk7CiAgIH0KIAogICBib29sIHNldE93bmVyID0g
bnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKGFMb2FkaW5nUHJpbmNpcGFsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFSZXN1
bHQsIGFVUkksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICphUmVzdWx0LCBhVVJJLCBmYWxzZSwgZmFsc2UpOwogICAqYUZvcmNl
UHJpbmNpcGFsQ2hlY2tGb3JDYWNoZUVudHJ5ID0gc2V0T3duZXI7CiAKICAgcmV0dXJuIE5TX09L
OwogfQogCiBzdGF0aWMgUFJVaW50MzIgU2Vjb25kc0Zyb21QUlRpbWUoUFJUaW1lIHByVGltZSkK
IHsKICAgcmV0dXJuIFBSVWludDMyKFBSSW50NjQocHJUaW1lKSAvIFBSSW50NjQoUFJfVVNFQ19Q
RVJfU0VDKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>574480</attachid>
            <date>2011-11-14 17:02:53 -0800</date>
            <delta_ts>2011-11-18 16:52:32 -0800</delta_ts>
            <desc>WIP - experimental prototype</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>27577</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZjhkNjZhNzkyZGRjMjkxYzY2MTA0ZjNjNTI4
MGI1M2MxNzMxOTQzMgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtMTgxOSwzMiArMTgxOSw0NSBAQCBwdWJsaWM6CiAgICAqIGZy
b20gdGhlIGRvY3VtZW50IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQg
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsK
IAogICAvKioKICAgICogU2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRo
ZSBnaXZlbiBjaGFubmVsLCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBv
ZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JB
Ym91dEJsYW5rIGlzIHRydWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHBy
aW5jaXBhbCBzZXQgdXAgb24gaXQuCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LiBJ
ZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQgb24gdGhl
IGNoYW5uZWwsIGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAorICAgKiBm
cm9tIHRoZSBjaGFubmVsLiAKICAgICoKICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVy
IHRoZSBwcmluY2lwYWwgd2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5u
ZWwuCiAgICAqLwogICBzdGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwq
IGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD
aGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJ
KiBhVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFi
b3V0QmxhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZv
ckFib3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNl
T3duZXIpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBCdG9hKGNvbnN0IG5zQVN0cmluZyYgYUJpbmFy
eURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUFzY2lpQmFzZTY0U3Ry
aW5nKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgQXRvYihjb25zdCBuc0FTdHJpbmcmIGFBc2NpaVN0
cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSk7CiAg
IAorICAvKioKKyAgICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0
dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAgICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29u
dmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFsbHkKKyAgICoKKyAgICog
QHBhcmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAg
ICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZsYWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIg
UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhuc1N0cmluZyAmIGFBdHRyaWJ1dGUpOworCisg
IAogcHJpdmF0ZToKICAgc3RhdGljIGJvb2wgSW5pdGlhbGl6ZUV2ZW50VGFibGUoKTsKIAogICBz
dGF0aWMgbnNyZXN1bHQgRW5zdXJlU3RyaW5nQnVuZGxlKFByb3BlcnRpZXNGaWxlIGFGaWxlKTsK
IAogICBzdGF0aWMgbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9yeSAqR2V0RE9NU2NyaXB0T2JqZWN0
RmFjdG9yeSgpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBIb2xkU2NyaXB0T2JqZWN0KFBSVWludDMy
IGFMYW5nSUQsIHZvaWQqIGFPYmplY3QpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3B1Ymxp
Yy9uc0lEb2N1bWVudC5oIGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCi0tLSBh
L2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaAorKysgYi9jb250ZW50L2Jhc2UvcHVi
bGljL25zSURvY3VtZW50LmgKQEAgLTQ1MSwxNiArNDUxLDM1IEBAIHB1YmxpYzoKICAgICogQHNl
ZSBuc0JpZGlVdGlscy5oCiAgICAqLwogICB2b2lkIFNldEJpZGlPcHRpb25zKFBSVWludDMyIGFC
aWRpT3B0aW9ucykKICAgewogICAgIG1CaWRpT3B0aW9ucyA9IGFCaWRpT3B0aW9uczsKICAgfQog
ICAKICAgLyoqCisgICAqIFNldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4g
VGhpcyBzaG91bGQgb25seSBoYXBwZW4gYXQgCisgICAqIGF0IGRvY3VtZW50IGxvYWQsIHRoZSBm
bGFncyBhcmUgaW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBhdCBsb2FkIHRpbWUuCisgICAqIEAg
c2VlIG5zRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIHZvaWQg
U2V0U2FuZGJveEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCisgIHsKKyAgICBtU2FuZGJv
eEZsYWdzID0gYVNhbmRib3hGbGFnczsKKyAgfQorICAKKyAgLyoqIAorICAgKiBHZXQgdGhlIHNh
bmRveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudAorICAgKiBAc2VlIG5zRG9jU2hlbGwuaWRsIGZv
ciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIEdldFNhbmRib3hGbGFncygp
IGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAgfQorICAgCisgIC8qKgog
ICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxzbyBnZXQgc2V0IGZyb20g
b3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncykuCiAgICAqLwogICB2aXJ0
dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmllbGQsIG5zQVN0cmluZyYg
YURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRlckRhdGEobnNJQXRvbSog
YWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7CiAKICAgLyoqCiAgICAq
IENyZWF0ZSBhIG5ldyBwcmVzZW50YXRpb24gc2hlbGwgdGhhdCB3aWxsIHVzZSBhQ29udGV4dCBm
b3IgaXRzCkBAIC0xNzM4LDE2ICsxNzU3LDIxIEBAIHByb3RlY3RlZDoKICAgLy8gSWYgbUlzU3Rh
dGljRG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBvcmln
aW5hbAogICAvLyBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5hbERv
Y3VtZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQuICBXaGF0
IHRoaXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5oCiAg
IFBSVWludDMyIG1CaWRpT3B0aW9uczsKIAorICAvLyBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUg
ZG9jdW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZSBvZiB0aGUgCisgIC8vIGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250
ZW50LCBpZiBleGlzdGVudC4gVGhlc2UgYXJlIHNldCBhdCBsb2FkIHRpbWUgYW5kCisgIC8vYXJl
IGltbXV0YWJsZSAtIHNlZSBuc0RvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzICAg
CisgIFBSVWludDMyIG1TYW5kYm94RmxhZ3M7CisgIAogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5n
dWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAK
ICAgLy8gVGhlIGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0
cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRl
bnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9j
b250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3Jj
L25zQ29udGVudFV0aWxzLmNwcApAQCAtNjY0LDE3ICs2NjQsMzYgQEAgbnNDb250ZW50VXRpbHM6
OkdldFBhcnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1Bh
cnNlclNlcnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikp
IHsKICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVy
biBzUGFyc2VyU2VydmljZTsKIH0KLQorLyoqCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBh
cnNlcyBhIHNhbmRib3ggYXR0cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICogYSBDU1AgZGly
ZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFs
bHkKKyAqCisgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0
dHJpYnV0ZQorICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZsYWdzCisgKi8KK1BSVWludDMyCitu
c0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhuc1N0cmluZyAmIGFB
dHRyaWJ1dGUpCit7CisgIFBSVWludDMyIG91dCA9IDA7CisgIAorICAvLyBpZiB0aGVyZSdzIGEg
c2FuZGJveCBhdHRyaWJ1dGUgYXQgYWxsLCBzZXQgU0FOREJPWF9GTEFHU19TQU5EQk9YRUQKKyAg
b3V0IHw9IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX1NBTkRCT1hFRDsKKyAgCisgIC8vIFRP
RE86IGFkZCB0aGUgcmVzdCBvZiB0aGUgcGFyc2luZyBoZXJlCisgIAorICByZXR1cm4gb3V0Owor
fQorICAKICNpZmRlZiBNT1pfWFRGCiBuc0lYVEZTZXJ2aWNlKgogbnNDb250ZW50VXRpbHM6Okdl
dFhURlNlcnZpY2UoKQogewogICBpZiAoIXNYVEZTZXJ2aWNlKSB7CiAgICAgbnNyZXN1bHQgcnYg
PSBDYWxsR2V0U2VydmljZShrWFRGU2VydmljZUNJRCwgJnNYVEZTZXJ2aWNlKTsKICAgICBpZiAo
TlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1hURlNlcnZpY2UgPSBuc251bGw7CkBAIC01NzUxLDE3
ICs1NzcwLDE4IEBAIG5zQ29udGVudFV0aWxzOjpVUklJbmhlcml0c1NlY3VyaXR5Q29udGUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJlc3VsdCk7CiB9CiAKIC8vIHN0YXRpYwogYm9v
bAogbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRp
bmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5l
bCogYUNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBh
VVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJv
dXRCbGFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZv
ckFib3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9y
Y2VPd25lcikKIHsKICAgLy8KICAgLy8gU2V0IHRoZSBvd25lciBvZiB0aGUgY2hhbm5lbCwgYnV0
IG9ubHkgZm9yIGNoYW5uZWxzIHRoYXQgY2FuJ3QKICAgLy8gcHJvdmlkZSB0aGVpciBvd24gc2Vj
dXJpdHkgY29udGV4dC4KICAgLy8KICAgLy8gWFhYOiBJdCBzZWVtcyB3cm9uZyB0aGF0IHRoZSBv
d25lciBpcyBpZ25vcmVkIC0gZXZlbiBpZiBvbmUgaXMKICAgLy8gICAgICBzdXBwbGllZCkgdW5s
ZXNzIHRoZSBVUkkgaXMgamF2YXNjcmlwdCBvciBkYXRhIG9yIGFib3V0OmJsYW5rLgogICAvLyBY
WFg6IElmIHRoaXMgaXMgZXZlciBjaGFuZ2VkLCBjaGVjayBhbGwgY2FsbGVycyBmb3Igd2hhdCBv
d25lcnMKQEAgLTU3NjksMjMgKzU3ODksMjcgQEAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5l
bE93bmVyKG5zSVByaQogICAvLyAgICAgIGNvbW1lbnRzIGluIG5zRG9jU2hlbGw6OkxvYWRVUkkg
d2hlcmUgd2UgZmFsbCBiYWNrIG9uCiAgIC8vICAgICAgaW5oZXJpdGluZyB0aGUgb3duZXIgaWYg
Y2FsbGVkIGZyb20gY2hyb21lLiAgVGhhdCB3b3VsZCBiZQogICAvLyAgICAgIHZlcnkgd3Jvbmcg
aWYgdGhpcyBjb2RlIGNoYW5nZWQgYW55dGhpbmcgYnV0IGNoYW5uZWxzIHRoYXQKICAgLy8gICAg
ICBjYW4ndCBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBjb250ZXh0IQogICAvLwogICAvLyAg
ICAgIChDdXJyZW50bHkgY2hyb21lIFVSSXMgc2V0IHRoZSBvd25lciB3aGVuIHRoZXkgYXJlIGNy
ZWF0ZWQhCiAgIC8vICAgICAgU28gc2V0dGluZyBhIE5VTEwgb3duZXIgd291bGQgYmUgYmFkISkK
ICAgLy8KKyAgLy8gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyIHdpbGwgYmUgc2V0
LCBldmVuIGZvciBhIGNoYW5uZWwgdGhhdAorICAvLyBjYW4gcHJvdmlkZSBpdHMgb3duIHNlY3Vy
aXR5IGNvbnRlbnQuIFRoaXMgaXMgdXNlZCBmb3IgdGhlIEhUTUw1IElGUkFNRQorICAvLyBzYW5k
Ym94IGF0dHJpYnV0ZSwgc28gd2UgY2FuIGZvcmNlIHRoZSBjaGFubmVsIChhbmQgaXRzIGRvY3Vt
ZW50KSB0bworICAvLyBleHBsaWNpdGx5IGhhdmUgYSBudWxsIHByaW5jaXBhbAogICBib29sIGlu
aGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dCB0byByZXR1
cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24ndCBjYWxsIE5T
X0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBjb25kaXRpb24g
bmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQgd2hlcmUK
ICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRoZSBvd25lci4K
LSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5o
ZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19J
c0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChOU19TVUNDRUVE
RUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgorICAgICAg
KGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkp
KSkpKSkgewogICAgIGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAg
cmV0dXJuIHRydWU7CiAgIH0KIAogICAvLwogICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcK
ICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBm
aWxlOiB0aGVuIGl0IG1heSBuZWVkCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9j
dW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50
L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVu
dC5jcHAKQEAgLTIzNzMsMTYgKzIzNzMsMjUgQEAgbnNEb2N1bWVudDo6U3RhcnREb2N1bWVudExv
YWQoY29uc3QgY2hhcgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgnOycsIHNlbWljb2xvbiwgZW5k
KTsKICAgICBTZXRDb250ZW50VHlwZUludGVybmFsKFN1YnN0cmluZyhzdGFydCwgc2VtaWNvbG9u
KSk7CiAgIH0KIAogICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhhQ2hhbm5lbCk7CiAKICAgbUNo
YW5uZWwgPSBhQ2hhbm5lbDsKIAorICAvLyBpZiB0aGlzIGRvY3VtZW50IGlzIGJlaW5nIGxvYWRl
ZCBieSBhIGRvY3NoZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdzCisgIC8vIHRvIHRoZSBkb2N1
bWVudC4gVGhlc2UgYXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgaGVyZS4KKyAgbnNDT01Q
dHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNvbnRhaW5lcik7
CisgIAorICBpZiAoZG9jU2hlbGwpIHsKKyAgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0
U2FuZGJveEZsYWdzKCZtU2FuZGJveEZsYWdzKTsKKwkgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2
KTsKKyAgfQorICAKICAgbnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNEb2N1bWVu
dDo6SW5pdENTUCgpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaCBi
L2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNE
b2N1bWVudC5oCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5oCkBAIC0xMjQ1LDE3
ICsxMjQ1LDE3IEBAIHByaXZhdGU6CiAgIG5zQ1N0cmluZyBtU2Nyb2xsVG9SZWY7CiAgIFBSVWlu
dDggbVNjcm9sbGVkVG9SZWZBbHJlYWR5IDogMTsKICAgUFJVaW50OCBtQ2hhbmdlU2Nyb2xsUG9z
V2hlblNjcm9sbGluZ1RvUmVmIDogMTsKIAogICAvLyBUcmFja2luZyBmb3IgaW1hZ2VzIGluIHRo
ZSBkb2N1bWVudC4KICAgbnNEYXRhSGFzaHRhYmxlPCBuc1B0ckhhc2hLZXk8aW1nSVJlcXVlc3Q+
LCBQUlVpbnQzMj4gbUltYWdlVHJhY2tlcjsKIAogICBWaXNpYmlsaXR5U3RhdGUgbVZpc2liaWxp
dHlTdGF0ZTsKLQorICAKICNpZmRlZiBERUJVRwogcHJvdGVjdGVkOgogICBib29sIG1XaWxsUmVw
YXJlbnQ7CiAjZW5kaWYKIH07CiAKICNkZWZpbmUgTlNfRE9DVU1FTlRfSU5URVJGQUNFX1RBQkxF
X0JFR0lOKF9jbGFzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgTlNfTk9ERV9P
RkZTRVRfQU5EX0lOVEVSRkFDRV9UQUJMRV9CRUdJTihfY2xhc3MpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5j
cHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCi0tLSBhL2NvbnRlbnQvYmFz
ZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9h
ZGVyLmNwcApAQCAtNDY2LDIwICs0NjYsMTAzIEBAIG5zRnJhbWVMb2FkZXI6OlJlYWxseVN0YXJ0
TG9hZGluZ0ludGVybmEKICAgLy8gSnVzdCB0byBiZSBzYWZlLCByZWNoZWNrIHVyaS4KICAgcnYg
PSBDaGVja1VSSUxvYWQobVVSSVRvTG9hZCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7
CiAKICAgbnNDT01QdHI8bnNJRG9jU2hlbGxMb2FkSW5mbz4gbG9hZEluZm87CiAgIG1Eb2NTaGVs
bC0+Q3JlYXRlTG9hZEluZm8oZ2V0dGVyX0FkZFJlZnMobG9hZEluZm8pKTsKICAgTlNfRU5TVVJF
X1RSVUUobG9hZEluZm8sIE5TX0VSUk9SX0ZBSUxVUkUpOwogCi0gIC8vIFdlJ2xsIHVzZSBvdXIg
cHJpbmNpcGFsLCBub3QgdGhhdCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRo
aXMKLSAgLy8gaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tz
IG9uIGRvY3VtZW50cyBsb2FkZWQgaW4KLSAgLy8gc3ViZnJhbWVzIQotICBsb2FkSW5mby0+U2V0
T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKKyAgbnNTdHJpbmcgc2FuZGJv
eEF0dHI7ICAKKyAgUFJVaW50MzIgcGFyZW50U2FuZGJveEZsYWdzID0gMDsKKworICAvLyBnZXQg
dGhlIHBhcmVudCdzIHNhbmRib3ggZmxhZ3MsIHRoZXkncmUgbmVlZGVkIHRvIGRldGVybWluZSBp
ZiB0aGUKKyAgLy8gZnJhbWUgYmVpbmcgbG9hZGVkIGJlbG93IG5lZWRzIHRvIGJlIHNhbmRib3hl
ZAorICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnREb2NTaGVsbEl0ZW07Cisg
IG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IGN1ckRvY1NoZWxsSXRlbShkb19RdWVyeUlu
dGVyZmFjZShtRG9jU2hlbGwpKTsKKyAgCisgIGlmIChOU19TVUNDRUVERUQoY3VyRG9jU2hlbGxJ
dGVtLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50RG9jU2hlbGxJdGVtKSkpKSB7Cisg
ICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IHBhcmVudERvYyA9IGRvX0dldEludGVyZmFjZShwYXJl
bnREb2NTaGVsbEl0ZW0pOworICAgIAorICAgIGlmIChwYXJlbnREb2MpIHsKKyAgICAgIHBhcmVu
dFNhbmRib3hGbGFncyA9IHBhcmVudERvYy0+R2V0U2FuZGJveEZsYWdzKCk7CisgICAgfQorICB9
ICAKKworICAvLyBpcyB0aGlzIGFuIDxpZnJhbWU+IHdpdGggYSBzYW5kYm94IGF0dHJpYnV0ZSBv
ciBhIGZyYW1lIHdob3NlIHBhcmVudAorICAvLyBpcyBzYW5kYm94ZWQgPyAgCisgIGlmIChwYXJl
bnRTYW5kYm94RmxhZ3MgfHwgCisgICAgIChtT3duZXJDb250ZW50LT5HZXRBdHRyKGtOYW1lU3Bh
Y2VJRF9Ob25lLCBuc0drQXRvbXM6OnNhbmRib3gsIHNhbmRib3hBdHRyKSAmJgorICAgICAgbU93
bmVyQ29udGVudC0+SXNIVE1MKG5zR2tBdG9tczo6aWZyYW1lKSkpIHsgCisgIAorICAgIFBSVWlu
dDMyIHNhbmRib3hGbGFncyA9IG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVU
b0ZsYWdzKHNhbmRib3hBdHRyKTsKKworICAgIGlmIChwYXJlbnRTYW5kYm94RmxhZ3MpIHsgCisg
ICAgICAvLyBkbyB0aGUgaW50ZXJzZWN0aW9uIHdpdGggdGhlIGN1cnJlbnQgZmxhZ3MgaW4gdGhl
IGRvY3NoZWxsIQorICAgICAgCisgICAgICAvLyBUT0RPOiBwcm9iYWJseSB3YW50IHRvIG1ha2Ug
dGhpcyBhIGZ1bmN0aW9uIGluIG5zQ29udGVudFV0aWxzIAorICAgICAgLy8gd2lsbCBsaWtlbHkg
YmUgbmVlZGVkIGVsc2V3aGVyZSAoZS5nLiBDU1Agc2FuZGJveCBpbnRlcnNlY3Rpb24pIAorCisg
ICAgICAvLyBpZiBwYXJlbnQgaXMgc2FuZGJveGVkLCBjdXJyZW50IGRvY3NoZWxsIGlzIHNhbmRi
b3hlZAorICAgICAgc2FuZGJveEZsYWdzIHw9IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX1NB
TkRCT1hFRDsKKyAgCisgICAgICAvLyBpZiBjdXJyZW50IGRvY3NoZWxsIGhhcyBhbGxvdy1zYW1l
LWRvbWFpbiBidXQgcGFyZW50IGRvZXMgbm90LAorICAgICAgLy8gY2xlYXIgYWxsb3ctc2FtZS1k
b21haW4KKyAgICAgIGlmICgoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxB
R1NfQUxMT1dfU0FNRV9ET01BSU4pICYmCisgICAgICAgICAgIShwYXJlbnRTYW5kYm94RmxhZ3Mg
JiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19TQU1FX0RPTUFJTikpCisgICAgICAg
IHNhbmRib3hGbGFncyB8PSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9E
T01BSU47CisgICAgICAKKyAgICAgIC8vIGlmIGN1cnJlbnQgZG9jc2hlbGwgaGFzIGFsbG93LXNj
cmlwdHMgYnV0IHBhcmVudCBkb2VzIG5vdCwKKyAgICAgIC8vIGNsZWFyIGFsbG93LXNjcmlwdHMK
KyAgICAgIGlmICgoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxM
T1dfU0NSSVBUUykgJiYKKyAgICAgICAgICAhKHBhcmVudFNhbmRib3hGbGFncyAmIG5zSURvY1No
ZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1NDUklQVFMpKQorICAgICAgICBzYW5kYm94RmxhZ3Mg
fD0gfm5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1NDUklQVFM7CisgICAgICAKKyAg
ICAgICAvLyBpZiBjdXJyZW50IGRvY3NoZWxsIGhhcyBhbGxvdy10b3AtbmF2aWdhdGlvbiBidXQg
cGFyZW50IGRvZXMgbm90LAorICAgICAgIC8vIGNsZWFyIGFsbG93LXRvcC1uYXZpZ2F0aW9uCisg
ICAgICAgaWYgKChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExP
V19UT1BfTkFWSUdBVElPTikgJiYKKyAgICAgICAgICAgIShwYXJlbnRTYW5kYm94RmxhZ3MgJiBu
c0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19UT1BfTkFWSUdBVElPTikpCisgICAgICAg
ICBzYW5kYm94RmxhZ3MgfD0gfm5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1RPUF9O
QVZJR0FUSU9OOworICAgICAgCisgICAgICAgLy8gaWYgY3VycmVudCBkb2NzaGVsbCBoYXMgYWxs
b3ctZm9ybXMgYnV0IHBhcmVudCBkb2VzIG5vdCwKKyAgICAgICAvLyBjbGVhciBhbGxvdy1mb3Jt
cworICAgICAgIGlmICgoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1Nf
QUxMT1dfRk9STV9TVUJNSVQpICYmCisgICAgICAgICAgICEocGFyZW50U2FuZGJveEZsYWdzICYg
bnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfRk9STV9TVUJNSVQpKQorICAgICAgICAg
c2FuZGJveEZsYWdzIHw9IH5uc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NV
Qk1JVDsKKyAgICAgfQorICAKKyAgICBtRG9jU2hlbGwtPlNldFNhbmRib3hGbGFncyhzYW5kYm94
RmxhZ3MpOworICAgIAorICAgIC8vIHNldCB1cCB0aGUgYWN0dWFsIHNhbmRib3hpbmcgYXMgc3Bl
Y2lmaWVkIAorICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFH
U19TQU5EQk9YRUQpIHsKKyAgICAgIGlmICghKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpT
QU5EQk9YX0ZMQUdTX0FMTE9XX1NBTUVfRE9NQUlOKSkgeworICAgICAgICAvLyBhbGxvdy1zYW1l
LWRvbWFpbiB3YXNuJ3Qgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBudWxsIHBy
aW5jaXBhbCBhbmQgCisgICAgICAgIC8vIHVzZSB0aGF0IGFzIHRoZSBvd25lcgorICAgICAgICBu
c0NPTVB0cjxuc0lQcmluY2lwYWw+IG51bGxQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0YW5jZSgi
QG1vemlsbGEub3JnL251bGxwcmluY2lwYWw7MSIpOworICAgICAgICBsb2FkSW5mby0+U2V0T3du
ZXIobnVsbFByaW5jaXBhbCk7CisgICAgICB9IGVsc2UgeyAKKyAgICAgICAgLy8gdXNlIHRoZSAn
bm9ybWFsJyBwcmluY2lwYWwgZm9yIHRoZSA8aWZyYW1lPiAtIHNlZSBub3RlIGJlbG93CisgICAg
ICAgIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOwor
ICAgICAgfQorICAKKyAgICAgIGlmICghKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5E
Qk9YX0ZMQUdTX0FMTE9XX1NDUklQVFMpKSB7CisgICAgICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dK
YXZhc2NyaXB0KGZhbHNlKTsKKyAgICAgIH0KKyAgICAKKyAgICAgIC8vIF9hbHdheXNfIGRpc2Fs
bG93IHBsdWdpbnMgd2hlbiBzYW5kYm94ZWQKKyAgICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dQbHVn
aW5zKGZhbHNlKTsKKyAgICB9IAorICB9CisKKyAgZWxzZSB7IAorICAgIC8vIG5vdCBzYW5kYm94
ZWQgc28gd2UgdXNlIG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZSBkb2N1bWVudCBsb2Fk
ZWQgaW5zaWRlIHVzLiAgVGhpcworICAgIC8vIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVkZWQgdG8g
cHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluCisgICAgLy8gc3ViZnJh
bWVzIQorICAgIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFs
KCkpOworICB9CiAKICAgbnNDT01QdHI8bnNJVVJJPiByZWZlcnJlcjsKICAgcnYgPSBtT3duZXJD
b250ZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhyZWZlcnJlcikp
OwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIGxvYWRJbmZvLT5TZXRSZWZlcnJl
cihyZWZlcnJlcik7CiAKICAgLy8gS2ljayBvZmYgdGhlIGxvYWQuLi4KZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9t
TGlzdC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKKysrIGIvY29udGVu
dC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaApAQCAtODc2LDE2ICs4NzYsMTcgQEAgR0tfQVRPTShy
b3dzcGFuLCAicm93c3BhbiIpCiBHS19BVE9NKHJwLCAicnAiKQogR0tfQVRPTShydCwgInJ0IikK
IEdLX0FUT00ocnRsLCAicnRsIikKIEdLX0FUT00ocnVieSwgInJ1YnkiKQogR0tfQVRPTShydWxl
LCAicnVsZSIpCiBHS19BVE9NKHJ1bGVzLCAicnVsZXMiKQogR0tfQVRPTShzLCAicyIpCiBHS19B
VE9NKHNhbXAsICJzYW1wIikKK0dLX0FUT00oc2FuZGJveCwgInNhbmRib3giKQogR0tfQVRPTShz
YmF0dHIsICJzYmF0dHIiKQogR0tfQVRPTShzY2FsZSwgInNjYWxlIikKIEdLX0FUT00oc2Nhbiwg
InNjYW4iKQogR0tfQVRPTShzY2hlbWUsICJzY2hlbWUiKQogR0tfQVRPTShzY29wZSwgInNjb3Bl
IikKIEdLX0FUT00oc2NvcGVkLCAic2NvcGVkIikKIEdLX0FUT00oc2NyZWVuLCAic2NyZWVuIikK
IEdLX0FUT00oc2NyZWVuWCwgInNjcmVlblgiKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3Ny
Yy9uc09iamVjdExvYWRpbmdDb250ZW50LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNPYmplY3RM
b2FkaW5nQ29udGVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc09iamVjdExvYWRpbmdD
b250ZW50LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zT2JqZWN0TG9hZGluZ0NvbnRlbnQu
Y3BwCkBAIC0xNDUwLDE3ICsxNDUwLDE3IEBAIG5zT2JqZWN0TG9hZGluZ0NvbnRlbnQ6OkxvYWRP
YmplY3QobnNJVVIKICAgICBOU19QYXJzZUNvbnRlbnRUeXBlKGFUeXBlSGludCwgdHlwZUhpbnQs
IGR1bW15KTsKICAgICBpZiAoIXR5cGVIaW50LklzRW1wdHkoKSkgewogICAgICAgY2hhbi0+U2V0
Q29udGVudFR5cGUodHlwZUhpbnQpOwogICAgIH0KICAgfQogCiAgIC8vIFNldCB1cCB0aGUgY2hh
bm5lbCdzIHByaW5jaXBhbCBhbmQgc3VjaCwgbGlrZSBuc0RvY1NoZWxsOjpEb1VSSUxvYWQgZG9l
cwogICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIodGhpc0NvbnRlbnQtPk5vZGVQ
cmluY2lwYWwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4sIGFV
UkksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbiwgYVVS
SSwgdHJ1ZSwgZmFsc2UpOwogCiAgIG5zQ09NUHRyPG5zSVNjcmlwdENoYW5uZWw+IHNjcmlwdENo
YW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShjaGFuKTsKICAgaWYgKHNjcmlwdENoYW5uZWwpIHsK
ICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBvdXIgY29udGV4dCBpZiB0aGUgcHJpbmNp
cGFscyBtYXRjaAogICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAgU2V0RXhlY3V0aW9uUG9saWN5
KG5zSVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFMKTsKICAgfQogCmRpZmYgLS1naXQgYS9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAgYi9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKLS0tIGEvY29udGVudC9o
dG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAtNDMsMTYgKzQzLDE3IEBA
CiAjaW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJuc0lET01TVkdE
b2N1bWVudC5oIgogI2luY2x1ZGUgIm5zR2tBdG9tcy5oIgogI2luY2x1ZGUgIm5zSURvY3VtZW50
LmgiCiAjaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAibnNET01FcnJv
ci5oIgogI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIKICNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgi
CisjaW5jbHVkZSAibnNET01TZXR0YWJsZVRva2VuTGlzdC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
bW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKIGNsYXNzIG5zSFRNTElG
cmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAogewpAQCAt
ODQsMzAgKzg1LDM5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNBU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
QXR0clZhbHVlJiBhUmVzdWx0KTsKICAgTlNfSU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1dGVNYXBw
ZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CiAgIHZpcnR1YWwgbnNNYXBSdWxl
VG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdDsKIAog
ICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5vZGUg
KiphUmVzdWx0KSBjb25zdDsKICAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xhc3NJbmZv
KCk7CisgIAorICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3Bh
Y2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNBU3RyaW5nKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBhTm90aWZ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3By
b3RlY3RlZDoKKyAgbnNSZWZQdHI8bnNET01TZXR0YWJsZVRva2VuTGlzdD4gIG1TYW5kYm94VG9r
ZW5MaXN0OwogfTsKIAogCiBOU19JTVBMX05TX05FV19IVE1MX0VMRU1FTlRfQ0hFQ0tfUEFSU0VS
KElGcmFtZSkKIAogCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojpuc0hUTUxJRnJhbWVFbGVtZW50KGFs
cmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRnJvbVBhcnNlciBhRnJvbVBhcnNlcikKICAgOiBuc0dl
bmVyaWNIVE1MRnJhbWVFbGVtZW50KGFOb2RlSW5mbywgYUZyb21QYXJzZXIpCiB7CiB9CiAKIG5z
SFRNTElGcmFtZUVsZW1lbnQ6On5uc0hUTUxJRnJhbWVFbGVtZW50KCkKIHsKKyAgaWYgKG1TYW5k
Ym94VG9rZW5MaXN0KQorICAgIG1TYW5kYm94VG9rZW5MaXN0LT5Ecm9wUmVmZXJlbmNlKCk7CiB9
CiAKIAogTlNfSU1QTF9BRERSRUZfSU5IRVJJVEVEKG5zSFRNTElGcmFtZUVsZW1lbnQsbnNHZW5l
cmljRWxlbWVudCkKIE5TX0lNUExfUkVMRUFTRV9JTkhFUklURUQobnNIVE1MSUZyYW1lRWxlbWVu
dCxuc0dlbmVyaWNFbGVtZW50KQogCiBET01DSV9OT0RFX0RBVEEoSFRNTElGcmFtZUVsZW1lbnQs
IG5zSFRNTElGcmFtZUVsZW1lbnQpCiAKQEAgLTE1MCwxNiArMTYwLDI4IEBAIG5zSFRNTElGcmFt
ZUVsZW1lbnQ6OkdldENvbnRlbnRXaW5kb3cobnMKIH0KIAogTlNfSU1FVEhPRElNUAogbnNIVE1M
SUZyYW1lRWxlbWVudDo6R2V0U1ZHRG9jdW1lbnQobnNJRE9NRG9jdW1lbnQgKiphUmVzdWx0KQog
ewogICByZXR1cm4gR2V0Q29udGVudERvY3VtZW50KGFSZXN1bHQpOwogfQogCitOU19JTUVUSE9E
SU1QCituc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRTYW5kYm94KG5zSURPTURPTVNldHRhYmxlVG9r
ZW5MaXN0KiogYVNhbmRib3gpCit7CisgIGlmICghbVNhbmRib3hUb2tlbkxpc3QpIHsKKyAgICBt
U2FuZGJveFRva2VuTGlzdCA9IG5ldyBuc0RPTVNldHRhYmxlVG9rZW5MaXN0KHRoaXMsIG5zR2tB
dG9tczo6c2FuZGJveCk7CisgIH0KKyAKKyAgTlNfQUREUkVGKCphU2FuZGJveCA9IG1TYW5kYm94
VG9rZW5MaXN0KTsKKyAKKyAgcmV0dXJuIE5TX09LOworfQorCiBib29sCiBuc0hUTUxJRnJhbWVF
bGVtZW50OjpQYXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KQogewog
ICBpZiAoYU5hbWVzcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CiAgICAgaWYgKGFBdHRy
aWJ1dGUgPT0gbnNHa0F0b21zOjptYXJnaW53aWR0aCkgewpAQCAtMjY4LDggKzI5MCwyNSBAQCBu
c0hUTUxJRnJhbWVFbGVtZW50OjpJc0F0dHJpYnV0ZU1hcHBlZChjCiAKIAogbnNNYXBSdWxlVG9B
dHRyaWJ1dGVzRnVuYwogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0QXR0cmlidXRlTWFwcGluZ0Z1
bmN0aW9uKCkgY29uc3QKIHsKICAgcmV0dXJuICZNYXBBdHRyaWJ1dGVzSW50b1J1bGU7CiB9CiAK
K25zcmVzdWx0Cituc0hUTUxJRnJhbWVFbGVtZW50OjpBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFt
ZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG5zQVN0cmluZyogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYU5vdGlmeSkKK3sKKyAgaWYgKGFOYW1lID09IG5zR2tBdG9tczo6c2FuZGJv
eCAmJiBhTmFtZVNwYWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKKyAgICAvLyBwYXJzZSB0
aGUgbmV3IHNhbmRib3ggYXR0cmlidXRlJ3MgdmFsdWUgYW5kIHNldCB0aGUgc2FuZGJveCBmbGFn
cyBpbiB0aGUgZG9jc2hlbGwgYXBwcm9wcmlhdGVseQorICAgIC8vIFRPRE86IG1ha2UgYSAnY29u
dmVydCBzYW5kYm94IHN0cmluZyBhdHRyaWJ1dGUgdG8gZmxhZ3MnIGZ1bmN0aW9uCisgICAgLy8g
VE9ETzogYXMgcGFydCBvZiBmaWd1cmluZyBvdXQgYSBzaW5nbGUgaG9tZSBmb3IgdGhlIHNhbmRi
b3ggZmxhZyBjb25zdGFudHMsIGZpZ3VyZSBvdXQgaG93CisgICAgLy8gdG8gaW5jbHVkZSB0aGF0
IHNpbmdsZSBob21lJ3MgZGVmaW5pdGlvbnMgc28gd2UgY2FuIHVzZSB0aGVtIGhlcmUKKwlpZiAo
bUZyYW1lTG9hZGVyKQorICAgICAgbUZyYW1lTG9hZGVyLT5HZXRFeGlzdGluZ0RvY1NoZWxsKCkt
PlNldFNhbmRib3hGbGFncygxKTsKKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6
OkFmdGVyU2V0QXR0cihhTmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOb3RpZnkpOworfQorCmRpZmYgLS1naXQg
YS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxs
LmNwcAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jh
c2UvbnNEb2NTaGVsbC5jcHAKQEAgLTc0NSwxNyArNzQ1LDE4IEBAIG5zRG9jU2hlbGw6Om5zRG9j
U2hlbGwoKToKICAgICBtSXNBcHBUYWIoZmFsc2UpLAogICAgIG1Vc2VHbG9iYWxIaXN0b3J5KGZh
bHNlKSwKICAgICBtRmlyZWRVbmxvYWRFdmVudChmYWxzZSksCiAgICAgbUVPREZvckN1cnJlbnRE
b2N1bWVudChmYWxzZSksCiAgICAgbVVSSVJlc3VsdGVkSW5Eb2N1bWVudChmYWxzZSksCiAgICAg
bUlzQmVpbmdEZXN0cm95ZWQoZmFsc2UpLAogICAgIG1Jc0V4ZWN1dGluZ09uTG9hZEhhbmRsZXIo
ZmFsc2UpLAogICAgIG1Jc1ByaW50aW5nT3JQUChmYWxzZSksCi0gICAgbVNhdmluZ09sZFZpZXdl
cihmYWxzZSkKKyAgICBtU2F2aW5nT2xkVmlld2VyKGZhbHNlKSwKKyAgICBtU2FuZGJveEZsYWdz
KDApCiAjaWZkZWYgREVCVUcKICAgICAsIG1JbkVuc3VyZVNjcmlwdEVudihmYWxzZSkKICNlbmRp
ZgogewogICAgIG1IaXN0b3J5SUQgPSArK2dEb2NzaGVsbElEQ291bnRlcjsKICAgICBpZiAoZ0Rv
Y1NoZWxsQ291bnQrKyA9PSAwKSB7CiAgICAgICAgIE5TX0FTU0VSVElPTihzVVJJRml4dXAgPT0g
bnNudWxsLAogICAgICAgICAgICAgICAgICAgICAgIkh1aCwgc1VSSUZpeHVwIG5vdCBudWxsIGlu
IGZpcnN0IG5zRG9jU2hlbGwgY3RvciEiKTsKQEAgLTQ5MTAsMTYgKzQ5MTEsMzIgQEAgbnNEb2NT
aGVsbDo6U2V0SXNBcHBUYWIoYm9vbCBhSXNBcHBUYWIpCiBOU19JTUVUSE9ESU1QCiBuc0RvY1No
ZWxsOjpHZXRJc0FwcFRhYihib29sICphSXNBcHBUYWIpCiB7CiAgICphSXNBcHBUYWIgPSBtSXNB
cHBUYWI7CiAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6
U2V0U2FuZGJveEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCit7CisgIG1TYW5kYm94Rmxh
Z3MgPSBhU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAK
K25zRG9jU2hlbGw6OkdldFNhbmRib3hGbGFncyhQUlVpbnQzMiAgKmFTYW5kYm94RmxhZ3MpCit7
CisgIE5TX0VOU1VSRV9BUkdfUE9JTlRFUihhU2FuZGJveEZsYWdzKTsKKyAgCisgICphU2FuZGJv
eEZsYWdzID0gbVNhbmRib3hGbGFnczsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9E
SU1QCiBuc0RvY1NoZWxsOjpTZXRWaXNpYmlsaXR5KGJvb2wgYVZpc2liaWxpdHkpCiB7CiAgICAg
aWYgKCFtQ29udGVudFZpZXdlcikKICAgICAgICAgcmV0dXJuIE5TX09LOwogICAgIGlmIChhVmlz
aWJpbGl0eSkgewogICAgICAgICBtQ29udGVudFZpZXdlci0+U2hvdygpOwogICAgIH0KICAgICBl
bHNlIHsKQEAgLTg4NzksMTggKzg4OTYsMzAgQEAgbnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVS
SSAqIGFVUkksCiAgICAgICAgIH0KICAgICAgICAgLy8gU2V0IHRoZSByZWZlcnJlciBleHBsaWNp
dGx5CiAgICAgICAgIGlmIChhUmVmZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJlcikgewogICAgICAg
ICAgICAgLy8gUmVmZXJyZXIgaXMgY3VycmVubHkgb25seSBzZXQgZm9yIGxpbmsgY2xpY2tzIGhl
cmUuCiAgICAgICAgICAgICBodHRwQ2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJlZmVycmVyVVJJKTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmlu
Y2lwYWwoZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKSk7Ci0gICAgbnNDb250ZW50VXRpbHM6OlNl
dFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlKTsKKwlu
c0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFP
d25lcikpOworCQorICAgIC8vIElmIHRoZSBjb250ZW50IGlzIHNhbmRib3hlZCwgZm9yY2UgdGhl
IHBhc3NlZCBpbiBvd25lciAod2hpY2ggc2hvdWxkIGJlIAorCS8vIGEgbnVsbCBwcmluY2lwYWwp
IHRvIGJlIHNldCBvbiB0aGUgY2hhbm5lbCwgVU5MRVNTIHRoZSBzYW5kYm94IGFsbG93LXNhbWUt
ZG9tYWluIGZsYWcgaXMgYWxzbworICAgIC8vIHNldC4gSW4gdGhhdCBjYXNlLCBhbGxvdyB0aGUg
Y29udGVudCB0byBhc3NzdW1lIGl0cyAibmF0dXJhbCBkb21haW4iIGFzIGl0CisgICAgLy8gbm9y
bWFsbHkgd291bGQuIAorICAgIGlmICgobVNhbmRib3hGbGFncyAmIFNBTkRCT1hfRkxBR1NfU0FO
REJPWEVEKSAmJiAKKyAgICAgICAgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YX0ZMQUdTX0FMTE9X
X1NBTUVfRE9NQUlOKSAhPSBTQU5EQk9YX0ZMQUdTX0FMTE9XX1NBTUVfRE9NQUlOKSB7CisgICAg
ICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5u
ZWwsIGFVUkksIHRydWUsIHRydWUpOworICAgIH0KKwkKKyAgICBlbHNlIHsKKyAgICAgIG5zQ29u
dGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVS
SSwgdHJ1ZSwgZmFsc2UpOworICAgIH0KIAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENoYW5uZWw+
IHNjcmlwdENoYW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShjaGFubmVsKTsKICAgICBpZiAoc2Ny
aXB0Q2hhbm5lbCkgewogICAgICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBvdXIgY29u
dGV4dCBpZiB0aGUgcHJpbmNpcGFscyBtYXRjaAogICAgICAgICBzY3JpcHRDaGFubmVsLT4KICAg
ICAgICAgICAgIFNldEV4ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05P
Uk1BTCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaCBi
L2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVs
bC5oCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03ODAsMTYgKzc4MCwxOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgLy8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBpcyBub3Qg
ZXhwZWN0ZWQgdG8gY2hhbmdlLgogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1JdGVt
VHlwZTsKIAogICAgIC8vIEluZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwgaW5kaWNh
dGluZyB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBhdCB0aGUg
dGltZSB0aGF0IHRoaXMgRG9jU2hlbGwgYmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMyICAgICAg
ICAgICAgICAgICAgICBtUHJldmlvdXNUcmFuc0luZGV4OwogICAgIFBSSW50MzIgICAgICAgICAg
ICAgICAgICAgIG1Mb2FkZWRUcmFuc0luZGV4OwogCisgICAgUFJVaW50MzIgICAgICAgICAgICAg
ICAgICAgbVNhbmRib3hGbGFnczsKKyAgICAKICAgICBib29sICAgICAgICAgICAgICAgICAgICAg
ICBtQ3JlYXRlZDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJmcmFt
ZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAgICBi
b29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wgICAg
ICAgICAgICAgICAgICAgICAgIG1BbGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAgICAg
ICAgICAgICAgICAgICAgbUFsbG93SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAg
ICAgIG1BbGxvd0ROU1ByZWZldGNoOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1B
bGxvd1dpbmRvd0NvbnRyb2w7CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxs
LmlkbCBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCi0tLSBhL2RvY3NoZWxsL2Jhc2Uv
bnNJRG9jU2hlbGwuaWRsCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCkBAIC01
NDgsOSArNTQ4LDQ0IEBAIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiAgICAq
LwogICBhdHRyaWJ1dGUgYm9vbGVhbiBpc0FwcFRhYjsKIAogICAvKioKICAgICogQ3JlYXRlIGEg
bmV3IGFib3V0OmJsYW5rIGRvY3VtZW50IGFuZCBjb250ZW50IHZpZXdlci4KICAgICogQHBhcmFt
IGFQcmluY2lwYWwgdGhlIHByaW5jaXBhbCB0byB1c2UgZm9yIHRoZSBuZXcgZG9jdW1lbnQuCiAg
ICAqLwogICB2b2lkIGNyZWF0ZUFib3V0QmxhbmtDb250ZW50Vmlld2VyKGluIG5zSVByaW5jaXBh
bCBhUHJpbmNpcGFsKTsKKyAgCisgIC8qKiAKKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhl
IGRvY3NoZWxsLiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1
dGUgb2YgdGhlIAorICAgKiBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29u
dGVudCwgaWYgZXhpc3RlbnQuIFNlZSB0aGUgSFRNTDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgor
ICAgKiBUaGVzZSBmbGFncyBvbiB0aGUgZG9jc2hlbGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0
ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuCisgICAqIFRo
ZXkgYXJlIG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcgbmV3IGNvbnRlbnQsIHNhbmRib3ggZmxhZ3Mg
YXJlIGFsc28gaW1tdXRhYmx5IHNldCBvbiB0aGUgZG9jdW1lbnQKKyAgICogd2hlbiBpdCBpcyBs
b2FkZWQuIFRoZSBzYW5kYm94IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5k
Ym94IGZsYWdzIG9uIGl0cyBkb2NzaGVsbAorICAgKiBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVu
dCwgaWYgYW55LiAKKyAgICovICAgCisgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHNhbmRib3hG
bGFnczsKKyAgCisgIC8qKiAKKyAgICogVGhlIGNvbnRlbnQgaXMgc2FuZGJveGVkIGFuZCBpc29s
YXRlZCB3aXRoIGEgbnVsbCBwcmluY2lwYWwuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25n
IFNBTkRCT1hfRkxBR1NfU0FOREJPWEVEICA9IDB4MTsgCisgIAorICAvKioKKyAgICogVGhlIGNv
bnRlbnQgaXMgc2FuZGJveGVkIGFuZCBpc29sYXRlZCB3aXRoIG51bGwgcHJpbmNpcGFsIG9yaWdp
bmFsbHkgYnV0IHRvcCBuYXZpZ2F0aW9uIGlzIGFsbG93ZWQuIAorICAgKi8KKyAgY29uc3QgdW5z
aWduZWQgbG9uZyBTQU5EQk9YX0ZMQUdTX0FMTE9XX1RPUF9OQVZJR0FUSU9OID0gMHgyOworICAg
CisgIC8qKgorICAgKiBUaGUgY29udGVudCBpcyBzYW5kYm94ZWQgYnV0IGFsbG93ZWQgdG8gaGF2
ZSBpdHMgbmF0dXJhbCBkb21haW4uIAorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5E
Qk9YX0ZMQUdTX0FMTE9XX1NBTUVfRE9NQUlOID0gMHg0OworICAKKyAgLyoqCisgICAqIFRoZSBj
b250ZW50IGlzIHNhbmRib3hlZCBidXQgZm9ybSBzdWJtaXNzaW9uIGlzIGFsbG93ZWQKKyAgICov
CisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NVQk1JVCA9
IDB4ODsgCisgICAKKyAgLyoqCisgICAqIFRoZSBjb250ZW50IGlzIHNhbmRib3hlZCBidXQgc2Ny
aXB0IGV4ZWN1dGlvbiBpcyBhbGxvd2VkCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNB
TkRCT1hfRkxBR1NfQUxMT1dfU0NSSVBUUyA9IDB4MTA7IAogfTsKZGlmZiAtLWdpdCBhL2RvbS9p
bnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFj
ZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMv
aHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRt
bC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKQEAgLTMzLDE2ICszMywxNyBAQAogICogZGVj
aXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3
aXRoIHRoZSBub3RpY2UKICAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBH
UEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCiAgKiB0aGUgcHJvdmlzaW9ucyBh
Ym92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVy
CiAgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BM
LgogICoKICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJu
c0lET01IVE1MRWxlbWVudC5pZGwiCisjaW5jbHVkZSAibnNJRE9NRE9NU2V0dGFibGVUb2tlbkxp
c3QuaWRsIgogCiAvKioKICAqIFRoZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2Ug
aXMgdGhlIGludGVyZmFjZSB0byBhIFtYXUhUTUwKICAqIGlmcmFtZSBlbGVtZW50LgogICoKICAq
IFRoaXMgaW50ZXJmYWNlIGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwg
c3BlY2lmaWNhdGlvbjoKICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwv
CiAgKgpAQCAtNjEsMTYgKzYyLDE4IEBAIGludGVyZmFjZSBuc0lET01IVE1MSUZyYW1lRWxlbWVu
dCA6IG5zSUQKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luV2lk
dGg7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG5hbWU7CiAgICAgICAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNjcm9sbGluZzsKICAgICAgICAgICAgYXR0
cmlidXRlIERPTVN0cmluZyAgICAgICAgc3JjOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3Ry
aW5nICAgICAgICB3aWR0aDsKICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgcmVh
ZG9ubHkgYXR0cmlidXRlIG5zSURPTURvY3VtZW50ICAgY29udGVudERvY3VtZW50OwogICByZWFk
b25seSBhdHRyaWJ1dGUgbnNJRE9NV2luZG93ICAgICBjb250ZW50V2luZG93OwotCisgIAorICAv
LyBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZQorICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRE9N
U2V0dGFibGVUb2tlbkxpc3Qgc2FuZGJveDsKIAogICAvLyBNb3ppbGxhIGV4dGVuc2lvbnMKICAg
Ly8gaWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1vekFsbG93RnVsbFNjcmVlbiBhdHRyaWJ1
dGUgdG8gYmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3JlIHRvIGFsbG93IGNvbnRlbnQgaW4gdGhl
IHN1YiBkb2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxsLXNjcmVlbgogICAvLyBtb2RlLiBTZWUg
aHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBocD90aXRsZT1HZWNrbzpGdWxsU2NyZWVu
QVBJCiAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgIG1vekFsbG93RnVsbFNj
cmVlbjsKIH07CmRpZmYgLS1naXQgYS9pbWFnZS9zcmMvaW1nTG9hZGVyLmNwcCBiL2ltYWdlL3Ny
Yy9pbWdMb2FkZXIuY3BwCi0tLSBhL2ltYWdlL3NyYy9pbWdMb2FkZXIuY3BwCisrKyBiL2ltYWdl
L3NyYy9pbWdMb2FkZXIuY3BwCkBAIC01NTMsMTcgKzU1MywxNyBAQCBzdGF0aWMgbnNyZXN1bHQg
TmV3SW1hZ2VDaGFubmVsKG5zSUNoYW5uCiAKICAgICBpZiAoYUxvYWRGbGFncyAmIG5zSVJlcXVl
c3Q6OkxPQURfQkFDS0dST1VORCkKICAgICAgICsrcHJpb3JpdHk7IC8vIGZ1cnRoZXIgcmVkdWNl
IHByaW9yaXR5IGZvciBiYWNrZ3JvdW5kIGxvYWRzCiAKICAgICBwLT5BZGp1c3RQcmlvcml0eShw
cmlvcml0eSk7CiAgIH0KIAogICBib29sIHNldE93bmVyID0gbnNDb250ZW50VXRpbHM6OlNldFVw
Q2hhbm5lbE93bmVyKGFMb2FkaW5nUHJpbmNpcGFsLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFSZXN1bHQsIGFVUkksIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphUmVz
dWx0LCBhVVJJLCBmYWxzZSwgZmFsc2UpOwogICAqYUZvcmNlUHJpbmNpcGFsQ2hlY2tGb3JDYWNo
ZUVudHJ5ID0gc2V0T3duZXI7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCiBzdGF0aWMgUFJVaW50
MzIgU2Vjb25kc0Zyb21QUlRpbWUoUFJUaW1lIHByVGltZSkKIHsKICAgcmV0dXJuIFBSVWludDMy
KFBSSW50NjQocHJUaW1lKSAvIFBSSW50NjQoUFJfVVNFQ19QRVJfU0VDKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>575603</attachid>
            <date>2011-11-18 16:52:32 -0800</date>
            <delta_ts>2011-11-18 19:29:55 -0800</delta_ts>
            <desc>WIP - experimental prototype</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>30868</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOTJiNjMyOWJiMDE0NmMxNzU5MjBmMzBkNzI5
NDY1YTAyNzhmNjA5MwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtNzksMTYgKzc5LDE3IEBAIHN0YXRpYyBmcF9leGNlcHRfdCBv
bGRtYXNrID0gZnBzZXRtYXNrKH4KICNpbmNsdWRlICJtb3ppbGxhL0F1dG9SZXN0b3JlLmgiCiAj
aW5jbHVkZSAibnNJTm9kZS5oIgogI2luY2x1ZGUgIm5zSGFzaHRhYmxlLmgiCiAjaW5jbHVkZSAi
bnNJRE9NTm9kZS5oIgogI2luY2x1ZGUgIm5zSHRtbDVQYXJzZXIuaCIKICNpbmNsdWRlICJuc0lG
cmFnbWVudENvbnRlbnRTaW5rLmgiCiAjaW5jbHVkZSAibnNNYXRoVXRpbHMuaCIKICNpbmNsdWRl
ICJtb3ppbGxhL1RpbWVTdGFtcC5oIgorI2luY2x1ZGUgIm5zSURPTURPTVNldHRhYmxlVG9rZW5M
aXN0LmgiCiAKIHN0cnVjdCBuc05hdGl2ZUtleUV2ZW50OyAvLyBEb24ndCBpbmNsdWRlIG5zSU5h
dGl2ZUtleUJpbmRpbmdzLmggaGVyZTogaXQgd2lsbCBmb3JjZSBzdHJhbmdlIGNvbXBpbGF0aW9u
IGVycm9yIQogCiBjbGFzcyBuc0lET01TY3JpcHRPYmplY3RGYWN0b3J5OwogY2xhc3MgbnNJWFBD
b25uZWN0OwogY2xhc3MgbnNJQ29udGVudDsKIGNsYXNzIG5zSURPTUtleUV2ZW50OwogY2xhc3Mg
bnNJRG9jdW1lbnQ7CkBAIC0xODE5LDMyICsxODIwLDQ1IEBAIHB1YmxpYzoKICAgICogZnJvbSB0
aGUgZG9jdW1lbnQgaXQgY29tZXMgZnJvbS4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBVUklJ
bmhlcml0c1NlY3VyaXR5Q29udGV4dChuc0lVUkkgKmFVUkksIGJvb2wgKmFSZXN1bHQpOwogCiAg
IC8qKgogICAgKiBTZXQgdGhlIGdpdmVuIHByaW5jaXBhbCBhcyB0aGUgb3duZXIgb2YgdGhlIGdp
dmVuIGNoYW5uZWwsIGlmCiAgICAqIG5lZWRlZC4gIGFVUkkgbXVzdCBiZSB0aGUgVVJJIG9mIGFD
aGFubmVsLiAgYVByaW5jaXBhbCBtYXkgYmUKICAgICogbnVsbC4gIElmIGFTZXRVcEZvckFib3V0
QmxhbmsgaXMgdHJ1ZSwgdGhlbiBhYm91dDpibGFuayB3aWxsIGdldAotICAgKiB0aGUgcHJpbmNp
cGFsIHNldCB1cCBvbiBpdC4KKyAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAgb24gaXQuIElmIGFG
b3JjZU93bmVyIGlzIHRydWUsIHRoZSBvd25lcgorICAgKiB3aWxsIGJlIHNldCBvbiB0aGUgY2hh
bm5lbCwgZXZlbiBpZiB0aGUgcHJpbmNpcGFsIGNhbiBiZSBkZXRlcm1pbmVkCisgICAqIGZyb20g
dGhlIGNoYW5uZWwuIAogICAgKgogICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIgdGhl
IHByaW5jaXBhbCB3YXMgc2V0IHVwIGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5lbC4K
ICAgICovCiAgIHN0YXRpYyBib29sIFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxv
YWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5u
ZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFV
UkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRC
bGFuayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJv
dXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25l
cik7CiAKICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBhQmluYXJ5RGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNlNjRTdHJpbmcp
OwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFzY2lpU3RyaW5n
LAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhKTsKICAgCisg
IC8qKgorICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmli
dXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICAgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBjb252ZXJ0
cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxseSAKKyAgICoKKyAgICogQHBh
cmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgYXMgYW4g
bnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QKKyAgICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZs
YWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIgUGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFn
cyhuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCAqIGFBdHRyaWJ1dGUpOworCisgIAogcHJpdmF0
ZToKICAgc3RhdGljIGJvb2wgSW5pdGlhbGl6ZUV2ZW50VGFibGUoKTsKIAogICBzdGF0aWMgbnNy
ZXN1bHQgRW5zdXJlU3RyaW5nQnVuZGxlKFByb3BlcnRpZXNGaWxlIGFGaWxlKTsKIAogICBzdGF0
aWMgbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9yeSAqR2V0RE9NU2NyaXB0T2JqZWN0RmFjdG9yeSgp
OwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBIb2xkU2NyaXB0T2JqZWN0KFBSVWludDMyIGFMYW5nSUQs
IHZvaWQqIGFPYmplY3QpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1
bWVudC5oIGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCi0tLSBhL2NvbnRlbnQv
YmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURv
Y3VtZW50LmgKQEAgLTQ1MSwxNiArNDUxLDM1IEBAIHB1YmxpYzoKICAgICogQHNlZSBuc0JpZGlV
dGlscy5oCiAgICAqLwogICB2b2lkIFNldEJpZGlPcHRpb25zKFBSVWludDMyIGFCaWRpT3B0aW9u
cykKICAgewogICAgIG1CaWRpT3B0aW9ucyA9IGFCaWRpT3B0aW9uczsKICAgfQogICAKICAgLyoq
CisgICAqIFNldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4gVGhpcyBzaG91
bGQgb25seSBoYXBwZW4gYXQgCisgICAqIGF0IGRvY3VtZW50IGxvYWQsIHRoZSBmbGFncyBhcmUg
aW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBhdCBsb2FkIHRpbWUuCisgICAqIEAgc2VlIG5zRG9j
U2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIHZvaWQgU2V0U2FuZGJv
eEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCisgIHsKKyAgICBtU2FuZGJveEZsYWdzID0g
YVNhbmRib3hGbGFnczsKKyAgfQorICAKKyAgLyoqIAorICAgKiBHZXQgdGhlIHNhbmRveCBmbGFn
cyBmb3IgdGhpcyBkb2N1bWVudAorICAgKiBAc2VlIG5zRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9z
c2libGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIEdldFNhbmRib3hGbGFncygpIGNvbnN0Cisg
IHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAgfQorICAgCisgIC8qKgogICAgKiBBY2Nl
c3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxzbyBnZXQgc2V0IGZyb20gb3RoZXIKICAg
ICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncykuCiAgICAqLwogICB2aXJ0dWFsIHZvaWQg
R2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmllbGQsIG5zQVN0cmluZyYgYURhdGEpIGNv
bnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRlckRhdGEobnNJQXRvbSogYWhlYWRlckZp
ZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7CiAKICAgLyoqCiAgICAqIENyZWF0ZSBh
IG5ldyBwcmVzZW50YXRpb24gc2hlbGwgdGhhdCB3aWxsIHVzZSBhQ29udGV4dCBmb3IgaXRzCkBA
IC0xNzM4LDE2ICsxNzU3LDIxIEBAIHByb3RlY3RlZDoKICAgLy8gSWYgbUlzU3RhdGljRG9jdW1l
bnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBvcmlnaW5hbAogICAv
LyBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5hbERvY3VtZW50Owog
CiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQuICBXaGF0IHRoaXMgYml0
ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5oCiAgIFBSVWludDMy
IG1CaWRpT3B0aW9uczsKIAorICAvLyBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9jdW1lbnQu
IFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSBvZiB0aGUg
CisgIC8vIGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZiBl
eGlzdGVudC4gVGhlc2UgYXJlIHNldCBhdCBsb2FkIHRpbWUgYW5kCisgIC8vYXJlIGltbXV0YWJs
ZSAtIHNlZSBuc0RvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzICAgCisgIFBSVWlu
dDMyIG1TYW5kYm94RmxhZ3M7CisgIAogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHBy
aXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhl
IGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3Vy
aXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5j
cHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jh
c2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVu
dFV0aWxzLmNwcApAQCAtNjY0LDE3ICs2NjQsNjAgQEAgbnNDb250ZW50VXRpbHM6OkdldFBhcnNl
clNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1BhcnNlclNlcnZp
Y2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAg
IHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVybiBzUGFyc2Vy
U2VydmljZTsKIH0KLQorLyoqCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNh
bmRib3ggYXR0cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICogYSBDU1AgZGlyZWN0aXZlKSBh
bmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFsbHkKKyAqCisg
KiBAcGFyYW0gYUF0dHJpYnV0ZSAgICB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRl
IGFzIGFuIG5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0CisgKiBAcmV0dXJuIAkJCSAgICB0aGUg
c2V0IG9mIGZsYWdzCisgKi8KK1BSVWludDMyCituc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94
QXR0cmlidXRlVG9GbGFncyhuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCAqIGFBdHRyaWJ1dGUp
Cit7CisgIC8vIFRPRE86IGhvdyB0byBoYW5kbGUgZXJyb3JzIGluIHRoaXMgZnVuY3Rpb24gPyBp
ZiB3ZSdyZSBoZXJlLCBzb21ldGhpbmcgaGFzIGEgc2FuZGJveAorICAvLyBhdHRyaWJ1dGUgc2V0
IGFuZCBleHBlY3RzIGNvbnRlbnQgdG8gYmUgc2FuZGJveGVkLi4uIAorCisgIFBSVWludDMyIG91
dCA9IDA7CisgIAorICAvLyBpZiB0aGVyZSdzIGEgc2FuZGJveCBhdHRyaWJ1dGUgYXQgYWxsLCBz
ZXQgU0FOREJPWF9GTEFHU19TQU5EQk9YRUQKKyAgb3V0IHw9IG5zSURvY1NoZWxsOjpTQU5EQk9Y
X0ZMQUdTX1NBTkRCT1hFRDsKKyAgCisgIGJvb2wgYWxsb3dlZCA9IGZhbHNlOworICAKKyAgLy8g
VE9ETzogc2hvdWxkIGkgdHJ5IHRvIHVzZSBhdG9tcyBldmVuIHRob3VnaCBDb250YWlucyB3YW50
cyBhIHN0cmluZyA/IAorICAKKyAgbnNTdHJpbmcgYWxsb3dTY3JpcHRzLCBhbGxvd1NhbWVPcmln
aW47CisgIAorICBuc3Jlc3VsdCByZXN1bHQgPSBuc0drQXRvbXM6OmFsbG93c2NyaXB0cy0+U2Ny
aXB0YWJsZVRvU3RyaW5nKGFsbG93U2NyaXB0cyk7CisgIAorICByZXN1bHQgPSBuc0drQXRvbXM6
OmFsbG93c2FtZW9yaWdpbi0+U2NyaXB0YWJsZVRvU3RyaW5nKGFsbG93U2FtZU9yaWdpbik7Cisg
IAorICByZXN1bHQgPSBhQXR0cmlidXRlLT5Db250YWlucyhhbGxvd1NjcmlwdHMsICZhbGxvd2Vk
KTsKKyAgCisgIGlmIChhbGxvd2VkKQorICAgIG91dCB8PSBuc0lEb2NTaGVsbDo6U0FOREJPWF9G
TEFHU19BTExPV19TQ1JJUFRTOworICAKKyAgYWxsb3dlZCA9IGZhbHNlOworICByZXN1bHQgPSBh
QXR0cmlidXRlLT5Db250YWlucyhhbGxvd1NhbWVPcmlnaW4sICZhbGxvd2VkKTsKKyAgCisgIGlm
IChhbGxvd2VkKQorICAgIG91dCB8PSBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19T
QU1FX0RPTUFJTjsKKworICAvLyBUT0RPOiBhZGQgdGhlIHJlc3Qgb2YgdGhlIHBhcnNpbmcgaGVy
ZQorICAKKyAgcmV0dXJuIG91dDsKK30KKyAgCiAjaWZkZWYgTU9aX1hURgogbnNJWFRGU2Vydmlj
ZSoKIG5zQ29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFzWFRGU2Vydmlj
ZSkgewogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZz
WFRGU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIHNYVEZTZXJ2aWNl
ID0gbnNudWxsOwpAQCAtNTc1MSwxNyArNTc5NCwxOCBAQCBuc0NvbnRlbnRVdGlsczo6VVJJSW5o
ZXJpdHNTZWN1cml0eUNvbnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXN1bHQp
OwogfQogCiAvLyBzdGF0aWMKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25l
cihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIpCiB7CiAgIC8vCiAgIC8vIFNldCB0aGUgb3du
ZXIgb2YgdGhlIGNoYW5uZWwsIGJ1dCBvbmx5IGZvciBjaGFubmVscyB0aGF0IGNhbid0CiAgIC8v
IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQuCiAgIC8vCiAgIC8vIFhYWDogSXQg
c2VlbXMgd3JvbmcgdGhhdCB0aGUgb3duZXIgaXMgaWdub3JlZCAtIGV2ZW4gaWYgb25lIGlzCiAg
IC8vICAgICAgc3VwcGxpZWQpIHVubGVzcyB0aGUgVVJJIGlzIGphdmFzY3JpcHQgb3IgZGF0YSBv
ciBhYm91dDpibGFuay4KICAgLy8gWFhYOiBJZiB0aGlzIGlzIGV2ZXIgY2hhbmdlZCwgY2hlY2sg
YWxsIGNhbGxlcnMgZm9yIHdoYXQgb3duZXJzCkBAIC01NzY5LDIzICs1ODEzLDI3IEBAIG5zQ29u
dGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmkKICAgLy8gICAgICBjb21tZW50cyBp
biBuc0RvY1NoZWxsOjpMb2FkVVJJIHdoZXJlIHdlIGZhbGwgYmFjayBvbgogICAvLyAgICAgIGlu
aGVyaXRpbmcgdGhlIG93bmVyIGlmIGNhbGxlZCBmcm9tIGNocm9tZS4gIFRoYXQgd291bGQgYmUK
ICAgLy8gICAgICB2ZXJ5IHdyb25nIGlmIHRoaXMgY29kZSBjaGFuZ2VkIGFueXRoaW5nIGJ1dCBj
aGFubmVscyB0aGF0CiAgIC8vICAgICAgY2FuJ3QgcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkg
Y29udGV4dCEKICAgLy8KICAgLy8gICAgICAoQ3VycmVudGx5IGNocm9tZSBVUklzIHNldCB0aGUg
b3duZXIgd2hlbiB0aGV5IGFyZSBjcmVhdGVkIQogICAvLyAgICAgIFNvIHNldHRpbmcgYSBOVUxM
IG93bmVyIHdvdWxkIGJlIGJhZCEpCiAgIC8vCisgIC8vIElmIGFGb3JjZU93bmVyIGlzIHRydWUs
IHRoZSBvd25lciB3aWxsIGJlIHNldCwgZXZlbiBmb3IgYSBjaGFubmVsIHRoYXQKKyAgLy8gY2Fu
IHByb3ZpZGUgaXRzIG93biBzZWN1cml0eSBjb250ZW50LiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBI
VE1MNSBJRlJBTUUKKyAgLy8gc2FuZGJveCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiBmb3JjZSB0aGUg
Y2hhbm5lbCAoYW5kIGl0cyBkb2N1bWVudCkgdG8KKyAgLy8gZXhwbGljaXRseSBoYXZlIGEgbnVs
bCBwcmluY2lwYWwKICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBlY3QgVVJJSW5oZXJpdHNT
ZWN1cml0eUNvbnRleHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAgIC8vIGFib3V0OmJsYW5r
IFVSSSwgc28gZG9uJ3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0aGlzIGNhbGwgZmFpbHMu
CiAgIC8vIFRoaXMgY29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBvbmUgaW4gbnNEb2NTaGVs
bDo6SW50ZXJuYWxMb2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5nIGZvciB0aGluZ3MgdGhh
dCB3aWxsIHVzZSB0aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGluaGVyaXQgfHwgKGFTZXRV
cEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpIHsKKyAgaWYgKGFGb3Jj
ZU93bmVyIHx8ICgoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkks
ICZpbmhlcml0KSkgJiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYm
IE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSkpIHsKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIoYUxv
YWRpbmdQcmluY2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8KICAgLy8gZmls
ZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMgaXMgYSBmaWxlOiBsb2Fk
IG9wZW5lZCBmcm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVlZApkaWZmIC0tZ2l0IGEv
Y29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1
bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAorKysgYi9jb250
ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0yMzc4LDE2ICsyMzc4LDI1IEBAIG5zRG9j
dW1lbnQ6OlN0YXJ0RG9jdW1lbnRMb2FkKGNvbnN0IGNoYXIKICAgICBGaW5kQ2hhckluUmVhZGFi
bGUoJzsnLCBzZW1pY29sb24sIGVuZCk7CiAgICAgU2V0Q29udGVudFR5cGVJbnRlcm5hbChTdWJz
dHJpbmcoc3RhcnQsIHNlbWljb2xvbikpOwogICB9CiAKICAgUmV0cmlldmVSZWxldmFudEhlYWRl
cnMoYUNoYW5uZWwpOwogCiAgIG1DaGFubmVsID0gYUNoYW5uZWw7CiAKKyAgLy8gaWYgdGhpcyBk
b2N1bWVudCBpcyBiZWluZyBsb2FkZWQgYnkgYSBkb2NzaGVsbCwgY29weSBpdHMgc2FuZGJveCBm
bGFncworICAvLyB0byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11dGFibGUgYWZ0ZXIgYmVp
bmcgc2V0IGhlcmUuCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1ZXJ5
SW50ZXJmYWNlKGFDb250YWluZXIpOworICAKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgIG5zcmVz
dWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNhbmRib3hGbGFncygmbVNhbmRib3hGbGFncyk7CisJIE5T
X0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgIH0KKyAgCiAgIG5zcmVzdWx0IHJ2ID0gSW5pdENT
UCgpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIHJldHVybiBOU19PSzsKIH0K
IAogbnNyZXN1bHQKIG5zRG9jdW1lbnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0IGEvY29udGVudC9i
YXNlL3NyYy9uc0RvY3VtZW50LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaAotLS0g
YS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25z
RG9jdW1lbnQuaApAQCAtMTI1NiwxNyArMTI1NiwxNyBAQCBwcml2YXRlOgogICBuc0NTdHJpbmcg
bVNjcm9sbFRvUmVmOwogICBQUlVpbnQ4IG1TY3JvbGxlZFRvUmVmQWxyZWFkeSA6IDE7CiAgIFBS
VWludDggbUNoYW5nZVNjcm9sbFBvc1doZW5TY3JvbGxpbmdUb1JlZiA6IDE7CiAKICAgLy8gVHJh
Y2tpbmcgZm9yIGltYWdlcyBpbiB0aGUgZG9jdW1lbnQuCiAgIG5zRGF0YUhhc2h0YWJsZTwgbnNQ
dHJIYXNoS2V5PGltZ0lSZXF1ZXN0PiwgUFJVaW50MzI+IG1JbWFnZVRyYWNrZXI7CiAKICAgVmlz
aWJpbGl0eVN0YXRlIG1WaXNpYmlsaXR5U3RhdGU7Ci0KKyAgCiAjaWZkZWYgREVCVUcKIHByb3Rl
Y3RlZDoKICAgYm9vbCBtV2lsbFJlcGFyZW50OwogI2VuZGlmCiB9OwogCiAjZGVmaW5lIE5TX0RP
Q1VNRU5UX0lOVEVSRkFDRV9UQUJMRV9CRUdJTihfY2xhc3MpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgIE5TX05PREVfT0ZGU0VUX0FORF9JTlRFUkZBQ0VfVEFCTEVfQkVHSU4oX2Ns
YXNzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9jb250ZW50L2Jh
c2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVy
LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCisrKyBiL2NvbnRl
bnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTQ2NiwyMCArNDY2LDExNSBAQCBuc0Zy
YW1lTG9hZGVyOjpSZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3QgdG8gYmUgc2Fm
ZSwgcmVjaGVjayB1cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQpOwogICBOU19F
TlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsTG9hZEluZm8+
IGxvYWRJbmZvOwogICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9BZGRSZWZzKGxv
YWRJbmZvKSk7CiAgIE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9GQUlMVVJFKTsK
IAotICAvLyBXZSdsbCB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3VtZW50
IGxvYWRlZCBpbnNpZGUgdXMuICBUaGlzCi0gIC8vIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVkZWQg
dG8gcHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluCi0gIC8vIHN1YmZy
YW1lcyEKLSAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwo
KSk7CisgIG5zU3RyaW5nIHNhbmRib3hBdHRyOyAgCisgIFBSVWludDMyIHBhcmVudFNhbmRib3hG
bGFncyA9IDA7CisKKyAgLy8gZ2V0IHRoZSBwYXJlbnQncyBzYW5kYm94IGZsYWdzLCB0aGV5J3Jl
IG5lZWRlZCB0byBkZXRlcm1pbmUgaWYgdGhlCisgIC8vIGZyYW1lIGJlaW5nIGxvYWRlZCBiZWxv
dyBuZWVkcyB0byBiZSBzYW5kYm94ZWQKKyAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4g
cGFyZW50RG9jU2hlbGxJdGVtOworICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBjdXJE
b2NTaGVsbEl0ZW0oZG9fUXVlcnlJbnRlcmZhY2UobURvY1NoZWxsKSk7CisgIAorICBpZiAoTlNf
U1VDQ0VFREVEKGN1ckRvY1NoZWxsSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVu
dERvY1NoZWxsSXRlbSkpKSkgeworICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBwYXJlbnREb2Mg
PSBkb19HZXRJbnRlcmZhY2UocGFyZW50RG9jU2hlbGxJdGVtKTsKKyAgICAKKyAgICBpZiAocGFy
ZW50RG9jKSB7CisgICAgICBwYXJlbnRTYW5kYm94RmxhZ3MgPSBwYXJlbnREb2MtPkdldFNhbmRi
b3hGbGFncygpOworICAgIH0KKyAgfSAgCisKKyAgLy8gaXMgdGhpcyBhbiA8aWZyYW1lPiB3aXRo
IGEgc2FuZGJveCBhdHRyaWJ1dGUgb3IgYSBmcmFtZSB3aG9zZSBwYXJlbnQKKyAgLy8gaXMgc2Fu
ZGJveGVkID8gIAorICBpZiAocGFyZW50U2FuZGJveEZsYWdzIHx8IAorICAgICAobU93bmVyQ29u
dGVudC0+R2V0QXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpzYW5kYm94LCBzYW5k
Ym94QXR0cikgJiYKKyAgICAgIG1Pd25lckNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6OmlmcmFt
ZSkpKSB7ICAgICAgIAorICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgIAorICAgIG5z
Q09NUHRyPG5zSURPTUhUTUxJRnJhbWVFbGVtZW50PiBpZnJhbWUgPSBkb19RdWVyeUludGVyZmFj
ZShtT3duZXJDb250ZW50KTsKKyAgCisgICAgaWYgKGlmcmFtZSkgeworICAgICAgbnNDT01QdHI8
bnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3Q+IHNhbmRib3g7CisgICAgCisgICAgICBuc3Jlc3Vs
dCByZXN1bHQgPSBpZnJhbWUtPkdldFNhbmRib3goZ2V0dGVyX0FkZFJlZnMoc2FuZGJveCkpOwor
ICAgICAgLy8gVE9ETyA6IHdoYXQgdG8gZG8gaWYgdGhpcyBmYWlscyA/IChzZWUgYmVsb3cgYWxz
bykgCisgICAgCisgICAgICBzYW5kYm94RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5k
Ym94QXR0cmlidXRlVG9GbGFncyhzYW5kYm94KTsKKyAgICAgIC8vIFRPRE86IHdoYXQgdG8gZG8g
aWYgdGhpcyBmYWlscyA/IHRoZSBjb250ZW50IHdhcyBpbnRlbmRlZCB0byBiZSBzYW5kYm94ZWQK
KyAgICAgIC8vIGFuZCBpdCBtYXkgbm90IGJlIC0gbWF5YmUgZmFpbCBjbG9zZWQgKGFsbCByZXN0
cmljdGlvbnMpID8/PyAKKyAgICB9CisgICAgIAorICAgIGlmIChwYXJlbnRTYW5kYm94RmxhZ3Mp
IHsgCisgICAgICAvLyBkbyB0aGUgaW50ZXJzZWN0aW9uIHdpdGggdGhlIGN1cnJlbnQgZmxhZ3Mg
aW4gdGhlIGRvY3NoZWxsIQorICAgICAgCisgICAgICAvLyBUT0RPOiBwcm9iYWJseSB3YW50IHRv
IG1ha2UgdGhpcyBhIGZ1bmN0aW9uIGluIG5zQ29udGVudFV0aWxzIAorICAgICAgLy8gdGhpcyBs
b2dpYyB3aWxsIGxpa2VseSBiZSBuZWVkZWQgZWxzZXdoZXJlIChlLmcuIENTUCBzYW5kYm94IGlu
dGVyc2VjdGlvbikgCisKKyAgICAgIC8vIGlmIHBhcmVudCBpcyBzYW5kYm94ZWQsIGN1cnJlbnQg
ZG9jc2hlbGwgaXMgc2FuZGJveGVkCisgICAgICBzYW5kYm94RmxhZ3MgfD0gbnNJRG9jU2hlbGw6
OlNBTkRCT1hfRkxBR1NfU0FOREJPWEVEOworICAKKyAgICAgIC8vIGlmIGN1cnJlbnQgZG9jc2hl
bGwgaGFzIGFsbG93LXNhbWUtZG9tYWluIGJ1dCBwYXJlbnQgZG9lcyBub3QsCisgICAgICAvLyBj
bGVhciBhbGxvdy1zYW1lLWRvbWFpbgorICAgICAgaWYgKChzYW5kYm94RmxhZ3MgJiBuc0lEb2NT
aGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19TQU1FX0RPTUFJTikgJiYKKyAgICAgICAgICAhKHBh
cmVudFNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1NBTUVf
RE9NQUlOKSkKKyAgICAgICAgc2FuZGJveEZsYWdzIHw9IH5uc0lEb2NTaGVsbDo6U0FOREJPWF9G
TEFHU19BTExPV19TQU1FX0RPTUFJTjsKKyAgICAgIAorICAgICAgLy8gaWYgY3VycmVudCBkb2Nz
aGVsbCBoYXMgYWxsb3ctc2NyaXB0cyBidXQgcGFyZW50IGRvZXMgbm90LAorICAgICAgLy8gY2xl
YXIgYWxsb3ctc2NyaXB0cworICAgICAgaWYgKChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6
U0FOREJPWF9GTEFHU19BTExPV19TQ1JJUFRTKSAmJgorICAgICAgICAgICEocGFyZW50U2FuZGJv
eEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0NSSVBUUykpCisgICAg
ICAgIHNhbmRib3hGbGFncyB8PSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0NS
SVBUUzsKKyAgICAgIAorICAgICAgIC8vIGlmIGN1cnJlbnQgZG9jc2hlbGwgaGFzIGFsbG93LXRv
cC1uYXZpZ2F0aW9uIGJ1dCBwYXJlbnQgZG9lcyBub3QsCisgICAgICAgLy8gY2xlYXIgYWxsb3ct
dG9wLW5hdmlnYXRpb24KKyAgICAgICBpZiAoKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpT
QU5EQk9YX0ZMQUdTX0FMTE9XX1RPUF9OQVZJR0FUSU9OKSAmJgorICAgICAgICAgICAhKHBhcmVu
dFNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1RPUF9OQVZJ
R0FUSU9OKSkKKyAgICAgICAgIHNhbmRib3hGbGFncyB8PSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hf
RkxBR1NfQUxMT1dfVE9QX05BVklHQVRJT047CisgICAgICAKKyAgICAgICAvLyBpZiBjdXJyZW50
IGRvY3NoZWxsIGhhcyBhbGxvdy1mb3JtcyBidXQgcGFyZW50IGRvZXMgbm90LAorICAgICAgIC8v
IGNsZWFyIGFsbG93LWZvcm1zCisgICAgICAgaWYgKChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVs
bDo6U0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NVQk1JVCkgJiYKKyAgICAgICAgICAgIShwYXJl
bnRTYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NV
Qk1JVCkpCisgICAgICAgICBzYW5kYm94RmxhZ3MgfD0gfm5zSURvY1NoZWxsOjpTQU5EQk9YX0ZM
QUdTX0FMTE9XX0ZPUk1fU1VCTUlUOworICAgICB9CisgIAorICAgIG1Eb2NTaGVsbC0+U2V0U2Fu
ZGJveEZsYWdzKHNhbmRib3hGbGFncyk7CisgICAgCisgICAgLy8gc2V0IHVwIHRoZSBhY3R1YWwg
c2FuZGJveGluZyBhcyBzcGVjaWZpZWQgCisgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1No
ZWxsOjpTQU5EQk9YX0ZMQUdTX1NBTkRCT1hFRCkgeworICAgICAgaWYgKCEoc2FuZGJveEZsYWdz
ICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9ET01BSU4pKSB7CisgICAg
ICAgIC8vIGFsbG93LXNhbWUtZG9tYWluIHdhc24ndCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gY3Jl
YXRlIGEgbmV3IG51bGwgcHJpbmNpcGFsIGFuZCAKKyAgICAgICAgLy8gdXNlIHRoYXQgYXMgdGhl
IG93bmVyCisgICAgICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gbnVsbFByaW5jaXBhbCA9IGRv
X0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnVsbHByaW5jaXBhbDsxIik7CisgICAgICAg
IGxvYWRJbmZvLT5TZXRPd25lcihudWxsUHJpbmNpcGFsKTsKKyAgICAgIH0gZWxzZSB7IAorICAg
ICAgICAvLyB1c2UgdGhlICdub3JtYWwnIHByaW5jaXBhbCBmb3IgdGhlIDxpZnJhbWU+IC0gc2Vl
IG5vdGUgYmVsb3cKKyAgICAgICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5v
ZGVQcmluY2lwYWwoKSk7CisgICAgICB9CisgIAorICAgICAgaWYgKCEoc2FuZGJveEZsYWdzICYg
bnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0NSSVBUUykpIHsKKyAgICAgICAgbURv
Y1NoZWxsLT5TZXRBbGxvd0phdmFzY3JpcHQoZmFsc2UpOworICAgICAgfQorICAgIAorICAgICAg
Ly8gX2Fsd2F5c18gZGlzYWxsb3cgcGx1Z2lucyB3aGVuIHNhbmRib3hlZAorICAgICAgbURvY1No
ZWxsLT5TZXRBbGxvd1BsdWdpbnMoZmFsc2UpOworICAgIH0gCisgIH0KKworICBlbHNlIHsgCisg
ICAgLy8gbm90IHNhbmRib3hlZCBzbyB3ZSB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2Yg
dGhlIGRvY3VtZW50IGxvYWRlZCBpbnNpZGUgdXMuICBUaGlzCisgICAgLy8gaXMgdmVyeSBpbXBv
cnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBsb2FkZWQg
aW4KKyAgICAvLyBzdWJmcmFtZXMhCisgICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRl
bnQtPk5vZGVQcmluY2lwYWwoKSk7CisgIH0KIAogICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVy
OwogICBydiA9IG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9B
ZGRSZWZzKHJlZmVycmVyKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbG9h
ZEluZm8tPlNldFJlZmVycmVyKHJlZmVycmVyKTsKIAogICAvLyBLaWNrIG9mZiB0aGUgbG9hZC4u
LgpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaCBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxp
c3QuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCkBAIC05NCwxNiArOTQs
MTggQEAgR0tfQVRPTShhZGRyZXNzLCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVyLCAiYWZ0ZXIi
KQogR0tfQVRPTShhZnRlcl9lbmQsICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRlcl9zdGFydCwg
ImFmdGVyX3N0YXJ0IikKIEdLX0FUT00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9NKGFsaW5rLCAi
YWxpbmsiKQogR0tfQVRPTShhbGwsICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50cywgImFsbG93
ZXZlbnRzIikKIEdLX0FUT00oYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMsICJhbGxvd25lZ2F0aXZl
YXNzZXJ0aW9ucyIpCitHS19BVE9NKGFsbG93c2FtZW9yaWdpbiwgImFsbG93LXNhbWUtb3JpZ2lu
IikKK0dLX0FUT00oYWxsb3dzY3JpcHRzLCAiYWxsb3ctc2NyaXB0cyIpCiBHS19BVE9NKGFsbG93
dW50cnVzdGVkLCAiYWxsb3d1bnRydXN0ZWQiKQogR0tfQVRPTShhbHQsICJhbHQiKQogR0tfQVRP
TShhbHRlcm5hdGUsICJhbHRlcm5hdGUiKQogR0tfQVRPTShhbHdheXMsICJhbHdheXMiKQogR0tf
QVRPTShhbmNlc3RvciwgImFuY2VzdG9yIikKIEdLX0FUT00oYW5jZXN0b3JPclNlbGYsICJhbmNl
c3Rvci1vci1zZWxmIikKIEdLX0FUT00oX2FuZCwgImFuZCIpCiBHS19BVE9NKGFueSwgImFueSIp
CkBAIC04NzYsMTYgKzg3OCwxNyBAQCBHS19BVE9NKHJvd3NwYW4sICJyb3dzcGFuIikKIEdLX0FU
T00ocnAsICJycCIpCiBHS19BVE9NKHJ0LCAicnQiKQogR0tfQVRPTShydGwsICJydGwiKQogR0tf
QVRPTShydWJ5LCAicnVieSIpCiBHS19BVE9NKHJ1bGUsICJydWxlIikKIEdLX0FUT00ocnVsZXMs
ICJydWxlcyIpCiBHS19BVE9NKHMsICJzIikKIEdLX0FUT00oc2FtcCwgInNhbXAiKQorR0tfQVRP
TShzYW5kYm94LCAic2FuZGJveCIpCiBHS19BVE9NKHNiYXR0ciwgInNiYXR0ciIpCiBHS19BVE9N
KHNjYWxlLCAic2NhbGUiKQogR0tfQVRPTShzY2FuLCAic2NhbiIpCiBHS19BVE9NKHNjaGVtZSwg
InNjaGVtZSIpCiBHS19BVE9NKHNjb3BlLCAic2NvcGUiKQogR0tfQVRPTShzY29wZWQsICJzY29w
ZWQiKQogR0tfQVRPTShzY3JlZW4sICJzY3JlZW4iKQogR0tfQVRPTShzY3JlZW5YLCAic2NyZWVu
WCIpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zT2JqZWN0TG9hZGluZ0NvbnRlbnQu
Y3BwIGIvY29udGVudC9iYXNlL3NyYy9uc09iamVjdExvYWRpbmdDb250ZW50LmNwcAotLS0gYS9j
b250ZW50L2Jhc2Uvc3JjL25zT2JqZWN0TG9hZGluZ0NvbnRlbnQuY3BwCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNPYmplY3RMb2FkaW5nQ29udGVudC5jcHAKQEAgLTE0NTcsMTcgKzE0NTcsMTcg
QEAgbnNPYmplY3RMb2FkaW5nQ29udGVudDo6TG9hZE9iamVjdChuc0lVUgogICAgIE5TX1BhcnNl
Q29udGVudFR5cGUoYVR5cGVIaW50LCB0eXBlSGludCwgZHVtbXkpOwogICAgIGlmICghdHlwZUhp
bnQuSXNFbXB0eSgpKSB7CiAgICAgICBjaGFuLT5TZXRDb250ZW50VHlwZSh0eXBlSGludCk7CiAg
ICAgfQogICB9CiAKICAgLy8gU2V0IHVwIHRoZSBjaGFubmVsJ3MgcHJpbmNpcGFsIGFuZCBzdWNo
LCBsaWtlIG5zRG9jU2hlbGw6OkRvVVJJTG9hZCBkb2VzCiAgIG5zQ29udGVudFV0aWxzOjpTZXRV
cENoYW5uZWxPd25lcih0aGlzQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhbiwgYVVSSSwgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuLCBhVVJJLCB0cnVlLCBmYWxzZSk7CiAKICAgbnND
T01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNl
KGNoYW4pOwogICBpZiAoc2NyaXB0Q2hhbm5lbCkgewogICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBh
Z2FpbnN0IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgc2NyaXB0Q2hh
bm5lbC0+CiAgICAgICBTZXRFeGVjdXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhFQ1VU
RV9OT1JNQUwpOwogICB9CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxJRnJhbWVFbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJ
RnJhbWVFbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZy
YW1lRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFt
ZUVsZW1lbnQuY3BwCkBAIC00MywxNiArNDMsMTggQEAKICNpbmNsdWRlICJuc0lET01HZXRTVkdE
b2N1bWVudC5oIgogI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAibnNH
a0F0b21zLmgiCiAjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKICNpbmNsdWRlICJuc01hcHBlZEF0
dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJuc0RPTUVycm9yLmgiCiAjaW5jbHVkZSAibnNSdWxlRGF0
YS5oIgogI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRlICJuc0RPTVNldHRhYmxl
VG9rZW5MaXN0LmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiBjbGFzcyBuc0hU
TUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKIHsK
QEAgLTg0LDMwICs4NiwzOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CiAgIE5TX0lNRVRIT0RfKGJvb2wpIElzQXR0cmlidXRl
TWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0OwogICB2aXJ0dWFsIG5zTWFw
UnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3Q7
CiAKICAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lO
b2RlICoqYVJlc3VsdCkgY29uc3Q7CiAgIHZpcnR1YWwgbnNYUENDbGFzc0luZm8qIEdldENsYXNz
SW5mbygpOworICAKKyAgdmlydHVhbCBuc3Jlc3VsdCBBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFt
ZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG5zQVN0cmluZyogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYU5vdGlmeSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Citwcm90ZWN0ZWQ6CisgIG5zUmVmUHRyPG5zRE9NU2V0dGFibGVUb2tlbkxpc3Q+ICBtU2FuZGJv
eFRva2VuTGlzdDsKIH07CiAKIAogTlNfSU1QTF9OU19ORVdfSFRNTF9FTEVNRU5UX0NIRUNLX1BB
UlNFUihJRnJhbWUpCiAKIAogbnNIVE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZyYW1lRWxlbWVu
dChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJzZXIpCiAgIDog
bnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFyc2VyKQogewogfQog
CiBuc0hUTUxJRnJhbWVFbGVtZW50Ojp+bnNIVE1MSUZyYW1lRWxlbWVudCgpCiB7CisgIGlmICht
U2FuZGJveFRva2VuTGlzdCkKKyAgICBtU2FuZGJveFRva2VuTGlzdC0+RHJvcFJlZmVyZW5jZSgp
OwogfQogCiAKIE5TX0lNUExfQUREUkVGX0lOSEVSSVRFRChuc0hUTUxJRnJhbWVFbGVtZW50LG5z
R2VuZXJpY0VsZW1lbnQpCiBOU19JTVBMX1JFTEVBU0VfSU5IRVJJVEVEKG5zSFRNTElGcmFtZUVs
ZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIAogRE9NQ0lfTk9ERV9EQVRBKEhUTUxJRnJhbWVFbGVt
ZW50LCBuc0hUTUxJRnJhbWVFbGVtZW50KQogCkBAIC0xNTAsMTYgKzE2MSwyOCBAQCBuc0hUTUxJ
RnJhbWVFbGVtZW50OjpHZXRDb250ZW50V2luZG93KG5zCiB9CiAKIE5TX0lNRVRIT0RJTVAKIG5z
SFRNTElGcmFtZUVsZW1lbnQ6OkdldFNWR0RvY3VtZW50KG5zSURPTURvY3VtZW50ICoqYVJlc3Vs
dCkKIHsKICAgcmV0dXJuIEdldENvbnRlbnREb2N1bWVudChhUmVzdWx0KTsKIH0KIAorTlNfSU1F
VEhPRElNUAorbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U2FuZGJveChuc0lET01ET01TZXR0YWJs
ZVRva2VuTGlzdCoqIGFTYW5kYm94KQoreworICBpZiAoIW1TYW5kYm94VG9rZW5MaXN0KSB7Cisg
ICAgbVNhbmRib3hUb2tlbkxpc3QgPSBuZXcgbnNET01TZXR0YWJsZVRva2VuTGlzdCh0aGlzLCBu
c0drQXRvbXM6OnNhbmRib3gpOworICB9CisgCisgIE5TX0FERFJFRigqYVNhbmRib3ggPSBtU2Fu
ZGJveFRva2VuTGlzdCk7CisgCisgIHJldHVybiBOU19PSzsKK30KKwogYm9vbAogbnNIVE1MSUZy
YW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCkK
IHsKICAgaWYgKGFOYW1lc3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgewogICAgIGlmIChh
QXR0cmlidXRlID09IG5zR2tBdG9tczo6bWFyZ2lud2lkdGgpIHsKQEAgLTE3OCwxNiArMjAxLDIw
IEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKFBSSW4KICAgICAgIHJldHVy
biBQYXJzZUZyYW1lYm9yZGVyVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CiAgICAgaWYg
KGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjpzY3JvbGxpbmcpIHsKICAgICAgIHJldHVybiBQYXJz
ZVNjcm9sbGluZ1ZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQogICAgIGlmIChhQXR0cmli
dXRlID09IG5zR2tBdG9tczo6YWxpZ24pIHsKICAgICAgIHJldHVybiBQYXJzZUFsaWduVmFsdWUo
YVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CisgICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21z
OjpzYW5kYm94KSB7CisJICBhUmVzdWx0LlBhcnNlQXRvbUFycmF5KGFWYWx1ZSk7CisgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CiAgIH0KIAogICByZXR1cm4gbnNHZW5lcmljSFRNTEZyYW1lRWxl
bWVudDo6UGFyc2VBdHRyaWJ1dGUoYU5hbWVzcGFjZUlELCBhQXR0cmlidXRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlLCBhUmVzdWx0
KTsKIH0KIAogc3RhdGljIHZvaWQKIE1hcEF0dHJpYnV0ZXNJbnRvUnVsZShjb25zdCBuc01hcHBl
ZEF0dHJpYnV0ZXMqIGFBdHRyaWJ1dGVzLApAQCAtMjY4LDggKzI5NSwyOCBAQCBuc0hUTUxJRnJh
bWVFbGVtZW50OjpJc0F0dHJpYnV0ZU1hcHBlZChjCiAKIAogbnNNYXBSdWxlVG9BdHRyaWJ1dGVz
RnVuYwogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkg
Y29uc3QKIHsKICAgcmV0dXJuICZNYXBBdHRyaWJ1dGVzSW50b1J1bGU7CiB9CiAKK25zcmVzdWx0
Cituc0hUTUxJRnJhbWVFbGVtZW50OjpBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQs
IG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zQVN0cmluZyogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYU5vdGlmeSkKK3sKKyAgaWYgKGFOYW1lID09IG5zR2tBdG9tczo6c2FuZGJveCAmJiBhTmFt
ZVNwYWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKKyAgICAvLyBwYXJzZSB0aGUgbmV3IHZh
bHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSwgYW5kIGlmIHdlIGhhdmUgYSBkb2NzaGVsbAor
ICAgIC8vIHNldCBpdHMgc2FuZGJveCBmbGFncyBhcHByb3ByaWF0ZWx5CisgICAgbnNDT01QdHI8
bnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3Q+IHNhbmRib3g7CisgICAgCisgICAgbnNyZXN1bHQg
cmVzdWx0ID0gR2V0U2FuZGJveChnZXR0ZXJfQWRkUmVmcyhzYW5kYm94KSk7CisgICAgLy8gVE9E
TyA6IHdoYXQgdG8gZG8gaWYgdGhpcyBmYWlscyA/IAorICAgIAorICAgIGlmIChtRnJhbWVMb2Fk
ZXIpCisgICAgICBtRnJhbWVMb2FkZXItPkdldEV4aXN0aW5nRG9jU2hlbGwoKS0+U2V0U2FuZGJv
eEZsYWdzKG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKHNhbmRi
b3gpKTsKKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6OkFmdGVyU2V0QXR0cihh
TmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFOb3RpZnkpOworfQorCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNl
L25zRG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9kb2Nz
aGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5j
cHAKQEAgLTc0NSwxNyArNzQ1LDE4IEBAIG5zRG9jU2hlbGw6Om5zRG9jU2hlbGwoKToKICAgICBt
SXNBcHBUYWIoZmFsc2UpLAogICAgIG1Vc2VHbG9iYWxIaXN0b3J5KGZhbHNlKSwKICAgICBtRmly
ZWRVbmxvYWRFdmVudChmYWxzZSksCiAgICAgbUVPREZvckN1cnJlbnREb2N1bWVudChmYWxzZSks
CiAgICAgbVVSSVJlc3VsdGVkSW5Eb2N1bWVudChmYWxzZSksCiAgICAgbUlzQmVpbmdEZXN0cm95
ZWQoZmFsc2UpLAogICAgIG1Jc0V4ZWN1dGluZ09uTG9hZEhhbmRsZXIoZmFsc2UpLAogICAgIG1J
c1ByaW50aW5nT3JQUChmYWxzZSksCi0gICAgbVNhdmluZ09sZFZpZXdlcihmYWxzZSkKKyAgICBt
U2F2aW5nT2xkVmlld2VyKGZhbHNlKSwKKyAgICBtU2FuZGJveEZsYWdzKDApCiAjaWZkZWYgREVC
VUcKICAgICAsIG1JbkVuc3VyZVNjcmlwdEVudihmYWxzZSkKICNlbmRpZgogewogICAgIG1IaXN0
b3J5SUQgPSArK2dEb2NzaGVsbElEQ291bnRlcjsKICAgICBpZiAoZ0RvY1NoZWxsQ291bnQrKyA9
PSAwKSB7CiAgICAgICAgIE5TX0FTU0VSVElPTihzVVJJRml4dXAgPT0gbnNudWxsLAogICAgICAg
ICAgICAgICAgICAgICAgIkh1aCwgc1VSSUZpeHVwIG5vdCBudWxsIGluIGZpcnN0IG5zRG9jU2hl
bGwgY3RvciEiKTsKQEAgLTQ5MTAsMTYgKzQ5MTEsMzIgQEAgbnNEb2NTaGVsbDo6U2V0SXNBcHBU
YWIoYm9vbCBhSXNBcHBUYWIpCiBOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpHZXRJc0FwcFRh
Yihib29sICphSXNBcHBUYWIpCiB7CiAgICphSXNBcHBUYWIgPSBtSXNBcHBUYWI7CiAgIHJldHVy
biBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6U2V0U2FuZGJveEZsYWdz
KFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCit7CisgIG1TYW5kYm94RmxhZ3MgPSBhU2FuZGJveEZs
YWdzOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6Okdl
dFNhbmRib3hGbGFncyhQUlVpbnQzMiAgKmFTYW5kYm94RmxhZ3MpCit7CisgIE5TX0VOU1VSRV9B
UkdfUE9JTlRFUihhU2FuZGJveEZsYWdzKTsKKyAgCisgICphU2FuZGJveEZsYWdzID0gbVNhbmRi
b3hGbGFnczsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxs
OjpTZXRWaXNpYmlsaXR5KGJvb2wgYVZpc2liaWxpdHkpCiB7CiAgICAgaWYgKCFtQ29udGVudFZp
ZXdlcikKICAgICAgICAgcmV0dXJuIE5TX09LOwogICAgIGlmIChhVmlzaWJpbGl0eSkgewogICAg
ICAgICBtQ29udGVudFZpZXdlci0+U2hvdygpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTg4Nzks
MTggKzg4OTYsMzAgQEAgbnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAg
ICAgIH0KICAgICAgICAgLy8gU2V0IHRoZSByZWZlcnJlciBleHBsaWNpdGx5CiAgICAgICAgIGlm
IChhUmVmZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJlcikgewogICAgICAgICAgICAgLy8gUmVmZXJy
ZXIgaXMgY3VycmVubHkgb25seSBzZXQgZm9yIGxpbmsgY2xpY2tzIGhlcmUuCiAgICAgICAgICAg
ICBodHRwQ2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJlZmVycmVyVVJJKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWwoZG9fUXVlcnlJ
bnRlcmZhY2UoYU93bmVyKSk7Ci0gICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVy
KG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlKTsKKwluc0NPTVB0cjxuc0lQcmlu
Y2lwYWw+IG93bmVyUHJpbmNpcGFsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFPd25lcikpOworCQorICAg
IC8vIElmIHRoZSBjb250ZW50IGlzIHNhbmRib3hlZCwgZm9yY2UgdGhlIHBhc3NlZCBpbiBvd25l
ciAod2hpY2ggc2hvdWxkIGJlIAorCS8vIGEgbnVsbCBwcmluY2lwYWwpIHRvIGJlIHNldCBvbiB0
aGUgY2hhbm5lbCwgVU5MRVNTIHRoZSBzYW5kYm94IGFsbG93LXNhbWUtZG9tYWluIGZsYWcgaXMg
YWxzbworICAgIC8vIHNldC4gSW4gdGhhdCBjYXNlLCBhbGxvdyB0aGUgY29udGVudCB0byBhc3Nz
dW1lIGl0cyAibmF0dXJhbCBkb21haW4iIGFzIGl0CisgICAgLy8gbm9ybWFsbHkgd291bGQuIAor
ICAgIGlmICgobVNhbmRib3hGbGFncyAmIFNBTkRCT1hfRkxBR1NfU0FOREJPWEVEKSAmJiAKKyAg
ICAgICAgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YX0ZMQUdTX0FMTE9XX1NBTUVfRE9NQUlOKSAh
PSBTQU5EQk9YX0ZMQUdTX0FMTE9XX1NBTUVfRE9NQUlOKSB7CisgICAgICBuc0NvbnRlbnRVdGls
czo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUs
IHRydWUpOworICAgIH0KKwkKKyAgICBlbHNlIHsKKyAgICAgIG5zQ29udGVudFV0aWxzOjpTZXRV
cENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSwgZmFsc2Up
OworICAgIH0KIAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENoYW5uZWw+IHNjcmlwdENoYW5uZWwg
PSBkb19RdWVyeUludGVyZmFjZShjaGFubmVsKTsKICAgICBpZiAoc2NyaXB0Q2hhbm5lbCkgewog
ICAgICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBvdXIgY29udGV4dCBpZiB0aGUgcHJp
bmNpcGFscyBtYXRjaAogICAgICAgICBzY3JpcHRDaGFubmVsLT4KICAgICAgICAgICAgIFNldEV4
ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05PUk1BTCk7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaCBiL2RvY3NoZWxsL2Jhc2Uv
bnNEb2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCisrKyBiL2RvY3No
ZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03ODAsMTYgKzc4MCwxOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgLy8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBpcyBub3QgZXhwZWN0ZWQgdG8gY2hh
bmdlLgogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1JdGVtVHlwZTsKIAogICAgIC8v
IEluZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwgaW5kaWNhdGluZyB0aGUgcHJldmlv
dXMgYW5kIGN1cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBhdCB0aGUgdGltZSB0aGF0IHRoaXMg
RG9jU2hlbGwgYmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBt
UHJldmlvdXNUcmFuc0luZGV4OwogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1Mb2Fk
ZWRUcmFuc0luZGV4OwogCisgICAgUFJVaW50MzIgICAgICAgICAgICAgICAgICAgbVNhbmRib3hG
bGFnczsKKyAgICAKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQ3JlYXRlZDsKICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJmcmFtZXM7CiAgICAgYm9vbCAg
ICAgICAgICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAgICBib29sICAgICAgICAgICAg
ICAgICAgICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAg
ICAgIG1BbGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAg
bUFsbG93SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ROU1By
ZWZldGNoOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1dpbmRvd0NvbnRy
b2w7CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbCBiL2RvY3NoZWxs
L2Jhc2UvbnNJRG9jU2hlbGwuaWRsCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRs
CisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCkBAIC01NDgsOSArNTQ4LDQ0IEBA
IGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiAgICAqLwogICBhdHRyaWJ1dGUg
Ym9vbGVhbiBpc0FwcFRhYjsKIAogICAvKioKICAgICogQ3JlYXRlIGEgbmV3IGFib3V0OmJsYW5r
IGRvY3VtZW50IGFuZCBjb250ZW50IHZpZXdlci4KICAgICogQHBhcmFtIGFQcmluY2lwYWwgdGhl
IHByaW5jaXBhbCB0byB1c2UgZm9yIHRoZSBuZXcgZG9jdW1lbnQuCiAgICAqLwogICB2b2lkIGNy
ZWF0ZUFib3V0QmxhbmtDb250ZW50Vmlld2VyKGluIG5zSVByaW5jaXBhbCBhUHJpbmNpcGFsKTsK
KyAgCisgIC8qKiAKKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3NoZWxsLiBUaGVz
ZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2YgdGhlIAorICAg
KiBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3Rl
bnQuIFNlZSB0aGUgSFRNTDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBUaGVzZSBmbGFn
cyBvbiB0aGUgZG9jc2hlbGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2FuZGJv
eCBhdHRyaWJ1dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuCisgICAqIFRoZXkgYXJlIG9ubHkgdXNl
ZCB3aGVuIGxvYWRpbmcgbmV3IGNvbnRlbnQsIHNhbmRib3ggZmxhZ3MgYXJlIGFsc28gaW1tdXRh
Ymx5IHNldCBvbiB0aGUgZG9jdW1lbnQKKyAgICogd2hlbiBpdCBpcyBsb2FkZWQuIFRoZSBzYW5k
Ym94IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94IGZsYWdzIG9uIGl0
cyBkb2NzaGVsbAorICAgKiBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVudCwgaWYgYW55LiAKKyAg
ICovICAgCisgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHNhbmRib3hGbGFnczsKKyAgCisgIC8q
KiAKKyAgICogVGhlIGNvbnRlbnQgaXMgc2FuZGJveGVkIGFuZCBpc29sYXRlZCB3aXRoIGEgbnVs
bCBwcmluY2lwYWwuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hfRkxBR1Nf
U0FOREJPWEVEICA9IDB4MTsgCisgIAorICAvKioKKyAgICogVGhlIGNvbnRlbnQgaXMgc2FuZGJv
eGVkIGFuZCBpc29sYXRlZCB3aXRoIG51bGwgcHJpbmNpcGFsIG9yaWdpbmFsbHkgYnV0IHRvcCBu
YXZpZ2F0aW9uIGlzIGFsbG93ZWQuIAorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5E
Qk9YX0ZMQUdTX0FMTE9XX1RPUF9OQVZJR0FUSU9OID0gMHgyOworICAgCisgIC8qKgorICAgKiBU
aGUgY29udGVudCBpcyBzYW5kYm94ZWQgYnV0IGFsbG93ZWQgdG8gaGF2ZSBpdHMgbmF0dXJhbCBk
b21haW4uIAorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YX0ZMQUdTX0FMTE9X
X1NBTUVfRE9NQUlOID0gMHg0OworICAKKyAgLyoqCisgICAqIFRoZSBjb250ZW50IGlzIHNhbmRi
b3hlZCBidXQgZm9ybSBzdWJtaXNzaW9uIGlzIGFsbG93ZWQKKyAgICovCisgIGNvbnN0IHVuc2ln
bmVkIGxvbmcgU0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NVQk1JVCA9IDB4ODsgCisgICAKKyAg
LyoqCisgICAqIFRoZSBjb250ZW50IGlzIHNhbmRib3hlZCBidXQgc2NyaXB0IGV4ZWN1dGlvbiBp
cyBhbGxvd2VkCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hfRkxBR1NfQUxM
T1dfU0NSSVBUUyA9IDB4MTA7IAogfTsKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZhY2VzL2h0bWwv
bnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01I
VE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1M
SUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZy
YW1lRWxlbWVudC5pZGwKQEAgLTMzLDE2ICszMywxNyBAQAogICogZGVjaXNpb24gYnkgZGVsZXRp
bmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UK
ICAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwu
IElmIHlvdSBkbyBub3QgZGVsZXRlCiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGll
bnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0aGUgdGVybXMg
b2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoKICAqICoqKioq
IEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJuc0lET01IVE1MRWxlbWVu
dC5pZGwiCisjaW5jbHVkZSAibnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRsIgogCiAvKioK
ICAqIFRoZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2UgaXMgdGhlIGludGVyZmFj
ZSB0byBhIFtYXUhUTUwKICAqIGlmcmFtZSBlbGVtZW50LgogICoKICAqIFRoaXMgaW50ZXJmYWNl
IGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lmaWNhdGlvbjoK
ICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgpAQCAtNjEsMTYg
KzYyLDE4IEBAIGludGVyZmFjZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCA6IG5zSUQKICAgICAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luV2lkdGg7CiAgICAgICAgICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG5hbWU7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmcgICAgICAgIHNjcm9sbGluZzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmlu
ZyAgICAgICAgc3JjOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB3aWR0
aDsKICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgcmVhZG9ubHkgYXR0cmlidXRl
IG5zSURPTURvY3VtZW50ICAgY29udGVudERvY3VtZW50OwogICByZWFkb25seSBhdHRyaWJ1dGUg
bnNJRE9NV2luZG93ICAgICBjb250ZW50V2luZG93OwotCisgIAorICAvLyBIVE1MNSBzYW5kYm94
IGF0dHJpYnV0ZQorICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRE9NU2V0dGFibGVUb2tlbkxp
c3Qgc2FuZGJveDsKIAogICAvLyBNb3ppbGxhIGV4dGVuc2lvbnMKICAgLy8gaWZyYW1lIGVsZW1l
bnRzIHJlcXVpcmUgdGhlIG1vekFsbG93RnVsbFNjcmVlbiBhdHRyaWJ1dGUgdG8gYmUgcHJlc2Vu
dAogICAvLyBpZiB0aGV5J3JlIHRvIGFsbG93IGNvbnRlbnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0
byBnbyBpbnRvIERPTSBmdWxsLXNjcmVlbgogICAvLyBtb2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1v
emlsbGEub3JnL2luZGV4LnBocD90aXRsZT1HZWNrbzpGdWxsU2NyZWVuQVBJCiAgICAgICAgICAg
IGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgIG1vekFsbG93RnVsbFNjcmVlbjsKIH07CmRpZmYg
LS1naXQgYS9pbWFnZS9zcmMvaW1nTG9hZGVyLmNwcCBiL2ltYWdlL3NyYy9pbWdMb2FkZXIuY3Bw
Ci0tLSBhL2ltYWdlL3NyYy9pbWdMb2FkZXIuY3BwCisrKyBiL2ltYWdlL3NyYy9pbWdMb2FkZXIu
Y3BwCkBAIC01NTMsMTcgKzU1MywxNyBAQCBzdGF0aWMgbnNyZXN1bHQgTmV3SW1hZ2VDaGFubmVs
KG5zSUNoYW5uCiAKICAgICBpZiAoYUxvYWRGbGFncyAmIG5zSVJlcXVlc3Q6OkxPQURfQkFDS0dS
T1VORCkKICAgICAgICsrcHJpb3JpdHk7IC8vIGZ1cnRoZXIgcmVkdWNlIHByaW9yaXR5IGZvciBi
YWNrZ3JvdW5kIGxvYWRzCiAKICAgICBwLT5BZGp1c3RQcmlvcml0eShwcmlvcml0eSk7CiAgIH0K
IAogICBib29sIHNldE93bmVyID0gbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKGFM
b2FkaW5nUHJpbmNpcGFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKmFSZXN1bHQsIGFVUkksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphUmVzdWx0LCBhVVJJLCBmYWxz
ZSwgZmFsc2UpOwogICAqYUZvcmNlUHJpbmNpcGFsQ2hlY2tGb3JDYWNoZUVudHJ5ID0gc2V0T3du
ZXI7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCiBzdGF0aWMgUFJVaW50MzIgU2Vjb25kc0Zyb21Q
UlRpbWUoUFJUaW1lIHByVGltZSkKIHsKICAgcmV0dXJuIFBSVWludDMyKFBSSW50NjQocHJUaW1l
KSAvIFBSSW50NjQoUFJfVVNFQ19QRVJfU0VDKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>575617</attachid>
            <date>2011-11-18 19:29:55 -0800</date>
            <delta_ts>2011-12-01 16:08:53 -0800</delta_ts>
            <desc>WIP - experimental prototype</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>32187</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOTJiNjMyOWJiMDE0NmMxNzU5MjBmMzBkNzI5
NDY1YTAyNzhmNjA5MwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtNzksMTYgKzc5LDE3IEBAIHN0YXRpYyBmcF9leGNlcHRfdCBv
bGRtYXNrID0gZnBzZXRtYXNrKH4KICNpbmNsdWRlICJtb3ppbGxhL0F1dG9SZXN0b3JlLmgiCiAj
aW5jbHVkZSAibnNJTm9kZS5oIgogI2luY2x1ZGUgIm5zSGFzaHRhYmxlLmgiCiAjaW5jbHVkZSAi
bnNJRE9NTm9kZS5oIgogI2luY2x1ZGUgIm5zSHRtbDVQYXJzZXIuaCIKICNpbmNsdWRlICJuc0lG
cmFnbWVudENvbnRlbnRTaW5rLmgiCiAjaW5jbHVkZSAibnNNYXRoVXRpbHMuaCIKICNpbmNsdWRl
ICJtb3ppbGxhL1RpbWVTdGFtcC5oIgorI2luY2x1ZGUgIm5zSURPTURPTVNldHRhYmxlVG9rZW5M
aXN0LmgiCiAKIHN0cnVjdCBuc05hdGl2ZUtleUV2ZW50OyAvLyBEb24ndCBpbmNsdWRlIG5zSU5h
dGl2ZUtleUJpbmRpbmdzLmggaGVyZTogaXQgd2lsbCBmb3JjZSBzdHJhbmdlIGNvbXBpbGF0aW9u
IGVycm9yIQogCiBjbGFzcyBuc0lET01TY3JpcHRPYmplY3RGYWN0b3J5OwogY2xhc3MgbnNJWFBD
b25uZWN0OwogY2xhc3MgbnNJQ29udGVudDsKIGNsYXNzIG5zSURPTUtleUV2ZW50OwogY2xhc3Mg
bnNJRG9jdW1lbnQ7CkBAIC0xODE5LDMyICsxODIwLDQ1IEBAIHB1YmxpYzoKICAgICogZnJvbSB0
aGUgZG9jdW1lbnQgaXQgY29tZXMgZnJvbS4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBVUklJ
bmhlcml0c1NlY3VyaXR5Q29udGV4dChuc0lVUkkgKmFVUkksIGJvb2wgKmFSZXN1bHQpOwogCiAg
IC8qKgogICAgKiBTZXQgdGhlIGdpdmVuIHByaW5jaXBhbCBhcyB0aGUgb3duZXIgb2YgdGhlIGdp
dmVuIGNoYW5uZWwsIGlmCiAgICAqIG5lZWRlZC4gIGFVUkkgbXVzdCBiZSB0aGUgVVJJIG9mIGFD
aGFubmVsLiAgYVByaW5jaXBhbCBtYXkgYmUKICAgICogbnVsbC4gIElmIGFTZXRVcEZvckFib3V0
QmxhbmsgaXMgdHJ1ZSwgdGhlbiBhYm91dDpibGFuayB3aWxsIGdldAotICAgKiB0aGUgcHJpbmNp
cGFsIHNldCB1cCBvbiBpdC4KKyAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAgb24gaXQuIElmIGFG
b3JjZU93bmVyIGlzIHRydWUsIHRoZSBvd25lcgorICAgKiB3aWxsIGJlIHNldCBvbiB0aGUgY2hh
bm5lbCwgZXZlbiBpZiB0aGUgcHJpbmNpcGFsIGNhbiBiZSBkZXRlcm1pbmVkCisgICAqIGZyb20g
dGhlIGNoYW5uZWwuIAogICAgKgogICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIgdGhl
IHByaW5jaXBhbCB3YXMgc2V0IHVwIGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5lbC4K
ICAgICovCiAgIHN0YXRpYyBib29sIFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxv
YWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5u
ZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFV
UkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRC
bGFuayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJv
dXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25l
cik7CiAKICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBhQmluYXJ5RGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNlNjRTdHJpbmcp
OwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFzY2lpU3RyaW5n
LAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhKTsKICAgCisg
IC8qKgorICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmli
dXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICAgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBjb252ZXJ0
cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxseSAKKyAgICoKKyAgICogQHBh
cmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgYXMgYW4g
bnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QKKyAgICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZs
YWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIgUGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFn
cyhuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCAqIGFBdHRyaWJ1dGUpOworCisgIAogcHJpdmF0
ZToKICAgc3RhdGljIGJvb2wgSW5pdGlhbGl6ZUV2ZW50VGFibGUoKTsKIAogICBzdGF0aWMgbnNy
ZXN1bHQgRW5zdXJlU3RyaW5nQnVuZGxlKFByb3BlcnRpZXNGaWxlIGFGaWxlKTsKIAogICBzdGF0
aWMgbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9yeSAqR2V0RE9NU2NyaXB0T2JqZWN0RmFjdG9yeSgp
OwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBIb2xkU2NyaXB0T2JqZWN0KFBSVWludDMyIGFMYW5nSUQs
IHZvaWQqIGFPYmplY3QpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1
bWVudC5oIGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCi0tLSBhL2NvbnRlbnQv
YmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURv
Y3VtZW50LmgKQEAgLTQ1MSwxNiArNDUxLDM1IEBAIHB1YmxpYzoKICAgICogQHNlZSBuc0JpZGlV
dGlscy5oCiAgICAqLwogICB2b2lkIFNldEJpZGlPcHRpb25zKFBSVWludDMyIGFCaWRpT3B0aW9u
cykKICAgewogICAgIG1CaWRpT3B0aW9ucyA9IGFCaWRpT3B0aW9uczsKICAgfQogICAKICAgLyoq
CisgICAqIFNldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4gVGhpcyBzaG91
bGQgb25seSBoYXBwZW4gYXQgCisgICAqIGF0IGRvY3VtZW50IGxvYWQsIHRoZSBmbGFncyBhcmUg
aW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBhdCBsb2FkIHRpbWUuCisgICAqIEAgc2VlIG5zRG9j
U2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIHZvaWQgU2V0U2FuZGJv
eEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCisgIHsKKyAgICBtU2FuZGJveEZsYWdzID0g
YVNhbmRib3hGbGFnczsKKyAgfQorICAKKyAgLyoqIAorICAgKiBHZXQgdGhlIHNhbmRveCBmbGFn
cyBmb3IgdGhpcyBkb2N1bWVudAorICAgKiBAc2VlIG5zRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9z
c2libGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIEdldFNhbmRib3hGbGFncygpIGNvbnN0Cisg
IHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAgfQorICAgCisgIC8qKgogICAgKiBBY2Nl
c3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxzbyBnZXQgc2V0IGZyb20gb3RoZXIKICAg
ICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncykuCiAgICAqLwogICB2aXJ0dWFsIHZvaWQg
R2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmllbGQsIG5zQVN0cmluZyYgYURhdGEpIGNv
bnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRlckRhdGEobnNJQXRvbSogYWhlYWRlckZp
ZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7CiAKICAgLyoqCiAgICAqIENyZWF0ZSBh
IG5ldyBwcmVzZW50YXRpb24gc2hlbGwgdGhhdCB3aWxsIHVzZSBhQ29udGV4dCBmb3IgaXRzCkBA
IC0xNzM4LDE2ICsxNzU3LDIxIEBAIHByb3RlY3RlZDoKICAgLy8gSWYgbUlzU3RhdGljRG9jdW1l
bnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBvcmlnaW5hbAogICAv
LyBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5hbERvY3VtZW50Owog
CiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQuICBXaGF0IHRoaXMgYml0
ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5oCiAgIFBSVWludDMy
IG1CaWRpT3B0aW9uczsKIAorICAvLyBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9jdW1lbnQu
IFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSBvZiB0aGUg
CisgIC8vIGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZiBl
eGlzdGVudC4gVGhlc2UgYXJlIHNldCBhdCBsb2FkIHRpbWUgYW5kCisgIC8vYXJlIGltbXV0YWJs
ZSAtIHNlZSBuc0RvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzICAgCisgIFBSVWlu
dDMyIG1TYW5kYm94RmxhZ3M7CisgIAogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHBy
aXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhl
IGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3Vy
aXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5j
cHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jh
c2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVu
dFV0aWxzLmNwcApAQCAtNjY0LDE3ICs2NjQsNjcgQEAgbnNDb250ZW50VXRpbHM6OkdldFBhcnNl
clNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1BhcnNlclNlcnZp
Y2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAg
IHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVybiBzUGFyc2Vy
U2VydmljZTsKIH0KLQorLyoqCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNh
bmRib3ggYXR0cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICogYSBDU1AgZGlyZWN0aXZlKSBh
bmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFsbHkKKyAqCisg
KiBAcGFyYW0gYUF0dHJpYnV0ZSAgICB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRl
IGFzIGFuIG5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0CisgKiBAcmV0dXJuIAkJCSAgICB0aGUg
c2V0IG9mIGZsYWdzCisgKi8KK1BSVWludDMyCituc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94
QXR0cmlidXRlVG9GbGFncyhuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCAqIGFBdHRyaWJ1dGUp
Cit7CisgIC8vIFRPRE86IGhvdyB0byBoYW5kbGUgZXJyb3JzIGluIHRoaXMgZnVuY3Rpb24gPyBp
ZiB3ZSdyZSBoZXJlLCBzb21ldGhpbmcgaGFzIGEgc2FuZGJveAorICAvLyBhdHRyaWJ1dGUgc2V0
IGFuZCBleHBlY3RzIGNvbnRlbnQgdG8gYmUgc2FuZGJveGVkLi4uIHBlcmhhcHMgY29uc2lkZXIg
ZmFpbGluZyBjbG9zZWQgPz8KKworICBQUlVpbnQzMiBvdXQgPSAwOworICAKKyAgLy8gaWYgdGhl
cmUncyBhIHNhbmRib3ggYXR0cmlidXRlIGF0IGFsbCwgc2V0IFNBTkRCT1hfRkxBR1NfU0FOREJP
WEVECisgIG91dCB8PSBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19TQU5EQk9YRUQ7CisgIAor
ICBib29sIGFsbG93ZWQgPSBmYWxzZTsKKyAgCisgIC8vIFRPRE86IHNob3VsZCBpIHRyeSB0byB1
c2UgYXRvbXMgZXZlbiB0aG91Z2ggQ29udGFpbnMgd2FudHMgYSBzdHJpbmcgPyAKKyAgbnNTdHJp
bmcgYWxsb3dTY3JpcHRzLCBhbGxvd1NhbWVPcmlnaW4sIGFsbG93Rm9ybXM7CisgIAorICBuc3Jl
c3VsdCByZXN1bHQgPSBuc0drQXRvbXM6OmFsbG93c2NyaXB0cy0+U2NyaXB0YWJsZVRvU3RyaW5n
KGFsbG93U2NyaXB0cyk7CisgIAorICByZXN1bHQgPSBuc0drQXRvbXM6OmFsbG93c2FtZW9yaWdp
bi0+U2NyaXB0YWJsZVRvU3RyaW5nKGFsbG93U2FtZU9yaWdpbik7CisgIAorICByZXN1bHQgPSBu
c0drQXRvbXM6OmFsbG93Zm9ybXMtPlNjcmlwdGFibGVUb1N0cmluZyhhbGxvd0Zvcm1zKTsKKyAg
CisgIHJlc3VsdCA9IGFBdHRyaWJ1dGUtPkNvbnRhaW5zKGFsbG93U2NyaXB0cywgJmFsbG93ZWQp
OworICAKKyAgaWYgKGFsbG93ZWQpCisgICAgb3V0IHw9IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZM
QUdTX0FMTE9XX1NDUklQVFM7CisgIAorICBhbGxvd2VkID0gZmFsc2U7CisgIHJlc3VsdCA9IGFB
dHRyaWJ1dGUtPkNvbnRhaW5zKGFsbG93U2FtZU9yaWdpbiwgJmFsbG93ZWQpOworICAKKyAgaWYg
KGFsbG93ZWQpCisgICAgb3V0IHw9IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1NB
TUVfRE9NQUlOOworCisgIGFsbG93ZWQgPSBmYWxzZTsKKyAgcmVzdWx0ID0gYUF0dHJpYnV0ZS0+
Q29udGFpbnMoYWxsb3dGb3JtcywgJmFsbG93ZWQpOworICAKKyAgaWYgKGFsbG93ZWQpCisgICAg
b3V0IHw9IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX0ZPUk1fU1VCTUlUOworICAg
IAorICAvLyBUT0RPOiBhZGQgdGhlIHJlc3Qgb2YgdGhlIHBhcnNpbmcgaGVyZQorICAKKyAgcmV0
dXJuIG91dDsKK30KKyAgCiAjaWZkZWYgTU9aX1hURgogbnNJWFRGU2VydmljZSoKIG5zQ29udGVu
dFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFzWFRGU2VydmljZSkgewogICAgIG5z
cmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZzWFRGU2VydmljZSk7
CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIHNYVEZTZXJ2aWNlID0gbnNudWxsOwpA
QCAtNTc1MSwxNyArNTgwMSwxOCBAQCBuc0NvbnRlbnRVdGlsczo6VVJJSW5oZXJpdHNTZWN1cml0
eUNvbnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXN1bHQpOwogfQogCiAvLyBz
dGF0aWMKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lw
YWwqIGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFT
ZXRVcEZvckFib3V0QmxhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgYUZvcmNlT3duZXIpCiB7CiAgIC8vCiAgIC8vIFNldCB0aGUgb3duZXIgb2YgdGhlIGNo
YW5uZWwsIGJ1dCBvbmx5IGZvciBjaGFubmVscyB0aGF0IGNhbid0CiAgIC8vIHByb3ZpZGUgdGhl
aXIgb3duIHNlY3VyaXR5IGNvbnRleHQuCiAgIC8vCiAgIC8vIFhYWDogSXQgc2VlbXMgd3Jvbmcg
dGhhdCB0aGUgb3duZXIgaXMgaWdub3JlZCAtIGV2ZW4gaWYgb25lIGlzCiAgIC8vICAgICAgc3Vw
cGxpZWQpIHVubGVzcyB0aGUgVVJJIGlzIGphdmFzY3JpcHQgb3IgZGF0YSBvciBhYm91dDpibGFu
ay4KICAgLy8gWFhYOiBJZiB0aGlzIGlzIGV2ZXIgY2hhbmdlZCwgY2hlY2sgYWxsIGNhbGxlcnMg
Zm9yIHdoYXQgb3duZXJzCkBAIC01NzY5LDIzICs1ODIwLDI3IEBAIG5zQ29udGVudFV0aWxzOjpT
ZXRVcENoYW5uZWxPd25lcihuc0lQcmkKICAgLy8gICAgICBjb21tZW50cyBpbiBuc0RvY1NoZWxs
OjpMb2FkVVJJIHdoZXJlIHdlIGZhbGwgYmFjayBvbgogICAvLyAgICAgIGluaGVyaXRpbmcgdGhl
IG93bmVyIGlmIGNhbGxlZCBmcm9tIGNocm9tZS4gIFRoYXQgd291bGQgYmUKICAgLy8gICAgICB2
ZXJ5IHdyb25nIGlmIHRoaXMgY29kZSBjaGFuZ2VkIGFueXRoaW5nIGJ1dCBjaGFubmVscyB0aGF0
CiAgIC8vICAgICAgY2FuJ3QgcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dCEKICAg
Ly8KICAgLy8gICAgICAoQ3VycmVudGx5IGNocm9tZSBVUklzIHNldCB0aGUgb3duZXIgd2hlbiB0
aGV5IGFyZSBjcmVhdGVkIQogICAvLyAgICAgIFNvIHNldHRpbmcgYSBOVUxMIG93bmVyIHdvdWxk
IGJlIGJhZCEpCiAgIC8vCisgIC8vIElmIGFGb3JjZU93bmVyIGlzIHRydWUsIHRoZSBvd25lciB3
aWxsIGJlIHNldCwgZXZlbiBmb3IgYSBjaGFubmVsIHRoYXQKKyAgLy8gY2FuIHByb3ZpZGUgaXRz
IG93biBzZWN1cml0eSBjb250ZW50LiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBIVE1MNSBJRlJBTUUK
KyAgLy8gc2FuZGJveCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiBmb3JjZSB0aGUgY2hhbm5lbCAoYW5k
IGl0cyBkb2N1bWVudCkgdG8KKyAgLy8gZXhwbGljaXRseSBoYXZlIGEgbnVsbCBwcmluY2lwYWwK
ICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBlY3QgVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRl
eHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAgIC8vIGFib3V0OmJsYW5rIFVSSSwgc28gZG9u
J3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0aGlzIGNhbGwgZmFpbHMuCiAgIC8vIFRoaXMg
Y29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBvbmUgaW4gbnNEb2NTaGVsbDo6SW50ZXJuYWxM
b2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5nIGZvciB0aGluZ3MgdGhhdCB3aWxsIHVzZSB0
aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQo
YVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0Qmxh
bmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpIHsKKyAgaWYgKGFGb3JjZU93bmVyIHx8ICgo
TlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkksICZpbmhlcml0KSkg
JiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYmIE5TX0lzQWJvdXRC
bGFuayhhVVJJKSkpKSkpIHsKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIoYUxvYWRpbmdQcmluY2lw
YWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8KICAgLy8gZmlsZTogdXJpIHNwZWNp
YWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMgaXMgYSBmaWxlOiBsb2FkIG9wZW5lZCBmcm9t
IGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVlZApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNl
L3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKLS0t
IGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3Jj
L25zRG9jdW1lbnQuY3BwCkBAIC0yMzc4LDE2ICsyMzc4LDI1IEBAIG5zRG9jdW1lbnQ6OlN0YXJ0
RG9jdW1lbnRMb2FkKGNvbnN0IGNoYXIKICAgICBGaW5kQ2hhckluUmVhZGFibGUoJzsnLCBzZW1p
Y29sb24sIGVuZCk7CiAgICAgU2V0Q29udGVudFR5cGVJbnRlcm5hbChTdWJzdHJpbmcoc3RhcnQs
IHNlbWljb2xvbikpOwogICB9CiAKICAgUmV0cmlldmVSZWxldmFudEhlYWRlcnMoYUNoYW5uZWwp
OwogCiAgIG1DaGFubmVsID0gYUNoYW5uZWw7CiAKKyAgLy8gaWYgdGhpcyBkb2N1bWVudCBpcyBi
ZWluZyBsb2FkZWQgYnkgYSBkb2NzaGVsbCwgY29weSBpdHMgc2FuZGJveCBmbGFncworICAvLyB0
byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11dGFibGUgYWZ0ZXIgYmVpbmcgc2V0IGhlcmUu
CisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFD
b250YWluZXIpOworICAKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgIG5zcmVzdWx0IHJ2ID0gZG9j
U2hlbGwtPkdldFNhbmRib3hGbGFncygmbVNhbmRib3hGbGFncyk7CisJIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CisgIH0KKyAgCiAgIG5zcmVzdWx0IHJ2ID0gSW5pdENTUCgpOwogICBOU19F
TlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIHJldHVybiBOU19PSzsKIH0KIAogbnNyZXN1bHQK
IG5zRG9jdW1lbnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0Rv
Y3VtZW50LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaAotLS0gYS9jb250ZW50L2Jh
c2Uvc3JjL25zRG9jdW1lbnQuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaApA
QCAtMTI1NiwxNyArMTI1NiwxNyBAQCBwcml2YXRlOgogICBuc0NTdHJpbmcgbVNjcm9sbFRvUmVm
OwogICBQUlVpbnQ4IG1TY3JvbGxlZFRvUmVmQWxyZWFkeSA6IDE7CiAgIFBSVWludDggbUNoYW5n
ZVNjcm9sbFBvc1doZW5TY3JvbGxpbmdUb1JlZiA6IDE7CiAKICAgLy8gVHJhY2tpbmcgZm9yIGlt
YWdlcyBpbiB0aGUgZG9jdW1lbnQuCiAgIG5zRGF0YUhhc2h0YWJsZTwgbnNQdHJIYXNoS2V5PGlt
Z0lSZXF1ZXN0PiwgUFJVaW50MzI+IG1JbWFnZVRyYWNrZXI7CiAKICAgVmlzaWJpbGl0eVN0YXRl
IG1WaXNpYmlsaXR5U3RhdGU7Ci0KKyAgCiAjaWZkZWYgREVCVUcKIHByb3RlY3RlZDoKICAgYm9v
bCBtV2lsbFJlcGFyZW50OwogI2VuZGlmCiB9OwogCiAjZGVmaW5lIE5TX0RPQ1VNRU5UX0lOVEVS
RkFDRV9UQUJMRV9CRUdJTihfY2xhc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
IE5TX05PREVfT0ZGU0VUX0FORF9JTlRFUkZBQ0VfVEFCTEVfQkVHSU4oX2NsYXNzKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJh
bWVMb2FkZXIuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAotLS0gYS9j
b250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMv
bnNGcmFtZUxvYWRlci5jcHAKQEAgLTQ2NiwyMCArNDY2LDExNSBAQCBuc0ZyYW1lTG9hZGVyOjpS
ZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3QgdG8gYmUgc2FmZSwgcmVjaGVjayB1
cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQpOwogICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsTG9hZEluZm8+IGxvYWRJbmZvOwog
ICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9BZGRSZWZzKGxvYWRJbmZvKSk7CiAg
IE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9GQUlMVVJFKTsKIAotICAvLyBXZSds
bCB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3VtZW50IGxvYWRlZCBpbnNp
ZGUgdXMuICBUaGlzCi0gIC8vIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVkZWQgdG8gcHJldmVudCBY
U1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluCi0gIC8vIHN1YmZyYW1lcyEKLSAgbG9h
ZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7CisgIG5zU3Ry
aW5nIHNhbmRib3hBdHRyOyAgCisgIFBSVWludDMyIHBhcmVudFNhbmRib3hGbGFncyA9IDA7CisK
KyAgLy8gZ2V0IHRoZSBwYXJlbnQncyBzYW5kYm94IGZsYWdzLCB0aGV5J3JlIG5lZWRlZCB0byBk
ZXRlcm1pbmUgaWYgdGhlCisgIC8vIGZyYW1lIGJlaW5nIGxvYWRlZCBiZWxvdyBuZWVkcyB0byBi
ZSBzYW5kYm94ZWQKKyAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50RG9jU2hl
bGxJdGVtOworICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBjdXJEb2NTaGVsbEl0ZW0o
ZG9fUXVlcnlJbnRlcmZhY2UobURvY1NoZWxsKSk7CisgIAorICBpZiAoTlNfU1VDQ0VFREVEKGN1
ckRvY1NoZWxsSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudERvY1NoZWxsSXRl
bSkpKSkgeworICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBwYXJlbnREb2MgPSBkb19HZXRJbnRl
cmZhY2UocGFyZW50RG9jU2hlbGxJdGVtKTsKKyAgICAKKyAgICBpZiAocGFyZW50RG9jKSB7Cisg
ICAgICBwYXJlbnRTYW5kYm94RmxhZ3MgPSBwYXJlbnREb2MtPkdldFNhbmRib3hGbGFncygpOwor
ICAgIH0KKyAgfSAgCisKKyAgLy8gaXMgdGhpcyBhbiA8aWZyYW1lPiB3aXRoIGEgc2FuZGJveCBh
dHRyaWJ1dGUgb3IgYSBmcmFtZSB3aG9zZSBwYXJlbnQKKyAgLy8gaXMgc2FuZGJveGVkID8gIAor
ICBpZiAocGFyZW50U2FuZGJveEZsYWdzIHx8IAorICAgICAobU93bmVyQ29udGVudC0+R2V0QXR0
cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpzYW5kYm94LCBzYW5kYm94QXR0cikgJiYK
KyAgICAgIG1Pd25lckNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6OmlmcmFtZSkpKSB7ICAgICAg
IAorICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgIAorICAgIG5zQ09NUHRyPG5zSURP
TUhUTUxJRnJhbWVFbGVtZW50PiBpZnJhbWUgPSBkb19RdWVyeUludGVyZmFjZShtT3duZXJDb250
ZW50KTsKKyAgCisgICAgaWYgKGlmcmFtZSkgeworICAgICAgbnNDT01QdHI8bnNJRE9NRE9NU2V0
dGFibGVUb2tlbkxpc3Q+IHNhbmRib3g7CisgICAgCisgICAgICBuc3Jlc3VsdCByZXN1bHQgPSBp
ZnJhbWUtPkdldFNhbmRib3goZ2V0dGVyX0FkZFJlZnMoc2FuZGJveCkpOworICAgICAgLy8gVE9E
TyA6IHdoYXQgdG8gZG8gaWYgdGhpcyBmYWlscyA/IChzZWUgYmVsb3cgYWxzbykgCisgICAgCisg
ICAgICBzYW5kYm94RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRl
VG9GbGFncyhzYW5kYm94KTsKKyAgICAgIC8vIFRPRE86IHdoYXQgdG8gZG8gaWYgdGhpcyBmYWls
cyA/IHRoZSBjb250ZW50IHdhcyBpbnRlbmRlZCB0byBiZSBzYW5kYm94ZWQKKyAgICAgIC8vIGFu
ZCBpdCBtYXkgbm90IGJlIC0gbWF5YmUgZmFpbCBjbG9zZWQgKGFsbCByZXN0cmljdGlvbnMpID8/
PyAKKyAgICB9CisgICAgIAorICAgIGlmIChwYXJlbnRTYW5kYm94RmxhZ3MpIHsgCisgICAgICAv
LyBkbyB0aGUgaW50ZXJzZWN0aW9uIHdpdGggdGhlIGN1cnJlbnQgZmxhZ3MgaW4gdGhlIGRvY3No
ZWxsIQorICAgICAgCisgICAgICAvLyBUT0RPOiBwcm9iYWJseSB3YW50IHRvIG1ha2UgdGhpcyBh
IGZ1bmN0aW9uIGluIG5zQ29udGVudFV0aWxzIAorICAgICAgLy8gdGhpcyBsb2dpYyB3aWxsIGxp
a2VseSBiZSBuZWVkZWQgZWxzZXdoZXJlIChlLmcuIENTUCBzYW5kYm94IGludGVyc2VjdGlvbikg
CisKKyAgICAgIC8vIGlmIHBhcmVudCBpcyBzYW5kYm94ZWQsIGN1cnJlbnQgZG9jc2hlbGwgaXMg
c2FuZGJveGVkCisgICAgICBzYW5kYm94RmxhZ3MgfD0gbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxB
R1NfU0FOREJPWEVEOworICAKKyAgICAgIC8vIGlmIGN1cnJlbnQgZG9jc2hlbGwgaGFzIGFsbG93
LXNhbWUtZG9tYWluIGJ1dCBwYXJlbnQgZG9lcyBub3QsCisgICAgICAvLyBjbGVhciBhbGxvdy1z
YW1lLWRvbWFpbgorICAgICAgaWYgKChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJP
WF9GTEFHU19BTExPV19TQU1FX0RPTUFJTikgJiYKKyAgICAgICAgICAhKHBhcmVudFNhbmRib3hG
bGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1NBTUVfRE9NQUlOKSkKKyAg
ICAgICAgc2FuZGJveEZsYWdzIHw9IH5uc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19T
QU1FX0RPTUFJTjsKKyAgICAgIAorICAgICAgLy8gaWYgY3VycmVudCBkb2NzaGVsbCBoYXMgYWxs
b3ctc2NyaXB0cyBidXQgcGFyZW50IGRvZXMgbm90LAorICAgICAgLy8gY2xlYXIgYWxsb3ctc2Ny
aXB0cworICAgICAgaWYgKChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFH
U19BTExPV19TQ1JJUFRTKSAmJgorICAgICAgICAgICEocGFyZW50U2FuZGJveEZsYWdzICYgbnNJ
RG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0NSSVBUUykpCisgICAgICAgIHNhbmRib3hG
bGFncyB8PSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0NSSVBUUzsKKyAgICAg
IAorICAgICAgIC8vIGlmIGN1cnJlbnQgZG9jc2hlbGwgaGFzIGFsbG93LXRvcC1uYXZpZ2F0aW9u
IGJ1dCBwYXJlbnQgZG9lcyBub3QsCisgICAgICAgLy8gY2xlYXIgYWxsb3ctdG9wLW5hdmlnYXRp
b24KKyAgICAgICBpZiAoKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdT
X0FMTE9XX1RPUF9OQVZJR0FUSU9OKSAmJgorICAgICAgICAgICAhKHBhcmVudFNhbmRib3hGbGFn
cyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1RPUF9OQVZJR0FUSU9OKSkKKyAg
ICAgICAgIHNhbmRib3hGbGFncyB8PSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1df
VE9QX05BVklHQVRJT047CisgICAgICAKKyAgICAgICAvLyBpZiBjdXJyZW50IGRvY3NoZWxsIGhh
cyBhbGxvdy1mb3JtcyBidXQgcGFyZW50IGRvZXMgbm90LAorICAgICAgIC8vIGNsZWFyIGFsbG93
LWZvcm1zCisgICAgICAgaWYgKChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9G
TEFHU19BTExPV19GT1JNX1NVQk1JVCkgJiYKKyAgICAgICAgICAgIShwYXJlbnRTYW5kYm94Rmxh
Z3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NVQk1JVCkpCisgICAg
ICAgICBzYW5kYm94RmxhZ3MgfD0gfm5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX0ZP
Uk1fU1VCTUlUOworICAgICB9CisgIAorICAgIG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNh
bmRib3hGbGFncyk7CisgICAgCisgICAgLy8gc2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGluZyBh
cyBzcGVjaWZpZWQgCisgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9Y
X0ZMQUdTX1NBTkRCT1hFRCkgeworICAgICAgaWYgKCEoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hl
bGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9ET01BSU4pKSB7CisgICAgICAgIC8vIGFsbG93
LXNhbWUtZG9tYWluIHdhc24ndCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG51
bGwgcHJpbmNpcGFsIGFuZCAKKyAgICAgICAgLy8gdXNlIHRoYXQgYXMgdGhlIG93bmVyCisgICAg
ICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gbnVsbFByaW5jaXBhbCA9IGRvX0NyZWF0ZUluc3Rh
bmNlKCJAbW96aWxsYS5vcmcvbnVsbHByaW5jaXBhbDsxIik7CisgICAgICAgIGxvYWRJbmZvLT5T
ZXRPd25lcihudWxsUHJpbmNpcGFsKTsKKyAgICAgIH0gZWxzZSB7IAorICAgICAgICAvLyB1c2Ug
dGhlICdub3JtYWwnIHByaW5jaXBhbCBmb3IgdGhlIDxpZnJhbWU+IC0gc2VlIG5vdGUgYmVsb3cK
KyAgICAgICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwo
KSk7CisgICAgICB9CisgIAorICAgICAgaWYgKCEoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6
OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0NSSVBUUykpIHsKKyAgICAgICAgbURvY1NoZWxsLT5TZXRB
bGxvd0phdmFzY3JpcHQoZmFsc2UpOworICAgICAgfQorICAgIAorICAgICAgLy8gX2Fsd2F5c18g
ZGlzYWxsb3cgcGx1Z2lucyB3aGVuIHNhbmRib3hlZAorICAgICAgbURvY1NoZWxsLT5TZXRBbGxv
d1BsdWdpbnMoZmFsc2UpOworICAgIH0gCisgIH0KKworICBlbHNlIHsgCisgICAgLy8gbm90IHNh
bmRib3hlZCBzbyB3ZSB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3VtZW50
IGxvYWRlZCBpbnNpZGUgdXMuICBUaGlzCisgICAgLy8gaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRl
ZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBsb2FkZWQgaW4KKyAgICAvLyBz
dWJmcmFtZXMhCisgICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmlu
Y2lwYWwoKSk7CisgIH0KIAogICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwogICBydiA9IG1P
d25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKHJlZmVy
cmVyKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbG9hZEluZm8tPlNldFJl
ZmVycmVyKHJlZmVycmVyKTsKIAogICAvLyBLaWNrIG9mZiB0aGUgbG9hZC4uLgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNH
a0F0b21MaXN0LmgKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAorKysgYi9j
b250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCkBAIC05MywxNyArOTMsMjAgQEAgR0tfQVRP
TShhY3R1YXRlLCAiYWN0dWF0ZSIpCiBHS19BVE9NKGFkZHJlc3MsICJhZGRyZXNzIikKIEdLX0FU
T00oYWZ0ZXIsICJhZnRlciIpCiBHS19BVE9NKGFmdGVyX2VuZCwgImFmdGVyX2VuZCIpCiBHS19B
VE9NKGFmdGVyX3N0YXJ0LCAiYWZ0ZXJfc3RhcnQiKQogR0tfQVRPTShhbGlnbiwgImFsaWduIikK
IEdLX0FUT00oYWxpbmssICJhbGluayIpCiBHS19BVE9NKGFsbCwgImFsbCIpCiBHS19BVE9NKGFs
bG93ZXZlbnRzLCAiYWxsb3dldmVudHMiKQorR0tfQVRPTShhbGxvd2Zvcm1zLCAiYWxsb3ctZm9y
bXMiKQogR0tfQVRPTShhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucywgImFsbG93bmVnYXRpdmVhc3Nl
cnRpb25zIikKK0dLX0FUT00oYWxsb3dzYW1lb3JpZ2luLCAiYWxsb3ctc2FtZS1vcmlnaW4iKQor
R0tfQVRPTShhbGxvd3NjcmlwdHMsICJhbGxvdy1zY3JpcHRzIikKIEdLX0FUT00oYWxsb3d1bnRy
dXN0ZWQsICJhbGxvd3VudHJ1c3RlZCIpCiBHS19BVE9NKGFsdCwgImFsdCIpCiBHS19BVE9NKGFs
dGVybmF0ZSwgImFsdGVybmF0ZSIpCiBHS19BVE9NKGFsd2F5cywgImFsd2F5cyIpCiBHS19BVE9N
KGFuY2VzdG9yLCAiYW5jZXN0b3IiKQogR0tfQVRPTShhbmNlc3Rvck9yU2VsZiwgImFuY2VzdG9y
LW9yLXNlbGYiKQogR0tfQVRPTShfYW5kLCAiYW5kIikKIEdLX0FUT00oYW55LCAiYW55IikKQEAg
LTg3NiwxNiArODc5LDE3IEBAIEdLX0FUT00ocm93c3BhbiwgInJvd3NwYW4iKQogR0tfQVRPTShy
cCwgInJwIikKIEdLX0FUT00ocnQsICJydCIpCiBHS19BVE9NKHJ0bCwgInJ0bCIpCiBHS19BVE9N
KHJ1YnksICJydWJ5IikKIEdLX0FUT00ocnVsZSwgInJ1bGUiKQogR0tfQVRPTShydWxlcywgInJ1
bGVzIikKIEdLX0FUT00ocywgInMiKQogR0tfQVRPTShzYW1wLCAic2FtcCIpCitHS19BVE9NKHNh
bmRib3gsICJzYW5kYm94IikKIEdLX0FUT00oc2JhdHRyLCAic2JhdHRyIikKIEdLX0FUT00oc2Nh
bGUsICJzY2FsZSIpCiBHS19BVE9NKHNjYW4sICJzY2FuIikKIEdLX0FUT00oc2NoZW1lLCAic2No
ZW1lIikKIEdLX0FUT00oc2NvcGUsICJzY29wZSIpCiBHS19BVE9NKHNjb3BlZCwgInNjb3BlZCIp
CiBHS19BVE9NKHNjcmVlbiwgInNjcmVlbiIpCiBHS19BVE9NKHNjcmVlblgsICJzY3JlZW5YIikK
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNPYmplY3RMb2FkaW5nQ29udGVudC5jcHAg
Yi9jb250ZW50L2Jhc2Uvc3JjL25zT2JqZWN0TG9hZGluZ0NvbnRlbnQuY3BwCi0tLSBhL2NvbnRl
bnQvYmFzZS9zcmMvbnNPYmplY3RMb2FkaW5nQ29udGVudC5jcHAKKysrIGIvY29udGVudC9iYXNl
L3NyYy9uc09iamVjdExvYWRpbmdDb250ZW50LmNwcApAQCAtMTQ1NywxNyArMTQ1NywxNyBAQCBu
c09iamVjdExvYWRpbmdDb250ZW50OjpMb2FkT2JqZWN0KG5zSVVSCiAgICAgTlNfUGFyc2VDb250
ZW50VHlwZShhVHlwZUhpbnQsIHR5cGVIaW50LCBkdW1teSk7CiAgICAgaWYgKCF0eXBlSGludC5J
c0VtcHR5KCkpIHsKICAgICAgIGNoYW4tPlNldENvbnRlbnRUeXBlKHR5cGVIaW50KTsKICAgICB9
CiAgIH0KIAogICAvLyBTZXQgdXAgdGhlIGNoYW5uZWwncyBwcmluY2lwYWwgYW5kIHN1Y2gsIGxp
a2UgbnNEb2NTaGVsbDo6RG9VUklMb2FkIGRvZXMKICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hh
bm5lbE93bmVyKHRoaXNDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFuLCBhVVJJLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYW4sIGFVUkksIHRydWUsIGZhbHNlKTsKIAogICBuc0NPTVB0
cjxuc0lTY3JpcHRDaGFubmVsPiBzY3JpcHRDaGFubmVsID0gZG9fUXVlcnlJbnRlcmZhY2UoY2hh
bik7CiAgIGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgLy8gQWxsb3cgZXhlY3V0aW9uIGFnYWlu
c3Qgb3VyIGNvbnRleHQgaWYgdGhlIHByaW5jaXBhbHMgbWF0Y2gKICAgICBzY3JpcHRDaGFubmVs
LT4KICAgICAgIFNldEV4ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05P
Uk1BTCk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRN
TEZvcm1FbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxl
bWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50
LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3Bw
CkBAIC02ODEsMTcgKzY4MSwyMyBAQCBuc0hUTUxGb3JtRWxlbWVudDo6RG9TdWJtaXRPclJlc2V0
KG5zRXZlCiAgIC8vIFN1Ym1pdCBvciBSZXNldCB0aGUgZm9ybQogICBuc3Jlc3VsdCBydiA9IE5T
X09LOwogICBpZiAoTlNfRk9STV9SRVNFVCA9PSBhTWVzc2FnZSkgewogICAgIHJ2ID0gRG9SZXNl
dCgpOwogICB9CiAgIGVsc2UgaWYgKE5TX0ZPUk1fU1VCTUlUID09IGFNZXNzYWdlKSB7CiAgICAg
Ly8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIG5vdCBpbiBhIGRvY3VtZW50LgogICAgIGlmIChkb2Mp
IHsKLSAgICAgIHJ2ID0gRG9TdWJtaXQoYUV2ZW50KTsKKyAgICAgIC8vIERvbid0IHN1Ym1pdCBp
ZiB3ZSdyZSBpbiBhIHNhbmRib3hlZCBmcmFtZSBhbmQgaXQgZG9lc24ndCBoYXZlIAorICAgICAg
Ly8gJ2FsbG93LWZvcm1zJyBpbiB0aGUgdmFsdWUgb2YgaXRzIHNhbmRib3ggYXR0cmlidXRlCisg
ICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSBkb2MtPkdldFNhbmRib3hGbGFncygpOworICAg
ICAgCisgICAgICBpZiAoIShzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFH
U19TQU5EQk9YRUQpIHx8IAorICAgICAgICAgIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6
U0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NVQk1JVCkpCisgICAgICAgIHJ2ID0gRG9TdWJtaXQo
YUV2ZW50KTsKICAgICB9CiAgIH0KICAgcmV0dXJuIHJ2OwogfQogCiBuc3Jlc3VsdAogbnNIVE1M
Rm9ybUVsZW1lbnQ6OkRvUmVzZXQoKQogewpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNI
VE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTQzLDE2ICs0MywxOCBAQAogI2luY2x1ZGUgIm5zSURP
TUdldFNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJuc0drQXRvbXMuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgogI2luY2x1ZGUgIm5z
TWFwcGVkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIm5zRE9NRXJyb3IuaCIKICNpbmNsdWRlICJu
c1J1bGVEYXRhLmgiCiAjaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zRE9N
U2V0dGFibGVUb2tlbkxpc3QuaCIKKyNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKIGNs
YXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVu
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxl
bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1
bWVudAogewpAQCAtODQsMzAgKzg2LDM5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KTsKICAgTlNfSU1FVEhPRF8oYm9vbCkgSXNB
dHRyaWJ1dGVNYXBwZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CiAgIHZpcnR1
YWwgbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24o
KSBjb25zdDsKIAogICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUlu
Zm8sIG5zSU5vZGUgKiphUmVzdWx0KSBjb25zdDsKICAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyog
R2V0Q2xhc3NJbmZvKCk7CisgIAorICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVyU2V0QXR0cihQUklu
dDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhTm90aWZ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKK3Byb3RlY3RlZDoKKyAgbnNSZWZQdHI8bnNET01TZXR0YWJsZVRva2VuTGlzdD4g
IG1TYW5kYm94VG9rZW5MaXN0OwogfTsKIAogCiBOU19JTVBMX05TX05FV19IVE1MX0VMRU1FTlRf
Q0hFQ0tfUEFSU0VSKElGcmFtZSkKIAogCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojpuc0hUTUxJRnJh
bWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbVBhcnNlciBhRnJvbVBhcnNl
cikKICAgOiBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50KGFOb2RlSW5mbywgYUZyb21QYXJzZXIp
CiB7CiB9CiAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6On5uc0hUTUxJRnJhbWVFbGVtZW50KCkKIHsK
KyAgaWYgKG1TYW5kYm94VG9rZW5MaXN0KQorICAgIG1TYW5kYm94VG9rZW5MaXN0LT5Ecm9wUmVm
ZXJlbmNlKCk7CiB9CiAKIAogTlNfSU1QTF9BRERSRUZfSU5IRVJJVEVEKG5zSFRNTElGcmFtZUVs
ZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIE5TX0lNUExfUkVMRUFTRV9JTkhFUklURUQobnNIVE1M
SUZyYW1lRWxlbWVudCxuc0dlbmVyaWNFbGVtZW50KQogCiBET01DSV9OT0RFX0RBVEEoSFRNTElG
cmFtZUVsZW1lbnQsIG5zSFRNTElGcmFtZUVsZW1lbnQpCiAKQEAgLTE1MCwxNiArMTYxLDI4IEBA
IG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldENvbnRlbnRXaW5kb3cobnMKIH0KIAogTlNfSU1FVEhP
RElNUAogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U1ZHRG9jdW1lbnQobnNJRE9NRG9jdW1lbnQg
KiphUmVzdWx0KQogewogICByZXR1cm4gR2V0Q29udGVudERvY3VtZW50KGFSZXN1bHQpOwogfQog
CitOU19JTUVUSE9ESU1QCituc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRTYW5kYm94KG5zSURPTURP
TVNldHRhYmxlVG9rZW5MaXN0KiogYVNhbmRib3gpCit7CisgIGlmICghbVNhbmRib3hUb2tlbkxp
c3QpIHsKKyAgICBtU2FuZGJveFRva2VuTGlzdCA9IG5ldyBuc0RPTVNldHRhYmxlVG9rZW5MaXN0
KHRoaXMsIG5zR2tBdG9tczo6c2FuZGJveCk7CisgIH0KKyAKKyAgTlNfQUREUkVGKCphU2FuZGJv
eCA9IG1TYW5kYm94VG9rZW5MaXN0KTsKKyAKKyAgcmV0dXJuIE5TX09LOworfQorCiBib29sCiBu
c0hUTUxJRnJhbWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFW
YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVlJiBh
UmVzdWx0KQogewogICBpZiAoYU5hbWVzcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CiAg
ICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjptYXJnaW53aWR0aCkgewpAQCAtMTc4LDE2
ICsyMDEsMjAgQEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJbgogICAg
ICAgcmV0dXJuIFBhcnNlRnJhbWVib3JkZXJWYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0K
ICAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OnNjcm9sbGluZykgewogICAgICAgcmV0
dXJuIFBhcnNlU2Nyb2xsaW5nVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CiAgICAgaWYg
KGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjphbGlnbikgewogICAgICAgcmV0dXJuIFBhcnNlQWxp
Z25WYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KKyAgICBpZiAoYUF0dHJpYnV0ZSA9PSBu
c0drQXRvbXM6OnNhbmRib3gpIHsKKwkgIGFSZXN1bHQuUGFyc2VBdG9tQXJyYXkoYVZhbHVlKTsK
KyAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgfQogCiAgIHJldHVybiBuc0dlbmVyaWNIVE1M
RnJhbWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShhTmFtZXNwYWNlSUQsIGFBdHRyaWJ1dGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWUs
IGFSZXN1bHQpOwogfQogCiBzdGF0aWMgdm9pZAogTWFwQXR0cmlidXRlc0ludG9SdWxlKGNvbnN0
IG5zTWFwcGVkQXR0cmlidXRlcyogYUF0dHJpYnV0ZXMsCkBAIC0yNjgsOCArMjk1LDI4IEBAIG5z
SFRNTElGcmFtZUVsZW1lbnQ6OklzQXR0cmlidXRlTWFwcGVkKGMKIAogCiBuc01hcFJ1bGVUb0F0
dHJpYnV0ZXNGdW5jCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRBdHRyaWJ1dGVNYXBwaW5nRnVu
Y3Rpb24oKSBjb25zdAogewogICByZXR1cm4gJk1hcEF0dHJpYnV0ZXNJbnRvUnVsZTsKIH0KIAor
bnNyZXN1bHQKK25zSFRNTElGcmFtZUVsZW1lbnQ6OkFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1l
U3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNBU3RyaW5nKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBhTm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0gbnNHa0F0b21zOjpzYW5kYm94
ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgeworICAgIC8vIHBhcnNlIHRo
ZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBhbmQgaWYgd2UgaGF2ZSBhIGRv
Y3NoZWxsCisgICAgLy8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFwcHJvcHJpYXRlbHkKKyAgICBu
c0NPTVB0cjxuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdD4gc2FuZGJveDsKKyAgICAKKyAgICBu
c3Jlc3VsdCByZXN1bHQgPSBHZXRTYW5kYm94KGdldHRlcl9BZGRSZWZzKHNhbmRib3gpKTsKKyAg
ICAvLyBUT0RPIDogd2hhdCB0byBkbyBpZiB0aGlzIGZhaWxzID8gCisgICAgCisgICAgaWYgKG1G
cmFtZUxvYWRlcikKKyAgICAgIG1GcmFtZUxvYWRlci0+R2V0RXhpc3RpbmdEb2NTaGVsbCgpLT5T
ZXRTYW5kYm94RmxhZ3MobnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxh
Z3Moc2FuZGJveCkpOworICB9CisgIHJldHVybiBuc0dlbmVyaWNIVE1MRWxlbWVudDo6QWZ0ZXJT
ZXRBdHRyKGFOYW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYU5vdGlmeSk7Cit9CisKZGlmZiAtLWdpdCBhL2RvY3No
ZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCi0t
LSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0Rv
Y1NoZWxsLmNwcApAQCAtNzQ1LDE3ICs3NDUsMTggQEAgbnNEb2NTaGVsbDo6bnNEb2NTaGVsbCgp
OgogICAgIG1Jc0FwcFRhYihmYWxzZSksCiAgICAgbVVzZUdsb2JhbEhpc3RvcnkoZmFsc2UpLAog
ICAgIG1GaXJlZFVubG9hZEV2ZW50KGZhbHNlKSwKICAgICBtRU9ERm9yQ3VycmVudERvY3VtZW50
KGZhbHNlKSwKICAgICBtVVJJUmVzdWx0ZWRJbkRvY3VtZW50KGZhbHNlKSwKICAgICBtSXNCZWlu
Z0Rlc3Ryb3llZChmYWxzZSksCiAgICAgbUlzRXhlY3V0aW5nT25Mb2FkSGFuZGxlcihmYWxzZSks
CiAgICAgbUlzUHJpbnRpbmdPclBQKGZhbHNlKSwKLSAgICBtU2F2aW5nT2xkVmlld2VyKGZhbHNl
KQorICAgIG1TYXZpbmdPbGRWaWV3ZXIoZmFsc2UpLAorICAgIG1TYW5kYm94RmxhZ3MoMCkKICNp
ZmRlZiBERUJVRwogICAgICwgbUluRW5zdXJlU2NyaXB0RW52KGZhbHNlKQogI2VuZGlmCiB7CiAg
ICAgbUhpc3RvcnlJRCA9ICsrZ0RvY3NoZWxsSURDb3VudGVyOwogICAgIGlmIChnRG9jU2hlbGxD
b3VudCsrID09IDApIHsKICAgICAgICAgTlNfQVNTRVJUSU9OKHNVUklGaXh1cCA9PSBuc251bGws
CiAgICAgICAgICAgICAgICAgICAgICAiSHVoLCBzVVJJRml4dXAgbm90IG51bGwgaW4gZmlyc3Qg
bnNEb2NTaGVsbCBjdG9yISIpOwpAQCAtNDkxMCwxNiArNDkxMSwzMiBAQCBuc0RvY1NoZWxsOjpT
ZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6Okdl
dElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0FwcFRhYjsK
ICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpTZXRTYW5k
Ym94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgbVNhbmRib3hGbGFncyA9IGFT
YW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAorbnNEb2NT
aGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFncykKK3sKKyAgTlNf
RU5TVVJFX0FSR19QT0lOVEVSKGFTYW5kYm94RmxhZ3MpOworICAKKyAgKmFTYW5kYm94RmxhZ3Mg
PSBtU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKIG5z
RG9jU2hlbGw6OlNldFZpc2liaWxpdHkoYm9vbCBhVmlzaWJpbGl0eSkKIHsKICAgICBpZiAoIW1D
b250ZW50Vmlld2VyKQogICAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgaWYgKGFWaXNpYmlsaXR5
KSB7CiAgICAgICAgIG1Db250ZW50Vmlld2VyLT5TaG93KCk7CiAgICAgfQogICAgIGVsc2UgewpA
QCAtODg3OSwxOCArODg5NiwzMCBAQCBuc0RvY1NoZWxsOjpEb1VSSUxvYWQobnNJVVJJICogYVVS
SSwKICAgICAgICAgfQogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkKICAg
ICAgICAgaWYgKGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAgICAv
LyBSZWZlcnJlciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4KICAg
ICAgICAgICAgIGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChk
b19RdWVyeUludGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFu
bmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUpOworCW5zQ09NUHRy
PG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWwoZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKSk7
CisJCisgICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMgc2FuZGJveGVkLCBmb3JjZSB0aGUgcGFzc2Vk
IGluIG93bmVyICh3aGljaCBzaG91bGQgYmUgCisJLy8gYSBudWxsIHByaW5jaXBhbCkgdG8gYmUg
c2V0IG9uIHRoZSBjaGFubmVsLCBVTkxFU1MgdGhlIHNhbmRib3ggYWxsb3ctc2FtZS1kb21haW4g
ZmxhZyBpcyBhbHNvCisgICAgLy8gc2V0LiBJbiB0aGF0IGNhc2UsIGFsbG93IHRoZSBjb250ZW50
IHRvIGFzc3N1bWUgaXRzICJuYXR1cmFsIGRvbWFpbiIgYXMgaXQKKyAgICAvLyBub3JtYWxseSB3
b3VsZC4gCisgICAgaWYgKChtU2FuZGJveEZsYWdzICYgU0FOREJPWF9GTEFHU19TQU5EQk9YRUQp
ICYmIAorICAgICAgICAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9E
T01BSU4pICE9IFNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9ET01BSU4pIHsKKyAgICAgIG5zQ29u
dGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVS
SSwgdHJ1ZSwgdHJ1ZSk7CisgICAgfQorCQorICAgIGVsc2UgeworICAgICAgbnNDb250ZW50VXRp
bHM6OlNldFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVl
LCBmYWxzZSk7CisgICAgfQogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2NyaXB0
Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAgIGlmIChzY3JpcHRDaGFu
bmVsKSB7CiAgICAgICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0IGlm
IHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAgICAg
ICAgU2V0RXhlY3V0aW9uUG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFMKTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oIGIvZG9jc2hl
bGwvYmFzZS9uc0RvY1NoZWxsLmgKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKKysr
IGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKQEAgLTc4MCwxNiArNzgwLDE4IEBAIHByb3Rl
Y3RlZDoKICAgICAvLyBDcmVhdGUoKSBpcyBjYWxsZWQsIHRoZSB0eXBlIGlzIG5vdCBleHBlY3Rl
ZCB0byBjaGFuZ2UuCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUl0ZW1UeXBlOwog
CiAgICAgLy8gSW5kZXggaW50byB0aGUgU0hUcmFuc2FjdGlvbiBsaXN0LCBpbmRpY2F0aW5nIHRo
ZSBwcmV2aW91cyBhbmQgY3VycmVudAogICAgIC8vIHRyYW5zYWN0aW9uIGF0IHRoZSB0aW1lIHRo
YXQgdGhpcyBEb2NTaGVsbCBiZWdpbnMgdG8gbG9hZAogICAgIFBSSW50MzIgICAgICAgICAgICAg
ICAgICAgIG1QcmV2aW91c1RyYW5zSW5kZXg7CiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAg
ICAgbUxvYWRlZFRyYW5zSW5kZXg7CiAKKyAgICBQUlVpbnQzMiAgICAgICAgICAgICAgICAgICBt
U2FuZGJveEZsYWdzOworICAgIAogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1DcmVh
dGVkOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1N1YmZyYW1lczsKICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dQbHVnaW5zOwogICAgIGJvb2wgICAg
ICAgICAgICAgICAgICAgICAgIG1BbGxvd0phdmFzY3JpcHQ7CiAgICAgYm9vbCAgICAgICAgICAg
ICAgICAgICAgICAgbUFsbG93TWV0YVJlZGlyZWN0czsKICAgICBib29sICAgICAgICAgICAgICAg
ICAgICAgICBtQWxsb3dJbWFnZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFs
bG93RE5TUHJlZmV0Y2g7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93V2lu
ZG93Q29udHJvbDsKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsIGIv
ZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NT
aGVsbC5pZGwKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAgLTU0OCw5ICs1
NDgsNDQgQEAgaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKICAgICovCiAgIGF0
dHJpYnV0ZSBib29sZWFuIGlzQXBwVGFiOwogCiAgIC8qKgogICAgKiBDcmVhdGUgYSBuZXcgYWJv
dXQ6YmxhbmsgZG9jdW1lbnQgYW5kIGNvbnRlbnQgdmlld2VyLgogICAgKiBAcGFyYW0gYVByaW5j
aXBhbCB0aGUgcHJpbmNpcGFsIHRvIHVzZSBmb3IgdGhlIG5ldyBkb2N1bWVudC4KICAgICovCiAg
IHZvaWQgY3JlYXRlQWJvdXRCbGFua0NvbnRlbnRWaWV3ZXIoaW4gbnNJUHJpbmNpcGFsIGFQcmlu
Y2lwYWwpOworICAKKyAgLyoqIAorICAgKiBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9jc2hl
bGwuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSBvZiB0
aGUgCisgICAqIGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBp
ZiBleGlzdGVudC4gU2VlIHRoZSBIVE1MNSBzcGVjIGZvciBtb3JlIGRldGFpbHMuCisgICAqIFRo
ZXNlIGZsYWdzIG9uIHRoZSBkb2NzaGVsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRo
ZSBzYW5kYm94IGF0dHJpYnV0ZSwgd2hpY2ggaXMgbW9kaWZpYWJsZS4KKyAgICogVGhleSBhcmUg
b25seSB1c2VkIHdoZW4gbG9hZGluZyBuZXcgY29udGVudCwgc2FuZGJveCBmbGFncyBhcmUgYWxz
byBpbW11dGFibHkgc2V0IG9uIHRoZSBkb2N1bWVudAorICAgKiB3aGVuIGl0IGlzIGxvYWRlZC4g
VGhlIHNhbmRib3ggZmxhZ3Mgb2YgYSBkb2N1bWVudCBkZXBlbmQgb24gdGhlIHNhbmRib3ggZmxh
Z3Mgb24gaXRzIGRvY3NoZWxsCisgICAqIGFuZCBvZiBpdHMgcGFyZW50IGRvY3VtZW50LCBpZiBh
bnkuIAorICAgKi8gICAKKyAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdzOwor
ICAKKyAgLyoqIAorICAgKiBUaGUgY29udGVudCBpcyBzYW5kYm94ZWQgYW5kIGlzb2xhdGVkIHdp
dGggYSBudWxsIHByaW5jaXBhbC4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJP
WF9GTEFHU19TQU5EQk9YRUQgID0gMHgxOyAKKyAgCisgIC8qKgorICAgKiBUaGUgY29udGVudCBp
cyBzYW5kYm94ZWQgYW5kIGlzb2xhdGVkIHdpdGggbnVsbCBwcmluY2lwYWwgb3JpZ2luYWxseSBi
dXQgdG9wIG5hdmlnYXRpb24gaXMgYWxsb3dlZC4gCisgICAqLworICBjb25zdCB1bnNpZ25lZCBs
b25nIFNBTkRCT1hfRkxBR1NfQUxMT1dfVE9QX05BVklHQVRJT04gPSAweDI7CisgICAKKyAgLyoq
CisgICAqIFRoZSBjb250ZW50IGlzIHNhbmRib3hlZCBidXQgYWxsb3dlZCB0byBoYXZlIGl0cyBu
YXR1cmFsIGRvbWFpbi4gCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hfRkxB
R1NfQUxMT1dfU0FNRV9ET01BSU4gPSAweDQ7CisgIAorICAvKioKKyAgICogVGhlIGNvbnRlbnQg
aXMgc2FuZGJveGVkIGJ1dCBmb3JtIHN1Ym1pc3Npb24gaXMgYWxsb3dlZAorICAgKi8KKyAgY29u
c3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YX0ZMQUdTX0FMTE9XX0ZPUk1fU1VCTUlUID0gMHg4OyAK
KyAgIAorICAvKioKKyAgICogVGhlIGNvbnRlbnQgaXMgc2FuZGJveGVkIGJ1dCBzY3JpcHQgZXhl
Y3V0aW9uIGlzIGFsbG93ZWQKKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWF9G
TEFHU19BTExPV19TQ1JJUFRTID0gMHgxMDsgCiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFj
ZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1s
L25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1sL25z
SURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAorKysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURP
TUhUTUxJRnJhbWVFbGVtZW50LmlkbApAQCAtMzMsMTYgKzMzLDE3IEBACiAgKiBkZWNpc2lvbiBi
eSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhl
IG5vdGljZQogICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0
aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKICAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBh
IHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICAqIHRo
ZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCiAgKgog
ICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KIAogI2luY2x1ZGUgIm5zSURPTUhU
TUxFbGVtZW50LmlkbCIKKyNpbmNsdWRlICJuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdC5pZGwi
CiAKIC8qKgogICogVGhlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IGludGVyZmFjZSBpcyB0aGUg
aW50ZXJmYWNlIHRvIGEgW1hdSFRNTAogICogaWZyYW1lIGVsZW1lbnQuCiAgKgogICogVGhpcyBp
bnRlcmZhY2UgaXMgdHJ5aW5nIHRvIGZvbGxvdyB0aGUgRE9NIExldmVsIDIgSFRNTCBzcGVjaWZp
Y2F0aW9uOgogICogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC8KICAqCkBA
IC02MSwxNiArNjIsMTggQEAgaW50ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDogbnNJ
RAogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5XaWR0aDsKICAg
ICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFtZTsKICAgICAgICAgICAgYXR0
cmlidXRlIERPTVN0cmluZyAgICAgICAgc2Nyb2xsaW5nOwogICAgICAgICAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nICAgICAgICBzcmM7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIHdpZHRoOwogICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICByZWFkb25seSBh
dHRyaWJ1dGUgbnNJRE9NRG9jdW1lbnQgICBjb250ZW50RG9jdW1lbnQ7CiAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBuc0lET01XaW5kb3cgICAgIGNvbnRlbnRXaW5kb3c7Ci0KKyAgCisgIC8vIEhUTUw1
IHNhbmRib3ggYXR0cmlidXRlCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01ET01TZXR0YWJs
ZVRva2VuTGlzdCBzYW5kYm94OwogCiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBpZnJh
bWUgZWxlbWVudHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0byBi
ZSBwcmVzZW50CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3ViIGRv
Y3VtZW50IHRvIGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRwczov
L3dpa2kubW96aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkKICAg
ICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVuOwog
fTsKZGlmZiAtLWdpdCBhL2ltYWdlL3NyYy9pbWdMb2FkZXIuY3BwIGIvaW1hZ2Uvc3JjL2ltZ0xv
YWRlci5jcHAKLS0tIGEvaW1hZ2Uvc3JjL2ltZ0xvYWRlci5jcHAKKysrIGIvaW1hZ2Uvc3JjL2lt
Z0xvYWRlci5jcHAKQEAgLTU1MywxNyArNTUzLDE3IEBAIHN0YXRpYyBuc3Jlc3VsdCBOZXdJbWFn
ZUNoYW5uZWwobnNJQ2hhbm4KIAogICAgIGlmIChhTG9hZEZsYWdzICYgbnNJUmVxdWVzdDo6TE9B
RF9CQUNLR1JPVU5EKQogICAgICAgKytwcmlvcml0eTsgLy8gZnVydGhlciByZWR1Y2UgcHJpb3Jp
dHkgZm9yIGJhY2tncm91bmQgbG9hZHMKIAogICAgIHAtPkFkanVzdFByaW9yaXR5KHByaW9yaXR5
KTsKICAgfQogCiAgIGJvb2wgc2V0T3duZXIgPSBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVs
T3duZXIoYUxvYWRpbmdQcmluY2lwYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqYVJlc3VsdCwgYVVSSSwgZmFsc2UpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFSZXN1bHQsIGFV
UkksIGZhbHNlLCBmYWxzZSk7CiAgICphRm9yY2VQcmluY2lwYWxDaGVja0ZvckNhY2hlRW50cnkg
PSBzZXRPd25lcjsKIAogICByZXR1cm4gTlNfT0s7CiB9CiAKIHN0YXRpYyBQUlVpbnQzMiBTZWNv
bmRzRnJvbVBSVGltZShQUlRpbWUgcHJUaW1lKQogewogICByZXR1cm4gUFJVaW50MzIoUFJJbnQ2
NChwclRpbWUpIC8gUFJJbnQ2NChQUl9VU0VDX1BFUl9TRUMpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>578433</attachid>
            <date>2011-12-01 16:08:53 -0800</date>
            <delta_ts>2011-12-02 18:42:22 -0800</delta_ts>
            <desc>WIP - experimental prototype</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>34142</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZDJlMzM5YjQ3ZjBmZmEyNTZiNDFjNjZlZjk4
MWIwNzEyNmNjOGJlNQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtODEsMTYgKzgxLDE3IEBAIHN0YXRpYyBmcF9leGNlcHRfdCBv
bGRtYXNrID0gZnBzZXRtYXNrKH4KICNpbmNsdWRlICJuc0lET01Ob2RlLmgiCiAjaW5jbHVkZSAi
bnNIdG1sNVBhcnNlci5oIgogI2luY2x1ZGUgIm5zSUZyYWdtZW50Q29udGVudFNpbmsuaCIKICNp
bmNsdWRlICJuc01hdGhVdGlscy5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9BdXRvUmVzdG9yZS5o
IgogI2luY2x1ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96aWxsYS9U
aW1lU3RhbXAuaCIKKyNpbmNsdWRlICJuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdC5oIgogCiBz
dHJ1Y3QgbnNOYXRpdmVLZXlFdmVudDsgLy8gRG9uJ3QgaW5jbHVkZSBuc0lOYXRpdmVLZXlCaW5k
aW5ncy5oIGhlcmU6IGl0IHdpbGwgZm9yY2Ugc3RyYW5nZSBjb21waWxhdGlvbiBlcnJvciEKIAog
Y2xhc3MgbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9yeTsKIGNsYXNzIG5zSVhQQ29ubmVjdDsKIGNs
YXNzIG5zSUNvbnRlbnQ7CiBjbGFzcyBuc0lET01LZXlFdmVudDsKIGNsYXNzIG5zSURvY3VtZW50
OwpAQCAtMTgyMywyNSArMTgyNCwyNyBAQCBwdWJsaWM6CiAgICAqIGZyb20gdGhlIGRvY3VtZW50
IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQgVVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsKIAogICAvKioKICAgICog
U2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRoZSBnaXZlbiBjaGFubmVs
LCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBvZiBhQ2hhbm5lbC4gIGFQ
cmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JBYm91dEJsYW5rIGlzIHRy
dWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAg
b24gaXQuCi0gICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LiBJZiBhRm9yY2VP
d25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQgb24gdGhlIGNoYW5uZWws
IGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAorICAgKiBmcm9tIHRoZSBj
aGFubmVsLiAKICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRoZSBwcmluY2lwYWwg
d2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwuCiAgICAqLwogICBz
dGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNp
cGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5l
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIpOwogCiAgIHN0
YXRpYyBuc3Jlc3VsdCBCdG9hKGNvbnN0IG5zQVN0cmluZyYgYUJpbmFyeURhdGEsCiAgICAgICAg
ICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUFzY2lpQmFzZTY0U3RyaW5nKTsKIAogICBzdGF0
aWMgbnNyZXN1bHQgQXRvYihjb25zdCBuc0FTdHJpbmcmIGFBc2NpaVN0cmluZywKICAgICAgICAg
ICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSk7CiAKICAgLyoqCkBAIC0xODUw
LDE2ICsxODUzLDI1IEBAIHB1YmxpYzoKICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFr
ZSBzdXJlIGF1dG9jb21wbGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0
eXBlLgogICAgKgogICAgKiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNr
LiBOT1RFOiBhSW5wdXQgY2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBp
bnB1dCBlbGVtZW50IGhhcyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBi
b29sIElzQXV0b2NvbXBsZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQp
OwogCisgIC8qKgorICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3gg
YXR0cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICAgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBj
b252ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxseSAKKyAgICoKKyAg
ICogQHBhcmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUg
YXMgYW4gbnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QKKyAgICogQHJldHVybiAJCQl0aGUgc2V0
IG9mIGZsYWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIgUGFyc2VTYW5kYm94QXR0cmlidXRl
VG9GbGFncyhuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCAqIGFBdHRyaWJ1dGUpOworICAKIHBy
aXZhdGU6CiAgIHN0YXRpYyBib29sIEluaXRpYWxpemVFdmVudFRhYmxlKCk7CiAKICAgc3RhdGlj
IG5zcmVzdWx0IEVuc3VyZVN0cmluZ0J1bmRsZShQcm9wZXJ0aWVzRmlsZSBhRmlsZSk7CiAKICAg
c3RhdGljIG5zSURPTVNjcmlwdE9iamVjdEZhY3RvcnkgKkdldERPTVNjcmlwdE9iamVjdEZhY3Rv
cnkoKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgSG9sZFNjcmlwdE9iamVjdChQUlVpbnQzMiBhTGFu
Z0lELCB2b2lkKiBhT2JqZWN0KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJ
RG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaAotLS0gYS9jb250
ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysrIGIvY29udGVudC9iYXNlL3B1YmxpYy9u
c0lEb2N1bWVudC5oCkBAIC00NTcsMTYgKzQ1NywzNSBAQCBwdWJsaWM6CiAgICAqIEBzZWUgbnNC
aWRpVXRpbHMuaAogICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9ucyhQUlVpbnQzMiBhQmlkaU9w
dGlvbnMpCiAgIHsKICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9wdGlvbnM7CiAgIH0KICAgCiAg
IC8qKgorICAgKiBTZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQuIFRoaXMg
c2hvdWxkIG9ubHkgaGFwcGVuIGF0IAorICAgKiBhdCBkb2N1bWVudCBsb2FkLCB0aGUgZmxhZ3Mg
YXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgYXQgbG9hZCB0aW1lLgorICAgKiBAIHNlZSBu
c0RvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzCisgICAqLworICB2b2lkIFNldFNh
bmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQorICB7CisgICAgbVNhbmRib3hGbGFn
cyA9IGFTYW5kYm94RmxhZ3M7CisgIH0KKyAgCisgIC8qKiAKKyAgICogR2V0IHRoZSBzYW5kb3gg
ZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQKKyAgICogQHNlZSBuc0RvY1NoZWxsLmlkbCBmb3IgdGhl
IHBvc3NpYmxlIGZsYWdzCisgICAqLworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKSBjb25z
dAorICB7CisgICAgcmV0dXJuIG1TYW5kYm94RmxhZ3M7CisgIH0KKyAgIAorICAvKioKICAgICog
QWNjZXNzIEhUVFAgaGVhZGVyIGRhdGEgKHRoaXMgbWF5IGFsc28gZ2V0IHNldCBmcm9tIG90aGVy
CiAgICAqIHNvdXJjZXMsIGxpa2UgSFRNTCBNRVRBIHRhZ3MpLgogICAgKi8KICAgdmlydHVhbCB2
b2lkIEdldEhlYWRlckRhdGEobnNJQXRvbSogYUhlYWRlckZpZWxkLCBuc0FTdHJpbmcmIGFEYXRh
KSBjb25zdCA9IDA7CiAgIHZpcnR1YWwgdm9pZCBTZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFoZWFk
ZXJGaWVsZCwgY29uc3QgbnNBU3RyaW5nJiBhRGF0YSkgPSAwOwogCiAgIC8qKgogICAgKiBDcmVh
dGUgYSBuZXcgcHJlc2VudGF0aW9uIHNoZWxsIHRoYXQgd2lsbCB1c2UgYUNvbnRleHQgZm9yIGl0
cwpAQCAtMTc2MCwxNiArMTc3OSwyMSBAQCBwcm90ZWN0ZWQ6CiAgIC8vIElmIG1Jc1N0YXRpY0Rv
Y3VtZW50IGlzIHRydWUsIG1PcmlnaW5hbERvY3VtZW50IHBvaW50cyB0byB0aGUgb3JpZ2luYWwK
ICAgLy8gZG9jdW1lbnQuCiAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBtT3JpZ2luYWxEb2N1bWVu
dDsKIAogICAvLyBUaGUgYmlkaSBvcHRpb25zIGZvciB0aGlzIGRvY3VtZW50LiAgV2hhdCB0aGlz
IGJpdGZpZWxkIG1lYW5zIGlzCiAgIC8vIGRlZmluZWQgaW4gbnNCaWRpVXRpbHMuaAogICBQUlVp
bnQzMiBtQmlkaU9wdGlvbnM7CiAKKyAgLy8gVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3Vt
ZW50LiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2Yg
dGhlIAorICAvLyBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwg
aWYgZXhpc3RlbnQuIFRoZXNlIGFyZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvL2FyZSBpbW11
dGFibGUgLSBzZWUgbnNEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJsZSBmbGFncyAgIAorICBQ
UlVpbnQzMiBtU2FuZGJveEZsYWdzOworICAKICAgbnNDU3RyaW5nIG1Db250ZW50TGFuZ3VhZ2U7
CiBwcml2YXRlOgogICBuc0NTdHJpbmcgbUNvbnRlbnRUeXBlOwogcHJvdGVjdGVkOgogCiAgIC8v
IFRoZSBkb2N1bWVudCdzIHNlY3VyaXR5IGluZm8KICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IG1T
ZWN1cml0eUluZm87CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRp
bHMuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKLS0tIGEvY29udGVu
dC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0Nv
bnRlbnRVdGlscy5jcHAKQEAgLTY4NywxNyArNjg3LDY3IEBAIG5zQ29udGVudFV0aWxzOjpHZXRQ
YXJzZXJTZXJ2aWNlKCkKICAgICBuc3Jlc3VsdCBydiA9IENhbGxHZXRTZXJ2aWNlKGtQYXJzZXJT
ZXJ2aWNlQ0lELCAmc1BhcnNlclNlcnZpY2UpOwogICAgIGlmIChOU19GQUlMRUQocnYpKSB7CiAg
ICAgICBzUGFyc2VyU2VydmljZSA9IG5zbnVsbDsKICAgICB9CiAgIH0KIAogICByZXR1cm4gc1Bh
cnNlclNlcnZpY2U7CiB9Ci0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMg
YSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVjdGl2
ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5Cisg
KgorICogQHBhcmFtIGFBdHRyaWJ1dGUgICAgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJp
YnV0ZSBhcyBhbiBuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdAorICogQHJldHVybiAJCQkgICAg
dGhlIHNldCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRpbHM6OlBhcnNlU2Fu
ZGJveEF0dHJpYnV0ZVRvRmxhZ3MobnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QgKiBhQXR0cmli
dXRlKQoreworICAvLyBUT0RPOiBob3cgdG8gaGFuZGxlIGVycm9ycyBpbiB0aGlzIGZ1bmN0aW9u
ID8gaWYgd2UncmUgaGVyZSwgc29tZXRoaW5nIGhhcyBhIHNhbmRib3gKKyAgLy8gYXR0cmlidXRl
IHNldCBhbmQgZXhwZWN0cyBjb250ZW50IHRvIGJlIHNhbmRib3hlZC4uLiBwZXJoYXBzIGNvbnNp
ZGVyIGZhaWxpbmcgY2xvc2VkID8/CisKKyAgUFJVaW50MzIgb3V0ID0gMDsKKyAgCisgIC8vIGlm
IHRoZXJlJ3MgYSBzYW5kYm94IGF0dHJpYnV0ZSBhdCBhbGwsIHNldCBTQU5EQk9YX0ZMQUdTX1NB
TkRCT1hFRAorICBvdXQgfD0gbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfU0FOREJPWEVEOwor
ICAKKyAgYm9vbCBhbGxvd2VkID0gZmFsc2U7CisgIAorICAvLyBUT0RPOiBzaG91bGQgaSB0cnkg
dG8gdXNlIGF0b21zIGV2ZW4gdGhvdWdoIENvbnRhaW5zIHdhbnRzIGEgc3RyaW5nID8gCisgIG5z
U3RyaW5nIGFsbG93U2NyaXB0cywgYWxsb3dTYW1lT3JpZ2luLCBhbGxvd0Zvcm1zOworICAKKyAg
bnNyZXN1bHQgcmVzdWx0ID0gbnNHa0F0b21zOjphbGxvd3NjcmlwdHMtPlNjcmlwdGFibGVUb1N0
cmluZyhhbGxvd1NjcmlwdHMpOworICAKKyAgcmVzdWx0ID0gbnNHa0F0b21zOjphbGxvd3NhbWVv
cmlnaW4tPlNjcmlwdGFibGVUb1N0cmluZyhhbGxvd1NhbWVPcmlnaW4pOworICAKKyAgcmVzdWx0
ID0gbnNHa0F0b21zOjphbGxvd2Zvcm1zLT5TY3JpcHRhYmxlVG9TdHJpbmcoYWxsb3dGb3Jtcyk7
CisgIAorICByZXN1bHQgPSBhQXR0cmlidXRlLT5Db250YWlucyhhbGxvd1NjcmlwdHMsICZhbGxv
d2VkKTsKKyAgCisgIGlmIChhbGxvd2VkKQorICAgIG91dCB8PSBuc0lEb2NTaGVsbDo6U0FOREJP
WF9GTEFHU19BTExPV19TQ1JJUFRTOworICAKKyAgYWxsb3dlZCA9IGZhbHNlOworICByZXN1bHQg
PSBhQXR0cmlidXRlLT5Db250YWlucyhhbGxvd1NhbWVPcmlnaW4sICZhbGxvd2VkKTsKKyAgCisg
IGlmIChhbGxvd2VkKQorICAgIG91dCB8PSBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExP
V19TQU1FX0RPTUFJTjsKKworICBhbGxvd2VkID0gZmFsc2U7CisgIHJlc3VsdCA9IGFBdHRyaWJ1
dGUtPkNvbnRhaW5zKGFsbG93Rm9ybXMsICZhbGxvd2VkKTsKKyAgCisgIGlmIChhbGxvd2VkKQor
ICAgIG91dCB8PSBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NVQk1JVDsK
KyAgICAKKyAgLy8gVE9ETzogYWRkIHRoZSByZXN0IG9mIHRoZSBwYXJzaW5nIGhlcmUKKyAgCisg
IHJldHVybiBvdXQ7Cit9CisgIAogI2lmZGVmIE1PWl9YVEYKIG5zSVhURlNlcnZpY2UqCiBuc0Nv
bnRlbnRVdGlsczo6R2V0WFRGU2VydmljZSgpCiB7CiAgIGlmICghc1hURlNlcnZpY2UpIHsKICAg
ICBuc3Jlc3VsdCBydiA9IENhbGxHZXRTZXJ2aWNlKGtYVEZTZXJ2aWNlQ0lELCAmc1hURlNlcnZp
Y2UpOwogICAgIGlmIChOU19GQUlMRUQocnYpKSB7CiAgICAgICBzWFRGU2VydmljZSA9IG5zbnVs
bDsKQEAgLTU3NjQsMTcgKzU4MTQsMTggQEAgbnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2Vj
dXJpdHlDb250ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAog
Ly8gc3RhdGljCiBib29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJp
bmNpcGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhU2V0VXBGb3JBYm91dEJsYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFGb3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRo
ZSBjaGFubmVsLCBidXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRl
IHRoZWlyIG93biBzZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdy
b25nIHRoYXQgdGhlIG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAg
IHN1cHBsaWVkKSB1bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6
YmxhbmsuCiAgIC8vIFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxs
ZXJzIGZvciB3aGF0IG93bmVycwpAQCAtNTc4MiwyMyArNTgzMywyNyBAQCBuc0NvbnRlbnRVdGls
czo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NT
aGVsbDo6TG9hZFVSSSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5n
IHRoZSBvd25lciBpZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAg
ICAgdmVyeSB3cm9uZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMg
dGhhdAogICAvLyAgICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQh
CiAgIC8vCiAgIC8vICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdo
ZW4gdGhleSBhcmUgY3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3
b3VsZCBiZSBiYWQhKQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3du
ZXIgd2lsbCBiZSBzZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRl
IGl0cyBvd24gc2VjdXJpdHkgY29udGVudC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZS
QU1FCisgIC8vIHNhbmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwg
KGFuZCBpdHMgZG9jdW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNp
cGFsCiAgIGJvb2wgaW5oZXJpdDsKICAgLy8gV2UgZXhwZWN0IFVSSUluaGVyaXRzU2VjdXJpdHlD
b250ZXh0IHRvIHJldHVybiBzdWNjZXNzIGZvciBhbgogICAvLyBhYm91dDpibGFuayBVUkksIHNv
IGRvbid0IGNhbGwgTlNfSXNBYm91dEJsYW5rKCkgaWYgdGhpcyBjYWxsIGZhaWxzLgogICAvLyBU
aGlzIGNvbmRpdGlvbiBuZWVkcyB0byBtYXRjaCB0aGUgb25lIGluIG5zRG9jU2hlbGw6OkludGVy
bmFsTG9hZCB3aGVyZQogICAvLyB3ZSdyZSBjaGVja2luZyBmb3IgdGhpbmdzIHRoYXQgd2lsbCB1
c2UgdGhlIG93bmVyLgotICBpZiAoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250
ZXh0KGFVUkksICZpbmhlcml0KSkgJiYKLSAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91
dEJsYW5rICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSB7CisgIGlmIChhRm9yY2VPd25lciB8
fCAoKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJp
dCkpICYmCisgICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fi
b3V0QmxhbmsoYVVSSSkpKSkpKSB7CiAgICAgYUNoYW5uZWwtPlNldE93bmVyKGFMb2FkaW5nUHJp
bmNpcGFsKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8vCiAgIC8vIGZpbGU6IHVyaSBz
cGVjaWFsLWNhc2luZwogICAvLwogICAvLyBJZiB0aGlzIGlzIGEgZmlsZTogbG9hZCBvcGVuZWQg
ZnJvbSBhbm90aGVyIGZpbGU6IHRoZW4gaXQgbWF5IG5lZWQKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
YmFzZS9zcmMvbnNEb2N1bWVudC5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3Bw
Ci0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9iYXNl
L3NyYy9uc0RvY3VtZW50LmNwcApAQCAtMjM4NCwxNiArMjM4NCwyNSBAQCBuc0RvY3VtZW50OjpT
dGFydERvY3VtZW50TG9hZChjb25zdCBjaGFyCiAgICAgRmluZENoYXJJblJlYWRhYmxlKCc7Jywg
c2VtaWNvbG9uLCBlbmQpOwogICAgIFNldENvbnRlbnRUeXBlSW50ZXJuYWwoU3Vic3RyaW5nKHN0
YXJ0LCBzZW1pY29sb24pKTsKICAgfQogCiAgIFJldHJpZXZlUmVsZXZhbnRIZWFkZXJzKGFDaGFu
bmVsKTsKIAogICBtQ2hhbm5lbCA9IGFDaGFubmVsOwogCisgIC8vIGlmIHRoaXMgZG9jdW1lbnQg
aXMgYmVpbmcgbG9hZGVkIGJ5IGEgZG9jc2hlbGwsIGNvcHkgaXRzIHNhbmRib3ggZmxhZ3MKKyAg
Ly8gdG8gdGhlIGRvY3VtZW50LiBUaGVzZSBhcmUgaW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBo
ZXJlLgorICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFj
ZShhQ29udGFpbmVyKTsKKyAgCisgIGlmIChkb2NTaGVsbCkgeworICAgICBuc3Jlc3VsdCBydiA9
IGRvY1NoZWxsLT5HZXRTYW5kYm94RmxhZ3MoJm1TYW5kYm94RmxhZ3MpOworCSBOU19FTlNVUkVf
U1VDQ0VTUyhydiwgcnYpOworICB9CisgIAogICBuc3Jlc3VsdCBydiA9IEluaXRDU1AoKTsKICAg
TlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVz
dWx0CiBuc0RvY3VtZW50OjpJbml0Q1NQKCkKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMv
bnNEb2N1bWVudC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmgKLS0tIGEvY29udGVu
dC9iYXNlL3NyYy9uc0RvY3VtZW50LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50
LmgKQEAgLTEyODAsMTcgKzEyODAsMTcgQEAgcHJpdmF0ZToKICAgbnNDU3RyaW5nIG1TY3JvbGxU
b1JlZjsKICAgUFJVaW50OCBtU2Nyb2xsZWRUb1JlZkFscmVhZHkgOiAxOwogICBQUlVpbnQ4IG1D
aGFuZ2VTY3JvbGxQb3NXaGVuU2Nyb2xsaW5nVG9SZWYgOiAxOwogCiAgIC8vIFRyYWNraW5nIGZv
ciBpbWFnZXMgaW4gdGhlIGRvY3VtZW50LgogICBuc0RhdGFIYXNodGFibGU8IG5zUHRySGFzaEtl
eTxpbWdJUmVxdWVzdD4sIFBSVWludDMyPiBtSW1hZ2VUcmFja2VyOwogCiAgIFZpc2liaWxpdHlT
dGF0ZSBtVmlzaWJpbGl0eVN0YXRlOwotCisgIAogI2lmZGVmIERFQlVHCiBwcm90ZWN0ZWQ6CiAg
IGJvb2wgbVdpbGxSZXBhcmVudDsKICNlbmRpZgogfTsKIAogI2RlZmluZSBOU19ET0NVTUVOVF9J
TlRFUkZBQ0VfVEFCTEVfQkVHSU4oX2NsYXNzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICBOU19OT0RFX09GRlNFVF9BTkRfSU5URVJGQUNFX1RBQkxFX0JFR0lOKF9jbGFzcykgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9u
c0ZyYW1lTG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKLS0t
IGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAorKysgYi9jb250ZW50L2Jhc2Uv
c3JjL25zRnJhbWVMb2FkZXIuY3BwCkBAIC00NjYsMjAgKzQ2NiwxMTQgQEAgbnNGcmFtZUxvYWRl
cjo6UmVhbGx5U3RhcnRMb2FkaW5nSW50ZXJuYQogICAvLyBKdXN0IHRvIGJlIHNhZmUsIHJlY2hl
Y2sgdXJpLgogICBydiA9IENoZWNrVVJJTG9hZChtVVJJVG9Mb2FkKTsKICAgTlNfRU5TVVJFX1NV
Q0NFU1MocnYsIHJ2KTsKIAogICBuc0NPTVB0cjxuc0lEb2NTaGVsbExvYWRJbmZvPiBsb2FkSW5m
bzsKICAgbURvY1NoZWxsLT5DcmVhdGVMb2FkSW5mbyhnZXR0ZXJfQWRkUmVmcyhsb2FkSW5mbykp
OwogICBOU19FTlNVUkVfVFJVRShsb2FkSW5mbywgTlNfRVJST1JfRkFJTFVSRSk7CiAKLSAgLy8g
V2UnbGwgdXNlIG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZSBkb2N1bWVudCBsb2FkZWQg
aW5zaWRlIHVzLiAgVGhpcwotICAvLyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvIHByZXZl
bnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbgotICAvLyBzdWJmcmFtZXMhCi0g
IGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOworICBu
c1N0cmluZyBzYW5kYm94QXR0cjsgIAorICBQUlVpbnQzMiBwYXJlbnRTYW5kYm94RmxhZ3MgPSAw
OworCisgIC8vIGdldCB0aGUgcGFyZW50J3Mgc2FuZGJveCBmbGFncywgdGhleSdyZSBuZWVkZWQg
dG8gZGV0ZXJtaW5lIGlmIHRoZQorICAvLyBmcmFtZSBiZWluZyBsb2FkZWQgYmVsb3cgbmVlZHMg
dG8gYmUgc2FuZGJveGVkCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHBhcmVudERv
Y1NoZWxsSXRlbTsKKyAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gY3VyRG9jU2hlbGxJ
dGVtKGRvX1F1ZXJ5SW50ZXJmYWNlKG1Eb2NTaGVsbCkpOworICAKKyAgaWYgKE5TX1NVQ0NFRURF
RChjdXJEb2NTaGVsbEl0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJlbnREb2NTaGVs
bEl0ZW0pKSkpIHsKKyAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gcGFyZW50RG9jID0gZG9fR2V0
SW50ZXJmYWNlKHBhcmVudERvY1NoZWxsSXRlbSk7CisgICAgCisgICAgaWYgKHBhcmVudERvYykg
eworICAgICAgcGFyZW50U2FuZGJveEZsYWdzID0gcGFyZW50RG9jLT5HZXRTYW5kYm94RmxhZ3Mo
KTsKKyAgICB9CisgIH0gIAorCisgIC8vIGlzIHRoaXMgYW4gPGlmcmFtZT4gd2l0aCBhIHNhbmRi
b3ggYXR0cmlidXRlIG9yIGEgZnJhbWUgd2hvc2UgcGFyZW50CisgIC8vIGlzIHNhbmRib3hlZCA/
ICAKKyAgaWYgKG1Pd25lckNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6OmlmcmFtZSkgJiYgCisg
ICAgICAocGFyZW50U2FuZGJveEZsYWdzIHx8IG1Pd25lckNvbnRlbnQtPkdldEF0dHIoa05hbWVT
cGFjZUlEX05vbmUsIG5zR2tBdG9tczo6c2FuZGJveCwgc2FuZGJveEF0dHIpKSkgeworICAgIFBS
VWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgIAorICAgIG5zQ09NUHRyPG5zSURPTUhUTUxJRnJh
bWVFbGVtZW50PiBpZnJhbWUgPSBkb19RdWVyeUludGVyZmFjZShtT3duZXJDb250ZW50KTsKKyAg
CisgICAgaWYgKGlmcmFtZSkgeworICAgICAgbnNDT01QdHI8bnNJRE9NRE9NU2V0dGFibGVUb2tl
bkxpc3Q+IHNhbmRib3g7CisgICAgCisgICAgICBuc3Jlc3VsdCByZXN1bHQgPSBpZnJhbWUtPkdl
dFNhbmRib3goZ2V0dGVyX0FkZFJlZnMoc2FuZGJveCkpOworICAgICAgLy8gVE9ETyA6IHdoYXQg
dG8gZG8gaWYgdGhpcyBmYWlscyA/IChzZWUgYmVsb3cgYWxzbykgCisgICAgCisgICAgICBzYW5k
Ym94RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhz
YW5kYm94KTsKKyAgICAgIC8vIFRPRE86IHdoYXQgdG8gZG8gaWYgdGhpcyBmYWlscyA/IHRoZSBj
b250ZW50IHdhcyBpbnRlbmRlZCB0byBiZSBzYW5kYm94ZWQKKyAgICAgIC8vIGFuZCBpdCBtYXkg
bm90IGJlIC0gbWF5YmUgZmFpbCBjbG9zZWQgKGFsbCByZXN0cmljdGlvbnMpID8/PyAKKyAgICB9
CisgICAgIAorICAgIGlmIChwYXJlbnRTYW5kYm94RmxhZ3MpIHsgCisgICAgICAvLyBkbyB0aGUg
aW50ZXJzZWN0aW9uIHdpdGggdGhlIGN1cnJlbnQgZmxhZ3MgaW4gdGhlIGRvY3NoZWxsIQorICAg
ICAgCisgICAgICAvLyBUT0RPOiBwcm9iYWJseSB3YW50IHRvIG1ha2UgdGhpcyBhIGZ1bmN0aW9u
IGluIG5zQ29udGVudFV0aWxzIAorICAgICAgLy8gdGhpcyBsb2dpYyB3aWxsIGxpa2VseSBiZSBu
ZWVkZWQgZWxzZXdoZXJlIChlLmcuIENTUCBzYW5kYm94IGludGVyc2VjdGlvbikgCisKKyAgICAg
IC8vIGlmIHBhcmVudCBpcyBzYW5kYm94ZWQsIGN1cnJlbnQgZG9jc2hlbGwgaXMgc2FuZGJveGVk
CisgICAgICBzYW5kYm94RmxhZ3MgfD0gbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfU0FOREJP
WEVEOworICAKKyAgICAgIC8vIGlmIGN1cnJlbnQgZG9jc2hlbGwgaGFzIGFsbG93LXNhbWUtZG9t
YWluIGJ1dCBwYXJlbnQgZG9lcyBub3QsCisgICAgICAvLyBjbGVhciBhbGxvdy1zYW1lLWRvbWFp
bgorICAgICAgaWYgKChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19B
TExPV19TQU1FX0RPTUFJTikgJiYKKyAgICAgICAgICAhKHBhcmVudFNhbmRib3hGbGFncyAmIG5z
SURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1NBTUVfRE9NQUlOKSkKKyAgICAgICAgc2Fu
ZGJveEZsYWdzIHw9IH5uc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19TQU1FX0RPTUFJ
TjsKKyAgICAgIAorICAgICAgLy8gaWYgY3VycmVudCBkb2NzaGVsbCBoYXMgYWxsb3ctc2NyaXB0
cyBidXQgcGFyZW50IGRvZXMgbm90LAorICAgICAgLy8gY2xlYXIgYWxsb3ctc2NyaXB0cworICAg
ICAgaWYgKChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19T
Q1JJUFRTKSAmJgorICAgICAgICAgICEocGFyZW50U2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6
OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0NSSVBUUykpCisgICAgICAgIHNhbmRib3hGbGFncyB8PSB+
bnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0NSSVBUUzsKKyAgICAgIAorICAgICAg
IC8vIGlmIGN1cnJlbnQgZG9jc2hlbGwgaGFzIGFsbG93LXRvcC1uYXZpZ2F0aW9uIGJ1dCBwYXJl
bnQgZG9lcyBub3QsCisgICAgICAgLy8gY2xlYXIgYWxsb3ctdG9wLW5hdmlnYXRpb24KKyAgICAg
ICBpZiAoKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1RP
UF9OQVZJR0FUSU9OKSAmJgorICAgICAgICAgICAhKHBhcmVudFNhbmRib3hGbGFncyAmIG5zSURv
Y1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1RPUF9OQVZJR0FUSU9OKSkKKyAgICAgICAgIHNh
bmRib3hGbGFncyB8PSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfVE9QX05BVklH
QVRJT047CisgICAgICAKKyAgICAgICAvLyBpZiBjdXJyZW50IGRvY3NoZWxsIGhhcyBhbGxvdy1m
b3JtcyBidXQgcGFyZW50IGRvZXMgbm90LAorICAgICAgIC8vIGNsZWFyIGFsbG93LWZvcm1zCisg
ICAgICAgaWYgKChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExP
V19GT1JNX1NVQk1JVCkgJiYKKyAgICAgICAgICAgIShwYXJlbnRTYW5kYm94RmxhZ3MgJiBuc0lE
b2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NVQk1JVCkpCisgICAgICAgICBzYW5k
Ym94RmxhZ3MgfD0gfm5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX0ZPUk1fU1VCTUlU
OworICAgICB9CisgIAorICAgIG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFn
cyk7CisgICAgCisgICAgLy8gc2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGluZyBhcyBzcGVjaWZp
ZWQgCisgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX1NB
TkRCT1hFRCkgeworICAgICAgaWYgKCEoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRC
T1hfRkxBR1NfQUxMT1dfU0FNRV9ET01BSU4pKSB7CisgICAgICAgIC8vIGFsbG93LXNhbWUtZG9t
YWluIHdhc24ndCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG51bGwgcHJpbmNp
cGFsIGFuZCAKKyAgICAgICAgLy8gdXNlIHRoYXQgYXMgdGhlIG93bmVyCisgICAgICAgIG5zQ09N
UHRyPG5zSVByaW5jaXBhbD4gbnVsbFByaW5jaXBhbCA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96
aWxsYS5vcmcvbnVsbHByaW5jaXBhbDsxIik7CisgICAgICAgIGxvYWRJbmZvLT5TZXRPd25lcihu
dWxsUHJpbmNpcGFsKTsKKyAgICAgIH0gZWxzZSB7IAorICAgICAgICAvLyB1c2UgdGhlICdub3Jt
YWwnIHByaW5jaXBhbCBmb3IgdGhlIDxpZnJhbWU+IC0gc2VlIG5vdGUgYmVsb3cKKyAgICAgICAg
bG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7CisgICAg
ICB9CisgIAorICAgICAgaWYgKCEoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hf
RkxBR1NfQUxMT1dfU0NSSVBUUykpIHsKKyAgICAgICAgbURvY1NoZWxsLT5TZXRBbGxvd0phdmFz
Y3JpcHQoZmFsc2UpOworICAgICAgfQorICAgIAorICAgICAgLy8gX2Fsd2F5c18gZGlzYWxsb3cg
cGx1Z2lucyB3aGVuIHNhbmRib3hlZAorICAgICAgbURvY1NoZWxsLT5TZXRBbGxvd1BsdWdpbnMo
ZmFsc2UpOworICAgIH0gCisgIH0KKworICBlbHNlIHsgCisgICAgLy8gbm90IHNhbmRib3hlZCBz
byB3ZSB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3VtZW50IGxvYWRlZCBp
bnNpZGUgdXMuICBUaGlzCisgICAgLy8gaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2
ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBsb2FkZWQgaW4KKyAgICAvLyBzdWJmcmFtZXMh
CisgICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7
CisgIH0KIAogICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwogICBydiA9IG1Pd25lckNvbnRl
bnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKHJlZmVycmVyKSk7CiAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbG9hZEluZm8tPlNldFJlZmVycmVyKHJl
ZmVycmVyKTsKIAogICAvLyBLaWNrIG9mZiB0aGUgbG9hZC4uLgpkaWZmIC0tZ2l0IGEvY29udGVu
dC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0
LmgKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAorKysgYi9jb250ZW50L2Jh
c2Uvc3JjL25zR2tBdG9tTGlzdC5oCkBAIC05MywxNyArOTMsMjAgQEAgR0tfQVRPTShhY3R1YXRl
LCAiYWN0dWF0ZSIpCiBHS19BVE9NKGFkZHJlc3MsICJhZGRyZXNzIikKIEdLX0FUT00oYWZ0ZXIs
ICJhZnRlciIpCiBHS19BVE9NKGFmdGVyX2VuZCwgImFmdGVyX2VuZCIpCiBHS19BVE9NKGFmdGVy
X3N0YXJ0LCAiYWZ0ZXJfc3RhcnQiKQogR0tfQVRPTShhbGlnbiwgImFsaWduIikKIEdLX0FUT00o
YWxpbmssICJhbGluayIpCiBHS19BVE9NKGFsbCwgImFsbCIpCiBHS19BVE9NKGFsbG93ZXZlbnRz
LCAiYWxsb3dldmVudHMiKQorR0tfQVRPTShhbGxvd2Zvcm1zLCAiYWxsb3ctZm9ybXMiKQogR0tf
QVRPTShhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucywgImFsbG93bmVnYXRpdmVhc3NlcnRpb25zIikK
K0dLX0FUT00oYWxsb3dzYW1lb3JpZ2luLCAiYWxsb3ctc2FtZS1vcmlnaW4iKQorR0tfQVRPTShh
bGxvd3NjcmlwdHMsICJhbGxvdy1zY3JpcHRzIikKIEdLX0FUT00oYWxsb3d1bnRydXN0ZWQsICJh
bGxvd3VudHJ1c3RlZCIpCiBHS19BVE9NKGFsdCwgImFsdCIpCiBHS19BVE9NKGFsdGVybmF0ZSwg
ImFsdGVybmF0ZSIpCiBHS19BVE9NKGFsd2F5cywgImFsd2F5cyIpCiBHS19BVE9NKGFuY2VzdG9y
LCAiYW5jZXN0b3IiKQogR0tfQVRPTShhbmNlc3Rvck9yU2VsZiwgImFuY2VzdG9yLW9yLXNlbGYi
KQogR0tfQVRPTShfYW5kLCAiYW5kIikKIEdLX0FUT00oYW55LCAiYW55IikKQEAgLTg3MCwxNiAr
ODczLDE3IEBAIEdLX0FUT00ocm93c3BhbiwgInJvd3NwYW4iKQogR0tfQVRPTShycCwgInJwIikK
IEdLX0FUT00ocnQsICJydCIpCiBHS19BVE9NKHJ0bCwgInJ0bCIpCiBHS19BVE9NKHJ1YnksICJy
dWJ5IikKIEdLX0FUT00ocnVsZSwgInJ1bGUiKQogR0tfQVRPTShydWxlcywgInJ1bGVzIikKIEdL
X0FUT00ocywgInMiKQogR0tfQVRPTShzYW1wLCAic2FtcCIpCitHS19BVE9NKHNhbmRib3gsICJz
YW5kYm94IikKIEdLX0FUT00oc2JhdHRyLCAic2JhdHRyIikKIEdLX0FUT00oc2NhbGUsICJzY2Fs
ZSIpCiBHS19BVE9NKHNjYW4sICJzY2FuIikKIEdLX0FUT00oc2NoZW1lLCAic2NoZW1lIikKIEdL
X0FUT00oc2NvcGUsICJzY29wZSIpCiBHS19BVE9NKHNjb3BlZCwgInNjb3BlZCIpCiBHS19BVE9N
KHNjcmVlbiwgInNjcmVlbiIpCiBHS19BVE9NKHNjcmVlblgsICJzY3JlZW5YIikKZGlmZiAtLWdp
dCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNPYmplY3RMb2FkaW5nQ29udGVudC5jcHAgYi9jb250ZW50
L2Jhc2Uvc3JjL25zT2JqZWN0TG9hZGluZ0NvbnRlbnQuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9z
cmMvbnNPYmplY3RMb2FkaW5nQ29udGVudC5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc09i
amVjdExvYWRpbmdDb250ZW50LmNwcApAQCAtMTQ1NCwxNyArMTQ1NCwxNyBAQCBuc09iamVjdExv
YWRpbmdDb250ZW50OjpMb2FkT2JqZWN0KG5zSVVSCiAgICAgTlNfUGFyc2VDb250ZW50VHlwZShh
VHlwZUhpbnQsIHR5cGVIaW50LCBkdW1teSk7CiAgICAgaWYgKCF0eXBlSGludC5Jc0VtcHR5KCkp
IHsKICAgICAgIGNoYW4tPlNldENvbnRlbnRUeXBlKHR5cGVIaW50KTsKICAgICB9CiAgIH0KIAog
ICAvLyBTZXQgdXAgdGhlIGNoYW5uZWwncyBwcmluY2lwYWwgYW5kIHN1Y2gsIGxpa2UgbnNEb2NT
aGVsbDo6RG9VUklMb2FkIGRvZXMKICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVy
KHRoaXNDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFuLCBhVVJJLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYW4sIGFVUkksIHRydWUsIGZhbHNlKTsKIAogICBuc0NPTVB0cjxuc0lTY3Jp
cHRDaGFubmVsPiBzY3JpcHRDaGFubmVsID0gZG9fUXVlcnlJbnRlcmZhY2UoY2hhbik7CiAgIGlm
IChzY3JpcHRDaGFubmVsKSB7CiAgICAgLy8gQWxsb3cgZXhlY3V0aW9uIGFnYWluc3Qgb3VyIGNv
bnRleHQgaWYgdGhlIHByaW5jaXBhbHMgbWF0Y2gKICAgICBzY3JpcHRDaGFubmVsLT4KICAgICAg
IFNldEV4ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05PUk1BTCk7CiAg
IH0KIApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVt
ZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAK
LS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC02ODEs
MTcgKzY4MSwyMyBAQCBuc0hUTUxGb3JtRWxlbWVudDo6RG9TdWJtaXRPclJlc2V0KG5zRXZlCiAg
IC8vIFN1Ym1pdCBvciBSZXNldCB0aGUgZm9ybQogICBuc3Jlc3VsdCBydiA9IE5TX09LOwogICBp
ZiAoTlNfRk9STV9SRVNFVCA9PSBhTWVzc2FnZSkgewogICAgIHJ2ID0gRG9SZXNldCgpOwogICB9
CiAgIGVsc2UgaWYgKE5TX0ZPUk1fU1VCTUlUID09IGFNZXNzYWdlKSB7CiAgICAgLy8gRG9uJ3Qg
c3VibWl0IGlmIHdlJ3JlIG5vdCBpbiBhIGRvY3VtZW50LgogICAgIGlmIChkb2MpIHsKLSAgICAg
IHJ2ID0gRG9TdWJtaXQoYUV2ZW50KTsKKyAgICAgIC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdyZSBp
biBhIHNhbmRib3hlZCBmcmFtZSBhbmQgaXQgZG9lc24ndCBoYXZlIAorICAgICAgLy8gJ2FsbG93
LWZvcm1zJyBpbiB0aGUgdmFsdWUgb2YgaXRzIHNhbmRib3ggYXR0cmlidXRlCisgICAgICBQUlVp
bnQzMiBzYW5kYm94RmxhZ3MgPSBkb2MtPkdldFNhbmRib3hGbGFncygpOworICAgICAgCisgICAg
ICBpZiAoIShzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19TQU5EQk9Y
RUQpIHx8IAorICAgICAgICAgIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9G
TEFHU19BTExPV19GT1JNX1NVQk1JVCkpCisgICAgICAgIHJ2ID0gRG9TdWJtaXQoYUV2ZW50KTsK
ICAgICB9CiAgIH0KICAgcmV0dXJuIHJ2OwogfQogCiBuc3Jlc3VsdAogbnNIVE1MRm9ybUVsZW1l
bnQ6OkRvUmVzZXQoKQogewpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
SFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElG
cmFtZUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJh
bWVFbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1l
RWxlbWVudC5jcHAKQEAgLTQzLDE2ICs0MywxOCBAQAogI2luY2x1ZGUgIm5zSURPTUdldFNWR0Rv
Y3VtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJuc0dr
QXRvbXMuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgogI2luY2x1ZGUgIm5zTWFwcGVkQXR0
cmlidXRlcy5oIgogI2luY2x1ZGUgIm5zRE9NRXJyb3IuaCIKICNpbmNsdWRlICJuc1J1bGVEYXRh
LmgiCiAjaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zRE9NU2V0dGFibGVU
b2tlbkxpc3QuaCIKKyNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKIGNsYXNzIG5zSFRN
TElGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAogewpA
QCAtODQsMzAgKzg2LDM5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zQXR0clZhbHVlJiBhUmVzdWx0KTsKICAgTlNfSU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1dGVN
YXBwZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CiAgIHZpcnR1YWwgbnNNYXBS
dWxlVG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdDsK
IAogICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5v
ZGUgKiphUmVzdWx0KSBjb25zdDsKICAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xhc3NJ
bmZvKCk7CisgIAorICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1l
U3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNBU3RyaW5nKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBhTm90aWZ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
K3Byb3RlY3RlZDoKKyAgbnNSZWZQdHI8bnNET01TZXR0YWJsZVRva2VuTGlzdD4gIG1TYW5kYm94
VG9rZW5MaXN0OwogfTsKIAogCiBOU19JTVBMX05TX05FV19IVE1MX0VMRU1FTlRfQ0hFQ0tfUEFS
U0VSKElGcmFtZSkKIAogCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojpuc0hUTUxJRnJhbWVFbGVtZW50
KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbVBhcnNlciBhRnJvbVBhcnNlcikKICAgOiBu
c0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50KGFOb2RlSW5mbywgYUZyb21QYXJzZXIpCiB7CiB9CiAK
IG5zSFRNTElGcmFtZUVsZW1lbnQ6On5uc0hUTUxJRnJhbWVFbGVtZW50KCkKIHsKKyAgaWYgKG1T
YW5kYm94VG9rZW5MaXN0KQorICAgIG1TYW5kYm94VG9rZW5MaXN0LT5Ecm9wUmVmZXJlbmNlKCk7
CiB9CiAKIAogTlNfSU1QTF9BRERSRUZfSU5IRVJJVEVEKG5zSFRNTElGcmFtZUVsZW1lbnQsbnNH
ZW5lcmljRWxlbWVudCkKIE5TX0lNUExfUkVMRUFTRV9JTkhFUklURUQobnNIVE1MSUZyYW1lRWxl
bWVudCxuc0dlbmVyaWNFbGVtZW50KQogCiBET01DSV9OT0RFX0RBVEEoSFRNTElGcmFtZUVsZW1l
bnQsIG5zSFRNTElGcmFtZUVsZW1lbnQpCiAKQEAgLTE1MCwxNiArMTYxLDI4IEBAIG5zSFRNTElG
cmFtZUVsZW1lbnQ6OkdldENvbnRlbnRXaW5kb3cobnMKIH0KIAogTlNfSU1FVEhPRElNUAogbnNI
VE1MSUZyYW1lRWxlbWVudDo6R2V0U1ZHRG9jdW1lbnQobnNJRE9NRG9jdW1lbnQgKiphUmVzdWx0
KQogewogICByZXR1cm4gR2V0Q29udGVudERvY3VtZW50KGFSZXN1bHQpOwogfQogCitOU19JTUVU
SE9ESU1QCituc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRTYW5kYm94KG5zSURPTURPTVNldHRhYmxl
VG9rZW5MaXN0KiogYVNhbmRib3gpCit7CisgIGlmICghbVNhbmRib3hUb2tlbkxpc3QpIHsKKyAg
ICBtU2FuZGJveFRva2VuTGlzdCA9IG5ldyBuc0RPTVNldHRhYmxlVG9rZW5MaXN0KHRoaXMsIG5z
R2tBdG9tczo6c2FuZGJveCk7CisgIH0KKyAKKyAgTlNfQUREUkVGKCphU2FuZGJveCA9IG1TYW5k
Ym94VG9rZW5MaXN0KTsKKyAKKyAgcmV0dXJuIE5TX09LOworfQorCiBib29sCiBuc0hUTUxJRnJh
bWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KQog
ewogICBpZiAoYU5hbWVzcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CiAgICAgaWYgKGFB
dHRyaWJ1dGUgPT0gbnNHa0F0b21zOjptYXJnaW53aWR0aCkgewpAQCAtMTc4LDE2ICsyMDEsMjAg
QEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJbgogICAgICAgcmV0dXJu
IFBhcnNlRnJhbWVib3JkZXJWYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBpZiAo
YUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OnNjcm9sbGluZykgewogICAgICAgcmV0dXJuIFBhcnNl
U2Nyb2xsaW5nVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CiAgICAgaWYgKGFBdHRyaWJ1
dGUgPT0gbnNHa0F0b21zOjphbGlnbikgewogICAgICAgcmV0dXJuIFBhcnNlQWxpZ25WYWx1ZShh
VmFsdWUsIGFSZXN1bHQpOwogICAgIH0KKyAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6
OnNhbmRib3gpIHsKKwkgIGFSZXN1bHQuUGFyc2VBdG9tQXJyYXkoYVZhbHVlKTsKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KICAgfQogCiAgIHJldHVybiBuc0dlbmVyaWNIVE1MRnJhbWVFbGVt
ZW50OjpQYXJzZUF0dHJpYnV0ZShhTmFtZXNwYWNlSUQsIGFBdHRyaWJ1dGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWUsIGFSZXN1bHQp
OwogfQogCiBzdGF0aWMgdm9pZAogTWFwQXR0cmlidXRlc0ludG9SdWxlKGNvbnN0IG5zTWFwcGVk
QXR0cmlidXRlcyogYUF0dHJpYnV0ZXMsCkBAIC0yNjgsOCArMjk1LDI4IEBAIG5zSFRNTElGcmFt
ZUVsZW1lbnQ6OklzQXR0cmlidXRlTWFwcGVkKGMKIAogCiBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNG
dW5jCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBj
b25zdAogewogICByZXR1cm4gJk1hcEF0dHJpYnV0ZXNJbnRvUnVsZTsKIH0KIAorbnNyZXN1bHQK
K25zSFRNTElGcmFtZUVsZW1lbnQ6OkFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwg
bnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNBU3RyaW5nKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhTm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0gbnNHa0F0b21zOjpzYW5kYm94ICYmIGFOYW1l
U3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgeworICAgIC8vIHBhcnNlIHRoZSBuZXcgdmFs
dWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBhbmQgaWYgd2UgaGF2ZSBhIGRvY3NoZWxsCisg
ICAgLy8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFwcHJvcHJpYXRlbHkKKyAgICBuc0NPTVB0cjxu
c0lET01ET01TZXR0YWJsZVRva2VuTGlzdD4gc2FuZGJveDsKKyAgICAKKyAgICBuc3Jlc3VsdCBy
ZXN1bHQgPSBHZXRTYW5kYm94KGdldHRlcl9BZGRSZWZzKHNhbmRib3gpKTsKKyAgICAvLyBUT0RP
IDogd2hhdCB0byBkbyBpZiB0aGlzIGZhaWxzID8gCisgICAgCisgICAgaWYgKG1GcmFtZUxvYWRl
cikKKyAgICAgIG1GcmFtZUxvYWRlci0+R2V0RXhpc3RpbmdEb2NTaGVsbCgpLT5TZXRTYW5kYm94
RmxhZ3MobnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2FuZGJv
eCkpOworICB9CisgIHJldHVybiBuc0dlbmVyaWNIVE1MRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKGFO
YW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYU5vdGlmeSk7Cit9CisKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2Uv
bnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCi0tLSBhL2RvY3No
ZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNw
cApAQCAtNzUwLDE3ICs3NTAsMTggQEAgbnNEb2NTaGVsbDo6bnNEb2NTaGVsbCgpOgogICAgIG1J
c0FwcFRhYihmYWxzZSksCiAgICAgbVVzZUdsb2JhbEhpc3RvcnkoZmFsc2UpLAogICAgIG1GaXJl
ZFVubG9hZEV2ZW50KGZhbHNlKSwKICAgICBtRU9ERm9yQ3VycmVudERvY3VtZW50KGZhbHNlKSwK
ICAgICBtVVJJUmVzdWx0ZWRJbkRvY3VtZW50KGZhbHNlKSwKICAgICBtSXNCZWluZ0Rlc3Ryb3ll
ZChmYWxzZSksCiAgICAgbUlzRXhlY3V0aW5nT25Mb2FkSGFuZGxlcihmYWxzZSksCiAgICAgbUlz
UHJpbnRpbmdPclBQKGZhbHNlKSwKLSAgICBtU2F2aW5nT2xkVmlld2VyKGZhbHNlKQorICAgIG1T
YXZpbmdPbGRWaWV3ZXIoZmFsc2UpLAorICAgIG1TYW5kYm94RmxhZ3MoMCkKICNpZmRlZiBERUJV
RwogICAgICwgbUluRW5zdXJlU2NyaXB0RW52KGZhbHNlKQogI2VuZGlmCiB7CiAgICAgbUhpc3Rv
cnlJRCA9ICsrZ0RvY3NoZWxsSURDb3VudGVyOwogICAgIGlmIChnRG9jU2hlbGxDb3VudCsrID09
IDApIHsKICAgICAgICAgTlNfQVNTRVJUSU9OKHNVUklGaXh1cCA9PSBuc251bGwsCiAgICAgICAg
ICAgICAgICAgICAgICAiSHVoLCBzVVJJRml4dXAgbm90IG51bGwgaW4gZmlyc3QgbnNEb2NTaGVs
bCBjdG9yISIpOwpAQCAtNDkyMCwxNiArNDkyMSwzMiBAQCBuc0RvY1NoZWxsOjpTZXRJc0FwcFRh
Yihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OkdldElzQXBwVGFi
KGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0FwcFRhYjsKICAgcmV0dXJu
IE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpTZXRTYW5kYm94RmxhZ3Mo
UFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgbVNhbmRib3hGbGFncyA9IGFTYW5kYm94Rmxh
Z3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6R2V0
U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFncykKK3sKKyAgTlNfRU5TVVJFX0FS
R19QT0lOVEVSKGFTYW5kYm94RmxhZ3MpOworICAKKyAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJv
eEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6
OlNldFZpc2liaWxpdHkoYm9vbCBhVmlzaWJpbGl0eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmll
d2VyKQogICAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAg
ICAgIG1Db250ZW50Vmlld2VyLT5TaG93KCk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtODg4OSwx
OCArODkwNiwzMCBAQCBuc0RvY1NoZWxsOjpEb1VSSUxvYWQobnNJVVJJICogYVVSSSwKICAgICAg
ICAgfQogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkKICAgICAgICAgaWYg
KGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAgICAvLyBSZWZlcnJl
ciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4KICAgICAgICAgICAg
IGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChkb19RdWVyeUlu
dGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIo
b3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUpOworCW5zQ09NUHRyPG5zSVByaW5j
aXBhbD4gb3duZXJQcmluY2lwYWwoZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKSk7CisJCisgICAg
Ly8gSWYgdGhlIGNvbnRlbnQgaXMgc2FuZGJveGVkLCBmb3JjZSB0aGUgcGFzc2VkIGluIG93bmVy
ICh3aGljaCBzaG91bGQgYmUgCisJLy8gYSBudWxsIHByaW5jaXBhbCkgdG8gYmUgc2V0IG9uIHRo
ZSBjaGFubmVsLCBVTkxFU1MgdGhlIHNhbmRib3ggYWxsb3ctc2FtZS1kb21haW4gZmxhZyBpcyBh
bHNvCisgICAgLy8gc2V0LiBJbiB0aGF0IGNhc2UsIGFsbG93IHRoZSBjb250ZW50IHRvIGFzc3N1
bWUgaXRzICJuYXR1cmFsIGRvbWFpbiIgYXMgaXQKKyAgICAvLyBub3JtYWxseSB3b3VsZC4gCisg
ICAgaWYgKChtU2FuZGJveEZsYWdzICYgU0FOREJPWF9GTEFHU19TQU5EQk9YRUQpICYmIAorICAg
ICAgICAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9ET01BSU4pICE9
IFNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9ET01BSU4pIHsKKyAgICAgIG5zQ29udGVudFV0aWxz
OjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSwg
dHJ1ZSk7CisgICAgfQorCQorICAgIGVsc2UgeworICAgICAgbnNDb250ZW50VXRpbHM6OlNldFVw
Q2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlLCBmYWxzZSk7
CisgICAgfQogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9
IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAgIGlmIChzY3JpcHRDaGFubmVsKSB7CiAg
ICAgICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0IGlmIHRoZSBwcmlu
Y2lwYWxzIG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAgICAgICAgU2V0RXhl
Y3V0aW9uUG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFMKTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oIGIvZG9jc2hlbGwvYmFzZS9u
c0RvY1NoZWxsLmgKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKKysrIGIvZG9jc2hl
bGwvYmFzZS9uc0RvY1NoZWxsLmgKQEAgLTc4MywxNiArNzgzLDE4IEBAIHByb3RlY3RlZDoKICAg
ICAvLyBDcmVhdGUoKSBpcyBjYWxsZWQsIHRoZSB0eXBlIGlzIG5vdCBleHBlY3RlZCB0byBjaGFu
Z2UuCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUl0ZW1UeXBlOwogCiAgICAgLy8g
SW5kZXggaW50byB0aGUgU0hUcmFuc2FjdGlvbiBsaXN0LCBpbmRpY2F0aW5nIHRoZSBwcmV2aW91
cyBhbmQgY3VycmVudAogICAgIC8vIHRyYW5zYWN0aW9uIGF0IHRoZSB0aW1lIHRoYXQgdGhpcyBE
b2NTaGVsbCBiZWdpbnMgdG8gbG9hZAogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1Q
cmV2aW91c1RyYW5zSW5kZXg7CiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUxvYWRl
ZFRyYW5zSW5kZXg7CiAKKyAgICBQUlVpbnQzMiAgICAgICAgICAgICAgICAgICBtU2FuZGJveEZs
YWdzOworICAgIAogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1DcmVhdGVkOwogICAg
IGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1N1YmZyYW1lczsKICAgICBib29sICAg
ICAgICAgICAgICAgICAgICAgICBtQWxsb3dQbHVnaW5zOwogICAgIGJvb2wgICAgICAgICAgICAg
ICAgICAgICAgIG1BbGxvd0phdmFzY3JpcHQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAg
ICAgbUFsbG93TWV0YVJlZGlyZWN0czsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBt
QWxsb3dJbWFnZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93RE5TUHJl
ZmV0Y2g7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93V2luZG93Q29udHJv
bDsKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsIGIvZG9jc2hlbGwv
YmFzZS9uc0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwK
KysrIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAgLTU0OCw5ICs1NDgsNDQgQEAg
aW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKICAgICovCiAgIGF0dHJpYnV0ZSBi
b29sZWFuIGlzQXBwVGFiOwogCiAgIC8qKgogICAgKiBDcmVhdGUgYSBuZXcgYWJvdXQ6Ymxhbmsg
ZG9jdW1lbnQgYW5kIGNvbnRlbnQgdmlld2VyLgogICAgKiBAcGFyYW0gYVByaW5jaXBhbCB0aGUg
cHJpbmNpcGFsIHRvIHVzZSBmb3IgdGhlIG5ldyBkb2N1bWVudC4KICAgICovCiAgIHZvaWQgY3Jl
YXRlQWJvdXRCbGFua0NvbnRlbnRWaWV3ZXIoaW4gbnNJUHJpbmNpcGFsIGFQcmluY2lwYWwpOwor
ICAKKyAgLyoqIAorICAgKiBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9jc2hlbGwuIFRoZXNl
IHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSBvZiB0aGUgCisgICAq
IGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZiBleGlzdGVu
dC4gU2VlIHRoZSBIVE1MNSBzcGVjIGZvciBtb3JlIGRldGFpbHMuCisgICAqIFRoZXNlIGZsYWdz
IG9uIHRoZSBkb2NzaGVsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzYW5kYm94
IGF0dHJpYnV0ZSwgd2hpY2ggaXMgbW9kaWZpYWJsZS4KKyAgICogVGhleSBhcmUgb25seSB1c2Vk
IHdoZW4gbG9hZGluZyBuZXcgY29udGVudCwgc2FuZGJveCBmbGFncyBhcmUgYWxzbyBpbW11dGFi
bHkgc2V0IG9uIHRoZSBkb2N1bWVudAorICAgKiB3aGVuIGl0IGlzIGxvYWRlZC4gVGhlIHNhbmRi
b3ggZmxhZ3Mgb2YgYSBkb2N1bWVudCBkZXBlbmQgb24gdGhlIHNhbmRib3ggZmxhZ3Mgb24gaXRz
IGRvY3NoZWxsCisgICAqIGFuZCBvZiBpdHMgcGFyZW50IGRvY3VtZW50LCBpZiBhbnkuIAorICAg
Ki8gICAKKyAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdzOworICAKKyAgLyoq
IAorICAgKiBUaGUgY29udGVudCBpcyBzYW5kYm94ZWQgYW5kIGlzb2xhdGVkIHdpdGggYSBudWxs
IHByaW5jaXBhbC4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWF9GTEFHU19T
QU5EQk9YRUQgID0gMHgxOyAKKyAgCisgIC8qKgorICAgKiBUaGUgY29udGVudCBpcyBzYW5kYm94
ZWQgYW5kIGlzb2xhdGVkIHdpdGggbnVsbCBwcmluY2lwYWwgb3JpZ2luYWxseSBidXQgdG9wIG5h
dmlnYXRpb24gaXMgYWxsb3dlZC4gCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRC
T1hfRkxBR1NfQUxMT1dfVE9QX05BVklHQVRJT04gPSAweDI7CisgICAKKyAgLyoqCisgICAqIFRo
ZSBjb250ZW50IGlzIHNhbmRib3hlZCBidXQgYWxsb3dlZCB0byBoYXZlIGl0cyBuYXR1cmFsIGRv
bWFpbi4gCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hfRkxBR1NfQUxMT1df
U0FNRV9ET01BSU4gPSAweDQ7CisgIAorICAvKioKKyAgICogVGhlIGNvbnRlbnQgaXMgc2FuZGJv
eGVkIGJ1dCBmb3JtIHN1Ym1pc3Npb24gaXMgYWxsb3dlZAorICAgKi8KKyAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBTQU5EQk9YX0ZMQUdTX0FMTE9XX0ZPUk1fU1VCTUlUID0gMHg4OyAKKyAgIAorICAv
KioKKyAgICogVGhlIGNvbnRlbnQgaXMgc2FuZGJveGVkIGJ1dCBzY3JpcHQgZXhlY3V0aW9uIGlz
IGFsbG93ZWQKKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWF9GTEFHU19BTExP
V19TQ1JJUFRTID0gMHgxMDsgCiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9u
c0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhU
TUxJRnJhbWVFbGVtZW50LmlkbAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJ
RnJhbWVFbGVtZW50LmlkbAorKysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJh
bWVFbGVtZW50LmlkbApAQCAtMzMsMTYgKzMzLDE3IEBACiAgKiBkZWNpc2lvbiBieSBkZWxldGlu
ZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQog
ICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4g
SWYgeW91IGRvIG5vdCBkZWxldGUKICAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVu
dCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICAqIHRoZSB0ZXJtcyBv
ZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCiAgKgogICogKioqKiog
RU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KIAogI2luY2x1ZGUgIm5zSURPTUhUTUxFbGVtZW50
LmlkbCIKKyNpbmNsdWRlICJuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdC5pZGwiCiAKIC8qKgog
ICogVGhlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IGludGVyZmFjZSBpcyB0aGUgaW50ZXJmYWNl
IHRvIGEgW1hdSFRNTAogICogaWZyYW1lIGVsZW1lbnQuCiAgKgogICogVGhpcyBpbnRlcmZhY2Ug
aXMgdHJ5aW5nIHRvIGZvbGxvdyB0aGUgRE9NIExldmVsIDIgSFRNTCBzcGVjaWZpY2F0aW9uOgog
ICogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC8KICAqCkBAIC02MSwxNiAr
NjIsMTggQEAgaW50ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDogbnNJRAogICAgICAg
ICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5XaWR0aDsKICAgICAgICAgICAg
YXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFtZTsKICAgICAgICAgICAgYXR0cmlidXRlIERP
TVN0cmluZyAgICAgICAgc2Nyb2xsaW5nOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5n
ICAgICAgICBzcmM7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHdpZHRo
OwogICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICByZWFkb25seSBhdHRyaWJ1dGUg
bnNJRE9NRG9jdW1lbnQgICBjb250ZW50RG9jdW1lbnQ7CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBu
c0lET01XaW5kb3cgICAgIGNvbnRlbnRXaW5kb3c7Ci0KKyAgCisgIC8vIEhUTUw1IHNhbmRib3gg
YXR0cmlidXRlCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01ET01TZXR0YWJsZVRva2VuTGlz
dCBzYW5kYm94OwogCiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBpZnJhbWUgZWxlbWVu
dHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0byBiZSBwcmVzZW50
CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3ViIGRvY3VtZW50IHRv
IGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRwczovL3dpa2kubW96
aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkKICAgICAgICAgICAg
YXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVuOwogfTsKZGlmZiAt
LWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0
Y2hlci5jcHAgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRv
d1dhdGNoZXIuY3BwCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3Jj
L25zV2luZG93V2F0Y2hlci5jcHAKKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0
Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcApAQCAtNjAzLDE2ICs2MDMsMzEgQEAgbnNXaW5k
b3dXYXRjaGVyOjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAgaWYgKCFuZXdEb2NT
aGVsbEl0ZW0pIHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3BlbiB1cCBhIG5ldyB3
aW5kb3cgb3Vyc2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJvdmlkZXIgZm9yIG9u
ZS4gIEluIGVpdGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmlnaHQKICAgICAvLyBu
YW1lIG9uIGl0LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAgICAvLyBJZiB0aGUg
cGFyZW50IHRyeWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94ZWQsIGRvbid0IGFs
bG93CisgICAgLy8gdGhlIHdpbmRvdyBvcGVuIHRvIGhhcHBlbgorICAgIGlmIChhUGFyZW50KSB7
CisgICAgICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAgICAgYVBhcmVudC0+
R2V0RG9jdW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBuc0NPTVB0cjxuc0lE
b2N1bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKyAgICAgIAorICAgICAg
UFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKyAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+R2V0
U2FuZGJveEZsYWdzKCk7CisgIAorICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxs
OjpTQU5EQk9YX0ZMQUdTX1NBTkRCT1hFRCkgeworICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJ
TFVSRTsKKyAgICAgIH0KKyAgICB9CisgICAgCiAgICAgLy8gTm93IGNoZWNrIHdoZXRoZXIgaXQn
cyBvayB0byBhc2sgYSB3aW5kb3cgcHJvdmlkZXIgZm9yIGEgd2luZG93LiAgRG9uJ3QKICAgICAv
LyBkbyBpdCBpZiB3ZSdyZSBvcGVuaW5nIGEgZGlhbG9nIG9yIGlmIG91ciBwYXJlbnQgaXMgYSBj
aHJvbWUgd2luZG93IG9yCiAgICAgLy8gaWYgd2UncmUgb3BlbmluZyBzb21ldGhpbmcgdGhhdCBo
YXMgbW9kYWwsIGRpYWxvZywgb3IgY2hyb21lIGZsYWdzIHNldC4KICAgICBuc0NPTVB0cjxuc0lE
T01DaHJvbWVXaW5kb3c+IGNocm9tZVdpbiA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFQYXJlbnQpOwog
ICAgIGlmICghYURpYWxvZyAmJiAhY2hyb21lV2luICYmCiAgICAgICAgICEoY2hyb21lRmxhZ3Mg
JiAobnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX01PREFMICAgICAgICAgfAogICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfRElBTE9H
IHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01F
X09QRU5BU19DSFJPTUUpKSkgewpkaWZmIC0tZ2l0IGEvaW1hZ2Uvc3JjL2ltZ0xvYWRlci5jcHAg
Yi9pbWFnZS9zcmMvaW1nTG9hZGVyLmNwcAotLS0gYS9pbWFnZS9zcmMvaW1nTG9hZGVyLmNwcAor
KysgYi9pbWFnZS9zcmMvaW1nTG9hZGVyLmNwcApAQCAtNTUzLDE3ICs1NTMsMTcgQEAgc3RhdGlj
IG5zcmVzdWx0IE5ld0ltYWdlQ2hhbm5lbChuc0lDaGFubgogCiAgICAgaWYgKGFMb2FkRmxhZ3Mg
JiBuc0lSZXF1ZXN0OjpMT0FEX0JBQ0tHUk9VTkQpCiAgICAgICArK3ByaW9yaXR5OyAvLyBmdXJ0
aGVyIHJlZHVjZSBwcmlvcml0eSBmb3IgYmFja2dyb3VuZCBsb2FkcwogCiAgICAgcC0+QWRqdXN0
UHJpb3JpdHkocHJpb3JpdHkpOwogICB9CiAKICAgYm9vbCBzZXRPd25lciA9IG5zQ29udGVudFV0
aWxzOjpTZXRVcENoYW5uZWxPd25lcihhTG9hZGluZ1ByaW5jaXBhbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphUmVzdWx0LCBhVVJJLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqYVJlc3VsdCwgYVVSSSwgZmFsc2UsIGZhbHNlKTsKICAgKmFGb3JjZVByaW5jaXBhbENo
ZWNrRm9yQ2FjaGVFbnRyeSA9IHNldE93bmVyOwogCiAgIHJldHVybiBOU19PSzsKIH0KIAogc3Rh
dGljIFBSVWludDMyIFNlY29uZHNGcm9tUFJUaW1lKFBSVGltZSBwclRpbWUpCiB7CiAgIHJldHVy
biBQUlVpbnQzMihQUkludDY0KHByVGltZSkgLyBQUkludDY0KFBSX1VTRUNfUEVSX1NFQykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>578799</attachid>
            <date>2011-12-02 18:42:22 -0800</date>
            <delta_ts>2012-01-03 14:33:03 -0800</delta_ts>
            <desc>WIP - experimental prototype</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>39225</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNjhmNWE2NzU4NzcwMGU1YzM1NTE3ZjQxOGU5
MjJiYmI4N2VmZTYwZQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtODEsMTYgKzgxLDE3IEBAIHN0YXRpYyBmcF9leGNlcHRfdCBv
bGRtYXNrID0gZnBzZXRtYXNrKH4KICNpbmNsdWRlICJuc0lET01Ob2RlLmgiCiAjaW5jbHVkZSAi
bnNIdG1sNVBhcnNlci5oIgogI2luY2x1ZGUgIm5zSUZyYWdtZW50Q29udGVudFNpbmsuaCIKICNp
bmNsdWRlICJuc01hdGhVdGlscy5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9BdXRvUmVzdG9yZS5o
IgogI2luY2x1ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96aWxsYS9U
aW1lU3RhbXAuaCIKKyNpbmNsdWRlICJuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdC5oIgogCiBz
dHJ1Y3QgbnNOYXRpdmVLZXlFdmVudDsgLy8gRG9uJ3QgaW5jbHVkZSBuc0lOYXRpdmVLZXlCaW5k
aW5ncy5oIGhlcmU6IGl0IHdpbGwgZm9yY2Ugc3RyYW5nZSBjb21waWxhdGlvbiBlcnJvciEKIAog
Y2xhc3MgbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9yeTsKIGNsYXNzIG5zSVhQQ29ubmVjdDsKIGNs
YXNzIG5zSUNvbnRlbnQ7CiBjbGFzcyBuc0lET01LZXlFdmVudDsKIGNsYXNzIG5zSURvY3VtZW50
OwpAQCAtMTgyMywyNSArMTgyNCwyNyBAQCBwdWJsaWM6CiAgICAqIGZyb20gdGhlIGRvY3VtZW50
IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQgVVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsKIAogICAvKioKICAgICog
U2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRoZSBnaXZlbiBjaGFubmVs
LCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBvZiBhQ2hhbm5lbC4gIGFQ
cmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JBYm91dEJsYW5rIGlzIHRy
dWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAg
b24gaXQuCi0gICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LiBJZiBhRm9yY2VP
d25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQgb24gdGhlIGNoYW5uZWws
IGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAorICAgKiBmcm9tIHRoZSBj
aGFubmVsLiAKICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRoZSBwcmluY2lwYWwg
d2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwuCiAgICAqLwogICBz
dGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNp
cGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5l
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIpOwogCiAgIHN0
YXRpYyBuc3Jlc3VsdCBCdG9hKGNvbnN0IG5zQVN0cmluZyYgYUJpbmFyeURhdGEsCiAgICAgICAg
ICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUFzY2lpQmFzZTY0U3RyaW5nKTsKIAogICBzdGF0
aWMgbnNyZXN1bHQgQXRvYihjb25zdCBuc0FTdHJpbmcmIGFBc2NpaVN0cmluZywKICAgICAgICAg
ICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSk7CiAKICAgLyoqCkBAIC0xODUw
LDE2ICsxODUzLDI1IEBAIHB1YmxpYzoKICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFr
ZSBzdXJlIGF1dG9jb21wbGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0
eXBlLgogICAgKgogICAgKiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNr
LiBOT1RFOiBhSW5wdXQgY2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBp
bnB1dCBlbGVtZW50IGhhcyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBi
b29sIElzQXV0b2NvbXBsZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQp
OwogCisgIC8qKgorICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3gg
YXR0cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICAgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBj
b252ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxseSAKKyAgICoKKyAg
ICogQHBhcmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUg
YXMgYW4gbnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QKKyAgICogQHJldHVybiAJCQl0aGUgc2V0
IG9mIGZsYWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIgUGFyc2VTYW5kYm94QXR0cmlidXRl
VG9GbGFncyhuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCAqIGFBdHRyaWJ1dGUpOworICAKIHBy
aXZhdGU6CiAgIHN0YXRpYyBib29sIEluaXRpYWxpemVFdmVudFRhYmxlKCk7CiAKICAgc3RhdGlj
IG5zcmVzdWx0IEVuc3VyZVN0cmluZ0J1bmRsZShQcm9wZXJ0aWVzRmlsZSBhRmlsZSk7CiAKICAg
c3RhdGljIG5zSURPTVNjcmlwdE9iamVjdEZhY3RvcnkgKkdldERPTVNjcmlwdE9iamVjdEZhY3Rv
cnkoKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgSG9sZFNjcmlwdE9iamVjdChQUlVpbnQzMiBhTGFu
Z0lELCB2b2lkKiBhT2JqZWN0KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJ
RG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaAotLS0gYS9jb250
ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysrIGIvY29udGVudC9iYXNlL3B1YmxpYy9u
c0lEb2N1bWVudC5oCkBAIC00NTcsMTYgKzQ1NywzNSBAQCBwdWJsaWM6CiAgICAqIEBzZWUgbnNC
aWRpVXRpbHMuaAogICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9ucyhQUlVpbnQzMiBhQmlkaU9w
dGlvbnMpCiAgIHsKICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9wdGlvbnM7CiAgIH0KICAgCiAg
IC8qKgorICAgKiBTZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQuIFRoaXMg
c2hvdWxkIG9ubHkgaGFwcGVuIGF0IAorICAgKiBhdCBkb2N1bWVudCBsb2FkLCB0aGUgZmxhZ3Mg
YXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgYXQgbG9hZCB0aW1lLgorICAgKiBAIHNlZSBu
c0RvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzCisgICAqLworICB2b2lkIFNldFNh
bmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQorICB7CisgICAgbVNhbmRib3hGbGFn
cyA9IGFTYW5kYm94RmxhZ3M7CisgIH0KKyAgCisgIC8qKiAKKyAgICogR2V0IHRoZSBzYW5kb3gg
ZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQKKyAgICogQHNlZSBuc0RvY1NoZWxsLmlkbCBmb3IgdGhl
IHBvc3NpYmxlIGZsYWdzCisgICAqLworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKSBjb25z
dAorICB7CisgICAgcmV0dXJuIG1TYW5kYm94RmxhZ3M7CisgIH0KKyAgIAorICAvKioKICAgICog
QWNjZXNzIEhUVFAgaGVhZGVyIGRhdGEgKHRoaXMgbWF5IGFsc28gZ2V0IHNldCBmcm9tIG90aGVy
CiAgICAqIHNvdXJjZXMsIGxpa2UgSFRNTCBNRVRBIHRhZ3MpLgogICAgKi8KICAgdmlydHVhbCB2
b2lkIEdldEhlYWRlckRhdGEobnNJQXRvbSogYUhlYWRlckZpZWxkLCBuc0FTdHJpbmcmIGFEYXRh
KSBjb25zdCA9IDA7CiAgIHZpcnR1YWwgdm9pZCBTZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFoZWFk
ZXJGaWVsZCwgY29uc3QgbnNBU3RyaW5nJiBhRGF0YSkgPSAwOwogCiAgIC8qKgogICAgKiBDcmVh
dGUgYSBuZXcgcHJlc2VudGF0aW9uIHNoZWxsIHRoYXQgd2lsbCB1c2UgYUNvbnRleHQgZm9yIGl0
cwpAQCAtMTc2MCwxNiArMTc3OSwyMSBAQCBwcm90ZWN0ZWQ6CiAgIC8vIElmIG1Jc1N0YXRpY0Rv
Y3VtZW50IGlzIHRydWUsIG1PcmlnaW5hbERvY3VtZW50IHBvaW50cyB0byB0aGUgb3JpZ2luYWwK
ICAgLy8gZG9jdW1lbnQuCiAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBtT3JpZ2luYWxEb2N1bWVu
dDsKIAogICAvLyBUaGUgYmlkaSBvcHRpb25zIGZvciB0aGlzIGRvY3VtZW50LiAgV2hhdCB0aGlz
IGJpdGZpZWxkIG1lYW5zIGlzCiAgIC8vIGRlZmluZWQgaW4gbnNCaWRpVXRpbHMuaAogICBQUlVp
bnQzMiBtQmlkaU9wdGlvbnM7CiAKKyAgLy8gVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3Vt
ZW50LiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2Yg
dGhlIAorICAvLyBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwg
aWYgZXhpc3RlbnQuIFRoZXNlIGFyZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvL2FyZSBpbW11
dGFibGUgLSBzZWUgbnNEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJsZSBmbGFncyAgIAorICBQ
UlVpbnQzMiBtU2FuZGJveEZsYWdzOworICAKICAgbnNDU3RyaW5nIG1Db250ZW50TGFuZ3VhZ2U7
CiBwcml2YXRlOgogICBuc0NTdHJpbmcgbUNvbnRlbnRUeXBlOwogcHJvdGVjdGVkOgogCiAgIC8v
IFRoZSBkb2N1bWVudCdzIHNlY3VyaXR5IGluZm8KICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IG1T
ZWN1cml0eUluZm87CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRp
bHMuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKLS0tIGEvY29udGVu
dC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0Nv
bnRlbnRVdGlscy5jcHAKQEAgLTY4NywxNyArNjg3LDczIEBAIG5zQ29udGVudFV0aWxzOjpHZXRQ
YXJzZXJTZXJ2aWNlKCkKICAgICBuc3Jlc3VsdCBydiA9IENhbGxHZXRTZXJ2aWNlKGtQYXJzZXJT
ZXJ2aWNlQ0lELCAmc1BhcnNlclNlcnZpY2UpOwogICAgIGlmIChOU19GQUlMRUQocnYpKSB7CiAg
ICAgICBzUGFyc2VyU2VydmljZSA9IG5zbnVsbDsKICAgICB9CiAgIH0KIAogICByZXR1cm4gc1Bh
cnNlclNlcnZpY2U7CiB9Ci0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMg
YSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVjdGl2
ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5Cisg
KgorICogQHBhcmFtIGFBdHRyaWJ1dGUgICAgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJp
YnV0ZSBhcyBhbiBuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdAorICogQHJldHVybiAJCQkgICAg
dGhlIHNldCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRpbHM6OlBhcnNlU2Fu
ZGJveEF0dHJpYnV0ZVRvRmxhZ3MobnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QgKiBhQXR0cmli
dXRlKQoreworICAvLyBUT0RPOiBob3cgdG8gaGFuZGxlIGVycm9ycyBpbiB0aGlzIGZ1bmN0aW9u
ID8gaWYgd2UncmUgaGVyZSwgc29tZXRoaW5nIGhhcyBhIHNhbmRib3gKKyAgLy8gYXR0cmlidXRl
IHNldCBhbmQgZXhwZWN0cyBjb250ZW50IHRvIGJlIHNhbmRib3hlZC4uLiBwZXJoYXBzIGNvbnNp
ZGVyIGZhaWxpbmcgY2xvc2VkID8/CisKKyAgUFJVaW50MzIgb3V0ID0gMDsKKyAgCisgIC8vIGlm
IHRoZXJlJ3MgYSBzYW5kYm94IGF0dHJpYnV0ZSBhdCBhbGwsIHNldCBTQU5EQk9YX0ZMQUdTX1NB
TkRCT1hFRAorICBvdXQgfD0gbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfU0FOREJPWEVEOwor
ICAKKyAgYm9vbCBhbGxvd2VkID0gZmFsc2U7CisgIAorICAvLyBUT0RPOiBzaG91bGQgaSB0cnkg
dG8gdXNlIGF0b21zIGV2ZW4gdGhvdWdoIENvbnRhaW5zIHdhbnRzIGEgc3RyaW5nID8gCisgIG5z
U3RyaW5nIGFsbG93U2NyaXB0cywgYWxsb3dTYW1lT3JpZ2luLCBhbGxvd0Zvcm1zLCBhbGxvd1Rv
cE5hdmlnYXRpb247CisgIAorICBuc3Jlc3VsdCByZXN1bHQgPSBuc0drQXRvbXM6OmFsbG93c2Ny
aXB0cy0+U2NyaXB0YWJsZVRvU3RyaW5nKGFsbG93U2NyaXB0cyk7CisgIAorICByZXN1bHQgPSBu
c0drQXRvbXM6OmFsbG93c2FtZW9yaWdpbi0+U2NyaXB0YWJsZVRvU3RyaW5nKGFsbG93U2FtZU9y
aWdpbik7CisgIAorICByZXN1bHQgPSBuc0drQXRvbXM6OmFsbG93Zm9ybXMtPlNjcmlwdGFibGVU
b1N0cmluZyhhbGxvd0Zvcm1zKTsKKyAgCisgIHJlc3VsdCA9IG5zR2tBdG9tczo6YWxsb3d0b3Bu
YXZpZ2F0aW9uLT5TY3JpcHRhYmxlVG9TdHJpbmcoYWxsb3dUb3BOYXZpZ2F0aW9uKTsKKyAgCisg
IHJlc3VsdCA9IGFBdHRyaWJ1dGUtPkNvbnRhaW5zKGFsbG93U2NyaXB0cywgJmFsbG93ZWQpOwor
ICAKKyAgaWYgKGFsbG93ZWQpCisgICAgb3V0IHw9IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdT
X0FMTE9XX1NDUklQVFM7CisgIAorICBhbGxvd2VkID0gZmFsc2U7CisgIHJlc3VsdCA9IGFBdHRy
aWJ1dGUtPkNvbnRhaW5zKGFsbG93U2FtZU9yaWdpbiwgJmFsbG93ZWQpOworICAKKyAgaWYgKGFs
bG93ZWQpCisgICAgb3V0IHw9IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1NBTUVf
RE9NQUlOOworCisgIGFsbG93ZWQgPSBmYWxzZTsKKyAgcmVzdWx0ID0gYUF0dHJpYnV0ZS0+Q29u
dGFpbnMoYWxsb3dGb3JtcywgJmFsbG93ZWQpOworICAKKyAgaWYgKGFsbG93ZWQpCisgICAgb3V0
IHw9IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX0ZPUk1fU1VCTUlUOworICAgIAor
ICBhbGxvd2VkID0gZmFsc2U7CisgIHJlc3VsdCA9IGFBdHRyaWJ1dGUtPkNvbnRhaW5zKGFsbG93
VG9wTmF2aWdhdGlvbiwgJmFsbG93ZWQpOworICAKKyAgaWYgKGFsbG93ZWQpCisgICAgb3V0IHw9
IG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1RPUF9OQVZJR0FUSU9OOworICAKKyAg
cmV0dXJuIG91dDsKK30KKyAgCiAjaWZkZWYgTU9aX1hURgogbnNJWFRGU2VydmljZSoKIG5zQ29u
dGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFzWFRGU2VydmljZSkgewogICAg
IG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZzWFRGU2Vydmlj
ZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIHNYVEZTZXJ2aWNlID0gbnNudWxs
OwpAQCAtNTc2NCwxNyArNTgyMCwxOCBAQCBuc0NvbnRlbnRVdGlsczo6VVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXN1bHQpOwogfQogCiAv
LyBzdGF0aWMKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmlu
Y2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFTZXRVcEZvckFib3V0QmxhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYUZvcmNlT3duZXIpCiB7CiAgIC8vCiAgIC8vIFNldCB0aGUgb3duZXIgb2YgdGhl
IGNoYW5uZWwsIGJ1dCBvbmx5IGZvciBjaGFubmVscyB0aGF0IGNhbid0CiAgIC8vIHByb3ZpZGUg
dGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQuCiAgIC8vCiAgIC8vIFhYWDogSXQgc2VlbXMgd3Jv
bmcgdGhhdCB0aGUgb3duZXIgaXMgaWdub3JlZCAtIGV2ZW4gaWYgb25lIGlzCiAgIC8vICAgICAg
c3VwcGxpZWQpIHVubGVzcyB0aGUgVVJJIGlzIGphdmFzY3JpcHQgb3IgZGF0YSBvciBhYm91dDpi
bGFuay4KICAgLy8gWFhYOiBJZiB0aGlzIGlzIGV2ZXIgY2hhbmdlZCwgY2hlY2sgYWxsIGNhbGxl
cnMgZm9yIHdoYXQgb3duZXJzCkBAIC01NzgyLDIzICs1ODM5LDI3IEBAIG5zQ29udGVudFV0aWxz
OjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmkKICAgLy8gICAgICBjb21tZW50cyBpbiBuc0RvY1No
ZWxsOjpMb2FkVVJJIHdoZXJlIHdlIGZhbGwgYmFjayBvbgogICAvLyAgICAgIGluaGVyaXRpbmcg
dGhlIG93bmVyIGlmIGNhbGxlZCBmcm9tIGNocm9tZS4gIFRoYXQgd291bGQgYmUKICAgLy8gICAg
ICB2ZXJ5IHdyb25nIGlmIHRoaXMgY29kZSBjaGFuZ2VkIGFueXRoaW5nIGJ1dCBjaGFubmVscyB0
aGF0CiAgIC8vICAgICAgY2FuJ3QgcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dCEK
ICAgLy8KICAgLy8gICAgICAoQ3VycmVudGx5IGNocm9tZSBVUklzIHNldCB0aGUgb3duZXIgd2hl
biB0aGV5IGFyZSBjcmVhdGVkIQogICAvLyAgICAgIFNvIHNldHRpbmcgYSBOVUxMIG93bmVyIHdv
dWxkIGJlIGJhZCEpCiAgIC8vCisgIC8vIElmIGFGb3JjZU93bmVyIGlzIHRydWUsIHRoZSBvd25l
ciB3aWxsIGJlIHNldCwgZXZlbiBmb3IgYSBjaGFubmVsIHRoYXQKKyAgLy8gY2FuIHByb3ZpZGUg
aXRzIG93biBzZWN1cml0eSBjb250ZW50LiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBIVE1MNSBJRlJB
TUUKKyAgLy8gc2FuZGJveCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiBmb3JjZSB0aGUgY2hhbm5lbCAo
YW5kIGl0cyBkb2N1bWVudCkgdG8KKyAgLy8gZXhwbGljaXRseSBoYXZlIGEgbnVsbCBwcmluY2lw
YWwKICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBlY3QgVVJJSW5oZXJpdHNTZWN1cml0eUNv
bnRleHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAgIC8vIGFib3V0OmJsYW5rIFVSSSwgc28g
ZG9uJ3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0aGlzIGNhbGwgZmFpbHMuCiAgIC8vIFRo
aXMgY29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBvbmUgaW4gbnNEb2NTaGVsbDo6SW50ZXJu
YWxMb2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5nIGZvciB0aGluZ3MgdGhhdCB3aWxsIHVz
ZSB0aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRl
eHQoYVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0
QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpIHsKKyAgaWYgKGFGb3JjZU93bmVyIHx8
ICgoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkksICZpbmhlcml0
KSkgJiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYmIE5TX0lzQWJv
dXRCbGFuayhhVVJJKSkpKSkpIHsKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIoYUxvYWRpbmdQcmlu
Y2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8KICAgLy8gZmlsZTogdXJpIHNw
ZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMgaXMgYSBmaWxlOiBsb2FkIG9wZW5lZCBm
cm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVlZApkaWZmIC0tZ2l0IGEvY29udGVudC9i
YXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAK
LS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAorKysgYi9jb250ZW50L2Jhc2Uv
c3JjL25zRG9jdW1lbnQuY3BwCkBAIC0yMzg0LDE2ICsyMzg0LDI1IEBAIG5zRG9jdW1lbnQ6OlN0
YXJ0RG9jdW1lbnRMb2FkKGNvbnN0IGNoYXIKICAgICBGaW5kQ2hhckluUmVhZGFibGUoJzsnLCBz
ZW1pY29sb24sIGVuZCk7CiAgICAgU2V0Q29udGVudFR5cGVJbnRlcm5hbChTdWJzdHJpbmcoc3Rh
cnQsIHNlbWljb2xvbikpOwogICB9CiAKICAgUmV0cmlldmVSZWxldmFudEhlYWRlcnMoYUNoYW5u
ZWwpOwogCiAgIG1DaGFubmVsID0gYUNoYW5uZWw7CiAKKyAgLy8gaWYgdGhpcyBkb2N1bWVudCBp
cyBiZWluZyBsb2FkZWQgYnkgYSBkb2NzaGVsbCwgY29weSBpdHMgc2FuZGJveCBmbGFncworICAv
LyB0byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11dGFibGUgYWZ0ZXIgYmVpbmcgc2V0IGhl
cmUuCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNl
KGFDb250YWluZXIpOworICAKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgIG5zcmVzdWx0IHJ2ID0g
ZG9jU2hlbGwtPkdldFNhbmRib3hGbGFncygmbVNhbmRib3hGbGFncyk7CisJIE5TX0VOU1VSRV9T
VUNDRVNTKHJ2LCBydik7CisgIH0KKyAgCiAgIG5zcmVzdWx0IHJ2ID0gSW5pdENTUCgpOwogICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIHJldHVybiBOU19PSzsKIH0KIAogbnNyZXN1
bHQKIG5zRG9jdW1lbnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9u
c0RvY3VtZW50LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaAotLS0gYS9jb250ZW50
L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQu
aApAQCAtMTI4MCwxNyArMTI4MCwxNyBAQCBwcml2YXRlOgogICBuc0NTdHJpbmcgbVNjcm9sbFRv
UmVmOwogICBQUlVpbnQ4IG1TY3JvbGxlZFRvUmVmQWxyZWFkeSA6IDE7CiAgIFBSVWludDggbUNo
YW5nZVNjcm9sbFBvc1doZW5TY3JvbGxpbmdUb1JlZiA6IDE7CiAKICAgLy8gVHJhY2tpbmcgZm9y
IGltYWdlcyBpbiB0aGUgZG9jdW1lbnQuCiAgIG5zRGF0YUhhc2h0YWJsZTwgbnNQdHJIYXNoS2V5
PGltZ0lSZXF1ZXN0PiwgUFJVaW50MzI+IG1JbWFnZVRyYWNrZXI7CiAKICAgVmlzaWJpbGl0eVN0
YXRlIG1WaXNpYmlsaXR5U3RhdGU7Ci0KKyAgCiAjaWZkZWYgREVCVUcKIHByb3RlY3RlZDoKICAg
Ym9vbCBtV2lsbFJlcGFyZW50OwogI2VuZGlmCiB9OwogCiAjZGVmaW5lIE5TX0RPQ1VNRU5UX0lO
VEVSRkFDRV9UQUJMRV9CRUdJTihfY2xhc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgIE5TX05PREVfT0ZGU0VUX0FORF9JTlRFUkZBQ0VfVEFCTEVfQkVHSU4oX2NsYXNzKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25z
RnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAotLS0g
YS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9z
cmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTQ2NiwyMCArNDY2LDExNCBAQCBuc0ZyYW1lTG9hZGVy
OjpSZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3QgdG8gYmUgc2FmZSwgcmVjaGVj
ayB1cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQpOwogICBOU19FTlNVUkVfU1VD
Q0VTUyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsTG9hZEluZm8+IGxvYWRJbmZv
OwogICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9BZGRSZWZzKGxvYWRJbmZvKSk7
CiAgIE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9GQUlMVVJFKTsKIAotICAvLyBX
ZSdsbCB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3VtZW50IGxvYWRlZCBp
bnNpZGUgdXMuICBUaGlzCi0gIC8vIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVkZWQgdG8gcHJldmVu
dCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluCi0gIC8vIHN1YmZyYW1lcyEKLSAg
bG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7CisgIG5z
U3RyaW5nIHNhbmRib3hBdHRyOyAgCisgIFBSVWludDMyIHBhcmVudFNhbmRib3hGbGFncyA9IDA7
CisKKyAgLy8gZ2V0IHRoZSBwYXJlbnQncyBzYW5kYm94IGZsYWdzLCB0aGV5J3JlIG5lZWRlZCB0
byBkZXRlcm1pbmUgaWYgdGhlCisgIC8vIGZyYW1lIGJlaW5nIGxvYWRlZCBiZWxvdyBuZWVkcyB0
byBiZSBzYW5kYm94ZWQKKyAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50RG9j
U2hlbGxJdGVtOworICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBjdXJEb2NTaGVsbEl0
ZW0oZG9fUXVlcnlJbnRlcmZhY2UobURvY1NoZWxsKSk7CisgIAorICBpZiAoTlNfU1VDQ0VFREVE
KGN1ckRvY1NoZWxsSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudERvY1NoZWxs
SXRlbSkpKSkgeworICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBwYXJlbnREb2MgPSBkb19HZXRJ
bnRlcmZhY2UocGFyZW50RG9jU2hlbGxJdGVtKTsKKyAgICAKKyAgICBpZiAocGFyZW50RG9jKSB7
CisgICAgICBwYXJlbnRTYW5kYm94RmxhZ3MgPSBwYXJlbnREb2MtPkdldFNhbmRib3hGbGFncygp
OworICAgIH0KKyAgfSAgCisKKyAgLy8gaXMgdGhpcyBhbiA8aWZyYW1lPiB3aXRoIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgb3IgYSBmcmFtZSB3aG9zZSBwYXJlbnQKKyAgLy8gaXMgc2FuZGJveGVkID8g
IAorICBpZiAobU93bmVyQ29udGVudC0+SXNIVE1MKG5zR2tBdG9tczo6aWZyYW1lKSAmJiAKKyAg
ICAgIChwYXJlbnRTYW5kYm94RmxhZ3MgfHwgbU93bmVyQ29udGVudC0+R2V0QXR0cihrTmFtZVNw
YWNlSURfTm9uZSwgbnNHa0F0b21zOjpzYW5kYm94LCBzYW5kYm94QXR0cikpKSB7CisgICAgUFJV
aW50MzIgc2FuZGJveEZsYWdzID0gMDsKKyAgCisgICAgbnNDT01QdHI8bnNJRE9NSFRNTElGcmFt
ZUVsZW1lbnQ+IGlmcmFtZSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG1Pd25lckNvbnRlbnQpOworICAK
KyAgICBpZiAoaWZyYW1lKSB7CisgICAgICBuc0NPTVB0cjxuc0lET01ET01TZXR0YWJsZVRva2Vu
TGlzdD4gc2FuZGJveDsKKyAgICAKKyAgICAgIG5zcmVzdWx0IHJlc3VsdCA9IGlmcmFtZS0+R2V0
U2FuZGJveChnZXR0ZXJfQWRkUmVmcyhzYW5kYm94KSk7CisgICAgICAvLyBUT0RPIDogd2hhdCB0
byBkbyBpZiB0aGlzIGZhaWxzID8gKHNlZSBiZWxvdyBhbHNvKSAKKyAgICAKKyAgICAgIHNhbmRi
b3hGbGFncyA9IG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKHNh
bmRib3gpOworICAgICAgLy8gVE9ETzogd2hhdCB0byBkbyBpZiB0aGlzIGZhaWxzID8gdGhlIGNv
bnRlbnQgd2FzIGludGVuZGVkIHRvIGJlIHNhbmRib3hlZAorICAgICAgLy8gYW5kIGl0IG1heSBu
b3QgYmUgLSBtYXliZSBmYWlsIGNsb3NlZCAoYWxsIHJlc3RyaWN0aW9ucykgPz8/IAorICAgIH0K
KyAgICAgCisgICAgaWYgKHBhcmVudFNhbmRib3hGbGFncykgeyAKKyAgICAgIC8vIGRvIHRoZSBp
bnRlcnNlY3Rpb24gd2l0aCB0aGUgY3VycmVudCBmbGFncyBpbiB0aGUgZG9jc2hlbGwhCisgICAg
ICAKKyAgICAgIC8vIFRPRE86IHByb2JhYmx5IHdhbnQgdG8gbWFrZSB0aGlzIGEgZnVuY3Rpb24g
aW4gbnNDb250ZW50VXRpbHMgCisgICAgICAvLyB0aGlzIGxvZ2ljIHdpbGwgbGlrZWx5IGJlIG5l
ZWRlZCBlbHNld2hlcmUgKGUuZy4gQ1NQIHNhbmRib3ggaW50ZXJzZWN0aW9uKSAKKworICAgICAg
Ly8gaWYgcGFyZW50IGlzIHNhbmRib3hlZCwgY3VycmVudCBkb2NzaGVsbCBpcyBzYW5kYm94ZWQK
KyAgICAgIHNhbmRib3hGbGFncyB8PSBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19TQU5EQk9Y
RUQ7CisgIAorICAgICAgLy8gaWYgY3VycmVudCBkb2NzaGVsbCBoYXMgYWxsb3ctc2FtZS1kb21h
aW4gYnV0IHBhcmVudCBkb2VzIG5vdCwKKyAgICAgIC8vIGNsZWFyIGFsbG93LXNhbWUtZG9tYWlu
CisgICAgICBpZiAoKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FM
TE9XX1NBTUVfRE9NQUlOKSAmJgorICAgICAgICAgICEocGFyZW50U2FuZGJveEZsYWdzICYgbnNJ
RG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfU0FNRV9ET01BSU4pKQorICAgICAgICBzYW5k
Ym94RmxhZ3MgfD0gfm5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1NBTUVfRE9NQUlO
OworICAgICAgCisgICAgICAvLyBpZiBjdXJyZW50IGRvY3NoZWxsIGhhcyBhbGxvdy1zY3JpcHRz
IGJ1dCBwYXJlbnQgZG9lcyBub3QsCisgICAgICAvLyBjbGVhciBhbGxvdy1zY3JpcHRzCisgICAg
ICBpZiAoKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX1ND
UklQVFMpICYmCisgICAgICAgICAgIShwYXJlbnRTYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6
U0FOREJPWF9GTEFHU19BTExPV19TQ1JJUFRTKSkKKyAgICAgICAgc2FuZGJveEZsYWdzIHw9IH5u
c0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19TQ1JJUFRTOworICAgICAgCisgICAgICAg
Ly8gaWYgY3VycmVudCBkb2NzaGVsbCBoYXMgYWxsb3ctdG9wLW5hdmlnYXRpb24gYnV0IHBhcmVu
dCBkb2VzIG5vdCwKKyAgICAgICAvLyBjbGVhciBhbGxvdy10b3AtbmF2aWdhdGlvbgorICAgICAg
IGlmICgoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfVE9Q
X05BVklHQVRJT04pICYmCisgICAgICAgICAgICEocGFyZW50U2FuZGJveEZsYWdzICYgbnNJRG9j
U2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfVE9QX05BVklHQVRJT04pKQorICAgICAgICAgc2Fu
ZGJveEZsYWdzIHw9IH5uc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19UT1BfTkFWSUdB
VElPTjsKKyAgICAgIAorICAgICAgIC8vIGlmIGN1cnJlbnQgZG9jc2hlbGwgaGFzIGFsbG93LWZv
cm1zIGJ1dCBwYXJlbnQgZG9lcyBub3QsCisgICAgICAgLy8gY2xlYXIgYWxsb3ctZm9ybXMKKyAg
ICAgICBpZiAoKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9X
X0ZPUk1fU1VCTUlUKSAmJgorICAgICAgICAgICAhKHBhcmVudFNhbmRib3hGbGFncyAmIG5zSURv
Y1NoZWxsOjpTQU5EQk9YX0ZMQUdTX0FMTE9XX0ZPUk1fU1VCTUlUKSkKKyAgICAgICAgIHNhbmRi
b3hGbGFncyB8PSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfQUxMT1dfRk9STV9TVUJNSVQ7
CisgICAgIH0KKyAgCisgICAgbURvY1NoZWxsLT5TZXRTYW5kYm94RmxhZ3Moc2FuZGJveEZsYWdz
KTsKKyAgICAKKyAgICAvLyBzZXQgdXAgdGhlIGFjdHVhbCBzYW5kYm94aW5nIGFzIHNwZWNpZmll
ZCAKKyAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfU0FO
REJPWEVEKSB7CisgICAgICBpZiAoIShzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJP
WF9GTEFHU19BTExPV19TQU1FX0RPTUFJTikpIHsKKyAgICAgICAgLy8gYWxsb3ctc2FtZS1kb21h
aW4gd2Fzbid0IHNwZWNpZmllZCwgd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lw
YWwgYW5kIAorICAgICAgICAvLyB1c2UgdGhhdCBhcyB0aGUgb3duZXIKKyAgICAgICAgbnNDT01Q
dHI8bnNJUHJpbmNpcGFsPiBudWxsUHJpbmNpcGFsID0gZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3pp
bGxhLm9yZy9udWxscHJpbmNpcGFsOzEiKTsKKyAgICAgICAgbG9hZEluZm8tPlNldE93bmVyKG51
bGxQcmluY2lwYWwpOworICAgICAgfSBlbHNlIHsgCisgICAgICAgIC8vIHVzZSB0aGUgJ25vcm1h
bCcgcHJpbmNpcGFsIGZvciB0aGUgPGlmcmFtZT4gLSBzZWUgbm90ZSBiZWxvdworICAgICAgICBs
b2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKKyAgICAg
IH0KKyAgCisgICAgICBpZiAoIShzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9G
TEFHU19BTExPV19TQ1JJUFRTKSkgeworICAgICAgICBtRG9jU2hlbGwtPlNldEFsbG93SmF2YXNj
cmlwdChmYWxzZSk7CisgICAgICB9CisgICAgCisgICAgICAvLyBfYWx3YXlzXyBkaXNhbGxvdyBw
bHVnaW5zIHdoZW4gc2FuZGJveGVkCisgICAgICBtRG9jU2hlbGwtPlNldEFsbG93UGx1Z2lucyhm
YWxzZSk7CisgICAgfSAKKyAgfQorCisgIGVsc2UgeyAKKyAgICAvLyBub3Qgc2FuZGJveGVkIHNv
IHdlIHVzZSBvdXIgcHJpbmNpcGFsLCBub3QgdGhhdCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGlu
c2lkZSB1cy4gIFRoaXMKKyAgICAvLyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvIHByZXZl
bnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbgorICAgIC8vIHN1YmZyYW1lcyEK
KyAgICBsb2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsK
KyAgfQogCiAgIG5zQ09NUHRyPG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVu
dC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAg
TlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBsb2FkSW5mby0+U2V0UmVmZXJyZXIocmVm
ZXJyZXIpOwogCiAgIC8vIEtpY2sgb2ZmIHRoZSBsb2FkLi4uCmRpZmYgLS1naXQgYS9jb250ZW50
L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3Qu
aAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCisrKyBiL2NvbnRlbnQvYmFz
ZS9zcmMvbnNHa0F0b21MaXN0LmgKQEAgLTkzLDE3ICs5MywyMSBAQCBHS19BVE9NKGFjdHVhdGUs
ICJhY3R1YXRlIikKIEdLX0FUT00oYWRkcmVzcywgImFkZHJlc3MiKQogR0tfQVRPTShhZnRlciwg
ImFmdGVyIikKIEdLX0FUT00oYWZ0ZXJfZW5kLCAiYWZ0ZXJfZW5kIikKIEdLX0FUT00oYWZ0ZXJf
c3RhcnQsICJhZnRlcl9zdGFydCIpCiBHS19BVE9NKGFsaWduLCAiYWxpZ24iKQogR0tfQVRPTShh
bGluaywgImFsaW5rIikKIEdLX0FUT00oYWxsLCAiYWxsIikKIEdLX0FUT00oYWxsb3dldmVudHMs
ICJhbGxvd2V2ZW50cyIpCitHS19BVE9NKGFsbG93Zm9ybXMsICJhbGxvdy1mb3JtcyIpCiBHS19B
VE9NKGFsbG93bmVnYXRpdmVhc3NlcnRpb25zLCAiYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMiKQor
R0tfQVRPTShhbGxvd3NhbWVvcmlnaW4sICJhbGxvdy1zYW1lLW9yaWdpbiIpCitHS19BVE9NKGFs
bG93c2NyaXB0cywgImFsbG93LXNjcmlwdHMiKQorR0tfQVRPTShhbGxvd3RvcG5hdmlnYXRpb24s
ICJhbGxvdy10b3AtbmF2aWdhdGlvbiIpCiBHS19BVE9NKGFsbG93dW50cnVzdGVkLCAiYWxsb3d1
bnRydXN0ZWQiKQogR0tfQVRPTShhbHQsICJhbHQiKQogR0tfQVRPTShhbHRlcm5hdGUsICJhbHRl
cm5hdGUiKQogR0tfQVRPTShhbHdheXMsICJhbHdheXMiKQogR0tfQVRPTShhbmNlc3RvciwgImFu
Y2VzdG9yIikKIEdLX0FUT00oYW5jZXN0b3JPclNlbGYsICJhbmNlc3Rvci1vci1zZWxmIikKIEdL
X0FUT00oX2FuZCwgImFuZCIpCiBHS19BVE9NKGFueSwgImFueSIpCkBAIC04NjksMTYgKzg3Mywx
NyBAQCBHS19BVE9NKHJvd3NwYW4sICJyb3dzcGFuIikKIEdLX0FUT00ocnAsICJycCIpCiBHS19B
VE9NKHJ0LCAicnQiKQogR0tfQVRPTShydGwsICJydGwiKQogR0tfQVRPTShydWJ5LCAicnVieSIp
CiBHS19BVE9NKHJ1bGUsICJydWxlIikKIEdLX0FUT00ocnVsZXMsICJydWxlcyIpCiBHS19BVE9N
KHMsICJzIikKIEdLX0FUT00oc2FtcCwgInNhbXAiKQorR0tfQVRPTShzYW5kYm94LCAic2FuZGJv
eCIpCiBHS19BVE9NKHNiYXR0ciwgInNiYXR0ciIpCiBHS19BVE9NKHNjYWxlLCAic2NhbGUiKQog
R0tfQVRPTShzY2FuLCAic2NhbiIpCiBHS19BVE9NKHNjaGVtZSwgInNjaGVtZSIpCiBHS19BVE9N
KHNjb3BlLCAic2NvcGUiKQogR0tfQVRPTShzY29wZWQsICJzY29wZWQiKQogR0tfQVRPTShzY3Jl
ZW4sICJzY3JlZW4iKQogR0tfQVRPTShzY3JlZW5YLCAic2NyZWVuWCIpCmRpZmYgLS1naXQgYS9j
b250ZW50L2Jhc2Uvc3JjL25zT2JqZWN0TG9hZGluZ0NvbnRlbnQuY3BwIGIvY29udGVudC9iYXNl
L3NyYy9uc09iamVjdExvYWRpbmdDb250ZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25z
T2JqZWN0TG9hZGluZ0NvbnRlbnQuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNPYmplY3RM
b2FkaW5nQ29udGVudC5jcHAKQEAgLTE0NTQsMTcgKzE0NTQsMTcgQEAgbnNPYmplY3RMb2FkaW5n
Q29udGVudDo6TG9hZE9iamVjdChuc0lVUgogICAgIE5TX1BhcnNlQ29udGVudFR5cGUoYVR5cGVI
aW50LCB0eXBlSGludCwgZHVtbXkpOwogICAgIGlmICghdHlwZUhpbnQuSXNFbXB0eSgpKSB7CiAg
ICAgICBjaGFuLT5TZXRDb250ZW50VHlwZSh0eXBlSGludCk7CiAgICAgfQogICB9CiAKICAgLy8g
U2V0IHVwIHRoZSBjaGFubmVsJ3MgcHJpbmNpcGFsIGFuZCBzdWNoLCBsaWtlIG5zRG9jU2hlbGw6
OkRvVVJJTG9hZCBkb2VzCiAgIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcih0aGlz
Q29udGVudC0+Tm9kZVByaW5jaXBhbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhbiwgYVVSSSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFuLCBhVVJJLCB0cnVlLCBmYWxzZSk7CiAKICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hh
bm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW4pOwogICBpZiAoc2Ny
aXB0Q2hhbm5lbCkgewogICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0
IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgc2NyaXB0Q2hhbm5lbC0+CiAgICAgICBTZXRF
eGVjdXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhFQ1VURV9OT1JNQUwpOwogICB9CiAK
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5j
cHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCi0tLSBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtNjgxLDE3ICs2
ODEsMjMgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNldChuc0V2ZQogICAvLyBT
dWJtaXQgb3IgUmVzZXQgdGhlIGZvcm0KICAgbnNyZXN1bHQgcnYgPSBOU19PSzsKICAgaWYgKE5T
X0ZPUk1fUkVTRVQgPT0gYU1lc3NhZ2UpIHsKICAgICBydiA9IERvUmVzZXQoKTsKICAgfQogICBl
bHNlIGlmIChOU19GT1JNX1NVQk1JVCA9PSBhTWVzc2FnZSkgewogICAgIC8vIERvbid0IHN1Ym1p
dCBpZiB3ZSdyZSBub3QgaW4gYSBkb2N1bWVudC4KICAgICBpZiAoZG9jKSB7Ci0gICAgICBydiA9
IERvU3VibWl0KGFFdmVudCk7CisgICAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgaW4gYSBz
YW5kYm94ZWQgZnJhbWUgYW5kIGl0IGRvZXNuJ3QgaGF2ZSAKKyAgICAgIC8vICdhbGxvdy1mb3Jt
cycgaW4gdGhlIHZhbHVlIG9mIGl0cyBzYW5kYm94IGF0dHJpYnV0ZQorICAgICAgUFJVaW50MzIg
c2FuZGJveEZsYWdzID0gZG9jLT5HZXRTYW5kYm94RmxhZ3MoKTsKKyAgICAgIAorICAgICAgaWYg
KCEoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfU0FOREJPWEVEKSB8
fCAKKyAgICAgICAgICAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1Nf
QUxMT1dfRk9STV9TVUJNSVQpKQorICAgICAgICBydiA9IERvU3VibWl0KGFFdmVudCk7CiAgICAg
fQogICB9CiAgIHJldHVybiBydjsKIH0KIAogbnNyZXN1bHQKIG5zSFRNTEZvcm1FbGVtZW50OjpE
b1Jlc2V0KCkKIHsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJ
RnJhbWVFbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVF
bGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxl
bWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1l
bnQuY3BwCkBAIC00MywxNiArNDMsMTggQEAKICNpbmNsdWRlICJuc0lET01HZXRTVkdEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAibnNHa0F0b21z
LmgiCiAjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKICNpbmNsdWRlICJuc01hcHBlZEF0dHJpYnV0
ZXMuaCIKICNpbmNsdWRlICJuc0RPTUVycm9yLmgiCiAjaW5jbHVkZSAibnNSdWxlRGF0YS5oIgog
I2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRlICJuc0RPTVNldHRhYmxlVG9rZW5M
aXN0LmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1v
emlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiBjbGFzcyBuc0hUTUxJRnJh
bWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKIHsKQEAgLTg0
LDMwICs4NiwzOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zQVN0cmluZyYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0
dHJWYWx1ZSYgYVJlc3VsdCk7CiAgIE5TX0lNRVRIT0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVk
KGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0OwogICB2aXJ0dWFsIG5zTWFwUnVsZVRv
QXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3Q7CiAKICAg
dmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoq
YVJlc3VsdCkgY29uc3Q7CiAgIHZpcnR1YWwgbnNYUENDbGFzc0luZm8qIEdldENsYXNzSW5mbygp
OworICAKKyAgdmlydHVhbCBuc3Jlc3VsdCBBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNl
SUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG5zQVN0cmluZyogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgYU5vdGlmeSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitwcm90
ZWN0ZWQ6CisgIG5zUmVmUHRyPG5zRE9NU2V0dGFibGVUb2tlbkxpc3Q+ICBtU2FuZGJveFRva2Vu
TGlzdDsKIH07CiAKIAogTlNfSU1QTF9OU19ORVdfSFRNTF9FTEVNRU5UX0NIRUNLX1BBUlNFUihJ
RnJhbWUpCiAKIAogbnNIVE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZyYW1lRWxlbWVudChhbHJl
YWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJzZXIpCiAgIDogbnNHZW5l
cmljSFRNTEZyYW1lRWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFyc2VyKQogewogfQogCiBuc0hU
TUxJRnJhbWVFbGVtZW50Ojp+bnNIVE1MSUZyYW1lRWxlbWVudCgpCiB7CisgIGlmIChtU2FuZGJv
eFRva2VuTGlzdCkKKyAgICBtU2FuZGJveFRva2VuTGlzdC0+RHJvcFJlZmVyZW5jZSgpOwogfQog
CiAKIE5TX0lNUExfQUREUkVGX0lOSEVSSVRFRChuc0hUTUxJRnJhbWVFbGVtZW50LG5zR2VuZXJp
Y0VsZW1lbnQpCiBOU19JTVBMX1JFTEVBU0VfSU5IRVJJVEVEKG5zSFRNTElGcmFtZUVsZW1lbnQs
bnNHZW5lcmljRWxlbWVudCkKIAogRE9NQ0lfTk9ERV9EQVRBKEhUTUxJRnJhbWVFbGVtZW50LCBu
c0hUTUxJRnJhbWVFbGVtZW50KQogCkBAIC0xNTAsMTYgKzE2MSwyOCBAQCBuc0hUTUxJRnJhbWVF
bGVtZW50OjpHZXRDb250ZW50V2luZG93KG5zCiB9CiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTElG
cmFtZUVsZW1lbnQ6OkdldFNWR0RvY3VtZW50KG5zSURPTURvY3VtZW50ICoqYVJlc3VsdCkKIHsK
ICAgcmV0dXJuIEdldENvbnRlbnREb2N1bWVudChhUmVzdWx0KTsKIH0KIAorTlNfSU1FVEhPRElN
UAorbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U2FuZGJveChuc0lET01ET01TZXR0YWJsZVRva2Vu
TGlzdCoqIGFTYW5kYm94KQoreworICBpZiAoIW1TYW5kYm94VG9rZW5MaXN0KSB7CisgICAgbVNh
bmRib3hUb2tlbkxpc3QgPSBuZXcgbnNET01TZXR0YWJsZVRva2VuTGlzdCh0aGlzLCBuc0drQXRv
bXM6OnNhbmRib3gpOworICB9CisgCisgIE5TX0FERFJFRigqYVNhbmRib3ggPSBtU2FuZGJveFRv
a2VuTGlzdCk7CisgCisgIHJldHVybiBOU19PSzsKK30KKwogYm9vbAogbnNIVE1MSUZyYW1lRWxl
bWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCkKIHsKICAg
aWYgKGFOYW1lc3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgewogICAgIGlmIChhQXR0cmli
dXRlID09IG5zR2tBdG9tczo6bWFyZ2lud2lkdGgpIHsKQEAgLTE3OCwxNiArMjAxLDIwIEBAIG5z
SFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKFBSSW4KICAgICAgIHJldHVybiBQYXJz
ZUZyYW1lYm9yZGVyVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CiAgICAgaWYgKGFBdHRy
aWJ1dGUgPT0gbnNHa0F0b21zOjpzY3JvbGxpbmcpIHsKICAgICAgIHJldHVybiBQYXJzZVNjcm9s
bGluZ1ZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQogICAgIGlmIChhQXR0cmlidXRlID09
IG5zR2tBdG9tczo6YWxpZ24pIHsKICAgICAgIHJldHVybiBQYXJzZUFsaWduVmFsdWUoYVZhbHVl
LCBhUmVzdWx0KTsKICAgICB9CisgICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjpzYW5k
Ym94KSB7CisgICAgICBhUmVzdWx0LlBhcnNlQXRvbUFycmF5KGFWYWx1ZSk7CisgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CiAgIH0KIAogICByZXR1cm4gbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVu
dDo6UGFyc2VBdHRyaWJ1dGUoYU5hbWVzcGFjZUlELCBhQXR0cmlidXRlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHVlLCBhUmVzdWx0KTsK
IH0KIAogc3RhdGljIHZvaWQKIE1hcEF0dHJpYnV0ZXNJbnRvUnVsZShjb25zdCBuc01hcHBlZEF0
dHJpYnV0ZXMqIGFBdHRyaWJ1dGVzLApAQCAtMjY4LDggKzI5NSwyOCBAQCBuc0hUTUxJRnJhbWVF
bGVtZW50OjpJc0F0dHJpYnV0ZU1hcHBlZChjCiAKIAogbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVu
YwogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29u
c3QKIHsKICAgcmV0dXJuICZNYXBBdHRyaWJ1dGVzSW50b1J1bGU7CiB9CiAKK25zcmVzdWx0Citu
c0hUTUxJRnJhbWVFbGVtZW50OjpBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5z
SUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
QVN0cmluZyogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YU5vdGlmeSkKK3sKKyAgaWYgKGFOYW1lID09IG5zR2tBdG9tczo6c2FuZGJveCAmJiBhTmFtZVNw
YWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKKyAgICAvLyBwYXJzZSB0aGUgbmV3IHZhbHVl
IG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSwgYW5kIGlmIHdlIGhhdmUgYSBkb2NzaGVsbAorICAg
IC8vIHNldCBpdHMgc2FuZGJveCBmbGFncyBhcHByb3ByaWF0ZWx5CisgICAgbnNDT01QdHI8bnNJ
RE9NRE9NU2V0dGFibGVUb2tlbkxpc3Q+IHNhbmRib3g7CisgICAgCisgICAgbnNyZXN1bHQgcmVz
dWx0ID0gR2V0U2FuZGJveChnZXR0ZXJfQWRkUmVmcyhzYW5kYm94KSk7CisgICAgLy8gVE9ETyA6
IHdoYXQgdG8gZG8gaWYgdGhpcyBmYWlscyA/IAorICAgIAorICAgIGlmIChtRnJhbWVMb2FkZXIp
CisgICAgICBtRnJhbWVMb2FkZXItPkdldEV4aXN0aW5nRG9jU2hlbGwoKS0+U2V0U2FuZGJveEZs
YWdzKG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKHNhbmRib3gp
KTsKKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6OkFmdGVyU2V0QXR0cihhTmFt
ZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFOb3RpZnkpOworfQorCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25z
RG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9kb2NzaGVs
bC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAK
QEAgLTc1MCwxNyArNzUwLDE4IEBAIG5zRG9jU2hlbGw6Om5zRG9jU2hlbGwoKToKICAgICBtSXNB
cHBUYWIoZmFsc2UpLAogICAgIG1Vc2VHbG9iYWxIaXN0b3J5KGZhbHNlKSwKICAgICBtRmlyZWRV
bmxvYWRFdmVudChmYWxzZSksCiAgICAgbUVPREZvckN1cnJlbnREb2N1bWVudChmYWxzZSksCiAg
ICAgbVVSSVJlc3VsdGVkSW5Eb2N1bWVudChmYWxzZSksCiAgICAgbUlzQmVpbmdEZXN0cm95ZWQo
ZmFsc2UpLAogICAgIG1Jc0V4ZWN1dGluZ09uTG9hZEhhbmRsZXIoZmFsc2UpLAogICAgIG1Jc1By
aW50aW5nT3JQUChmYWxzZSksCi0gICAgbVNhdmluZ09sZFZpZXdlcihmYWxzZSkKKyAgICBtU2F2
aW5nT2xkVmlld2VyKGZhbHNlKSwKKyAgICBtU2FuZGJveEZsYWdzKDApCiAjaWZkZWYgREVCVUcK
ICAgICAsIG1JbkVuc3VyZVNjcmlwdEVudihmYWxzZSkKICNlbmRpZgogewogICAgIG1IaXN0b3J5
SUQgPSArK2dEb2NzaGVsbElEQ291bnRlcjsKICAgICBpZiAoZ0RvY1NoZWxsQ291bnQrKyA9PSAw
KSB7CiAgICAgICAgIE5TX0FTU0VSVElPTihzVVJJRml4dXAgPT0gbnNudWxsLAogICAgICAgICAg
ICAgICAgICAgICAgIkh1aCwgc1VSSUZpeHVwIG5vdCBudWxsIGluIGZpcnN0IG5zRG9jU2hlbGwg
Y3RvciEiKTsKQEAgLTI4NzgsMTYgKzI4NzksNzggQEAgbnNEb2NTaGVsbDo6RmluZEl0ZW1XaXRo
TmFtZShjb25zdCBQUlVuaQogICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKGZvdW5kSXRlbSkgewogICAgICAgICAgICAgLy8gV2UgcmV0dXJu
IGZvdW5kSXRlbSBoZXJlIGV2ZW4gaWYgaXQncyBub3QgYW4gYWN0aXZlCiAgICAgICAgICAgICAv
LyBpdGVtIHNpbmNlIGFsbCB0aGUgbmFtZXMgd2UndmUgZGVhbHQgd2l0aCBzbyBmYXIgYXJlCiAg
ICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2VzIHRoYXQgd2Ugd29uJ3QgYm90aGVyIGxvb2tpbmcg
Zm9yIGZ1cnRoZXIuCiAKKyAgICAgICAgICAgIC8vIElmIG91ciBkb2N1bWVudCBpcyBzYW5kYm94
ZWQsIHdlIG5lZWQgdG8gZG8gc29tZSBleHRyYSBjaGVja3MKKyAgICAgICAgICAgIFBSVWludDMy
IHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1Db250ZW50
Vmlld2VyKSB7CisgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IG1D
b250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICAgICAgICAgICAgICAgIHNhbmRib3hGbGFn
cyA9IGRvYy0+R2V0U2FuZGJveEZsYWdzKCk7CisgICAgICAgICAgICAgICAgLy8gVE9ETyA6IHdo
YXQgdG8gZG8gaWYgYW55IG9mIHRoaXMgZmFpbHMgPyAKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncykgeyAKKyAgICAgICAgICAgICAgICBu
c0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiByb290OworICAgICAgICAgICAgICAgIEdldFNh
bWVUeXBlUm9vdFRyZWVJdGVtKGdldHRlcl9BZGRSZWZzKHJvb3QpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvLyBJcyB0aGUgZm91bmQgaXRlbSBub3QgYSB0b3AgbGV2ZWwg
YnJvd3NpbmcgY29udGV4dCBhbmQgbm90IG91cnNlbGYgPworICAgICAgICAgICAgICAgIG5zQ09N
UHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHNlbGZBc0l0ZW0gPSBzdGF0aWNfY2FzdDxuc0lEb2NT
aGVsbFRyZWVJdGVtICo+KHRoaXMpOworICAgICAgICAgICAgICAgIGlmIChmb3VuZEl0ZW0gIT0g
cm9vdCAmJiBmb3VuZEl0ZW0gIT0gc2VsZkFzSXRlbSkgeyAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAvLyBhcmUgd2UgYW4gYW5jZXN0b3Igb2YgdGhlIGZvdW5kSXRlbSA/IAor
ICAgICAgICAgICAgICAgICAgICBib29sIGlzQW5jZXN0b3IgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0
ZW0+IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQo
Z2V0dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBz
ZWxmQXNJdGVtKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5jZXN0b3IgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVtID0gdG1wOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc0FuY2VzdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBubywg
d2UgYXJlIG5vdCBhbiBhbmNlc3RvciBhbmQgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbid0IGFsbG93IHRoaXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgLSBp
cyBpdCBhbiBhbmNlc3RvciBvZiBvdXJzID8KKyAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50QXNJdGVtOworICAgICAgICAgICAgICAgICAgICBH
ZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJlbnRBc0l0ZW0pKTsKKyAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRS
ZWZzKHRtcCkpOworICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodG1wICYmIHRtcCA9PSBmb3VuZEl0ZW0pIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYW4gYW5jZXN0b3IsIGFuZCB3ZSBhcmUgc2FuZGJveGVkLiAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9wLW5hdmlnYXRpb24gaXMgc2V0LCB3ZSBj
YW4ndCBhbGxvdyB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzYW5kYm94
RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19BTExPV19UT1BfTkFWSUdBVElPTikg
PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxs
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICAKICAgICAgICAgICAgIGZv
dW5kSXRlbS5zd2FwKCpfcmV0dmFsKTsKICAgICAgICAgICAgIHJldHVybiBOU19PSzsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIC8vIEtlZXAgbG9va2luZwogICAgICAgICAKICAgICAvLyBGaXJz
dCB3ZSBjaGVjayBvdXIgbmFtZS4KQEAgLTQ5MjAsMTYgKzQ5ODMsMzIgQEAgbnNEb2NTaGVsbDo6
U2V0SXNBcHBUYWIoYm9vbCBhSXNBcHBUYWIpCiBOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpH
ZXRJc0FwcFRhYihib29sICphSXNBcHBUYWIpCiB7CiAgICphSXNBcHBUYWIgPSBtSXNBcHBUYWI7
CiAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6U2V0U2Fu
ZGJveEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCit7CisgIG1TYW5kYm94RmxhZ3MgPSBh
U2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zRG9j
U2hlbGw6OkdldFNhbmRib3hGbGFncyhQUlVpbnQzMiAgKmFTYW5kYm94RmxhZ3MpCit7CisgIE5T
X0VOU1VSRV9BUkdfUE9JTlRFUihhU2FuZGJveEZsYWdzKTsKKyAgCisgICphU2FuZGJveEZsYWdz
ID0gbVNhbmRib3hGbGFnczsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCiBu
c0RvY1NoZWxsOjpTZXRWaXNpYmlsaXR5KGJvb2wgYVZpc2liaWxpdHkpCiB7CiAgICAgaWYgKCFt
Q29udGVudFZpZXdlcikKICAgICAgICAgcmV0dXJuIE5TX09LOwogICAgIGlmIChhVmlzaWJpbGl0
eSkgewogICAgICAgICBtQ29udGVudFZpZXdlci0+U2hvdygpOwogICAgIH0KICAgICBlbHNlIHsK
QEAgLTgxMDcsMTcgKzgxODYsMjkgQEAgbnNEb2NTaGVsbDo6SW50ZXJuYWxMb2FkKG5zSVVSSSAq
IGFVUkksCiAgICAgICAgIC8vCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHRhcmdldEl0ZW07CiAgICAgICAgIEZpbmRJdGVtV2l0aE5hbWUoYVdpbmRvd1RhcmdldCwgbnNu
dWxsLCB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKHRhcmdl
dEl0ZW0pKTsKIAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gdGFyZ2V0RG9jU2hlbGwg
PSBkb19RdWVyeUludGVyZmFjZSh0YXJnZXRJdGVtKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wg
aXNOZXdXaW5kb3cgPSBmYWxzZTsKLSAgICAgICAgaWYgKCF0YXJnZXREb2NTaGVsbCkgeworICAg
ICAgICBpZiAoIXRhcmdldERvY1NoZWxsKSB7ICAgCisgICAgICAgICAgICAvLyBJZiB0aGUgZG9j
c2hlbGwncyBkb2N1bWVudCBpcyBzYW5kYm94ZWQgYW5kIHdhcyB0cnlpbmcgdG8gbmF2aWdhdGUv
bG9hZCBhIGZyYW1lIGl0IAorICAgICAgICAgICAgLy8gd2Fzbid0IGFsbG93ZWQgdG8gYWNjZXNz
LCB0aGUgRmluZEl0ZW1XaXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQKKyAgICAgICAg
ICAgIC8vIG51bGwgZm9yIHRoZSB0YXJnZXQgaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFs
bHkgb3BlbiBhIG5ldyB3aW5kb3cgaW4KKyAgICAgICAgICAgIC8vIGNhc2UgdGhvdWdoLiBDaGVj
ayBpZiB3ZSBhcmUgc2FuZGJveGVkIGFuZCBiYWlsIG91dCBoZXJlIGlmIHNvLgorICAgICAgICAg
ICAgTlNfRU5TVVJFX1RSVUUobUNvbnRlbnRWaWV3ZXIsIE5TX0VSUk9SX0ZBSUxVUkUpOworICAg
ICAgICAgICAgbnNJRG9jdW1lbnQqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgp
OworICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKyAgICAgICAgICAgIHNh
bmRib3hGbGFncyA9IGRvYy0+R2V0U2FuZGJveEZsYWdzKCk7CisgICAgICAgICAgICBpZiAoc2Fu
ZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hfRkxBR1NfU0FOREJPWEVEKSB7CisgICAg
ICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IHdpbiA9CiAgICAgICAgICAgICAgICAgZG9f
R2V0SW50ZXJmYWNlKEdldEFzU3VwcG9ydHModGhpcykpOwogICAgICAgICAgICAgTlNfRU5TVVJF
X1RSVUUod2luLCBOU19FUlJPUl9OT1RfQVZBSUxBQkxFKTsKIAogICAgICAgICAgICAgbnNEZXBl
bmRlbnRTdHJpbmcgbmFtZShhV2luZG93VGFyZ2V0KTsKICAgICAgICAgICAgIG5zQ09NUHRyPG5z
SURPTVdpbmRvdz4gbmV3V2luOwogICAgICAgICAgICAgcnYgPSB3aW4tPk9wZW4oRW1wdHlTdHJp
bmcoKSwgLy8gVVJMIHRvIGxvYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsICAg
ICAgICAgIC8vIHdpbmRvdyBuYW1lCkBAIC04ODkwLDE3ICs4OTgxLDI4IEBAIG5zRG9jU2hlbGw6
OkRvVVJJTG9hZChuc0lVUkkgKiBhVVJJLAogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4
cGxpY2l0bHkKICAgICAgICAgaWYgKGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAg
ICAgICAgICAgICAvLyBSZWZlcnJlciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlj
a3MgaGVyZS4KICAgICAgICAgICAgIGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJV
UkkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25l
clByaW5jaXBhbChkb19RdWVyeUludGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGls
czo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUp
OworCQorICAgIC8vIElmIHRoZSBjb250ZW50IGlzIHNhbmRib3hlZCwgZm9yY2UgdGhlIHBhc3Nl
ZCBpbiBvd25lciAod2hpY2ggc2hvdWxkIGJlIAorICAgIC8vIGEgbnVsbCBwcmluY2lwYWwpIHRv
IGJlIHNldCBvbiB0aGUgY2hhbm5lbCwgVU5MRVNTIHRoZSBzYW5kYm94IGFsbG93LXNhbWUtZG9t
YWluIGZsYWcgaXMgYWxzbworICAgIC8vIHNldC4gSW4gdGhhdCBjYXNlLCBhbGxvdyB0aGUgY29u
dGVudCB0byBhc3NzdW1lIGl0cyAibmF0dXJhbCBkb21haW4iIGFzIGl0CisgICAgLy8gbm9ybWFs
bHkgd291bGQuIAorICAgIGlmICgobVNhbmRib3hGbGFncyAmIFNBTkRCT1hfRkxBR1NfU0FOREJP
WEVEKSAmJiAKKyAgICAgICAgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YX0ZMQUdTX0FMTE9XX1NB
TUVfRE9NQUlOKSAhPSBTQU5EQk9YX0ZMQUdTX0FMTE9XX1NBTUVfRE9NQUlOKSB7CisgICAgICBu
c0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWws
IGFVUkksIHRydWUsIHRydWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIG5zQ29udGVudFV0
aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1
ZSwgZmFsc2UpOworICAgIH0KIAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENoYW5uZWw+IHNjcmlw
dENoYW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShjaGFubmVsKTsKICAgICBpZiAoc2NyaXB0Q2hh
bm5lbCkgewogICAgICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBvdXIgY29udGV4dCBp
ZiB0aGUgcHJpbmNpcGFscyBtYXRjaAogICAgICAgICBzY3JpcHRDaGFubmVsLT4KICAgICAgICAg
ICAgIFNldEV4ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05PUk1BTCk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaCBiL2RvY3No
ZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCisr
KyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03ODMsMTYgKzc4MywxOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgLy8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBpcyBub3QgZXhwZWN0
ZWQgdG8gY2hhbmdlLgogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1JdGVtVHlwZTsK
IAogICAgIC8vIEluZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwgaW5kaWNhdGluZyB0
aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBhdCB0aGUgdGltZSB0
aGF0IHRoaXMgRG9jU2hlbGwgYmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMyICAgICAgICAgICAg
ICAgICAgICBtUHJldmlvdXNUcmFuc0luZGV4OwogICAgIFBSSW50MzIgICAgICAgICAgICAgICAg
ICAgIG1Mb2FkZWRUcmFuc0luZGV4OwogCisgICAgUFJVaW50MzIgICAgICAgICAgICAgICAgICAg
bVNhbmRib3hGbGFnczsKKyAgICAKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQ3Jl
YXRlZDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJmcmFtZXM7CiAg
ICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAgICBib29sICAg
ICAgICAgICAgICAgICAgICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wgICAgICAgICAg
ICAgICAgICAgICAgIG1BbGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAgICAgICAgICAg
ICAgICAgICAgbUFsbG93SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1B
bGxvd0ROU1ByZWZldGNoOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1dp
bmRvd0NvbnRyb2w7CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbCBi
L2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9j
U2hlbGwuaWRsCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCkBAIC01NDgsOSAr
NTQ4LDQ0IEBAIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiAgICAqLwogICBh
dHRyaWJ1dGUgYm9vbGVhbiBpc0FwcFRhYjsKIAogICAvKioKICAgICogQ3JlYXRlIGEgbmV3IGFi
b3V0OmJsYW5rIGRvY3VtZW50IGFuZCBjb250ZW50IHZpZXdlci4KICAgICogQHBhcmFtIGFQcmlu
Y2lwYWwgdGhlIHByaW5jaXBhbCB0byB1c2UgZm9yIHRoZSBuZXcgZG9jdW1lbnQuCiAgICAqLwog
ICB2b2lkIGNyZWF0ZUFib3V0QmxhbmtDb250ZW50Vmlld2VyKGluIG5zSVByaW5jaXBhbCBhUHJp
bmNpcGFsKTsKKyAgCisgIC8qKiAKKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3No
ZWxsLiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2Yg
dGhlIAorICAgKiBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwg
aWYgZXhpc3RlbnQuIFNlZSB0aGUgSFRNTDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBU
aGVzZSBmbGFncyBvbiB0aGUgZG9jc2hlbGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0
aGUgc2FuZGJveCBhdHRyaWJ1dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuCisgICAqIFRoZXkgYXJl
IG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcgbmV3IGNvbnRlbnQsIHNhbmRib3ggZmxhZ3MgYXJlIGFs
c28gaW1tdXRhYmx5IHNldCBvbiB0aGUgZG9jdW1lbnQKKyAgICogd2hlbiBpdCBpcyBsb2FkZWQu
IFRoZSBzYW5kYm94IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94IGZs
YWdzIG9uIGl0cyBkb2NzaGVsbAorICAgKiBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVudCwgaWYg
YW55LiAKKyAgICovICAgCisgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHNhbmRib3hGbGFnczsK
KyAgCisgIC8qKiAKKyAgICogVGhlIGNvbnRlbnQgaXMgc2FuZGJveGVkIGFuZCBpc29sYXRlZCB3
aXRoIGEgbnVsbCBwcmluY2lwYWwuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRC
T1hfRkxBR1NfU0FOREJPWEVEICA9IDB4MTsgCisgIAorICAvKioKKyAgICogVGhlIGNvbnRlbnQg
aXMgc2FuZGJveGVkIGFuZCBpc29sYXRlZCB3aXRoIG51bGwgcHJpbmNpcGFsIG9yaWdpbmFsbHkg
YnV0IHRvcCBuYXZpZ2F0aW9uIGlzIGFsbG93ZWQuIAorICAgKi8KKyAgY29uc3QgdW5zaWduZWQg
bG9uZyBTQU5EQk9YX0ZMQUdTX0FMTE9XX1RPUF9OQVZJR0FUSU9OID0gMHgyOworICAgCisgIC8q
KgorICAgKiBUaGUgY29udGVudCBpcyBzYW5kYm94ZWQgYnV0IGFsbG93ZWQgdG8gaGF2ZSBpdHMg
bmF0dXJhbCBkb21haW4uIAorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YX0ZM
QUdTX0FMTE9XX1NBTUVfRE9NQUlOID0gMHg0OworICAKKyAgLyoqCisgICAqIFRoZSBjb250ZW50
IGlzIHNhbmRib3hlZCBidXQgZm9ybSBzdWJtaXNzaW9uIGlzIGFsbG93ZWQKKyAgICovCisgIGNv
bnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWF9GTEFHU19BTExPV19GT1JNX1NVQk1JVCA9IDB4ODsg
CisgICAKKyAgLyoqCisgICAqIFRoZSBjb250ZW50IGlzIHNhbmRib3hlZCBidXQgc2NyaXB0IGV4
ZWN1dGlvbiBpcyBhbGxvd2VkCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hf
RkxBR1NfQUxMT1dfU0NSSVBUUyA9IDB4MTA7IAogfTsKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZh
Y2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRt
bC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9u
c0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lE
T01IVE1MSUZyYW1lRWxlbWVudC5pZGwKQEAgLTMzLDE2ICszMywxNyBAQAogICogZGVjaXNpb24g
YnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRo
ZSBub3RpY2UKICAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3Ig
dGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwg
YSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0
aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoK
ICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJuc0lET01I
VE1MRWxlbWVudC5pZGwiCisjaW5jbHVkZSAibnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRs
IgogCiAvKioKICAqIFRoZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2UgaXMgdGhl
IGludGVyZmFjZSB0byBhIFtYXUhUTUwKICAqIGlmcmFtZSBlbGVtZW50LgogICoKICAqIFRoaXMg
aW50ZXJmYWNlIGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lm
aWNhdGlvbjoKICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgpA
QCAtNjEsMTYgKzYyLDE4IEBAIGludGVyZmFjZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCA6IG5z
SUQKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luV2lkdGg7CiAg
ICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG5hbWU7CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNjcm9sbGluZzsKICAgICAgICAgICAgYXR0cmlidXRl
IERPTVN0cmluZyAgICAgICAgc3JjOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAg
ICAgICB3aWR0aDsKICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgcmVhZG9ubHkg
YXR0cmlidXRlIG5zSURPTURvY3VtZW50ICAgY29udGVudERvY3VtZW50OwogICByZWFkb25seSBh
dHRyaWJ1dGUgbnNJRE9NV2luZG93ICAgICBjb250ZW50V2luZG93OwotCisgIAorICAvLyBIVE1M
NSBzYW5kYm94IGF0dHJpYnV0ZQorICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRE9NU2V0dGFi
bGVUb2tlbkxpc3Qgc2FuZGJveDsKIAogICAvLyBNb3ppbGxhIGV4dGVuc2lvbnMKICAgLy8gaWZy
YW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1vekFsbG93RnVsbFNjcmVlbiBhdHRyaWJ1dGUgdG8g
YmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3JlIHRvIGFsbG93IGNvbnRlbnQgaW4gdGhlIHN1YiBk
b2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxsLXNjcmVlbgogICAvLyBtb2RlLiBTZWUgaHR0cHM6
Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBocD90aXRsZT1HZWNrbzpGdWxsU2NyZWVuQVBJCiAg
ICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgIG1vekFsbG93RnVsbFNjcmVlbjsK
IH07CmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9u
c1dpbmRvd1dhdGNoZXIuY3BwIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9z
cmMvbnNXaW5kb3dXYXRjaGVyLmNwcAotLS0gYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3
YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRz
L3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKQEAgLTYwMywxNiArNjAzLDMx
IEBAIG5zV2luZG93V2F0Y2hlcjo6T3BlbldpbmRvd0pTSW50ZXJuYWwobnMKICAgfQogCiAgIGlm
ICghbmV3RG9jU2hlbGxJdGVtKSB7CiAgICAgLy8gV2UncmUgZ29pbmcgdG8gZWl0aGVyIG9wZW4g
dXAgYSBuZXcgd2luZG93IG91cnNlbHZlcyBvciBhc2sgYQogICAgIC8vIG5zSVdpbmRvd1Byb3Zp
ZGVyIGZvciBvbmUuICBJbiBlaXRoZXIgY2FzZSwgd2UnbGwgd2FudCB0byBzZXQgdGhlIHJpZ2h0
CiAgICAgLy8gbmFtZSBvbiBpdC4KICAgICB3aW5kb3dOZWVkc05hbWUgPSB0cnVlOwogCisgICAg
Ly8gSWYgdGhlIHBhcmVudCB0cnlpbmcgdG8gb3BlbiBhIG5ldyB3aW5kb3cgaXMgc2FuZGJveGVk
LCBkb24ndCBhbGxvdworICAgIC8vIHRoZSB3aW5kb3cgb3BlbiB0byBoYXBwZW4KKyAgICBpZiAo
YVBhcmVudCkgeworICAgICAgbnNDT01QdHI8bnNJRE9NRG9jdW1lbnQ+IGRvbWRvYzsKKyAgICAg
IGFQYXJlbnQtPkdldERvY3VtZW50KGdldHRlcl9BZGRSZWZzKGRvbWRvYykpOworICAgICAgbnND
T01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGRvbWRvYyk7CisgICAg
ICAKKyAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgICAgICBzYW5kYm94RmxhZ3Mg
PSBkb2MtPkdldFNhbmRib3hGbGFncygpOworICAKKyAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBu
c0lEb2NTaGVsbDo6U0FOREJPWF9GTEFHU19TQU5EQk9YRUQpIHsKKyAgICAgICAgcmV0dXJuIE5T
X0VSUk9SX0ZBSUxVUkU7CisgICAgICB9CisgICAgfQorICAgIAogICAgIC8vIE5vdyBjaGVjayB3
aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHByb3ZpZGVyIGZvciBhIHdpbmRvdy4gIERv
bid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3BlbmluZyBhIGRpYWxvZyBvciBpZiBvdXIgcGFy
ZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8vIGlmIHdlJ3JlIG9wZW5pbmcgc29tZXRo
aW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNocm9tZSBmbGFncyBzZXQuCiAgICAgbnND
T01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVXaW4gPSBkb19RdWVyeUludGVyZmFjZShh
UGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNocm9tZVdpbiAmJgogICAgICAgICAhKGNo
cm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9NT0RBTCAgICAgICAgIHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfT1BF
TkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJv
bWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsKZGlmZiAtLWdpdCBhL2ltYWdlL3NyYy9pbWdM
b2FkZXIuY3BwIGIvaW1hZ2Uvc3JjL2ltZ0xvYWRlci5jcHAKLS0tIGEvaW1hZ2Uvc3JjL2ltZ0xv
YWRlci5jcHAKKysrIGIvaW1hZ2Uvc3JjL2ltZ0xvYWRlci5jcHAKQEAgLTU1MywxNyArNTUzLDE3
IEBAIHN0YXRpYyBuc3Jlc3VsdCBOZXdJbWFnZUNoYW5uZWwobnNJQ2hhbm4KIAogICAgIGlmIChh
TG9hZEZsYWdzICYgbnNJUmVxdWVzdDo6TE9BRF9CQUNLR1JPVU5EKQogICAgICAgKytwcmlvcml0
eTsgLy8gZnVydGhlciByZWR1Y2UgcHJpb3JpdHkgZm9yIGJhY2tncm91bmQgbG9hZHMKIAogICAg
IHAtPkFkanVzdFByaW9yaXR5KHByaW9yaXR5KTsKICAgfQogCiAgIGJvb2wgc2V0T3duZXIgPSBu
c0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIoYUxvYWRpbmdQcmluY2lwYWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYVJlc3Vs
dCwgYVVSSSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKmFSZXN1bHQsIGFVUkksIGZhbHNlLCBmYWxzZSk7CiAgICphRm9yY2VQ
cmluY2lwYWxDaGVja0ZvckNhY2hlRW50cnkgPSBzZXRPd25lcjsKIAogICByZXR1cm4gTlNfT0s7
CiB9CiAKIHN0YXRpYyBQUlVpbnQzMiBTZWNvbmRzRnJvbVBSVGltZShQUlRpbWUgcHJUaW1lKQog
ewogICByZXR1cm4gUFJVaW50MzIoUFJJbnQ2NChwclRpbWUpIC8gUFJJbnQ2NChQUl9VU0VDX1BF
Ul9TRUMpKTsK
</data>
<flag name="feedback"
          id="481214"
          type_id="607"
          status="-"
          setter="khuey"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>585561</attachid>
            <date>2012-01-03 14:33:03 -0800</date>
            <delta_ts>2012-01-03 16:52:24 -0800</delta_ts>
            <desc>WIP - reworked prototype</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>43239</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZTYxNzlmNDk3Yjc0NjhmNTg3M2NjNTMyYjU5
Njc2MWYzZTRjYTAwMwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtODEsMTYgKzgxLDE3IEBAIHN0YXRpYyBmcF9leGNlcHRfdCBv
bGRtYXNrID0gZnBzZXRtYXNrKH4KICNpbmNsdWRlICJuc0lET01Ob2RlLmgiCiAjaW5jbHVkZSAi
bnNIdG1sNVBhcnNlci5oIgogI2luY2x1ZGUgIm5zSUZyYWdtZW50Q29udGVudFNpbmsuaCIKICNp
bmNsdWRlICJuc01hdGhVdGlscy5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9BdXRvUmVzdG9yZS5o
IgogI2luY2x1ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96aWxsYS9U
aW1lU3RhbXAuaCIKKyNpbmNsdWRlICJuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdC5oIgogCiBz
dHJ1Y3QgbnNOYXRpdmVLZXlFdmVudDsgLy8gRG9uJ3QgaW5jbHVkZSBuc0lOYXRpdmVLZXlCaW5k
aW5ncy5oIGhlcmU6IGl0IHdpbGwgZm9yY2Ugc3RyYW5nZSBjb21waWxhdGlvbiBlcnJvciEKIAog
Y2xhc3MgbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9yeTsKIGNsYXNzIG5zSVhQQ29ubmVjdDsKIGNs
YXNzIG5zSUNvbnRlbnQ7CiBjbGFzcyBuc0lET01LZXlFdmVudDsKIGNsYXNzIG5zSURvY3VtZW50
OwpAQCAtMTgwNCw0MyArMTgwNSw1NSBAQCBwdWJsaWM6CiAgICAqIGZyb20gdGhlIGRvY3VtZW50
IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQgVVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsKIAogICAvKioKICAgICog
U2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRoZSBnaXZlbiBjaGFubmVs
LCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBvZiBhQ2hhbm5lbC4gIGFQ
cmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JBYm91dEJsYW5rIGlzIHRy
dWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAg
b24gaXQuCi0gICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LiBJZiBhRm9yY2VP
d25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQgb24gdGhlIGNoYW5uZWws
IGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAorICAgKiBmcm9tIHRoZSBj
aGFubmVsLgogICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIgdGhlIHByaW5jaXBhbCB3
YXMgc2V0IHVwIGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5lbC4KICAgICovCiAgIHN0
YXRpYyBib29sIFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lw
YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuayk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lciA9IGZhbHNlKTsK
IAogICBzdGF0aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhLAog
ICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJhc2U2NFN0cmluZyk7CiAK
ICAgc3RhdGljIG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBhQXNjaWlTdHJpbmcsCiAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURhdGEpOwogCiAgIC8qKgog
ICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFzc2VkIGluIHBhcmFtZXRl
ciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0eSBlbmFibGVkLiBJdCBp
cyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAgKiBmdW5jdGlvbmFsaXR5
IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIuCiAgICAq
IE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29tcGxldGUgbWFrZXMgc2Vu
c2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAgICogQHBhcmFtIGFJbnB1
dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0IGNhbid0IGJlIG51bGwu
CiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBoYXMgYXV0b2NvbXBsZXRl
IGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21wbGV0ZUVuYWJsZWQobnNJ
RE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIAorICAvKioKKyAgICogQSBoZWxwZXIgZnVu
Y3Rpb24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IK
KyAgICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFn
cyB1c2VkIGludGVybmFsbHkuCisgICAqCisgICAqIEBwYXJhbSBhQXR0cmlidXRlIAl0aGUgdmFs
dWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisgICAqIEByZXR1cm4gCQkJdGhlIHNldCBvZiBm
bGFncworICAgKi8KKyAgc3RhdGljIFBSVWludDMyIFBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxh
Z3MoY29uc3QgbnNBU3RyaW5nJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNhbmRib3hBdHRyKTsKKwogcHJpdmF0ZToKICAgc3RhdGljIGJvb2wgSW5p
dGlhbGl6ZUV2ZW50VGFibGUoKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgRW5zdXJlU3RyaW5nQnVu
ZGxlKFByb3BlcnRpZXNGaWxlIGFGaWxlKTsKIAogICBzdGF0aWMgbnNJRE9NU2NyaXB0T2JqZWN0
RmFjdG9yeSAqR2V0RE9NU2NyaXB0T2JqZWN0RmFjdG9yeSgpOwogCiAgIHN0YXRpYyBuc3Jlc3Vs
dCBIb2xkU2NyaXB0T2JqZWN0KFBSVWludDMyIGFMYW5nSUQsIHZvaWQqIGFPYmplY3QpOwpkaWZm
IC0tZ2l0IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oIGIvY29udGVudC9iYXNl
L3B1YmxpYy9uc0lEb2N1bWVudC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1l
bnQuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKQEAgLTExOSwxOCAr
MTE5LDE4IEBAIGNsYXNzIExvYWRlcjsKIAogbmFtZXNwYWNlIGRvbSB7CiBjbGFzcyBMaW5rOwog
Y2xhc3MgRWxlbWVudDsKIH0gLy8gbmFtZXNwYWNlIGRvbQogfSAvLyBuYW1lc3BhY2UgbW96aWxs
YQogCiAjZGVmaW5lIE5TX0lET0NVTUVOVF9JSUQgXAoteyAweDI4M2VjMjdkLCAweDViMjMsIDB4
NDliMiwgXA0KLSAgeyAweDk0LCAweGQ5LCAweDksIDB4YjUsIDB4ZGIsIDB4NDUsIDB4MzAsIDB4
NzMgfSB9DQoreyAweDU3ZmU0NGFlLCAweDY2NTYsIDB4NDRiOCwgXAorICB7IDB4OGQsIDB4YzAs
IDB4ZmMsIDB4YTcsIDB4NDMsIDB4MjgsIDB4YmUsIDB4ODYgfSB9CiAKIAogLy8gRmxhZyBmb3Ig
QWRkU3R5bGVTaGVldCgpLgogI2RlZmluZSBOU19TVFlMRVNIRUVUX0ZST01fQ0FUQUxPRyAgICAg
ICAgICAgICAgICAoMSA8PCAwKQogCiAvLyBFbnVtIGZvciByZXF1ZXN0aW5nIGEgcGFydGljdWxh
ciB0eXBlIG9mIGRvY3VtZW50IHdoZW4gY3JlYXRpbmcgYSBkb2MKIGVudW0gRG9jdW1lbnRGbGF2
b3IgewogICBEb2N1bWVudEZsYXZvckxlZ2FjeUd1ZXNzLCAvLyBjb21wYXQgd2l0aCBvbGQgY29k
ZSB1bnRpbCBtYWRlIEhUTUw1LWNvbXBsaWFudApAQCAtNDU4LDE2ICs0NTgsMzcgQEAgcHVibGlj
OgogICAgKiBAc2VlIG5zQmlkaVV0aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9wdGlvbnMo
UFJVaW50MzIgYUJpZGlPcHRpb25zKQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJpZGlPcHRp
b25zOwogICB9CiAgIAogICAvKioKKyAgICogU2V0IHRoZSBzYW5kYm94IGZsYWdzIGZvciB0aGlz
IGRvY3VtZW50LiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbgorICAgKiBhdCBkb2N1bWVudCBsb2Fk
LCB0aGUgZmxhZ3MgYXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgYXQgbG9hZCB0aW1lLgor
ICAgKiBAc2VlIG5zSURvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzCisgICAqLwor
ICB2b2lkIFNldFNhbmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQorICB7CisgICAg
TlNfQVNTRVJUSU9OKEdldFJlYWR5U3RhdGVFbnVtKCkgPT0gUkVBRFlTVEFURV9MT0FESU5HLCAi
c2FuZGJveCBmbGFncyBcCisgICAgICBiZWluZyBzZXQgYW5kIHdlJ3JlIG5vdCBpbiBhIGxvYWRp
bmcgc3RhdGUgPz8iKTsKKyAgICBtU2FuZGJveEZsYWdzID0gYVNhbmRib3hGbGFnczsKKyAgfQor
CisgIC8qKgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQuCisg
ICAqIEBzZWUgbnNJRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisg
IFBSVWludDMyIEdldFNhbmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRi
b3hGbGFnczsKKyAgfQorCisgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhp
cyBtYXkgYWxzbyBnZXQgc2V0IGZyb20gb3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1F
VEEgdGFncykuCiAgICAqLwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBh
SGVhZGVyRmllbGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lk
IFNldEhlYWRlckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFE
YXRhKSA9IDA7CiAKICAgLyoqCiAgICAqIENyZWF0ZSBhIG5ldyBwcmVzZW50YXRpb24gc2hlbGwg
dGhhdCB3aWxsIHVzZSBhQ29udGV4dCBmb3IgaXRzCkBAIC0xNzkzLDE2ICsxODE0LDIxIEBAIHBy
b3RlY3RlZDoKICAgLy8gSWYgbUlzU3RhdGljRG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9j
dW1lbnQgcG9pbnRzIHRvIHRoZSBvcmlnaW5hbAogICAvLyBkb2N1bWVudC4KICAgbnNDT01QdHI8
bnNJRG9jdW1lbnQ+IG1PcmlnaW5hbERvY3VtZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMg
Zm9yIHRoaXMgZG9jdW1lbnQuICBXaGF0IHRoaXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVm
aW5lZCBpbiBuc0JpZGlVdGlscy5oCiAgIFBSVWludDMyIG1CaWRpT3B0aW9uczsKIAorICAvLyBU
aGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9jdW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVl
IG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSBvZiB0aGUKKyAgLy8gYXNzb2NpYXRlZCBJRlJBTUUg
b3IgQ1NQLXByb3RlY3RhYmxlIGNvbnRlbnQsIGlmIGV4aXN0ZW50LiBUaGVzZSBhcmUgc2V0IGF0
IGxvYWQgdGltZSBhbmQKKyAgLy8gYXJlIGltbXV0YWJsZSAtIHNlZSBuc0lEb2NTaGVsbC5pZGwg
Zm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgUFJVaW50MzIgbVNhbmRib3hGbGFnczsKKwogICBu
c0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVu
dFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhlIGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwog
ICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29u
dGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29u
dGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAor
KysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcApAQCAtMjAxLDE2ICsyMDEs
MTcgQEAgc3RhdGljIE5TX0RFRklORV9DSUQoa1hURlNlcnZpY2VDSUQsIE5TXwogI2luY2x1ZGUg
Im5zQ29udGVudERMRi5oIgogI2lmZGVmIE1PWl9NRURJQQogI2luY2x1ZGUgIm5zSFRNTE1lZGlh
RWxlbWVudC5oIgogI2VuZGlmCiAjaW5jbHVkZSAibnNET01Ub3VjaEV2ZW50LmgiCiAjaW5jbHVk
ZSAibnNJU2NyaXB0RWxlbWVudC5oIgogI2luY2x1ZGUgIm5zSUNvbnRlbnRWaWV3ZXIuaCIKICNp
bmNsdWRlICJuc0lPYmplY3RMb2FkaW5nQ29udGVudC5oIgorI2luY2x1ZGUgIm5zQ2hhclNlcGFy
YXRlZFRva2VuaXplci5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNlcy5oIgogCiAj
aW5jbHVkZSAibnNXcmFwcGVyQ2FjaGVJbmxpbmVzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3pp
bGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwogdXNpbmcgbmFtZXNw
YWNlIG1vemlsbGE6OndpZGdldDsKQEAgLTY4OCwxNiArNjg5LDYzIEBAIG5zQ29udGVudFV0aWxz
OjpHZXRQYXJzZXJTZXJ2aWNlKCkKICAgICBuc3Jlc3VsdCBydiA9IENhbGxHZXRTZXJ2aWNlKGtQ
YXJzZXJTZXJ2aWNlQ0lELCAmc1BhcnNlclNlcnZpY2UpOwogICAgIGlmIChOU19GQUlMRUQocnYp
KSB7CiAgICAgICBzUGFyc2VyU2VydmljZSA9IG5zbnVsbDsKICAgICB9CiAgIH0KIAogICByZXR1
cm4gc1BhcnNlclNlcnZpY2U7CiB9CisvKioKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFy
c2VzIGEgc2FuZGJveCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgKiBhIENTUCBkaXJl
Y3RpdmUpIGFuZCBjb252ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxs
eS4KKyAqCisgKiBAcGFyYW0gYUF0dHJpYnV0ZSAgICB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3gg
YXR0cmlidXRlCisgKiBAcmV0dXJuICAgICAgICAgICAgICB0aGUgc2V0IG9mIGZsYWdzCisgKi8K
K1BSVWludDMyCituc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhj
b25zdCBuc0FTdHJpbmcmIHNhbmRib3hBdHRyVmFsdWUpCit7CisgIC8vIElmIHRoZXJlJ3MgYSBz
YW5kYm94IGF0dHJpYnV0ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBpZiB0aGlzIGlzIGJlaW5nCisg
IC8vIGNhbGxlZCksIHN0YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0aGUgcmVzdHJpY3Rpb24gZmxh
Z3MuCisgIFBSVWludDMyIG91dCA9IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfTkFWSUdBVElPTiB8
CisgICAgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FUSU9OIHwKKyAgICBu
c0lEb2NTaGVsbDo6U0FOREJPWEVEX1BMVUdJTlMgfCBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09S
SUdJTiB8CisgICAgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9GT1JNUyB8IG5zSURvY1NoZWxsOjpT
QU5EQk9YRURfU0NSSVBUUyB8CisgICAgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9BVVRPTUFUSUNf
RkVBVFVSRVM7CisKKyAgaWYgKCFzYW5kYm94QXR0clZhbHVlLklzRW1wdHkoKSkgeworICAgIC8v
IFRoZSBzZXBhcmF0b3Igb3B0aW9uYWwgZmxhZyBpcyB1c2VkIGJlY2F1c2UgdGhlIEhUTUw1IHNw
ZWMgc2F5cyBhbnkKKyAgICAvLyB3aGl0ZXNwYWNlIGlzIG9rIGFzIGEgc2VwYXJhdG9yLCB3aGlj
aCBpcyB3aGF0IHRoaXMgZG9lcy4KKyAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXJUZW1wbGF0
ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hpdGVzcGFjZT4KKyAgICAgIHRva2VuaXplcihzYW5k
Ym94QXR0clZhbHVlLCAnICcsCisgICAgICAgIG5zQ2hhclNlcGFyYXRlZFRva2VuaXplclRlbXBs
YXRlPG5zQ29udGVudFV0aWxzOjpJc0hUTUxXaGl0ZXNwYWNlPjo6U0VQQVJBVE9SX09QVElPTkFM
KTsKKworICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7CisgICAgICBuc0Rl
cGVuZGVudFN1YnN0cmluZyB0b2tlbiA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKworICAgICAg
aWYgKG5zR2tBdG9tczo6YWxsb3dzY3JpcHRzLT5FcXVhbHModG9rZW4pKSB7CisgICAgICAgIG91
dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9TQ1JJUFRTOworICAgICAgfSBlbHNlIGlmIChu
c0drQXRvbXM6OmFsbG93c2FtZW9yaWdpbi0+RXF1YWxzKHRva2VuKSkgeworICAgICAgICBvdXQg
Jj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOOworICAgICAgfSBlbHNlIGlmIChuc0dr
QXRvbXM6OmFsbG93Zm9ybXMtPkVxdWFscyh0b2tlbikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lE
b2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TOworICAgICAgfSBlbHNlIGlmIChuc0drQXRvbXM6OmFs
bG93c2NyaXB0cy0+RXF1YWxzKHRva2VuKSkgeworICAgICAgICAvLyBhbGxvdy1zY3JpcHRzIHJl
bW92ZXMgYm90aCBTQU5EQk9YRURfU0NSSVBUUyBhbmQKKyAgICAgICAgLy8gU0FOREJPWEVEX0FV
VE9NQVRJQ19GRUFUVVJFUy4KKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVE
X1NDUklQVFM7CisgICAgICAgIG91dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9BVVRPTUFU
SUNfRkVBVFVSRVM7CisgICAgICB9IGVsc2UgaWYgKG5zR2tBdG9tczo6YWxsb3d0b3BuYXZpZ2F0
aW9uLT5FcXVhbHModG9rZW4pKSB7CisgICAgICAgIG91dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRC
T1hFRF9UT1BMRVZFTF9OQVZJR0FUSU9OOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVy
biBvdXQ7Cit9CiAKICNpZmRlZiBNT1pfWFRGCiBuc0lYVEZTZXJ2aWNlKgogbnNDb250ZW50VXRp
bHM6OkdldFhURlNlcnZpY2UoKQogewogICBpZiAoIXNYVEZTZXJ2aWNlKSB7CiAgICAgbnNyZXN1
bHQgcnYgPSBDYWxsR2V0U2VydmljZShrWFRGU2VydmljZUNJRCwgJnNYVEZTZXJ2aWNlKTsKICAg
ICBpZiAoTlNfRkFJTEVEKHJ2KSkgewpAQCAtNTc2OSwxNyArNTgxNywxOCBAQCBuc0NvbnRlbnRV
dGlsczo6VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFSZXN1bHQpOwogfQogCiAvLyBzdGF0aWMKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpTZXRV
cENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIpCiB7CiAgIC8vCiAgIC8v
IFNldCB0aGUgb3duZXIgb2YgdGhlIGNoYW5uZWwsIGJ1dCBvbmx5IGZvciBjaGFubmVscyB0aGF0
IGNhbid0CiAgIC8vIHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQuCiAgIC8vCiAg
IC8vIFhYWDogSXQgc2VlbXMgd3JvbmcgdGhhdCB0aGUgb3duZXIgaXMgaWdub3JlZCAtIGV2ZW4g
aWYgb25lIGlzCiAgIC8vICAgICAgc3VwcGxpZWQpIHVubGVzcyB0aGUgVVJJIGlzIGphdmFzY3Jp
cHQgb3IgZGF0YSBvciBhYm91dDpibGFuay4KICAgLy8gWFhYOiBJZiB0aGlzIGlzIGV2ZXIgY2hh
bmdlZCwgY2hlY2sgYWxsIGNhbGxlcnMgZm9yIHdoYXQgb3duZXJzCkBAIC01Nzg3LDIzICs1ODM2
LDI3IEBAIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmkKICAgLy8gICAg
ICBjb21tZW50cyBpbiBuc0RvY1NoZWxsOjpMb2FkVVJJIHdoZXJlIHdlIGZhbGwgYmFjayBvbgog
ICAvLyAgICAgIGluaGVyaXRpbmcgdGhlIG93bmVyIGlmIGNhbGxlZCBmcm9tIGNocm9tZS4gIFRo
YXQgd291bGQgYmUKICAgLy8gICAgICB2ZXJ5IHdyb25nIGlmIHRoaXMgY29kZSBjaGFuZ2VkIGFu
eXRoaW5nIGJ1dCBjaGFubmVscyB0aGF0CiAgIC8vICAgICAgY2FuJ3QgcHJvdmlkZSB0aGVpciBv
d24gc2VjdXJpdHkgY29udGV4dCEKICAgLy8KICAgLy8gICAgICAoQ3VycmVudGx5IGNocm9tZSBV
UklzIHNldCB0aGUgb3duZXIgd2hlbiB0aGV5IGFyZSBjcmVhdGVkIQogICAvLyAgICAgIFNvIHNl
dHRpbmcgYSBOVUxMIG93bmVyIHdvdWxkIGJlIGJhZCEpCiAgIC8vCisgIC8vIElmIGFGb3JjZU93
bmVyIGlzIHRydWUsIHRoZSBvd25lciB3aWxsIGJlIHNldCwgZXZlbiBmb3IgYSBjaGFubmVsIHRo
YXQKKyAgLy8gY2FuIHByb3ZpZGUgaXRzIG93biBzZWN1cml0eSBjb250ZXh0LiBUaGlzIGlzIHVz
ZWQgZm9yIHRoZSBIVE1MNSBJRlJBTUUKKyAgLy8gc2FuZGJveCBhdHRyaWJ1dGUsIHNvIHdlIGNh
biBmb3JjZSB0aGUgY2hhbm5lbCAoYW5kIGl0cyBkb2N1bWVudCkgdG8KKyAgLy8gZXhwbGljaXRs
eSBoYXZlIGEgbnVsbCBwcmluY2lwYWwuCiAgIGJvb2wgaW5oZXJpdDsKICAgLy8gV2UgZXhwZWN0
IFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0IHRvIHJldHVybiBzdWNjZXNzIGZvciBhbgogICAv
LyBhYm91dDpibGFuayBVUkksIHNvIGRvbid0IGNhbGwgTlNfSXNBYm91dEJsYW5rKCkgaWYgdGhp
cyBjYWxsIGZhaWxzLgogICAvLyBUaGlzIGNvbmRpdGlvbiBuZWVkcyB0byBtYXRjaCB0aGUgb25l
IGluIG5zRG9jU2hlbGw6OkludGVybmFsTG9hZCB3aGVyZQogICAvLyB3ZSdyZSBjaGVja2luZyBm
b3IgdGhpbmdzIHRoYXQgd2lsbCB1c2UgdGhlIG93bmVyLgotICBpZiAoTlNfU1VDQ0VFREVEKFVS
SUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkksICZpbmhlcml0KSkgJiYKLSAgICAgIChpbmhl
cml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSB7
CisgIGlmIChhRm9yY2VPd25lciB8fCAoKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5
Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYmCisgICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9y
QWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkpKSB7CiAgICAgYUNoYW5uZWwt
PlNldE93bmVyKGFMb2FkaW5nUHJpbmNpcGFsKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAg
IC8vCiAgIC8vIGZpbGU6IHVyaSBzcGVjaWFsLWNhc2luZwogICAvLwogICAvLyBJZiB0aGlzIGlz
IGEgZmlsZTogbG9hZCBvcGVuZWQgZnJvbSBhbm90aGVyIGZpbGU6IHRoZW4gaXQgbWF5IG5lZWQK
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAgYi9jb250ZW50L2Jh
c2Uvc3JjL25zRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5j
cHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcApAQCAtMjM4MSwxNiArMjM4
MSwyNSBAQCBuc0RvY3VtZW50OjpTdGFydERvY3VtZW50TG9hZChjb25zdCBjaGFyCiAgICAgRmlu
ZENoYXJJblJlYWRhYmxlKCc7Jywgc2VtaWNvbG9uLCBlbmQpOwogICAgIFNldENvbnRlbnRUeXBl
SW50ZXJuYWwoU3Vic3RyaW5nKHN0YXJ0LCBzZW1pY29sb24pKTsKICAgfQogCiAgIFJldHJpZXZl
UmVsZXZhbnRIZWFkZXJzKGFDaGFubmVsKTsKIAogICBtQ2hhbm5lbCA9IGFDaGFubmVsOwogCisg
IC8vIElmIHRoaXMgZG9jdW1lbnQgaXMgYmVpbmcgbG9hZGVkIGJ5IGEgZG9jc2hlbGwsIGNvcHkg
aXRzIHNhbmRib3ggZmxhZ3MKKyAgLy8gdG8gdGhlIGRvY3VtZW50LiBUaGVzZSBhcmUgaW1tdXRh
YmxlIGFmdGVyIGJlaW5nIHNldCBoZXJlLgorICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hl
bGwgPSBkb19RdWVyeUludGVyZmFjZShhQ29udGFpbmVyKTsKKworICBpZiAoZG9jU2hlbGwpIHsK
KyAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTYW5kYm94RmxhZ3MoJm1TYW5kYm94Rmxh
Z3MpOworICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgIH0KKwogICBuc3Jlc3VsdCBy
diA9IEluaXRDU1AoKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICByZXR1cm4g
TlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0RvY3VtZW50OjpJbml0Q1NQKCkKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25z
RnJhbWVMb2FkZXIuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAK
KysrIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcApAQCAtMTEzLDE2ICsxMTMs
MTggQEAKICNpbmNsdWRlICJtb3ppbGxhL0d1YXJkT2JqZWN0cy5oIgogI2luY2x1ZGUgIm1vemls
bGEvUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJtb3ppbGxhL3VudXNlZC5oIgogI2luY2x1ZGUg
Im1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNpbmNsdWRlICJtb3ppbGxhL2xheW91dC9SZW5kZXJG
cmFtZVBhcmVudC5oIgogCiAjaW5jbHVkZSAianNhcGkuaCIKIAorI2luY2x1ZGUgIm5zSFRNTElG
cmFtZUVsZW1lbnQuaCIKKwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3Bh
Y2UgbW96aWxsYTo6ZG9tOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmxheWVyczsKIHVzaW5n
IG5hbWVzcGFjZSBtb3ppbGxhOjpsYXlvdXQ7CiB0eXBlZGVmIEZyYW1lTWV0cmljczo6Vmlld0lE
IFZpZXdJRDsKIAogY2xhc3MgbnNBc3luY0RvY1NoZWxsRGVzdHJveWVyIDogcHVibGljIG5zUnVu
bmFibGUKIHsKQEAgLTQ2OCwyMCArNDcwLDc3IEBAIG5zRnJhbWVMb2FkZXI6OlJlYWxseVN0YXJ0
TG9hZGluZ0ludGVybmEKICAgLy8gSnVzdCB0byBiZSBzYWZlLCByZWNoZWNrIHVyaS4KICAgcnYg
PSBDaGVja1VSSUxvYWQobVVSSVRvTG9hZCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7
CiAKICAgbnNDT01QdHI8bnNJRG9jU2hlbGxMb2FkSW5mbz4gbG9hZEluZm87CiAgIG1Eb2NTaGVs
bC0+Q3JlYXRlTG9hZEluZm8oZ2V0dGVyX0FkZFJlZnMobG9hZEluZm8pKTsKICAgTlNfRU5TVVJF
X1RSVUUobG9hZEluZm8sIE5TX0VSUk9SX0ZBSUxVUkUpOwogCi0gIC8vIFdlJ2xsIHVzZSBvdXIg
cHJpbmNpcGFsLCBub3QgdGhhdCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRo
aXMKLSAgLy8gaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tz
IG9uIGRvY3VtZW50cyBsb2FkZWQgaW4KLSAgLy8gc3ViZnJhbWVzIQotICBsb2FkSW5mby0+U2V0
T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKKyAgLy8gSXMgdGhpcyBhbiA8
aWZyYW1lPiB3aXRoIGEgc2FuZGJveCBhdHRyaWJ1dGUgb3IgYSBwYXJlbnQgd2hpY2ggaXMKKyAg
Ly8gc2FuZGJveGVkID8KKyAgbnNIVE1MSUZyYW1lRWxlbWVudCAqIGlmcmFtZSA9CisgICAgbnNI
VE1MSUZyYW1lRWxlbWVudDo6RnJvbUNvbnRlbnQobU93bmVyQ29udGVudCk7CisKKyAgaWYgKGlm
cmFtZSkgeworICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IGlmcmFtZS0+R2V0U2FuZGJveEZs
YWdzKCk7CisKKyAgICBQUlVpbnQzMiBwYXJlbnRTYW5kYm94RmxhZ3MgPSAwOworCisgICAgLy8g
R2V0IHRoZSBwYXJlbnQncyBzYW5kYm94IGZsYWdzLCB0aGV5J3JlIG5lZWRlZCB0byBkZXRlcm1p
bmUgaWYgdGhlCisgICAgLy8gZnJhbWUgYmVpbmcgbG9hZGVkIG5lZWRzIHRvIGJlIHNhbmRib3hl
ZC4KKyAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnREb2NTaGVsbEl0ZW07
CisgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gY3VyRG9jU2hlbGxJdGVtID0gZG9f
UXVlcnlJbnRlcmZhY2UobURvY1NoZWxsKTsKKworICAgIGlmIChOU19TVUNDRUVERUQoY3VyRG9j
U2hlbGxJdGVtLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50RG9jU2hlbGxJdGVtKSkp
KSB7CisgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gcGFyZW50RG9jID0gZG9fR2V0SW50ZXJm
YWNlKHBhcmVudERvY1NoZWxsSXRlbSk7CisKKyAgICAgIGlmIChwYXJlbnREb2MpIHsKKyAgICAg
ICAgcGFyZW50U2FuZGJveEZsYWdzID0gcGFyZW50RG9jLT5HZXRTYW5kYm94RmxhZ3MoKTsKKyAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2FuZGJveEZsYWdzIHx8IHBhcmVudFNhbmRib3hGbGFn
cykgeworICAgICAgaWYgKHBhcmVudFNhbmRib3hGbGFncykgeworICAgICAgICAvLyBUaGUgY2hp
bGQgY2FuIG9ubHkgYWRkIHJlc3RyaWN0aW9ucywgbm90IHJlbW92ZSB0aGVtLgorICAgICAgICBz
YW5kYm94RmxhZ3MgfD0gcGFyZW50U2FuZGJveEZsYWdzOworICAgICAgfQorCisgICAgICBtRG9j
U2hlbGwtPlNldFNhbmRib3hGbGFncyhzYW5kYm94RmxhZ3MpOworCisgICAgICAvLyBTZXQgdXAg
dGhlIGFjdHVhbCBzYW5kYm94aW5nIGFzIHNwZWNpZmllZC4KKyAgICAgIGlmIChzYW5kYm94Rmxh
Z3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikgeworICAgICAgICAvLyBhbGxvdy1z
YW1lLWRvbWFpbiB3YXNuJ3Qgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBudWxs
IHByaW5jaXBhbCBhbmQKKyAgICAgICAgLy8gdXNlIHRoYXQgYXMgdGhlIG93bmVyLgorICAgICAg
ICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG51bGxQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0YW5j
ZSgiQG1vemlsbGEub3JnL251bGxwcmluY2lwYWw7MSIpOworICAgICAgICBsb2FkSW5mby0+U2V0
T3duZXIobnVsbFByaW5jaXBhbCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBVc2UgdGhl
ICdub3JtYWwnIHByaW5jaXBhbCBmb3IgdGhlIDxpZnJhbWU+LgorICAgICAgICBsb2FkSW5mby0+
U2V0T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKKyAgICAgIH0KKworICAg
ICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfU0NSSVBUUykgewor
ICAgICAgICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dKYXZhc2NyaXB0KGZhbHNlKTsKKyAgICAgIH0K
KworICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfUExVR0lO
UykgeworICAgICAgICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dQbHVnaW5zKGZhbHNlKTsKKyAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICAgLy8gV2UgYXJlIG5vdCBzYW5kYm94ZWQgLSB3ZSB1
c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlCisgICAgICAgICAvLyBkb2N1bWVudCBs
b2FkZWQgaW5zaWRlIHVzLiAgVGhpcyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvCisgICAg
ICAgICAvLyBwcmV2ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBsb2FkZWQgaW4gc3ViZnJh
bWVzIQorICAgICAgICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmlu
Y2lwYWwoKSk7CisgICAgfQorICB9IGVsc2UgeworICAgICAgLy8gTm90IGFuIGlmcmFtZSBhbmQg
bm90IHNhbmRib3hlZCwgd2UgdXNlIG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZQorICAg
ICAgLy8gZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQ7
IG5lZWRlZCB0bworICAgICAgLy8gcHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9h
ZGVkIGluIHN1YmZyYW1lcyEKKyAgICAgIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50
LT5Ob2RlUHJpbmNpcGFsKCkpOworICB9CiAKICAgbnNDT01QdHI8bnNJVVJJPiByZWZlcnJlcjsK
ICAgcnYgPSBtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRk
UmVmcyhyZWZlcnJlcikpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIGxvYWRJ
bmZvLT5TZXRSZWZlcnJlcihyZWZlcnJlcik7CiAKICAgLy8gS2ljayBvZmYgdGhlIGxvYWQuLi4K
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmggYi9jb250ZW50L2Jh
c2Uvc3JjL25zR2tBdG9tTGlzdC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0
LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaApAQCAtOTMsMTcgKzkzLDIx
IEBAIEdLX0FUT00oYWN0dWF0ZSwgImFjdHVhdGUiKQogR0tfQVRPTShhZGRyZXNzLCAiYWRkcmVz
cyIpCiBHS19BVE9NKGFmdGVyLCAiYWZ0ZXIiKQogR0tfQVRPTShhZnRlcl9lbmQsICJhZnRlcl9l
bmQiKQogR0tfQVRPTShhZnRlcl9zdGFydCwgImFmdGVyX3N0YXJ0IikKIEdLX0FUT00oYWxpZ24s
ICJhbGlnbiIpCiBHS19BVE9NKGFsaW5rLCAiYWxpbmsiKQogR0tfQVRPTShhbGwsICJhbGwiKQog
R0tfQVRPTShhbGxvd2V2ZW50cywgImFsbG93ZXZlbnRzIikKK0dLX0FUT00oYWxsb3dmb3Jtcywg
ImFsbG93LWZvcm1zIikKIEdLX0FUT00oYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMsICJhbGxvd25l
Z2F0aXZlYXNzZXJ0aW9ucyIpCitHS19BVE9NKGFsbG93c2FtZW9yaWdpbiwgImFsbG93LXNhbWUt
b3JpZ2luIikKK0dLX0FUT00oYWxsb3dzY3JpcHRzLCAiYWxsb3ctc2NyaXB0cyIpCitHS19BVE9N
KGFsbG93dG9wbmF2aWdhdGlvbiwgImFsbG93LXRvcC1uYXZpZ2F0aW9uIikKIEdLX0FUT00oYWxs
b3d1bnRydXN0ZWQsICJhbGxvd3VudHJ1c3RlZCIpCiBHS19BVE9NKGFsdCwgImFsdCIpCiBHS19B
VE9NKGFsdGVybmF0ZSwgImFsdGVybmF0ZSIpCiBHS19BVE9NKGFsd2F5cywgImFsd2F5cyIpCiBH
S19BVE9NKGFuY2VzdG9yLCAiYW5jZXN0b3IiKQogR0tfQVRPTShhbmNlc3Rvck9yU2VsZiwgImFu
Y2VzdG9yLW9yLXNlbGYiKQogR0tfQVRPTShfYW5kLCAiYW5kIikKIEdLX0FUT00oYW55LCAiYW55
IikKQEAgLTg3MywxNiArODc3LDE3IEBAIEdLX0FUT00ocm93c3BhbiwgInJvd3NwYW4iKQogR0tf
QVRPTShycCwgInJwIikKIEdLX0FUT00ocnQsICJydCIpCiBHS19BVE9NKHJ0bCwgInJ0bCIpCiBH
S19BVE9NKHJ1YnksICJydWJ5IikKIEdLX0FUT00ocnVsZSwgInJ1bGUiKQogR0tfQVRPTShydWxl
cywgInJ1bGVzIikKIEdLX0FUT00ocywgInMiKQogR0tfQVRPTShzYW1wLCAic2FtcCIpCitHS19B
VE9NKHNhbmRib3gsICJzYW5kYm94IikKIEdLX0FUT00oc2JhdHRyLCAic2JhdHRyIikKIEdLX0FU
T00oc2NhbGUsICJzY2FsZSIpCiBHS19BVE9NKHNjYW4sICJzY2FuIikKIEdLX0FUT00oc2NoZW1l
LCAic2NoZW1lIikKIEdLX0FUT00oc2NvcGUsICJzY29wZSIpCiBHS19BVE9NKHNjb3BlZCwgInNj
b3BlZCIpCiBHS19BVE9NKHNjcmVlbiwgInNjcmVlbiIpCiBHS19BVE9NKHNjcmVlblgsICJzY3Jl
ZW5YIikKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxl
bWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3Bw
Ci0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtNjgz
LDE3ICs2ODMsMjMgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNldChuc0V2ZQog
ICAgIHJldHVybiBEb1Jlc2V0KCk7CiAgIH0KIAogICBpZiAoTlNfRk9STV9TVUJNSVQgPT0gYU1l
c3NhZ2UpIHsKICAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgbm90IGluIGEgZG9jdW1lbnQu
CiAgICAgaWYgKCFkb2MpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAgICB9Ci0gICAgcmV0dXJu
IERvU3VibWl0KGFFdmVudCk7CisgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIGluIGEgc2Fu
ZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1Ym1pdAorICAgIC8vIGlzIGRpc2FibGVkLgorICAgIFBS
VWludDMyIHNhbmRib3hGbGFncyA9IGRvYy0+R2V0U2FuZGJveEZsYWdzKCk7CisKKyAgICBpZiAo
IShzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TKSkgeworICAgICAg
cmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAgfQogICB9CiAKICAgTU9aX0FTU0VSVChmYWxz
ZSk7CiAgIHJldHVybiBOU19PSzsKIH0KIAogbnNyZXN1bHQKIG5zSFRNTEZvcm1FbGVtZW50OjpE
b1Jlc2V0KCkKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJh
bWVFbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVt
ZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVu
dC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQu
Y3BwCkBAIC0zMyw4NCArMzMsMzYgQEAKICAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lw
aWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICAqIHRoZSB0ZXJt
cyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCiAgKgogICogKioq
KiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KIAogI2luY2x1ZGUgIm1vemlsbGEvVXRpbC5o
IgogCiAjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0dl
bmVyaWNIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIm5zSURPTURvY3VtZW50LmgiCi0jaW5jbHVk
ZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01TVkdEb2N1bWVudC5o
IgotI2luY2x1ZGUgIm5zR2tBdG9tcy5oIgotI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCi0jaW5j
bHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAibnNET01FcnJvci5oIgotI2lu
Y2x1ZGUgIm5zUnVsZURhdGEuaCIKLSNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCisjaW5jbHVk
ZSAibnNIVE1MSUZyYW1lRWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVz
aW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKLWNsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQg
OiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAotewotcHVibGljOgotICBuc0hU
TUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywK
LSAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJz
ZXIgPSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7Ci0gIHZpcnR1YWwgfm5zSFRNTElG
cmFtZUVsZW1lbnQoKTsKLQotICAvLyBuc0lTdXBwb3J0cwotICBOU19ERUNMX0lTVVBQT1JUU19J
TkhFUklURUQKLQotICAvLyBuc0lET01Ob2RlCi0gIE5TX0ZPUldBUkRfTlNJRE9NTk9ERShuc0dl
bmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NRWxlbWVudAotICBOU19GT1JX
QVJEX05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5z
SURPTUhUTUxFbGVtZW50Ci0gIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNHZW5lcmlj
SFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50Ci0gIE5T
X0RFQ0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKLQotICAvLyBuc0lET01HZXRTVkdEb2N1bWVu
dAotICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCi0KLSAgLy8gbnNJQ29udGVudAotICB2
aXJ0dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7Ci0gIE5TX0lNRVRI
T0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNv
bnN0OwotICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFw
cGluZ0Z1bmN0aW9uKCkgY29uc3Q7Ci0KLSAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2Rl
SW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7Ci0gIHZpcnR1YWwgbnNY
UENDbGFzc0luZm8qIEdldENsYXNzSW5mbygpOwotfTsKLQotCiBOU19JTVBMX05TX05FV19IVE1M
X0VMRU1FTlRfQ0hFQ0tfUEFSU0VSKElGcmFtZSkKIAogCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojpu
c0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5m
bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbVBhcnNlciBh
RnJvbVBhcnNlcikKICAgOiBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50KGFOb2RlSW5mbywgYUZy
b21QYXJzZXIpCiB7CiB9CiAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6On5uc0hUTUxJRnJhbWVFbGVt
ZW50KCkKIHsKKyAgaWYgKG1TYW5kYm94VG9rZW5MaXN0KQorICAgIG1TYW5kYm94VG9rZW5MaXN0
LT5Ecm9wUmVmZXJlbmNlKCk7CiB9CiAKLQogTlNfSU1QTF9BRERSRUZfSU5IRVJJVEVEKG5zSFRN
TElGcmFtZUVsZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIE5TX0lNUExfUkVMRUFTRV9JTkhFUklU
RUQobnNIVE1MSUZyYW1lRWxlbWVudCxuc0dlbmVyaWNFbGVtZW50KQogCiBET01DSV9OT0RFX0RB
VEEoSFRNTElGcmFtZUVsZW1lbnQsIG5zSFRNTElGcmFtZUVsZW1lbnQpCiAKIC8vIFF1ZXJ5SW50
ZXJmYWNlIGltcGxlbWVudGF0aW9uIGZvciBuc0hUTUxJRnJhbWVFbGVtZW50CiBOU19JTlRFUkZB
Q0VfVEFCTEVfSEVBRChuc0hUTUxJRnJhbWVFbGVtZW50KQogICBOU19IVE1MX0NPTlRFTlRfSU5U
RVJGQUNFX1RBQkxFX0JFR0lOKG5zSFRNTElGcmFtZUVsZW1lbnQpCkBAIC0xNTAsMTYgKzEwMiwy
OCBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRDb250ZW50V2luZG93KG5zCiB9CiAKIE5TX0lN
RVRIT0RJTVAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldFNWR0RvY3VtZW50KG5zSURPTURvY3Vt
ZW50ICoqYVJlc3VsdCkKIHsKICAgcmV0dXJuIEdldENvbnRlbnREb2N1bWVudChhUmVzdWx0KTsK
IH0KIAorTlNfSU1FVEhPRElNUAorbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U2FuZGJveChuc0lE
T01ET01TZXR0YWJsZVRva2VuTGlzdCoqIGFTYW5kYm94KQoreworICBpZiAoIW1TYW5kYm94VG9r
ZW5MaXN0KSB7CisgICAgbVNhbmRib3hUb2tlbkxpc3QgPSBuZXcgbnNET01TZXR0YWJsZVRva2Vu
TGlzdCh0aGlzLCBuc0drQXRvbXM6OnNhbmRib3gpOworICB9CisKKyAgTlNfQUREUkVGKCphU2Fu
ZGJveCA9IG1TYW5kYm94VG9rZW5MaXN0KTsKKworICByZXR1cm4gTlNfT0s7Cit9CisKIGJvb2wK
IG5zSFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlE
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYg
YVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUm
IGFSZXN1bHQpCiB7CiAgIGlmIChhTmFtZXNwYWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsK
ICAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6Om1hcmdpbndpZHRoKSB7CkBAIC0xNzgs
MTYgKzE0MiwyMCBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShQUkluCiAg
ICAgICByZXR1cm4gUGFyc2VGcmFtZWJvcmRlclZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAg
fQogICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6c2Nyb2xsaW5nKSB7CiAgICAgICBy
ZXR1cm4gUGFyc2VTY3JvbGxpbmdWYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBp
ZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OmFsaWduKSB7CiAgICAgICByZXR1cm4gUGFyc2VB
bGlnblZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQorICAgIGlmIChhQXR0cmlidXRlID09
IG5zR2tBdG9tczo6c2FuZGJveCkgeworICAgICAgYVJlc3VsdC5QYXJzZUF0b21BcnJheShhVmFs
dWUpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICB9CiAKICAgcmV0dXJuIG5zR2VuZXJp
Y0hUTUxGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKGFOYW1lc3BhY2VJRCwgYUF0dHJpYnV0
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFW
YWx1ZSwgYVJlc3VsdCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBNYXBBdHRyaWJ1dGVzSW50b1J1bGUo
Y29uc3QgbnNNYXBwZWRBdHRyaWJ1dGVzKiBhQXR0cmlidXRlcywKQEAgLTI2OCw4ICsyMzYsMjIg
QEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6SXNBdHRyaWJ1dGVNYXBwZWQoYwogCiAKIG5zTWFwUnVs
ZVRvQXR0cmlidXRlc0Z1bmMKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEF0dHJpYnV0ZU1hcHBp
bmdGdW5jdGlvbigpIGNvbnN0CiB7CiAgIHJldHVybiAmTWFwQXR0cmlidXRlc0ludG9SdWxlOwog
fQogCituc3Jlc3VsdAorbnNIVE1MSUZyYW1lRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKFBSSW50MzIg
YU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhTm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0gbnNHa0F0b21z
OjpzYW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgeworICAgIC8v
IFBhcnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBhbmQgaWYgd2Ug
aGF2ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFwcHJvcHJpYXRl
bHkuCisgICAgaWYgKG1GcmFtZUxvYWRlcikKKyAgICAgIG1GcmFtZUxvYWRlci0+R2V0RXhpc3Rp
bmdEb2NTaGVsbCgpLT5TZXRTYW5kYm94RmxhZ3MobnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJv
eEF0dHJpYnV0ZVRvRmxhZ3MoKmFWYWx1ZSkpOworICB9CisgIHJldHVybiBuc0dlbmVyaWNIVE1M
RWxlbWVudDo6QWZ0ZXJTZXRBdHRyKGFOYW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5vdGlmeSk7Cit9CmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxJRnJhbWVFbGVtZW50LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7
IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAt
Ki0gKi8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1Q
TCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
YXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4x
ICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0
d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGlj
ZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBj
bGllbnQgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFs
IENvZGUgaXMKKyAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogUG9y
dGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykg
MTk5OAorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBv
ZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJH
UEwiKSwKKyAqIG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlz
aW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9m
IHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3Ig
dGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgor
ICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2Ug
dGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5
IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlz
aW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRo
ZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNs
dWRlICJtb3ppbGxhL1V0aWwuaCIKKworI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50
LmgiCisjaW5jbHVkZSAibnNHZW5lcmljSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01E
b2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAi
bnNJRE9NU1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0drQXRvbXMuaCIKKyNpbmNsdWRlICJu
c0lEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUg
Im5zRE9NRXJyb3IuaCIKKyNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCisjaW5jbHVkZSAibnNTdHls
ZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zRE9NU2V0dGFibGVUb2tlbkxpc3QuaCIKKyNpbmNsdWRl
ICJuc0NvbnRlbnRVdGlscy5oIgorCit1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKK3VzaW5nIG5h
bWVzcGFjZSBtb3ppbGxhOjpkb207CisKK2NsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJs
aWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAs
IHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAoreworcHVibGljOgorICBuc0hUTUxJRnJh
bWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKKyAgICAg
ICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJzZXIgPSBt
b3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7CisgIHZpcnR1YWwgfm5zSFRNTElGcmFtZUVs
ZW1lbnQoKTsKKworICAvLyBuc0lTdXBwb3J0cworICBOU19ERUNMX0lTVVBQT1JUU19JTkhFUklU
RUQKKworICAvLyBuc0lET01Ob2RlCisgIE5TX0ZPUldBUkRfTlNJRE9NTk9ERShuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NRWxlbWVudAorICBOU19GT1JXQVJEX05T
SURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhU
TUxFbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNHZW5lcmljSFRNTEZy
YW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50CisgIE5TX0RFQ0xf
TlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKKworICAvLyBuc0lET01HZXRTVkdEb2N1bWVudAorICBO
U19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCisKKyAgLy8gbnNJQ29udGVudAorICB2aXJ0dWFs
IGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CisgIE5TX0lNRVRIT0RfKGJv
b2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0Owor
ICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGluZ0Z1
bmN0aW9uKCkgY29uc3Q7CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7CisgIHZpcnR1YWwgbnNYUENDbGFz
c0luZm8qIEdldENsYXNzSW5mbygpOworCisgIHZpcnR1YWwgbnNyZXN1bHQgQWZ0ZXJTZXRBdHRy
KFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcqIGFWYWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpOworCisgIFBSVWludDMyIEdldFNhbmRi
b3hGbGFncygpIHsKKyAgICBuc0F1dG9TdHJpbmcgc2FuZGJveEF0dHI7CisKKyAgICBpZiAoR2V0
QXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpzYW5kYm94LCBzYW5kYm94QXR0cikp
IHsKKyAgICAgIHJldHVybiBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9G
bGFncyhzYW5kYm94QXR0cik7CisgICAgfQorCisgICAgLy8gTm8gc2FuZGJveCBhdHRyaWJ1dGUs
IG5vIHNhbmRib3ggZmxhZ3MuCisgICAgcmV0dXJuIDA7CisgIH0KKworICBzdGF0aWMgbnNIVE1M
SUZyYW1lRWxlbWVudCogRnJvbUNvbnRlbnQobnNJQ29udGVudCAqYUNvbnRlbnQpCisgIHsKKyAg
ICBpZiAoYUNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6OmlmcmFtZSkpCisgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8bnNIVE1MSUZyYW1lRWxlbWVudCo+KGFDb250ZW50KTsKKyAgICByZXR1cm4g
bnNudWxsOworICB9CisKK3Byb3RlY3RlZDoKKyAgbnNSZWZQdHI8bnNET01TZXR0YWJsZVRva2Vu
TGlzdD4gIG1TYW5kYm94VG9rZW5MaXN0OworfTsKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2Uv
bnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCi0tLSBhL2RvY3No
ZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNw
cApAQCAtNzI3LDE2ICs3MjcsMTcgQEAgbnNEb2NTaGVsbDo6bnNEb2NTaGVsbCgpOgogICAgIG1C
dXN5RmxhZ3MoQlVTWV9GTEFHU19OT05FKSwKICAgICBtQXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQ
X1RZUEVfVU5LTk9XTiksCiAgICAgbUxvYWRUeXBlKDApLAogICAgIG1NYXJnaW5XaWR0aCgtMSks
CiAgICAgbU1hcmdpbkhlaWdodCgtMSksCiAgICAgbUl0ZW1UeXBlKHR5cGVDb250ZW50KSwKICAg
ICBtUHJldmlvdXNUcmFuc0luZGV4KC0xKSwKICAgICBtTG9hZGVkVHJhbnNJbmRleCgtMSksCisg
ICAgbVNhbmRib3hGbGFncygwKSwKICAgICBtQ3JlYXRlZChmYWxzZSksCiAgICAgbUFsbG93U3Vi
ZnJhbWVzKHRydWUpLAogICAgIG1BbGxvd1BsdWdpbnModHJ1ZSksCiAgICAgbUFsbG93SmF2YXNj
cmlwdCh0cnVlKSwKICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzKHRydWUpLAogICAgIG1BbGxvd0lt
YWdlcyh0cnVlKSwKICAgICBtQWxsb3dETlNQcmVmZXRjaCh0cnVlKSwKICAgICBtQWxsb3dXaW5k
b3dDb250cm9sKHRydWUpLApAQCAtMjg3OCwxNiArMjg3OSw3NSBAQCBuc0RvY1NoZWxsOjpGaW5k
SXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pCiAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmRJdGVtKSB7CiAgICAgICAgICAgICAvLyBX
ZSByZXR1cm4gZm91bmRJdGVtIGhlcmUgZXZlbiBpZiBpdCdzIG5vdCBhbiBhY3RpdmUKICAgICAg
ICAgICAgIC8vIGl0ZW0gc2luY2UgYWxsIHRoZSBuYW1lcyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZh
ciBhcmUKICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIg
bG9va2luZyBmb3IgZnVydGhlci4KIAorICAgICAgICAgICAgLy8gSWYgb3VyIGRvY3VtZW50IGlz
IHNhbmRib3hlZCwgd2UgbmVlZCB0byBkbyBzb21lIGV4dHJhIGNoZWNrcy4KKyAgICAgICAgICAg
IFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisKKyAgICAgICAgICAgIGlmIChtQ29udGVudFZp
ZXdlcikgeworICAgICAgICAgICAgICAgIG5zSURvY3VtZW50ICogZG9jID0gbUNvbnRlbnRWaWV3
ZXItPkdldERvY3VtZW50KCk7CisgICAgICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5H
ZXRTYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNhbmRi
b3hGbGFncykgeworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHJvb3Q7CisgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVSb290VHJlZUl0ZW0oZ2V0dGVyX0Fk
ZFJlZnMocm9vdCkpOworCisgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGZvdW5kIGl0ZW0gbm90
IGEgdG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgYW5kIG5vdCBvdXJzZWxmID8KKyAgICAgICAg
ICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBzZWxmQXNJdGVtID0gc3RhdGlj
X2Nhc3Q8bnNJRG9jU2hlbGxUcmVlSXRlbSAqPih0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAo
Zm91bmRJdGVtICE9IHJvb3QgJiYgZm91bmRJdGVtICE9IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gQXJlIHdlIGFuIGFuY2VzdG9yIG9mIHRoZSBmb3VuZEl0ZW0gPworICAg
ICAgICAgICAgICAgICAgICBib29sIGlzQW5jZXN0b3IgPSBmYWxzZTsKKworICAgICAgICAgICAg
ICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0ZW07CisgICAg
ICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudEFz
SXRlbSkpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9B
ZGRSZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9
PSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmNlc3RvciA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0gPSB0bXA7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQW5j
ZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vLCB3ZSBhcmUgbm90IGFuIGFu
Y2VzdG9yIGFuZCBvdXIgZG9jdW1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNh
bmRib3hlZCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
dW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRvcCBsZXZlbCBicm93c2luZyBjb250
ZXh0IC0gaXMgaXQgYW4gYW5jZXN0b3Igb2Ygb3VycyA/CisgICAgICAgICAgICAgICAgICAgIG5z
Q09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAg
ICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyZW50QXNJdGVtLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1w
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgdG1wID09IGZvdW5kSXRl
bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYW5jZXN0b3Is
IGFuZCB3ZSBhcmUgc2FuZGJveGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVu
bGVzcyBhbGxvdy10b3AtbmF2aWdhdGlvbiBpcyBzZXQsIHdlIGNhbid0IGFsbG93IHRoaXMuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxs
OjpTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbSA9IHRtcDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAgICAgICAgcmV0dXJu
IE5TX09LOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29raW5nCiAgICAgICAg
IAogICAgIC8vIEZpcnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAtNDkxOSwxNiArNDk3OSwzMCBA
QCBuc0RvY1NoZWxsOjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAK
IG5zRG9jU2hlbGw6OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRh
YiA9IG1Jc0FwcFRhYjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0Rv
Y1NoZWxsOjpTZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgbVNh
bmRib3hGbGFncyA9IGFTYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1F
VEhPRElNUAorbnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hG
bGFncykKK3sKKyAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNf
T0s7Cit9CisKK05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHkoYm9vbCBh
VmlzaWJpbGl0eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICByZXR1cm4g
TlNfT0s7CiAgICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmlld2VyLT5T
aG93KCk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtODEwNywxNiArODE4MSwyOSBAQCBuc0RvY1No
ZWxsOjpJbnRlcm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxUcmVlSXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2lu
ZG93VGFyZ2V0LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVy
X0FkZFJlZnModGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiB0
YXJnZXREb2NTaGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAgICAgICAK
ICAgICAgICAgYm9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRhcmdldERv
Y1NoZWxsKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVudCBpcyBz
YW5kYm94ZWQgYW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRlL2xvYWQg
YSBmcmFtZSBpdCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAgICAgLy8g
RmluZEl0ZW1XaXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3IgdGhlIHRh
cmdldAorICAgICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgb3Bl
biBhIG5ldyB3aW5kb3cgaW4gY2FzZQorICAgICAgICAgICAgLy8gdGhvdWdoLiBDaGVjayBpZiB3
ZSBhcmUgc2FuZGJveGVkIGFuZCBiYWlsIG91dCBoZXJlIGlmIHNvLgorICAgICAgICAgICAgTlNf
RU5TVVJFX1RSVUUobUNvbnRlbnRWaWV3ZXIsIE5TX0VSUk9SX0ZBSUxVUkUpOworICAgICAgICAg
ICAgbnNJRG9jdW1lbnQqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICAg
ICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKyAgICAgICAgICAgIHNhbmRib3hG
bGFncyA9IGRvYy0+R2V0U2FuZGJveEZsYWdzKCk7CisgICAgICAgICAgICBpZiAoc2FuZGJveEZs
YWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgICAg
IHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBu
c0NPTVB0cjxuc0lET01XaW5kb3c+IHdpbiA9CiAgICAgICAgICAgICAgICAgZG9fR2V0SW50ZXJm
YWNlKEdldEFzU3VwcG9ydHModGhpcykpOwogICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUod2lu
LCBOU19FUlJPUl9OT1RfQVZBSUxBQkxFKTsKIAogICAgICAgICAgICAgbnNEZXBlbmRlbnRTdHJp
bmcgbmFtZShhV2luZG93VGFyZ2V0KTsKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRv
dz4gbmV3V2luOwogICAgICAgICAgICAgcnYgPSB3aW4tPk9wZW4oRW1wdHlTdHJpbmcoKSwgLy8g
VVJMIHRvIGxvYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsICAgICAgICAgIC8v
IHdpbmRvdyBuYW1lCkBAIC04ODg5LDE3ICs4OTc2LDI0IEBAIG5zRG9jU2hlbGw6OkRvVVJJTG9h
ZChuc0lVUkkgKiBhVVJJLAogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkK
ICAgICAgICAgaWYgKGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAg
ICAvLyBSZWZlcnJlciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4K
ICAgICAgICAgICAgIGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBh
bChkb19RdWVyeUludGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBD
aGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUpOworCisgICAg
Ly8gSWYgdGhlIGNvbnRlbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0LCBmb3Jj
ZSB0aGUgcGFzc2VkIGluCisgICAgLy8gb3duZXIgKHdoaWNoIHNob3VsZCBiZSBhIG51bGwgcHJp
bmNpcGFsKSB0byBiZSBzZXQgb24gdGhlIGNoYW5uZWwuIElmCisgICAgLy8gdGhlIGZsYWcgaXNu
J3Qgc2V0LCBhbGxvdyB0aGUgY29udGVudCB0byBhc3NzdW1lIGl0cyAibmF0dXJhbCBkb21haW4i
IGFzCisgICAgLy8gaXQgbm9ybWFsbHkgd291bGQuCisgICAgbnNDb250ZW50VXRpbHM6OlNldFVw
Q2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TYW5kYm94RmxhZ3MgJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURvY1NoZWxsOjpTQU5EQk9YRURf
T1JJR0lOKSk7CiAKICAgICBuc0NPTVB0cjxuc0lTY3JpcHRDaGFubmVsPiBzY3JpcHRDaGFubmVs
ID0gZG9fUXVlcnlJbnRlcmZhY2UoY2hhbm5lbCk7CiAgICAgaWYgKHNjcmlwdENoYW5uZWwpIHsK
ICAgICAgICAgLy8gQWxsb3cgZXhlY3V0aW9uIGFnYWluc3Qgb3VyIGNvbnRleHQgaWYgdGhlIHBy
aW5jaXBhbHMgbWF0Y2gKICAgICAgICAgc2NyaXB0Q2hhbm5lbC0+CiAgICAgICAgICAgICBTZXRF
eGVjdXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhFQ1VURV9OT1JNQUwpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmggYi9kb2NzaGVsbC9iYXNl
L25zRG9jU2hlbGwuaAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAorKysgYi9kb2Nz
aGVsbC9iYXNlL25zRG9jU2hlbGwuaApAQCAtNzgzLDE2ICs3ODMsMTggQEAgcHJvdGVjdGVkOgog
ICAgIC8vIENyZWF0ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUgaXMgbm90IGV4cGVjdGVkIHRvIGNo
YW5nZS4KICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtSXRlbVR5cGU7CiAKICAgICAv
LyBJbmRleCBpbnRvIHRoZSBTSFRyYW5zYWN0aW9uIGxpc3QsIGluZGljYXRpbmcgdGhlIHByZXZp
b3VzIGFuZCBjdXJyZW50CiAgICAgLy8gdHJhbnNhY3Rpb24gYXQgdGhlIHRpbWUgdGhhdCB0aGlz
IERvY1NoZWxsIGJlZ2lucyB0byBsb2FkCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAg
bVByZXZpb3VzVHJhbnNJbmRleDsKICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtTG9h
ZGVkVHJhbnNJbmRleDsKIAorICAgIFBSVWludDMyICAgICAgICAgICAgICAgICAgIG1TYW5kYm94
RmxhZ3M7CisKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQ3JlYXRlZDsKICAgICBi
b29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJmcmFtZXM7CiAgICAgYm9vbCAgICAg
ICAgICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAgICBib29sICAgICAgICAgICAgICAg
ICAgICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAg
IG1BbGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFs
bG93SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ROU1ByZWZl
dGNoOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1dpbmRvd0NvbnRyb2w7
CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbCBiL2RvY3NoZWxsL2Jh
c2UvbnNJRG9jU2hlbGwuaWRsCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCisr
KyBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCkBAIC02NywxNyArNjcsMTcgQEAgaW50
ZXJmYWNlIG5zSVJlcXVlc3Q7CiBpbnRlcmZhY2UgbnNJU0hFbnRyeTsKIGludGVyZmFjZSBuc0lM
YXlvdXRIaXN0b3J5U3RhdGU7CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJvd3NlclVJOwogaW50ZXJm
YWNlIG5zSURPTVN0b3JhZ2U7CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsOwogaW50ZXJmYWNlIG5z
SVdlYkJyb3dzZXJQcmludDsKIGludGVyZmFjZSBuc0lWYXJpYW50OwogCi1bc2NyaXB0YWJsZSwg
dXVpZCgwNjY2YWRmOC04NzM4LTRjYTctYTkxNy0wMzQ4ZjQ3ZDJmNDApXQorW3NjcmlwdGFibGUs
IHV1aWQoOWIyODMzMzctMDk3ZC00ZmE4LWEyZGEtOTE2MzE4ZWFmODI4KV0KIGludGVyZmFjZSBu
c0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiB7CiAgIC8qKgogICAgKiBMb2FkcyBhIGdpdmVuIFVS
SS4gIFRoaXMgd2lsbCBnaXZlIHByaW9yaXR5IHRvIGxvYWRpbmcgdGhlIHJlcXVlc3RlZCBVUkkK
ICAgICogaW4gdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcJdGhpcyBpbnRlcmZhY2UuICBJZiBpdCBj
YW4ndCBiZSBsb2FkZWQgaGVyZQogICAgKiBob3dldmVyLCB0aGUgVVJMIGRpc3BhdGNoZXIgd2ls
bCBnbyB0aHJvdWdoIGl0cyBub3JtYWwgcHJvY2VzcyBvZiBjb250ZW50CiAgICAqIGxvYWRpbmcu
CiAgICAqCkBAIC01NDgsOSArNTQ4LDY3IEBAIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1
cHBvcnRzCiAgICAqLwogICBhdHRyaWJ1dGUgYm9vbGVhbiBpc0FwcFRhYjsKIAogICAvKioKICAg
ICogQ3JlYXRlIGEgbmV3IGFib3V0OmJsYW5rIGRvY3VtZW50IGFuZCBjb250ZW50IHZpZXdlci4K
ICAgICogQHBhcmFtIGFQcmluY2lwYWwgdGhlIHByaW5jaXBhbCB0byB1c2UgZm9yIHRoZSBuZXcg
ZG9jdW1lbnQuCiAgICAqLwogICB2b2lkIGNyZWF0ZUFib3V0QmxhbmtDb250ZW50Vmlld2VyKGlu
IG5zSVByaW5jaXBhbCBhUHJpbmNpcGFsKTsKKworICAvKioKKyAgICogVGhlIHNhbmRib3ggZmxh
Z3Mgb24gdGhlIGRvY3NoZWxsLiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJv
eAorICAgKiBhdHRyaWJ1dGUgb2YgdGhlIGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0
YWJsZSBjb250ZW50LCBpZgorICAgKiBleGlzdGVudC4gU2VlIHRoZSBIVE1MNSBzcGVjIGZvciBt
b3JlIGRldGFpbHMuCisgICAqIFRoZXNlIGZsYWdzIG9uIHRoZSBkb2NzaGVsbCByZWZsZWN0IHRo
ZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzYW5kYm94CisgICAqIGF0dHJpYnV0ZSwgd2hpY2ggaXMg
bW9kaWZpYWJsZS4gVGhleSBhcmUgb25seSB1c2VkIHdoZW4gbG9hZGluZyBuZXcKKyAgICogY29u
dGVudCwgc2FuZGJveCBmbGFncyBhcmUgYWxzbyBpbW11dGFibHkgc2V0IG9uIHRoZSBkb2N1bWVu
dCB3aGVuIGl0IGlzCisgICAqIGxvYWRlZC4KKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb2YgYSBk
b2N1bWVudCBkZXBlbmQgb24gdGhlIHNhbmRib3ggZmxhZ3Mgb24gaXRzCisgICAqIGRvY3NoZWxs
IGFuZCBvZiBpdHMgcGFyZW50IGRvY3VtZW50LCBpZiBhbnkuCisgICAqLworICBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyBzYW5kYm94RmxhZ3M7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBwcmV2
ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyBicm93c2luZyBjb250ZXh0cyBvdGhlciB0aGFu
CisgICAqIHRoZSBzYW5kYm94ZWQgYnJvd3NpbmcgY29udGV4dCBpdHNlbGYgKG9yIGJyb3dzaW5n
IGNvbnRleHRzIGZ1cnRoZXIKKyAgICogbmVzdGVkIGluc2lkZSBpdCksIGFuZCB0aGUgdG9wLWxl
dmVsIGJyb3dzaW5nIGNvbnRleHQuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRC
T1hFRF9OQVZJR0FUSU9OICA9IDB4MTsKKworICAvKioKKyAgICogVGhpcyBmbGFnIHByZXZlbnRz
IGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWlyIHRvcC1sZXZlbCBicm93c2luZworICAgKiBj
b250ZXh0LgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfVE9QTEVWRUxf
TkFWSUdBVElPTiA9IDB4MjsKKworICAvKioKKyAgICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRl
bnQgZnJvbSBpbnN0YW50aWF0aW5nIHBsdWdpbnMsIHdoZXRoZXIgdXNpbmcgdGhlCisgICAqIGVt
YmVkIGVsZW1lbnQsIHRoZSBvYmplY3QgZWxlbWVudCwgdGhlIGFwcGxldCBlbGVtZW50LCBvciB0
aHJvdWdoCisgICAqIG5hdmlnYXRpb24gb2YgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgdW5s
ZXNzIHRob3NlIHBsdWdpbnMgY2FuIGJlCisgICAqIHNlY3VyZWQuCisgICAqLworICBjb25zdCB1
bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5TID0gMHg0OworCisgIC8qKgorICAgKiBUaGlz
IGZsYWcgZm9yY2VzIGNvbnRlbnQgaW50byBhIHVuaXF1ZSBvcmlnaW4sIHRodXMgcHJldmVudGlu
ZyBpdCBmcm9tCisgICAqIGFjY2Vzc2luZyBvdGhlciBjb250ZW50IGZyb20gdGhlIHNhbWUgb3Jp
Z2luLgorICAgKiBUaGlzIGZsYWcgYWxzbyBwcmV2ZW50cyBzY3JpcHQgZnJvbSByZWFkaW5nIGZy
b20gb3Igd3JpdGluZyB0byB0aGUKKyAgICogZG9jdW1lbnQuY29va2llIElETCBhdHRyaWJ1dGUs
IGFuZCBibG9ja3MgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAgICovCisgIGNvbnN0IHVuc2ln
bmVkIGxvbmcgU0FOREJPWEVEX09SSUdJTiA9IDB4ODsKKworICAvKioKKyAgICogVGhpcyBmbGFn
IGJsb2NrcyBmb3JtIHN1Ym1pc3Npb24uCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNB
TkRCT1hFRF9GT1JNUyA9IDB4MTA7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBibG9ja3Mgc2Ny
aXB0IGV4ZWN1dGlvbi4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1ND
UklQVFMgPSAweDIwOworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgYmxvY2tzIGZlYXR1cmVzIHRo
YXQgdHJpZ2dlciBhdXRvbWF0aWNhbGx5LCBzdWNoIGFzCisgICAqIGF1dG9tYXRpY2FsbHkgcGxh
eWluZyBhIHZpZGVvIG9yIGF1dG9tYXRpY2FsbHkgZm9jdXNpbmcgYSBmb3JtIGNvbnRyb2wuCisg
ICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMg
PSAweDQwOwogfTsKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElG
cmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxl
bWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVu
dC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5p
ZGwKQEAgLTMzLDQ0ICszMyw0NiBAQAogICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zp
c2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKICAqIGFuZCBvdGhl
ciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBu
b3QgZGVsZXRlCiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBv
ZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoKICAqICoqKioqIEVORCBMSUNFTlNF
IEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJuc0lET01IVE1MRWxlbWVudC5pZGwiCisjaW5j
bHVkZSAibnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRsIgogCiAvKioKICAqIFRoZSBuc0lE
T01IVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2UgaXMgdGhlIGludGVyZmFjZSB0byBhIFtYXUhU
TUwKICAqIGlmcmFtZSBlbGVtZW50LgogICoKICAqIFRoaXMgaW50ZXJmYWNlIGlzIHRyeWluZyB0
byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lmaWNhdGlvbjoKICAqIGh0dHA6Ly93
d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgogICogd2l0aCBjaGFuZ2VzIGZyb20g
dGhlIHdvcmstaW4tcHJvZ3Jlc3MgV0hBVFdHIEhUTUwgc3BlY2lmaWNhdGlvbjoKICAqIGh0dHA6
Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvCiAgKi8KIAotW3Nj
cmlwdGFibGUsIHV1aWQoZDRlODcwYmQtNDUyYy00ODYwLWI5M2MtZjRlZTAwYmEzM2Y2KV0KK1tz
Y3JpcHRhYmxlLCB1dWlkKDUyZjYyNDRiLWIxZjUtNGY0Yy04ZmYzLTdlMTQ2MzE2ZjQxMSldCiBp
bnRlcmZhY2UgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgOiBuc0lET01IVE1MRWxlbWVudAogewog
ICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBhbGlnbjsKICAgICAgICAgICAg
YXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgZnJhbWVCb3JkZXI7CiAgICAgICAgICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgICAgICAgIGhlaWdodDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0
cmluZyAgICAgICAgbG9uZ0Rlc2M7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIG1hcmdpbkhlaWdodDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAg
bWFyZ2luV2lkdGg7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG5hbWU7
CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNjcm9sbGluZzsKICAgICAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc3JjOwogICAgICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nICAgICAgICB3aWR0aDsKICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwg
MjoKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTURvY3VtZW50ICAgY29udGVudERvY3VtZW50
OwogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NV2luZG93ICAgICBjb250ZW50V2luZG93Owog
CisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCBzYW5kYm94
OwogCiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBpZnJhbWUgZWxlbWVudHMgcmVxdWly
ZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0byBiZSBwcmVzZW50CiAgIC8vIGlm
IHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3ViIGRvY3VtZW50IHRvIGdvIGludG8g
RE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRwczovL3dpa2kubW96aWxsYS5vcmcv
aW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkKICAgICAgICAgICAgYXR0cmlidXRl
IGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVuOwogfTsKZGlmZiAtLWdpdCBhL2Vt
YmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAg
Yi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIu
Y3BwCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93
V2F0Y2hlci5jcHAKKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMv
bnNXaW5kb3dXYXRjaGVyLmNwcApAQCAtNjAzLDE2ICs2MDMsMzMgQEAgbnNXaW5kb3dXYXRjaGVy
OjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAgaWYgKCFuZXdEb2NTaGVsbEl0ZW0p
IHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3BlbiB1cCBhIG5ldyB3aW5kb3cgb3Vy
c2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJvdmlkZXIgZm9yIG9uZS4gIEluIGVp
dGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmlnaHQKICAgICAvLyBuYW1lIG9uIGl0
LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAgICAvLyBJZiB0aGUgcGFyZW50IHRy
eWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94ZWQsCisgICAgLy8gdGhpcyBpcyBu
b3QgYWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlmIChhUGFyZW50KSB7CisgICAgICBu
c0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAgICAgYVBhcmVudC0+R2V0RG9jdW1l
bnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4g
ZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKworICAgICAgaWYgKGRvYykgeworICAg
ICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICBzYW5kYm94RmxhZ3MgPSBk
b2MtPkdldFNhbmRib3hGbGFncygpOworCisgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lE
b2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAgICAgICByZXR1cm4gTlNfRVJS
T1JfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKwogICAgIC8vIE5vdyBjaGVj
ayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHByb3ZpZGVyIGZvciBhIHdpbmRvdy4g
IERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3BlbmluZyBhIGRpYWxvZyBvciBpZiBvdXIg
cGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8vIGlmIHdlJ3JlIG9wZW5pbmcgc29t
ZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNocm9tZSBmbGFncyBzZXQuCiAgICAg
bnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVXaW4gPSBkb19RdWVyeUludGVyZmFj
ZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNocm9tZVdpbiAmJgogICAgICAgICAh
KGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9NT0RBTCAgICAgICAg
IHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVf
T1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVdlYkJyb3dzZXJD
aHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>585605</attachid>
            <date>2012-01-03 16:52:24 -0800</date>
            <delta_ts>2012-01-18 14:00:45 -0800</delta_ts>
            <desc>WIP - prototype</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>43453</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZTYxNzlmNDk3Yjc0NjhmNTg3M2NjNTMyYjU5
Njc2MWYzZTRjYTAwMwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtODEsMTYgKzgxLDE3IEBAIHN0YXRpYyBmcF9leGNlcHRfdCBv
bGRtYXNrID0gZnBzZXRtYXNrKH4KICNpbmNsdWRlICJuc0lET01Ob2RlLmgiCiAjaW5jbHVkZSAi
bnNIdG1sNVBhcnNlci5oIgogI2luY2x1ZGUgIm5zSUZyYWdtZW50Q29udGVudFNpbmsuaCIKICNp
bmNsdWRlICJuc01hdGhVdGlscy5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9BdXRvUmVzdG9yZS5o
IgogI2luY2x1ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96aWxsYS9U
aW1lU3RhbXAuaCIKKyNpbmNsdWRlICJuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdC5oIgogCiBz
dHJ1Y3QgbnNOYXRpdmVLZXlFdmVudDsgLy8gRG9uJ3QgaW5jbHVkZSBuc0lOYXRpdmVLZXlCaW5k
aW5ncy5oIGhlcmU6IGl0IHdpbGwgZm9yY2Ugc3RyYW5nZSBjb21waWxhdGlvbiBlcnJvciEKIAog
Y2xhc3MgbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9yeTsKIGNsYXNzIG5zSVhQQ29ubmVjdDsKIGNs
YXNzIG5zSUNvbnRlbnQ7CiBjbGFzcyBuc0lET01LZXlFdmVudDsKIGNsYXNzIG5zSURvY3VtZW50
OwpAQCAtMTgwNCw0MyArMTgwNSw1NSBAQCBwdWJsaWM6CiAgICAqIGZyb20gdGhlIGRvY3VtZW50
IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQgVVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsKIAogICAvKioKICAgICog
U2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRoZSBnaXZlbiBjaGFubmVs
LCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBvZiBhQ2hhbm5lbC4gIGFQ
cmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JBYm91dEJsYW5rIGlzIHRy
dWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAg
b24gaXQuCi0gICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LiBJZiBhRm9yY2VP
d25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQgb24gdGhlIGNoYW5uZWws
IGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAorICAgKiBmcm9tIHRoZSBj
aGFubmVsLgogICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIgdGhlIHByaW5jaXBhbCB3
YXMgc2V0IHVwIGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5lbC4KICAgICovCiAgIHN0
YXRpYyBib29sIFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lw
YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuayk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lciA9IGZhbHNlKTsK
IAogICBzdGF0aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhLAog
ICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJhc2U2NFN0cmluZyk7CiAK
ICAgc3RhdGljIG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBhQXNjaWlTdHJpbmcsCiAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURhdGEpOwogCiAgIC8qKgog
ICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFzc2VkIGluIHBhcmFtZXRl
ciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0eSBlbmFibGVkLiBJdCBp
cyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAgKiBmdW5jdGlvbmFsaXR5
IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIuCiAgICAq
IE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29tcGxldGUgbWFrZXMgc2Vu
c2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAgICogQHBhcmFtIGFJbnB1
dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0IGNhbid0IGJlIG51bGwu
CiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBoYXMgYXV0b2NvbXBsZXRl
IGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21wbGV0ZUVuYWJsZWQobnNJ
RE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIAorICAvKioKKyAgICogQSBoZWxwZXIgZnVu
Y3Rpb24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IK
KyAgICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFn
cyB1c2VkIGludGVybmFsbHkuCisgICAqCisgICAqIEBwYXJhbSBhQXR0cmlidXRlIAl0aGUgdmFs
dWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisgICAqIEByZXR1cm4gCQkJdGhlIHNldCBvZiBm
bGFncworICAgKi8KKyAgc3RhdGljIFBSVWludDMyIFBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxh
Z3MoY29uc3QgbnNBU3RyaW5nJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNhbmRib3hBdHRyKTsKKwogcHJpdmF0ZToKICAgc3RhdGljIGJvb2wgSW5p
dGlhbGl6ZUV2ZW50VGFibGUoKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgRW5zdXJlU3RyaW5nQnVu
ZGxlKFByb3BlcnRpZXNGaWxlIGFGaWxlKTsKIAogICBzdGF0aWMgbnNJRE9NU2NyaXB0T2JqZWN0
RmFjdG9yeSAqR2V0RE9NU2NyaXB0T2JqZWN0RmFjdG9yeSgpOwogCiAgIHN0YXRpYyBuc3Jlc3Vs
dCBIb2xkU2NyaXB0T2JqZWN0KFBSVWludDMyIGFMYW5nSUQsIHZvaWQqIGFPYmplY3QpOwpkaWZm
IC0tZ2l0IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oIGIvY29udGVudC9iYXNl
L3B1YmxpYy9uc0lEb2N1bWVudC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1l
bnQuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKQEAgLTExOSwxOCAr
MTE5LDE4IEBAIGNsYXNzIExvYWRlcjsKIAogbmFtZXNwYWNlIGRvbSB7CiBjbGFzcyBMaW5rOwog
Y2xhc3MgRWxlbWVudDsKIH0gLy8gbmFtZXNwYWNlIGRvbQogfSAvLyBuYW1lc3BhY2UgbW96aWxs
YQogCiAjZGVmaW5lIE5TX0lET0NVTUVOVF9JSUQgXAoteyAweDI4M2VjMjdkLCAweDViMjMsIDB4
NDliMiwgXA0KLSAgeyAweDk0LCAweGQ5LCAweDksIDB4YjUsIDB4ZGIsIDB4NDUsIDB4MzAsIDB4
NzMgfSB9DQoreyAweDU3ZmU0NGFlLCAweDY2NTYsIDB4NDRiOCwgXAorICB7IDB4OGQsIDB4YzAs
IDB4ZmMsIDB4YTcsIDB4NDMsIDB4MjgsIDB4YmUsIDB4ODYgfSB9CiAKIAogLy8gRmxhZyBmb3Ig
QWRkU3R5bGVTaGVldCgpLgogI2RlZmluZSBOU19TVFlMRVNIRUVUX0ZST01fQ0FUQUxPRyAgICAg
ICAgICAgICAgICAoMSA8PCAwKQogCiAvLyBFbnVtIGZvciByZXF1ZXN0aW5nIGEgcGFydGljdWxh
ciB0eXBlIG9mIGRvY3VtZW50IHdoZW4gY3JlYXRpbmcgYSBkb2MKIGVudW0gRG9jdW1lbnRGbGF2
b3IgewogICBEb2N1bWVudEZsYXZvckxlZ2FjeUd1ZXNzLCAvLyBjb21wYXQgd2l0aCBvbGQgY29k
ZSB1bnRpbCBtYWRlIEhUTUw1LWNvbXBsaWFudApAQCAtNDU4LDE2ICs0NTgsMzYgQEAgcHVibGlj
OgogICAgKiBAc2VlIG5zQmlkaVV0aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9wdGlvbnMo
UFJVaW50MzIgYUJpZGlPcHRpb25zKQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJpZGlPcHRp
b25zOwogICB9CiAgIAogICAvKioKKyAgICogU2V0IHRoZSBzYW5kYm94IGZsYWdzIGZvciB0aGlz
IGRvY3VtZW50LiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbgorICAgKiBhdCBkb2N1bWVudCBsb2Fk
LCB0aGUgZmxhZ3MgYXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgYXQgbG9hZCB0aW1lLgor
ICAgKiBAc2VlIG5zSURvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzCisgICAqLwor
ICB2b2lkIFNldFNhbmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQorICB7CisgICAg
TU9aX0FTU0VSVChHZXRSZWFkeVN0YXRlRW51bSgpID09IFJFQURZU1RBVEVfTE9BRElORyk7Cisg
ICAgbVNhbmRib3hGbGFncyA9IGFTYW5kYm94RmxhZ3M7CisgIH0KKworICAvKioKKyAgICogR2V0
IHRoZSBzYW5kYm94IGZsYWdzIGZvciB0aGlzIGRvY3VtZW50LgorICAgKiBAc2VlIG5zSURvY1No
ZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzCisgICAqLworICBQUlVpbnQzMiBHZXRTYW5k
Ym94RmxhZ3MoKSBjb25zdAorICB7CisgICAgcmV0dXJuIG1TYW5kYm94RmxhZ3M7CisgIH0KKwor
ICAvKioKICAgICogQWNjZXNzIEhUVFAgaGVhZGVyIGRhdGEgKHRoaXMgbWF5IGFsc28gZ2V0IHNl
dCBmcm9tIG90aGVyCiAgICAqIHNvdXJjZXMsIGxpa2UgSFRNTCBNRVRBIHRhZ3MpLgogICAgKi8K
ICAgdmlydHVhbCB2b2lkIEdldEhlYWRlckRhdGEobnNJQXRvbSogYUhlYWRlckZpZWxkLCBuc0FT
dHJpbmcmIGFEYXRhKSBjb25zdCA9IDA7CiAgIHZpcnR1YWwgdm9pZCBTZXRIZWFkZXJEYXRhKG5z
SUF0b20qIGFoZWFkZXJGaWVsZCwgY29uc3QgbnNBU3RyaW5nJiBhRGF0YSkgPSAwOwogCiAgIC8q
KgogICAgKiBDcmVhdGUgYSBuZXcgcHJlc2VudGF0aW9uIHNoZWxsIHRoYXQgd2lsbCB1c2UgYUNv
bnRleHQgZm9yIGl0cwpAQCAtMTc5MywxNiArMTgxMywyMSBAQCBwcm90ZWN0ZWQ6CiAgIC8vIElm
IG1Jc1N0YXRpY0RvY3VtZW50IGlzIHRydWUsIG1PcmlnaW5hbERvY3VtZW50IHBvaW50cyB0byB0
aGUgb3JpZ2luYWwKICAgLy8gZG9jdW1lbnQuCiAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBtT3Jp
Z2luYWxEb2N1bWVudDsKIAogICAvLyBUaGUgYmlkaSBvcHRpb25zIGZvciB0aGlzIGRvY3VtZW50
LiAgV2hhdCB0aGlzIGJpdGZpZWxkIG1lYW5zIGlzCiAgIC8vIGRlZmluZWQgaW4gbnNCaWRpVXRp
bHMuaAogICBQUlVpbnQzMiBtQmlkaU9wdGlvbnM7CiAKKyAgLy8gVGhlIHNhbmRib3ggZmxhZ3Mg
b24gdGhlIGRvY3VtZW50LiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUgb2YgdGhlCisgIC8vIGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJs
ZSBjb250ZW50LCBpZiBleGlzdGVudC4gVGhlc2UgYXJlIHNldCBhdCBsb2FkIHRpbWUgYW5kCisg
IC8vIGFyZSBpbW11dGFibGUgLSBzZWUgbnNJRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUg
ZmxhZ3MuCisgIFBSVWludDMyIG1TYW5kYm94RmxhZ3M7CisKICAgbnNDU3RyaW5nIG1Db250ZW50
TGFuZ3VhZ2U7CiBwcml2YXRlOgogICBuc0NTdHJpbmcgbUNvbnRlbnRUeXBlOwogcHJvdGVjdGVk
OgogCiAgIC8vIFRoZSBkb2N1bWVudCdzIHNlY3VyaXR5IGluZm8KICAgbnNDT01QdHI8bnNJU3Vw
cG9ydHM+IG1TZWN1cml0eUluZm87CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnND
b250ZW50VXRpbHMuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKLS0t
IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKKysrIGIvY29udGVudC9iYXNl
L3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKQEAgLTIwMSwxNiArMjAxLDE3IEBAIHN0YXRpYyBOU19E
RUZJTkVfQ0lEKGtYVEZTZXJ2aWNlQ0lELCBOU18KICNpbmNsdWRlICJuc0NvbnRlbnRETEYuaCIK
ICNpZmRlZiBNT1pfTUVESUEKICNpbmNsdWRlICJuc0hUTUxNZWRpYUVsZW1lbnQuaCIKICNlbmRp
ZgogI2luY2x1ZGUgIm5zRE9NVG91Y2hFdmVudC5oIgogI2luY2x1ZGUgIm5zSVNjcmlwdEVsZW1l
bnQuaCIKICNpbmNsdWRlICJuc0lDb250ZW50Vmlld2VyLmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0
TG9hZGluZ0NvbnRlbnQuaCIKKyNpbmNsdWRlICJuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXIuaCIK
IAogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMuaCIKIAogI2luY2x1ZGUgIm5zV3JhcHBl
ckNhY2hlSW5saW5lcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNpbmcg
bmFtZXNwYWNlIG1vemlsbGE6OmxheWVyczsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjp3aWRn
ZXQ7CkBAIC02ODgsMTYgKzY4OSw2MyBAQCBuc0NvbnRlbnRVdGlsczo6R2V0UGFyc2VyU2Vydmlj
ZSgpCiAgICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwg
JnNQYXJzZXJTZXJ2aWNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNl
clNlcnZpY2UgPSBuc251bGw7CiAgICAgfQogICB9CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNl
OwogfQorLyoqCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0
cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVy
dHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFsbHkuCisgKgorICogQHBhcmFt
IGFBdHRyaWJ1dGUgICAgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJl
dHVybiAgICAgICAgICAgICAgdGhlIHNldCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250
ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBz
YW5kYm94QXR0clZhbHVlKQoreworICAvLyBJZiB0aGVyZSdzIGEgc2FuZGJveCBhdHRyaWJ1dGUg
YXQgYWxsIChhbmQgdGhlcmUgaXMgaWYgdGhpcyBpcyBiZWluZworICAvLyBjYWxsZWQpLCBzdGFy
dCBvZmYgYnkgc2V0dGluZyBhbGwgdGhlIHJlc3RyaWN0aW9uIGZsYWdzLgorICBQUlVpbnQzMiBv
dXQgPSBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04gfAorICAgIG5zSURvY1NoZWxs
OjpTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiB8CisgICAgbnNJRG9jU2hlbGw6OlNBTkRC
T1hFRF9QTFVHSU5TIHwgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4gfAorICAgIG5zSURv
Y1NoZWxsOjpTQU5EQk9YRURfRk9STVMgfCBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFMg
fAorICAgIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTOworCisgIGlm
ICghc2FuZGJveEF0dHJWYWx1ZS5Jc0VtcHR5KCkpIHsKKyAgICAvLyBUaGUgc2VwYXJhdG9yIG9w
dGlvbmFsIGZsYWcgaXMgdXNlZCBiZWNhdXNlIHRoZSBIVE1MNSBzcGVjIHNheXMgYW55CisgICAg
Ly8gd2hpdGVzcGFjZSBpcyBvayBhcyBhIHNlcGFyYXRvciwgd2hpY2ggaXMgd2hhdCB0aGlzIGRv
ZXMuCisgICAgbnNDaGFyU2VwYXJhdGVkVG9rZW5pemVyVGVtcGxhdGU8bnNDb250ZW50VXRpbHM6
OklzSFRNTFdoaXRlc3BhY2U+CisgICAgICB0b2tlbml6ZXIoc2FuZGJveEF0dHJWYWx1ZSwgJyAn
LAorICAgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXJUZW1wbGF0ZTxuc0NvbnRlbnRVdGls
czo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9PUFRJT05BTCk7CisKKyAgICB3aGlsZSAo
dG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAgICAgbnNEZXBlbmRlbnRTdWJzdHJpbmcg
dG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKyAgICAgIGlmICh0b2tlbi5FcXVhbHMo
bnNHa0F0b21zOjphbGxvd3NjcmlwdHMtPkdldFVURjE2U3RyaW5nKCksIG5zQ2FzZUluc2Vuc2l0
aXZlU3RyaW5nQ29tcGFyYXRvcigpKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpT
QU5EQk9YRURfU0NSSVBUUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uRXF1YWxzKG5zR2tBdG9t
czo6YWxsb3dzYW1lb3JpZ2luLT5HZXRVVEYxNlN0cmluZygpLCBuc0Nhc2VJbnNlbnNpdGl2ZVN0
cmluZ0NvbXBhcmF0b3IoKSkpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJP
WEVEX09SSUdJTjsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uRXF1YWxzKG5zR2tBdG9tczo6YWxs
b3dmb3Jtcy0+R2V0VVRGMTZTdHJpbmcoKSwgbnNDYXNlSW5zZW5zaXRpdmVTdHJpbmdDb21wYXJh
dG9yKCkpKSB7CisgICAgICAgIG91dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9GT1JNUzsK
KyAgICAgIH0gZWxzZSBpZiAodG9rZW4uRXF1YWxzKG5zR2tBdG9tczo6YWxsb3dzY3JpcHRzLT5H
ZXRVVEYxNlN0cmluZygpLCBuc0Nhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbXBhcmF0b3IoKSkpIHsK
KyAgICAgICAgLy8gYWxsb3ctc2NyaXB0cyByZW1vdmVzIGJvdGggU0FOREJPWEVEX1NDUklQVFMg
YW5kCisgICAgICAgIC8vIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMuCisgICAgICAgIG91
dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9TQ1JJUFRTOworICAgICAgICBvdXQgJj0gfm5z
SURvY1NoZWxsOjpTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTOworICAgICAgfSBlbHNlIGlm
ICh0b2tlbi5FcXVhbHMobnNHa0F0b21zOjphbGxvd3RvcG5hdmlnYXRpb24tPkdldFVURjE2U3Ry
aW5nKCksIG5zQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29tcGFyYXRvcigpKSkgeworICAgICAgICBv
dXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTjsKKyAgICAg
IH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb3V0OworfQogCiAjaWZkZWYgTU9aX1hURgogbnNJ
WFRGU2VydmljZSoKIG5zQ29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFz
WFRGU2VydmljZSkgewogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNlcnZp
Y2VDSUQsICZzWFRGU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKQEAgLTU3Njks
MTcgKzU4MTcsMTggQEAgbnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJpdHlDb250ZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8gc3RhdGljCiBi
b29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFsKiBhTG9h
ZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFu
bmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkq
IGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JB
Ym91dEJsYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVw
Rm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFG
b3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBjaGFubmVsLCBi
dXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRoZWlyIG93biBz
ZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25nIHRoYXQgdGhl
IG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1cHBsaWVkKSB1
bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6YmxhbmsuCiAgIC8v
IFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJzIGZvciB3aGF0
IG93bmVycwpAQCAtNTc4NywyMyArNTgzNiwyNyBAQCBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFu
bmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVsbDo6TG9hZFVS
SSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRoZSBvd25lciBp
ZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAgdmVyeSB3cm9u
ZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhhdAogICAvLyAg
ICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAgIC8vCiAgIC8v
ICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4gdGhleSBhcmUg
Y3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3VsZCBiZSBiYWQh
KQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIgd2lsbCBiZSBz
ZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0cyBvd24gc2Vj
dXJpdHkgY29udGV4dC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1FCisgIC8vIHNh
bmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFuZCBpdHMgZG9j
dW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFsLgogICBib29s
IGluaGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dCB0byBy
ZXR1cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24ndCBjYWxs
IE5TX0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBjb25kaXRp
b24gbmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQgd2hl
cmUKICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRoZSBvd25l
ci4KLSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAm
aW5oZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBO
U19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChOU19TVUND
RUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgorICAg
ICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFV
UkkpKSkpKSkgewogICAgIGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAg
ICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLwogICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNp
bmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhl
ciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25z
RG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250
ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1
bWVudC5jcHAKQEAgLTIzODEsMTYgKzIzODEsMjUgQEAgbnNEb2N1bWVudDo6U3RhcnREb2N1bWVu
dExvYWQoY29uc3QgY2hhcgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgnOycsIHNlbWljb2xvbiwg
ZW5kKTsKICAgICBTZXRDb250ZW50VHlwZUludGVybmFsKFN1YnN0cmluZyhzdGFydCwgc2VtaWNv
bG9uKSk7CiAgIH0KIAogICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhhQ2hhbm5lbCk7CiAKICAg
bUNoYW5uZWwgPSBhQ2hhbm5lbDsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlzIGJlaW5nIGxv
YWRlZCBieSBhIGRvY3NoZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdzCisgIC8vIHRvIHRoZSBk
b2N1bWVudC4gVGhlc2UgYXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgaGVyZS4KKyAgbnND
T01QdHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNvbnRhaW5l
cik7CisKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0
U2FuZGJveEZsYWdzKCZtU2FuZGJveEZsYWdzKTsKKyAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwg
cnYpOworICB9CisKICAgbnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNEb2N1bWVu
dDo6SW5pdENTUCgpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIu
Y3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jh
c2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxv
YWRlci5jcHAKQEAgLTExMywxNiArMTEzLDE4IEBACiAjaW5jbHVkZSAibW96aWxsYS9HdWFyZE9i
amVjdHMuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibW96
aWxsYS91bnVzZWQuaCIKICNpbmNsdWRlICJtb3ppbGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVk
ZSAibW96aWxsYS9sYXlvdXQvUmVuZGVyRnJhbWVQYXJlbnQuaCIKIAogI2luY2x1ZGUgImpzYXBp
LmgiCiAKKyNpbmNsdWRlICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCisKIHVzaW5nIG5hbWVzcGFj
ZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFj
ZSBtb3ppbGxhOjpsYXllcnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5b3V0OwogdHlw
ZWRlZiBGcmFtZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7CiAKIGNsYXNzIG5zQXN5bmNEb2NTaGVs
bERlc3Ryb3llciA6IHB1YmxpYyBuc1J1bm5hYmxlCiB7CkBAIC00NjgsMjAgKzQ3MCw3NyBAQCBu
c0ZyYW1lTG9hZGVyOjpSZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3QgdG8gYmUg
c2FmZSwgcmVjaGVjayB1cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQpOwogICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsTG9hZElu
Zm8+IGxvYWRJbmZvOwogICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9BZGRSZWZz
KGxvYWRJbmZvKSk7CiAgIE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9GQUlMVVJF
KTsKIAotICAvLyBXZSdsbCB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3Vt
ZW50IGxvYWRlZCBpbnNpZGUgdXMuICBUaGlzCi0gIC8vIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVk
ZWQgdG8gcHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluCi0gIC8vIHN1
YmZyYW1lcyEKLSAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lw
YWwoKSk7CisgIC8vIElzIHRoaXMgYW4gPGlmcmFtZT4gd2l0aCBhIHNhbmRib3ggYXR0cmlidXRl
IG9yIGEgcGFyZW50IHdoaWNoIGlzCisgIC8vIHNhbmRib3hlZCA/CisgIG5zSFRNTElGcmFtZUVs
ZW1lbnQgKiBpZnJhbWUgPQorICAgIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkZyb21Db250ZW50KG1P
d25lckNvbnRlbnQpOworCisgIGlmIChpZnJhbWUpIHsKKyAgICBQUlVpbnQzMiBzYW5kYm94Rmxh
Z3MgPSBpZnJhbWUtPkdldFNhbmRib3hGbGFncygpOworCisgICAgUFJVaW50MzIgcGFyZW50U2Fu
ZGJveEZsYWdzID0gMDsKKworICAgIC8vIEdldCB0aGUgcGFyZW50J3Mgc2FuZGJveCBmbGFncywg
dGhleSdyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZQorICAgIC8vIGZyYW1lIGJlaW5nIGxv
YWRlZCBuZWVkcyB0byBiZSBzYW5kYm94ZWQuCisgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVl
SXRlbT4gcGFyZW50RG9jU2hlbGxJdGVtOworICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0
ZW0+IGN1ckRvY1NoZWxsSXRlbSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG1Eb2NTaGVsbCk7CisKKyAg
ICBpZiAoTlNfU1VDQ0VFREVEKGN1ckRvY1NoZWxsSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRS
ZWZzKHBhcmVudERvY1NoZWxsSXRlbSkpKSkgeworICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+
IHBhcmVudERvYyA9IGRvX0dldEludGVyZmFjZShwYXJlbnREb2NTaGVsbEl0ZW0pOworCisgICAg
ICBpZiAocGFyZW50RG9jKSB7CisgICAgICAgIHBhcmVudFNhbmRib3hGbGFncyA9IHBhcmVudERv
Yy0+R2V0U2FuZGJveEZsYWdzKCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHNhbmRib3hG
bGFncyB8fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgIGlmIChwYXJlbnRTYW5kYm94Rmxh
Z3MpIHsKKyAgICAgICAgLy8gVGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0cmljdGlvbnMsIG5v
dCByZW1vdmUgdGhlbS4KKyAgICAgICAgc2FuZGJveEZsYWdzIHw9IHBhcmVudFNhbmRib3hGbGFn
czsKKyAgICAgIH0KKworICAgICAgbURvY1NoZWxsLT5TZXRTYW5kYm94RmxhZ3Moc2FuZGJveEZs
YWdzKTsKKworICAgICAgLy8gU2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGluZyBhcyBzcGVjaWZp
ZWQuCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9PUklH
SU4pIHsKKyAgICAgICAgLy8gYWxsb3ctc2FtZS1kb21haW4gd2Fzbid0IHNwZWNpZmllZCwgd2Ug
bmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lwYWwgYW5kCisgICAgICAgIC8vIHVzZSB0
aGF0IGFzIHRoZSBvd25lci4KKyAgICAgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBudWxsUHJp
bmNpcGFsID0gZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9udWxscHJpbmNpcGFsOzEi
KTsKKyAgICAgICAgbG9hZEluZm8tPlNldE93bmVyKG51bGxQcmluY2lwYWwpOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gVXNlIHRoZSAnbm9ybWFsJyBwcmluY2lwYWwgZm9yIHRoZSA8aWZy
YW1lPi4KKyAgICAgICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmlu
Y2lwYWwoKSk7CisgICAgICB9CisKKyAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVs
bDo6U0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICAgICAgICBtRG9jU2hlbGwtPlNldEFsbG93SmF2
YXNjcmlwdChmYWxzZSk7CisgICAgICB9CisKKyAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lE
b2NTaGVsbDo6U0FOREJPWEVEX1BMVUdJTlMpIHsKKyAgICAgICAgICBtRG9jU2hlbGwtPlNldEFs
bG93UGx1Z2lucyhmYWxzZSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgIC8vIFdl
IGFyZSBub3Qgc2FuZGJveGVkIC0gd2UgdXNlIG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRo
ZQorICAgICAgICAgLy8gZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRoaXMgaXMgdmVyeSBp
bXBvcnRhbnQ7IG5lZWRlZCB0bworICAgICAgICAgLy8gcHJldmVudCBYU1MgYXR0YWNrcyBvbiBk
b2N1bWVudHMgbG9hZGVkIGluIHN1YmZyYW1lcyEKKyAgICAgICAgIGxvYWRJbmZvLT5TZXRPd25l
cihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOworICAgIH0KKyAgfSBlbHNlIHsKKyAg
ICAgIC8vIE5vdCBhbiBpZnJhbWUgYW5kIG5vdCBzYW5kYm94ZWQsIHdlIHVzZSBvdXIgcHJpbmNp
cGFsLCBub3QgdGhhdCBvZiB0aGUKKyAgICAgIC8vIGRvY3VtZW50IGxvYWRlZCBpbnNpZGUgdXMu
ICBUaGlzIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVkZWQgdG8KKyAgICAgIC8vIHByZXZlbnQgWFNT
IGF0dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbiBzdWJmcmFtZXMhCisgICAgICBsb2FkSW5m
by0+U2V0T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKKyAgfQogCiAgIG5z
Q09NUHRyPG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVudC0+Tm9kZVByaW5j
aXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAgTlNfRU5TVVJFX1NV
Q0NFU1MocnYsIHJ2KTsKIAogICBsb2FkSW5mby0+U2V0UmVmZXJyZXIocmVmZXJyZXIpOwogCiAg
IC8vIEtpY2sgb2ZmIHRoZSBsb2FkLi4uCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25z
R2tBdG9tTGlzdC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAotLS0gYS9jb250
ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0
b21MaXN0LmgKQEAgLTkzLDE3ICs5MywyMSBAQCBHS19BVE9NKGFjdHVhdGUsICJhY3R1YXRlIikK
IEdLX0FUT00oYWRkcmVzcywgImFkZHJlc3MiKQogR0tfQVRPTShhZnRlciwgImFmdGVyIikKIEdL
X0FUT00oYWZ0ZXJfZW5kLCAiYWZ0ZXJfZW5kIikKIEdLX0FUT00oYWZ0ZXJfc3RhcnQsICJhZnRl
cl9zdGFydCIpCiBHS19BVE9NKGFsaWduLCAiYWxpZ24iKQogR0tfQVRPTShhbGluaywgImFsaW5r
IikKIEdLX0FUT00oYWxsLCAiYWxsIikKIEdLX0FUT00oYWxsb3dldmVudHMsICJhbGxvd2V2ZW50
cyIpCitHS19BVE9NKGFsbG93Zm9ybXMsICJhbGxvdy1mb3JtcyIpCiBHS19BVE9NKGFsbG93bmVn
YXRpdmVhc3NlcnRpb25zLCAiYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMiKQorR0tfQVRPTShhbGxv
d3NhbWVvcmlnaW4sICJhbGxvdy1zYW1lLW9yaWdpbiIpCitHS19BVE9NKGFsbG93c2NyaXB0cywg
ImFsbG93LXNjcmlwdHMiKQorR0tfQVRPTShhbGxvd3RvcG5hdmlnYXRpb24sICJhbGxvdy10b3At
bmF2aWdhdGlvbiIpCiBHS19BVE9NKGFsbG93dW50cnVzdGVkLCAiYWxsb3d1bnRydXN0ZWQiKQog
R0tfQVRPTShhbHQsICJhbHQiKQogR0tfQVRPTShhbHRlcm5hdGUsICJhbHRlcm5hdGUiKQogR0tf
QVRPTShhbHdheXMsICJhbHdheXMiKQogR0tfQVRPTShhbmNlc3RvciwgImFuY2VzdG9yIikKIEdL
X0FUT00oYW5jZXN0b3JPclNlbGYsICJhbmNlc3Rvci1vci1zZWxmIikKIEdLX0FUT00oX2FuZCwg
ImFuZCIpCiBHS19BVE9NKGFueSwgImFueSIpCkBAIC04NzMsMTYgKzg3NywxNyBAQCBHS19BVE9N
KHJvd3NwYW4sICJyb3dzcGFuIikKIEdLX0FUT00ocnAsICJycCIpCiBHS19BVE9NKHJ0LCAicnQi
KQogR0tfQVRPTShydGwsICJydGwiKQogR0tfQVRPTShydWJ5LCAicnVieSIpCiBHS19BVE9NKHJ1
bGUsICJydWxlIikKIEdLX0FUT00ocnVsZXMsICJydWxlcyIpCiBHS19BVE9NKHMsICJzIikKIEdL
X0FUT00oc2FtcCwgInNhbXAiKQorR0tfQVRPTShzYW5kYm94LCAic2FuZGJveCIpCiBHS19BVE9N
KHNiYXR0ciwgInNiYXR0ciIpCiBHS19BVE9NKHNjYWxlLCAic2NhbGUiKQogR0tfQVRPTShzY2Fu
LCAic2NhbiIpCiBHS19BVE9NKHNjaGVtZSwgInNjaGVtZSIpCiBHS19BVE9NKHNjb3BlLCAic2Nv
cGUiKQogR0tfQVRPTShzY29wZWQsICJzY29wZWQiKQogR0tfQVRPTShzY3JlZW4sICJzY3JlZW4i
KQogR0tfQVRPTShzY3JlZW5YLCAic2NyZWVuWCIpCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQv
c3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMv
bnNIVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxGb3JtRWxlbWVudC5jcHAKQEAgLTY4MywxNyArNjgzLDI1IEBAIG5zSFRNTEZvcm1FbGVtZW50
OjpEb1N1Ym1pdE9yUmVzZXQobnNFdmUKICAgICByZXR1cm4gRG9SZXNldCgpOwogICB9CiAKICAg
aWYgKE5TX0ZPUk1fU1VCTUlUID09IGFNZXNzYWdlKSB7CiAgICAgLy8gRG9uJ3Qgc3VibWl0IGlm
IHdlJ3JlIG5vdCBpbiBhIGRvY3VtZW50LgogICAgIGlmICghZG9jKSB7CiAgICAgICByZXR1cm4g
TlNfT0s7CiAgICAgfQotICAgIHJldHVybiBEb1N1Ym1pdChhRXZlbnQpOworICAgIC8vIERvbid0
IHN1Ym1pdCBpZiB3ZSdyZSBpbiBhIHNhbmRib3hlZCBmcmFtZSBhbmQgZm9ybSBzdWJtaXQKKyAg
ICAvLyBpcyBkaXNhYmxlZC4KKyAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSBkb2MtPkdldFNh
bmRib3hGbGFncygpOworCisgICAgaWYgKCEoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9GT1JNUykpIHsKKyAgICAgIHJldHVybiBEb1N1Ym1pdChhRXZlbnQpOworICAgIH0K
KworCXJldHVybiBOU19PSzsKICAgfQogCiAgIE1PWl9BU1NFUlQoZmFsc2UpOwogICByZXR1cm4g
TlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0hUTUxGb3JtRWxlbWVudDo6RG9SZXNldCgpCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAg
Yi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKLS0tIGEv
Y29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCisrKyBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAtMzMsODQg
KzMzLDM2IEBACiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBv
ZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoKICAqICoqKioqIEVORCBMSUNFTlNF
IEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJtb3ppbGxhL1V0aWwuaCIKIAogI2luY2x1ZGUg
Im5zSURPTUhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAibnNHZW5lcmljSFRNTEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJuc0lET01Eb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zSURPTUdldFNW
R0RvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJu
c0drQXRvbXMuaCIKLSNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zTWFwcGVk
QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIm5zRE9NRXJyb3IuaCIKLSNpbmNsdWRlICJuc1J1bGVE
YXRhLmgiCi0jaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zSFRNTElGcmFt
ZUVsZW1lbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2Ug
bW96aWxsYTo6ZG9tOwogCi1jbGFzcyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2Vu
ZXJpY0hUTUxGcmFtZUVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMg
bnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJs
aWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLXsKLXB1YmxpYzoKLSAgbnNIVE1MSUZyYW1lRWxlbWVu
dChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCi0gICAgICAgICAgICAg
ICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6
ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOwotICB2aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7
Ci0KLSAgLy8gbnNJU3VwcG9ydHMKLSAgTlNfREVDTF9JU1VQUE9SVFNfSU5IRVJJVEVECi0KLSAg
Ly8gbnNJRE9NTm9kZQotICBOU19GT1JXQVJEX05TSURPTU5PREUobnNHZW5lcmljSFRNTEZyYW1l
RWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUVsZW1lbnQKLSAgTlNfRk9SV0FSRF9OU0lET01FTEVN
RU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1MRWxlbWVu
dAotICBOU19GT1JXQVJEX05TSURPTUhUTUxFTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1l
bnQ6OikKLQotICAvLyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAotICBOU19ERUNMX05TSURPTUhU
TUxJRlJBTUVFTEVNRU5UCi0KLSAgLy8gbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLSAgTlNfREVDTF9O
U0lET01HRVRTVkdET0NVTUVOVAotCi0gIC8vIG5zSUNvbnRlbnQKLSAgdmlydHVhbCBib29sIFBh
cnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpOwotICBOU19JTUVUSE9EXyhib29sKSBJc0F0
dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKLSAgdmlydHVh
bCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigp
IGNvbnN0OwotCi0gIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5m
bywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0OwotICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBH
ZXRDbGFzc0luZm8oKTsKLX07Ci0KLQogTlNfSU1QTF9OU19ORVdfSFRNTF9FTEVNRU5UX0NIRUNL
X1BBUlNFUihJRnJhbWUpCiAKIAogbnNIVE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZyYW1lRWxl
bWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJzZXIpCiAg
IDogbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFyc2VyKQogewog
fQogCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojp+bnNIVE1MSUZyYW1lRWxlbWVudCgpCiB7CisgIGlm
IChtU2FuZGJveFRva2VuTGlzdCkKKyAgICBtU2FuZGJveFRva2VuTGlzdC0+RHJvcFJlZmVyZW5j
ZSgpOwogfQogCi0KIE5TX0lNUExfQUREUkVGX0lOSEVSSVRFRChuc0hUTUxJRnJhbWVFbGVtZW50
LG5zR2VuZXJpY0VsZW1lbnQpCiBOU19JTVBMX1JFTEVBU0VfSU5IRVJJVEVEKG5zSFRNTElGcmFt
ZUVsZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIAogRE9NQ0lfTk9ERV9EQVRBKEhUTUxJRnJhbWVF
bGVtZW50LCBuc0hUTUxJRnJhbWVFbGVtZW50KQogCiAvLyBRdWVyeUludGVyZmFjZSBpbXBsZW1l
bnRhdGlvbiBmb3IgbnNIVE1MSUZyYW1lRWxlbWVudAogTlNfSU5URVJGQUNFX1RBQkxFX0hFQUQo
bnNIVE1MSUZyYW1lRWxlbWVudCkKICAgTlNfSFRNTF9DT05URU5UX0lOVEVSRkFDRV9UQUJMRV9C
RUdJTihuc0hUTUxJRnJhbWVFbGVtZW50KQpAQCAtMTUwLDE2ICsxMDIsMjggQEAgbnNIVE1MSUZy
YW1lRWxlbWVudDo6R2V0Q29udGVudFdpbmRvdyhucwogfQogCiBOU19JTUVUSE9ESU1QCiBuc0hU
TUxJRnJhbWVFbGVtZW50OjpHZXRTVkdEb2N1bWVudChuc0lET01Eb2N1bWVudCAqKmFSZXN1bHQp
CiB7CiAgIHJldHVybiBHZXRDb250ZW50RG9jdW1lbnQoYVJlc3VsdCk7CiB9CiAKK05TX0lNRVRI
T0RJTVAKK25zSFRNTElGcmFtZUVsZW1lbnQ6OkdldFNhbmRib3gobnNJRE9NRE9NU2V0dGFibGVU
b2tlbkxpc3QqKiBhU2FuZGJveCkKK3sKKyAgaWYgKCFtU2FuZGJveFRva2VuTGlzdCkgeworICAg
IG1TYW5kYm94VG9rZW5MaXN0ID0gbmV3IG5zRE9NU2V0dGFibGVUb2tlbkxpc3QodGhpcywgbnNH
a0F0b21zOjpzYW5kYm94KTsKKyAgfQorCisgIE5TX0FERFJFRigqYVNhbmRib3ggPSBtU2FuZGJv
eFRva2VuTGlzdCk7CisKKyAgcmV0dXJuIE5TX09LOworfQorCiBib29sCiBuc0hUTUxJRnJhbWVF
bGVtZW50OjpQYXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KQogewog
ICBpZiAoYU5hbWVzcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CiAgICAgaWYgKGFBdHRy
aWJ1dGUgPT0gbnNHa0F0b21zOjptYXJnaW53aWR0aCkgewpAQCAtMTc4LDE2ICsxNDIsMjAgQEAg
bnNIVE1MSUZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJbgogICAgICAgcmV0dXJuIFBh
cnNlRnJhbWVib3JkZXJWYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBpZiAoYUF0
dHJpYnV0ZSA9PSBuc0drQXRvbXM6OnNjcm9sbGluZykgewogICAgICAgcmV0dXJuIFBhcnNlU2Ny
b2xsaW5nVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CiAgICAgaWYgKGFBdHRyaWJ1dGUg
PT0gbnNHa0F0b21zOjphbGlnbikgewogICAgICAgcmV0dXJuIFBhcnNlQWxpZ25WYWx1ZShhVmFs
dWUsIGFSZXN1bHQpOwogICAgIH0KKyAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OnNh
bmRib3gpIHsKKyAgICAgIGFSZXN1bHQuUGFyc2VBdG9tQXJyYXkoYVZhbHVlKTsKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KICAgfQogCiAgIHJldHVybiBuc0dlbmVyaWNIVE1MRnJhbWVFbGVt
ZW50OjpQYXJzZUF0dHJpYnV0ZShhTmFtZXNwYWNlSUQsIGFBdHRyaWJ1dGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWUsIGFSZXN1bHQp
OwogfQogCiBzdGF0aWMgdm9pZAogTWFwQXR0cmlidXRlc0ludG9SdWxlKGNvbnN0IG5zTWFwcGVk
QXR0cmlidXRlcyogYUF0dHJpYnV0ZXMsCkBAIC0yNjgsOCArMjM2LDIyIEBAIG5zSFRNTElGcmFt
ZUVsZW1lbnQ6OklzQXR0cmlidXRlTWFwcGVkKGMKIAogCiBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNG
dW5jCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBj
b25zdAogewogICByZXR1cm4gJk1hcEF0dHJpYnV0ZXNJbnRvUnVsZTsKIH0KIAorbnNyZXN1bHQK
K25zSFRNTElGcmFtZUVsZW1lbnQ6OkFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwg
bnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc0FTdHJpbmcqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgYU5vdGlmeSkKK3sKKyAgaWYgKGFOYW1lID09IG5zR2tBdG9tczo6c2FuZGJveCAmJiBh
TmFtZVNwYWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKKyAgICAvLyBQYXJzZSB0aGUgbmV3
IHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSwgYW5kIGlmIHdlIGhhdmUgYSBkb2NzaGVs
bAorICAgIC8vIHNldCBpdHMgc2FuZGJveCBmbGFncyBhcHByb3ByaWF0ZWx5LgorICAgIGlmICht
RnJhbWVMb2FkZXIpCisgICAgICBtRnJhbWVMb2FkZXItPkdldEV4aXN0aW5nRG9jU2hlbGwoKS0+
U2V0U2FuZGJveEZsYWdzKG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0Zs
YWdzKCphVmFsdWUpKTsKKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6OkFmdGVy
U2V0QXR0cihhTmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFOb3RpZnkpOworfQpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxl
bWVudC5oCkBAIC0wLDAgKzEsMTE5IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7
IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisvKiAqKioq
KiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAv
TEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRv
IHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNl
Iik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAor
ICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
ICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywK
KyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
bmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICog
VGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxsYSBDb21tdW5pY2F0b3IgY2xpZW50IGNvZGUuCisg
KgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBO
ZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQg
YnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgKKyAqIHRoZSBJ
bml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRv
cihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1h
eSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksCisgKiBvciB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVy
ICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQ
TCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4g
SWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25s
eQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQg
bm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5
IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUg
bm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRo
ZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEg
cmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhl
IHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisg
KiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisjaW5jbHVkZSAibW96aWxsYS9V
dGlsLmgiCisKKyNpbmNsdWRlICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUg
Im5zR2VuZXJpY0hUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTVNWR0RvY3Vt
ZW50LmgiCisjaW5jbHVkZSAibnNHa0F0b21zLmgiCisjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJuc0RPTUVycm9yLmgi
CisjaW5jbHVkZSAibnNSdWxlRGF0YS5oIgorI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNp
bmNsdWRlICJuc0RPTVNldHRhYmxlVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRp
bHMuaCIKKwordXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7Cit1c2luZyBuYW1lc3BhY2UgbW96aWxs
YTo6ZG9tOworCitjbGFzcyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hU
TUxGcmFtZUVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9N
SFRNTElGcmFtZUVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJ
RE9NR2V0U1ZHRG9jdW1lbnQKK3sKK3B1YmxpYzoKKyAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJl
YWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCisgICAgICAgICAgICAgICAgICAg
ICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpO
T1RfRlJPTV9QQVJTRVIpOworICB2aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7CisKKyAg
Ly8gbnNJU3VwcG9ydHMKKyAgTlNfREVDTF9JU1VQUE9SVFNfSU5IRVJJVEVECisKKyAgLy8gbnNJ
RE9NTm9kZQorICBOU19GT1JXQVJEX05TSURPTU5PREUobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVu
dDo6KQorCisgIC8vIG5zSURPTUVsZW1lbnQKKyAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UKG5z
R2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKKworICAvLyBuc0lET01IVE1MRWxlbWVudAorICBO
U19GT1JXQVJEX05TSURPTUhUTUxFTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikK
KworICAvLyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAorICBOU19ERUNMX05TSURPTUhUTUxJRlJB
TUVFTEVNRU5UCisKKyAgLy8gbnNJRE9NR2V0U1ZHRG9jdW1lbnQKKyAgTlNfREVDTF9OU0lET01H
RVRTVkdET0NVTUVOVAorCisgIC8vIG5zSUNvbnRlbnQKKyAgdmlydHVhbCBib29sIFBhcnNlQXR0
cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpOworICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0
ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKKyAgdmlydHVhbCBuc01h
cFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0
OworCisgIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJ
Tm9kZSAqKmFSZXN1bHQpIGNvbnN0OworICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFz
c0luZm8oKTsKKworICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1l
U3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNBU3RyaW5nKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBhTm90aWZ5KTsKKworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKSB7Cisg
ICAgbnNBdXRvU3RyaW5nIHNhbmRib3hBdHRyOworCisgICAgaWYgKEdldEF0dHIoa05hbWVTcGFj
ZUlEX05vbmUsIG5zR2tBdG9tczo6c2FuZGJveCwgc2FuZGJveEF0dHIpKSB7CisgICAgICByZXR1
cm4gbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2FuZGJveEF0
dHIpOworICAgIH0KKworICAgIC8vIE5vIHNhbmRib3ggYXR0cmlidXRlLCBubyBzYW5kYm94IGZs
YWdzLgorICAgIHJldHVybiAwOworICB9CisKKyAgc3RhdGljIG5zSFRNTElGcmFtZUVsZW1lbnQq
IEZyb21Db250ZW50KG5zSUNvbnRlbnQgKmFDb250ZW50KQorICB7CisgICAgaWYgKGFDb250ZW50
LT5Jc0hUTUwobnNHa0F0b21zOjppZnJhbWUpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG5z
SFRNTElGcmFtZUVsZW1lbnQqPihhQ29udGVudCk7CisgICAgcmV0dXJuIG5zbnVsbDsKKyAgfQor
Citwcm90ZWN0ZWQ6CisgIG5zUmVmUHRyPG5zRE9NU2V0dGFibGVUb2tlbkxpc3Q+ICBtU2FuZGJv
eFRva2VuTGlzdDsKK307CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3Bw
IGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9j
U2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKQEAgLTcyNywxNiAr
NzI3LDE3IEBAIG5zRG9jU2hlbGw6Om5zRG9jU2hlbGwoKToKICAgICBtQnVzeUZsYWdzKEJVU1lf
RkxBR1NfTk9ORSksCiAgICAgbUFwcFR5cGUobnNJRG9jU2hlbGw6OkFQUF9UWVBFX1VOS05PV04p
LAogICAgIG1Mb2FkVHlwZSgwKSwKICAgICBtTWFyZ2luV2lkdGgoLTEpLAogICAgIG1NYXJnaW5I
ZWlnaHQoLTEpLAogICAgIG1JdGVtVHlwZSh0eXBlQ29udGVudCksCiAgICAgbVByZXZpb3VzVHJh
bnNJbmRleCgtMSksCiAgICAgbUxvYWRlZFRyYW5zSW5kZXgoLTEpLAorICAgIG1TYW5kYm94Rmxh
Z3MoMCksCiAgICAgbUNyZWF0ZWQoZmFsc2UpLAogICAgIG1BbGxvd1N1YmZyYW1lcyh0cnVlKSwK
ICAgICBtQWxsb3dQbHVnaW5zKHRydWUpLAogICAgIG1BbGxvd0phdmFzY3JpcHQodHJ1ZSksCiAg
ICAgbUFsbG93TWV0YVJlZGlyZWN0cyh0cnVlKSwKICAgICBtQWxsb3dJbWFnZXModHJ1ZSksCiAg
ICAgbUFsbG93RE5TUHJlZmV0Y2godHJ1ZSksCiAgICAgbUFsbG93V2luZG93Q29udHJvbCh0cnVl
KSwKQEAgLTI4NzgsMTYgKzI4NzksNzUgQEAgbnNEb2NTaGVsbDo6RmluZEl0ZW1XaXRoTmFtZShj
b25zdCBQUlVuaQogICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGZvdW5kSXRlbSkgewogICAgICAgICAgICAgLy8gV2UgcmV0dXJuIGZvdW5k
SXRlbSBoZXJlIGV2ZW4gaWYgaXQncyBub3QgYW4gYWN0aXZlCiAgICAgICAgICAgICAvLyBpdGVt
IHNpbmNlIGFsbCB0aGUgbmFtZXMgd2UndmUgZGVhbHQgd2l0aCBzbyBmYXIgYXJlCiAgICAgICAg
ICAgICAvLyBzcGVjaWFsIGNhc2VzIHRoYXQgd2Ugd29uJ3QgYm90aGVyIGxvb2tpbmcgZm9yIGZ1
cnRoZXIuCiAKKyAgICAgICAgICAgIC8vIElmIG91ciBkb2N1bWVudCBpcyBzYW5kYm94ZWQsIHdl
IG5lZWQgdG8gZG8gc29tZSBleHRyYSBjaGVja3MuCisgICAgICAgICAgICBQUlVpbnQzMiBzYW5k
Ym94RmxhZ3MgPSAwOworCisgICAgICAgICAgICBpZiAobUNvbnRlbnRWaWV3ZXIpIHsKKyAgICAg
ICAgICAgICAgICBuc0lEb2N1bWVudCAqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVu
dCgpOworICAgICAgICAgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+R2V0U2FuZGJveEZsYWdz
KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MpIHsKKyAg
ICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiByb290OworICAgICAg
ICAgICAgICAgIEdldFNhbWVUeXBlUm9vdFRyZWVJdGVtKGdldHRlcl9BZGRSZWZzKHJvb3QpKTsK
KworICAgICAgICAgICAgICAgIC8vIElzIHRoZSBmb3VuZCBpdGVtIG5vdCBhIHRvcCBsZXZlbCBi
cm93c2luZyBjb250ZXh0IGFuZCBub3Qgb3Vyc2VsZiA/CisgICAgICAgICAgICAgICAgbnNDT01Q
dHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gc2VsZkFzSXRlbSA9IHN0YXRpY19jYXN0PG5zSURvY1No
ZWxsVHJlZUl0ZW0gKj4odGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kSXRlbSAhPSBy
b290ICYmIGZvdW5kSXRlbSAhPSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEFyZSB3ZSBhbiBhbmNlc3RvciBvZiB0aGUgZm91bmRJdGVtID8KKyAgICAgICAgICAgICAgICAg
ICAgYm9vbCBpc0FuY2VzdG9yID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgbnNDT01Q
dHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50QXNJdGVtOworICAgICAgICAgICAgICAgICAg
ICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJlbnRBc0l0ZW0pKTsKKworICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50QXNJdGVtKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0bXA7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJlbnRBc0l0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gc2VsZkFzSXRlbSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5jZXN0b3IgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVtID0gdG1wOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FuY2VzdG9yKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBObywgd2UgYXJlIG5vdCBhbiBhbmNlc3RvciBhbmQgb3Vy
IGRvY3VtZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW5kYm94ZWQsIHdlIGNh
bid0IGFsbG93IHRoaXMuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251
bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAvLyBUb3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAtIGlzIGl0IGFu
IGFuY2VzdG9yIG9mIG91cnMgPworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NT
aGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0ZW07CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVU
eXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudEFzSXRlbSkpOworCisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5z
Q09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBmb3VuZEl0ZW0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFuY2VzdG9yLCBhbmQgd2UgYXJlIHNh
bmRib3hlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9w
LW5hdmlnYXRpb24gaXMgc2V0LCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RP
UExFVkVMX05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
SXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGZv
dW5kSXRlbS5zd2FwKCpfcmV0dmFsKTsKICAgICAgICAgICAgIHJldHVybiBOU19PSzsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIC8vIEtlZXAgbG9va2luZwogICAgICAgICAKICAgICAvLyBGaXJz
dCB3ZSBjaGVjayBvdXIgbmFtZS4KQEAgLTQ5MTksMTYgKzQ5NzksMzAgQEAgbnNEb2NTaGVsbDo6
U2V0SXNBcHBUYWIoYm9vbCBhSXNBcHBUYWIpCiBOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpH
ZXRJc0FwcFRhYihib29sICphSXNBcHBUYWIpCiB7CiAgICphSXNBcHBUYWIgPSBtSXNBcHBUYWI7
CiAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6U2V0U2Fu
ZGJveEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCit7CisgIG1TYW5kYm94RmxhZ3MgPSBh
U2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zRG9j
U2hlbGw6OkdldFNhbmRib3hGbGFncyhQUlVpbnQzMiAgKmFTYW5kYm94RmxhZ3MpCit7CisgICph
U2FuZGJveEZsYWdzID0gbVNhbmRib3hGbGFnczsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19J
TUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpTZXRWaXNpYmlsaXR5KGJvb2wgYVZpc2liaWxpdHkpCiB7
CiAgICAgaWYgKCFtQ29udGVudFZpZXdlcikKICAgICAgICAgcmV0dXJuIE5TX09LOwogICAgIGlm
IChhVmlzaWJpbGl0eSkgewogICAgICAgICBtQ29udGVudFZpZXdlci0+U2hvdygpOwogICAgIH0K
ICAgICBlbHNlIHsKQEAgLTgxMDcsMTYgKzgxODEsMjkgQEAgbnNEb2NTaGVsbDo6SW50ZXJuYWxM
b2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHRhcmdldEl0ZW07CiAgICAgICAgIEZpbmRJdGVtV2l0aE5hbWUoYVdpbmRvd1RhcmdldCwgbnNu
dWxsLCB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKHRhcmdl
dEl0ZW0pKTsKIAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gdGFyZ2V0RG9jU2hlbGwg
PSBkb19RdWVyeUludGVyZmFjZSh0YXJnZXRJdGVtKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wg
aXNOZXdXaW5kb3cgPSBmYWxzZTsKICAgICAgICAgaWYgKCF0YXJnZXREb2NTaGVsbCkgeworICAg
ICAgICAgICAgLy8gSWYgdGhlIGRvY3NoZWxsJ3MgZG9jdW1lbnQgaXMgc2FuZGJveGVkIGFuZCB3
YXMgdHJ5aW5nIHRvCisgICAgICAgICAgICAvLyBuYXZpZ2F0ZS9sb2FkIGEgZnJhbWUgaXQgd2Fz
bid0IGFsbG93ZWQgdG8gYWNjZXNzLCB0aGUKKyAgICAgICAgICAgIC8vIEZpbmRJdGVtV2l0aE5h
bWUgYWJvdmUgd2lsbCBoYXZlIHJldHVybmVkIG51bGwgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAg
ICAgIC8vIGl0ZW0gLSB3ZSBkb24ndCB3YW50IHRvIGFjdHVhbGx5IG9wZW4gYSBuZXcgd2luZG93
IGluIGNhc2UKKyAgICAgICAgICAgIC8vIHRob3VnaC4gQ2hlY2sgaWYgd2UgYXJlIHNhbmRib3hl
ZCBhbmQgYmFpbCBvdXQgaGVyZSBpZiBzby4KKyAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKG1D
b250ZW50Vmlld2VyLCBOU19FUlJPUl9GQUlMVVJFKTsKKyAgICAgICAgICAgIG5zSURvY3VtZW50
KiBkb2MgPSBtQ29udGVudFZpZXdlci0+R2V0RG9jdW1lbnQoKTsKKyAgICAgICAgICAgIFBSVWlu
dDMyIHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPkdl
dFNhbmRib3hGbGFncygpOworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1No
ZWxsOjpTQU5EQk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgICAgICByZXR1cm4gTlNfRVJS
T1JfRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9N
V2luZG93PiB3aW4gPQogICAgICAgICAgICAgICAgIGRvX0dldEludGVyZmFjZShHZXRBc1N1cHBv
cnRzKHRoaXMpKTsKICAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKHdpbiwgTlNfRVJST1JfTk9U
X0FWQUlMQUJMRSk7CiAKICAgICAgICAgICAgIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUoYVdpbmRv
d1RhcmdldCk7CiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IG5ld1dpbjsKICAg
ICAgICAgICAgIHJ2ID0gd2luLT5PcGVuKEVtcHR5U3RyaW5nKCksIC8vIFVSTCB0byBsb2FkCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAvLyB3aW5kb3cgbmFtZQpA
QCAtODg4OSwxNyArODk3NiwyNCBAQCBuc0RvY1NoZWxsOjpEb1VSSUxvYWQobnNJVVJJICogYVVS
SSwKICAgICAgICAgLy8gU2V0IHRoZSByZWZlcnJlciBleHBsaWNpdGx5CiAgICAgICAgIGlmIChh
UmVmZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJlcikgewogICAgICAgICAgICAgLy8gUmVmZXJyZXIg
aXMgY3VycmVubHkgb25seSBzZXQgZm9yIGxpbmsgY2xpY2tzIGhlcmUuCiAgICAgICAgICAgICBo
dHRwQ2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJlZmVycmVyVVJJKTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWwoZG9fUXVlcnlJbnRl
cmZhY2UoYU93bmVyKSk7Ci0gICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG93
bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlKTsKKworICAgIC8vIElmIHRoZSBjb250
ZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldCwgZm9yY2UgdGhlIHBhc3NlZCBp
bgorICAgIC8vIG93bmVyICh3aGljaCBzaG91bGQgYmUgYSBudWxsIHByaW5jaXBhbCkgdG8gYmUg
c2V0IG9uIHRoZSBjaGFubmVsLiBJZgorICAgIC8vIHRoZSBmbGFnIGlzbid0IHNldCwgYWxsb3cg
dGhlIGNvbnRlbnQgdG8gYXNzc3VtZSBpdHMgIm5hdHVyYWwgZG9tYWluIiBhcworICAgIC8vIGl0
IG5vcm1hbGx5IHdvdWxkLgorICAgIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihv
d25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtU2FuZGJveEZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpOwogCiAg
ICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50
ZXJmYWNlKGNoYW5uZWwpOwogICAgIGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgICAgIC8vIEFs
bG93IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNo
CiAgICAgICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAgICAgICAgU2V0RXhlY3V0aW9uUG9saWN5
KG5zSVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFMKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgK
LS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0Rv
Y1NoZWxsLmgKQEAgLTc4MywxNiArNzgzLDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBDcmVhdGUo
KSBpcyBjYWxsZWQsIHRoZSB0eXBlIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuCiAgICAgUFJJ
bnQzMiAgICAgICAgICAgICAgICAgICAgbUl0ZW1UeXBlOwogCiAgICAgLy8gSW5kZXggaW50byB0
aGUgU0hUcmFuc2FjdGlvbiBsaXN0LCBpbmRpY2F0aW5nIHRoZSBwcmV2aW91cyBhbmQgY3VycmVu
dAogICAgIC8vIHRyYW5zYWN0aW9uIGF0IHRoZSB0aW1lIHRoYXQgdGhpcyBEb2NTaGVsbCBiZWdp
bnMgdG8gbG9hZAogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1QcmV2aW91c1RyYW5z
SW5kZXg7CiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUxvYWRlZFRyYW5zSW5kZXg7
CiAKKyAgICBQUlVpbnQzMiAgICAgICAgICAgICAgICAgICBtU2FuZGJveEZsYWdzOworCiAgICAg
Ym9vbCAgICAgICAgICAgICAgICAgICAgICAgbUNyZWF0ZWQ7CiAgICAgYm9vbCAgICAgICAgICAg
ICAgICAgICAgICAgbUFsbG93U3ViZnJhbWVzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAg
ICAgIG1BbGxvd1BsdWdpbnM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93
SmF2YXNjcmlwdDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dNZXRhUmVk
aXJlY3RzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ltYWdlczsKICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dETlNQcmVmZXRjaDsKICAgICBib29s
ICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dXaW5kb3dDb250cm9sOwpkaWZmIC0tZ2l0IGEv
ZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxs
LmlkbAotLS0gYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAorKysgYi9kb2NzaGVsbC9i
YXNlL25zSURvY1NoZWxsLmlkbApAQCAtNjcsMTcgKzY3LDE3IEBAIGludGVyZmFjZSBuc0lSZXF1
ZXN0OwogaW50ZXJmYWNlIG5zSVNIRW50cnk7CiBpbnRlcmZhY2UgbnNJTGF5b3V0SGlzdG9yeVN0
YXRlOwogaW50ZXJmYWNlIG5zSVNlY3VyZUJyb3dzZXJVSTsKIGludGVyZmFjZSBuc0lET01TdG9y
YWdlOwogaW50ZXJmYWNlIG5zSVByaW5jaXBhbDsKIGludGVyZmFjZSBuc0lXZWJCcm93c2VyUHJp
bnQ7CiBpbnRlcmZhY2UgbnNJVmFyaWFudDsKIAotW3NjcmlwdGFibGUsIHV1aWQoMDY2NmFkZjgt
ODczOC00Y2E3LWE5MTctMDM0OGY0N2QyZjQwKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDliMjgzMzM3
LTA5N2QtNGZhOC1hMmRhLTkxNjMxOGVhZjgyOCldCiBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBu
c0lTdXBwb3J0cwogewogICAvKioKICAgICogTG9hZHMgYSBnaXZlbiBVUkkuICBUaGlzIHdpbGwg
Z2l2ZSBwcmlvcml0eSB0byBsb2FkaW5nIHRoZSByZXF1ZXN0ZWQgVVJJCiAgICAqIGluIHRoZSBv
YmplY3QgaW1wbGVtZW50aW5nCXRoaXMgaW50ZXJmYWNlLiAgSWYgaXQgY2FuJ3QgYmUgbG9hZGVk
IGhlcmUKICAgICogaG93ZXZlciwgdGhlIFVSTCBkaXNwYXRjaGVyIHdpbGwgZ28gdGhyb3VnaCBp
dHMgbm9ybWFsIHByb2Nlc3Mgb2YgY29udGVudAogICAgKiBsb2FkaW5nLgogICAgKgpAQCAtNTQ4
LDkgKzU0OCw2NyBAQCBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogICAgKi8K
ICAgYXR0cmlidXRlIGJvb2xlYW4gaXNBcHBUYWI7CiAKICAgLyoqCiAgICAqIENyZWF0ZSBhIG5l
dyBhYm91dDpibGFuayBkb2N1bWVudCBhbmQgY29udGVudCB2aWV3ZXIuCiAgICAqIEBwYXJhbSBh
UHJpbmNpcGFsIHRoZSBwcmluY2lwYWwgdG8gdXNlIGZvciB0aGUgbmV3IGRvY3VtZW50LgogICAg
Ki8KICAgdm9pZCBjcmVhdGVBYm91dEJsYW5rQ29udGVudFZpZXdlcihpbiBuc0lQcmluY2lwYWwg
YVByaW5jaXBhbCk7CisKKyAgLyoqCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2Nz
aGVsbC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmli
dXRlIG9mIHRoZSBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwg
aWYKKyAgICogZXhpc3RlbnQuIFNlZSB0aGUgSFRNTDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgor
ICAgKiBUaGVzZSBmbGFncyBvbiB0aGUgZG9jc2hlbGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0
ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuIFRo
ZXkgYXJlIG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcgbmV3CisgICAqIGNvbnRlbnQsIHNhbmRib3gg
ZmxhZ3MgYXJlIGFsc28gaW1tdXRhYmx5IHNldCBvbiB0aGUgZG9jdW1lbnQgd2hlbiBpdCBpcwor
ICAgKiBsb2FkZWQuCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5k
IG9uIHRoZSBzYW5kYm94IGZsYWdzIG9uIGl0cworICAgKiBkb2NzaGVsbCBhbmQgb2YgaXRzIHBh
cmVudCBkb2N1bWVudCwgaWYgYW55LgorICAgKi8KKyAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
c2FuZGJveEZsYWdzOworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgcHJldmVudHMgY29udGVudCBm
cm9tIG5hdmlnYXRpbmcgYnJvd3NpbmcgY29udGV4dHMgb3RoZXIgdGhhbgorICAgKiB0aGUgc2Fu
ZGJveGVkIGJyb3dzaW5nIGNvbnRleHQgaXRzZWxmIChvciBicm93c2luZyBjb250ZXh0cyBmdXJ0
aGVyCisgICAqIG5lc3RlZCBpbnNpZGUgaXQpLCBhbmQgdGhlIHRvcC1sZXZlbCBicm93c2luZyBj
b250ZXh0LgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfTkFWSUdBVElP
TiAgPSAweDE7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20g
bmF2aWdhdGluZyB0aGVpciB0b3AtbGV2ZWwgYnJvd3NpbmcKKyAgICogY29udGV4dC4KKyAgICov
CisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gPSAw
eDI7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gaW5zdGFu
dGlhdGluZyBwbHVnaW5zLCB3aGV0aGVyIHVzaW5nIHRoZQorICAgKiBlbWJlZCBlbGVtZW50LCB0
aGUgb2JqZWN0IGVsZW1lbnQsIHRoZSBhcHBsZXQgZWxlbWVudCwgb3IgdGhyb3VnaAorICAgKiBu
YXZpZ2F0aW9uIG9mIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIHVubGVzcyB0aG9zZSBwbHVn
aW5zIGNhbiBiZQorICAgKiBzZWN1cmVkLgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBT
QU5EQk9YRURfUExVR0lOUyA9IDB4NDsKKworICAvKioKKyAgICogVGhpcyBmbGFnIGZvcmNlcyBj
b250ZW50IGludG8gYSB1bmlxdWUgb3JpZ2luLCB0aHVzIHByZXZlbnRpbmcgaXQgZnJvbQorICAg
KiBhY2Nlc3Npbmcgb3RoZXIgY29udGVudCBmcm9tIHRoZSBzYW1lIG9yaWdpbi4KKyAgICogVGhp
cyBmbGFnIGFsc28gcHJldmVudHMgc2NyaXB0IGZyb20gcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcg
dG8gdGhlCisgICAqIGRvY3VtZW50LmNvb2tpZSBJREwgYXR0cmlidXRlLCBhbmQgYmxvY2tzIGFj
Y2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRC
T1hFRF9PUklHSU4gPSAweDg7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBibG9ja3MgZm9ybSBz
dWJtaXNzaW9uLgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfRk9STVMg
PSAweDEwOworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgYmxvY2tzIHNjcmlwdCBleGVjdXRpb24u
CisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9TQ1JJUFRTID0gMHgyMDsK
KworICAvKioKKyAgICogVGhpcyBmbGFnIGJsb2NrcyBmZWF0dXJlcyB0aGF0IHRyaWdnZXIgYXV0
b21hdGljYWxseSwgc3VjaCBhcworICAgKiBhdXRvbWF0aWNhbGx5IHBsYXlpbmcgYSB2aWRlbyBv
ciBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIGEgZm9ybSBjb250cm9sLgorICAgKi8KKyAgY29uc3Qg
dW5zaWduZWQgbG9uZyBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTID0gMHg0MDsKIH07CmRp
ZmYgLS1naXQgYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50Lmlk
bCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCi0tLSBh
L2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCisrKyBiL2Rv
bS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCkBAIC0zMyw0NCAr
MzMsNDYgQEAKICAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCiAgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyBy
ZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQogICog
dGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlcgogICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhl
IEdQTCBvciB0aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAq
LwogCiAjaW5jbHVkZSAibnNJRE9NSFRNTEVsZW1lbnQuaWRsIgorI2luY2x1ZGUgIm5zSURPTURP
TVNldHRhYmxlVG9rZW5MaXN0LmlkbCIKIAogLyoqCiAgKiBUaGUgbnNJRE9NSFRNTElGcmFtZUVs
ZW1lbnQgaW50ZXJmYWNlIGlzIHRoZSBpbnRlcmZhY2UgdG8gYSBbWF1IVE1MCiAgKiBpZnJhbWUg
ZWxlbWVudC4KICAqCiAgKiBUaGlzIGludGVyZmFjZSBpcyB0cnlpbmcgdG8gZm9sbG93IHRoZSBE
T00gTGV2ZWwgMiBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9E
T00tTGV2ZWwtMi1IVE1MLwogICoKICAqIHdpdGggY2hhbmdlcyBmcm9tIHRoZSB3b3JrLWluLXBy
b2dyZXNzIFdIQVRXRyBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLwogICovCiAKLVtzY3JpcHRhYmxlLCB1dWlk
KGQ0ZTg3MGJkLTQ1MmMtNDg2MC1iOTNjLWY0ZWUwMGJhMzNmNildCitbc2NyaXB0YWJsZSwgdXVp
ZCg1MmY2MjQ0Yi1iMWY1LTRmNGMtOGZmMy03ZTE0NjMxNmY0MTEpXQogaW50ZXJmYWNlIG5zSURP
TUhUTUxJRnJhbWVFbGVtZW50IDogbnNJRE9NSFRNTEVsZW1lbnQKIHsKICAgICAgICAgICAgYXR0
cmlidXRlIERPTVN0cmluZyAgICAgICAgYWxpZ247CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgICAgICAgIGZyYW1lQm9yZGVyOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5n
ICAgICAgICBoZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGxv
bmdEZXNjOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5IZWln
aHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbldpZHRoOwog
ICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBuYW1lOwogICAgICAgICAgICBh
dHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzY3JvbGxpbmc7CiAgICAgICAgICAgIGF0dHJpYnV0
ZSBET01TdHJpbmcgICAgICAgIHNyYzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAg
ICAgICAgd2lkdGg7CiAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBuc0lET01Eb2N1bWVudCAgIGNvbnRlbnREb2N1bWVudDsKICAgcmVhZG9ubHkg
YXR0cmlidXRlIG5zSURPTVdpbmRvdyAgICAgY29udGVudFdpbmRvdzsKIAorICByZWFkb25seSBh
dHRyaWJ1dGUgbnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3Qgc2FuZGJveDsKIAogICAvLyBNb3pp
bGxhIGV4dGVuc2lvbnMKICAgLy8gaWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1vekFsbG93
RnVsbFNjcmVlbiBhdHRyaWJ1dGUgdG8gYmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3JlIHRvIGFs
bG93IGNvbnRlbnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxsLXNjcmVl
bgogICAvLyBtb2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBocD90aXRs
ZT1HZWNrbzpGdWxsU2NyZWVuQVBJCiAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAg
ICAgIG1vekFsbG93RnVsbFNjcmVlbjsKIH07CmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9u
ZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwIGIvZW1iZWRkaW5nL2Nv
bXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcAotLS0gYS9lbWJl
ZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCisr
KyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hl
ci5jcHAKQEAgLTYwMywxNiArNjAzLDMzIEBAIG5zV2luZG93V2F0Y2hlcjo6T3BlbldpbmRvd0pT
SW50ZXJuYWwobnMKICAgfQogCiAgIGlmICghbmV3RG9jU2hlbGxJdGVtKSB7CiAgICAgLy8gV2Un
cmUgZ29pbmcgdG8gZWl0aGVyIG9wZW4gdXAgYSBuZXcgd2luZG93IG91cnNlbHZlcyBvciBhc2sg
YQogICAgIC8vIG5zSVdpbmRvd1Byb3ZpZGVyIGZvciBvbmUuICBJbiBlaXRoZXIgY2FzZSwgd2Un
bGwgd2FudCB0byBzZXQgdGhlIHJpZ2h0CiAgICAgLy8gbmFtZSBvbiBpdC4KICAgICB3aW5kb3dO
ZWVkc05hbWUgPSB0cnVlOwogCisgICAgLy8gSWYgdGhlIHBhcmVudCB0cnlpbmcgdG8gb3BlbiBh
IG5ldyB3aW5kb3cgaXMgc2FuZGJveGVkLAorICAgIC8vIHRoaXMgaXMgbm90IGFsbG93ZWQgYW5k
IHdlIGZhaWwgaGVyZS4KKyAgICBpZiAoYVBhcmVudCkgeworICAgICAgbnNDT01QdHI8bnNJRE9N
RG9jdW1lbnQ+IGRvbWRvYzsKKyAgICAgIGFQYXJlbnQtPkdldERvY3VtZW50KGdldHRlcl9BZGRS
ZWZzKGRvbWRvYykpOworICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5
SW50ZXJmYWNlKGRvbWRvYyk7CisKKyAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgUFJVaW50MzIg
c2FuZGJveEZsYWdzID0gMDsKKyAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5HZXRTYW5kYm94
RmxhZ3MoKTsKKworICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRC
T1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7Cisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKICAgICAvLyBOb3cgY2hlY2sgd2hldGhlciBpdCdz
IG9rIHRvIGFzayBhIHdpbmRvdyBwcm92aWRlciBmb3IgYSB3aW5kb3cuICBEb24ndAogICAgIC8v
IGRvIGl0IGlmIHdlJ3JlIG9wZW5pbmcgYSBkaWFsb2cgb3IgaWYgb3VyIHBhcmVudCBpcyBhIGNo
cm9tZSB3aW5kb3cgb3IKICAgICAvLyBpZiB3ZSdyZSBvcGVuaW5nIHNvbWV0aGluZyB0aGF0IGhh
cyBtb2RhbCwgZGlhbG9nLCBvciBjaHJvbWUgZmxhZ3Mgc2V0LgogICAgIG5zQ09NUHRyPG5zSURP
TUNocm9tZVdpbmRvdz4gY2hyb21lV2luID0gZG9fUXVlcnlJbnRlcmZhY2UoYVBhcmVudCk7CiAg
ICAgaWYgKCFhRGlhbG9nICYmICFjaHJvbWVXaW4gJiYKICAgICAgICAgIShjaHJvbWVGbGFncyAm
IChuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfTU9EQUwgICAgICAgICB8CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX09QRU5BU19ESUFMT0cg
fCAKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVf
T1BFTkFTX0NIUk9NRSkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>589638</attachid>
            <date>2012-01-18 14:00:45 -0800</date>
            <delta_ts>2012-02-06 16:34:27 -0800</delta_ts>
            <desc>WIP - prototype</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>46053</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNDA1MmY0OTM2ZTFjMmNhMzU1OWI2YjkyZTUy
YTM3MmY3NDE4NGIwMgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtMTgwNCw0MyArMTgwNCw1NSBAQCBwdWJsaWM6CiAgICAqIGZy
b20gdGhlIGRvY3VtZW50IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQg
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsK
IAogICAvKioKICAgICogU2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRo
ZSBnaXZlbiBjaGFubmVsLCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBv
ZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JB
Ym91dEJsYW5rIGlzIHRydWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHBy
aW5jaXBhbCBzZXQgdXAgb24gaXQuCi0gICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LiBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQg
b24gdGhlIGNoYW5uZWwsIGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAor
ICAgKiBmcm9tIHRoZSBjaGFubmVsLgogICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIg
dGhlIHByaW5jaXBhbCB3YXMgc2V0IHVwIGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5l
bC4KICAgICovCiAgIHN0YXRpYyBib29sIFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCog
YUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNo
YW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkq
IGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJv
dXRCbGFuayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9y
QWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VP
d25lciA9IGZhbHNlKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcm
IGFCaW5hcnlEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJh
c2U2NFN0cmluZyk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBh
QXNjaWlTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURh
dGEpOwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFz
c2VkIGluIHBhcmFtZXRlciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0
eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAg
KiBmdW5jdGlvbmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZv
cm0gb3duZXIuCiAgICAqIE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29t
cGxldGUgbWFrZXMgc2Vuc2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAg
ICogQHBhcmFtIGFJbnB1dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0
IGNhbid0IGJlIG51bGwuCiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBo
YXMgYXV0b2NvbXBsZXRlIGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21w
bGV0ZUVuYWJsZWQobnNJRE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIAorICAvKioKKyAg
ICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2Yg
YW4gPGlmcmFtZT4gb3IKKyAgICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8g
dGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFsbHkuCisgICAqCisgICAqIEBwYXJhbSBhQXR0
cmlidXRlIAl0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisgICAqIEByZXR1cm4g
CQkJdGhlIHNldCBvZiBmbGFncworICAgKi8KKyAgc3RhdGljIFBSVWludDMyIFBhcnNlU2FuZGJv
eEF0dHJpYnV0ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbmRib3hBdHRyKTsKKwogcHJpdmF0ZToKICAg
c3RhdGljIGJvb2wgSW5pdGlhbGl6ZUV2ZW50VGFibGUoKTsKIAogICBzdGF0aWMgbnNyZXN1bHQg
RW5zdXJlU3RyaW5nQnVuZGxlKFByb3BlcnRpZXNGaWxlIGFGaWxlKTsKIAogICBzdGF0aWMgbnNJ
RE9NU2NyaXB0T2JqZWN0RmFjdG9yeSAqR2V0RE9NU2NyaXB0T2JqZWN0RmFjdG9yeSgpOwogCiAg
IHN0YXRpYyBuc3Jlc3VsdCBIb2xkU2NyaXB0T2JqZWN0KFBSVWludDMyIGFMYW5nSUQsIHZvaWQq
IGFPYmplY3QpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5o
IGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9w
dWJsaWMvbnNJRG9jdW1lbnQuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50
LmgKQEAgLTExOSwxOCArMTE5LDE4IEBAIGNsYXNzIExvYWRlcjsKIAogbmFtZXNwYWNlIGRvbSB7
CiBjbGFzcyBMaW5rOwogY2xhc3MgRWxlbWVudDsKIH0gLy8gbmFtZXNwYWNlIGRvbQogfSAvLyBu
YW1lc3BhY2UgbW96aWxsYQogCiAjZGVmaW5lIE5TX0lET0NVTUVOVF9JSUQgXAoteyAweDI4M2Vj
MjdkLCAweDViMjMsIDB4NDliMiwgXA0KLSAgeyAweDk0LCAweGQ5LCAweDksIDB4YjUsIDB4ZGIs
IDB4NDUsIDB4MzAsIDB4NzMgfSB9DQoreyAweDU3ZmU0NGFlLCAweDY2NTYsIDB4NDRiOCwgXAor
ICB7IDB4OGQsIDB4YzAsIDB4ZmMsIDB4YTcsIDB4NDMsIDB4MjgsIDB4YmUsIDB4ODYgfSB9CiAK
IAogLy8gRmxhZyBmb3IgQWRkU3R5bGVTaGVldCgpLgogI2RlZmluZSBOU19TVFlMRVNIRUVUX0ZS
T01fQ0FUQUxPRyAgICAgICAgICAgICAgICAoMSA8PCAwKQogCiAvLyBFbnVtIGZvciByZXF1ZXN0
aW5nIGEgcGFydGljdWxhciB0eXBlIG9mIGRvY3VtZW50IHdoZW4gY3JlYXRpbmcgYSBkb2MKIGVu
dW0gRG9jdW1lbnRGbGF2b3IgewogICBEb2N1bWVudEZsYXZvckxlZ2FjeUd1ZXNzLCAvLyBjb21w
YXQgd2l0aCBvbGQgY29kZSB1bnRpbCBtYWRlIEhUTUw1LWNvbXBsaWFudApAQCAtNDU4LDE2ICs0
NTgsMzYgQEAgcHVibGljOgogICAgKiBAc2VlIG5zQmlkaVV0aWxzLmgKICAgICovCiAgIHZvaWQg
U2V0QmlkaU9wdGlvbnMoUFJVaW50MzIgYUJpZGlPcHRpb25zKQogICB7CiAgICAgbUJpZGlPcHRp
b25zID0gYUJpZGlPcHRpb25zOwogICB9CiAgIAogICAvKioKKyAgICogU2V0IHRoZSBzYW5kYm94
IGZsYWdzIGZvciB0aGlzIGRvY3VtZW50LiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbgorICAgKiBh
dCBkb2N1bWVudCBsb2FkLCB0aGUgZmxhZ3MgYXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQg
YXQgbG9hZCB0aW1lLgorICAgKiBAc2VlIG5zSURvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxl
IGZsYWdzCisgICAqLworICB2b2lkIFNldFNhbmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZs
YWdzKQorICB7CisgICAgTU9aX0FTU0VSVChHZXRSZWFkeVN0YXRlRW51bSgpID09IFJFQURZU1RB
VEVfTE9BRElORyk7CisgICAgbVNhbmRib3hGbGFncyA9IGFTYW5kYm94RmxhZ3M7CisgIH0KKwor
ICAvKioKKyAgICogR2V0IHRoZSBzYW5kYm94IGZsYWdzIGZvciB0aGlzIGRvY3VtZW50LgorICAg
KiBAc2VlIG5zSURvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzCisgICAqLworICBQ
UlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKSBjb25zdAorICB7CisgICAgcmV0dXJuIG1TYW5kYm94
RmxhZ3M7CisgIH0KKworICAvKioKICAgICogQWNjZXNzIEhUVFAgaGVhZGVyIGRhdGEgKHRoaXMg
bWF5IGFsc28gZ2V0IHNldCBmcm9tIG90aGVyCiAgICAqIHNvdXJjZXMsIGxpa2UgSFRNTCBNRVRB
IHRhZ3MpLgogICAgKi8KICAgdmlydHVhbCB2b2lkIEdldEhlYWRlckRhdGEobnNJQXRvbSogYUhl
YWRlckZpZWxkLCBuc0FTdHJpbmcmIGFEYXRhKSBjb25zdCA9IDA7CiAgIHZpcnR1YWwgdm9pZCBT
ZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFoZWFkZXJGaWVsZCwgY29uc3QgbnNBU3RyaW5nJiBhRGF0
YSkgPSAwOwogCiAgIC8qKgogICAgKiBDcmVhdGUgYSBuZXcgcHJlc2VudGF0aW9uIHNoZWxsIHRo
YXQgd2lsbCB1c2UgYUNvbnRleHQgZm9yIGl0cwpAQCAtMTc5MywxNiArMTgxMywyMSBAQCBwcm90
ZWN0ZWQ6CiAgIC8vIElmIG1Jc1N0YXRpY0RvY3VtZW50IGlzIHRydWUsIG1PcmlnaW5hbERvY3Vt
ZW50IHBvaW50cyB0byB0aGUgb3JpZ2luYWwKICAgLy8gZG9jdW1lbnQuCiAgIG5zQ09NUHRyPG5z
SURvY3VtZW50PiBtT3JpZ2luYWxEb2N1bWVudDsKIAogICAvLyBUaGUgYmlkaSBvcHRpb25zIGZv
ciB0aGlzIGRvY3VtZW50LiAgV2hhdCB0aGlzIGJpdGZpZWxkIG1lYW5zIGlzCiAgIC8vIGRlZmlu
ZWQgaW4gbnNCaWRpVXRpbHMuaAogICBQUlVpbnQzMiBtQmlkaU9wdGlvbnM7CiAKKyAgLy8gVGhl
IHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3VtZW50LiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1ZSBv
ZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2YgdGhlCisgIC8vIGFzc29jaWF0ZWQgSUZSQU1FIG9y
IENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZiBleGlzdGVudC4gVGhlc2UgYXJlIHNldCBhdCBs
b2FkIHRpbWUgYW5kCisgIC8vIGFyZSBpbW11dGFibGUgLSBzZWUgbnNJRG9jU2hlbGwuaWRsIGZv
ciB0aGUgcG9zc2libGUgZmxhZ3MuCisgIFBSVWludDMyIG1TYW5kYm94RmxhZ3M7CisKICAgbnND
U3RyaW5nIG1Db250ZW50TGFuZ3VhZ2U7CiBwcml2YXRlOgogICBuc0NTdHJpbmcgbUNvbnRlbnRU
eXBlOwogcHJvdGVjdGVkOgogCiAgIC8vIFRoZSBkb2N1bWVudCdzIHNlY3VyaXR5IGluZm8KICAg
bnNDT01QdHI8bnNJU3VwcG9ydHM+IG1TZWN1cml0eUluZm87CiAKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRl
bnRVdGlscy5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKKysr
IGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKQEAgLTY4OSwxNiArNjg5LDY0
IEBAIG5zQ29udGVudFV0aWxzOjpHZXRQYXJzZXJTZXJ2aWNlKCkKICAgICBuc3Jlc3VsdCBydiA9
IENhbGxHZXRTZXJ2aWNlKGtQYXJzZXJTZXJ2aWNlQ0lELCAmc1BhcnNlclNlcnZpY2UpOwogICAg
IGlmIChOU19GQUlMRUQocnYpKSB7CiAgICAgICBzUGFyc2VyU2VydmljZSA9IG5zbnVsbDsKICAg
ICB9CiAgIH0KIAogICByZXR1cm4gc1BhcnNlclNlcnZpY2U7CiB9CisvKioKKyAqIEEgaGVscGVy
IGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJveCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+
IG9yCisgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBjb252ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZs
YWdzIHVzZWQgaW50ZXJuYWxseS4KKyAqCisgKiBAcGFyYW0gYUF0dHJpYnV0ZSAgICB0aGUgdmFs
dWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisgKiBAcmV0dXJuICAgICAgICAgICAgICB0aGUg
c2V0IG9mIGZsYWdzCisgKi8KK1BSVWludDMyCituc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94
QXR0cmlidXRlVG9GbGFncyhjb25zdCBuc0FTdHJpbmcmIHNhbmRib3hBdHRyVmFsdWUpCit7Cisg
IC8vIElmIHRoZXJlJ3MgYSBzYW5kYm94IGF0dHJpYnV0ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBp
ZiB0aGlzIGlzIGJlaW5nCisgIC8vIGNhbGxlZCksIHN0YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0
aGUgcmVzdHJpY3Rpb24gZmxhZ3MuCisgIFBSVWludDMyIG91dCA9IG5zSURvY1NoZWxsOjpTQU5E
Qk9YRURfTkFWSUdBVElPTiB8CisgICAgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9UT1BMRVZFTF9O
QVZJR0FUSU9OIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1BMVUdJTlMgfCBuc0lEb2NT
aGVsbDo6U0FOREJPWEVEX09SSUdJTiB8CisgICAgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9GT1JN
UyB8IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfU0NSSVBUUyB8CisgICAgbnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisKKyAgaWYgKCFzYW5kYm94QXR0clZhbHVlLklz
RW1wdHkoKSkgeworICAgIC8vIFRoZSBzZXBhcmF0b3Igb3B0aW9uYWwgZmxhZyBpcyB1c2VkIGJl
Y2F1c2UgdGhlIEhUTUw1IHNwZWMgc2F5cyBhbnkKKyAgICAvLyB3aGl0ZXNwYWNlIGlzIG9rIGFz
IGEgc2VwYXJhdG9yLCB3aGljaCBpcyB3aGF0IHRoaXMgZG9lcy4KKyAgICBIVE1MU3BsaXRPblNw
YWNlc1Rva2VuaXplciB0b2tlbml6ZXIoc2FuZGJveEF0dHJWYWx1ZSwgJyAnLAorICAgICAgbnND
aGFyU2VwYXJhdGVkVG9rZW5pemVyVGVtcGxhdGU8bnNDb250ZW50VXRpbHM6OklzSFRNTFdoaXRl
c3BhY2U+OjpTRVBBUkFUT1JfT1BUSU9OQUwpOworCisgICAgd2hpbGUgKHRva2VuaXplci5oYXNN
b3JlVG9rZW5zKCkpIHsKKyAgICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nIHRva2VuID0gdG9rZW5p
emVyLm5leHRUb2tlbigpOworCisJICBuc0Nhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbXBhcmF0b3Ig
Y29tcGFyYXRvciA9IG5zQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29tcGFyYXRvcigpOworCSAgCisg
ICAgICBpZiAodG9rZW4uRXF1YWxzKG5zR2tBdG9tczo6YWxsb3dzY3JpcHRzLT5HZXRVVEYxNlN0
cmluZygpLCBjb21wYXJhdG9yKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5E
Qk9YRURfU0NSSVBUUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uRXF1YWxzKG5zR2tBdG9tczo6
YWxsb3dzYW1lb3JpZ2luLT5HZXRVVEYxNlN0cmluZygpLCBjb21wYXJhdG9yKSkgeworICAgICAg
ICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOOworICAgICAgfSBlbHNlIGlm
ICh0b2tlbi5FcXVhbHMobnNHa0F0b21zOjphbGxvd2Zvcm1zLT5HZXRVVEYxNlN0cmluZygpLCBj
b21wYXJhdG9yKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfRk9S
TVM7CisgICAgICB9IGVsc2UgaWYgKHRva2VuLkVxdWFscyhuc0drQXRvbXM6OmFsbG93c2NyaXB0
cy0+R2V0VVRGMTZTdHJpbmcoKSwgY29tcGFyYXRvcikpIHsKKyAgICAgICAgLy8gYWxsb3ctc2Ny
aXB0cyByZW1vdmVzIGJvdGggU0FOREJPWEVEX1NDUklQVFMgYW5kCisgICAgICAgIC8vIFNBTkRC
T1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMuCisgICAgICAgIG91dCAmPSB+bnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9TQ1JJUFRTOworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURf
QVVUT01BVElDX0ZFQVRVUkVTOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5FcXVhbHMobnNHa0F0
b21zOjphbGxvd3RvcG5hdmlnYXRpb24tPkdldFVURjE2U3RyaW5nKCksIGNvbXBhcmF0b3IpKSB7
CisgICAgICAgIG91dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FU
SU9OOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBvdXQ7Cit9CiAKICNpZmRlZiBN
T1pfWFRGCiBuc0lYVEZTZXJ2aWNlKgogbnNDb250ZW50VXRpbHM6OkdldFhURlNlcnZpY2UoKQog
ewogICBpZiAoIXNYVEZTZXJ2aWNlKSB7CiAgICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0U2Vydmlj
ZShrWFRGU2VydmljZUNJRCwgJnNYVEZTZXJ2aWNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkg
ewpAQCAtNTc1MywxNyArNTgwMSwxOCBAQCBuc0NvbnRlbnRVdGlsczo6VVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXN1bHQpOwogfQogCiAv
LyBzdGF0aWMKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmlu
Y2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFTZXRVcEZvckFib3V0QmxhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYUZvcmNlT3duZXIpCiB7CiAgIC8vCiAgIC8vIFNldCB0aGUgb3duZXIgb2YgdGhl
IGNoYW5uZWwsIGJ1dCBvbmx5IGZvciBjaGFubmVscyB0aGF0IGNhbid0CiAgIC8vIHByb3ZpZGUg
dGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQuCiAgIC8vCiAgIC8vIFhYWDogSXQgc2VlbXMgd3Jv
bmcgdGhhdCB0aGUgb3duZXIgaXMgaWdub3JlZCAtIGV2ZW4gaWYgb25lIGlzCiAgIC8vICAgICAg
c3VwcGxpZWQpIHVubGVzcyB0aGUgVVJJIGlzIGphdmFzY3JpcHQgb3IgZGF0YSBvciBhYm91dDpi
bGFuay4KICAgLy8gWFhYOiBJZiB0aGlzIGlzIGV2ZXIgY2hhbmdlZCwgY2hlY2sgYWxsIGNhbGxl
cnMgZm9yIHdoYXQgb3duZXJzCkBAIC01NzcxLDIzICs1ODIwLDI3IEBAIG5zQ29udGVudFV0aWxz
OjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmkKICAgLy8gICAgICBjb21tZW50cyBpbiBuc0RvY1No
ZWxsOjpMb2FkVVJJIHdoZXJlIHdlIGZhbGwgYmFjayBvbgogICAvLyAgICAgIGluaGVyaXRpbmcg
dGhlIG93bmVyIGlmIGNhbGxlZCBmcm9tIGNocm9tZS4gIFRoYXQgd291bGQgYmUKICAgLy8gICAg
ICB2ZXJ5IHdyb25nIGlmIHRoaXMgY29kZSBjaGFuZ2VkIGFueXRoaW5nIGJ1dCBjaGFubmVscyB0
aGF0CiAgIC8vICAgICAgY2FuJ3QgcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dCEK
ICAgLy8KICAgLy8gICAgICAoQ3VycmVudGx5IGNocm9tZSBVUklzIHNldCB0aGUgb3duZXIgd2hl
biB0aGV5IGFyZSBjcmVhdGVkIQogICAvLyAgICAgIFNvIHNldHRpbmcgYSBOVUxMIG93bmVyIHdv
dWxkIGJlIGJhZCEpCiAgIC8vCisgIC8vIElmIGFGb3JjZU93bmVyIGlzIHRydWUsIHRoZSBvd25l
ciB3aWxsIGJlIHNldCwgZXZlbiBmb3IgYSBjaGFubmVsIHRoYXQKKyAgLy8gY2FuIHByb3ZpZGUg
aXRzIG93biBzZWN1cml0eSBjb250ZXh0LiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBIVE1MNSBJRlJB
TUUKKyAgLy8gc2FuZGJveCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiBmb3JjZSB0aGUgY2hhbm5lbCAo
YW5kIGl0cyBkb2N1bWVudCkgdG8KKyAgLy8gZXhwbGljaXRseSBoYXZlIGEgbnVsbCBwcmluY2lw
YWwuCiAgIGJvb2wgaW5oZXJpdDsKICAgLy8gV2UgZXhwZWN0IFVSSUluaGVyaXRzU2VjdXJpdHlD
b250ZXh0IHRvIHJldHVybiBzdWNjZXNzIGZvciBhbgogICAvLyBhYm91dDpibGFuayBVUkksIHNv
IGRvbid0IGNhbGwgTlNfSXNBYm91dEJsYW5rKCkgaWYgdGhpcyBjYWxsIGZhaWxzLgogICAvLyBU
aGlzIGNvbmRpdGlvbiBuZWVkcyB0byBtYXRjaCB0aGUgb25lIGluIG5zRG9jU2hlbGw6OkludGVy
bmFsTG9hZCB3aGVyZQogICAvLyB3ZSdyZSBjaGVja2luZyBmb3IgdGhpbmdzIHRoYXQgd2lsbCB1
c2UgdGhlIG93bmVyLgotICBpZiAoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250
ZXh0KGFVUkksICZpbmhlcml0KSkgJiYKLSAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91
dEJsYW5rICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSB7CisgIGlmIChhRm9yY2VPd25lciB8
fCAoKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJp
dCkpICYmCisgICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fi
b3V0QmxhbmsoYVVSSSkpKSkpKSB7CiAgICAgYUNoYW5uZWwtPlNldE93bmVyKGFMb2FkaW5nUHJp
bmNpcGFsKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8vCiAgIC8vIGZpbGU6IHVyaSBz
cGVjaWFsLWNhc2luZwogICAvLwogICAvLyBJZiB0aGlzIGlzIGEgZmlsZTogbG9hZCBvcGVuZWQg
ZnJvbSBhbm90aGVyIGZpbGU6IHRoZW4gaXQgbWF5IG5lZWQKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
YmFzZS9zcmMvbnNEb2N1bWVudC5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3Bw
Ci0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9iYXNl
L3NyYy9uc0RvY3VtZW50LmNwcApAQCAtMjM3NywxNiArMjM3NywyNSBAQCBuc0RvY3VtZW50OjpT
dGFydERvY3VtZW50TG9hZChjb25zdCBjaGFyCiAgICAgRmluZENoYXJJblJlYWRhYmxlKCc7Jywg
c2VtaWNvbG9uLCBlbmQpOwogICAgIFNldENvbnRlbnRUeXBlSW50ZXJuYWwoU3Vic3RyaW5nKHN0
YXJ0LCBzZW1pY29sb24pKTsKICAgfQogCiAgIFJldHJpZXZlUmVsZXZhbnRIZWFkZXJzKGFDaGFu
bmVsKTsKIAogICBtQ2hhbm5lbCA9IGFDaGFubmVsOwogCisgIC8vIElmIHRoaXMgZG9jdW1lbnQg
aXMgYmVpbmcgbG9hZGVkIGJ5IGEgZG9jc2hlbGwsIGNvcHkgaXRzIHNhbmRib3ggZmxhZ3MKKyAg
Ly8gdG8gdGhlIGRvY3VtZW50LiBUaGVzZSBhcmUgaW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBo
ZXJlLgorICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFj
ZShhQ29udGFpbmVyKTsKKworICBpZiAoZG9jU2hlbGwpIHsKKyAgICBuc3Jlc3VsdCBydiA9IGRv
Y1NoZWxsLT5HZXRTYW5kYm94RmxhZ3MoJm1TYW5kYm94RmxhZ3MpOworICAgIE5TX0VOU1VSRV9T
VUNDRVNTKHJ2LCBydik7CisgIH0KKwogICBuc3Jlc3VsdCBydiA9IEluaXRDU1AoKTsKICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0
CiBuc0RvY3VtZW50OjpJbml0Q1NQKCkKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNG
cmFtZUxvYWRlci5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCi0tLSBh
L2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3Ny
Yy9uc0ZyYW1lTG9hZGVyLmNwcApAQCAtMTEzLDE2ICsxMTMsMTggQEAKICNpbmNsdWRlICJtb3pp
bGxhL0d1YXJkT2JqZWN0cy5oIgogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMuaCIKICNp
bmNsdWRlICJtb3ppbGxhL3VudXNlZC5oIgogI2luY2x1ZGUgIm1vemlsbGEvZG9tL0VsZW1lbnQu
aCIKICNpbmNsdWRlICJtb3ppbGxhL2xheW91dC9SZW5kZXJGcmFtZVBhcmVudC5oIgogCiAjaW5j
bHVkZSAianNhcGkuaCIKIAorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKKwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmxheWVyczsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjps
YXlvdXQ7CiB0eXBlZGVmIEZyYW1lTWV0cmljczo6Vmlld0lEIFZpZXdJRDsKIAogY2xhc3MgbnNB
c3luY0RvY1NoZWxsRGVzdHJveWVyIDogcHVibGljIG5zUnVubmFibGUKIHsKQEAgLTQ2OCwyMCAr
NDcwLDc3IEBAIG5zRnJhbWVMb2FkZXI6OlJlYWxseVN0YXJ0TG9hZGluZ0ludGVybmEKICAgLy8g
SnVzdCB0byBiZSBzYWZlLCByZWNoZWNrIHVyaS4KICAgcnYgPSBDaGVja1VSSUxvYWQobVVSSVRv
TG9hZCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxMb2FkSW5mbz4gbG9hZEluZm87CiAgIG1Eb2NTaGVsbC0+Q3JlYXRlTG9hZEluZm8oZ2V0
dGVyX0FkZFJlZnMobG9hZEluZm8pKTsKICAgTlNfRU5TVVJFX1RSVUUobG9hZEluZm8sIE5TX0VS
Uk9SX0ZBSUxVUkUpOwogCi0gIC8vIFdlJ2xsIHVzZSBvdXIgcHJpbmNpcGFsLCBub3QgdGhhdCBv
ZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRoaXMKLSAgLy8gaXMgdmVyeSBpbXBv
cnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBsb2FkZWQg
aW4KLSAgLy8gc3ViZnJhbWVzIQotICBsb2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29udGVudC0+
Tm9kZVByaW5jaXBhbCgpKTsKKyAgLy8gSXMgdGhpcyBhbiA8aWZyYW1lPiB3aXRoIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgb3IgYSBwYXJlbnQgd2hpY2ggaXMKKyAgLy8gc2FuZGJveGVkID8KKyAgbnNI
VE1MSUZyYW1lRWxlbWVudCAqIGlmcmFtZSA9CisgICAgbnNIVE1MSUZyYW1lRWxlbWVudDo6RnJv
bUNvbnRlbnQobU93bmVyQ29udGVudCk7CisKKyAgaWYgKGlmcmFtZSkgeworICAgIFBSVWludDMy
IHNhbmRib3hGbGFncyA9IGlmcmFtZS0+R2V0U2FuZGJveEZsYWdzKCk7CisKKyAgICBQUlVpbnQz
MiBwYXJlbnRTYW5kYm94RmxhZ3MgPSAwOworCisgICAgLy8gR2V0IHRoZSBwYXJlbnQncyBzYW5k
Ym94IGZsYWdzLCB0aGV5J3JlIG5lZWRlZCB0byBkZXRlcm1pbmUgaWYgdGhlCisgICAgLy8gZnJh
bWUgYmVpbmcgbG9hZGVkIG5lZWRzIHRvIGJlIHNhbmRib3hlZC4KKyAgICBuc0NPTVB0cjxuc0lE
b2NTaGVsbFRyZWVJdGVtPiBwYXJlbnREb2NTaGVsbEl0ZW07CisgICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxUcmVlSXRlbT4gY3VyRG9jU2hlbGxJdGVtID0gZG9fUXVlcnlJbnRlcmZhY2UobURvY1No
ZWxsKTsKKworICAgIGlmIChOU19TVUNDRUVERUQoY3VyRG9jU2hlbGxJdGVtLT5HZXRQYXJlbnQo
Z2V0dGVyX0FkZFJlZnMocGFyZW50RG9jU2hlbGxJdGVtKSkpKSB7CisgICAgICBuc0NPTVB0cjxu
c0lEb2N1bWVudD4gcGFyZW50RG9jID0gZG9fR2V0SW50ZXJmYWNlKHBhcmVudERvY1NoZWxsSXRl
bSk7CisKKyAgICAgIGlmIChwYXJlbnREb2MpIHsKKyAgICAgICAgcGFyZW50U2FuZGJveEZsYWdz
ID0gcGFyZW50RG9jLT5HZXRTYW5kYm94RmxhZ3MoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoc2FuZGJveEZsYWdzIHx8IHBhcmVudFNhbmRib3hGbGFncykgeworICAgICAgaWYgKHBhcmVu
dFNhbmRib3hGbGFncykgeworICAgICAgICAvLyBUaGUgY2hpbGQgY2FuIG9ubHkgYWRkIHJlc3Ry
aWN0aW9ucywgbm90IHJlbW92ZSB0aGVtLgorICAgICAgICBzYW5kYm94RmxhZ3MgfD0gcGFyZW50
U2FuZGJveEZsYWdzOworICAgICAgfQorCisgICAgICBtRG9jU2hlbGwtPlNldFNhbmRib3hGbGFn
cyhzYW5kYm94RmxhZ3MpOworCisgICAgICAvLyBTZXQgdXAgdGhlIGFjdHVhbCBzYW5kYm94aW5n
IGFzIHNwZWNpZmllZC4KKyAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FO
REJPWEVEX09SSUdJTikgeworICAgICAgICAvLyBhbGxvdy1zYW1lLWRvbWFpbiB3YXNuJ3Qgc3Bl
Y2lmaWVkLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBudWxsIHByaW5jaXBhbCBhbmQKKyAgICAg
ICAgLy8gdXNlIHRoYXQgYXMgdGhlIG93bmVyLgorICAgICAgICBuc0NPTVB0cjxuc0lQcmluY2lw
YWw+IG51bGxQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL251bGxw
cmluY2lwYWw7MSIpOworICAgICAgICBsb2FkSW5mby0+U2V0T3duZXIobnVsbFByaW5jaXBhbCk7
CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBVc2UgdGhlICdub3JtYWwnIHByaW5jaXBhbCBm
b3IgdGhlIDxpZnJhbWU+LgorICAgICAgICBsb2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29udGVu
dC0+Tm9kZVByaW5jaXBhbCgpKTsKKyAgICAgIH0KKworICAgICAgaWYgKHNhbmRib3hGbGFncyAm
IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfU0NSSVBUUykgeworICAgICAgICAgIG1Eb2NTaGVsbC0+
U2V0QWxsb3dKYXZhc2NyaXB0KGZhbHNlKTsKKyAgICAgIH0KKworICAgICAgaWYgKHNhbmRib3hG
bGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfUExVR0lOUykgeworICAgICAgICAgIG1Eb2NT
aGVsbC0+U2V0QWxsb3dQbHVnaW5zKGZhbHNlKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICAgLy8gV2UgYXJlIG5vdCBzYW5kYm94ZWQgLSB3ZSB1c2Ugb3VyIHByaW5jaXBhbCwgbm90
IHRoYXQgb2YgdGhlCisgICAgICAgICAvLyBkb2N1bWVudCBsb2FkZWQgaW5zaWRlIHVzLiAgVGhp
cyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvCisgICAgICAgICAvLyBwcmV2ZW50IFhTUyBh
dHRhY2tzIG9uIGRvY3VtZW50cyBsb2FkZWQgaW4gc3ViZnJhbWVzIQorICAgICAgICAgbG9hZElu
Zm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7CisgICAgfQorICB9
IGVsc2UgeworICAgICAgLy8gTm90IGFuIGlmcmFtZSBhbmQgbm90IHNhbmRib3hlZCwgd2UgdXNl
IG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZQorICAgICAgLy8gZG9jdW1lbnQgbG9hZGVk
IGluc2lkZSB1cy4gIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0bworICAgICAgLy8g
cHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluIHN1YmZyYW1lcyEKKyAg
ICAgIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOwor
ICB9CiAKICAgbnNDT01QdHI8bnNJVVJJPiByZWZlcnJlcjsKICAgcnYgPSBtT3duZXJDb250ZW50
LT5Ob2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhyZWZlcnJlcikpOwogICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIGxvYWRJbmZvLT5TZXRSZWZlcnJlcihyZWZl
cnJlcik7CiAKICAgLy8gS2ljayBvZmYgdGhlIGxvYWQuLi4KZGlmZiAtLWdpdCBhL2NvbnRlbnQv
YmFzZS9zcmMvbnNHa0F0b21MaXN0LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5o
Ci0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKKysrIGIvY29udGVudC9iYXNl
L3NyYy9uc0drQXRvbUxpc3QuaApAQCAtOTMsMTcgKzkzLDIxIEBAIEdLX0FUT00oYWN0dWF0ZSwg
ImFjdHVhdGUiKQogR0tfQVRPTShhZGRyZXNzLCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVyLCAi
YWZ0ZXIiKQogR0tfQVRPTShhZnRlcl9lbmQsICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRlcl9z
dGFydCwgImFmdGVyX3N0YXJ0IikKIEdLX0FUT00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9NKGFs
aW5rLCAiYWxpbmsiKQogR0tfQVRPTShhbGwsICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50cywg
ImFsbG93ZXZlbnRzIikKK0dLX0FUT00oYWxsb3dmb3JtcywgImFsbG93LWZvcm1zIikKIEdLX0FU
T00oYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMsICJhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucyIpCitH
S19BVE9NKGFsbG93c2FtZW9yaWdpbiwgImFsbG93LXNhbWUtb3JpZ2luIikKK0dLX0FUT00oYWxs
b3dzY3JpcHRzLCAiYWxsb3ctc2NyaXB0cyIpCitHS19BVE9NKGFsbG93dG9wbmF2aWdhdGlvbiwg
ImFsbG93LXRvcC1uYXZpZ2F0aW9uIikKIEdLX0FUT00oYWxsb3d1bnRydXN0ZWQsICJhbGxvd3Vu
dHJ1c3RlZCIpCiBHS19BVE9NKGFsdCwgImFsdCIpCiBHS19BVE9NKGFsdGVybmF0ZSwgImFsdGVy
bmF0ZSIpCiBHS19BVE9NKGFsd2F5cywgImFsd2F5cyIpCiBHS19BVE9NKGFuY2VzdG9yLCAiYW5j
ZXN0b3IiKQogR0tfQVRPTShhbmNlc3Rvck9yU2VsZiwgImFuY2VzdG9yLW9yLXNlbGYiKQogR0tf
QVRPTShfYW5kLCAiYW5kIikKIEdLX0FUT00oYW55LCAiYW55IikKQEAgLTg3NCwxNiArODc4LDE3
IEBAIEdLX0FUT00ocm93c3BhbiwgInJvd3NwYW4iKQogR0tfQVRPTShycCwgInJwIikKIEdLX0FU
T00ocnQsICJydCIpCiBHS19BVE9NKHJ0bCwgInJ0bCIpCiBHS19BVE9NKHJ1YnksICJydWJ5IikK
IEdLX0FUT00ocnVsZSwgInJ1bGUiKQogR0tfQVRPTShydWxlcywgInJ1bGVzIikKIEdLX0FUT00o
cywgInMiKQogR0tfQVRPTShzYW1wLCAic2FtcCIpCitHS19BVE9NKHNhbmRib3gsICJzYW5kYm94
IikKIEdLX0FUT00oc2JhdHRyLCAic2JhdHRyIikKIEdLX0FUT00oc2NhbGUsICJzY2FsZSIpCiBH
S19BVE9NKHNjYW4sICJzY2FuIikKIEdLX0FUT00oc2NoZW1lLCAic2NoZW1lIikKIEdLX0FUT00o
c2NvcGUsICJzY29wZSIpCiBHS19BVE9NKHNjb3BlZCwgInNjb3BlZCIpCiBHS19BVE9NKHNjcmVl
biwgInNjcmVlbiIpCiBHS19BVE9NKHNjcmVlblgsICJzY3JlZW5YIikKZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAgYi9jb250ZW50L2h0
bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9j
b250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtNjgzLDE3ICs2ODMsMjUgQEAgbnNIVE1M
Rm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNldChuc0V2ZQogICAgIHJldHVybiBEb1Jlc2V0KCk7
CiAgIH0KIAogICBpZiAoTlNfRk9STV9TVUJNSVQgPT0gYU1lc3NhZ2UpIHsKICAgICAvLyBEb24n
dCBzdWJtaXQgaWYgd2UncmUgbm90IGluIGEgZG9jdW1lbnQuCiAgICAgaWYgKCFkb2MpIHsKICAg
ICAgIHJldHVybiBOU19PSzsKICAgICB9Ci0gICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7Cisg
ICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIGluIGEgc2FuZGJveGVkIGZyYW1lIGFuZCBmb3Jt
IHN1Ym1pdAorICAgIC8vIGlzIGRpc2FibGVkLgorICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9
IGRvYy0+R2V0U2FuZGJveEZsYWdzKCk7CisKKyAgICBpZiAoIShzYW5kYm94RmxhZ3MgJiBuc0lE
b2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TKSkgeworICAgICAgcmV0dXJuIERvU3VibWl0KGFFdmVu
dCk7CisgICAgfQorCisJcmV0dXJuIE5TX09LOwogICB9CiAKICAgTU9aX0FTU0VSVChmYWxzZSk7
CiAgIHJldHVybiBOU19PSzsKIH0KIAogbnNyZXN1bHQKIG5zSFRNTEZvcm1FbGVtZW50OjpEb1Jl
c2V0KCkKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVF
bGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50
LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5j
cHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3Bw
CkBAIC0zMyw4NCArMzMsMzYgQEAKICAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVu
dCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICAqIHRoZSB0ZXJtcyBv
ZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCiAgKgogICogKioqKiog
RU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KIAogI2luY2x1ZGUgIm1vemlsbGEvVXRpbC5oIgog
CiAjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0dlbmVy
aWNIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIm5zSURPTURvY3VtZW50LmgiCi0jaW5jbHVkZSAi
bnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01TVkdEb2N1bWVudC5oIgot
I2luY2x1ZGUgIm5zR2tBdG9tcy5oIgotI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCi0jaW5jbHVk
ZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAibnNET01FcnJvci5oIgotI2luY2x1
ZGUgIm5zUnVsZURhdGEuaCIKLSNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCisjaW5jbHVkZSAi
bnNIVE1MSUZyYW1lRWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5n
IG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKLWNsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBw
dWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAotewotcHVibGljOgotICBuc0hUTUxJ
RnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKLSAg
ICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJzZXIg
PSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7Ci0gIHZpcnR1YWwgfm5zSFRNTElGcmFt
ZUVsZW1lbnQoKTsKLQotICAvLyBuc0lTdXBwb3J0cwotICBOU19ERUNMX0lTVVBQT1JUU19JTkhF
UklURUQKLQotICAvLyBuc0lET01Ob2RlCi0gIE5TX0ZPUldBUkRfTlNJRE9NTk9ERShuc0dlbmVy
aWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NRWxlbWVudAotICBOU19GT1JXQVJE
X05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURP
TUhUTUxFbGVtZW50Ci0gIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNHZW5lcmljSFRN
TEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50Ci0gIE5TX0RF
Q0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKLQotICAvLyBuc0lET01HZXRTVkdEb2N1bWVudAot
ICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCi0KLSAgLy8gbnNJQ29udGVudAotICB2aXJ0
dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7Ci0gIE5TX0lNRVRIT0Rf
KGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0
OwotICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGlu
Z0Z1bmN0aW9uKCkgY29uc3Q7Ci0KLSAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5m
byAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7Ci0gIHZpcnR1YWwgbnNYUEND
bGFzc0luZm8qIEdldENsYXNzSW5mbygpOwotfTsKLQotCiBOU19JTVBMX05TX05FV19IVE1MX0VM
RU1FTlRfQ0hFQ0tfUEFSU0VSKElGcmFtZSkKIAogCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojpuc0hU
TUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbVBhcnNlciBhRnJv
bVBhcnNlcikKICAgOiBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50KGFOb2RlSW5mbywgYUZyb21Q
YXJzZXIpCiB7CiB9CiAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6On5uc0hUTUxJRnJhbWVFbGVtZW50
KCkKIHsKKyAgaWYgKG1TYW5kYm94VG9rZW5MaXN0KQorICAgIG1TYW5kYm94VG9rZW5MaXN0LT5E
cm9wUmVmZXJlbmNlKCk7CiB9CiAKLQogTlNfSU1QTF9BRERSRUZfSU5IRVJJVEVEKG5zSFRNTElG
cmFtZUVsZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIE5TX0lNUExfUkVMRUFTRV9JTkhFUklURUQo
bnNIVE1MSUZyYW1lRWxlbWVudCxuc0dlbmVyaWNFbGVtZW50KQogCiBET01DSV9OT0RFX0RBVEEo
SFRNTElGcmFtZUVsZW1lbnQsIG5zSFRNTElGcmFtZUVsZW1lbnQpCiAKIC8vIFF1ZXJ5SW50ZXJm
YWNlIGltcGxlbWVudGF0aW9uIGZvciBuc0hUTUxJRnJhbWVFbGVtZW50CiBOU19JTlRFUkZBQ0Vf
VEFCTEVfSEVBRChuc0hUTUxJRnJhbWVFbGVtZW50KQogICBOU19IVE1MX0NPTlRFTlRfSU5URVJG
QUNFX1RBQkxFX0JFR0lOKG5zSFRNTElGcmFtZUVsZW1lbnQpCkBAIC0xNTAsMTYgKzEwMiwyOCBA
QCBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRDb250ZW50V2luZG93KG5zCiB9CiAKIE5TX0lNRVRI
T0RJTVAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldFNWR0RvY3VtZW50KG5zSURPTURvY3VtZW50
ICoqYVJlc3VsdCkKIHsKICAgcmV0dXJuIEdldENvbnRlbnREb2N1bWVudChhUmVzdWx0KTsKIH0K
IAorTlNfSU1FVEhPRElNUAorbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U2FuZGJveChuc0lET01E
T01TZXR0YWJsZVRva2VuTGlzdCoqIGFTYW5kYm94KQoreworICBpZiAoIW1TYW5kYm94VG9rZW5M
aXN0KSB7CisgICAgbVNhbmRib3hUb2tlbkxpc3QgPSBuZXcgbnNET01TZXR0YWJsZVRva2VuTGlz
dCh0aGlzLCBuc0drQXRvbXM6OnNhbmRib3gpOworICB9CisKKyAgTlNfQUREUkVGKCphU2FuZGJv
eCA9IG1TYW5kYm94VG9rZW5MaXN0KTsKKworICByZXR1cm4gTlNfT0s7Cit9CisKIGJvb2wKIG5z
SFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFS
ZXN1bHQpCiB7CiAgIGlmIChhTmFtZXNwYWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKICAg
ICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6Om1hcmdpbndpZHRoKSB7CkBAIC0xNzgsMTYg
KzE0MiwyMCBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShQUkluCiAgICAg
ICByZXR1cm4gUGFyc2VGcmFtZWJvcmRlclZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQog
ICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6c2Nyb2xsaW5nKSB7CiAgICAgICByZXR1
cm4gUGFyc2VTY3JvbGxpbmdWYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBpZiAo
YUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OmFsaWduKSB7CiAgICAgICByZXR1cm4gUGFyc2VBbGln
blZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQorICAgIGlmIChhQXR0cmlidXRlID09IG5z
R2tBdG9tczo6c2FuZGJveCkgeworICAgICAgYVJlc3VsdC5QYXJzZUF0b21BcnJheShhVmFsdWUp
OworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICB9CiAKICAgcmV0dXJuIG5zR2VuZXJpY0hU
TUxGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKGFOYW1lc3BhY2VJRCwgYUF0dHJpYnV0ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1
ZSwgYVJlc3VsdCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBNYXBBdHRyaWJ1dGVzSW50b1J1bGUoY29u
c3QgbnNNYXBwZWRBdHRyaWJ1dGVzKiBhQXR0cmlidXRlcywKQEAgLTI2OCw4ICsyMzYsMjIgQEAg
bnNIVE1MSUZyYW1lRWxlbWVudDo6SXNBdHRyaWJ1dGVNYXBwZWQoYwogCiAKIG5zTWFwUnVsZVRv
QXR0cmlidXRlc0Z1bmMKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEF0dHJpYnV0ZU1hcHBpbmdG
dW5jdGlvbigpIGNvbnN0CiB7CiAgIHJldHVybiAmTWFwQXR0cmlidXRlc0ludG9SdWxlOwogfQog
Cituc3Jlc3VsdAorbnNIVE1MSUZyYW1lRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5h
bWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zQVN0cmluZyogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhTm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0gbnNHa0F0b21zOjpz
YW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgeworICAgIC8vIFBh
cnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBhbmQgaWYgd2UgaGF2
ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFwcHJvcHJpYXRlbHku
CisgICAgaWYgKG1GcmFtZUxvYWRlcikKKyAgICAgIG1GcmFtZUxvYWRlci0+R2V0RXhpc3RpbmdE
b2NTaGVsbCgpLT5TZXRTYW5kYm94RmxhZ3MobnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0
dHJpYnV0ZVRvRmxhZ3MoKmFWYWx1ZSkpOworICB9CisgIHJldHVybiBuc0dlbmVyaWNIVE1MRWxl
bWVudDo6QWZ0ZXJTZXRBdHRyKGFOYW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5vdGlmeSk7Cit9CmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxJRnJhbWVFbGVtZW50LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRh
Yi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0g
Ki8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAx
LjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJl
IHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0
aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2Fy
ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5z
ZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGll
bnQgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENv
ZGUgaXMKKyAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogUG9ydGlv
bnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5
OAorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0
aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwi
KSwKKyAqIG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAy
LjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9u
cyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRo
b3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhl
IExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICog
ZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhl
bSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRo
ZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9u
cyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBM
R1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNsdWRl
ICJtb3ppbGxhL1V0aWwuaCIKKworI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50Lmgi
CisjaW5jbHVkZSAibnNHZW5lcmljSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01Eb2N1
bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJ
RE9NU1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0drQXRvbXMuaCIKKyNpbmNsdWRlICJuc0lE
b2N1bWVudC5oIgorI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIm5z
RE9NRXJyb3IuaCIKKyNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCisjaW5jbHVkZSAibnNTdHlsZUNv
bnN0cy5oIgorI2luY2x1ZGUgIm5zRE9NU2V0dGFibGVUb2tlbkxpc3QuaCIKKyNpbmNsdWRlICJu
c0NvbnRlbnRVdGlscy5oIgorCit1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKK3VzaW5nIG5hbWVz
cGFjZSBtb3ppbGxhOjpkb207CisKK2NsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJsaWMg
bnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1
YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAs
IHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAoreworcHVibGljOgorICBuc0hUTUxJRnJhbWVF
bGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKKyAgICAgICAg
ICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJzZXIgPSBtb3pp
bGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7CisgIHZpcnR1YWwgfm5zSFRNTElGcmFtZUVsZW1l
bnQoKTsKKworICAvLyBuc0lTdXBwb3J0cworICBOU19ERUNMX0lTVVBQT1JUU19JTkhFUklURUQK
KworICAvLyBuc0lET01Ob2RlCisgIE5TX0ZPUldBUkRfTlNJRE9NTk9ERShuc0dlbmVyaWNIVE1M
RnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NRWxlbWVudAorICBOU19GT1JXQVJEX05TSURP
TUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhUTUxF
bGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1l
RWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50CisgIE5TX0RFQ0xfTlNJ
RE9NSFRNTElGUkFNRUVMRU1FTlQKKworICAvLyBuc0lET01HZXRTVkdEb2N1bWVudAorICBOU19E
RUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCisKKyAgLy8gbnNJQ29udGVudAorICB2aXJ0dWFsIGJv
b2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CisgIE5TX0lNRVRIT0RfKGJvb2wp
IElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0OworICB2
aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0
aW9uKCkgY29uc3Q7CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5mbyAqYU5v
ZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7CisgIHZpcnR1YWwgbnNYUENDbGFzc0lu
Zm8qIEdldENsYXNzSW5mbygpOworCisgIHZpcnR1YWwgbnNyZXN1bHQgQWZ0ZXJTZXRBdHRyKFBS
SW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpOworCisgIFBSVWludDMyIEdldFNhbmRib3hG
bGFncygpIHsKKyAgICBuc0F1dG9TdHJpbmcgc2FuZGJveEF0dHI7CisKKyAgICBpZiAoR2V0QXR0
cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpzYW5kYm94LCBzYW5kYm94QXR0cikpIHsK
KyAgICAgIHJldHVybiBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFn
cyhzYW5kYm94QXR0cik7CisgICAgfQorCisgICAgLy8gTm8gc2FuZGJveCBhdHRyaWJ1dGUsIG5v
IHNhbmRib3ggZmxhZ3MuCisgICAgcmV0dXJuIDA7CisgIH0KKworICBzdGF0aWMgbnNIVE1MSUZy
YW1lRWxlbWVudCogRnJvbUNvbnRlbnQobnNJQ29udGVudCAqYUNvbnRlbnQpCisgIHsKKyAgICBp
ZiAoYUNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6OmlmcmFtZSkpCisgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8bnNIVE1MSUZyYW1lRWxlbWVudCo+KGFDb250ZW50KTsKKyAgICByZXR1cm4gbnNu
dWxsOworICB9CisKK3Byb3RlY3RlZDoKKyAgbnNSZWZQdHI8bnNET01TZXR0YWJsZVRva2VuTGlz
dD4gIG1TYW5kYm94VG9rZW5MaXN0OworfTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9kb2N1
bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwIGIvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9u
c0hUTUxEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxE
b2N1bWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVu
dC5jcHAKQEAgLTE0ODIsMTYgKzE0ODIsMjEgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShu
c0FTdHJpbmcmIGFDbwogewogICBhQ29va2llLlRydW5jYXRlKCk7IC8vIGNsZWFyIGN1cnJlbnQg
Y29va2llIGluIGNhc2Ugc2VydmljZSBmYWlsczsKICAgICAgICAgICAgICAgICAgICAgICAvLyBu
byBjb29raWUgaXNuJ3QgYW4gZXJyb3IgY29uZGl0aW9uLgogCiAgIGlmIChtRGlzYWJsZUNvb2tp
ZUFjY2VzcykgewogICAgIHJldHVybiBOU19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVu
dCdzIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBpcyBzZXQsIGFjY2VzcyB0byByZWFkIGNvb2tpZXMK
KyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6
U0FOREJPWEVEX09SSUdJTikKKyAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsK
KyAgCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgogICBu
c0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19DT09L
SUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSkgewogICAgIC8vIEdldCBhIFVS
SSBmcm9tIHRoZSBkb2N1bWVudCBwcmluY2lwYWwuIFdlIHVzZSB0aGUgb3JpZ2luYWwKICAgICAv
LyBjb2RlYmFzZSBpbiBjYXNlIHRoZSBjb2RlYmFzZSB3YXMgY2hhbmdlZCBieSBTZXREb21haW4K
ICAgICBuc0NPTVB0cjxuc0lVUkk+IGNvZGViYXNlVVJJOwogICAgIE5vZGVQcmluY2lwYWwoKS0+
R2V0VVJJKGdldHRlcl9BZGRSZWZzKGNvZGViYXNlVVJJKSk7CiAKQEAgLTE1MTIsMTYgKzE1MTcs
MjEgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwogCiBOU19JTUVU
SE9ESU1QCiBuc0hUTUxEb2N1bWVudDo6U2V0Q29va2llKGNvbnN0IG5zQVN0cmluZyYgYUNvb2tp
ZSkKIHsKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09LOwog
ICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNl
dCwgYWNjZXNzIHRvIHdyaXRlIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1T
YW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikKKyAgICByZXR1cm4g
TlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUg
c2VydmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2
aWNlID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAo
c2VydmljZSAmJiBtRG9jdW1lbnRVUkkpIHsKICAgICBuc0NPTVB0cjxuc0lQcm9tcHQ+IHByb21w
dDsKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW5kb3cgPSBHZXRXaW5kb3coKTsKICAg
ICBpZiAod2luZG93KSB7CiAgICAgICB3aW5kb3ctPkdldFByb21wdGVyKGdldHRlcl9BZGRSZWZz
KHByb21wdCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5j
cHAgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNE
b2NTaGVsbC5jcHAKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcApAQCAtNzI3LDE2
ICs3MjcsMTcgQEAgbnNEb2NTaGVsbDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVT
WV9GTEFHU19OT05FKSwKICAgICBtQXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9X
TiksCiAgICAgbUxvYWRUeXBlKDApLAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdp
bkhlaWdodCgtMSksCiAgICAgbUl0ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNU
cmFuc0luZGV4KC0xKSwKICAgICBtTG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hG
bGFncygwKSwKICAgICBtQ3JlYXRlZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUp
LAogICAgIG1BbGxvd1BsdWdpbnModHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwK
ICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwK
ICAgICBtQWxsb3dETlNQcmVmZXRjaCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRy
dWUpLApAQCAtMjg3OCwxNiArMjg3OSw3NSBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1l
KGNvbnN0IFBSVW5pCiAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoZm91bmRJdGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91
bmRJdGVtIGhlcmUgZXZlbiBpZiBpdCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0
ZW0gc2luY2UgYWxsIHRoZSBuYW1lcyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAg
ICAgICAgIC8vIHNwZWNpYWwgY2FzZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3Ig
ZnVydGhlci4KIAorICAgICAgICAgICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwg
d2UgbmVlZCB0byBkbyBzb21lIGV4dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNh
bmRib3hGbGFncyA9IDA7CisKKyAgICAgICAgICAgIGlmIChtQ29udGVudFZpZXdlcikgeworICAg
ICAgICAgICAgICAgIG5zSURvY3VtZW50ICogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3Vt
ZW50KCk7CisgICAgICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5HZXRTYW5kYm94Rmxh
Z3MoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncykgewor
ICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHJvb3Q7CisgICAg
ICAgICAgICAgICAgR2V0U2FtZVR5cGVSb290VHJlZUl0ZW0oZ2V0dGVyX0FkZFJlZnMocm9vdCkp
OworCisgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGZvdW5kIGl0ZW0gbm90IGEgdG9wIGxldmVs
IGJyb3dzaW5nIGNvbnRleHQgYW5kIG5vdCBvdXJzZWxmID8KKyAgICAgICAgICAgICAgICBuc0NP
TVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBzZWxmQXNJdGVtID0gc3RhdGljX2Nhc3Q8bnNJRG9j
U2hlbGxUcmVlSXRlbSAqPih0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRJdGVtICE9
IHJvb3QgJiYgZm91bmRJdGVtICE9IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gQXJlIHdlIGFuIGFuY2VzdG9yIG9mIHRoZSBmb3VuZEl0ZW0gPworICAgICAgICAgICAgICAg
ICAgICBib29sIGlzQW5jZXN0b3IgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBuc0NP
TVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0ZW07CisgICAgICAgICAgICAgICAg
ICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudEFzSXRlbSkpOworCisg
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBzZWxmQXNJdGVt
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmNlc3RvciA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0gPSB0bXA7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQW5jZXN0b3IpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIE5vLCB3ZSBhcmUgbm90IGFuIGFuY2VzdG9yIGFuZCBv
dXIgZG9jdW1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbmRib3hlZCwgd2Ug
Y2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5z
bnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0IC0gaXMgaXQg
YW4gYW5jZXN0b3Igb2Ygb3VycyA/CisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURv
Y1NoZWxsVHJlZUl0ZW0+IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2Ft
ZVR5cGVQYXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50QXNJdGVtLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgdG1wID09IGZvdW5kSXRlbSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYW5jZXN0b3IsIGFuZCB3ZSBhcmUg
c2FuZGJveGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBhbGxvdy10
b3AtbmF2aWdhdGlvbiBpcyBzZXQsIHdlIGNhbid0IGFsbG93IHRoaXMuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURf
VE9QTEVWRUxfTkFWSUdBVElPTikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91
bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
Zm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAgICAgICAgcmV0dXJuIE5TX09LOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29raW5nCiAgICAgICAgIAogICAgIC8vIEZp
cnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAtNDkxOSwxNiArNDk3OSwzMCBAQCBuc0RvY1NoZWxs
OjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6
OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0FwcFRh
YjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpTZXRT
YW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgbVNhbmRib3hGbGFncyA9
IGFTYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAorbnNE
b2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFncykKK3sKKyAg
KmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisKK05T
X0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHkoYm9vbCBhVmlzaWJpbGl0eSkK
IHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICByZXR1cm4gTlNfT0s7CiAgICAg
aWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmlld2VyLT5TaG93KCk7CiAgICAg
fQogICAgIGVsc2UgewpAQCAtODEwNywxNiArODE4MSwyOSBAQCBuc0RvY1NoZWxsOjpJbnRlcm5h
bExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRl
bT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2luZG93VGFyZ2V0LCBu
c251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnModGFy
Z2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiB0YXJnZXREb2NTaGVs
bCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAgICAgICAKICAgICAgICAgYm9v
bCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRhcmdldERvY1NoZWxsKSB7Cisg
ICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVudCBpcyBzYW5kYm94ZWQgYW5k
IHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRlL2xvYWQgYSBmcmFtZSBpdCB3
YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAgICAgLy8gRmluZEl0ZW1XaXRo
TmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3IgdGhlIHRhcmdldAorICAgICAg
ICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgb3BlbiBhIG5ldyB3aW5k
b3cgaW4gY2FzZQorICAgICAgICAgICAgLy8gdGhvdWdoLiBDaGVjayBpZiB3ZSBhcmUgc2FuZGJv
eGVkIGFuZCBiYWlsIG91dCBoZXJlIGlmIHNvLgorICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUo
bUNvbnRlbnRWaWV3ZXIsIE5TX0VSUk9SX0ZBSUxVUkUpOworICAgICAgICAgICAgbnNJRG9jdW1l
bnQqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICAgICAgICAgICAgUFJV
aW50MzIgc2FuZGJveEZsYWdzID0gMDsKKyAgICAgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+
R2V0U2FuZGJveEZsYWdzKCk7CisgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9j
U2hlbGw6OlNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgICAgIHJldHVybiBOU19F
UlJPUl9GQUlMVVJFOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lE
T01XaW5kb3c+IHdpbiA9CiAgICAgICAgICAgICAgICAgZG9fR2V0SW50ZXJmYWNlKEdldEFzU3Vw
cG9ydHModGhpcykpOwogICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUod2luLCBOU19FUlJPUl9O
T1RfQVZBSUxBQkxFKTsKIAogICAgICAgICAgICAgbnNEZXBlbmRlbnRTdHJpbmcgbmFtZShhV2lu
ZG93VGFyZ2V0KTsKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gbmV3V2luOwog
ICAgICAgICAgICAgcnYgPSB3aW4tPk9wZW4oRW1wdHlTdHJpbmcoKSwgLy8gVVJMIHRvIGxvYWQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsICAgICAgICAgIC8vIHdpbmRvdyBuYW1l
CkBAIC04ODg5LDE3ICs4OTc2LDI0IEBAIG5zRG9jU2hlbGw6OkRvVVJJTG9hZChuc0lVUkkgKiBh
VVJJLAogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkKICAgICAgICAgaWYg
KGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAgICAvLyBSZWZlcnJl
ciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4KICAgICAgICAgICAg
IGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChkb19RdWVyeUlu
dGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIo
b3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUpOworCisgICAgLy8gSWYgdGhlIGNv
bnRlbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0LCBmb3JjZSB0aGUgcGFzc2Vk
IGluCisgICAgLy8gb3duZXIgKHdoaWNoIHNob3VsZCBiZSBhIG51bGwgcHJpbmNpcGFsKSB0byBi
ZSBzZXQgb24gdGhlIGNoYW5uZWwuIElmCisgICAgLy8gdGhlIGZsYWcgaXNuJ3Qgc2V0LCBhbGxv
dyB0aGUgY29udGVudCB0byBhc3NzdW1lIGl0cyAibmF0dXJhbCBkb21haW4iIGFzCisgICAgLy8g
aXQgbm9ybWFsbHkgd291bGQuCisgICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVy
KG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKG1TYW5kYm94RmxhZ3MgJgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKSk7CiAK
ICAgICBuc0NPTVB0cjxuc0lTY3JpcHRDaGFubmVsPiBzY3JpcHRDaGFubmVsID0gZG9fUXVlcnlJ
bnRlcmZhY2UoY2hhbm5lbCk7CiAgICAgaWYgKHNjcmlwdENoYW5uZWwpIHsKICAgICAgICAgLy8g
QWxsb3cgZXhlY3V0aW9uIGFnYWluc3Qgb3VyIGNvbnRleHQgaWYgdGhlIHByaW5jaXBhbHMgbWF0
Y2gKICAgICAgICAgc2NyaXB0Q2hhbm5lbC0+CiAgICAgICAgICAgICBTZXRFeGVjdXRpb25Qb2xp
Y3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhFQ1VURV9OT1JNQUwpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmggYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwu
aAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAorKysgYi9kb2NzaGVsbC9iYXNlL25z
RG9jU2hlbGwuaApAQCAtNzgzLDE2ICs3ODMsMTggQEAgcHJvdGVjdGVkOgogICAgIC8vIENyZWF0
ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUgaXMgbm90IGV4cGVjdGVkIHRvIGNoYW5nZS4KICAgICBQ
UkludDMyICAgICAgICAgICAgICAgICAgICBtSXRlbVR5cGU7CiAKICAgICAvLyBJbmRleCBpbnRv
IHRoZSBTSFRyYW5zYWN0aW9uIGxpc3QsIGluZGljYXRpbmcgdGhlIHByZXZpb3VzIGFuZCBjdXJy
ZW50CiAgICAgLy8gdHJhbnNhY3Rpb24gYXQgdGhlIHRpbWUgdGhhdCB0aGlzIERvY1NoZWxsIGJl
Z2lucyB0byBsb2FkCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbVByZXZpb3VzVHJh
bnNJbmRleDsKICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtTG9hZGVkVHJhbnNJbmRl
eDsKIAorICAgIFBSVWludDMyICAgICAgICAgICAgICAgICAgIG1TYW5kYm94RmxhZ3M7CisKICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQ3JlYXRlZDsKICAgICBib29sICAgICAgICAg
ICAgICAgICAgICAgICBtQWxsb3dTdWJmcmFtZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAg
ICAgICAgbUFsbG93UGx1Z2luczsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxs
b3dKYXZhc2NyaXB0OwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd01ldGFS
ZWRpcmVjdHM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93SW1hZ2VzOwog
ICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ROU1ByZWZldGNoOwogICAgIGJv
b2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1dpbmRvd0NvbnRyb2w7CmRpZmYgLS1naXQg
YS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbCBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hl
bGwuaWRsCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCisrKyBiL2RvY3NoZWxs
L2Jhc2UvbnNJRG9jU2hlbGwuaWRsCkBAIC02NywxNyArNjcsMTcgQEAgaW50ZXJmYWNlIG5zSVJl
cXVlc3Q7CiBpbnRlcmZhY2UgbnNJU0hFbnRyeTsKIGludGVyZmFjZSBuc0lMYXlvdXRIaXN0b3J5
U3RhdGU7CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJvd3NlclVJOwogaW50ZXJmYWNlIG5zSURPTVN0
b3JhZ2U7CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsOwogaW50ZXJmYWNlIG5zSVdlYkJyb3dzZXJQ
cmludDsKIGludGVyZmFjZSBuc0lWYXJpYW50OwogCi1bc2NyaXB0YWJsZSwgdXVpZCgwNjY2YWRm
OC04NzM4LTRjYTctYTkxNy0wMzQ4ZjQ3ZDJmNDApXQorW3NjcmlwdGFibGUsIHV1aWQoOWIyODMz
MzctMDk3ZC00ZmE4LWEyZGEtOTE2MzE4ZWFmODI4KV0KIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6
IG5zSVN1cHBvcnRzCiB7CiAgIC8qKgogICAgKiBMb2FkcyBhIGdpdmVuIFVSSS4gIFRoaXMgd2ls
bCBnaXZlIHByaW9yaXR5IHRvIGxvYWRpbmcgdGhlIHJlcXVlc3RlZCBVUkkKICAgICogaW4gdGhl
IG9iamVjdCBpbXBsZW1lbnRpbmcJdGhpcyBpbnRlcmZhY2UuICBJZiBpdCBjYW4ndCBiZSBsb2Fk
ZWQgaGVyZQogICAgKiBob3dldmVyLCB0aGUgVVJMIGRpc3BhdGNoZXIgd2lsbCBnbyB0aHJvdWdo
IGl0cyBub3JtYWwgcHJvY2VzcyBvZiBjb250ZW50CiAgICAqIGxvYWRpbmcuCiAgICAqCkBAIC01
NDgsOSArNTQ4LDY3IEBAIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiAgICAq
LwogICBhdHRyaWJ1dGUgYm9vbGVhbiBpc0FwcFRhYjsKIAogICAvKioKICAgICogQ3JlYXRlIGEg
bmV3IGFib3V0OmJsYW5rIGRvY3VtZW50IGFuZCBjb250ZW50IHZpZXdlci4KICAgICogQHBhcmFt
IGFQcmluY2lwYWwgdGhlIHByaW5jaXBhbCB0byB1c2UgZm9yIHRoZSBuZXcgZG9jdW1lbnQuCiAg
ICAqLwogICB2b2lkIGNyZWF0ZUFib3V0QmxhbmtDb250ZW50Vmlld2VyKGluIG5zSVByaW5jaXBh
bCBhUHJpbmNpcGFsKTsKKworICAvKioKKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRv
Y3NoZWxsLiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRy
aWJ1dGUgb2YgdGhlIGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50
LCBpZgorICAgKiBleGlzdGVudC4gU2VlIHRoZSBIVE1MNSBzcGVjIGZvciBtb3JlIGRldGFpbHMu
CisgICAqIFRoZXNlIGZsYWdzIG9uIHRoZSBkb2NzaGVsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0
YXRlIG9mIHRoZSBzYW5kYm94CisgICAqIGF0dHJpYnV0ZSwgd2hpY2ggaXMgbW9kaWZpYWJsZS4g
VGhleSBhcmUgb25seSB1c2VkIHdoZW4gbG9hZGluZyBuZXcKKyAgICogY29udGVudCwgc2FuZGJv
eCBmbGFncyBhcmUgYWxzbyBpbW11dGFibHkgc2V0IG9uIHRoZSBkb2N1bWVudCB3aGVuIGl0IGlz
CisgICAqIGxvYWRlZC4KKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb2YgYSBkb2N1bWVudCBkZXBl
bmQgb24gdGhlIHNhbmRib3ggZmxhZ3Mgb24gaXRzCisgICAqIGRvY3NoZWxsIGFuZCBvZiBpdHMg
cGFyZW50IGRvY3VtZW50LCBpZiBhbnkuCisgICAqLworICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBzYW5kYm94RmxhZ3M7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50
IGZyb20gbmF2aWdhdGluZyBicm93c2luZyBjb250ZXh0cyBvdGhlciB0aGFuCisgICAqIHRoZSBz
YW5kYm94ZWQgYnJvd3NpbmcgY29udGV4dCBpdHNlbGYgKG9yIGJyb3dzaW5nIGNvbnRleHRzIGZ1
cnRoZXIKKyAgICogbmVzdGVkIGluc2lkZSBpdCksIGFuZCB0aGUgdG9wLWxldmVsIGJyb3dzaW5n
IGNvbnRleHQuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9OQVZJR0FU
SU9OICA9IDB4MTsKKworICAvKioKKyAgICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJv
bSBuYXZpZ2F0aW5nIHRoZWlyIHRvcC1sZXZlbCBicm93c2luZworICAgKiBjb250ZXh0LgorICAg
Ki8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiA9
IDB4MjsKKworICAvKioKKyAgICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBpbnN0
YW50aWF0aW5nIHBsdWdpbnMsIHdoZXRoZXIgdXNpbmcgdGhlCisgICAqIGVtYmVkIGVsZW1lbnQs
IHRoZSBvYmplY3QgZWxlbWVudCwgdGhlIGFwcGxldCBlbGVtZW50LCBvciB0aHJvdWdoCisgICAq
IG5hdmlnYXRpb24gb2YgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgdW5sZXNzIHRob3NlIHBs
dWdpbnMgY2FuIGJlCisgICAqIHNlY3VyZWQuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25n
IFNBTkRCT1hFRF9QTFVHSU5TID0gMHg0OworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgZm9yY2Vz
IGNvbnRlbnQgaW50byBhIHVuaXF1ZSBvcmlnaW4sIHRodXMgcHJldmVudGluZyBpdCBmcm9tCisg
ICAqIGFjY2Vzc2luZyBvdGhlciBjb250ZW50IGZyb20gdGhlIHNhbWUgb3JpZ2luLgorICAgKiBU
aGlzIGZsYWcgYWxzbyBwcmV2ZW50cyBzY3JpcHQgZnJvbSByZWFkaW5nIGZyb20gb3Igd3JpdGlu
ZyB0byB0aGUKKyAgICogZG9jdW1lbnQuY29va2llIElETCBhdHRyaWJ1dGUsIGFuZCBibG9ja3Mg
YWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FO
REJPWEVEX09SSUdJTiA9IDB4ODsKKworICAvKioKKyAgICogVGhpcyBmbGFnIGJsb2NrcyBmb3Jt
IHN1Ym1pc3Npb24uCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9GT1JN
UyA9IDB4MTA7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlv
bi4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1NDUklQVFMgPSAweDIw
OworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgYmxvY2tzIGZlYXR1cmVzIHRoYXQgdHJpZ2dlciBh
dXRvbWF0aWNhbGx5LCBzdWNoIGFzCisgICAqIGF1dG9tYXRpY2FsbHkgcGxheWluZyBhIHZpZGVv
IG9yIGF1dG9tYXRpY2FsbHkgZm9jdXNpbmcgYSBmb3JtIGNvbnRyb2wuCisgICAqLworICBjb25z
dCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMgPSAweDQwOwogfTsK
ZGlmZiAtLWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xv
YmFsV2luZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9t
L2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCkBAIC04MTUyLDE2ICs4MTUyLDIzIEBAIG5zR2xvYmFs
V2luZG93OjpHZXRTZXNzaW9uU3RvcmFnZShuc0lET00KICAgfQogCiAgIGlmICghbVNlc3Npb25T
dG9yYWdlKSB7CiAgICAgKmFTZXNzaW9uU3RvcmFnZSA9IG5zbnVsbDsKIAogICAgIG5zU3RyaW5n
IGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAgICAgIG1Eb2N1bWVudC0+R2V0
RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOworCSAgCisgICAgICAvLyBJZiB0aGUgZG9jdW1lbnQg
aGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgICAvLyBkb24ndCBhbGxvdyBh
Y2Nlc3MgdG8gc2Vzc2lvblN0b3JhZ2UuCisgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gZG9j
ID0gZG9fUXVlcnlJbnRlcmZhY2UobURvY3VtZW50KTsKKyAgICAgIGlmIChkb2MgJiYgKGRvYy0+
R2V0U2FuZGJveEZsYWdzKCkgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpIHsKKyAg
ICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgICB9CiAgICAgfQog
CiAgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2Vzc2lvblN0b3JhZ2VGb3JQcmluY2lw
YWwocHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvY3VtZW50VVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobVNl
c3Npb25TdG9yYWdlKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIApAQCAtODIz
OSwxNiArODI0NiwyNCBAQCBuc0dsb2JhbFdpbmRvdzo6R2V0TG9jYWxTdG9yYWdlKG5zSURPTVN0
CiAKICAgICBuc0NPTVB0cjxuc0lET01TdG9yYWdlTWFuYWdlcj4gc3RvcmFnZU1hbmFnZXIgPQog
ICAgICAgZG9fR2V0U2VydmljZSgiQG1vemlsbGEub3JnL2RvbS9zdG9yYWdlbWFuYWdlcjsxIiwg
JnJ2KTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgbnNTdHJpbmcgZG9j
dW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1
bWVudFVSSShkb2N1bWVudFVSSSk7CisJICAKKyAgICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMg
dGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAgICAgIC8vIGRvbid0IGFsbG93IGFjY2Vz
cyB0byBsb2NhbFN0b3JhZ2UuCisgICAgICAvLyBSRVZJRVc6IGlzIGl0IGtvc2hlciB0byBkbyBh
IGNhc3QgaGVyZSBpbnN0ZWFkIG9mIGEgUUk/CisgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4g
ZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UobURvY3VtZW50KTsKKyAgICAgIGlmIChkb2MgJiYgKGRv
Yy0+R2V0U2FuZGJveEZsYWdzKCkgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpIHsK
KyAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgICB9CiAgICAg
fQogCiAgICAgcnYgPSBzdG9yYWdlTWFuYWdlci0+R2V0TG9jYWxTdG9yYWdlRm9yUHJpbmNpcGFs
KHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAgICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICB9CiAKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZh
Y2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRt
bC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9u
c0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lE
T01IVE1MSUZyYW1lRWxlbWVudC5pZGwKQEAgLTMzLDQ0ICszMyw0NiBAQAogICogZGVjaXNpb24g
YnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRo
ZSBub3RpY2UKICAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3Ig
dGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwg
YSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0
aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoK
ICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJuc0lET01I
VE1MRWxlbWVudC5pZGwiCisjaW5jbHVkZSAibnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRs
IgogCiAvKioKICAqIFRoZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2UgaXMgdGhl
IGludGVyZmFjZSB0byBhIFtYXUhUTUwKICAqIGlmcmFtZSBlbGVtZW50LgogICoKICAqIFRoaXMg
aW50ZXJmYWNlIGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lm
aWNhdGlvbjoKICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgog
ICogd2l0aCBjaGFuZ2VzIGZyb20gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgV0hBVFdHIEhUTUwgc3Bl
Y2lmaWNhdGlvbjoKICAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvCiAgKi8KIAotW3NjcmlwdGFibGUsIHV1aWQoZDRlODcwYmQtNDUyYy00ODYwLWI5
M2MtZjRlZTAwYmEzM2Y2KV0KK1tzY3JpcHRhYmxlLCB1dWlkKDUyZjYyNDRiLWIxZjUtNGY0Yy04
ZmYzLTdlMTQ2MzE2ZjQxMSldCiBpbnRlcmZhY2UgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgOiBu
c0lET01IVE1MRWxlbWVudAogewogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBhbGlnbjsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgZnJhbWVCb3Jk
ZXI7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGhlaWdodDsKICAgICAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbG9uZ0Rlc2M7CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbkhlaWdodDsKICAgICAgICAgICAgYXR0cmli
dXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luV2lkdGg7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmcgICAgICAgIG5hbWU7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIHNjcm9sbGluZzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc3Jj
OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB3aWR0aDsKICAgLy8gSW50
cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTURvY3Vt
ZW50ICAgY29udGVudERvY3VtZW50OwogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NV2luZG93
ICAgICBjb250ZW50V2luZG93OwogCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01ET01TZXR0
YWJsZVRva2VuTGlzdCBzYW5kYm94OwogCiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBp
ZnJhbWUgZWxlbWVudHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0
byBiZSBwcmVzZW50CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3Vi
IGRvY3VtZW50IHRvIGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRw
czovL3dpa2kubW96aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkK
ICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVu
OwogfTsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3Jj
L25zV2luZG93V2F0Y2hlci5jcHAgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVy
L3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRv
d3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVu
dHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcApAQCAtNjAzLDE2ICs2MDMs
MzMgQEAgbnNXaW5kb3dXYXRjaGVyOjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAg
aWYgKCFuZXdEb2NTaGVsbEl0ZW0pIHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3Bl
biB1cCBhIG5ldyB3aW5kb3cgb3Vyc2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJv
dmlkZXIgZm9yIG9uZS4gIEluIGVpdGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmln
aHQKICAgICAvLyBuYW1lIG9uIGl0LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAg
ICAvLyBJZiB0aGUgcGFyZW50IHRyeWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94
ZWQsCisgICAgLy8gdGhpcyBpcyBub3QgYWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlm
IChhUGFyZW50KSB7CisgICAgICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAg
ICAgYVBhcmVudC0+R2V0RG9jdW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBu
c0NPTVB0cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKwor
ICAgICAgaWYgKGRvYykgeworICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAg
ICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPkdldFNhbmRib3hGbGFncygpOworCisgICAgICAgIGlm
IChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAg
ICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH0KKwogICAgIC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHBy
b3ZpZGVyIGZvciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3Blbmlu
ZyBhIGRpYWxvZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8v
IGlmIHdlJ3JlIG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNo
cm9tZSBmbGFncyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVX
aW4gPSBkb19RdWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNo
cm9tZVdpbiAmJgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6
OkNIUk9NRV9NT0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJC
cm93c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>594862</attachid>
            <date>2012-02-06 16:34:27 -0800</date>
            <delta_ts>2012-02-10 15:58:21 -0800</delta_ts>
            <desc>WIP - prototype</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>46072</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZTk5ZTBkYzk3NzQ2Yzk1ODI5NTcyZDhhMDQ5
NjA1Mjk1OGNiNTFhMwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtMTgxOSwzNSArMTgxOSwzNCBAQCBwdWJsaWM6CiAgICAqIGZy
b20gdGhlIGRvY3VtZW50IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQg
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsK
IAogICAvKioKICAgICogU2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRo
ZSBnaXZlbiBjaGFubmVsLCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBv
ZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JB
Ym91dEJsYW5rIGlzIHRydWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHBy
aW5jaXBhbCBzZXQgdXAgb24gaXQuCi0gICAqCiAgICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgd2hl
dGhlciB0aGUgcHJpbmNpcGFsIHdhcyBzZXQgdXAgYXMgdGhlIG93bmVyCiAgICAqIG9mIHRoZSBj
aGFubmVsLgogICAgKi8KICAgc3RhdGljIGJvb2wgU2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNp
cGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBG
b3JBYm91dEJsYW5rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0
VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFG
b3JjZU93bmVyID0gZmFsc2UpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBCdG9hKGNvbnN0IG5zQVN0
cmluZyYgYUJpbmFyeURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUFz
Y2lpQmFzZTY0U3RyaW5nKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgQXRvYihjb25zdCBuc0FTdHJp
bmcmIGFBc2NpaVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQmlu
YXJ5RGF0YSk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5wdXQgZWxlbWVu
dCBwYXNzZWQgaW4gcGFyYW1ldGVyIGhhcyB0aGUgYXV0b2NvbXBsZXRlCi0gICAqIGZ1bmN0aW9u
bmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIu
CisgICAqIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0
aGUgZm9ybSBvd25lci4KICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFrZSBzdXJlIGF1
dG9jb21wbGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0eXBlLgogICAg
KgogICAgKiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNrLiBOT1RFOiBh
SW5wdXQgY2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBpbnB1dCBlbGVt
ZW50IGhhcyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBib29sIElzQXV0
b2NvbXBsZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQpOwogCkBAIC0x
ODU4LDE2ICsxODU3LDI2IEBAIHB1YmxpYzoKICAgICogY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Yg
VVJJcy4gIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBVUkkncyBwcmVwYXRoIGlzCiAgICAqIGlu
IHRoZSBsaXN0LCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICAgKgogICAgKiBDb21wYXJpc29ucyBh
cmUgY2FzZS1pbnNlbnNpdGl2ZSwgYW5kIHdoaXRlc3BhY2UgYmV0d2VlbiBlbGVtZW50cyBvZiB0
aGUKICAgICogY29tbWEtc2VwYXJhdGVkIGxpc3QgaXMgaWdub3JlZC4KICAgICovCiAgIHN0YXRp
YyBib29sIFVSSUlzQ2hyb21lT3JJblByZWYobnNJVVJJICphVVJJLCBjb25zdCBjaGFyICphUHJl
Zik7CiAKKyAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5kYm94QXR0cik7
CisKIHByaXZhdGU6CiAgIHN0YXRpYyBib29sIEluaXRpYWxpemVFdmVudFRhYmxlKCk7CiAKICAg
c3RhdGljIG5zcmVzdWx0IEVuc3VyZVN0cmluZ0J1bmRsZShQcm9wZXJ0aWVzRmlsZSBhRmlsZSk7
CiAKICAgc3RhdGljIG5zSURPTVNjcmlwdE9iamVjdEZhY3RvcnkgKkdldERPTVNjcmlwdE9iamVj
dEZhY3RvcnkoKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgSG9sZFNjcmlwdE9iamVjdChQUlVpbnQz
MiBhTGFuZ0lELCB2b2lkKiBhT2JqZWN0KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9wdWJs
aWMvbnNJRG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaAotLS0g
YS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysrIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0lEb2N1bWVudC5oCkBAIC0xMTksMTggKzExOSwxOCBAQCBjbGFzcyBMb2FkZXI7CiAK
IG5hbWVzcGFjZSBkb20gewogY2xhc3MgTGluazsKIGNsYXNzIEVsZW1lbnQ7CiB9IC8vIG5hbWVz
cGFjZSBkb20KIH0gLy8gbmFtZXNwYWNlIG1vemlsbGEKIAogI2RlZmluZSBOU19JRE9DVU1FTlRf
SUlEIFwKLXsgMHgyODNlYzI3ZCwgMHg1YjIzLCAweDQ5YjIsIFwNCi0gIHsgMHg5NCwgMHhkOSwg
MHg5LCAweGI1LCAweGRiLCAweDQ1LCAweDMwLCAweDczIH0gfQ0KK3sgMHg1N2ZlNDRhZSwgMHg2
NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAweGE3LCAweDQzLCAweDI4LCAw
eGJlLCAweDg2IH0gfQogCiAKIC8vIEZsYWcgZm9yIEFkZFN0eWxlU2hlZXQoKS4KICNkZWZpbmUg
TlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFMT0cgICAgICAgICAgICAgICAgKDEgPDwgMCkKIAogLy8g
RW51bSBmb3IgcmVxdWVzdGluZyBhIHBhcnRpY3VsYXIgdHlwZSBvZiBkb2N1bWVudCB3aGVuIGNy
ZWF0aW5nIGEgZG9jCiBlbnVtIERvY3VtZW50Rmxhdm9yIHsKICAgRG9jdW1lbnRGbGF2b3JMZWdh
Y3lHdWVzcywgLy8gY29tcGF0IHdpdGggb2xkIGNvZGUgdW50aWwgbWFkZSBIVE1MNS1jb21wbGlh
bnQKQEAgLTQ1OCwxNiArNDU4LDM2IEBAIHB1YmxpYzoKICAgICogQHNlZSBuc0JpZGlVdGlscy5o
CiAgICAqLwogICB2b2lkIFNldEJpZGlPcHRpb25zKFBSVWludDMyIGFCaWRpT3B0aW9ucykKICAg
ewogICAgIG1CaWRpT3B0aW9ucyA9IGFCaWRpT3B0aW9uczsKICAgfQogICAKICAgLyoqCisgICAq
IFNldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4gVGhpcyBzaG91bGQgb25s
eSBoYXBwZW4KKyAgICogYXQgZG9jdW1lbnQgbG9hZCwgdGhlIGZsYWdzIGFyZSBpbW11dGFibGUg
YWZ0ZXIgYmVpbmcgc2V0IGF0IGxvYWQgdGltZS4KKyAgICogQHNlZSBuc0lEb2NTaGVsbC5pZGwg
Zm9yIHRoZSBwb3NzaWJsZSBmbGFncworICAgKi8KKyAgdm9pZCBTZXRTYW5kYm94RmxhZ3MoUFJV
aW50MzIgYVNhbmRib3hGbGFncykKKyAgeworICAgIE1PWl9BU1NFUlQoR2V0UmVhZHlTdGF0ZUVu
dW0oKSA9PSBSRUFEWVNUQVRFX0xPQURJTkcpOworICAgIG1TYW5kYm94RmxhZ3MgPSBhU2FuZGJv
eEZsYWdzOworICB9CisKKyAgLyoqCisgICAqIEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhp
cyBkb2N1bWVudC4KKyAgICogQHNlZSBuc0lEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJsZSBm
bGFncworICAgKi8KKyAgUFJVaW50MzIgR2V0U2FuZGJveEZsYWdzKCkgY29uc3QKKyAgeworICAg
IHJldHVybiBtU2FuZGJveEZsYWdzOworICB9CisKKyAgLyoqCiAgICAqIEFjY2VzcyBIVFRQIGhl
YWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAgKiBzb3VyY2Vz
LCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCiAgIHZpcnR1YWwgdm9pZCBHZXRIZWFkZXJE
YXRhKG5zSUF0b20qIGFIZWFkZXJGaWVsZCwgbnNBU3RyaW5nJiBhRGF0YSkgY29uc3QgPSAwOwog
ICB2aXJ0dWFsIHZvaWQgU2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhaGVhZGVyRmllbGQsIGNvbnN0
IG5zQVN0cmluZyYgYURhdGEpID0gMDsKIAogICAvKioKICAgICogQ3JlYXRlIGEgbmV3IHByZXNl
bnRhdGlvbiBzaGVsbCB0aGF0IHdpbGwgdXNlIGFDb250ZXh0IGZvciBpdHMKQEAgLTE3OTUsMTYg
KzE4MTUsMjEgQEAgcHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1bWVudCBpcyB0cnVl
LCBtT3JpZ2luYWxEb2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAgIC8vIGRvY3VtZW50
LgogICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7CiAKICAgLy8gVGhl
IGJpZGkgb3B0aW9ucyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBiaXRmaWVsZCBtZWFu
cyBpcwogICAvLyBkZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50MzIgbUJpZGlPcHRp
b25zOwogCisgIC8vIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVudC4gVGhlc2UgcmVm
bGVjdCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRoZQorICAvLyBhc3Nv
Y2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3RlbnQuIFRo
ZXNlIGFyZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRhYmxlIC0gc2VlIG5z
SURvY1NoZWxsLmlkbCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICBQUlVpbnQzMiBtU2FuZGJv
eEZsYWdzOworCiAgIG5zQ1N0cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnND
U3RyaW5nIG1Db250ZW50VHlwZTsKIHByb3RlY3RlZDoKIAogICAvLyBUaGUgZG9jdW1lbnQncyBz
ZWN1cml0eSBpbmZvCiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VjdXJpdHlJbmZvOwogCmRp
ZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250
ZW50VXRpbHMuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBA
IC03MjQsMTYgKzcyNCw2NCBAQCBuc0NvbnRlbnRVdGlsczo6R2V0UGFyc2VyU2VydmljZSgpCiAg
ICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwgJnNQYXJz
ZXJTZXJ2aWNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNlclNlcnZp
Y2UgPSBuc251bGw7CiAgICAgfQogICB9CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNlOwogfQor
LyoqCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmlidXRl
IChvZiBhbiA8aWZyYW1lPiBvcgorICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQg
dG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFsbHkuCisgKgorICogQHBhcmFtIGFBdHRy
aWJ1dGUgICAgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJldHVybiAg
ICAgICAgICAgICAgdGhlIHNldCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRp
bHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBzYW5kYm94
QXR0clZhbHVlKQoreworICAvLyBJZiB0aGVyZSdzIGEgc2FuZGJveCBhdHRyaWJ1dGUgYXQgYWxs
IChhbmQgdGhlcmUgaXMgaWYgdGhpcyBpcyBiZWluZworICAvLyBjYWxsZWQpLCBzdGFydCBvZmYg
Ynkgc2V0dGluZyBhbGwgdGhlIHJlc3RyaWN0aW9uIGZsYWdzLgorICBQUlVpbnQzMiBvdXQgPSBu
c0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04gfAorICAgIG5zSURvY1NoZWxsOjpTQU5E
Qk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiB8CisgICAgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9Q
TFVHSU5TIHwgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4gfAorICAgIG5zSURvY1NoZWxs
OjpTQU5EQk9YRURfRk9STVMgfCBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFMgfAorICAg
IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTOworCisgIGlmICghc2Fu
ZGJveEF0dHJWYWx1ZS5Jc0VtcHR5KCkpIHsKKyAgICAvLyBUaGUgc2VwYXJhdG9yIG9wdGlvbmFs
IGZsYWcgaXMgdXNlZCBiZWNhdXNlIHRoZSBIVE1MNSBzcGVjIHNheXMgYW55CisgICAgLy8gd2hp
dGVzcGFjZSBpcyBvayBhcyBhIHNlcGFyYXRvciwgd2hpY2ggaXMgd2hhdCB0aGlzIGRvZXMuCisg
ICAgSFRNTFNwbGl0T25TcGFjZXNUb2tlbml6ZXIgdG9rZW5pemVyKHNhbmRib3hBdHRyVmFsdWUs
ICcgJywKKyAgICAgIG5zQ2hhclNlcGFyYXRlZFRva2VuaXplclRlbXBsYXRlPG5zQ29udGVudFV0
aWxzOjpJc0hUTUxXaGl0ZXNwYWNlPjo6U0VQQVJBVE9SX09QVElPTkFMKTsKKworICAgIHdoaWxl
ICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7CisgICAgICBuc0RlcGVuZGVudFN1YnN0cmlu
ZyB0b2tlbiA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKworCSAgbnNDYXNlSW5zZW5zaXRpdmVT
dHJpbmdDb21wYXJhdG9yIGNvbXBhcmF0b3IgPSBuc0Nhc2VJbnNlbnNpdGl2ZVN0cmluZ0NvbXBh
cmF0b3IoKTsKKworICAgICAgaWYgKHRva2VuLkVxdWFscyhuc0drQXRvbXM6OmFsbG93c2NyaXB0
cy0+R2V0VVRGMTZTdHJpbmcoKSwgY29tcGFyYXRvcikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lE
b2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFM7CisgICAgICB9IGVsc2UgaWYgKHRva2VuLkVxdWFs
cyhuc0drQXRvbXM6OmFsbG93c2FtZW9yaWdpbi0+R2V0VVRGMTZTdHJpbmcoKSwgY29tcGFyYXRv
cikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTjsKKyAg
ICAgIH0gZWxzZSBpZiAodG9rZW4uRXF1YWxzKG5zR2tBdG9tczo6YWxsb3dmb3Jtcy0+R2V0VVRG
MTZTdHJpbmcoKSwgY29tcGFyYXRvcikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6
U0FOREJPWEVEX0ZPUk1TOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5FcXVhbHMobnNHa0F0b21z
OjphbGxvd3NjcmlwdHMtPkdldFVURjE2U3RyaW5nKCksIGNvbXBhcmF0b3IpKSB7CisgICAgICAg
IC8vIGFsbG93LXNjcmlwdHMgcmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRTIGFuZAorICAg
ICAgICAvLyBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBvdXQgJj0gfm5z
SURvY1NoZWxsOjpTQU5EQk9YRURfU0NSSVBUUzsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVs
bDo6U0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4u
RXF1YWxzKG5zR2tBdG9tczo6YWxsb3d0b3BuYXZpZ2F0aW9uLT5HZXRVVEYxNlN0cmluZygpLCBj
b21wYXJhdG9yKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfVE9Q
TEVWRUxfTkFWSUdBVElPTjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb3V0Owor
fQogCiAjaWZkZWYgTU9aX1hURgogbnNJWFRGU2VydmljZSoKIG5zQ29udGVudFV0aWxzOjpHZXRY
VEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFzWFRGU2VydmljZSkgewogICAgIG5zcmVzdWx0IHJ2ID0g
Q2FsbEdldFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZzWFRGU2VydmljZSk7CiAgICAgaWYgKE5T
X0ZBSUxFRChydikpIHsKQEAgLTU4MTcsMTcgKzU4NjUsMTggQEAgbnNDb250ZW50VXRpbHM6OlVS
SUluaGVyaXRzU2VjdXJpdHlDb250ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVz
dWx0KTsKIH0KIAogLy8gc3RhdGljCiBib29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVs
T3duZXIobnNJUHJpbmNpcGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFGb3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQgdGhl
IG93bmVyIG9mIHRoZSBjaGFubmVsLCBidXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4ndAog
ICAvLyBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBYWFg6
IEl0IHNlZW1zIHdyb25nIHRoYXQgdGhlIG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9uZSBp
cwogICAvLyAgICAgIHN1cHBsaWVkKSB1bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRh
dGEgb3IgYWJvdXQ6YmxhbmsuCiAgIC8vIFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQsIGNo
ZWNrIGFsbCBjYWxsZXJzIGZvciB3aGF0IG93bmVycwpAQCAtNTgzNSwyMyArNTg4NCwyNyBAQCBu
c0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29tbWVu
dHMgaW4gbnNEb2NTaGVsbDo6TG9hZFVSSSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8gICAg
ICBpbmhlcml0aW5nIHRoZSBvd25lciBpZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxk
IGJlCiAgIC8vICAgICAgdmVyeSB3cm9uZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGluZyBi
dXQgY2hhbm5lbHMgdGhhdAogICAvLyAgICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNlY3Vy
aXR5IGNvbnRleHQhCiAgIC8vCiAgIC8vICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQg
dGhlIG93bmVyIHdoZW4gdGhleSBhcmUgY3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5nIGEg
TlVMTCBvd25lciB3b3VsZCBiZSBiYWQhKQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBpcyB0
cnVlLCB0aGUgb3duZXIgd2lsbCBiZSBzZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0CisgIC8v
IGNhbiBwcm92aWRlIGl0cyBvd24gc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB1c2VkIGZvciB0
aGUgSFRNTDUgSUZSQU1FCisgIC8vIHNhbmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2Ug
dGhlIGNoYW5uZWwgKGFuZCBpdHMgZG9jdW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBh
IG51bGwgcHJpbmNpcGFsLgogICBib29sIGluaGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhl
cml0c1NlY3VyaXR5Q29udGV4dCB0byByZXR1cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6
YmxhbmsgVVJJLCBzbyBkb24ndCBjYWxsIE5TX0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBm
YWlscy4KICAgLy8gVGhpcyBjb25kaXRpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0Rv
Y1NoZWxsOjpJbnRlcm5hbExvYWQgd2hlcmUKICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5n
cyB0aGF0IHdpbGwgdXNlIHRoZSBvd25lci4KLSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0
c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAo
YVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAo
YUZvcmNlT3duZXIgfHwgKChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQo
YVVSSSwgJmluaGVyaXQpKSAmJgorICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0Qmxh
bmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpKSkgewogICAgIGFDaGFubmVsLT5TZXRPd25l
cihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLwogICAv
LyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6
IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCmRpZmYgLS1n
aXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9u
c0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisrKyBi
L2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTIzNzgsMTYgKzIzNzgsMjUgQEAg
bnNEb2N1bWVudDo6U3RhcnREb2N1bWVudExvYWQoY29uc3QgY2hhcgogICAgIEZpbmRDaGFySW5S
ZWFkYWJsZSgnOycsIHNlbWljb2xvbiwgZW5kKTsKICAgICBTZXRDb250ZW50VHlwZUludGVybmFs
KFN1YnN0cmluZyhzdGFydCwgc2VtaWNvbG9uKSk7CiAgIH0KIAogICBSZXRyaWV2ZVJlbGV2YW50
SGVhZGVycyhhQ2hhbm5lbCk7CiAKICAgbUNoYW5uZWwgPSBhQ2hhbm5lbDsKIAorICAvLyBJZiB0
aGlzIGRvY3VtZW50IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRvY3NoZWxsLCBjb3B5IGl0cyBzYW5k
Ym94IGZsYWdzCisgIC8vIHRvIHRoZSBkb2N1bWVudC4gVGhlc2UgYXJlIGltbXV0YWJsZSBhZnRl
ciBiZWluZyBzZXQgaGVyZS4KKyAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9f
UXVlcnlJbnRlcmZhY2UoYUNvbnRhaW5lcik7CisKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgbnNy
ZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2FuZGJveEZsYWdzKCZtU2FuZGJveEZsYWdzKTsKKyAg
ICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworICB9CisKICAgbnNyZXN1bHQgcnYgPSBJbml0
Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgcmV0dXJuIE5TX09LOwog
fQogCiBuc3Jlc3VsdAogbnNEb2N1bWVudDo6SW5pdENTUCgpCmRpZmYgLS1naXQgYS9jb250ZW50
L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9h
ZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCisrKyBiL2Nv
bnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTExMywxNiArMTEzLDE4IEBACiAj
aW5jbHVkZSAibW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZl
cmVuY2VzLmgiCiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIKICNpbmNsdWRlICJtb3ppbGxh
L2RvbS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlvdXQvUmVuZGVyRnJhbWVQYXJl
bnQuaCIKIAogI2luY2x1ZGUgImpzYXBpLmgiCiAKKyNpbmNsdWRlICJuc0hUTUxJRnJhbWVFbGVt
ZW50LmgiCisKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemls
bGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CiB1c2luZyBuYW1lc3Bh
Y2UgbW96aWxsYTo6bGF5b3V0OwogdHlwZWRlZiBGcmFtZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7
CiAKIGNsYXNzIG5zQXN5bmNEb2NTaGVsbERlc3Ryb3llciA6IHB1YmxpYyBuc1J1bm5hYmxlCiB7
CkBAIC00NjgsMjAgKzQ3MCw3NyBAQCBuc0ZyYW1lTG9hZGVyOjpSZWFsbHlTdGFydExvYWRpbmdJ
bnRlcm5hCiAgIC8vIEp1c3QgdG8gYmUgc2FmZSwgcmVjaGVjayB1cmkuCiAgIHJ2ID0gQ2hlY2tV
UklMb2FkKG1VUklUb0xvYWQpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG5z
Q09NUHRyPG5zSURvY1NoZWxsTG9hZEluZm8+IGxvYWRJbmZvOwogICBtRG9jU2hlbGwtPkNyZWF0
ZUxvYWRJbmZvKGdldHRlcl9BZGRSZWZzKGxvYWRJbmZvKSk7CiAgIE5TX0VOU1VSRV9UUlVFKGxv
YWRJbmZvLCBOU19FUlJPUl9GQUlMVVJFKTsKIAotICAvLyBXZSdsbCB1c2Ugb3VyIHByaW5jaXBh
bCwgbm90IHRoYXQgb2YgdGhlIGRvY3VtZW50IGxvYWRlZCBpbnNpZGUgdXMuICBUaGlzCi0gIC8v
IGlzIHZlcnkgaW1wb3J0YW50OyBuZWVkZWQgdG8gcHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1
bWVudHMgbG9hZGVkIGluCi0gIC8vIHN1YmZyYW1lcyEKLSAgbG9hZEluZm8tPlNldE93bmVyKG1P
d25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7CisgIC8vIElzIHRoaXMgYW4gPGlmcmFtZT4g
d2l0aCBhIHNhbmRib3ggYXR0cmlidXRlIG9yIGEgcGFyZW50IHdoaWNoIGlzCisgIC8vIHNhbmRi
b3hlZCA/CisgIG5zSFRNTElGcmFtZUVsZW1lbnQgKiBpZnJhbWUgPQorICAgIG5zSFRNTElGcmFt
ZUVsZW1lbnQ6OkZyb21Db250ZW50KG1Pd25lckNvbnRlbnQpOworCisgIGlmIChpZnJhbWUpIHsK
KyAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSBpZnJhbWUtPkdldFNhbmRib3hGbGFncygpOwor
CisgICAgUFJVaW50MzIgcGFyZW50U2FuZGJveEZsYWdzID0gMDsKKworICAgIC8vIEdldCB0aGUg
cGFyZW50J3Mgc2FuZGJveCBmbGFncywgdGhleSdyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlmIHRo
ZQorICAgIC8vIGZyYW1lIGJlaW5nIGxvYWRlZCBuZWVkcyB0byBiZSBzYW5kYm94ZWQuCisgICAg
bnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50RG9jU2hlbGxJdGVtOworICAgIG5z
Q09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IGN1ckRvY1NoZWxsSXRlbSA9IGRvX1F1ZXJ5SW50
ZXJmYWNlKG1Eb2NTaGVsbCk7CisKKyAgICBpZiAoTlNfU1VDQ0VFREVEKGN1ckRvY1NoZWxsSXRl
bS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudERvY1NoZWxsSXRlbSkpKSkgeworICAg
ICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IHBhcmVudERvYyA9IGRvX0dldEludGVyZmFjZShwYXJl
bnREb2NTaGVsbEl0ZW0pOworCisgICAgICBpZiAocGFyZW50RG9jKSB7CisgICAgICAgIHBhcmVu
dFNhbmRib3hGbGFncyA9IHBhcmVudERvYy0+R2V0U2FuZGJveEZsYWdzKCk7CisgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHNhbmRib3hGbGFncyB8fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAg
ICAgIGlmIChwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgICAgLy8gVGhlIGNoaWxkIGNhbiBv
bmx5IGFkZCByZXN0cmljdGlvbnMsIG5vdCByZW1vdmUgdGhlbS4KKyAgICAgICAgc2FuZGJveEZs
YWdzIHw9IHBhcmVudFNhbmRib3hGbGFnczsKKyAgICAgIH0KKworICAgICAgbURvY1NoZWxsLT5T
ZXRTYW5kYm94RmxhZ3Moc2FuZGJveEZsYWdzKTsKKworICAgICAgLy8gU2V0IHVwIHRoZSBhY3R1
YWwgc2FuZGJveGluZyBhcyBzcGVjaWZpZWQuCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJ
RG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICAgICAgLy8gYWxsb3ctc2FtZS1kb21h
aW4gd2Fzbid0IHNwZWNpZmllZCwgd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lw
YWwgYW5kCisgICAgICAgIC8vIHVzZSB0aGF0IGFzIHRoZSBvd25lci4KKyAgICAgICAgbnNDT01Q
dHI8bnNJUHJpbmNpcGFsPiBudWxsUHJpbmNpcGFsID0gZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3pp
bGxhLm9yZy9udWxscHJpbmNpcGFsOzEiKTsKKyAgICAgICAgbG9hZEluZm8tPlNldE93bmVyKG51
bGxQcmluY2lwYWwpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVXNlIHRoZSAnbm9ybWFs
JyBwcmluY2lwYWwgZm9yIHRoZSA8aWZyYW1lPi4KKyAgICAgICAgbG9hZEluZm8tPlNldE93bmVy
KG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7CisgICAgICB9CisKKyAgICAgIGlmIChz
YW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICAgICAg
ICBtRG9jU2hlbGwtPlNldEFsbG93SmF2YXNjcmlwdChmYWxzZSk7CisgICAgICB9CisKKyAgICAg
IGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1BMVUdJTlMpIHsKKyAg
ICAgICAgICBtRG9jU2hlbGwtPlNldEFsbG93UGx1Z2lucyhmYWxzZSk7CisgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgIC8vIFdlIGFyZSBub3Qgc2FuZGJveGVkIC0gd2UgdXNlIG91ciBw
cmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZQorICAgICAgICAgLy8gZG9jdW1lbnQgbG9hZGVkIGlu
c2lkZSB1cy4gIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0bworICAgICAgICAgLy8g
cHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluIHN1YmZyYW1lcyEKKyAg
ICAgICAgIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkp
OworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAgIC8vIE5vdCBhbiBpZnJhbWUgYW5kIG5vdCBzYW5k
Ym94ZWQsIHdlIHVzZSBvdXIgcHJpbmNpcGFsLCBub3QgdGhhdCBvZiB0aGUKKyAgICAgIC8vIGRv
Y3VtZW50IGxvYWRlZCBpbnNpZGUgdXMuICBUaGlzIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVkZWQg
dG8KKyAgICAgIC8vIHByZXZlbnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbiBz
dWJmcmFtZXMhCisgICAgICBsb2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVBy
aW5jaXBhbCgpKTsKKyAgfQogCiAgIG5zQ09NUHRyPG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0g
bU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVm
ZXJyZXIpKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBsb2FkSW5mby0+U2V0
UmVmZXJyZXIocmVmZXJyZXIpOwogCiAgIC8vIEtpY2sgb2ZmIHRoZSBsb2FkLi4uCmRpZmYgLS1n
aXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oIGIvY29udGVudC9iYXNlL3NyYy9u
c0drQXRvbUxpc3QuaAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCisrKyBi
L2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKQEAgLTkzLDE3ICs5MywyMSBAQCBHS19B
VE9NKGFjdHVhdGUsICJhY3R1YXRlIikKIEdLX0FUT00oYWRkcmVzcywgImFkZHJlc3MiKQogR0tf
QVRPTShhZnRlciwgImFmdGVyIikKIEdLX0FUT00oYWZ0ZXJfZW5kLCAiYWZ0ZXJfZW5kIikKIEdL
X0FUT00oYWZ0ZXJfc3RhcnQsICJhZnRlcl9zdGFydCIpCiBHS19BVE9NKGFsaWduLCAiYWxpZ24i
KQogR0tfQVRPTShhbGluaywgImFsaW5rIikKIEdLX0FUT00oYWxsLCAiYWxsIikKIEdLX0FUT00o
YWxsb3dldmVudHMsICJhbGxvd2V2ZW50cyIpCitHS19BVE9NKGFsbG93Zm9ybXMsICJhbGxvdy1m
b3JtcyIpCiBHS19BVE9NKGFsbG93bmVnYXRpdmVhc3NlcnRpb25zLCAiYWxsb3duZWdhdGl2ZWFz
c2VydGlvbnMiKQorR0tfQVRPTShhbGxvd3NhbWVvcmlnaW4sICJhbGxvdy1zYW1lLW9yaWdpbiIp
CitHS19BVE9NKGFsbG93c2NyaXB0cywgImFsbG93LXNjcmlwdHMiKQorR0tfQVRPTShhbGxvd3Rv
cG5hdmlnYXRpb24sICJhbGxvdy10b3AtbmF2aWdhdGlvbiIpCiBHS19BVE9NKGFsbG93dW50cnVz
dGVkLCAiYWxsb3d1bnRydXN0ZWQiKQogR0tfQVRPTShhbHQsICJhbHQiKQogR0tfQVRPTShhbHRl
cm5hdGUsICJhbHRlcm5hdGUiKQogR0tfQVRPTShhbHdheXMsICJhbHdheXMiKQogR0tfQVRPTShh
bmNlc3RvciwgImFuY2VzdG9yIikKIEdLX0FUT00oYW5jZXN0b3JPclNlbGYsICJhbmNlc3Rvci1v
ci1zZWxmIikKIEdLX0FUT00oX2FuZCwgImFuZCIpCiBHS19BVE9NKGFueSwgImFueSIpCkBAIC04
NzUsMTYgKzg3OSwxNyBAQCBHS19BVE9NKHJvd3NwYW4sICJyb3dzcGFuIikKIEdLX0FUT00ocnAs
ICJycCIpCiBHS19BVE9NKHJ0LCAicnQiKQogR0tfQVRPTShydGwsICJydGwiKQogR0tfQVRPTShy
dWJ5LCAicnVieSIpCiBHS19BVE9NKHJ1bGUsICJydWxlIikKIEdLX0FUT00ocnVsZXMsICJydWxl
cyIpCiBHS19BVE9NKHMsICJzIikKIEdLX0FUT00oc2FtcCwgInNhbXAiKQorR0tfQVRPTShzYW5k
Ym94LCAic2FuZGJveCIpCiBHS19BVE9NKHNiYXR0ciwgInNiYXR0ciIpCiBHS19BVE9NKHNjYWxl
LCAic2NhbGUiKQogR0tfQVRPTShzY2FuLCAic2NhbiIpCiBHS19BVE9NKHNjaGVtZSwgInNjaGVt
ZSIpCiBHS19BVE9NKHNjb3BlLCAic2NvcGUiKQogR0tfQVRPTShzY29wZWQsICJzY29wZWQiKQog
R0tfQVRPTShzY3JlZW4sICJzY3JlZW4iKQogR0tfQVRPTShzY3JlZW5YLCAic2NyZWVuWCIpCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3Bw
IGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAotLS0gYS9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTY4MywxNyArNjgz
LDI1IEBAIG5zSFRNTEZvcm1FbGVtZW50OjpEb1N1Ym1pdE9yUmVzZXQobnNFdmUKICAgICByZXR1
cm4gRG9SZXNldCgpOwogICB9CiAKICAgaWYgKE5TX0ZPUk1fU1VCTUlUID09IGFNZXNzYWdlKSB7
CiAgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIG5vdCBpbiBhIGRvY3VtZW50LgogICAgIGlm
ICghZG9jKSB7CiAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgfQotICAgIHJldHVybiBEb1N1Ym1p
dChhRXZlbnQpOworICAgIC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdyZSBpbiBhIHNhbmRib3hlZCBm
cmFtZSBhbmQgZm9ybSBzdWJtaXQKKyAgICAvLyBpcyBkaXNhYmxlZC4KKyAgICBQUlVpbnQzMiBz
YW5kYm94RmxhZ3MgPSBkb2MtPkdldFNhbmRib3hGbGFncygpOworCisgICAgaWYgKCEoc2FuZGJv
eEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9GT1JNUykpIHsKKyAgICAgIHJldHVybiBE
b1N1Ym1pdChhRXZlbnQpOworICAgIH0KKworCXJldHVybiBOU19PSzsKICAgfQogCiAgIE1PWl9B
U1NFUlQoZmFsc2UpOwogICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0hUTUxGb3Jt
RWxlbWVudDo6RG9SZXNldCgpCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMv
bnNIVE1MSUZyYW1lRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1M
SUZyYW1lRWxlbWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElG
cmFtZUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJh
bWVFbGVtZW50LmNwcApAQCAtMzMsODEgKzMzLDMzIEBACiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92
ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAg
KiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgog
ICoKICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJtb3pp
bGxhL1V0aWwuaCIKIAogI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5j
bHVkZSAibnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIm5zSURPTURvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0lE
T01TVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zR2tBdG9tcy5oIgotI2luY2x1ZGUgIm5zSURv
Y3VtZW50LmgiCi0jaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAibnNE
T01FcnJvci5oIgotI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIKLSNpbmNsdWRlICJuc1N0eWxlQ29u
c3RzLmgiCisjaW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKLWNsYXNzIG5zSFRN
TElGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAotewot
cHVibGljOgotICBuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUlu
Zm8+IGFOb2RlSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21Q
YXJzZXIgYUZyb21QYXJzZXIgPSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7Ci0gIHZp
cnR1YWwgfm5zSFRNTElGcmFtZUVsZW1lbnQoKTsKLQotICAvLyBuc0lTdXBwb3J0cwotICBOU19E
RUNMX0lTVVBQT1JUU19JTkhFUklURUQKLQotICAvLyBuc0lET01Ob2RlCi0gIE5TX0ZPUldBUkRf
TlNJRE9NTk9ERShuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NRWxl
bWVudAotICBOU19GT1JXQVJEX05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVu
dDo6KQotCi0gIC8vIG5zSURPTUhUTUxFbGVtZW50Ci0gIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVM
RU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUhUTUxJRnJh
bWVFbGVtZW50Ci0gIE5TX0RFQ0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKLQotICAvLyBuc0lE
T01HZXRTVkdEb2N1bWVudAotICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCi0KLSAgLy8g
bnNJQ29udGVudAotICB2aXJ0dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNw
YWNlSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1
dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3Vs
dCk7Ci0gIE5TX0lNRVRIT0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20q
IGFBdHRyaWJ1dGUpIGNvbnN0OwotICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMg
R2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3Q7Ci0KLSAgdmlydHVhbCBuc3Jlc3Vs
dCBDbG9uZShuc0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7
Ci0gIHZpcnR1YWwgbnNYUENDbGFzc0luZm8qIEdldENsYXNzSW5mbygpOwotfTsKLQotCiBOU19J
TVBMX05TX05FV19IVE1MX0VMRU1FTlRfQ0hFQ0tfUEFSU0VSKElGcmFtZSkKIAotCiBuc0hUTUxJ
RnJhbWVFbGVtZW50Ojpuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9k
ZUluZm8+IGFOb2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRnJvbVBhcnNlciBhRnJvbVBhcnNlcikKICAgOiBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50
KGFOb2RlSW5mbywgYUZyb21QYXJzZXIpCiB7CiB9CiAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6On5u
c0hUTUxJRnJhbWVFbGVtZW50KCkKIHsKKyAgaWYgKG1TYW5kYm94VG9rZW5MaXN0KQorICAgIG1T
YW5kYm94VG9rZW5MaXN0LT5Ecm9wUmVmZXJlbmNlKCk7CiB9CiAKIAogTlNfSU1QTF9BRERSRUZf
SU5IRVJJVEVEKG5zSFRNTElGcmFtZUVsZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIE5TX0lNUExf
UkVMRUFTRV9JTkhFUklURUQobnNIVE1MSUZyYW1lRWxlbWVudCxuc0dlbmVyaWNFbGVtZW50KQog
CiBET01DSV9OT0RFX0RBVEEoSFRNTElGcmFtZUVsZW1lbnQsIG5zSFRNTElGcmFtZUVsZW1lbnQp
CiAKQEAgLTE1MCwxNiArMTAyLDI4IEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldENvbnRlbnRX
aW5kb3cobnMKIH0KIAogTlNfSU1FVEhPRElNUAogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U1ZH
RG9jdW1lbnQobnNJRE9NRG9jdW1lbnQgKiphUmVzdWx0KQogewogICByZXR1cm4gR2V0Q29udGVu
dERvY3VtZW50KGFSZXN1bHQpOwogfQogCitOU19JTUVUSE9ESU1QCituc0hUTUxJRnJhbWVFbGVt
ZW50OjpHZXRTYW5kYm94KG5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0KiogYVNhbmRib3gpCit7
CisgIGlmICghbVNhbmRib3hUb2tlbkxpc3QpIHsKKyAgICBtU2FuZGJveFRva2VuTGlzdCA9IG5l
dyBuc0RPTVNldHRhYmxlVG9rZW5MaXN0KHRoaXMsIG5zR2tBdG9tczo6c2FuZGJveCk7CisgIH0K
KworICBOU19BRERSRUYoKmFTYW5kYm94ID0gbVNhbmRib3hUb2tlbkxpc3QpOworCisgIHJldHVy
biBOU19PSzsKK30KKwogYm9vbAogbnNIVE1MSUZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUo
UFJJbnQzMiBhTmFtZXNwYWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCkKIHsKICAgaWYgKGFOYW1lc3BhY2VJRCA9PSBr
TmFtZVNwYWNlSURfTm9uZSkgewogICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6bWFy
Z2lud2lkdGgpIHsKQEAgLTE3OCwxNiArMTQyLDIwIEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OlBh
cnNlQXR0cmlidXRlKFBSSW4KICAgICAgIHJldHVybiBQYXJzZUZyYW1lYm9yZGVyVmFsdWUoYVZh
bHVlLCBhUmVzdWx0KTsKICAgICB9CiAgICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjpz
Y3JvbGxpbmcpIHsKICAgICAgIHJldHVybiBQYXJzZVNjcm9sbGluZ1ZhbHVlKGFWYWx1ZSwgYVJl
c3VsdCk7CiAgICAgfQogICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6YWxpZ24pIHsK
ICAgICAgIHJldHVybiBQYXJzZUFsaWduVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9Cisg
ICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjpzYW5kYm94KSB7CisgICAgICBhUmVzdWx0
LlBhcnNlQXRvbUFycmF5KGFWYWx1ZSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgIH0K
IAogICByZXR1cm4gbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoYU5h
bWVzcGFjZUlELCBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYVZhbHVlLCBhUmVzdWx0KTsKIH0KIAogc3RhdGljIHZvaWQKIE1h
cEF0dHJpYnV0ZXNJbnRvUnVsZShjb25zdCBuc01hcHBlZEF0dHJpYnV0ZXMqIGFBdHRyaWJ1dGVz
LApAQCAtMjY4LDggKzIzNiwyMyBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpJc0F0dHJpYnV0ZU1h
cHBlZChjCiAKIAogbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYwogbnNIVE1MSUZyYW1lRWxlbWVu
dDo6R2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3QKIHsKICAgcmV0dXJuICZNYXBB
dHRyaWJ1dGVzSW50b1J1bGU7CiB9CiAKK25zcmVzdWx0Cituc0hUTUxJRnJhbWVFbGVtZW50OjpB
ZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nKiBhVmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpCit7CisgIGlm
IChhTmFtZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5hbWVTcGFjZUlEID09IGtOYW1lU3Bh
Y2VJRF9Ob25lKSB7CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUsIGFuZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwKKyAgICAvLyBzZXQgaXRzIHNhbmRi
b3ggZmxhZ3MgYXBwcm9wcmlhdGVseS4KKyAgICBpZiAobUZyYW1lTG9hZGVyKQorICAgICAgbUZy
YW1lTG9hZGVyLT5HZXRFeGlzdGluZ0RvY1NoZWxsKCktPlNldFNhbmRib3hGbGFncyhuc0NvbnRl
bnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncygqYVZhbHVlKSk7CisgIH0KKyAg
cmV0dXJuIG5zR2VuZXJpY0hUTUxFbGVtZW50OjpBZnRlclNldEF0dHIoYU5hbWVTcGFjZUlELCBh
TmFtZSwgYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhTm90aWZ5KTsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmggYi9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElG
cmFtZUVsZW1lbnQuaApAQCAtMCwwICsxLDEyMCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdp
ZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLwor
LyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9H
UEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3Vi
amVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAi
TGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
YmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgor
ICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNsaWVudCBj
b2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBp
cworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKiBQb3J0aW9ucyBj
cmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4Cisg
KiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29u
dHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLAor
ICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBv
ciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2Ug
YWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQ
TCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNp
c2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQ
TCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFi
b3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIK
KyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwu
CisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2luY2x1ZGUgIm1v
emlsbGEvVXRpbC5oIgorCisjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJuc0dlbmVyaWNIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxG
cmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01Eb2N1bWVudC5oIgorI2luY2x1ZGUgIm5z
SURPTUdldFNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJuc0drQXRvbXMuaCIKKyNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgorI2luY2x1ZGUg
Im5zTWFwcGVkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIm5zRE9NRXJyb3IuaCIKKyNpbmNsdWRl
ICJuc1J1bGVEYXRhLmgiCisjaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5z
RE9NU2V0dGFibGVUb2tlbkxpc3QuaCIKKyNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgorCit1
c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKK3VzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CisK
K2NsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxl
bWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1l
RWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdE
b2N1bWVudAoreworcHVibGljOgorICBuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVm
ZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxh
Ojpkb206OkZyb21QYXJzZXIgYUZyb21QYXJzZXIgPSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BB
UlNFUik7CisgIHZpcnR1YWwgfm5zSFRNTElGcmFtZUVsZW1lbnQoKTsKKworICAvLyBuc0lTdXBw
b3J0cworICBOU19ERUNMX0lTVVBQT1JUU19JTkhFUklURUQKKworICAvLyBuc0lET01Ob2RlCisg
IE5TX0ZPUldBUkRfTlNJRE9NTk9ERShuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAg
Ly8gbnNJRE9NRWxlbWVudAorICBOU19GT1JXQVJEX05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRN
TEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhUTUxFbGVtZW50CisgIE5TX0ZPUldBUkRf
TlNJRE9NSFRNTEVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5z
SURPTUhUTUxJRnJhbWVFbGVtZW50CisgIE5TX0RFQ0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQK
KworICAvLyBuc0lET01HZXRTVkdEb2N1bWVudAorICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VN
RU5UCisKKyAgLy8gbnNJQ29udGVudAorICB2aXJ0dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJ
bnQzMiBhTmFtZXNwYWNlSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0
b20qIGFBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
QVN0cmluZyYgYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJW
YWx1ZSYgYVJlc3VsdCk7CisgIE5TX0lNRVRIT0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNv
bnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0OworICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0
cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3Q7CisKKyAgdmly
dHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJl
c3VsdCkgY29uc3Q7CisgIHZpcnR1YWwgbnNYUENDbGFzc0luZm8qIEdldENsYXNzSW5mbygpOwor
CisgIHZpcnR1YWwgbnNyZXN1bHQgQWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBu
c0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c0FTdHJpbmcqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFOb3RpZnkpOworCisgIFBSVWludDMyIEdldFNhbmRib3hGbGFncygpIHsKKyAgICBuc0F1dG9T
dHJpbmcgc2FuZGJveEF0dHI7CisKKyAgICBpZiAoR2V0QXR0cihrTmFtZVNwYWNlSURfTm9uZSwg
bnNHa0F0b21zOjpzYW5kYm94LCBzYW5kYm94QXR0cikpIHsKKyAgICAgIHJldHVybiBuc0NvbnRl
bnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhzYW5kYm94QXR0cik7CisgICAg
fQorCisgICAgLy8gTm8gc2FuZGJveCBhdHRyaWJ1dGUsIG5vIHNhbmRib3ggZmxhZ3MuCisgICAg
cmV0dXJuIDA7CisgIH0KKworICBzdGF0aWMgbnNIVE1MSUZyYW1lRWxlbWVudCogRnJvbUNvbnRl
bnQobnNJQ29udGVudCAqYUNvbnRlbnQpCisgIHsKKyAgICBpZiAoYUNvbnRlbnQtPklzSFRNTChu
c0drQXRvbXM6OmlmcmFtZSkpCisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnNIVE1MSUZyYW1l
RWxlbWVudCo+KGFDb250ZW50KTsKKyAgICByZXR1cm4gbnNudWxsOworICB9CisKK3Byb3RlY3Rl
ZDoKKyAgbnNSZWZQdHI8bnNET01TZXR0YWJsZVRva2VuTGlzdD4gIG1TYW5kYm94VG9rZW5MaXN0
OworfTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1l
bnQuY3BwIGIvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKLS0t
IGEvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKKysrIGIvY29u
dGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKQEAgLTEyNjYsMTYgKzEy
NjYsMjEgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwogewogICBh
Q29va2llLlRydW5jYXRlKCk7IC8vIGNsZWFyIGN1cnJlbnQgY29va2llIGluIGNhc2Ugc2Vydmlj
ZSBmYWlsczsKICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBjb29raWUgaXNuJ3QgYW4gZXJy
b3IgY29uZGl0aW9uLgogCiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2VzcykgewogICAgIHJldHVy
biBOU19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRib3hlZCBvcmlnaW4g
ZmxhZyBpcyBzZXQsIGFjY2VzcyB0byByZWFkIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4K
KyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikKKyAg
ICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKwogICAvLyBub3QgaGF2aW5nIGEg
Y29va2llIHNlcnZpY2UgaXNuJ3QgYW4gZXJyb3IKICAgbnNDT01QdHI8bnNJQ29va2llU2Vydmlj
ZT4gc2VydmljZSA9IGRvX0dldFNlcnZpY2UoTlNfQ09PS0lFU0VSVklDRV9DT05UUkFDVElEKTsK
ICAgaWYgKHNlcnZpY2UpIHsKICAgICAvLyBHZXQgYSBVUkkgZnJvbSB0aGUgZG9jdW1lbnQgcHJp
bmNpcGFsLiBXZSB1c2UgdGhlIG9yaWdpbmFsCiAgICAgLy8gY29kZWJhc2UgaW4gY2FzZSB0aGUg
Y29kZWJhc2Ugd2FzIGNoYW5nZWQgYnkgU2V0RG9tYWluCiAgICAgbnNDT01QdHI8bnNJVVJJPiBj
b2RlYmFzZVVSSTsKICAgICBOb2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhj
b2RlYmFzZVVSSSkpOwogCkBAIC0xMjk2LDE2ICsxMzAxLDIxIEBAIG5zSFRNTERvY3VtZW50OjpH
ZXRDb29raWUobnNBU3RyaW5nJiBhQ28KIAogTlNfSU1FVEhPRElNUAogbnNIVE1MRG9jdW1lbnQ6
OlNldENvb2tpZShjb25zdCBuc0FTdHJpbmcmIGFDb29raWUpCiB7CiAgIGlmIChtRGlzYWJsZUNv
b2tpZUFjY2VzcykgewogICAgIHJldHVybiBOU19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1
bWVudCdzIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBpcyBzZXQsIGFjY2VzcyB0byB3cml0ZSBjb29r
aWVzCisgIC8vIGlzIHByb2hpYml0ZWQuCisgIGlmIChtU2FuZGJveEZsYWdzICYgbnNJRG9jU2hl
bGw6OlNBTkRCT1hFRF9PUklHSU4pCisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9F
UlI7CisKICAgLy8gbm90IGhhdmluZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAg
IG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NP
T0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlmIChzZXJ2aWNlICYmIG1Eb2N1bWVudFVSSSkg
ewogICAgIG5zQ09NUHRyPG5zSVByb21wdD4gcHJvbXB0OwogICAgIG5zQ09NUHRyPG5zUElET01X
aW5kb3c+IHdpbmRvdyA9IEdldFdpbmRvdygpOwogICAgIGlmICh3aW5kb3cpIHsKICAgICAgIHdp
bmRvdy0+R2V0UHJvbXB0ZXIoZ2V0dGVyX0FkZFJlZnMocHJvbXB0KSk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NT
aGVsbC5jcHAKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAorKysgYi9kb2NzaGVs
bC9iYXNlL25zRG9jU2hlbGwuY3BwCkBAIC03MjcsMTYgKzcyNywxNyBAQCBuc0RvY1NoZWxsOjpu
c0RvY1NoZWxsKCk6CiAgICAgbUJ1c3lGbGFncyhCVVNZX0ZMQUdTX05PTkUpLAogICAgIG1BcHBU
eXBlKG5zSURvY1NoZWxsOjpBUFBfVFlQRV9VTktOT1dOKSwKICAgICBtTG9hZFR5cGUoMCksCiAg
ICAgbU1hcmdpbldpZHRoKC0xKSwKICAgICBtTWFyZ2luSGVpZ2h0KC0xKSwKICAgICBtSXRlbVR5
cGUodHlwZUNvbnRlbnQpLAogICAgIG1QcmV2aW91c1RyYW5zSW5kZXgoLTEpLAogICAgIG1Mb2Fk
ZWRUcmFuc0luZGV4KC0xKSwKKyAgICBtU2FuZGJveEZsYWdzKDApLAogICAgIG1DcmVhdGVkKGZh
bHNlKSwKICAgICBtQWxsb3dTdWJmcmFtZXModHJ1ZSksCiAgICAgbUFsbG93UGx1Z2lucyh0cnVl
KSwKICAgICBtQWxsb3dKYXZhc2NyaXB0KHRydWUpLAogICAgIG1BbGxvd01ldGFSZWRpcmVjdHMo
dHJ1ZSksCiAgICAgbUFsbG93SW1hZ2VzKHRydWUpLAogICAgIG1BbGxvd0ROU1ByZWZldGNoKHRy
dWUpLAogICAgIG1BbGxvd1dpbmRvd0NvbnRyb2wodHJ1ZSksCkBAIC0yODkxLDE2ICsyODkyLDc1
IEBAIG5zRG9jU2hlbGw6OkZpbmRJdGVtV2l0aE5hbWUoY29uc3QgUFJVbmkKICAgICAgICAgICAg
IGZvdW5kSXRlbSA9IG5zbnVsbDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChmb3VuZEl0ZW0p
IHsKICAgICAgICAgICAgIC8vIFdlIHJldHVybiBmb3VuZEl0ZW0gaGVyZSBldmVuIGlmIGl0J3Mg
bm90IGFuIGFjdGl2ZQogICAgICAgICAgICAgLy8gaXRlbSBzaW5jZSBhbGwgdGhlIG5hbWVzIHdl
J3ZlIGRlYWx0IHdpdGggc28gZmFyIGFyZQogICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlcyB0
aGF0IHdlIHdvbid0IGJvdGhlciBsb29raW5nIGZvciBmdXJ0aGVyLgogCisgICAgICAgICAgICAv
LyBJZiBvdXIgZG9jdW1lbnQgaXMgc2FuZGJveGVkLCB3ZSBuZWVkIHRvIGRvIHNvbWUgZXh0cmEg
Y2hlY2tzLgorICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICAgICAg
ICAgICAgaWYgKG1Db250ZW50Vmlld2VyKSB7CisgICAgICAgICAgICAgICAgbnNJRG9jdW1lbnQg
KiBkb2MgPSBtQ29udGVudFZpZXdlci0+R2V0RG9jdW1lbnQoKTsKKyAgICAgICAgICAgICAgICBz
YW5kYm94RmxhZ3MgPSBkb2MtPkdldFNhbmRib3hGbGFncygpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzKSB7CisgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gcm9vdDsKKyAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVJv
b3RUcmVlSXRlbShnZXR0ZXJfQWRkUmVmcyhyb290KSk7CisKKyAgICAgICAgICAgICAgICAvLyBJ
cyB0aGUgZm91bmQgaXRlbSBub3QgYSB0b3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBhbmQgbm90
IG91cnNlbGYgPworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHNlbGZBc0l0ZW0gPSBzdGF0aWNfY2FzdDxuc0lEb2NTaGVsbFRyZWVJdGVtICo+KHRoaXMpOwor
ICAgICAgICAgICAgICAgIGlmIChmb3VuZEl0ZW0gIT0gcm9vdCAmJiBmb3VuZEl0ZW0gIT0gc2Vs
ZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgYW4gYW5jZXN0b3Igb2Yg
dGhlIGZvdW5kSXRlbSA/CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNBbmNlc3RvciA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0
dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVt
LT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAgJiYgdG1wID09IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc0FuY2VzdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNBbmNlc3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm8sIHdlIGFyZSBub3QgYW4gYW5jZXN0b3IgYW5kIG91ciBkb2N1bWVudCBpcworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc2FuZGJveGVkLCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAg
ICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVG9w
IGxldmVsIGJyb3dzaW5nIGNvbnRleHQgLSBpcyBpdCBhbiBhbmNlc3RvciBvZiBvdXJzID8KKyAg
ICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50QXNJ
dGVtOworICAgICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVm
cyhwYXJlbnRBc0l0ZW0pKTsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50QXNJ
dGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJ
dGVtPiB0bXA7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0tPkdldFBhcmVu
dChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRt
cCAmJiB0bXAgPT0gZm91bmRJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhbiBhbmNlc3RvciwgYW5kIHdlIGFyZSBzYW5kYm94ZWQuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVW5sZXNzIGFsbG93LXRvcC1uYXZpZ2F0aW9uIGlzIHNldCwgd2Ug
Y2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2FuZGJv
eEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FUSU9OKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50QXNJdGVtID0gdG1wOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBmb3VuZEl0ZW0uc3dhcCgqX3JldHZhbCk7
CiAgICAgICAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBL
ZWVwIGxvb2tpbmcKICAgICAgICAgCiAgICAgLy8gRmlyc3Qgd2UgY2hlY2sgb3VyIG5hbWUuCkBA
IC00OTI1LDE2ICs0OTg1LDMwIEBAIG5zRG9jU2hlbGw6OlNldElzQXBwVGFiKGJvb2wgYUlzQXBw
VGFiKQogTlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6R2V0SXNBcHBUYWIoYm9vbCAqYUlzQXBw
VGFiKQogewogICAqYUlzQXBwVGFiID0gbUlzQXBwVGFiOwogICByZXR1cm4gTlNfT0s7CiB9CiAK
IE5TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6OlNldFNhbmRib3hGbGFncyhQUlVpbnQzMiBhU2Fu
ZGJveEZsYWdzKQoreworICBtU2FuZGJveEZsYWdzID0gYVNhbmRib3hGbGFnczsKKyAgcmV0dXJu
IE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpHZXRTYW5kYm94RmxhZ3Mo
UFJVaW50MzIgICphU2FuZGJveEZsYWdzKQoreworICAqYVNhbmRib3hGbGFncyA9IG1TYW5kYm94
RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6
U2V0VmlzaWJpbGl0eShib29sIGFWaXNpYmlsaXR5KQogewogICAgIGlmICghbUNvbnRlbnRWaWV3
ZXIpCiAgICAgICAgIHJldHVybiBOU19PSzsKICAgICBpZiAoYVZpc2liaWxpdHkpIHsKICAgICAg
ICAgbUNvbnRlbnRWaWV3ZXItPlNob3coKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC04MTEzLDE2
ICs4MTg3LDI5IEBAIG5zRG9jU2hlbGw6OkludGVybmFsTG9hZChuc0lVUkkgKiBhVVJJLAogICAg
ICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0YXJnZXRJdGVtOwogICAgICAgICBG
aW5kSXRlbVdpdGhOYW1lKGFXaW5kb3dUYXJnZXQsIG5zbnVsbCwgdGhpcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyh0YXJnZXRJdGVtKSk7CiAKICAgICAgICAgbnND
T01QdHI8bnNJRG9jU2hlbGw+IHRhcmdldERvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UodGFy
Z2V0SXRlbSk7CiAgICAgICAgIAogICAgICAgICBib29sIGlzTmV3V2luZG93ID0gZmFsc2U7CiAg
ICAgICAgIGlmICghdGFyZ2V0RG9jU2hlbGwpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBkb2Nz
aGVsbCdzIGRvY3VtZW50IGlzIHNhbmRib3hlZCBhbmQgd2FzIHRyeWluZyB0bworICAgICAgICAg
ICAgLy8gbmF2aWdhdGUvbG9hZCBhIGZyYW1lIGl0IHdhc24ndCBhbGxvd2VkIHRvIGFjY2Vzcywg
dGhlCisgICAgICAgICAgICAvLyBGaW5kSXRlbVdpdGhOYW1lIGFib3ZlIHdpbGwgaGF2ZSByZXR1
cm5lZCBudWxsIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAvLyBpdGVtIC0gd2UgZG9uJ3Qg
d2FudCB0byBhY3R1YWxseSBvcGVuIGEgbmV3IHdpbmRvdyBpbiBjYXNlCisgICAgICAgICAgICAv
LyB0aG91Z2guIENoZWNrIGlmIHdlIGFyZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYg
c28uCisgICAgICAgICAgICBOU19FTlNVUkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1Jf
RkFJTFVSRSk7CisgICAgICAgICAgICBuc0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXIt
PkdldERvY3VtZW50KCk7CisgICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOwor
ICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5HZXRTYW5kYm94RmxhZ3MoKTsKKyAgICAg
ICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJ
T04pIHsKKyAgICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gd2luID0KICAgICAgICAg
ICAgICAgICBkb19HZXRJbnRlcmZhY2UoR2V0QXNTdXBwb3J0cyh0aGlzKSk7CiAgICAgICAgICAg
ICBOU19FTlNVUkVfVFJVRSh3aW4sIE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpOwogCiAgICAgICAg
ICAgICBuc0RlcGVuZGVudFN0cmluZyBuYW1lKGFXaW5kb3dUYXJnZXQpOwogICAgICAgICAgICAg
bnNDT01QdHI8bnNJRE9NV2luZG93PiBuZXdXaW47CiAgICAgICAgICAgICBydiA9IHdpbi0+T3Bl
bihFbXB0eVN0cmluZygpLCAvLyBVUkwgdG8gbG9hZAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSwgICAgICAgICAgLy8gd2luZG93IG5hbWUKQEAgLTg4OTUsMTcgKzg5ODIsMjQgQEAg
bnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIC8vIFNldCB0aGUg
cmVmZXJyZXIgZXhwbGljaXRseQogICAgICAgICBpZiAoYVJlZmVycmVyVVJJICYmIGFTZW5kUmVm
ZXJyZXIpIHsKICAgICAgICAgICAgIC8vIFJlZmVycmVyIGlzIGN1cnJlbmx5IG9ubHkgc2V0IGZv
ciBsaW5rIGNsaWNrcyBoZXJlLgogICAgICAgICAgICAgaHR0cENoYW5uZWwtPlNldFJlZmVycmVy
KGFSZWZlcnJlclVSSSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBuc0NPTVB0cjxuc0lQcmlu
Y2lwYWw+IG93bmVyUHJpbmNpcGFsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFPd25lcikpOwotICAgIG5z
Q29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwg
YVVSSSwgdHJ1ZSk7CisKKyAgICAvLyBJZiB0aGUgY29udGVudCBoYXMgdGhlIHNhbmRib3hlZCBv
cmlnaW4gZmxhZyBzZXQsIGZvcmNlIHRoZSBwYXNzZWQgaW4KKyAgICAvLyBvd25lciAod2hpY2gg
c2hvdWxkIGJlIGEgbnVsbCBwcmluY2lwYWwpIHRvIGJlIHNldCBvbiB0aGUgY2hhbm5lbC4gSWYK
KyAgICAvLyB0aGUgZmxhZyBpc24ndCBzZXQsIGFsbG93IHRoZSBjb250ZW50IHRvIGFzc3N1bWUg
aXRzICJuYXR1cmFsIGRvbWFpbiIgYXMKKyAgICAvLyBpdCBub3JtYWxseSB3b3VsZC4KKyAgICBu
c0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWws
IGFVUkksIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVNh
bmRib3hGbGFncyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
RG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4pKTsKIAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENo
YW5uZWw+IHNjcmlwdENoYW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShjaGFubmVsKTsKICAgICBp
ZiAoc2NyaXB0Q2hhbm5lbCkgewogICAgICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBv
dXIgY29udGV4dCBpZiB0aGUgcHJpbmNpcGFscyBtYXRjaAogICAgICAgICBzY3JpcHRDaGFubmVs
LT4KICAgICAgICAgICAgIFNldEV4ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVD
VVRFX05PUk1BTCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hl
bGwuaCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNE
b2NTaGVsbC5oCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03ODEsMTYgKzc4
MSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBp
cyBub3QgZXhwZWN0ZWQgdG8gY2hhbmdlLgogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAg
IG1JdGVtVHlwZTsKIAogICAgIC8vIEluZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwg
aW5kaWNhdGluZyB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBh
dCB0aGUgdGltZSB0aGF0IHRoaXMgRG9jU2hlbGwgYmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMy
ICAgICAgICAgICAgICAgICAgICBtUHJldmlvdXNUcmFuc0luZGV4OwogICAgIFBSSW50MzIgICAg
ICAgICAgICAgICAgICAgIG1Mb2FkZWRUcmFuc0luZGV4OwogCisgICAgUFJVaW50MzIgICAgICAg
ICAgICAgICAgICAgbVNhbmRib3hGbGFnczsKKwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAg
ICAgIG1DcmVhdGVkOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1N1YmZy
YW1lczsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dQbHVnaW5zOwogICAg
IGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0phdmFzY3JpcHQ7CiAgICAgYm9vbCAg
ICAgICAgICAgICAgICAgICAgICAgbUFsbG93TWV0YVJlZGlyZWN0czsKICAgICBib29sICAgICAg
ICAgICAgICAgICAgICAgICBtQWxsb3dJbWFnZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAg
ICAgICAgbUFsbG93RE5TUHJlZmV0Y2g7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAg
bUFsbG93V2luZG93Q29udHJvbDsKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hl
bGwuaWRsIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFz
ZS9uc0lEb2NTaGVsbC5pZGwKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAg
LTY3LDE3ICs2NywxNyBAQCBpbnRlcmZhY2UgbnNJUmVxdWVzdDsKIGludGVyZmFjZSBuc0lTSEVu
dHJ5OwogaW50ZXJmYWNlIG5zSUxheW91dEhpc3RvcnlTdGF0ZTsKIGludGVyZmFjZSBuc0lTZWN1
cmVCcm93c2VyVUk7CiBpbnRlcmZhY2UgbnNJRE9NU3RvcmFnZTsKIGludGVyZmFjZSBuc0lQcmlu
Y2lwYWw7CiBpbnRlcmZhY2UgbnNJV2ViQnJvd3NlclByaW50OwogaW50ZXJmYWNlIG5zSVZhcmlh
bnQ7CiAKLVtzY3JpcHRhYmxlLCB1dWlkKDA2MTVkMWE2LTMxM2YtMTFlMS1hMDQzLTZjNjI2ZDY5
Njc1YyldCitbc2NyaXB0YWJsZSwgdXVpZCg5YjI4MzMzNy0wOTdkLTRmYTgtYTJkYS05MTYzMThl
YWY4MjgpXQogaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKIHsKICAgLyoqCiAg
ICAqIExvYWRzIGEgZ2l2ZW4gVVJJLiAgVGhpcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gbG9hZGlu
ZyB0aGUgcmVxdWVzdGVkIFVSSQogICAgKiBpbiB0aGUgb2JqZWN0IGltcGxlbWVudGluZwl0aGlz
IGludGVyZmFjZS4gIElmIGl0IGNhbid0IGJlIGxvYWRlZCBoZXJlCiAgICAqIGhvd2V2ZXIsIHRo
ZSBVUkwgZGlzcGF0Y2hlciB3aWxsIGdvIHRocm91Z2ggaXRzIG5vcm1hbCBwcm9jZXNzIG9mIGNv
bnRlbnQKICAgICogbG9hZGluZy4KICAgICoKQEAgLTU5Nyw5ICs1OTcsNjcgQEAgaW50ZXJmYWNl
IG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKICAgICovCiAgIGF0dHJpYnV0ZSBuc0lBdG9tIHBh
cmVudENoYXJzZXQ7CiAKICAgLyoKICAgICogSW4gYSBjaGlsZCBkb2NzaGVsbCwgdGhpcyBpcyB0
aGUgc291cmNlIG9mIHBhcmVudENoYXJzZXQKICAgICogQHNlZSBuc0lQYXJzZXIKICAgICovCiAg
IGF0dHJpYnV0ZSBQUkludDMyIHBhcmVudENoYXJzZXRTb3VyY2U7CisKKyAgLyoqCisgICAqIFRo
ZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2NzaGVsbC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlIG9mIHRoZSBhc3NvY2lhdGVkIElGUkFNRSBv
ciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYKKyAgICogZXhpc3RlbnQuIFNlZSB0aGUgSFRN
TDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBUaGVzZSBmbGFncyBvbiB0aGUgZG9jc2hl
bGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1
dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuIFRoZXkgYXJlIG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcg
bmV3CisgICAqIGNvbnRlbnQsIHNhbmRib3ggZmxhZ3MgYXJlIGFsc28gaW1tdXRhYmx5IHNldCBv
biB0aGUgZG9jdW1lbnQgd2hlbiBpdCBpcworICAgKiBsb2FkZWQuCisgICAqIFRoZSBzYW5kYm94
IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94IGZsYWdzIG9uIGl0cwor
ICAgKiBkb2NzaGVsbCBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVudCwgaWYgYW55LgorICAgKi8K
KyAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdzOworCisgIC8qKgorICAgKiBU
aGlzIGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgYnJvd3NpbmcgY29udGV4
dHMgb3RoZXIgdGhhbgorICAgKiB0aGUgc2FuZGJveGVkIGJyb3dzaW5nIGNvbnRleHQgaXRzZWxm
IChvciBicm93c2luZyBjb250ZXh0cyBmdXJ0aGVyCisgICAqIG5lc3RlZCBpbnNpZGUgaXQpLCBh
bmQgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0LgorICAgKi8KKyAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBTQU5EQk9YRURfTkFWSUdBVElPTiAgPSAweDE7CisKKyAgLyoqCisgICAqIFRoaXMg
ZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyB0aGVpciB0b3AtbGV2ZWwgYnJv
d3NpbmcKKyAgICogY29udGV4dC4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJP
WEVEX1RPUExFVkVMX05BVklHQVRJT04gPSAweDI7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBw
cmV2ZW50cyBjb250ZW50IGZyb20gaW5zdGFudGlhdGluZyBwbHVnaW5zLCB3aGV0aGVyIHVzaW5n
IHRoZQorICAgKiBlbWJlZCBlbGVtZW50LCB0aGUgb2JqZWN0IGVsZW1lbnQsIHRoZSBhcHBsZXQg
ZWxlbWVudCwgb3IgdGhyb3VnaAorICAgKiBuYXZpZ2F0aW9uIG9mIGEgbmVzdGVkIGJyb3dzaW5n
IGNvbnRleHQsIHVubGVzcyB0aG9zZSBwbHVnaW5zIGNhbiBiZQorICAgKiBzZWN1cmVkLgorICAg
Ki8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfUExVR0lOUyA9IDB4NDsKKworICAv
KioKKyAgICogVGhpcyBmbGFnIGZvcmNlcyBjb250ZW50IGludG8gYSB1bmlxdWUgb3JpZ2luLCB0
aHVzIHByZXZlbnRpbmcgaXQgZnJvbQorICAgKiBhY2Nlc3Npbmcgb3RoZXIgY29udGVudCBmcm9t
IHRoZSBzYW1lIG9yaWdpbi4KKyAgICogVGhpcyBmbGFnIGFsc28gcHJldmVudHMgc2NyaXB0IGZy
b20gcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gdGhlCisgICAqIGRvY3VtZW50LmNvb2tpZSBJ
REwgYXR0cmlidXRlLCBhbmQgYmxvY2tzIGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAqLwor
ICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9PUklHSU4gPSAweDg7CisKKyAgLyoqCisg
ICAqIFRoaXMgZmxhZyBibG9ja3MgZm9ybSBzdWJtaXNzaW9uLgorICAgKi8KKyAgY29uc3QgdW5z
aWduZWQgbG9uZyBTQU5EQk9YRURfRk9STVMgPSAweDEwOworCisgIC8qKgorICAgKiBUaGlzIGZs
YWcgYmxvY2tzIHNjcmlwdCBleGVjdXRpb24uCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25n
IFNBTkRCT1hFRF9TQ1JJUFRTID0gMHgyMDsKKworICAvKioKKyAgICogVGhpcyBmbGFnIGJsb2Nr
cyBmZWF0dXJlcyB0aGF0IHRyaWdnZXIgYXV0b21hdGljYWxseSwgc3VjaCBhcworICAgKiBhdXRv
bWF0aWNhbGx5IHBsYXlpbmcgYSB2aWRlbyBvciBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIGEgZm9y
bSBjb250cm9sLgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfQVVUT01B
VElDX0ZFQVRVUkVTID0gMHg0MDsKIH07CmRpZmYgLS1naXQgYS9kb20vYmFzZS9uc0dsb2JhbFdp
bmRvdy5jcHAgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKLS0tIGEvZG9tL2Jhc2UvbnNH
bG9iYWxXaW5kb3cuY3BwCisrKyBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcApAQCAtODIx
OSwxNiArODIxOSwyMyBAQCBuc0dsb2JhbFdpbmRvdzo6R2V0U2Vzc2lvblN0b3JhZ2UobnNJRE9N
CiAgIH0KIAogICBpZiAoIW1TZXNzaW9uU3RvcmFnZSkgewogICAgICphU2Vzc2lvblN0b3JhZ2Ug
PSBuc251bGw7CiAKICAgICBuc1N0cmluZyBkb2N1bWVudFVSSTsKICAgICBpZiAobURvY3VtZW50
KSB7CiAgICAgICBtRG9jdW1lbnQtPkdldERvY3VtZW50VVJJKGRvY3VtZW50VVJJKTsKKworICAg
ICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAor
ICAgICAgLy8gZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIHNlc3Npb25TdG9yYWdlLgorICAgICAgbnND
T01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG1Eb2N1bWVudCk7Cisg
ICAgICBpZiAoZG9jICYmIChkb2MtPkdldFNhbmRib3hGbGFncygpICYgbnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9PUklHSU4pKSB7CisgICAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlf
RVJSOworICAgICAgfQogICAgIH0KIAogICAgIG5zcmVzdWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNl
c3Npb25TdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFVSSSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdldHRlcl9BZGRSZWZzKG1TZXNzaW9uU3RvcmFnZSkpOwogICAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CiAKQEAgLTgzMDYsMTYgKzgzMTMsMjQgQEAgbnNHbG9iYWxXaW5kb3c6Okdl
dExvY2FsU3RvcmFnZShuc0lET01TdAogCiAgICAgbnNDT01QdHI8bnNJRE9NU3RvcmFnZU1hbmFn
ZXI+IHN0b3JhZ2VNYW5hZ2VyID0KICAgICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9k
b20vc3RvcmFnZW1hbmFnZXI7MSIsICZydik7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2
KTsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAg
ICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOworCisgICAgICAvLyBJ
ZiB0aGUgZG9jdW1lbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgICAv
LyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgICAgLy8gUkVWSUVXOiBp
cyBpdCBrb3NoZXIgdG8gZG8gYSBjYXN0IGhlcmUgaW5zdGVhZCBvZiBhIFFJPworICAgICAgbnND
T01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG1Eb2N1bWVudCk7Cisg
ICAgICBpZiAoZG9jICYmIChkb2MtPkdldFNhbmRib3hGbGFncygpICYgbnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9PUklHSU4pKSB7CisgICAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlf
RVJSOworICAgICAgfQogICAgIH0KIAogICAgIHJ2ID0gc3RvcmFnZU1hbmFnZXItPkdldExvY2Fs
U3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50VVJJLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhtTG9j
YWxTdG9yYWdlKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgfQogCmRpZmYg
LS1naXQgYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbCBi
L2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCi0tLSBhL2Rv
bS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCisrKyBiL2RvbS9p
bnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCkBAIC0zMyw0NCArMzMs
NDYgQEAKICAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCBy
ZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCiAgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1
aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQogICogdGhl
IHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSB1bmRlcgogICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQ
TCBvciB0aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwog
CiAjaW5jbHVkZSAibnNJRE9NSFRNTEVsZW1lbnQuaWRsIgorI2luY2x1ZGUgIm5zSURPTURPTVNl
dHRhYmxlVG9rZW5MaXN0LmlkbCIKIAogLyoqCiAgKiBUaGUgbnNJRE9NSFRNTElGcmFtZUVsZW1l
bnQgaW50ZXJmYWNlIGlzIHRoZSBpbnRlcmZhY2UgdG8gYSBbWF1IVE1MCiAgKiBpZnJhbWUgZWxl
bWVudC4KICAqCiAgKiBUaGlzIGludGVyZmFjZSBpcyB0cnlpbmcgdG8gZm9sbG93IHRoZSBET00g
TGV2ZWwgMiBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00t
TGV2ZWwtMi1IVE1MLwogICoKICAqIHdpdGggY2hhbmdlcyBmcm9tIHRoZSB3b3JrLWluLXByb2dy
ZXNzIFdIQVRXRyBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLwogICovCiAKLVtzY3JpcHRhYmxlLCB1dWlkKGQ0
ZTg3MGJkLTQ1MmMtNDg2MC1iOTNjLWY0ZWUwMGJhMzNmNildCitbc2NyaXB0YWJsZSwgdXVpZCg1
MmY2MjQ0Yi1iMWY1LTRmNGMtOGZmMy03ZTE0NjMxNmY0MTEpXQogaW50ZXJmYWNlIG5zSURPTUhU
TUxJRnJhbWVFbGVtZW50IDogbnNJRE9NSFRNTEVsZW1lbnQKIHsKICAgICAgICAgICAgYXR0cmli
dXRlIERPTVN0cmluZyAgICAgICAgYWxpZ247CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgICAgICAgIGZyYW1lQm9yZGVyOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAg
ICAgICBoZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGxvbmdE
ZXNjOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5IZWlnaHQ7
CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbldpZHRoOwogICAg
ICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBuYW1lOwogICAgICAgICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nICAgICAgICBzY3JvbGxpbmc7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmcgICAgICAgIHNyYzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAg
ICAgd2lkdGg7CiAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBuc0lET01Eb2N1bWVudCAgIGNvbnRlbnREb2N1bWVudDsKICAgcmVhZG9ubHkgYXR0
cmlidXRlIG5zSURPTVdpbmRvdyAgICAgY29udGVudFdpbmRvdzsKIAorICByZWFkb25seSBhdHRy
aWJ1dGUgbnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3Qgc2FuZGJveDsKIAogICAvLyBNb3ppbGxh
IGV4dGVuc2lvbnMKICAgLy8gaWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1vekFsbG93RnVs
bFNjcmVlbiBhdHRyaWJ1dGUgdG8gYmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3JlIHRvIGFsbG93
IGNvbnRlbnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxsLXNjcmVlbgog
ICAvLyBtb2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBocD90aXRsZT1H
ZWNrbzpGdWxsU2NyZWVuQVBJCiAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAg
IG1vekFsbG93RnVsbFNjcmVlbjsKIH07CmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50
cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwIGIvZW1iZWRkaW5nL2NvbXBv
bmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcAotLS0gYS9lbWJlZGRp
bmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCisrKyBi
L2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5j
cHAKQEAgLTYwMywxNiArNjAzLDMzIEBAIG5zV2luZG93V2F0Y2hlcjo6T3BlbldpbmRvd0pTSW50
ZXJuYWwobnMKICAgfQogCiAgIGlmICghbmV3RG9jU2hlbGxJdGVtKSB7CiAgICAgLy8gV2UncmUg
Z29pbmcgdG8gZWl0aGVyIG9wZW4gdXAgYSBuZXcgd2luZG93IG91cnNlbHZlcyBvciBhc2sgYQog
ICAgIC8vIG5zSVdpbmRvd1Byb3ZpZGVyIGZvciBvbmUuICBJbiBlaXRoZXIgY2FzZSwgd2UnbGwg
d2FudCB0byBzZXQgdGhlIHJpZ2h0CiAgICAgLy8gbmFtZSBvbiBpdC4KICAgICB3aW5kb3dOZWVk
c05hbWUgPSB0cnVlOwogCisgICAgLy8gSWYgdGhlIHBhcmVudCB0cnlpbmcgdG8gb3BlbiBhIG5l
dyB3aW5kb3cgaXMgc2FuZGJveGVkLAorICAgIC8vIHRoaXMgaXMgbm90IGFsbG93ZWQgYW5kIHdl
IGZhaWwgaGVyZS4KKyAgICBpZiAoYVBhcmVudCkgeworICAgICAgbnNDT01QdHI8bnNJRE9NRG9j
dW1lbnQ+IGRvbWRvYzsKKyAgICAgIGFQYXJlbnQtPkdldERvY3VtZW50KGdldHRlcl9BZGRSZWZz
KGRvbWRvYykpOworICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50
ZXJmYWNlKGRvbWRvYyk7CisKKyAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgUFJVaW50MzIgc2Fu
ZGJveEZsYWdzID0gMDsKKyAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5HZXRTYW5kYm94Rmxh
Z3MoKTsKKworICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hF
RF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICB9CisKICAgICAvLyBOb3cgY2hlY2sgd2hldGhlciBpdCdzIG9r
IHRvIGFzayBhIHdpbmRvdyBwcm92aWRlciBmb3IgYSB3aW5kb3cuICBEb24ndAogICAgIC8vIGRv
IGl0IGlmIHdlJ3JlIG9wZW5pbmcgYSBkaWFsb2cgb3IgaWYgb3VyIHBhcmVudCBpcyBhIGNocm9t
ZSB3aW5kb3cgb3IKICAgICAvLyBpZiB3ZSdyZSBvcGVuaW5nIHNvbWV0aGluZyB0aGF0IGhhcyBt
b2RhbCwgZGlhbG9nLCBvciBjaHJvbWUgZmxhZ3Mgc2V0LgogICAgIG5zQ09NUHRyPG5zSURPTUNo
cm9tZVdpbmRvdz4gY2hyb21lV2luID0gZG9fUXVlcnlJbnRlcmZhY2UoYVBhcmVudCk7CiAgICAg
aWYgKCFhRGlhbG9nICYmICFjaHJvbWVXaW4gJiYKICAgICAgICAgIShjaHJvbWVGbGFncyAmIChu
c0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfTU9EQUwgICAgICAgICB8CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX09QRU5BU19ESUFMT0cgfCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfT1BF
TkFTX0NIUk9NRSkpKSB7Cg==
</data>
<flag name="feedback"
          id="494158"
          type_id="607"
          status="+"
          setter="bzbarsky"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>596206</attachid>
            <date>2012-02-10 15:58:21 -0800</date>
            <delta_ts>2012-02-10 18:40:31 -0800</delta_ts>
            <desc>WIP - iframe sandbox v1</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>45409</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMmQ0MDllZDU2OWUwZmJmMGM1MmNkM2YzNWRj
M2UwNjA4OWYwMjVlMQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtMTg4MywzNSArMTg4MywzNyBAQCBwdWJsaWM6CiAgICAqIGZy
b20gdGhlIGRvY3VtZW50IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQg
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsK
IAogICAvKioKICAgICogU2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRo
ZSBnaXZlbiBjaGFubmVsLCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBv
ZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JB
Ym91dEJsYW5rIGlzIHRydWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHBy
aW5jaXBhbCBzZXQgdXAgb24gaXQuCi0gICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LiBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQg
b24gdGhlIGNoYW5uZWwsIGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAor
ICAgKiBmcm9tIHRoZSBjaGFubmVsLgogICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIg
dGhlIHByaW5jaXBhbCB3YXMgc2V0IHVwIGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5l
bC4KICAgICovCiAgIHN0YXRpYyBib29sIFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCog
YUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNo
YW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkq
IGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJv
dXRCbGFuayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9y
QWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VP
d25lciA9IGZhbHNlKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcm
IGFCaW5hcnlEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJh
c2U2NFN0cmluZyk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBh
QXNjaWlTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURh
dGEpOwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFz
c2VkIGluIHBhcmFtZXRlciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0
eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAg
KiBmdW5jdGlvbmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZv
cm0gb3duZXIuCiAgICAqIE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29t
cGxldGUgbWFrZXMgc2Vuc2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAg
ICogQHBhcmFtIGFJbnB1dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0
IGNhbid0IGJlIG51bGwuCiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBo
YXMgYXV0b2NvbXBsZXRlIGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21w
bGV0ZUVuYWJsZWQobnNJRE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIApAQCAtMTkyMiwx
NiArMTkyNCwyNiBAQCBwdWJsaWM6CiAgICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFVSSXMu
ICBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gVVJJJ3MgcHJlcGF0aCBpcwogICAgKiBpbiB0aGUg
bGlzdCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICoKICAgICogQ29tcGFyaXNvbnMgYXJlIGNh
c2UtaW5zZW5zaXRpdmUsIGFuZCB3aGl0ZXNwYWNlIGJldHdlZW4gZWxlbWVudHMgb2YgdGhlCiAg
ICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGlzIGlnbm9yZWQuCiAgICAqLwogICBzdGF0aWMgYm9v
bCBVUklJc0Nocm9tZU9ySW5QcmVmKG5zSVVSSSAqYVVSSSwgY29uc3QgY2hhciAqYVByZWYpOwog
CisgIC8qKgorICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0
cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICAgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBjb252
ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxseS4KKyAgICoKKyAgICog
QHBhcmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAg
ICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZsYWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIg
UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhjb25zdCBuc0FTdHJpbmcmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZGJveEF0dHIpOworCiBw
cml2YXRlOgogICBzdGF0aWMgYm9vbCBJbml0aWFsaXplRXZlbnRUYWJsZSgpOwogCiAgIHN0YXRp
YyBuc3Jlc3VsdCBFbnN1cmVTdHJpbmdCdW5kbGUoUHJvcGVydGllc0ZpbGUgYUZpbGUpOwogCiAg
IHN0YXRpYyBuc0lET01TY3JpcHRPYmplY3RGYWN0b3J5ICpHZXRET01TY3JpcHRPYmplY3RGYWN0
b3J5KCk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEhvbGRTY3JpcHRPYmplY3QoUFJVaW50MzIgYUxh
bmdJRCwgdm9pZCogYU9iamVjdCk7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25z
SURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKLS0tIGEvY29u
dGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNJRG9jdW1lbnQuaApAQCAtMTE5LDE4ICsxMTksMTggQEAgY2xhc3MgTG9hZGVyOwogCiBuYW1l
c3BhY2UgZG9tIHsKIGNsYXNzIExpbms7CiBjbGFzcyBFbGVtZW50OwogfSAvLyBuYW1lc3BhY2Ug
ZG9tCiB9IC8vIG5hbWVzcGFjZSBtb3ppbGxhCiAKICNkZWZpbmUgTlNfSURPQ1VNRU5UX0lJRCBc
Ci17IDB4MjgzZWMyN2QsIDB4NWIyMywgMHg0OWIyLCBcDQotICB7IDB4OTQsIDB4ZDksIDB4OSwg
MHhiNSwgMHhkYiwgMHg0NSwgMHgzMCwgMHg3MyB9IH0NCit7IDB4NTdmZTQ0YWUsIDB4NjY1Niwg
MHg0NGI4LCBcCisgIHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhhNywgMHg0MywgMHgyOCwgMHhiZSwg
MHg4NiB9IH0KIAogCiAvLyBGbGFnIGZvciBBZGRTdHlsZVNoZWV0KCkuCiAjZGVmaW5lIE5TX1NU
WUxFU0hFRVRfRlJPTV9DQVRBTE9HICAgICAgICAgICAgICAgICgxIDw8IDApCiAKIC8vIEVudW0g
Zm9yIHJlcXVlc3RpbmcgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZG9jdW1lbnQgd2hlbiBjcmVhdGlu
ZyBhIGRvYwogZW51bSBEb2N1bWVudEZsYXZvciB7CiAgIERvY3VtZW50Rmxhdm9yTGVnYWN5R3Vl
c3MsIC8vIGNvbXBhdCB3aXRoIG9sZCBjb2RlIHVudGlsIG1hZGUgSFRNTDUtY29tcGxpYW50CkBA
IC00NTYsMTcgKzQ1NiwyNiBAQCBwdWJsaWM6CiAgICAqIGNhbGxlcnMgYXJlIGV4cGVjdGVkIHRv
IHRha2UgYWN0aW9uIGFzIG5lZWRlZCBpZiB0aGV5IHdhbnQgdGhpcwogICAgKiBjaGFuZ2UgdG8g
YWN0dWFsbHkgY2hhbmdlIGFueXRoaW5nIGltbWVkaWF0ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0
aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9wdGlvbnMoUFJVaW50MzIgYUJpZGlPcHRpb25z
KQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJpZGlPcHRpb25zOwogICB9Ci0gIAorCisgIC8q
KgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQuCisgICAqIEBz
ZWUgbnNJRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWlu
dDMyIFNhbmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsK
KyAgfQorCiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxz
byBnZXQgc2V0IGZyb20gb3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncyku
CiAgICAqLwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmll
bGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRl
ckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7
CiAKICAgLyoqCkBAIC0xNzk3LDE2ICsxODA2LDIxIEBAIHByb3RlY3RlZDoKICAgLy8gSWYgbUlz
U3RhdGljRG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBv
cmlnaW5hbAogICAvLyBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5h
bERvY3VtZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQuICBX
aGF0IHRoaXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5o
CiAgIFBSVWludDMyIG1CaWRpT3B0aW9uczsKIAorICAvLyBUaGUgc2FuZGJveCBmbGFncyBvbiB0
aGUgZG9jdW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJp
YnV0ZSBvZiB0aGUKKyAgLy8gYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNv
bnRlbnQsIGlmIGV4aXN0ZW50LiBUaGVzZSBhcmUgc2V0IGF0IGxvYWQgdGltZSBhbmQKKyAgLy8g
YXJlIGltbXV0YWJsZSAtIHNlZSBuc0lEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJsZSBmbGFn
cy4KKyAgUFJVaW50MzIgbVNhbmRib3hGbGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5n
dWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAK
ICAgLy8gVGhlIGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0
cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRl
bnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9j
b250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3Jj
L25zQ29udGVudFV0aWxzLmNwcApAQCAtNzM5LDE2ICs3MzksNjIgQEAgbnNDb250ZW50VXRpbHM6
OkdldFBhcnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1Bh
cnNlclNlcnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikp
IHsKICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVy
biBzUGFyc2VyU2VydmljZTsKIH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJz
ZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVj
dGl2ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5
LgorICoKKyAqIEBwYXJhbSBhQXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUKKyAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLwor
UFJVaW50MzIKK25zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNv
bnN0IG5zQVN0cmluZyYgc2FuZGJveEF0dHJWYWx1ZSkKK3sKKyAgLy8gSWYgdGhlcmUncyBhIHNh
bmRib3ggYXR0cmlidXRlIGF0IGFsbCAoYW5kIHRoZXJlIGlzIGlmIHRoaXMgaXMgYmVpbmcKKyAg
Ly8gY2FsbGVkKSwgc3RhcnQgb2ZmIGJ5IHNldHRpbmcgYWxsIHRoZSByZXN0cmljdGlvbiBmbGFn
cy4KKyAgUFJVaW50MzIgb3V0ID0gbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9OQVZJR0FUSU9OIHwK
KyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gfAorICAgIG5z
SURvY1NoZWxsOjpTQU5EQk9YRURfUExVR0lOUyB8IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJ
R0lOIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TIHwgbnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9TQ1JJUFRTIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0FVVE9NQVRJQ19G
RUFUVVJFUzsKKworICBpZiAoIXNhbmRib3hBdHRyVmFsdWUuSXNFbXB0eSgpKSB7CisgICAgLy8g
VGhlIHNlcGFyYXRvciBvcHRpb25hbCBmbGFnIGlzIHVzZWQgYmVjYXVzZSB0aGUgSFRNTDUgc3Bl
YyBzYXlzIGFueQorICAgIC8vIHdoaXRlc3BhY2UgaXMgb2sgYXMgYSBzZXBhcmF0b3IsIHdoaWNo
IGlzIHdoYXQgdGhpcyBkb2VzLgorICAgIEhUTUxTcGxpdE9uU3BhY2VzVG9rZW5pemVyIHRva2Vu
aXplcihzYW5kYm94QXR0clZhbHVlLCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6
ZXJUZW1wbGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9P
UFRJT05BTCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAg
ICAgbnNEZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisK
KyAgICAgIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRzIikp
IHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFM7CisgICAg
ICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNhbWUtb3Jp
Z2luIikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTjsK
KyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9y
bXMiKSB7CisgICAgICAgIG91dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9GT1JNUzsKKyAg
ICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0
cyIpKSB7CisgICAgICAgIC8vIGFsbG93LXNjcmlwdHMgcmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9T
Q1JJUFRTIGFuZAorICAgICAgICAvLyBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTLgorICAg
ICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfU0NSSVBUUzsKKyAgICAgICAgb3V0
ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUzsKKyAgICAgIH0g
ZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctdG9wLW5hdmlnYXRp
b24iKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfVE9QTEVWRUxf
TkFWSUdBVElPTjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb3V0OworfQogCiAj
aWZkZWYgTU9aX1hURgogbnNJWFRGU2VydmljZSoKIG5zQ29udGVudFV0aWxzOjpHZXRYVEZTZXJ2
aWNlKCkKIHsKICAgaWYgKCFzWFRGU2VydmljZSkgewogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdl
dFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZzWFRGU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxF
RChydikpIHsKQEAgLTYwMzEsMTcgKzYwNzcsMTggQEAgbnNDb250ZW50VXRpbHM6OlVSSUluaGVy
aXRzU2VjdXJpdHlDb250ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsK
IH0KIAogLy8gc3RhdGljCiBib29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIo
bnNJUHJpbmNpcGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFGb3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQgdGhlIG93bmVy
IG9mIHRoZSBjaGFubmVsLCBidXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4ndAogICAvLyBw
cm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBYWFg6IEl0IHNl
ZW1zIHdyb25nIHRoYXQgdGhlIG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9uZSBpcwogICAv
LyAgICAgIHN1cHBsaWVkKSB1bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRhdGEgb3Ig
YWJvdXQ6YmxhbmsuCiAgIC8vIFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQsIGNoZWNrIGFs
bCBjYWxsZXJzIGZvciB3aGF0IG93bmVycwpAQCAtNjA0OSwyMyArNjA5NiwyNyBAQCBuc0NvbnRl
bnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29tbWVudHMgaW4g
bnNEb2NTaGVsbDo6TG9hZFVSSSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8gICAgICBpbmhl
cml0aW5nIHRoZSBvd25lciBpZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxkIGJlCiAg
IC8vICAgICAgdmVyeSB3cm9uZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGluZyBidXQgY2hh
bm5lbHMgdGhhdAogICAvLyAgICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNv
bnRleHQhCiAgIC8vCiAgIC8vICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93
bmVyIHdoZW4gdGhleSBhcmUgY3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5nIGEgTlVMTCBv
d25lciB3b3VsZCBiZSBiYWQhKQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0
aGUgb3duZXIgd2lsbCBiZSBzZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0CisgIC8vIGNhbiBw
cm92aWRlIGl0cyBvd24gc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSFRN
TDUgSUZSQU1FCisgIC8vIHNhbmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNo
YW5uZWwgKGFuZCBpdHMgZG9jdW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwg
cHJpbmNpcGFsLgogICBib29sIGluaGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1Nl
Y3VyaXR5Q29udGV4dCB0byByZXR1cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6Ymxhbmsg
VVJJLCBzbyBkb24ndCBjYWxsIE5TX0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4K
ICAgLy8gVGhpcyBjb25kaXRpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxs
OjpJbnRlcm5hbExvYWQgd2hlcmUKICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0
IHdpbGwgdXNlIHRoZSBvd25lci4KLSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3Vy
aXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVw
Rm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNl
T3duZXIgfHwgKChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwg
JmluaGVyaXQpKSAmJgorICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYg
TlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpKSkgewogICAgIGFDaGFubmVsLT5TZXRPd25lcihhTG9h
ZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLwogICAvLyBmaWxl
OiB1cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQg
b3BlbmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCmRpZmYgLS1naXQgYS9j
b250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3Vt
ZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRl
bnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTIzOTEsMTYgKzIzOTEsMjUgQEAgbnNEb2N1
bWVudDo6U3RhcnREb2N1bWVudExvYWQoY29uc3QgY2hhcgogICAgIEZpbmRDaGFySW5SZWFkYWJs
ZSgnOycsIHNlbWljb2xvbiwgZW5kKTsKICAgICBTZXRDb250ZW50VHlwZUludGVybmFsKFN1YnN0
cmluZyhzdGFydCwgc2VtaWNvbG9uKSk7CiAgIH0KIAogICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVy
cyhhQ2hhbm5lbCk7CiAKICAgbUNoYW5uZWwgPSBhQ2hhbm5lbDsKIAorICAvLyBJZiB0aGlzIGRv
Y3VtZW50IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRvY3NoZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZs
YWdzCisgIC8vIHRvIHRoZSBkb2N1bWVudC4gVGhlc2UgYXJlIGltbXV0YWJsZSBhZnRlciBiZWlu
ZyBzZXQgaGVyZS4KKyAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJ
bnRlcmZhY2UoYUNvbnRhaW5lcik7CisKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgbnNyZXN1bHQg
cnYgPSBkb2NTaGVsbC0+R2V0U2FuZGJveEZsYWdzKCZtU2FuZGJveEZsYWdzKTsKKyAgICBOU19F
TlNVUkVfU1VDQ0VTUyhydiwgcnYpOworICB9CisKICAgbnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7
CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCiBu
c3Jlc3VsdAogbnNEb2N1bWVudDo6SW5pdENTUCgpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uv
c3JjL25zRnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNw
cAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTExMywxNiArMTEzLDE4IEBACiAjaW5jbHVk
ZSAibW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2Vz
LmgiCiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIKICNpbmNsdWRlICJtb3ppbGxhL2RvbS9F
bGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlvdXQvUmVuZGVyRnJhbWVQYXJlbnQuaCIK
IAogI2luY2x1ZGUgImpzYXBpLmgiCiAKKyNpbmNsdWRlICJuc0hUTUxJRnJhbWVFbGVtZW50Lmgi
CisKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRv
bTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CiB1c2luZyBuYW1lc3BhY2UgbW96
aWxsYTo6bGF5b3V0OwogdHlwZWRlZiBGcmFtZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7CiAKIGNs
YXNzIG5zQXN5bmNEb2NTaGVsbERlc3Ryb3llciA6IHB1YmxpYyBuc1J1bm5hYmxlCiB7CkBAIC00
NjgsMjAgKzQ3MCw3MCBAQCBuc0ZyYW1lTG9hZGVyOjpSZWFsbHlTdGFydExvYWRpbmdJbnRlcm5h
CiAgIC8vIEp1c3QgdG8gYmUgc2FmZSwgcmVjaGVjayB1cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2Fk
KG1VUklUb0xvYWQpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG5zQ09NUHRy
PG5zSURvY1NoZWxsTG9hZEluZm8+IGxvYWRJbmZvOwogICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJ
bmZvKGdldHRlcl9BZGRSZWZzKGxvYWRJbmZvKSk7CiAgIE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZv
LCBOU19FUlJPUl9GQUlMVVJFKTsKIAotICAvLyBXZSdsbCB1c2Ugb3VyIHByaW5jaXBhbCwgbm90
IHRoYXQgb2YgdGhlIGRvY3VtZW50IGxvYWRlZCBpbnNpZGUgdXMuICBUaGlzCi0gIC8vIGlzIHZl
cnkgaW1wb3J0YW50OyBuZWVkZWQgdG8gcHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMg
bG9hZGVkIGluCi0gIC8vIHN1YmZyYW1lcyEKLSAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNv
bnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7CisgIC8vIElzIHRoaXMgYW4gPGlmcmFtZT4gd2l0aCBh
IHNhbmRib3ggYXR0cmlidXRlIG9yIGEgcGFyZW50IHdoaWNoIGlzCisgIC8vIHNhbmRib3hlZCA/
CisgIG5zSFRNTElGcmFtZUVsZW1lbnQgKiBpZnJhbWUgPQorICAgIG5zSFRNTElGcmFtZUVsZW1l
bnQ6OkZyb21Db250ZW50KG1Pd25lckNvbnRlbnQpOworCisgIFBSVWludDMyIHNhbmRib3hGbGFn
cyA9IDA7CisKKyAgaWYgKGlmcmFtZSkgeworICAgIHNhbmRib3hGbGFncyA9IGlmcmFtZS0+R2V0
U2FuZGJveEZsYWdzKCk7CisKKyAgICBQUlVpbnQzMiBwYXJlbnRTYW5kYm94RmxhZ3MgPSAwOwor
CisgICAgLy8gR2V0IHRoZSBwYXJlbnQncyBzYW5kYm94IGZsYWdzLCB0aGV5J3JlIG5lZWRlZCB0
byBkZXRlcm1pbmUgaWYgdGhlCisgICAgLy8gZnJhbWUgYmVpbmcgbG9hZGVkIG5lZWRzIHRvIGJl
IHNhbmRib3hlZC4KKyAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnREb2NT
aGVsbEl0ZW07CisgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gY3VyRG9jU2hlbGxJ
dGVtID0gZG9fUXVlcnlJbnRlcmZhY2UobURvY1NoZWxsKTsKKworICAgIGlmIChOU19TVUNDRUVE
RUQoY3VyRG9jU2hlbGxJdGVtLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50RG9jU2hl
bGxJdGVtKSkpKSB7CisgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gcGFyZW50RG9jID0gZG9f
R2V0SW50ZXJmYWNlKHBhcmVudERvY1NoZWxsSXRlbSk7CisKKyAgICAgIGlmIChwYXJlbnREb2Mp
IHsKKyAgICAgICAgcGFyZW50U2FuZGJveEZsYWdzID0gcGFyZW50RG9jLT5TYW5kYm94RmxhZ3Mo
KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2FuZGJveEZsYWdzIHx8IHBhcmVudFNhbmRi
b3hGbGFncykgeworICAgICAgaWYgKHBhcmVudFNhbmRib3hGbGFncykgeworICAgICAgICAvLyBU
aGUgY2hpbGQgY2FuIG9ubHkgYWRkIHJlc3RyaWN0aW9ucywgbm90IHJlbW92ZSB0aGVtLgorICAg
ICAgICBzYW5kYm94RmxhZ3MgfD0gcGFyZW50U2FuZGJveEZsYWdzOworICAgICAgfQorCisgICAg
ICBtRG9jU2hlbGwtPlNldFNhbmRib3hGbGFncyhzYW5kYm94RmxhZ3MpOworCisgICAgICAvLyBT
ZXQgdXAgdGhlIGFjdHVhbCBzYW5kYm94aW5nIGZvciBzY3JpcHRzIGFuZCBwbHVnaW5zIGFzIHNw
ZWNpZmllZC4KKyAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVE
X1NDUklQVFMpIHsKKyAgICAgICAgbURvY1NoZWxsLT5TZXRBbGxvd0phdmFzY3JpcHQoZmFsc2Up
OworICAgICAgfQorCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRC
T1hFRF9QTFVHSU5TKSB7CisgICAgICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dQbHVnaW5zKGZhbHNl
KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBTZXQgdXAgdGhlIGZyYW1lJ3MgcHJpbmNp
cGFsLgorICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4p
IHsKKyAgICAvLyBUaGlzIGZyYW1lIGlzIHNhbmRib3hlZCB3aXRoIHJlc3BlY3QgdG8gb3JpZ2lu
LCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBudWxsIHByaW5jaXBhbCBhbmQKKyAgICAvLyB1c2Ug
dGhhdCBhcyB0aGUgb3duZXIuCisgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBudWxsUHJpbmNp
cGFsID0gZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9udWxscHJpbmNpcGFsOzEiKTsK
KyAgICBsb2FkSW5mby0+U2V0T3duZXIobnVsbFByaW5jaXBhbCk7CisgIH0gZWxzZSB7CisgICAg
Ly8gVXNlIHRoZSAnbm9ybWFsJyBwcmluY2lwYWwgZm9yIHRoZSA8aWZyYW1lPi4KKyAgICBsb2Fk
SW5mby0+U2V0T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKKyAgfQogCiAg
IG5zQ09NUHRyPG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVudC0+Tm9kZVBy
aW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAgTlNfRU5TVVJF
X1NVQ0NFU1MocnYsIHJ2KTsKIAogICBsb2FkSW5mby0+U2V0UmVmZXJyZXIocmVmZXJyZXIpOwog
CiAgIC8vIEtpY2sgb2ZmIHRoZSBsb2FkLi4uCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3Jj
L25zR2tBdG9tTGlzdC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAotLS0gYS9j
b250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNH
a0F0b21MaXN0LmgKQEAgLTkzLDE3ICs5MywyMSBAQCBHS19BVE9NKGFjdHVhdGUsICJhY3R1YXRl
IikKIEdLX0FUT00oYWRkcmVzcywgImFkZHJlc3MiKQogR0tfQVRPTShhZnRlciwgImFmdGVyIikK
IEdLX0FUT00oYWZ0ZXJfZW5kLCAiYWZ0ZXJfZW5kIikKIEdLX0FUT00oYWZ0ZXJfc3RhcnQsICJh
ZnRlcl9zdGFydCIpCiBHS19BVE9NKGFsaWduLCAiYWxpZ24iKQogR0tfQVRPTShhbGluaywgImFs
aW5rIikKIEdLX0FUT00oYWxsLCAiYWxsIikKIEdLX0FUT00oYWxsb3dldmVudHMsICJhbGxvd2V2
ZW50cyIpCitHS19BVE9NKGFsbG93Zm9ybXMsICJhbGxvdy1mb3JtcyIpCiBHS19BVE9NKGFsbG93
bmVnYXRpdmVhc3NlcnRpb25zLCAiYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMiKQorR0tfQVRPTShh
bGxvd3NhbWVvcmlnaW4sICJhbGxvdy1zYW1lLW9yaWdpbiIpCitHS19BVE9NKGFsbG93c2NyaXB0
cywgImFsbG93LXNjcmlwdHMiKQorR0tfQVRPTShhbGxvd3RvcG5hdmlnYXRpb24sICJhbGxvdy10
b3AtbmF2aWdhdGlvbiIpCiBHS19BVE9NKGFsbG93dW50cnVzdGVkLCAiYWxsb3d1bnRydXN0ZWQi
KQogR0tfQVRPTShhbHQsICJhbHQiKQogR0tfQVRPTShhbHRlcm5hdGUsICJhbHRlcm5hdGUiKQog
R0tfQVRPTShhbHdheXMsICJhbHdheXMiKQogR0tfQVRPTShhbmNlc3RvciwgImFuY2VzdG9yIikK
IEdLX0FUT00oYW5jZXN0b3JPclNlbGYsICJhbmNlc3Rvci1vci1zZWxmIikKIEdLX0FUT00oX2Fu
ZCwgImFuZCIpCiBHS19BVE9NKGFueSwgImFueSIpCkBAIC04NzUsMTYgKzg3OSwxNyBAQCBHS19B
VE9NKHJvd3NwYW4sICJyb3dzcGFuIikKIEdLX0FUT00ocnAsICJycCIpCiBHS19BVE9NKHJ0LCAi
cnQiKQogR0tfQVRPTShydGwsICJydGwiKQogR0tfQVRPTShydWJ5LCAicnVieSIpCiBHS19BVE9N
KHJ1bGUsICJydWxlIikKIEdLX0FUT00ocnVsZXMsICJydWxlcyIpCiBHS19BVE9NKHMsICJzIikK
IEdLX0FUT00oc2FtcCwgInNhbXAiKQorR0tfQVRPTShzYW5kYm94LCAic2FuZGJveCIpCiBHS19B
VE9NKHNiYXR0ciwgInNiYXR0ciIpCiBHS19BVE9NKHNjYWxlLCAic2NhbGUiKQogR0tfQVRPTShz
Y2FuLCAic2NhbiIpCiBHS19BVE9NKHNjaGVtZSwgInNjaGVtZSIpCiBHS19BVE9NKHNjb3BlLCAi
c2NvcGUiKQogR0tfQVRPTShzY29wZWQsICJzY29wZWQiKQogR0tfQVRPTShzY3JlZW4sICJzY3Jl
ZW4iKQogR0tfQVRPTShzY3JlZW5YLCAic2NyZWVuWCIpCmRpZmYgLS1naXQgYS9jb250ZW50L2h0
bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9z
cmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTY4NCwxNyArNjg0LDI1IEBAIG5zSFRNTEZvcm1FbGVt
ZW50OjpEb1N1Ym1pdE9yUmVzZXQobnNFdmUKICAgICByZXR1cm4gRG9SZXNldCgpOwogICB9CiAK
ICAgaWYgKE5TX0ZPUk1fU1VCTUlUID09IGFNZXNzYWdlKSB7CiAgICAgLy8gRG9uJ3Qgc3VibWl0
IGlmIHdlJ3JlIG5vdCBpbiBhIGRvY3VtZW50LgogICAgIGlmICghZG9jKSB7CiAgICAgICByZXR1
cm4gTlNfT0s7CiAgICAgfQotICAgIHJldHVybiBEb1N1Ym1pdChhRXZlbnQpOworICAgIC8vIERv
bid0IHN1Ym1pdCBpZiB3ZSdyZSBpbiBhIHNhbmRib3hlZCBmcmFtZSBhbmQgZm9ybSBzdWJtaXQK
KyAgICAvLyBpcyBkaXNhYmxlZC4KKyAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSBkb2MtPlNh
bmRib3hGbGFncygpOworCisgICAgaWYgKCEoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9GT1JNUykpIHsKKyAgICAgIHJldHVybiBEb1N1Ym1pdChhRXZlbnQpOworICAgIH0K
KworCXJldHVybiBOU19PSzsKICAgfQogCiAgIE1PWl9BU1NFUlQoZmFsc2UpOwogICByZXR1cm4g
TlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0hUTUxGb3JtRWxlbWVudDo6RG9SZXNldCgpCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAg
Yi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKLS0tIGEv
Y29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCisrKyBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAtMzMsODEg
KzMzLDMzIEBACiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBv
ZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoKICAqICoqKioqIEVORCBMSUNFTlNF
IEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJtb3ppbGxhL1V0aWwuaCIKIAogI2luY2x1ZGUg
Im5zSURPTUhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAibnNHZW5lcmljSFRNTEZyYW1l
RWxlbWVudC5oIgotI2luY2x1ZGUgIm5zSURPTURvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNJRE9N
R2V0U1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01TVkdEb2N1bWVudC5oIgotI2luY2x1
ZGUgIm5zR2tBdG9tcy5oIgotI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNN
YXBwZWRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAibnNET01FcnJvci5oIgotI2luY2x1ZGUgIm5z
UnVsZURhdGEuaCIKLSNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCisjaW5jbHVkZSAibnNIVE1M
SUZyYW1lRWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVz
cGFjZSBtb3ppbGxhOjpkb207CiAKLWNsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJsaWMg
bnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1
YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAs
IHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAotewotcHVibGljOgotICBuc0hUTUxJRnJhbWVF
bGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKLSAgICAgICAg
ICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJzZXIgPSBtb3pp
bGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7Ci0gIHZpcnR1YWwgfm5zSFRNTElGcmFtZUVsZW1l
bnQoKTsKLQotICAvLyBuc0lTdXBwb3J0cwotICBOU19ERUNMX0lTVVBQT1JUU19JTkhFUklURUQK
LQotICAvLyBuc0lET01Ob2RlCi0gIE5TX0ZPUldBUkRfTlNJRE9NTk9ERShuc0dlbmVyaWNIVE1M
RnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NRWxlbWVudAotICBOU19GT1JXQVJEX05TSURP
TUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUhUTUxF
bGVtZW50Ci0gIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1l
RWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50Ci0gIE5TX0RFQ0xfTlNJ
RE9NSFRNTElGUkFNRUVMRU1FTlQKLQotICAvLyBuc0lET01HZXRTVkdEb2N1bWVudAotICBOU19E
RUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCi0KLSAgLy8gbnNJQ29udGVudAotICB2aXJ0dWFsIGJv
b2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7Ci0gIE5TX0lNRVRIT0RfKGJvb2wp
IElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0OwotICB2
aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0
aW9uKCkgY29uc3Q7Ci0KLSAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5mbyAqYU5v
ZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7Ci0gIHZpcnR1YWwgbnNYUENDbGFzc0lu
Zm8qIEdldENsYXNzSW5mbygpOwotfTsKLQotCiBOU19JTVBMX05TX05FV19IVE1MX0VMRU1FTlRf
Q0hFQ0tfUEFSU0VSKElGcmFtZSkKIAotCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojpuc0hUTUxJRnJh
bWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbVBhcnNlciBhRnJvbVBhcnNl
cikKICAgOiBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50KGFOb2RlSW5mbywgYUZyb21QYXJzZXIp
CiB7CiB9CiAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6On5uc0hUTUxJRnJhbWVFbGVtZW50KCkKIHsK
KyAgaWYgKG1TYW5kYm94VG9rZW5MaXN0KQorICAgIG1TYW5kYm94VG9rZW5MaXN0LT5Ecm9wUmVm
ZXJlbmNlKCk7CiB9CiAKIAogTlNfSU1QTF9BRERSRUZfSU5IRVJJVEVEKG5zSFRNTElGcmFtZUVs
ZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIE5TX0lNUExfUkVMRUFTRV9JTkhFUklURUQobnNIVE1M
SUZyYW1lRWxlbWVudCxuc0dlbmVyaWNFbGVtZW50KQogCiBET01DSV9OT0RFX0RBVEEoSFRNTElG
cmFtZUVsZW1lbnQsIG5zSFRNTElGcmFtZUVsZW1lbnQpCiAKQEAgLTE1MCwxNiArMTAyLDI4IEBA
IG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldENvbnRlbnRXaW5kb3cobnMKIH0KIAogTlNfSU1FVEhP
RElNUAogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U1ZHRG9jdW1lbnQobnNJRE9NRG9jdW1lbnQg
KiphUmVzdWx0KQogewogICByZXR1cm4gR2V0Q29udGVudERvY3VtZW50KGFSZXN1bHQpOwogfQog
CitOU19JTUVUSE9ESU1QCituc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRTYW5kYm94KG5zSURPTURP
TVNldHRhYmxlVG9rZW5MaXN0KiogYVNhbmRib3gpCit7CisgIGlmICghbVNhbmRib3hUb2tlbkxp
c3QpIHsKKyAgICBtU2FuZGJveFRva2VuTGlzdCA9IG5ldyBuc0RPTVNldHRhYmxlVG9rZW5MaXN0
KHRoaXMsIG5zR2tBdG9tczo6c2FuZGJveCk7CisgIH0KKworICBOU19BRERSRUYoKmFTYW5kYm94
ID0gbVNhbmRib3hUb2tlbkxpc3QpOworCisgIHJldHVybiBOU19PSzsKK30KKwogYm9vbAogbnNI
VE1MSUZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFs
dWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJl
c3VsdCkKIHsKICAgaWYgKGFOYW1lc3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgewogICAg
IGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6bWFyZ2lud2lkdGgpIHsKQEAgLTE3OCwxNiAr
MTQyLDIyIEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKFBSSW4KICAgICAg
IHJldHVybiBQYXJzZUZyYW1lYm9yZGVyVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CiAg
ICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjpzY3JvbGxpbmcpIHsKICAgICAgIHJldHVy
biBQYXJzZVNjcm9sbGluZ1ZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQogICAgIGlmIChh
QXR0cmlidXRlID09IG5zR2tBdG9tczo6YWxpZ24pIHsKICAgICAgIHJldHVybiBQYXJzZUFsaWdu
VmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CisgICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNH
a0F0b21zOjpzYW5kYm94KSB7CisgICAgICAvLyBUaGUgc2FuZGJveCBhdHRyaWJ1dGUgbmVlZHMg
dG8gYmUgcGFyc2VkIGFzIGFuIGF0b20gYXJyYXkgc28KKyAgICAgIC8vIGl0IGNhbiBiZSBleHBv
c2VkIGFzIGEgRE9NU2V0dGFibGVUb2tlbkxpc3QuCisgICAgICBhUmVzdWx0LlBhcnNlQXRvbUFy
cmF5KGFWYWx1ZSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgIH0KIAogICByZXR1cm4g
bnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoYU5hbWVzcGFjZUlELCBh
QXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYVZhbHVlLCBhUmVzdWx0KTsKIH0KIAogc3RhdGljIHZvaWQKIE1hcEF0dHJpYnV0ZXNJ
bnRvUnVsZShjb25zdCBuc01hcHBlZEF0dHJpYnV0ZXMqIGFBdHRyaWJ1dGVzLApAQCAtMjY4LDgg
KzIzOCwzNCBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpJc0F0dHJpYnV0ZU1hcHBlZChjCiAKIAog
bnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYwogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0QXR0cmli
dXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3QKIHsKICAgcmV0dXJuICZNYXBBdHRyaWJ1dGVzSW50
b1J1bGU7CiB9CiAKK25zcmVzdWx0Cituc0hUTUxJRnJhbWVFbGVtZW50OjpBZnRlclNldEF0dHIo
UFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nKiBhVmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpCit7CisgIGlmIChhTmFtZSA9PSBu
c0drQXRvbXM6OnNhbmRib3ggJiYgYU5hbWVTcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7
CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUsIGFu
ZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwKKyAgICAvLyBzZXQgaXRzIHNhbmRib3ggZmxhZ3MgYXBw
cm9wcmlhdGVseS4KKyAgICBpZiAobUZyYW1lTG9hZGVyKSB7CisgICAgICBuc0NPTVB0cjxuc0lE
b2NTaGVsbD4gZG9jc2hlbGwgPSBtRnJhbWVMb2FkZXItPkdldEV4aXN0aW5nRG9jU2hlbGwoKTsK
KworICAgICAgaWYgKGRvY3NoZWxsKSB7IAorICAgICAgICBQUlVJbnQzMiBuZXdGbGFncyA9IDA7
CisgICAgICAgIC8vIElmIGEgTlVMTCBhVmFsdWUgaXMgcGFzc2VkIGluLCB3ZSB3YW50IHRvIGNs
ZWFyIHRoZSBzYW5kYm94IGZsYWdzCisgICAgICAgIC8vIHdoaWNoIHdlIHdpbGwgZG8gYnkgc2V0
dGluZyB0aGVtIHRvIDAuCisgICAgICAgIGlmIChhVmFsdWUpIHsgCisgICAgICAgICAgbmV3Rmxh
Z3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncygqYVZhbHVl
KSk7CisgICAgICAgIH0gCisgICAgICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3Rmxh
Z3MpOworICAgICAgfSAgCisgICAgfQorICB9CisgIHJldHVybiBuc0dlbmVyaWNIVE1MRWxlbWVu
dDo6QWZ0ZXJTZXRBdHRyKGFOYW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5vdGlmeSk7CisKK30KZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmggYi9jb250
ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRN
TElGcmFtZUVsZW1lbnQuaApAQCAtMCwwICsxLDExNyBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFi
LXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAq
LworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEu
MS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUg
c3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRo
ZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJl
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNl
LgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNsaWVu
dCBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29k
ZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4
CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
Q29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIp
LAorICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIu
MSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhv
c2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUg
TEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBk
ZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhl
IEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25z
IGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExH
UEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2luY2x1ZGUg
Im1vemlsbGEvVXRpbC5oIgorCisjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zR2VuZXJpY0hU
TUxGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01Eb2N1bWVudC5oIgorI2luY2x1ZGUg
Im5zSURPTUdldFNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJuc0drQXRvbXMuaCIKKyNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgorI2luY2x1
ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIm5zRE9NRXJyb3IuaCIKKyNpbmNs
dWRlICJuc1J1bGVEYXRhLmgiCisjaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgorI2luY2x1ZGUg
Im5zRE9NU2V0dGFibGVUb2tlbkxpc3QuaCIKKyNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgor
CitjbGFzcyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVs
ZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFt
ZUVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZH
RG9jdW1lbnQKK3sKK3B1YmxpYzoKKyAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJl
ZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgbW96aWxs
YTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9Q
QVJTRVIpOworICB2aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7CisKKyAgLy8gbnNJU3Vw
cG9ydHMKKyAgTlNfREVDTF9JU1VQUE9SVFNfSU5IRVJJVEVECisKKyAgLy8gbnNJRE9NTm9kZQor
ICBOU19GT1JXQVJEX05TSURPTU5PREUobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisg
IC8vIG5zSURPTUVsZW1lbnQKKyAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UKG5zR2VuZXJpY0hU
TUxGcmFtZUVsZW1lbnQ6OikKKworICAvLyBuc0lET01IVE1MRWxlbWVudAorICBOU19GT1JXQVJE
X05TSURPTUhUTUxFTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKKworICAvLyBu
c0lET01IVE1MSUZyYW1lRWxlbWVudAorICBOU19ERUNMX05TSURPTUhUTUxJRlJBTUVFTEVNRU5U
CisKKyAgLy8gbnNJRE9NR2V0U1ZHRG9jdW1lbnQKKyAgTlNfREVDTF9OU0lET01HRVRTVkdET0NV
TUVOVAorCisgIC8vIG5zSUNvbnRlbnQKKyAgdmlydHVhbCBib29sIFBhcnNlQXR0cmlidXRlKFBS
SW50MzIgYU5hbWVzcGFjZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lB
dG9tKiBhQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c0FTdHJpbmcmIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRy
VmFsdWUmIGFSZXN1bHQpOworICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChj
b25zdCBuc0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKKyAgdmlydHVhbCBuc01hcFJ1bGVUb0F0
dHJpYnV0ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OworCisgIHZp
cnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFS
ZXN1bHQpIGNvbnN0OworICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsK
KworICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwg
bnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNBU3RyaW5nKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhTm90aWZ5KTsKKworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKSB7CisgICAgbnNBdXRv
U3RyaW5nIHNhbmRib3hBdHRyOworCisgICAgaWYgKEdldEF0dHIoa05hbWVTcGFjZUlEX05vbmUs
IG5zR2tBdG9tczo6c2FuZGJveCwgc2FuZGJveEF0dHIpKSB7CisgICAgICByZXR1cm4gbnNDb250
ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2FuZGJveEF0dHIpOworICAg
IH0KKworICAgIC8vIE5vIHNhbmRib3ggYXR0cmlidXRlLCBubyBzYW5kYm94IGZsYWdzLgorICAg
IHJldHVybiAwOworICB9CisKKyAgc3RhdGljIG5zSFRNTElGcmFtZUVsZW1lbnQqIEZyb21Db250
ZW50KG5zSUNvbnRlbnQgKmFDb250ZW50KQorICB7CisgICAgaWYgKGFDb250ZW50LT5Jc0hUTUwo
bnNHa0F0b21zOjppZnJhbWUpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG5zSFRNTElGcmFt
ZUVsZW1lbnQqPihhQ29udGVudCk7CisgICAgcmV0dXJuIG5zbnVsbDsKKyAgfQorCitwcm90ZWN0
ZWQ6CisgIG5zUmVmUHRyPG5zRE9NU2V0dGFibGVUb2tlbkxpc3Q+ICBtU2FuZGJveFRva2VuTGlz
dDsKK307CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3Vt
ZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCi0t
LSBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCisrKyBiL2Nv
bnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCkBAIC0xMjY3LDE2ICsx
MjY3LDIxIEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3RyaW5nJiBhQ28KIHsKICAg
YUNvb2tpZS5UcnVuY2F0ZSgpOyAvLyBjbGVhciBjdXJyZW50IGNvb2tpZSBpbiBjYXNlIHNlcnZp
Y2UgZmFpbHM7CiAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gY29va2llIGlzbid0IGFuIGVy
cm9yIGNvbmRpdGlvbi4KIAogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1
cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2lu
IGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gcmVhZCBjb29raWVzCisgIC8vIGlzIHByb2hpYml0ZWQu
CisgIGlmIChtU2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4pCisg
ICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisKICAgLy8gbm90IGhhdmluZyBh
IGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZp
Y2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7
CiAgIGlmIChzZXJ2aWNlKSB7CiAgICAgLy8gR2V0IGEgVVJJIGZyb20gdGhlIGRvY3VtZW50IHBy
aW5jaXBhbC4gV2UgdXNlIHRoZSBvcmlnaW5hbAogICAgIC8vIGNvZGViYXNlIGluIGNhc2UgdGhl
IGNvZGViYXNlIHdhcyBjaGFuZ2VkIGJ5IFNldERvbWFpbgogICAgIG5zQ09NUHRyPG5zSVVSST4g
Y29kZWJhc2VVUkk7CiAgICAgTm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMo
Y29kZWJhc2VVUkkpKTsKIApAQCAtMTI5NywxNiArMTMwMiwyMSBAQCBuc0hUTUxEb2N1bWVudDo6
R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTERvY3VtZW50
OjpTZXRDb29raWUoY29uc3QgbnNBU3RyaW5nJiBhQ29va2llKQogewogICBpZiAobURpc2FibGVD
b29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9j
dW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gd3JpdGUgY29v
a2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAmIG5zSURvY1No
ZWxsOjpTQU5EQk9YRURfT1JJR0lOKQorICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlf
RVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgog
ICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19D
T09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSAmJiBtRG9jdW1lbnRVUkkp
IHsKICAgICBuc0NPTVB0cjxuc0lQcm9tcHQ+IHByb21wdDsKICAgICBuc0NPTVB0cjxuc1BJRE9N
V2luZG93PiB3aW5kb3cgPSBHZXRXaW5kb3coKTsKICAgICBpZiAod2luZG93KSB7CiAgICAgICB3
aW5kb3ctPkdldFByb21wdGVyKGdldHRlcl9BZGRSZWZzKHByb21wdCkpOwogICAgIH0KZGlmZiAt
LWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25zRG9j
U2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9jc2hl
bGwvYmFzZS9uc0RvY1NoZWxsLmNwcApAQCAtNzI3LDE2ICs3MjcsMTcgQEAgbnNEb2NTaGVsbDo6
bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVTWV9GTEFHU19OT05FKSwKICAgICBtQXBw
VHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9XTiksCiAgICAgbUxvYWRUeXBlKDApLAog
ICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdpbkhlaWdodCgtMSksCiAgICAgbUl0ZW1U
eXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNUcmFuc0luZGV4KC0xKSwKICAgICBtTG9h
ZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hGbGFncygwKSwKICAgICBtQ3JlYXRlZChm
YWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUpLAogICAgIG1BbGxvd1BsdWdpbnModHJ1
ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwKICAgICBtQWxsb3dNZXRhUmVkaXJlY3Rz
KHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwKICAgICBtQWxsb3dETlNQcmVmZXRjaCh0
cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRydWUpLApAQCAtMjkyMiwxNiArMjkyMyw3
NSBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pCiAgICAgICAgICAg
ICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmRJdGVt
KSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91bmRJdGVtIGhlcmUgZXZlbiBpZiBpdCdz
IG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0ZW0gc2luY2UgYWxsIHRoZSBuYW1lcyB3
ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZXMg
dGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3IgZnVydGhlci4KIAorICAgICAgICAgICAg
Ly8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwgd2UgbmVlZCB0byBkbyBzb21lIGV4dHJh
IGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisKKyAgICAg
ICAgICAgIGlmIChtQ29udGVudFZpZXdlcikgeworICAgICAgICAgICAgICAgIG5zSURvY3VtZW50
ICogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3VtZW50KCk7CisgICAgICAgICAgICAgICAg
c2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKHNhbmRib3hGbGFncykgeworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5z
SURvY1NoZWxsVHJlZUl0ZW0+IHJvb3Q7CisgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVSb290
VHJlZUl0ZW0oZ2V0dGVyX0FkZFJlZnMocm9vdCkpOworCisgICAgICAgICAgICAgICAgLy8gSXMg
dGhlIGZvdW5kIGl0ZW0gbm90IGEgdG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgYW5kIG5vdCBv
dXJzZWxmID8KKyAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBz
ZWxmQXNJdGVtID0gc3RhdGljX2Nhc3Q8bnNJRG9jU2hlbGxUcmVlSXRlbSAqPih0aGlzKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZm91bmRJdGVtICE9IHJvb3QgJiYgZm91bmRJdGVtICE9IHNlbGZB
c0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXJlIHdlIGFuIGFuY2VzdG9yIG9mIHRo
ZSBmb3VuZEl0ZW0gPworICAgICAgICAgICAgICAgICAgICBib29sIGlzQW5jZXN0b3IgPSBmYWxz
ZTsKKworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBw
YXJlbnRBc0l0ZW07CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRl
cl9BZGRSZWZzKHBhcmVudEFzSXRlbSkpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChw
YXJlbnRBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1No
ZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbS0+
R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodG1wICYmIHRtcCA9PSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXNBbmNlc3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJlbnRBc0l0ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5v
LCB3ZSBhcmUgbm90IGFuIGFuY2VzdG9yIGFuZCBvdXIgZG9jdW1lbnQgaXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHNhbmRib3hlZCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRvcCBs
ZXZlbCBicm93c2luZyBjb250ZXh0IC0gaXMgaXQgYW4gYW5jZXN0b3Igb2Ygb3VycyA/CisgICAg
ICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHBhcmVudEFzSXRl
bTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0dGVyX0FkZFJlZnMo
cGFyZW50QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudEFzSXRl
bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRl
bT4gdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVtLT5HZXRQYXJlbnQo
Z2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAg
JiYgdG1wID09IGZvdW5kSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgYW4gYW5jZXN0b3IsIGFuZCB3ZSBhcmUgc2FuZGJveGVkLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFVubGVzcyBhbGxvdy10b3AtbmF2aWdhdGlvbiBpcyBzZXQsIHdlIGNh
bid0IGFsbG93IHRoaXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhbmRib3hG
bGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwog
ICAgICAgICAgICAgcmV0dXJuIE5TX09LOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gS2Vl
cCBsb29raW5nCiAgICAgICAgIAogICAgIC8vIEZpcnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAt
NDk1NiwxNiArNTAxNiwzMCBAQCBuc0RvY1NoZWxsOjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRh
YikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRh
YikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0FwcFRhYjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBO
U19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpTZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRi
b3hGbGFncykKK3sKKyAgbVNhbmRib3hGbGFncyA9IGFTYW5kYm94RmxhZ3M7CisgIHJldHVybiBO
U19PSzsKK30KKworTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBS
VWludDMyICAqYVNhbmRib3hGbGFncykKK3sKKyAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZs
YWdzOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNl
dFZpc2liaWxpdHkoYm9vbCBhVmlzaWJpbGl0eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2Vy
KQogICAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAg
IG1Db250ZW50Vmlld2VyLT5TaG93KCk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtODE0NSwxNiAr
ODIxOSwyOSBAQCBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAg
ICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmlu
ZEl0ZW1XaXRoTmFtZShhV2luZG93VGFyZ2V0LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnModGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09N
UHRyPG5zSURvY1NoZWxsPiB0YXJnZXREb2NTaGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdl
dEl0ZW0pOwogICAgICAgICAKICAgICAgICAgYm9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAg
ICAgICBpZiAoIXRhcmdldERvY1NoZWxsKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hl
bGwncyBkb2N1bWVudCBpcyBzYW5kYm94ZWQgYW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAg
IC8vIG5hdmlnYXRlL2xvYWQgYSBmcmFtZSBpdCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRo
ZQorICAgICAgICAgICAgLy8gRmluZEl0ZW1XaXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJu
ZWQgbnVsbCBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdh
bnQgdG8gYWN0dWFsbHkgb3BlbiBhIG5ldyB3aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAg
ICAvLyB0aG91Z2guIENoZWNrIGlmIHdlIGFyZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUg
aWYgc28uCisgICAgICAgICAgICBOU19FTlNVUkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJS
T1JfRkFJTFVSRSk7CisgICAgICAgICAgICBuc0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3
ZXItPkdldERvY3VtZW50KCk7CisgICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAw
OworICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAg
ICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJ
T04pIHsKKyAgICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gd2luID0KICAgICAgICAg
ICAgICAgICBkb19HZXRJbnRlcmZhY2UoR2V0QXNTdXBwb3J0cyh0aGlzKSk7CiAgICAgICAgICAg
ICBOU19FTlNVUkVfVFJVRSh3aW4sIE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpOwogCiAgICAgICAg
ICAgICBuc0RlcGVuZGVudFN0cmluZyBuYW1lKGFXaW5kb3dUYXJnZXQpOwogICAgICAgICAgICAg
bnNDT01QdHI8bnNJRE9NV2luZG93PiBuZXdXaW47CiAgICAgICAgICAgICBydiA9IHdpbi0+T3Bl
bihFbXB0eVN0cmluZygpLCAvLyBVUkwgdG8gbG9hZAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSwgICAgICAgICAgLy8gd2luZG93IG5hbWUKQEAgLTg5MzksMTcgKzkwMjYsMjQgQEAg
bnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIC8vIFNldCB0aGUg
cmVmZXJyZXIgZXhwbGljaXRseQogICAgICAgICBpZiAoYVJlZmVycmVyVVJJICYmIGFTZW5kUmVm
ZXJyZXIpIHsKICAgICAgICAgICAgIC8vIFJlZmVycmVyIGlzIGN1cnJlbmx5IG9ubHkgc2V0IGZv
ciBsaW5rIGNsaWNrcyBoZXJlLgogICAgICAgICAgICAgaHR0cENoYW5uZWwtPlNldFJlZmVycmVy
KGFSZWZlcnJlclVSSSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBuc0NPTVB0cjxuc0lQcmlu
Y2lwYWw+IG93bmVyUHJpbmNpcGFsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFPd25lcikpOwotICAgIG5z
Q29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwg
YVVSSSwgdHJ1ZSk7CisKKyAgICAvLyBJZiB0aGUgY29udGVudCBoYXMgdGhlIHNhbmRib3hlZCBv
cmlnaW4gZmxhZyBzZXQsIGZvcmNlIHRoZSBwYXNzZWQgaW4KKyAgICAvLyBvd25lciAod2hpY2gg
c2hvdWxkIGJlIGEgbnVsbCBwcmluY2lwYWwpIHRvIGJlIHNldCBvbiB0aGUgY2hhbm5lbC4gSWYK
KyAgICAvLyB0aGUgZmxhZyBpc24ndCBzZXQsIGFsbG93IHRoZSBjb250ZW50IHRvIGFzc3N1bWUg
aXRzICJuYXR1cmFsIGRvbWFpbiIgYXMKKyAgICAvLyBpdCBub3JtYWxseSB3b3VsZC4KKyAgICBu
c0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWws
IGFVUkksIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVNh
bmRib3hGbGFncyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
RG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4pKTsKIAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENo
YW5uZWw+IHNjcmlwdENoYW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShjaGFubmVsKTsKICAgICBp
ZiAoc2NyaXB0Q2hhbm5lbCkgewogICAgICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBv
dXIgY29udGV4dCBpZiB0aGUgcHJpbmNpcGFscyBtYXRjaAogICAgICAgICBzY3JpcHRDaGFubmVs
LT4KICAgICAgICAgICAgIFNldEV4ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVD
VVRFX05PUk1BTCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hl
bGwuaCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNE
b2NTaGVsbC5oCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03ODEsMTYgKzc4
MSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBp
cyBub3QgZXhwZWN0ZWQgdG8gY2hhbmdlLgogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAg
IG1JdGVtVHlwZTsKIAogICAgIC8vIEluZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwg
aW5kaWNhdGluZyB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBh
dCB0aGUgdGltZSB0aGF0IHRoaXMgRG9jU2hlbGwgYmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMy
ICAgICAgICAgICAgICAgICAgICBtUHJldmlvdXNUcmFuc0luZGV4OwogICAgIFBSSW50MzIgICAg
ICAgICAgICAgICAgICAgIG1Mb2FkZWRUcmFuc0luZGV4OwogCisgICAgUFJVaW50MzIgICAgICAg
ICAgICAgICAgICAgbVNhbmRib3hGbGFnczsKKwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAg
ICAgIG1DcmVhdGVkOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1N1YmZy
YW1lczsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dQbHVnaW5zOwogICAg
IGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0phdmFzY3JpcHQ7CiAgICAgYm9vbCAg
ICAgICAgICAgICAgICAgICAgICAgbUFsbG93TWV0YVJlZGlyZWN0czsKICAgICBib29sICAgICAg
ICAgICAgICAgICAgICAgICBtQWxsb3dJbWFnZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAg
ICAgICAgbUFsbG93RE5TUHJlZmV0Y2g7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAg
bUFsbG93V2luZG93Q29udHJvbDsKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hl
bGwuaWRsIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFz
ZS9uc0lEb2NTaGVsbC5pZGwKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAg
LTY3LDE3ICs2NywxNyBAQCBpbnRlcmZhY2UgbnNJUmVxdWVzdDsKIGludGVyZmFjZSBuc0lTSEVu
dHJ5OwogaW50ZXJmYWNlIG5zSUxheW91dEhpc3RvcnlTdGF0ZTsKIGludGVyZmFjZSBuc0lTZWN1
cmVCcm93c2VyVUk7CiBpbnRlcmZhY2UgbnNJRE9NU3RvcmFnZTsKIGludGVyZmFjZSBuc0lQcmlu
Y2lwYWw7CiBpbnRlcmZhY2UgbnNJV2ViQnJvd3NlclByaW50OwogaW50ZXJmYWNlIG5zSVZhcmlh
bnQ7CiAKLVtzY3JpcHRhYmxlLCB1dWlkKDA2MTVkMWE2LTMxM2YtMTFlMS1hMDQzLTZjNjI2ZDY5
Njc1YyldCitbc2NyaXB0YWJsZSwgdXVpZCg5YjI4MzMzNy0wOTdkLTRmYTgtYTJkYS05MTYzMThl
YWY4MjgpXQogaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKIHsKICAgLyoqCiAg
ICAqIExvYWRzIGEgZ2l2ZW4gVVJJLiAgVGhpcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gbG9hZGlu
ZyB0aGUgcmVxdWVzdGVkIFVSSQogICAgKiBpbiB0aGUgb2JqZWN0IGltcGxlbWVudGluZwl0aGlz
IGludGVyZmFjZS4gIElmIGl0IGNhbid0IGJlIGxvYWRlZCBoZXJlCiAgICAqIGhvd2V2ZXIsIHRo
ZSBVUkwgZGlzcGF0Y2hlciB3aWxsIGdvIHRocm91Z2ggaXRzIG5vcm1hbCBwcm9jZXNzIG9mIGNv
bnRlbnQKICAgICogbG9hZGluZy4KICAgICoKQEAgLTU5Nyw5ICs1OTcsNjcgQEAgaW50ZXJmYWNl
IG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKICAgICovCiAgIGF0dHJpYnV0ZSBuc0lBdG9tIHBh
cmVudENoYXJzZXQ7CiAKICAgLyoKICAgICogSW4gYSBjaGlsZCBkb2NzaGVsbCwgdGhpcyBpcyB0
aGUgc291cmNlIG9mIHBhcmVudENoYXJzZXQKICAgICogQHNlZSBuc0lQYXJzZXIKICAgICovCiAg
IGF0dHJpYnV0ZSBQUkludDMyIHBhcmVudENoYXJzZXRTb3VyY2U7CisKKyAgLyoqCisgICAqIFRo
ZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2NzaGVsbC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlIG9mIHRoZSBhc3NvY2lhdGVkIElGUkFNRSBv
ciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYKKyAgICogZXhpc3RlbnQuIFNlZSB0aGUgSFRN
TDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBUaGVzZSBmbGFncyBvbiB0aGUgZG9jc2hl
bGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1
dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuIFRoZXkgYXJlIG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcg
bmV3CisgICAqIGNvbnRlbnQsIHNhbmRib3ggZmxhZ3MgYXJlIGFsc28gaW1tdXRhYmx5IHNldCBv
biB0aGUgZG9jdW1lbnQgd2hlbiBpdCBpcworICAgKiBsb2FkZWQuCisgICAqIFRoZSBzYW5kYm94
IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94IGZsYWdzIG9uIGl0cwor
ICAgKiBkb2NzaGVsbCBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVudCwgaWYgYW55LgorICAgKi8K
KyAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdzOworCisgIC8qKgorICAgKiBU
aGlzIGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgYnJvd3NpbmcgY29udGV4
dHMgb3RoZXIgdGhhbgorICAgKiB0aGUgc2FuZGJveGVkIGJyb3dzaW5nIGNvbnRleHQgaXRzZWxm
IChvciBicm93c2luZyBjb250ZXh0cyBmdXJ0aGVyCisgICAqIG5lc3RlZCBpbnNpZGUgaXQpLCBh
bmQgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0LgorICAgKi8KKyAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBTQU5EQk9YRURfTkFWSUdBVElPTiAgPSAweDE7CisKKyAgLyoqCisgICAqIFRoaXMg
ZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyB0aGVpciB0b3AtbGV2ZWwgYnJv
d3NpbmcKKyAgICogY29udGV4dC4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJP
WEVEX1RPUExFVkVMX05BVklHQVRJT04gPSAweDI7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBw
cmV2ZW50cyBjb250ZW50IGZyb20gaW5zdGFudGlhdGluZyBwbHVnaW5zLCB3aGV0aGVyIHVzaW5n
IHRoZQorICAgKiBlbWJlZCBlbGVtZW50LCB0aGUgb2JqZWN0IGVsZW1lbnQsIHRoZSBhcHBsZXQg
ZWxlbWVudCwgb3IgdGhyb3VnaAorICAgKiBuYXZpZ2F0aW9uIG9mIGEgbmVzdGVkIGJyb3dzaW5n
IGNvbnRleHQsIHVubGVzcyB0aG9zZSBwbHVnaW5zIGNhbiBiZQorICAgKiBzZWN1cmVkLgorICAg
Ki8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfUExVR0lOUyA9IDB4NDsKKworICAv
KioKKyAgICogVGhpcyBmbGFnIGZvcmNlcyBjb250ZW50IGludG8gYSB1bmlxdWUgb3JpZ2luLCB0
aHVzIHByZXZlbnRpbmcgaXQgZnJvbQorICAgKiBhY2Nlc3Npbmcgb3RoZXIgY29udGVudCBmcm9t
IHRoZSBzYW1lIG9yaWdpbi4KKyAgICogVGhpcyBmbGFnIGFsc28gcHJldmVudHMgc2NyaXB0IGZy
b20gcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gdGhlCisgICAqIGRvY3VtZW50LmNvb2tpZSBJ
REwgYXR0cmlidXRlLCBhbmQgYmxvY2tzIGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAqLwor
ICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9PUklHSU4gPSAweDg7CisKKyAgLyoqCisg
ICAqIFRoaXMgZmxhZyBibG9ja3MgZm9ybSBzdWJtaXNzaW9uLgorICAgKi8KKyAgY29uc3QgdW5z
aWduZWQgbG9uZyBTQU5EQk9YRURfRk9STVMgPSAweDEwOworCisgIC8qKgorICAgKiBUaGlzIGZs
YWcgYmxvY2tzIHNjcmlwdCBleGVjdXRpb24uCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25n
IFNBTkRCT1hFRF9TQ1JJUFRTID0gMHgyMDsKKworICAvKioKKyAgICogVGhpcyBmbGFnIGJsb2Nr
cyBmZWF0dXJlcyB0aGF0IHRyaWdnZXIgYXV0b21hdGljYWxseSwgc3VjaCBhcworICAgKiBhdXRv
bWF0aWNhbGx5IHBsYXlpbmcgYSB2aWRlbyBvciBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIGEgZm9y
bSBjb250cm9sLgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfQVVUT01B
VElDX0ZFQVRVUkVTID0gMHg0MDsKIH07CmRpZmYgLS1naXQgYS9kb20vYmFzZS9uc0dsb2JhbFdp
bmRvdy5jcHAgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKLS0tIGEvZG9tL2Jhc2UvbnNH
bG9iYWxXaW5kb3cuY3BwCisrKyBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcApAQCAtODIx
OCwxNiArODIxOCwyMiBAQCBuc0dsb2JhbFdpbmRvdzo6R2V0U2Vzc2lvblN0b3JhZ2UobnNJRE9N
CiAgIGlmICghbVNlc3Npb25TdG9yYWdlKSB7CiAgICAgKmFTZXNzaW9uU3RvcmFnZSA9IG5zbnVs
bDsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAg
ICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAorICAg
IC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAg
ICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9jICYm
IChtRG9jLT5TYW5kYm94RmxhZ3MoKSAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKSkg
eworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAg
bnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2Vzc2lvblN0b3JhZ2VGb3JQcmluY2lwYWwocHJp
bmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvY3VtZW50VVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobVNlc3Npb25T
dG9yYWdlKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogI2lmZGVmIFBSX0xP
R0dJTkcKICAgICBpZiAoUFJfTE9HX1RFU1QoZ0RPTUxlYWtQUkxvZywgUFJfTE9HX0RFQlVHKSkg
ewpAQCAtODMwNSwxNiArODMxMSwyMiBAQCBuc0dsb2JhbFdpbmRvdzo6R2V0TG9jYWxTdG9yYWdl
KG5zSURPTVN0CiAgICAgICBkb19HZXRTZXJ2aWNlKCJAbW96aWxsYS5vcmcvZG9tL3N0b3JhZ2Vt
YW5hZ2VyOzEiLCAmcnYpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgICBu
c1N0cmluZyBkb2N1bWVudFVSSTsKICAgICBpZiAobURvY3VtZW50KSB7CiAgICAgICBtRG9jdW1l
bnQtPkdldERvY3VtZW50VVJJKGRvY3VtZW50VVJJKTsKICAgICB9CiAKKyAgICAvLyBJZiB0aGUg
ZG9jdW1lbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgLy8gZG9uJ3Qg
YWxsb3cgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAgICBpZiAobURvYyAmJiAobURvYy0+U2Fu
ZGJveEZsYWdzKCkgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJl
dHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIHJ2ID0gc3RvcmFn
ZU1hbmFnZXItPkdldExvY2FsU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50VVJJ
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZXR0ZXJfQWRkUmVmcyhtTG9jYWxTdG9yYWdlKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYs
IHJ2KTsKICAgfQogCiAgIE5TX0FERFJFRigqYUxvY2FsU3RvcmFnZSA9IG1Mb2NhbFN0b3JhZ2Up
OwogICByZXR1cm4gTlNfT0s7CmRpZmYgLS1naXQgYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURP
TUhUTUxJRnJhbWVFbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElG
cmFtZUVsZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFt
ZUVsZW1lbnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVs
ZW1lbnQuaWRsCkBAIC0zMyw0NCArMzMsNDYgQEAKICAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRo
ZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCiAgKiBh
bmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5
b3UgZG8gbm90IGRlbGV0ZQogICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1h
eSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgogICogdGhlIHRlcm1zIG9mIGFu
eSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQg
TElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVkZSAibnNJRE9NSFRNTEVsZW1lbnQuaWRs
IgorI2luY2x1ZGUgIm5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0LmlkbCIKIAogLyoqCiAgKiBU
aGUgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgaW50ZXJmYWNlIGlzIHRoZSBpbnRlcmZhY2UgdG8g
YSBbWF1IVE1MCiAgKiBpZnJhbWUgZWxlbWVudC4KICAqCiAgKiBUaGlzIGludGVyZmFjZSBpcyB0
cnlpbmcgdG8gZm9sbG93IHRoZSBET00gTGV2ZWwgMiBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBo
dHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1MLwogICoKICAqIHdpdGggY2hhbmdl
cyBmcm9tIHRoZSB3b3JrLWluLXByb2dyZXNzIFdIQVRXRyBIVE1MIHNwZWNpZmljYXRpb246CiAg
KiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLwogICov
CiAKLVtzY3JpcHRhYmxlLCB1dWlkKGQ0ZTg3MGJkLTQ1MmMtNDg2MC1iOTNjLWY0ZWUwMGJhMzNm
NildCitbc2NyaXB0YWJsZSwgdXVpZCg1MmY2MjQ0Yi1iMWY1LTRmNGMtOGZmMy03ZTE0NjMxNmY0
MTEpXQogaW50ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDogbnNJRE9NSFRNTEVsZW1l
bnQKIHsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgYWxpZ247CiAgICAg
ICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGZyYW1lQm9yZGVyOwogICAgICAgICAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBoZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0
ZSBET01TdHJpbmcgICAgICAgIGxvbmdEZXNjOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3Ry
aW5nICAgICAgICBtYXJnaW5IZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcg
ICAgICAgIG1hcmdpbldpZHRoOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBuYW1lOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzY3JvbGxpbmc7
CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNyYzsKICAgICAgICAgICAg
YXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgd2lkdGg7CiAgIC8vIEludHJvZHVjZWQgaW4gRE9N
IExldmVsIDI6CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01Eb2N1bWVudCAgIGNvbnRlbnRE
b2N1bWVudDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVdpbmRvdyAgICAgY29udGVudFdp
bmRvdzsKIAorICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3Qg
c2FuZGJveDsKIAogICAvLyBNb3ppbGxhIGV4dGVuc2lvbnMKICAgLy8gaWZyYW1lIGVsZW1lbnRz
IHJlcXVpcmUgdGhlIG1vekFsbG93RnVsbFNjcmVlbiBhdHRyaWJ1dGUgdG8gYmUgcHJlc2VudAog
ICAvLyBpZiB0aGV5J3JlIHRvIGFsbG93IGNvbnRlbnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0byBn
byBpbnRvIERPTSBmdWxsLXNjcmVlbgogICAvLyBtb2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1vemls
bGEub3JnL2luZGV4LnBocD90aXRsZT1HZWNrbzpGdWxsU2NyZWVuQVBJCiAgICAgICAgICAgIGF0
dHJpYnV0ZSBib29sZWFuICAgICAgICAgIG1vekFsbG93RnVsbFNjcmVlbjsKIH07CmRpZmYgLS1n
aXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNo
ZXIuY3BwIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dX
YXRjaGVyLmNwcAotLS0gYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9u
c1dpbmRvd1dhdGNoZXIuY3BwCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNo
ZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKQEAgLTYwMywxNiArNjAzLDMzIEBAIG5zV2luZG93
V2F0Y2hlcjo6T3BlbldpbmRvd0pTSW50ZXJuYWwobnMKICAgfQogCiAgIGlmICghbmV3RG9jU2hl
bGxJdGVtKSB7CiAgICAgLy8gV2UncmUgZ29pbmcgdG8gZWl0aGVyIG9wZW4gdXAgYSBuZXcgd2lu
ZG93IG91cnNlbHZlcyBvciBhc2sgYQogICAgIC8vIG5zSVdpbmRvd1Byb3ZpZGVyIGZvciBvbmUu
ICBJbiBlaXRoZXIgY2FzZSwgd2UnbGwgd2FudCB0byBzZXQgdGhlIHJpZ2h0CiAgICAgLy8gbmFt
ZSBvbiBpdC4KICAgICB3aW5kb3dOZWVkc05hbWUgPSB0cnVlOwogCisgICAgLy8gSWYgdGhlIHBh
cmVudCB0cnlpbmcgdG8gb3BlbiBhIG5ldyB3aW5kb3cgaXMgc2FuZGJveGVkLAorICAgIC8vIHRo
aXMgaXMgbm90IGFsbG93ZWQgYW5kIHdlIGZhaWwgaGVyZS4KKyAgICBpZiAoYVBhcmVudCkgewor
ICAgICAgbnNDT01QdHI8bnNJRE9NRG9jdW1lbnQ+IGRvbWRvYzsKKyAgICAgIGFQYXJlbnQtPkdl
dERvY3VtZW50KGdldHRlcl9BZGRSZWZzKGRvbWRvYykpOworICAgICAgbnNDT01QdHI8bnNJRG9j
dW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGRvbWRvYyk7CisKKyAgICAgIGlmIChkb2Mp
IHsKKyAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKyAgICAgICAgc2FuZGJveEZs
YWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKworICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYg
bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgcmV0dXJuIE5T
X0VSUk9SX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKICAgICAvLyBOb3cg
Y2hlY2sgd2hldGhlciBpdCdzIG9rIHRvIGFzayBhIHdpbmRvdyBwcm92aWRlciBmb3IgYSB3aW5k
b3cuICBEb24ndAogICAgIC8vIGRvIGl0IGlmIHdlJ3JlIG9wZW5pbmcgYSBkaWFsb2cgb3IgaWYg
b3VyIHBhcmVudCBpcyBhIGNocm9tZSB3aW5kb3cgb3IKICAgICAvLyBpZiB3ZSdyZSBvcGVuaW5n
IHNvbWV0aGluZyB0aGF0IGhhcyBtb2RhbCwgZGlhbG9nLCBvciBjaHJvbWUgZmxhZ3Mgc2V0Lgog
ICAgIG5zQ09NUHRyPG5zSURPTUNocm9tZVdpbmRvdz4gY2hyb21lV2luID0gZG9fUXVlcnlJbnRl
cmZhY2UoYVBhcmVudCk7CiAgICAgaWYgKCFhRGlhbG9nICYmICFjaHJvbWVXaW4gJiYKICAgICAg
ICAgIShjaHJvbWVGbGFncyAmIChuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfTU9EQUwgICAg
ICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hS
T01FX09QRU5BU19ESUFMT0cgfCAKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93
c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0NIUk9NRSkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>596250</attachid>
            <date>2012-02-10 18:40:31 -0800</date>
            <delta_ts>2012-02-13 18:09:45 -0800</delta_ts>
            <desc>WIP - iframe sandbox v2</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>45404</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMmQ0MDllZDU2OWUwZmJmMGM1MmNkM2YzNWRj
M2UwNjA4OWYwMjVlMQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtMTg4MywzNSArMTg4MywzNyBAQCBwdWJsaWM6CiAgICAqIGZy
b20gdGhlIGRvY3VtZW50IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQg
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsK
IAogICAvKioKICAgICogU2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRo
ZSBnaXZlbiBjaGFubmVsLCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBv
ZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JB
Ym91dEJsYW5rIGlzIHRydWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHBy
aW5jaXBhbCBzZXQgdXAgb24gaXQuCi0gICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LiBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQg
b24gdGhlIGNoYW5uZWwsIGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAor
ICAgKiBmcm9tIHRoZSBjaGFubmVsLgogICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIg
dGhlIHByaW5jaXBhbCB3YXMgc2V0IHVwIGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5l
bC4KICAgICovCiAgIHN0YXRpYyBib29sIFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCog
YUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNo
YW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkq
IGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJv
dXRCbGFuayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9y
QWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VP
d25lciA9IGZhbHNlKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcm
IGFCaW5hcnlEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJh
c2U2NFN0cmluZyk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBh
QXNjaWlTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURh
dGEpOwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFz
c2VkIGluIHBhcmFtZXRlciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0
eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAg
KiBmdW5jdGlvbmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZv
cm0gb3duZXIuCiAgICAqIE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29t
cGxldGUgbWFrZXMgc2Vuc2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAg
ICogQHBhcmFtIGFJbnB1dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0
IGNhbid0IGJlIG51bGwuCiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBo
YXMgYXV0b2NvbXBsZXRlIGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21w
bGV0ZUVuYWJsZWQobnNJRE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIApAQCAtMTkyMiwx
NiArMTkyNCwyNiBAQCBwdWJsaWM6CiAgICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFVSSXMu
ICBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gVVJJJ3MgcHJlcGF0aCBpcwogICAgKiBpbiB0aGUg
bGlzdCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICoKICAgICogQ29tcGFyaXNvbnMgYXJlIGNh
c2UtaW5zZW5zaXRpdmUsIGFuZCB3aGl0ZXNwYWNlIGJldHdlZW4gZWxlbWVudHMgb2YgdGhlCiAg
ICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGlzIGlnbm9yZWQuCiAgICAqLwogICBzdGF0aWMgYm9v
bCBVUklJc0Nocm9tZU9ySW5QcmVmKG5zSVVSSSAqYVVSSSwgY29uc3QgY2hhciAqYVByZWYpOwog
CisgIC8qKgorICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0
cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICAgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBjb252
ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxseS4KKyAgICoKKyAgICog
QHBhcmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAg
ICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZsYWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIg
UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhjb25zdCBuc0FTdHJpbmcmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZGJveEF0dHIpOworCiBw
cml2YXRlOgogICBzdGF0aWMgYm9vbCBJbml0aWFsaXplRXZlbnRUYWJsZSgpOwogCiAgIHN0YXRp
YyBuc3Jlc3VsdCBFbnN1cmVTdHJpbmdCdW5kbGUoUHJvcGVydGllc0ZpbGUgYUZpbGUpOwogCiAg
IHN0YXRpYyBuc0lET01TY3JpcHRPYmplY3RGYWN0b3J5ICpHZXRET01TY3JpcHRPYmplY3RGYWN0
b3J5KCk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEhvbGRTY3JpcHRPYmplY3QoUFJVaW50MzIgYUxh
bmdJRCwgdm9pZCogYU9iamVjdCk7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25z
SURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKLS0tIGEvY29u
dGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNJRG9jdW1lbnQuaApAQCAtMTE5LDE4ICsxMTksMTggQEAgY2xhc3MgTG9hZGVyOwogCiBuYW1l
c3BhY2UgZG9tIHsKIGNsYXNzIExpbms7CiBjbGFzcyBFbGVtZW50OwogfSAvLyBuYW1lc3BhY2Ug
ZG9tCiB9IC8vIG5hbWVzcGFjZSBtb3ppbGxhCiAKICNkZWZpbmUgTlNfSURPQ1VNRU5UX0lJRCBc
Ci17IDB4MjgzZWMyN2QsIDB4NWIyMywgMHg0OWIyLCBcDQotICB7IDB4OTQsIDB4ZDksIDB4OSwg
MHhiNSwgMHhkYiwgMHg0NSwgMHgzMCwgMHg3MyB9IH0NCit7IDB4NTdmZTQ0YWUsIDB4NjY1Niwg
MHg0NGI4LCBcCisgIHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhhNywgMHg0MywgMHgyOCwgMHhiZSwg
MHg4NiB9IH0KIAogCiAvLyBGbGFnIGZvciBBZGRTdHlsZVNoZWV0KCkuCiAjZGVmaW5lIE5TX1NU
WUxFU0hFRVRfRlJPTV9DQVRBTE9HICAgICAgICAgICAgICAgICgxIDw8IDApCiAKIC8vIEVudW0g
Zm9yIHJlcXVlc3RpbmcgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZG9jdW1lbnQgd2hlbiBjcmVhdGlu
ZyBhIGRvYwogZW51bSBEb2N1bWVudEZsYXZvciB7CiAgIERvY3VtZW50Rmxhdm9yTGVnYWN5R3Vl
c3MsIC8vIGNvbXBhdCB3aXRoIG9sZCBjb2RlIHVudGlsIG1hZGUgSFRNTDUtY29tcGxpYW50CkBA
IC00NTYsMTcgKzQ1NiwyNiBAQCBwdWJsaWM6CiAgICAqIGNhbGxlcnMgYXJlIGV4cGVjdGVkIHRv
IHRha2UgYWN0aW9uIGFzIG5lZWRlZCBpZiB0aGV5IHdhbnQgdGhpcwogICAgKiBjaGFuZ2UgdG8g
YWN0dWFsbHkgY2hhbmdlIGFueXRoaW5nIGltbWVkaWF0ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0
aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9wdGlvbnMoUFJVaW50MzIgYUJpZGlPcHRpb25z
KQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJpZGlPcHRpb25zOwogICB9Ci0gIAorCisgIC8q
KgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQuCisgICAqIEBz
ZWUgbnNJRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWlu
dDMyIFNhbmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsK
KyAgfQorCiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxz
byBnZXQgc2V0IGZyb20gb3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncyku
CiAgICAqLwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmll
bGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRl
ckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7
CiAKICAgLyoqCkBAIC0xNzk3LDE2ICsxODA2LDIxIEBAIHByb3RlY3RlZDoKICAgLy8gSWYgbUlz
U3RhdGljRG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBv
cmlnaW5hbAogICAvLyBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5h
bERvY3VtZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQuICBX
aGF0IHRoaXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5o
CiAgIFBSVWludDMyIG1CaWRpT3B0aW9uczsKIAorICAvLyBUaGUgc2FuZGJveCBmbGFncyBvbiB0
aGUgZG9jdW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJp
YnV0ZSBvZiB0aGUKKyAgLy8gYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNv
bnRlbnQsIGlmIGV4aXN0ZW50LiBUaGVzZSBhcmUgc2V0IGF0IGxvYWQgdGltZSBhbmQKKyAgLy8g
YXJlIGltbXV0YWJsZSAtIHNlZSBuc0lEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJsZSBmbGFn
cy4KKyAgUFJVaW50MzIgbVNhbmRib3hGbGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5n
dWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAK
ICAgLy8gVGhlIGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0
cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRl
bnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9j
b250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3Jj
L25zQ29udGVudFV0aWxzLmNwcApAQCAtNzM5LDE2ICs3MzksNjIgQEAgbnNDb250ZW50VXRpbHM6
OkdldFBhcnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1Bh
cnNlclNlcnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikp
IHsKICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVy
biBzUGFyc2VyU2VydmljZTsKIH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJz
ZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVj
dGl2ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5
LgorICoKKyAqIEBwYXJhbSBhQXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUKKyAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLwor
UFJVaW50MzIKK25zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNv
bnN0IG5zQVN0cmluZyYgc2FuZGJveEF0dHJWYWx1ZSkKK3sKKyAgLy8gSWYgdGhlcmUncyBhIHNh
bmRib3ggYXR0cmlidXRlIGF0IGFsbCAoYW5kIHRoZXJlIGlzIGlmIHRoaXMgaXMgYmVpbmcKKyAg
Ly8gY2FsbGVkKSwgc3RhcnQgb2ZmIGJ5IHNldHRpbmcgYWxsIHRoZSByZXN0cmljdGlvbiBmbGFn
cy4KKyAgUFJVaW50MzIgb3V0ID0gbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9OQVZJR0FUSU9OIHwK
KyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gfAorICAgIG5z
SURvY1NoZWxsOjpTQU5EQk9YRURfUExVR0lOUyB8IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJ
R0lOIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TIHwgbnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9TQ1JJUFRTIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0FVVE9NQVRJQ19G
RUFUVVJFUzsKKworICBpZiAoIXNhbmRib3hBdHRyVmFsdWUuSXNFbXB0eSgpKSB7CisgICAgLy8g
VGhlIHNlcGFyYXRvciBvcHRpb25hbCBmbGFnIGlzIHVzZWQgYmVjYXVzZSB0aGUgSFRNTDUgc3Bl
YyBzYXlzIGFueQorICAgIC8vIHdoaXRlc3BhY2UgaXMgb2sgYXMgYSBzZXBhcmF0b3IsIHdoaWNo
IGlzIHdoYXQgdGhpcyBkb2VzLgorICAgIEhUTUxTcGxpdE9uU3BhY2VzVG9rZW5pemVyIHRva2Vu
aXplcihzYW5kYm94QXR0clZhbHVlLCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6
ZXJUZW1wbGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9P
UFRJT05BTCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAg
ICAgbnNEZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisK
KyAgICAgIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRzIikp
IHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFM7CisgICAg
ICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNhbWUtb3Jp
Z2luIikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTjsK
KyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9y
bXMiKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfRk9STVM7Cisg
ICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNjcmlw
dHMiKSkgeworICAgICAgICAvLyBhbGxvdy1zY3JpcHRzIHJlbW92ZXMgYm90aCBTQU5EQk9YRURf
U0NSSVBUUyBhbmQKKyAgICAgICAgLy8gU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUy4KKyAg
ICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFM7CisgICAgICAgIG91
dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisgICAgICB9
IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXRvcC1uYXZpZ2F0
aW9uIikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVM
X05BVklHQVRJT047CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIG91dDsKK30KIAog
I2lmZGVmIE1PWl9YVEYKIG5zSVhURlNlcnZpY2UqCiBuc0NvbnRlbnRVdGlsczo6R2V0WFRGU2Vy
dmljZSgpCiB7CiAgIGlmICghc1hURlNlcnZpY2UpIHsKICAgICBuc3Jlc3VsdCBydiA9IENhbGxH
ZXRTZXJ2aWNlKGtYVEZTZXJ2aWNlQ0lELCAmc1hURlNlcnZpY2UpOwogICAgIGlmIChOU19GQUlM
RUQocnYpKSB7CkBAIC02MDMxLDE3ICs2MDc3LDE4IEBAIG5zQ29udGVudFV0aWxzOjpVUklJbmhl
cml0c1NlY3VyaXR5Q29udGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJlc3VsdCk7
CiB9CiAKIC8vIHN0YXRpYwogYm9vbAogbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVy
KG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lcikKIHsKICAgLy8KICAgLy8gU2V0IHRoZSBvd25l
ciBvZiB0aGUgY2hhbm5lbCwgYnV0IG9ubHkgZm9yIGNoYW5uZWxzIHRoYXQgY2FuJ3QKICAgLy8g
cHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dC4KICAgLy8KICAgLy8gWFhYOiBJdCBz
ZWVtcyB3cm9uZyB0aGF0IHRoZSBvd25lciBpcyBpZ25vcmVkIC0gZXZlbiBpZiBvbmUgaXMKICAg
Ly8gICAgICBzdXBwbGllZCkgdW5sZXNzIHRoZSBVUkkgaXMgamF2YXNjcmlwdCBvciBkYXRhIG9y
IGFib3V0OmJsYW5rLgogICAvLyBYWFg6IElmIHRoaXMgaXMgZXZlciBjaGFuZ2VkLCBjaGVjayBh
bGwgY2FsbGVycyBmb3Igd2hhdCBvd25lcnMKQEAgLTYwNDksMjMgKzYwOTYsMjcgQEAgbnNDb250
ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaQogICAvLyAgICAgIGNvbW1lbnRzIGlu
IG5zRG9jU2hlbGw6OkxvYWRVUkkgd2hlcmUgd2UgZmFsbCBiYWNrIG9uCiAgIC8vICAgICAgaW5o
ZXJpdGluZyB0aGUgb3duZXIgaWYgY2FsbGVkIGZyb20gY2hyb21lLiAgVGhhdCB3b3VsZCBiZQog
ICAvLyAgICAgIHZlcnkgd3JvbmcgaWYgdGhpcyBjb2RlIGNoYW5nZWQgYW55dGhpbmcgYnV0IGNo
YW5uZWxzIHRoYXQKICAgLy8gICAgICBjYW4ndCBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBj
b250ZXh0IQogICAvLwogICAvLyAgICAgIChDdXJyZW50bHkgY2hyb21lIFVSSXMgc2V0IHRoZSBv
d25lciB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQhCiAgIC8vICAgICAgU28gc2V0dGluZyBhIE5VTEwg
b3duZXIgd291bGQgYmUgYmFkISkKICAgLy8KKyAgLy8gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwg
dGhlIG93bmVyIHdpbGwgYmUgc2V0LCBldmVuIGZvciBhIGNoYW5uZWwgdGhhdAorICAvLyBjYW4g
cHJvdmlkZSBpdHMgb3duIHNlY3VyaXR5IGNvbnRleHQuIFRoaXMgaXMgdXNlZCBmb3IgdGhlIEhU
TUw1IElGUkFNRQorICAvLyBzYW5kYm94IGF0dHJpYnV0ZSwgc28gd2UgY2FuIGZvcmNlIHRoZSBj
aGFubmVsIChhbmQgaXRzIGRvY3VtZW50KSB0bworICAvLyBleHBsaWNpdGx5IGhhdmUgYSBudWxs
IHByaW5jaXBhbC4KICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBlY3QgVVJJSW5oZXJpdHNT
ZWN1cml0eUNvbnRleHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAgIC8vIGFib3V0OmJsYW5r
IFVSSSwgc28gZG9uJ3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0aGlzIGNhbGwgZmFpbHMu
CiAgIC8vIFRoaXMgY29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBvbmUgaW4gbnNEb2NTaGVs
bDo6SW50ZXJuYWxMb2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5nIGZvciB0aGluZ3MgdGhh
dCB3aWxsIHVzZSB0aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGluaGVyaXQgfHwgKGFTZXRV
cEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpIHsKKyAgaWYgKGFGb3Jj
ZU93bmVyIHx8ICgoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkks
ICZpbmhlcml0KSkgJiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYm
IE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSkpIHsKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIoYUxv
YWRpbmdQcmluY2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8KICAgLy8gZmls
ZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMgaXMgYSBmaWxlOiBsb2Fk
IG9wZW5lZCBmcm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVlZApkaWZmIC0tZ2l0IGEv
Y29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1
bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAorKysgYi9jb250
ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0yMzkxLDE2ICsyMzkxLDI1IEBAIG5zRG9j
dW1lbnQ6OlN0YXJ0RG9jdW1lbnRMb2FkKGNvbnN0IGNoYXIKICAgICBGaW5kQ2hhckluUmVhZGFi
bGUoJzsnLCBzZW1pY29sb24sIGVuZCk7CiAgICAgU2V0Q29udGVudFR5cGVJbnRlcm5hbChTdWJz
dHJpbmcoc3RhcnQsIHNlbWljb2xvbikpOwogICB9CiAKICAgUmV0cmlldmVSZWxldmFudEhlYWRl
cnMoYUNoYW5uZWwpOwogCiAgIG1DaGFubmVsID0gYUNoYW5uZWw7CiAKKyAgLy8gSWYgdGhpcyBk
b2N1bWVudCBpcyBiZWluZyBsb2FkZWQgYnkgYSBkb2NzaGVsbCwgY29weSBpdHMgc2FuZGJveCBm
bGFncworICAvLyB0byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11dGFibGUgYWZ0ZXIgYmVp
bmcgc2V0IGhlcmUuCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1ZXJ5
SW50ZXJmYWNlKGFDb250YWluZXIpOworCisgIGlmIChkb2NTaGVsbCkgeworICAgIG5zcmVzdWx0
IHJ2ID0gZG9jU2hlbGwtPkdldFNhbmRib3hGbGFncygmbVNhbmRib3hGbGFncyk7CisgICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKyAgfQorCiAgIG5zcmVzdWx0IHJ2ID0gSW5pdENTUCgp
OwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIHJldHVybiBOU19PSzsKIH0KIAog
bnNyZXN1bHQKIG5zRG9jdW1lbnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNl
L3NyYy9uc0ZyYW1lTG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5j
cHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAorKysgYi9jb250ZW50
L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCkBAIC0xMTMsMTYgKzExMywxOCBAQAogI2luY2x1
ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNl
cy5oIgogI2luY2x1ZGUgIm1vemlsbGEvdW51c2VkLmgiCiAjaW5jbHVkZSAibW96aWxsYS9kb20v
RWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvbGF5b3V0L1JlbmRlckZyYW1lUGFyZW50Lmgi
CiAKICNpbmNsdWRlICJqc2FwaS5oIgogCisjaW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVudC5o
IgorCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpk
b207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwogdXNpbmcgbmFtZXNwYWNlIG1v
emlsbGE6OmxheW91dDsKIHR5cGVkZWYgRnJhbWVNZXRyaWNzOjpWaWV3SUQgVmlld0lEOwogCiBj
bGFzcyBuc0FzeW5jRG9jU2hlbGxEZXN0cm95ZXIgOiBwdWJsaWMgbnNSdW5uYWJsZQogewpAQCAt
NDY4LDIwICs0NzAsNzAgQEAgbnNGcmFtZUxvYWRlcjo6UmVhbGx5U3RhcnRMb2FkaW5nSW50ZXJu
YQogICAvLyBKdXN0IHRvIGJlIHNhZmUsIHJlY2hlY2sgdXJpLgogICBydiA9IENoZWNrVVJJTG9h
ZChtVVJJVG9Mb2FkKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBuc0NPTVB0
cjxuc0lEb2NTaGVsbExvYWRJbmZvPiBsb2FkSW5mbzsKICAgbURvY1NoZWxsLT5DcmVhdGVMb2Fk
SW5mbyhnZXR0ZXJfQWRkUmVmcyhsb2FkSW5mbykpOwogICBOU19FTlNVUkVfVFJVRShsb2FkSW5m
bywgTlNfRVJST1JfRkFJTFVSRSk7CiAKLSAgLy8gV2UnbGwgdXNlIG91ciBwcmluY2lwYWwsIG5v
dCB0aGF0IG9mIHRoZSBkb2N1bWVudCBsb2FkZWQgaW5zaWRlIHVzLiAgVGhpcwotICAvLyBpcyB2
ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvIHByZXZlbnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRz
IGxvYWRlZCBpbgotICAvLyBzdWJmcmFtZXMhCi0gIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJD
b250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOworICAvLyBJcyB0aGlzIGFuIDxpZnJhbWU+IHdpdGgg
YSBzYW5kYm94IGF0dHJpYnV0ZSBvciBhIHBhcmVudCB3aGljaCBpcworICAvLyBzYW5kYm94ZWQg
PworICBuc0hUTUxJRnJhbWVFbGVtZW50ICogaWZyYW1lID0KKyAgICBuc0hUTUxJRnJhbWVFbGVt
ZW50OjpGcm9tQ29udGVudChtT3duZXJDb250ZW50KTsKKworICBQUlVpbnQzMiBzYW5kYm94Rmxh
Z3MgPSAwOworCisgIGlmIChpZnJhbWUpIHsKKyAgICBzYW5kYm94RmxhZ3MgPSBpZnJhbWUtPkdl
dFNhbmRib3hGbGFncygpOworCisgICAgUFJVaW50MzIgcGFyZW50U2FuZGJveEZsYWdzID0gMDsK
KworICAgIC8vIEdldCB0aGUgcGFyZW50J3Mgc2FuZGJveCBmbGFncywgdGhleSdyZSBuZWVkZWQg
dG8gZGV0ZXJtaW5lIGlmIHRoZQorICAgIC8vIGZyYW1lIGJlaW5nIGxvYWRlZCBuZWVkcyB0byBi
ZSBzYW5kYm94ZWQuCisgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50RG9j
U2hlbGxJdGVtOworICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IGN1ckRvY1NoZWxs
SXRlbSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG1Eb2NTaGVsbCk7CisKKyAgICBpZiAoTlNfU1VDQ0VF
REVEKGN1ckRvY1NoZWxsSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudERvY1No
ZWxsSXRlbSkpKSkgeworICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IHBhcmVudERvYyA9IGRv
X0dldEludGVyZmFjZShwYXJlbnREb2NTaGVsbEl0ZW0pOworCisgICAgICBpZiAocGFyZW50RG9j
KSB7CisgICAgICAgIHBhcmVudFNhbmRib3hGbGFncyA9IHBhcmVudERvYy0+U2FuZGJveEZsYWdz
KCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHNhbmRib3hGbGFncyB8fCBwYXJlbnRTYW5k
Ym94RmxhZ3MpIHsKKyAgICAgIGlmIChwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgICAgLy8g
VGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0cmljdGlvbnMsIG5vdCByZW1vdmUgdGhlbS4KKyAg
ICAgICAgc2FuZGJveEZsYWdzIHw9IHBhcmVudFNhbmRib3hGbGFnczsKKyAgICAgIH0KKworICAg
ICAgbURvY1NoZWxsLT5TZXRTYW5kYm94RmxhZ3Moc2FuZGJveEZsYWdzKTsKKworICAgICAgLy8g
U2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGluZyBmb3Igc2NyaXB0cyBhbmQgcGx1Z2lucyBhcyBz
cGVjaWZpZWQuCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hF
RF9TQ1JJUFRTKSB7CisgICAgICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dKYXZhc2NyaXB0KGZhbHNl
KTsKKyAgICAgIH0KKworICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5E
Qk9YRURfUExVR0lOUykgeworICAgICAgICBtRG9jU2hlbGwtPlNldEFsbG93UGx1Z2lucyhmYWxz
ZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gU2V0IHVwIHRoZSBmcmFtZSdzIHByaW5j
aXBhbC4KKyAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lO
KSB7CisgICAgLy8gVGhpcyBmcmFtZSBpcyBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9yaWdp
biwgd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lwYWwgYW5kCisgICAgLy8gdXNl
IHRoYXQgYXMgdGhlIG93bmVyLgorICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gbnVsbFByaW5j
aXBhbCA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnVsbHByaW5jaXBhbDsxIik7
CisgICAgbG9hZEluZm8tPlNldE93bmVyKG51bGxQcmluY2lwYWwpOworICB9IGVsc2UgeworICAg
IC8vIFVzZSB0aGUgJ25vcm1hbCcgcHJpbmNpcGFsIGZvciB0aGUgPGlmcmFtZT4uCisgICAgbG9h
ZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7CisgIH0KIAog
ICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwogICBydiA9IG1Pd25lckNvbnRlbnQtPk5vZGVQ
cmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKHJlZmVycmVyKSk7CiAgIE5TX0VOU1VS
RV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbG9hZEluZm8tPlNldFJlZmVycmVyKHJlZmVycmVyKTsK
IAogICAvLyBLaWNrIG9mZiB0aGUgbG9hZC4uLgpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3Ny
Yy9uc0drQXRvbUxpc3QuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKLS0tIGEv
Y29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25z
R2tBdG9tTGlzdC5oCkBAIC05MywxNyArOTMsMjEgQEAgR0tfQVRPTShhY3R1YXRlLCAiYWN0dWF0
ZSIpCiBHS19BVE9NKGFkZHJlc3MsICJhZGRyZXNzIikKIEdLX0FUT00oYWZ0ZXIsICJhZnRlciIp
CiBHS19BVE9NKGFmdGVyX2VuZCwgImFmdGVyX2VuZCIpCiBHS19BVE9NKGFmdGVyX3N0YXJ0LCAi
YWZ0ZXJfc3RhcnQiKQogR0tfQVRPTShhbGlnbiwgImFsaWduIikKIEdLX0FUT00oYWxpbmssICJh
bGluayIpCiBHS19BVE9NKGFsbCwgImFsbCIpCiBHS19BVE9NKGFsbG93ZXZlbnRzLCAiYWxsb3dl
dmVudHMiKQorR0tfQVRPTShhbGxvd2Zvcm1zLCAiYWxsb3ctZm9ybXMiKQogR0tfQVRPTShhbGxv
d25lZ2F0aXZlYXNzZXJ0aW9ucywgImFsbG93bmVnYXRpdmVhc3NlcnRpb25zIikKK0dLX0FUT00o
YWxsb3dzYW1lb3JpZ2luLCAiYWxsb3ctc2FtZS1vcmlnaW4iKQorR0tfQVRPTShhbGxvd3Njcmlw
dHMsICJhbGxvdy1zY3JpcHRzIikKK0dLX0FUT00oYWxsb3d0b3BuYXZpZ2F0aW9uLCAiYWxsb3ct
dG9wLW5hdmlnYXRpb24iKQogR0tfQVRPTShhbGxvd3VudHJ1c3RlZCwgImFsbG93dW50cnVzdGVk
IikKIEdLX0FUT00oYWx0LCAiYWx0IikKIEdLX0FUT00oYWx0ZXJuYXRlLCAiYWx0ZXJuYXRlIikK
IEdLX0FUT00oYWx3YXlzLCAiYWx3YXlzIikKIEdLX0FUT00oYW5jZXN0b3IsICJhbmNlc3RvciIp
CiBHS19BVE9NKGFuY2VzdG9yT3JTZWxmLCAiYW5jZXN0b3Itb3Itc2VsZiIpCiBHS19BVE9NKF9h
bmQsICJhbmQiKQogR0tfQVRPTShhbnksICJhbnkiKQpAQCAtODc1LDE2ICs4NzksMTcgQEAgR0tf
QVRPTShyb3dzcGFuLCAicm93c3BhbiIpCiBHS19BVE9NKHJwLCAicnAiKQogR0tfQVRPTShydCwg
InJ0IikKIEdLX0FUT00ocnRsLCAicnRsIikKIEdLX0FUT00ocnVieSwgInJ1YnkiKQogR0tfQVRP
TShydWxlLCAicnVsZSIpCiBHS19BVE9NKHJ1bGVzLCAicnVsZXMiKQogR0tfQVRPTShzLCAicyIp
CiBHS19BVE9NKHNhbXAsICJzYW1wIikKK0dLX0FUT00oc2FuZGJveCwgInNhbmRib3giKQogR0tf
QVRPTShzYmF0dHIsICJzYmF0dHIiKQogR0tfQVRPTShzY2FsZSwgInNjYWxlIikKIEdLX0FUT00o
c2NhbiwgInNjYW4iKQogR0tfQVRPTShzY2hlbWUsICJzY2hlbWUiKQogR0tfQVRPTShzY29wZSwg
InNjb3BlIikKIEdLX0FUT00oc2NvcGVkLCAic2NvcGVkIikKIEdLX0FUT00oc2NyZWVuLCAic2Ny
ZWVuIikKIEdLX0FUT00oc2NyZWVuWCwgInNjcmVlblgiKQpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQv
c3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMv
bnNIVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC02ODQsMTcgKzY4NCwyNSBAQCBuc0hUTUxGb3JtRWxl
bWVudDo6RG9TdWJtaXRPclJlc2V0KG5zRXZlCiAgICAgcmV0dXJuIERvUmVzZXQoKTsKICAgfQog
CiAgIGlmIChOU19GT1JNX1NVQk1JVCA9PSBhTWVzc2FnZSkgewogICAgIC8vIERvbid0IHN1Ym1p
dCBpZiB3ZSdyZSBub3QgaW4gYSBkb2N1bWVudC4KICAgICBpZiAoIWRvYykgewogICAgICAgcmV0
dXJuIE5TX09LOwogICAgIH0KLSAgICByZXR1cm4gRG9TdWJtaXQoYUV2ZW50KTsKKyAgICAvLyBE
b24ndCBzdWJtaXQgaWYgd2UncmUgaW4gYSBzYW5kYm94ZWQgZnJhbWUgYW5kIGZvcm0gc3VibWl0
CisgICAgLy8gaXMgZGlzYWJsZWQuCisgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gZG9jLT5T
YW5kYm94RmxhZ3MoKTsKKworICAgIGlmICghKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpT
QU5EQk9YRURfRk9STVMpKSB7CisgICAgICByZXR1cm4gRG9TdWJtaXQoYUV2ZW50KTsKKyAgICB9
CisKKwlyZXR1cm4gTlNfT0s7CiAgIH0KIAogICBNT1pfQVNTRVJUKGZhbHNlKTsKICAgcmV0dXJu
IE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNIVE1MRm9ybUVsZW1lbnQ6OkRvUmVzZXQoKQpkaWZm
IC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3Bw
IGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCi0tLSBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTMzLDgx
ICszMywzMyBAQAogICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2Ug
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgogICogdGhlIHRlcm1zIG9mIGFueSBvbmUg
b2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5T
RSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVkZSAibW96aWxsYS9VdGlsLmgiCiAKICNpbmNsdWRl
ICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxGcmFt
ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01Eb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zSURP
TUdldFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5z
TWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIm5zRE9NRXJyb3IuaCIKLSNpbmNsdWRlICJu
c1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zSFRN
TElGcmFtZUVsZW1lbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1l
c3BhY2UgbW96aWxsYTo6ZG9tOwogCi1jbGFzcyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGlj
IG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBw
dWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
LCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLXsKLXB1YmxpYzoKLSAgbnNIVE1MSUZyYW1l
RWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCi0gICAgICAg
ICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96
aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOwotICB2aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVt
ZW50KCk7Ci0KLSAgLy8gbnNJU3VwcG9ydHMKLSAgTlNfREVDTF9JU1VQUE9SVFNfSU5IRVJJVEVE
Ci0KLSAgLy8gbnNJRE9NTm9kZQotICBOU19GT1JXQVJEX05TSURPTU5PREUobnNHZW5lcmljSFRN
TEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUVsZW1lbnQKLSAgTlNfRk9SV0FSRF9OU0lE
T01FTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1M
RWxlbWVudAotICBOU19GT1JXQVJEX05TSURPTUhUTUxFTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFt
ZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAotICBOU19ERUNMX05T
SURPTUhUTUxJRlJBTUVFTEVNRU5UCi0KLSAgLy8gbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLSAgTlNf
REVDTF9OU0lET01HRVRTVkdET0NVTUVOVAotCi0gIC8vIG5zSUNvbnRlbnQKLSAgdmlydHVhbCBi
b29sIFBhcnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpOwotICBOU19JTUVUSE9EXyhib29s
KSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKLSAg
dmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5j
dGlvbigpIGNvbnN0OwotCi0gIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFO
b2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0OwotICB2aXJ0dWFsIG5zWFBDQ2xhc3NJ
bmZvKiBHZXRDbGFzc0luZm8oKTsKLX07Ci0KLQogTlNfSU1QTF9OU19ORVdfSFRNTF9FTEVNRU5U
X0NIRUNLX1BBUlNFUihJRnJhbWUpCiAKLQogbnNIVE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZy
YW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJz
ZXIpCiAgIDogbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFyc2Vy
KQogewogfQogCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojp+bnNIVE1MSUZyYW1lRWxlbWVudCgpCiB7
CisgIGlmIChtU2FuZGJveFRva2VuTGlzdCkKKyAgICBtU2FuZGJveFRva2VuTGlzdC0+RHJvcFJl
ZmVyZW5jZSgpOwogfQogCiAKIE5TX0lNUExfQUREUkVGX0lOSEVSSVRFRChuc0hUTUxJRnJhbWVF
bGVtZW50LG5zR2VuZXJpY0VsZW1lbnQpCiBOU19JTVBMX1JFTEVBU0VfSU5IRVJJVEVEKG5zSFRN
TElGcmFtZUVsZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIAogRE9NQ0lfTk9ERV9EQVRBKEhUTUxJ
RnJhbWVFbGVtZW50LCBuc0hUTUxJRnJhbWVFbGVtZW50KQogCkBAIC0xNTAsMTYgKzEwMiwyOCBA
QCBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRDb250ZW50V2luZG93KG5zCiB9CiAKIE5TX0lNRVRI
T0RJTVAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldFNWR0RvY3VtZW50KG5zSURPTURvY3VtZW50
ICoqYVJlc3VsdCkKIHsKICAgcmV0dXJuIEdldENvbnRlbnREb2N1bWVudChhUmVzdWx0KTsKIH0K
IAorTlNfSU1FVEhPRElNUAorbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U2FuZGJveChuc0lET01E
T01TZXR0YWJsZVRva2VuTGlzdCoqIGFTYW5kYm94KQoreworICBpZiAoIW1TYW5kYm94VG9rZW5M
aXN0KSB7CisgICAgbVNhbmRib3hUb2tlbkxpc3QgPSBuZXcgbnNET01TZXR0YWJsZVRva2VuTGlz
dCh0aGlzLCBuc0drQXRvbXM6OnNhbmRib3gpOworICB9CisKKyAgTlNfQUREUkVGKCphU2FuZGJv
eCA9IG1TYW5kYm94VG9rZW5MaXN0KTsKKworICByZXR1cm4gTlNfT0s7Cit9CisKIGJvb2wKIG5z
SFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFS
ZXN1bHQpCiB7CiAgIGlmIChhTmFtZXNwYWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKICAg
ICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6Om1hcmdpbndpZHRoKSB7CkBAIC0xNzgsMTYg
KzE0MiwyMiBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShQUkluCiAgICAg
ICByZXR1cm4gUGFyc2VGcmFtZWJvcmRlclZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQog
ICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6c2Nyb2xsaW5nKSB7CiAgICAgICByZXR1
cm4gUGFyc2VTY3JvbGxpbmdWYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBpZiAo
YUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OmFsaWduKSB7CiAgICAgICByZXR1cm4gUGFyc2VBbGln
blZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQorICAgIGlmIChhQXR0cmlidXRlID09IG5z
R2tBdG9tczo6c2FuZGJveCkgeworICAgICAgLy8gVGhlIHNhbmRib3ggYXR0cmlidXRlIG5lZWRz
IHRvIGJlIHBhcnNlZCBhcyBhbiBhdG9tIGFycmF5IHNvCisgICAgICAvLyBpdCBjYW4gYmUgZXhw
b3NlZCBhcyBhIERPTVNldHRhYmxlVG9rZW5MaXN0LgorICAgICAgYVJlc3VsdC5QYXJzZUF0b21B
cnJheShhVmFsdWUpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICB9CiAKICAgcmV0dXJu
IG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKGFOYW1lc3BhY2VJRCwg
YUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFWYWx1ZSwgYVJlc3VsdCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBNYXBBdHRyaWJ1dGVz
SW50b1J1bGUoY29uc3QgbnNNYXBwZWRBdHRyaWJ1dGVzKiBhQXR0cmlidXRlcywKQEAgLTI2OCw4
ICsyMzgsMzQgQEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6SXNBdHRyaWJ1dGVNYXBwZWQoYwogCiAK
IG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEF0dHJp
YnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0CiB7CiAgIHJldHVybiAmTWFwQXR0cmlidXRlc0lu
dG9SdWxlOwogfQogCituc3Jlc3VsdAorbnNIVE1MSUZyYW1lRWxlbWVudDo6QWZ0ZXJTZXRBdHRy
KFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyogYVZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhTm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0g
bnNHa0F0b21zOjpzYW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkg
eworICAgIC8vIFBhcnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBh
bmQgaWYgd2UgaGF2ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFw
cHJvcHJpYXRlbHkuCisgICAgaWYgKG1GcmFtZUxvYWRlcikgeworICAgICAgbnNDT01QdHI8bnNJ
RG9jU2hlbGw+IGRvY3NoZWxsID0gbUZyYW1lTG9hZGVyLT5HZXRFeGlzdGluZ0RvY1NoZWxsKCk7
CisKKyAgICAgIGlmIChkb2NzaGVsbCkgeworICAgICAgICBQUlVpbnQzMiBuZXdGbGFncyA9IDA7
CisgICAgICAgIC8vIElmIGEgTlVMTCBhVmFsdWUgaXMgcGFzc2VkIGluLCB3ZSB3YW50IHRvIGNs
ZWFyIHRoZSBzYW5kYm94IGZsYWdzCisgICAgICAgIC8vIHdoaWNoIHdlIHdpbGwgZG8gYnkgc2V0
dGluZyB0aGVtIHRvIDAuCisgICAgICAgIGlmIChhVmFsdWUpIHsKKyAgICAgICAgICBuZXdGbGFn
cyA9IG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKCphVmFsdWUp
OworICAgICAgICB9CisgICAgICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3RmxhZ3Mp
OworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6OkFm
dGVyU2V0QXR0cihhTmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOb3RpZnkpOworCit9CmRpZmYgLS1naXQgYS9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJh
bWVFbGVtZW50LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0
aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8q
ICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BM
IDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1Ympl
Y3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxp
Y2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJh
c2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAq
CisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29k
ZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMK
KyAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3Jl
YXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5OAorICog
dGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRy
aWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZp
bGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwKKyAq
IG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3Ig
bGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0
aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFi
b3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEws
IGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNp
b24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRo
IHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwg
b3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92
ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisg
KiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgor
ICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNsdWRlICJtb3pp
bGxhL1V0aWwuaCIKKworI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5j
bHVkZSAibnNHZW5lcmljSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRnJh
bWVFbGVtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0lE
T01HZXRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50LmgiCisjaW5j
bHVkZSAibnNHa0F0b21zLmgiCisjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJu
c01hcHBlZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJuc0RPTUVycm9yLmgiCisjaW5jbHVkZSAi
bnNSdWxlRGF0YS5oIgorI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRlICJuc0RP
TVNldHRhYmxlVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKKworY2xh
c3MgbnNIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50
CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUhUTUxJRnJhbWVFbGVt
ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUdldFNWR0RvY3Vt
ZW50Cit7CitwdWJsaWM6CisgIG5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxu
c0lOb2RlSW5mbz4gYU5vZGVJbmZvLAorICAgICAgICAgICAgICAgICAgICAgIG1vemlsbGE6OmRv
bTo6RnJvbVBhcnNlciBhRnJvbVBhcnNlciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZST01fUEFSU0VS
KTsKKyAgdmlydHVhbCB+bnNIVE1MSUZyYW1lRWxlbWVudCgpOworCisgIC8vIG5zSVN1cHBvcnRz
CisgIE5TX0RFQ0xfSVNVUFBPUlRTX0lOSEVSSVRFRAorCisgIC8vIG5zSURPTU5vZGUKKyAgTlNf
Rk9SV0FSRF9OU0lET01OT0RFKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKKworICAvLyBu
c0lET01FbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJh
bWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NSFRNTEVsZW1lbnQKKyAgTlNfRk9SV0FSRF9OU0lE
T01IVE1MRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9N
SFRNTElGcmFtZUVsZW1lbnQKKyAgTlNfREVDTF9OU0lET01IVE1MSUZSQU1FRUxFTUVOVAorCisg
IC8vIG5zSURPTUdldFNWR0RvY3VtZW50CisgIE5TX0RFQ0xfTlNJRE9NR0VUU1ZHRE9DVU1FTlQK
KworICAvLyBuc0lDb250ZW50CisgIHZpcnR1YWwgYm9vbCBQYXJzZUF0dHJpYnV0ZShQUkludDMy
IGFOYW1lc3BhY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSog
YUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3Ry
aW5nJiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVl
JiBhUmVzdWx0KTsKKyAgTlNfSU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1dGVNYXBwZWQoY29uc3Qg
bnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CisgIHZpcnR1YWwgbnNNYXBSdWxlVG9BdHRyaWJ1
dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdDsKKworICB2aXJ0dWFs
IG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5vZGUgKiphUmVzdWx0
KSBjb25zdDsKKyAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xhc3NJbmZvKCk7CisKKyAg
dmlydHVhbCBuc3Jlc3VsdCBBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0
b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0
cmluZyogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYU5v
dGlmeSk7CisKKyAgUFJVaW50MzIgR2V0U2FuZGJveEZsYWdzKCkgeworICAgIG5zQXV0b1N0cmlu
ZyBzYW5kYm94QXR0cjsKKworICAgIGlmIChHZXRBdHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0dr
QXRvbXM6OnNhbmRib3gsIHNhbmRib3hBdHRyKSkgeworICAgICAgcmV0dXJuIG5zQ29udGVudFV0
aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKHNhbmRib3hBdHRyKTsKKyAgICB9CisK
KyAgICAvLyBObyBzYW5kYm94IGF0dHJpYnV0ZSwgbm8gc2FuZGJveCBmbGFncy4KKyAgICByZXR1
cm4gMDsKKyAgfQorCisgIHN0YXRpYyBuc0hUTUxJRnJhbWVFbGVtZW50KiBGcm9tQ29udGVudChu
c0lDb250ZW50ICphQ29udGVudCkKKyAgeworICAgIGlmIChhQ29udGVudC0+SXNIVE1MKG5zR2tB
dG9tczo6aWZyYW1lKSkKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxuc0hUTUxJRnJhbWVFbGVt
ZW50Kj4oYUNvbnRlbnQpOworICAgIHJldHVybiBuc251bGw7CisgIH0KKworcHJvdGVjdGVkOgor
ICBuc1JlZlB0cjxuc0RPTVNldHRhYmxlVG9rZW5MaXN0PiAgbVNhbmRib3hUb2tlbkxpc3Q7Cit9
OwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5j
cHAgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcAotLS0gYS9j
b250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcAorKysgYi9jb250ZW50
L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcApAQCAtMTI2NywxNiArMTI2Nywy
MSBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiB7CiAgIGFDb29r
aWUuVHJ1bmNhdGUoKTsgLy8gY2xlYXIgY3VycmVudCBjb29raWUgaW4gY2FzZSBzZXJ2aWNlIGZh
aWxzOwogICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNvb2tpZSBpc24ndCBhbiBlcnJvciBj
b25kaXRpb24uCiAKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5T
X09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFn
IGlzIHNldCwgYWNjZXNzIHRvIHJlYWQgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBp
ZiAobVNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKQorICAgIHJl
dHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29r
aWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBz
ZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBp
ZiAoc2VydmljZSkgewogICAgIC8vIEdldCBhIFVSSSBmcm9tIHRoZSBkb2N1bWVudCBwcmluY2lw
YWwuIFdlIHVzZSB0aGUgb3JpZ2luYWwKICAgICAvLyBjb2RlYmFzZSBpbiBjYXNlIHRoZSBjb2Rl
YmFzZSB3YXMgY2hhbmdlZCBieSBTZXREb21haW4KICAgICBuc0NPTVB0cjxuc0lVUkk+IGNvZGVi
YXNlVVJJOwogICAgIE5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKGNvZGVi
YXNlVVJJKSk7CiAKQEAgLTEyOTcsMTYgKzEzMDIsMjEgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENv
b2tpZShuc0FTdHJpbmcmIGFDbwogCiBOU19JTUVUSE9ESU1QCiBuc0hUTUxEb2N1bWVudDo6U2V0
Q29va2llKGNvbnN0IG5zQVN0cmluZyYgYUNvb2tpZSkKIHsKICAgaWYgKG1EaXNhYmxlQ29va2ll
QWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50
J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNldCwgYWNjZXNzIHRvIHdyaXRlIGNvb2tpZXMK
KyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6
U0FOREJPWEVEX09SSUdJTikKKyAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsK
KwogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZpY2UgaXNuJ3QgYW4gZXJyb3IKICAgbnND
T01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9IGRvX0dldFNlcnZpY2UoTlNfQ09PS0lF
U0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZpY2UgJiYgbURvY3VtZW50VVJJKSB7CiAg
ICAgbnNDT01QdHI8bnNJUHJvbXB0PiBwcm9tcHQ7CiAgICAgbnNDT01QdHI8bnNQSURPTVdpbmRv
dz4gd2luZG93ID0gR2V0V2luZG93KCk7CiAgICAgaWYgKHdpbmRvdykgewogICAgICAgd2luZG93
LT5HZXRQcm9tcHRlcihnZXR0ZXJfQWRkUmVmcyhwcm9tcHQpKTsKICAgICB9CmRpZmYgLS1naXQg
YS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxs
LmNwcAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jh
c2UvbnNEb2NTaGVsbC5jcHAKQEAgLTcyNywxNiArNzI3LDE3IEBAIG5zRG9jU2hlbGw6Om5zRG9j
U2hlbGwoKToKICAgICBtQnVzeUZsYWdzKEJVU1lfRkxBR1NfTk9ORSksCiAgICAgbUFwcFR5cGUo
bnNJRG9jU2hlbGw6OkFQUF9UWVBFX1VOS05PV04pLAogICAgIG1Mb2FkVHlwZSgwKSwKICAgICBt
TWFyZ2luV2lkdGgoLTEpLAogICAgIG1NYXJnaW5IZWlnaHQoLTEpLAogICAgIG1JdGVtVHlwZSh0
eXBlQ29udGVudCksCiAgICAgbVByZXZpb3VzVHJhbnNJbmRleCgtMSksCiAgICAgbUxvYWRlZFRy
YW5zSW5kZXgoLTEpLAorICAgIG1TYW5kYm94RmxhZ3MoMCksCiAgICAgbUNyZWF0ZWQoZmFsc2Up
LAogICAgIG1BbGxvd1N1YmZyYW1lcyh0cnVlKSwKICAgICBtQWxsb3dQbHVnaW5zKHRydWUpLAog
ICAgIG1BbGxvd0phdmFzY3JpcHQodHJ1ZSksCiAgICAgbUFsbG93TWV0YVJlZGlyZWN0cyh0cnVl
KSwKICAgICBtQWxsb3dJbWFnZXModHJ1ZSksCiAgICAgbUFsbG93RE5TUHJlZmV0Y2godHJ1ZSks
CiAgICAgbUFsbG93V2luZG93Q29udHJvbCh0cnVlKSwKQEAgLTI5MjIsMTYgKzI5MjMsNzUgQEAg
bnNEb2NTaGVsbDo6RmluZEl0ZW1XaXRoTmFtZShjb25zdCBQUlVuaQogICAgICAgICAgICAgZm91
bmRJdGVtID0gbnNudWxsOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvdW5kSXRlbSkgewog
ICAgICAgICAgICAgLy8gV2UgcmV0dXJuIGZvdW5kSXRlbSBoZXJlIGV2ZW4gaWYgaXQncyBub3Qg
YW4gYWN0aXZlCiAgICAgICAgICAgICAvLyBpdGVtIHNpbmNlIGFsbCB0aGUgbmFtZXMgd2UndmUg
ZGVhbHQgd2l0aCBzbyBmYXIgYXJlCiAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2VzIHRoYXQg
d2Ugd29uJ3QgYm90aGVyIGxvb2tpbmcgZm9yIGZ1cnRoZXIuCiAKKyAgICAgICAgICAgIC8vIElm
IG91ciBkb2N1bWVudCBpcyBzYW5kYm94ZWQsIHdlIG5lZWQgdG8gZG8gc29tZSBleHRyYSBjaGVj
a3MuCisgICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworCisgICAgICAgICAg
ICBpZiAobUNvbnRlbnRWaWV3ZXIpIHsKKyAgICAgICAgICAgICAgICBuc0lEb2N1bWVudCAqIGRv
YyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICAgICAgICAgICAgICAgIHNhbmRi
b3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChzYW5kYm94RmxhZ3MpIHsKKyAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NT
aGVsbFRyZWVJdGVtPiByb290OworICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUm9vdFRyZWVJ
dGVtKGdldHRlcl9BZGRSZWZzKHJvb3QpKTsKKworICAgICAgICAgICAgICAgIC8vIElzIHRoZSBm
b3VuZCBpdGVtIG5vdCBhIHRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0IGFuZCBub3Qgb3Vyc2Vs
ZiA/CisgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gc2VsZkFz
SXRlbSA9IHN0YXRpY19jYXN0PG5zSURvY1NoZWxsVHJlZUl0ZW0gKj4odGhpcyk7CisgICAgICAg
ICAgICAgICAgaWYgKGZvdW5kSXRlbSAhPSByb290ICYmIGZvdW5kSXRlbSAhPSBzZWxmQXNJdGVt
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFyZSB3ZSBhbiBhbmNlc3RvciBvZiB0aGUgZm91
bmRJdGVtID8KKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0FuY2VzdG9yID0gZmFsc2U7CisK
KyAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50
QXNJdGVtOworICAgICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRk
UmVmcyhwYXJlbnRBc0l0ZW0pKTsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50
QXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRy
ZWVJdGVtPiB0bXA7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0tPkdldFBh
cmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRtcCAmJiB0bXAgPT0gc2VsZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlzQW5jZXN0b3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
QXNJdGVtID0gdG1wOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc0FuY2VzdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBObywgd2Ug
YXJlIG5vdCBhbiBhbmNlc3RvciBhbmQgb3VyIGRvY3VtZW50IGlzCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBzYW5kYm94ZWQsIHdlIGNhbid0IGFsbG93IHRoaXMuCisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBUb3AgbGV2ZWwg
YnJvd3NpbmcgY29udGV4dCAtIGlzIGl0IGFuIGFuY2VzdG9yIG9mIG91cnMgPworICAgICAgICAg
ICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0ZW07Cisg
ICAgICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVu
dEFzSXRlbSkpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRt
cDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRl
cl9BZGRSZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRt
cCA9PSBmb3VuZEl0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IGFuIGFuY2VzdG9yLCBhbmQgd2UgYXJlIHNhbmRib3hlZC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9wLW5hdmlnYXRpb24gaXMgc2V0LCB3ZSBjYW4ndCBh
bGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3Mg
JiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0
ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGZvdW5kSXRlbS5zd2FwKCpfcmV0dmFsKTsKICAgICAg
ICAgICAgIHJldHVybiBOU19PSzsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEtlZXAgbG9v
a2luZwogICAgICAgICAKICAgICAvLyBGaXJzdCB3ZSBjaGVjayBvdXIgbmFtZS4KQEAgLTQ5NTYs
MTYgKzUwMTYsMzAgQEAgbnNEb2NTaGVsbDo6U2V0SXNBcHBUYWIoYm9vbCBhSXNBcHBUYWIpCiBO
U19JTUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpHZXRJc0FwcFRhYihib29sICphSXNBcHBUYWIpCiB7
CiAgICphSXNBcHBUYWIgPSBtSXNBcHBUYWI7CiAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1F
VEhPRElNUAorbnNEb2NTaGVsbDo6U2V0U2FuZGJveEZsYWdzKFBSVWludDMyIGFTYW5kYm94Rmxh
Z3MpCit7CisgIG1TYW5kYm94RmxhZ3MgPSBhU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7
Cit9CisKK05TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6OkdldFNhbmRib3hGbGFncyhQUlVpbnQz
MiAgKmFTYW5kYm94RmxhZ3MpCit7CisgICphU2FuZGJveEZsYWdzID0gbVNhbmRib3hGbGFnczsK
KyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpTZXRWaXNp
YmlsaXR5KGJvb2wgYVZpc2liaWxpdHkpCiB7CiAgICAgaWYgKCFtQ29udGVudFZpZXdlcikKICAg
ICAgICAgcmV0dXJuIE5TX09LOwogICAgIGlmIChhVmlzaWJpbGl0eSkgewogICAgICAgICBtQ29u
dGVudFZpZXdlci0+U2hvdygpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTgxNDUsMTYgKzgyMTks
MjkgQEAgbnNEb2NTaGVsbDo6SW50ZXJuYWxMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIG5z
Q09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRhcmdldEl0ZW07CiAgICAgICAgIEZpbmRJdGVt
V2l0aE5hbWUoYVdpbmRvd1RhcmdldCwgbnNudWxsLCB0aGlzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldHRlcl9BZGRSZWZzKHRhcmdldEl0ZW0pKTsKIAogICAgICAgICBuc0NPTVB0cjxu
c0lEb2NTaGVsbD4gdGFyZ2V0RG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFjZSh0YXJnZXRJdGVt
KTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNOZXdXaW5kb3cgPSBmYWxzZTsKICAgICAgICAg
aWYgKCF0YXJnZXREb2NTaGVsbCkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGRvY3NoZWxsJ3Mg
ZG9jdW1lbnQgaXMgc2FuZGJveGVkIGFuZCB3YXMgdHJ5aW5nIHRvCisgICAgICAgICAgICAvLyBu
YXZpZ2F0ZS9sb2FkIGEgZnJhbWUgaXQgd2Fzbid0IGFsbG93ZWQgdG8gYWNjZXNzLCB0aGUKKyAg
ICAgICAgICAgIC8vIEZpbmRJdGVtV2l0aE5hbWUgYWJvdmUgd2lsbCBoYXZlIHJldHVybmVkIG51
bGwgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgIC8vIGl0ZW0gLSB3ZSBkb24ndCB3YW50IHRv
IGFjdHVhbGx5IG9wZW4gYSBuZXcgd2luZG93IGluIHRoaXMgY2FzZQorICAgICAgICAgICAgLy8g
dGhvdWdoLiBDaGVjayBpZiB3ZSBhcmUgc2FuZGJveGVkIGFuZCBiYWlsIG91dCBoZXJlIGlmIHNv
LgorICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUobUNvbnRlbnRWaWV3ZXIsIE5TX0VSUk9SX0ZB
SUxVUkUpOworICAgICAgICAgICAgbnNJRG9jdW1lbnQqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5H
ZXREb2N1bWVudCgpOworICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKyAg
ICAgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICAgICAg
ICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7
CisgICAgICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IHdpbiA9CiAgICAgICAgICAgICAg
ICAgZG9fR2V0SW50ZXJmYWNlKEdldEFzU3VwcG9ydHModGhpcykpOwogICAgICAgICAgICAgTlNf
RU5TVVJFX1RSVUUod2luLCBOU19FUlJPUl9OT1RfQVZBSUxBQkxFKTsKIAogICAgICAgICAgICAg
bnNEZXBlbmRlbnRTdHJpbmcgbmFtZShhV2luZG93VGFyZ2V0KTsKICAgICAgICAgICAgIG5zQ09N
UHRyPG5zSURPTVdpbmRvdz4gbmV3V2luOwogICAgICAgICAgICAgcnYgPSB3aW4tPk9wZW4oRW1w
dHlTdHJpbmcoKSwgLy8gVVJMIHRvIGxvYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUsICAgICAgICAgIC8vIHdpbmRvdyBuYW1lCkBAIC04OTM5LDE3ICs5MDI2LDI0IEBAIG5zRG9j
U2hlbGw6OkRvVVJJTG9hZChuc0lVUkkgKiBhVVJJLAogICAgICAgICAvLyBTZXQgdGhlIHJlZmVy
cmVyIGV4cGxpY2l0bHkKICAgICAgICAgaWYgKGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVy
KSB7CiAgICAgICAgICAgICAvLyBSZWZlcnJlciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGlu
ayBjbGlja3MgaGVyZS4KICAgICAgICAgICAgIGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVm
ZXJyZXJVUkkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFs
PiBvd25lclByaW5jaXBhbChkb19RdWVyeUludGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRl
bnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkks
IHRydWUpOworCisgICAgLy8gSWYgdGhlIGNvbnRlbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2lu
IGZsYWcgc2V0LCBmb3JjZSB0aGUgcGFzc2VkIGluCisgICAgLy8gb3duZXIgKHdoaWNoIHNob3Vs
ZCBiZSBhIG51bGwgcHJpbmNpcGFsKSB0byBiZSBzZXQgb24gdGhlIGNoYW5uZWwuIElmCisgICAg
Ly8gdGhlIGZsYWcgaXNuJ3Qgc2V0LCBhbGxvdyB0aGUgY29udGVudCB0byBhc3NzdW1lIGl0cyAi
bmF0dXJhbCBkb21haW4iIGFzCisgICAgLy8gaXQgbm9ybWFsbHkgd291bGQuCisgICAgbnNDb250
ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJ
LCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TYW5kYm94
RmxhZ3MgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURvY1No
ZWxsOjpTQU5EQk9YRURfT1JJR0lOKSk7CiAKICAgICBuc0NPTVB0cjxuc0lTY3JpcHRDaGFubmVs
PiBzY3JpcHRDaGFubmVsID0gZG9fUXVlcnlJbnRlcmZhY2UoY2hhbm5lbCk7CiAgICAgaWYgKHNj
cmlwdENoYW5uZWwpIHsKICAgICAgICAgLy8gQWxsb3cgZXhlY3V0aW9uIGFnYWluc3Qgb3VyIGNv
bnRleHQgaWYgdGhlIHByaW5jaXBhbHMgbWF0Y2gKICAgICAgICAgc2NyaXB0Q2hhbm5lbC0+CiAg
ICAgICAgICAgICBTZXRFeGVjdXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhFQ1VURV9O
T1JNQUwpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgg
Yi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hl
bGwuaAorKysgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaApAQCAtNzgxLDE2ICs3ODEsMTgg
QEAgcHJvdGVjdGVkOgogICAgIC8vIENyZWF0ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUgaXMgbm90
IGV4cGVjdGVkIHRvIGNoYW5nZS4KICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtSXRl
bVR5cGU7CiAKICAgICAvLyBJbmRleCBpbnRvIHRoZSBTSFRyYW5zYWN0aW9uIGxpc3QsIGluZGlj
YXRpbmcgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50CiAgICAgLy8gdHJhbnNhY3Rpb24gYXQgdGhl
IHRpbWUgdGhhdCB0aGlzIERvY1NoZWxsIGJlZ2lucyB0byBsb2FkCiAgICAgUFJJbnQzMiAgICAg
ICAgICAgICAgICAgICAgbVByZXZpb3VzVHJhbnNJbmRleDsKICAgICBQUkludDMyICAgICAgICAg
ICAgICAgICAgICBtTG9hZGVkVHJhbnNJbmRleDsKIAorICAgIFBSVWludDMyICAgICAgICAgICAg
ICAgICAgIG1TYW5kYm94RmxhZ3M7CisKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBt
Q3JlYXRlZDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJmcmFtZXM7
CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAgICBib29s
ICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wgICAgICAg
ICAgICAgICAgICAgICAgIG1BbGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAgICAgICAg
ICAgICAgICAgICAgbUFsbG93SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAg
IG1BbGxvd0ROU1ByZWZldGNoOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxv
d1dpbmRvd0NvbnRyb2w7CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlk
bCBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNJ
RG9jU2hlbGwuaWRsCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCkBAIC02Nywx
NyArNjcsMTcgQEAgaW50ZXJmYWNlIG5zSVJlcXVlc3Q7CiBpbnRlcmZhY2UgbnNJU0hFbnRyeTsK
IGludGVyZmFjZSBuc0lMYXlvdXRIaXN0b3J5U3RhdGU7CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJv
d3NlclVJOwogaW50ZXJmYWNlIG5zSURPTVN0b3JhZ2U7CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFs
OwogaW50ZXJmYWNlIG5zSVdlYkJyb3dzZXJQcmludDsKIGludGVyZmFjZSBuc0lWYXJpYW50Owog
Ci1bc2NyaXB0YWJsZSwgdXVpZCgwNjE1ZDFhNi0zMTNmLTExZTEtYTA0My02YzYyNmQ2OTY3NWMp
XQorW3NjcmlwdGFibGUsIHV1aWQoOWIyODMzMzctMDk3ZC00ZmE4LWEyZGEtOTE2MzE4ZWFmODI4
KV0KIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiB7CiAgIC8qKgogICAgKiBM
b2FkcyBhIGdpdmVuIFVSSS4gIFRoaXMgd2lsbCBnaXZlIHByaW9yaXR5IHRvIGxvYWRpbmcgdGhl
IHJlcXVlc3RlZCBVUkkKICAgICogaW4gdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcJdGhpcyBpbnRl
cmZhY2UuICBJZiBpdCBjYW4ndCBiZSBsb2FkZWQgaGVyZQogICAgKiBob3dldmVyLCB0aGUgVVJM
IGRpc3BhdGNoZXIgd2lsbCBnbyB0aHJvdWdoIGl0cyBub3JtYWwgcHJvY2VzcyBvZiBjb250ZW50
CiAgICAqIGxvYWRpbmcuCiAgICAqCkBAIC01OTcsOSArNTk3LDY3IEBAIGludGVyZmFjZSBuc0lE
b2NTaGVsbCA6IG5zSVN1cHBvcnRzCiAgICAqLwogICBhdHRyaWJ1dGUgbnNJQXRvbSBwYXJlbnRD
aGFyc2V0OwogCiAgIC8qCiAgICAqIEluIGEgY2hpbGQgZG9jc2hlbGwsIHRoaXMgaXMgdGhlIHNv
dXJjZSBvZiBwYXJlbnRDaGFyc2V0CiAgICAqIEBzZWUgbnNJUGFyc2VyCiAgICAqLwogICBhdHRy
aWJ1dGUgUFJJbnQzMiBwYXJlbnRDaGFyc2V0U291cmNlOworCisgIC8qKgorICAgKiBUaGUgc2Fu
ZGJveCBmbGFncyBvbiB0aGUgZG9jc2hlbGwuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRo
ZSBzYW5kYm94CisgICAqIGF0dHJpYnV0ZSBvZiB0aGUgYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQ
LXByb3RlY3RhYmxlIGNvbnRlbnQsIGlmCisgICAqIGV4aXN0ZW50LiBTZWUgdGhlIEhUTUw1IHNw
ZWMgZm9yIG1vcmUgZGV0YWlscy4KKyAgICogVGhlc2UgZmxhZ3Mgb24gdGhlIGRvY3NoZWxsIHJl
ZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlLCB3
aGljaCBpcyBtb2RpZmlhYmxlLiBUaGV5IGFyZSBvbmx5IHVzZWQgd2hlbiBsb2FkaW5nIG5ldwor
ICAgKiBjb250ZW50LCBzYW5kYm94IGZsYWdzIGFyZSBhbHNvIGltbXV0YWJseSBzZXQgb24gdGhl
IGRvY3VtZW50IHdoZW4gaXQgaXMKKyAgICogbG9hZGVkLgorICAgKiBUaGUgc2FuZGJveCBmbGFn
cyBvZiBhIGRvY3VtZW50IGRlcGVuZCBvbiB0aGUgc2FuZGJveCBmbGFncyBvbiBpdHMKKyAgICog
ZG9jc2hlbGwgYW5kIG9mIGl0cyBwYXJlbnQgZG9jdW1lbnQsIGlmIGFueS4KKyAgICovCisgIGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHNhbmRib3hGbGFnczsKKworICAvKioKKyAgICogVGhpcyBm
bGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIGJyb3dzaW5nIGNvbnRleHRzIG90
aGVyIHRoYW4KKyAgICogdGhlIHNhbmRib3hlZCBicm93c2luZyBjb250ZXh0IGl0c2VsZiAob3Ig
YnJvd3NpbmcgY29udGV4dHMgZnVydGhlcgorICAgKiBuZXN0ZWQgaW5zaWRlIGl0KSwgYW5kIHRo
ZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dC4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxv
bmcgU0FOREJPWEVEX05BVklHQVRJT04gID0gMHgxOworCisgIC8qKgorICAgKiBUaGlzIGZsYWcg
cHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgdGhlaXIgdG9wLWxldmVsIGJyb3dzaW5n
CisgICAqIGNvbnRleHQuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9U
T1BMRVZFTF9OQVZJR0FUSU9OID0gMHgyOworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgcHJldmVu
dHMgY29udGVudCBmcm9tIGluc3RhbnRpYXRpbmcgcGx1Z2lucywgd2hldGhlciB1c2luZyB0aGUK
KyAgICogZW1iZWQgZWxlbWVudCwgdGhlIG9iamVjdCBlbGVtZW50LCB0aGUgYXBwbGV0IGVsZW1l
bnQsIG9yIHRocm91Z2gKKyAgICogbmF2aWdhdGlvbiBvZiBhIG5lc3RlZCBicm93c2luZyBjb250
ZXh0LCB1bmxlc3MgdGhvc2UgcGx1Z2lucyBjYW4gYmUKKyAgICogc2VjdXJlZC4KKyAgICovCisg
IGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1BMVUdJTlMgPSAweDQ7CisKKyAgLyoqCisg
ICAqIFRoaXMgZmxhZyBmb3JjZXMgY29udGVudCBpbnRvIGEgdW5pcXVlIG9yaWdpbiwgdGh1cyBw
cmV2ZW50aW5nIGl0IGZyb20KKyAgICogYWNjZXNzaW5nIG90aGVyIGNvbnRlbnQgZnJvbSB0aGUg
c2FtZSBvcmlnaW4uCisgICAqIFRoaXMgZmxhZyBhbHNvIHByZXZlbnRzIHNjcmlwdCBmcm9tIHJl
YWRpbmcgZnJvbSBvciB3cml0aW5nIHRvIHRoZQorICAgKiBkb2N1bWVudC5jb29raWUgSURMIGF0
dHJpYnV0ZSwgYW5kIGJsb2NrcyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgKi8KKyAgY29u
c3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfT1JJR0lOID0gMHg4OworCisgIC8qKgorICAgKiBU
aGlzIGZsYWcgYmxvY2tzIGZvcm0gc3VibWlzc2lvbi4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVk
IGxvbmcgU0FOREJPWEVEX0ZPUk1TID0gMHgxMDsKKworICAvKioKKyAgICogVGhpcyBmbGFnIGJs
b2NrcyBzY3JpcHQgZXhlY3V0aW9uLgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5E
Qk9YRURfU0NSSVBUUyA9IDB4MjA7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBibG9ja3MgZmVh
dHVyZXMgdGhhdCB0cmlnZ2VyIGF1dG9tYXRpY2FsbHksIHN1Y2ggYXMKKyAgICogYXV0b21hdGlj
YWxseSBwbGF5aW5nIGEgdmlkZW8gb3IgYXV0b21hdGljYWxseSBmb2N1c2luZyBhIGZvcm0gY29u
dHJvbC4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX0FVVE9NQVRJQ19G
RUFUVVJFUyA9IDB4NDA7CiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cu
Y3BwIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCi0tLSBhL2RvbS9iYXNlL25zR2xvYmFs
V2luZG93LmNwcAorKysgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKQEAgLTgyMTgsMTYg
KzgyMTgsMjIgQEAgbnNHbG9iYWxXaW5kb3c6OkdldFNlc3Npb25TdG9yYWdlKG5zSURPTQogICBp
ZiAoIW1TZXNzaW9uU3RvcmFnZSkgewogICAgICphU2Vzc2lvblN0b3JhZ2UgPSBuc251bGw7CiAK
ICAgICBuc1N0cmluZyBkb2N1bWVudFVSSTsKICAgICBpZiAobURvY3VtZW50KSB7CiAgICAgICBt
RG9jdW1lbnQtPkdldERvY3VtZW50VVJJKGRvY3VtZW50VVJJKTsKICAgICB9CiAKKyAgICAvLyBJ
ZiB0aGUgZG9jdW1lbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgLy8g
ZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAgICBpZiAobURvYyAmJiAobURv
Yy0+U2FuZGJveEZsYWdzKCkgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpIHsKKyAg
ICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zcmVz
dWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNlc3Npb25TdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBh
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb2N1bWVudFVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1TZXNzaW9uU3RvcmFn
ZSkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICNpZmRlZiBQUl9MT0dHSU5H
CiAgICAgaWYgKFBSX0xPR19URVNUKGdET01MZWFrUFJMb2csIFBSX0xPR19ERUJVRykpIHsKQEAg
LTgzMDUsMTYgKzgzMTEsMjIgQEAgbnNHbG9iYWxXaW5kb3c6OkdldExvY2FsU3RvcmFnZShuc0lE
T01TdAogICAgICAgZG9fR2V0U2VydmljZSgiQG1vemlsbGEub3JnL2RvbS9zdG9yYWdlbWFuYWdl
cjsxIiwgJnJ2KTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgbnNTdHJp
bmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5H
ZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3Vt
ZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93
IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hG
bGFncygpICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1cm4g
TlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBydiA9IHN0b3JhZ2VNYW5h
Z2VyLT5HZXRMb2NhbFN0b3JhZ2VGb3JQcmluY2lwYWwocHJpbmNpcGFsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFVSSSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVy
X0FkZFJlZnMobUxvY2FsU3RvcmFnZSkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7
CiAgIH0KIAogICBOU19BRERSRUYoKmFMb2NhbFN0b3JhZ2UgPSBtTG9jYWxTdG9yYWdlKTsKICAg
cmV0dXJuIE5TX09LOwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1M
SUZyYW1lRWxlbWVudC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVF
bGVtZW50LmlkbAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVt
ZW50LmlkbAorKysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50
LmlkbApAQCAtMzMsNDQgKzMzLDQ2IEBACiAgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJv
dmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQogICogYW5kIG90
aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRv
IG5vdCBkZWxldGUKICAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNl
IHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICAqIHRoZSB0ZXJtcyBvZiBhbnkgb25l
IG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCiAgKgogICogKioqKiogRU5EIExJQ0VO
U0UgQkxPQ0sgKioqKiogKi8KIAogI2luY2x1ZGUgIm5zSURPTUhUTUxFbGVtZW50LmlkbCIKKyNp
bmNsdWRlICJuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdC5pZGwiCiAKIC8qKgogICogVGhlIG5z
SURPTUhUTUxJRnJhbWVFbGVtZW50IGludGVyZmFjZSBpcyB0aGUgaW50ZXJmYWNlIHRvIGEgW1hd
SFRNTAogICogaWZyYW1lIGVsZW1lbnQuCiAgKgogICogVGhpcyBpbnRlcmZhY2UgaXMgdHJ5aW5n
IHRvIGZvbGxvdyB0aGUgRE9NIExldmVsIDIgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDov
L3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC8KICAqCiAgKiB3aXRoIGNoYW5nZXMgZnJv
bSB0aGUgd29yay1pbi1wcm9ncmVzcyBXSEFUV0cgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8KICAqLwogCi1b
c2NyaXB0YWJsZSwgdXVpZChkNGU4NzBiZC00NTJjLTQ4NjAtYjkzYy1mNGVlMDBiYTMzZjYpXQor
W3NjcmlwdGFibGUsIHV1aWQoNTJmNjI0NGItYjFmNS00ZjRjLThmZjMtN2UxNDYzMTZmNDExKV0K
IGludGVyZmFjZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCA6IG5zSURPTUhUTUxFbGVtZW50CiB7
CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGFsaWduOwogICAgICAgICAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBmcmFtZUJvcmRlcjsKICAgICAgICAgICAgYXR0
cmlidXRlIERPTVN0cmluZyAgICAgICAgaGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nICAgICAgICBsb25nRGVzYzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAg
ICAgICAgbWFyZ2luSGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBtYXJnaW5XaWR0aDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFt
ZTsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc2Nyb2xsaW5nOwogICAg
ICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzcmM7CiAgICAgICAgICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgICAgICAgIHdpZHRoOwogICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZl
bCAyOgogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRG9jdW1lbnQgICBjb250ZW50RG9jdW1l
bnQ7CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01XaW5kb3cgICAgIGNvbnRlbnRXaW5kb3c7
CiAKKyAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0IHNhbmRi
b3g7CiAKICAgLy8gTW96aWxsYSBleHRlbnNpb25zCiAgIC8vIGlmcmFtZSBlbGVtZW50cyByZXF1
aXJlIHRoZSBtb3pBbGxvd0Z1bGxTY3JlZW4gYXR0cmlidXRlIHRvIGJlIHByZXNlbnQKICAgLy8g
aWYgdGhleSdyZSB0byBhbGxvdyBjb250ZW50IGluIHRoZSBzdWIgZG9jdW1lbnQgdG8gZ28gaW50
byBET00gZnVsbC1zY3JlZW4KICAgLy8gbW9kZS4gU2VlIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9y
Zy9pbmRleC5waHA/dGl0bGU9R2Vja286RnVsbFNjcmVlbkFQSQogICAgICAgICAgICBhdHRyaWJ1
dGUgYm9vbGVhbiAgICAgICAgICBtb3pBbGxvd0Z1bGxTY3JlZW47CiB9OwpkaWZmIC0tZ2l0IGEv
ZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNw
cCBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hl
ci5jcHAKLS0tIGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5k
b3dXYXRjaGVyLmNwcAorKysgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3Ny
Yy9uc1dpbmRvd1dhdGNoZXIuY3BwCkBAIC02MDMsMTYgKzYwMywzMyBAQCBuc1dpbmRvd1dhdGNo
ZXI6Ok9wZW5XaW5kb3dKU0ludGVybmFsKG5zCiAgIH0KIAogICBpZiAoIW5ld0RvY1NoZWxsSXRl
bSkgewogICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGVpdGhlciBvcGVuIHVwIGEgbmV3IHdpbmRvdyBv
dXJzZWx2ZXMgb3IgYXNrIGEKICAgICAvLyBuc0lXaW5kb3dQcm92aWRlciBmb3Igb25lLiAgSW4g
ZWl0aGVyIGNhc2UsIHdlJ2xsIHdhbnQgdG8gc2V0IHRoZSByaWdodAogICAgIC8vIG5hbWUgb24g
aXQuCiAgICAgd2luZG93TmVlZHNOYW1lID0gdHJ1ZTsKIAorICAgIC8vIElmIHRoZSBwYXJlbnQg
dHJ5aW5nIHRvIG9wZW4gYSBuZXcgd2luZG93IGlzIHNhbmRib3hlZCwKKyAgICAvLyB0aGlzIGlz
IG5vdCBhbGxvd2VkIGFuZCB3ZSBmYWlsIGhlcmUuCisgICAgaWYgKGFQYXJlbnQpIHsKKyAgICAg
IG5zQ09NUHRyPG5zSURPTURvY3VtZW50PiBkb21kb2M7CisgICAgICBhUGFyZW50LT5HZXREb2N1
bWVudChnZXR0ZXJfQWRkUmVmcyhkb21kb2MpKTsKKyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50
PiBkb2MgPSBkb19RdWVyeUludGVyZmFjZShkb21kb2MpOworCisgICAgICBpZiAoZG9jKSB7Cisg
ICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgIHNhbmRib3hGbGFncyA9
IGRvYy0+U2FuZGJveEZsYWdzKCk7CisKKyAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURv
Y1NoZWxsOjpTQU5EQk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgIHJldHVybiBOU19FUlJP
Ul9GQUlMVVJFOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCiAgICAgLy8gTm93IGNoZWNr
IHdoZXRoZXIgaXQncyBvayB0byBhc2sgYSB3aW5kb3cgcHJvdmlkZXIgZm9yIGEgd2luZG93LiAg
RG9uJ3QKICAgICAvLyBkbyBpdCBpZiB3ZSdyZSBvcGVuaW5nIGEgZGlhbG9nIG9yIGlmIG91ciBw
YXJlbnQgaXMgYSBjaHJvbWUgd2luZG93IG9yCiAgICAgLy8gaWYgd2UncmUgb3BlbmluZyBzb21l
dGhpbmcgdGhhdCBoYXMgbW9kYWwsIGRpYWxvZywgb3IgY2hyb21lIGZsYWdzIHNldC4KICAgICBu
c0NPTVB0cjxuc0lET01DaHJvbWVXaW5kb3c+IGNocm9tZVdpbiA9IGRvX1F1ZXJ5SW50ZXJmYWNl
KGFQYXJlbnQpOwogICAgIGlmICghYURpYWxvZyAmJiAhY2hyb21lV2luICYmCiAgICAgICAgICEo
Y2hyb21lRmxhZ3MgJiAobnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX01PREFMICAgICAgICAg
fAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9P
UEVOQVNfRElBTE9HIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNo
cm9tZTo6Q0hST01FX09QRU5BU19DSFJPTUUpKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>596886</attachid>
            <date>2012-02-13 18:09:45 -0800</date>
            <delta_ts>2012-02-14 15:38:10 -0800</delta_ts>
            <desc>WIP - iframe sandbox v3</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>45403</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMmQ0MDllZDU2OWUwZmJmMGM1MmNkM2YzNWRj
M2UwNjA4OWYwMjVlMQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtMTg4MywzNSArMTg4MywzNyBAQCBwdWJsaWM6CiAgICAqIGZy
b20gdGhlIGRvY3VtZW50IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQg
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsK
IAogICAvKioKICAgICogU2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRo
ZSBnaXZlbiBjaGFubmVsLCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBv
ZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JB
Ym91dEJsYW5rIGlzIHRydWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHBy
aW5jaXBhbCBzZXQgdXAgb24gaXQuCi0gICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LiBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQg
b24gdGhlIGNoYW5uZWwsIGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAor
ICAgKiBmcm9tIHRoZSBjaGFubmVsLgogICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIg
dGhlIHByaW5jaXBhbCB3YXMgc2V0IHVwIGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5l
bC4KICAgICovCiAgIHN0YXRpYyBib29sIFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCog
YUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNo
YW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkq
IGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJv
dXRCbGFuayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9y
QWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VP
d25lciA9IGZhbHNlKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcm
IGFCaW5hcnlEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJh
c2U2NFN0cmluZyk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBh
QXNjaWlTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURh
dGEpOwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFz
c2VkIGluIHBhcmFtZXRlciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0
eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAg
KiBmdW5jdGlvbmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZv
cm0gb3duZXIuCiAgICAqIE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29t
cGxldGUgbWFrZXMgc2Vuc2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAg
ICogQHBhcmFtIGFJbnB1dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0
IGNhbid0IGJlIG51bGwuCiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBo
YXMgYXV0b2NvbXBsZXRlIGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21w
bGV0ZUVuYWJsZWQobnNJRE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIApAQCAtMTkyMiwx
NiArMTkyNCwyNiBAQCBwdWJsaWM6CiAgICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFVSSXMu
ICBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gVVJJJ3MgcHJlcGF0aCBpcwogICAgKiBpbiB0aGUg
bGlzdCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICoKICAgICogQ29tcGFyaXNvbnMgYXJlIGNh
c2UtaW5zZW5zaXRpdmUsIGFuZCB3aGl0ZXNwYWNlIGJldHdlZW4gZWxlbWVudHMgb2YgdGhlCiAg
ICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGlzIGlnbm9yZWQuCiAgICAqLwogICBzdGF0aWMgYm9v
bCBVUklJc0Nocm9tZU9ySW5QcmVmKG5zSVVSSSAqYVVSSSwgY29uc3QgY2hhciAqYVByZWYpOwog
CisgIC8qKgorICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0
cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICAgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBjb252
ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxseS4KKyAgICoKKyAgICog
QHBhcmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAg
ICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZsYWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIg
UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhjb25zdCBuc0FTdHJpbmcmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZGJveEF0dHIpOworCiBw
cml2YXRlOgogICBzdGF0aWMgYm9vbCBJbml0aWFsaXplRXZlbnRUYWJsZSgpOwogCiAgIHN0YXRp
YyBuc3Jlc3VsdCBFbnN1cmVTdHJpbmdCdW5kbGUoUHJvcGVydGllc0ZpbGUgYUZpbGUpOwogCiAg
IHN0YXRpYyBuc0lET01TY3JpcHRPYmplY3RGYWN0b3J5ICpHZXRET01TY3JpcHRPYmplY3RGYWN0
b3J5KCk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEhvbGRTY3JpcHRPYmplY3QoUFJVaW50MzIgYUxh
bmdJRCwgdm9pZCogYU9iamVjdCk7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25z
SURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKLS0tIGEvY29u
dGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNJRG9jdW1lbnQuaApAQCAtMTE5LDE4ICsxMTksMTggQEAgY2xhc3MgTG9hZGVyOwogCiBuYW1l
c3BhY2UgZG9tIHsKIGNsYXNzIExpbms7CiBjbGFzcyBFbGVtZW50OwogfSAvLyBuYW1lc3BhY2Ug
ZG9tCiB9IC8vIG5hbWVzcGFjZSBtb3ppbGxhCiAKICNkZWZpbmUgTlNfSURPQ1VNRU5UX0lJRCBc
Ci17IDB4MjgzZWMyN2QsIDB4NWIyMywgMHg0OWIyLCBcDQotICB7IDB4OTQsIDB4ZDksIDB4OSwg
MHhiNSwgMHhkYiwgMHg0NSwgMHgzMCwgMHg3MyB9IH0NCit7IDB4NTdmZTQ0YWUsIDB4NjY1Niwg
MHg0NGI4LCBcCisgIHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhhNywgMHg0MywgMHgyOCwgMHhiZSwg
MHg4NiB9IH0KIAogCiAvLyBGbGFnIGZvciBBZGRTdHlsZVNoZWV0KCkuCiAjZGVmaW5lIE5TX1NU
WUxFU0hFRVRfRlJPTV9DQVRBTE9HICAgICAgICAgICAgICAgICgxIDw8IDApCiAKIC8vIEVudW0g
Zm9yIHJlcXVlc3RpbmcgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZG9jdW1lbnQgd2hlbiBjcmVhdGlu
ZyBhIGRvYwogZW51bSBEb2N1bWVudEZsYXZvciB7CiAgIERvY3VtZW50Rmxhdm9yTGVnYWN5R3Vl
c3MsIC8vIGNvbXBhdCB3aXRoIG9sZCBjb2RlIHVudGlsIG1hZGUgSFRNTDUtY29tcGxpYW50CkBA
IC00NTYsMTcgKzQ1NiwyNiBAQCBwdWJsaWM6CiAgICAqIGNhbGxlcnMgYXJlIGV4cGVjdGVkIHRv
IHRha2UgYWN0aW9uIGFzIG5lZWRlZCBpZiB0aGV5IHdhbnQgdGhpcwogICAgKiBjaGFuZ2UgdG8g
YWN0dWFsbHkgY2hhbmdlIGFueXRoaW5nIGltbWVkaWF0ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0
aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9wdGlvbnMoUFJVaW50MzIgYUJpZGlPcHRpb25z
KQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJpZGlPcHRpb25zOwogICB9Ci0gIAorCisgIC8q
KgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQuCisgICAqIEBz
ZWUgbnNJRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWlu
dDMyIFNhbmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsK
KyAgfQorCiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxz
byBnZXQgc2V0IGZyb20gb3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncyku
CiAgICAqLwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmll
bGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRl
ckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7
CiAKICAgLyoqCkBAIC0xNzk3LDE2ICsxODA2LDIxIEBAIHByb3RlY3RlZDoKICAgLy8gSWYgbUlz
U3RhdGljRG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBv
cmlnaW5hbAogICAvLyBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5h
bERvY3VtZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQuICBX
aGF0IHRoaXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5o
CiAgIFBSVWludDMyIG1CaWRpT3B0aW9uczsKIAorICAvLyBUaGUgc2FuZGJveCBmbGFncyBvbiB0
aGUgZG9jdW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJp
YnV0ZSBvZiB0aGUKKyAgLy8gYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNv
bnRlbnQsIGlmIGV4aXN0ZW50LiBUaGVzZSBhcmUgc2V0IGF0IGxvYWQgdGltZSBhbmQKKyAgLy8g
YXJlIGltbXV0YWJsZSAtIHNlZSBuc0lEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJsZSBmbGFn
cy4KKyAgUFJVaW50MzIgbVNhbmRib3hGbGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5n
dWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAK
ICAgLy8gVGhlIGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0
cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRl
bnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9j
b250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3Jj
L25zQ29udGVudFV0aWxzLmNwcApAQCAtNzM5LDE2ICs3MzksNjIgQEAgbnNDb250ZW50VXRpbHM6
OkdldFBhcnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1Bh
cnNlclNlcnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikp
IHsKICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVy
biBzUGFyc2VyU2VydmljZTsKIH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJz
ZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVj
dGl2ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5
LgorICoKKyAqIEBwYXJhbSBhQXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUKKyAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLwor
UFJVaW50MzIKK25zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNv
bnN0IG5zQVN0cmluZyYgc2FuZGJveEF0dHJWYWx1ZSkKK3sKKyAgLy8gSWYgdGhlcmUncyBhIHNh
bmRib3ggYXR0cmlidXRlIGF0IGFsbCAoYW5kIHRoZXJlIGlzIGlmIHRoaXMgaXMgYmVpbmcKKyAg
Ly8gY2FsbGVkKSwgc3RhcnQgb2ZmIGJ5IHNldHRpbmcgYWxsIHRoZSByZXN0cmljdGlvbiBmbGFn
cy4KKyAgUFJVaW50MzIgb3V0ID0gbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9OQVZJR0FUSU9OIHwK
KyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gfAorICAgIG5z
SURvY1NoZWxsOjpTQU5EQk9YRURfUExVR0lOUyB8IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJ
R0lOIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TIHwgbnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9TQ1JJUFRTIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0FVVE9NQVRJQ19G
RUFUVVJFUzsKKworICBpZiAoIXNhbmRib3hBdHRyVmFsdWUuSXNFbXB0eSgpKSB7CisgICAgLy8g
VGhlIHNlcGFyYXRvciBvcHRpb25hbCBmbGFnIGlzIHVzZWQgYmVjYXVzZSB0aGUgSFRNTDUgc3Bl
YyBzYXlzIGFueQorICAgIC8vIHdoaXRlc3BhY2UgaXMgb2sgYXMgYSBzZXBhcmF0b3IsIHdoaWNo
IGlzIHdoYXQgdGhpcyBkb2VzLgorICAgIEhUTUxTcGxpdE9uU3BhY2VzVG9rZW5pemVyIHRva2Vu
aXplcihzYW5kYm94QXR0clZhbHVlLCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6
ZXJUZW1wbGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9P
UFRJT05BTCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAg
ICAgbnNEZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisK
KyAgICAgIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRzIikp
IHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFM7CisgICAg
ICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNhbWUtb3Jp
Z2luIikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTjsK
KyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9y
bXMiKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfRk9STVM7Cisg
ICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNjcmlw
dHMiKSkgeworICAgICAgICAvLyBhbGxvdy1zY3JpcHRzIHJlbW92ZXMgYm90aCBTQU5EQk9YRURf
U0NSSVBUUyBhbmQKKyAgICAgICAgLy8gU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUy4KKyAg
ICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFM7CisgICAgICAgIG91
dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisgICAgICB9
IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXRvcC1uYXZpZ2F0
aW9uIikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVM
X05BVklHQVRJT047CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIG91dDsKK30KIAog
I2lmZGVmIE1PWl9YVEYKIG5zSVhURlNlcnZpY2UqCiBuc0NvbnRlbnRVdGlsczo6R2V0WFRGU2Vy
dmljZSgpCiB7CiAgIGlmICghc1hURlNlcnZpY2UpIHsKICAgICBuc3Jlc3VsdCBydiA9IENhbGxH
ZXRTZXJ2aWNlKGtYVEZTZXJ2aWNlQ0lELCAmc1hURlNlcnZpY2UpOwogICAgIGlmIChOU19GQUlM
RUQocnYpKSB7CkBAIC02MDMxLDE3ICs2MDc3LDE4IEBAIG5zQ29udGVudFV0aWxzOjpVUklJbmhl
cml0c1NlY3VyaXR5Q29udGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJlc3VsdCk7
CiB9CiAKIC8vIHN0YXRpYwogYm9vbAogbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVy
KG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lcikKIHsKICAgLy8KICAgLy8gU2V0IHRoZSBvd25l
ciBvZiB0aGUgY2hhbm5lbCwgYnV0IG9ubHkgZm9yIGNoYW5uZWxzIHRoYXQgY2FuJ3QKICAgLy8g
cHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dC4KICAgLy8KICAgLy8gWFhYOiBJdCBz
ZWVtcyB3cm9uZyB0aGF0IHRoZSBvd25lciBpcyBpZ25vcmVkIC0gZXZlbiBpZiBvbmUgaXMKICAg
Ly8gICAgICBzdXBwbGllZCkgdW5sZXNzIHRoZSBVUkkgaXMgamF2YXNjcmlwdCBvciBkYXRhIG9y
IGFib3V0OmJsYW5rLgogICAvLyBYWFg6IElmIHRoaXMgaXMgZXZlciBjaGFuZ2VkLCBjaGVjayBh
bGwgY2FsbGVycyBmb3Igd2hhdCBvd25lcnMKQEAgLTYwNDksMjMgKzYwOTYsMjcgQEAgbnNDb250
ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaQogICAvLyAgICAgIGNvbW1lbnRzIGlu
IG5zRG9jU2hlbGw6OkxvYWRVUkkgd2hlcmUgd2UgZmFsbCBiYWNrIG9uCiAgIC8vICAgICAgaW5o
ZXJpdGluZyB0aGUgb3duZXIgaWYgY2FsbGVkIGZyb20gY2hyb21lLiAgVGhhdCB3b3VsZCBiZQog
ICAvLyAgICAgIHZlcnkgd3JvbmcgaWYgdGhpcyBjb2RlIGNoYW5nZWQgYW55dGhpbmcgYnV0IGNo
YW5uZWxzIHRoYXQKICAgLy8gICAgICBjYW4ndCBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBj
b250ZXh0IQogICAvLwogICAvLyAgICAgIChDdXJyZW50bHkgY2hyb21lIFVSSXMgc2V0IHRoZSBv
d25lciB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQhCiAgIC8vICAgICAgU28gc2V0dGluZyBhIE5VTEwg
b3duZXIgd291bGQgYmUgYmFkISkKICAgLy8KKyAgLy8gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwg
dGhlIG93bmVyIHdpbGwgYmUgc2V0LCBldmVuIGZvciBhIGNoYW5uZWwgdGhhdAorICAvLyBjYW4g
cHJvdmlkZSBpdHMgb3duIHNlY3VyaXR5IGNvbnRleHQuIFRoaXMgaXMgdXNlZCBmb3IgdGhlIEhU
TUw1IElGUkFNRQorICAvLyBzYW5kYm94IGF0dHJpYnV0ZSwgc28gd2UgY2FuIGZvcmNlIHRoZSBj
aGFubmVsIChhbmQgaXRzIGRvY3VtZW50KSB0bworICAvLyBleHBsaWNpdGx5IGhhdmUgYSBudWxs
IHByaW5jaXBhbC4KICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBlY3QgVVJJSW5oZXJpdHNT
ZWN1cml0eUNvbnRleHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAgIC8vIGFib3V0OmJsYW5r
IFVSSSwgc28gZG9uJ3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0aGlzIGNhbGwgZmFpbHMu
CiAgIC8vIFRoaXMgY29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBvbmUgaW4gbnNEb2NTaGVs
bDo6SW50ZXJuYWxMb2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5nIGZvciB0aGluZ3MgdGhh
dCB3aWxsIHVzZSB0aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGluaGVyaXQgfHwgKGFTZXRV
cEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpIHsKKyAgaWYgKGFGb3Jj
ZU93bmVyIHx8ICgoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkks
ICZpbmhlcml0KSkgJiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYm
IE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSkpIHsKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIoYUxv
YWRpbmdQcmluY2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8KICAgLy8gZmls
ZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMgaXMgYSBmaWxlOiBsb2Fk
IG9wZW5lZCBmcm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVlZApkaWZmIC0tZ2l0IGEv
Y29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1
bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAorKysgYi9jb250
ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0yMzkxLDE2ICsyMzkxLDI1IEBAIG5zRG9j
dW1lbnQ6OlN0YXJ0RG9jdW1lbnRMb2FkKGNvbnN0IGNoYXIKICAgICBGaW5kQ2hhckluUmVhZGFi
bGUoJzsnLCBzZW1pY29sb24sIGVuZCk7CiAgICAgU2V0Q29udGVudFR5cGVJbnRlcm5hbChTdWJz
dHJpbmcoc3RhcnQsIHNlbWljb2xvbikpOwogICB9CiAKICAgUmV0cmlldmVSZWxldmFudEhlYWRl
cnMoYUNoYW5uZWwpOwogCiAgIG1DaGFubmVsID0gYUNoYW5uZWw7CiAKKyAgLy8gSWYgdGhpcyBk
b2N1bWVudCBpcyBiZWluZyBsb2FkZWQgYnkgYSBkb2NzaGVsbCwgY29weSBpdHMgc2FuZGJveCBm
bGFncworICAvLyB0byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11dGFibGUgYWZ0ZXIgYmVp
bmcgc2V0IGhlcmUuCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1ZXJ5
SW50ZXJmYWNlKGFDb250YWluZXIpOworCisgIGlmIChkb2NTaGVsbCkgeworICAgIG5zcmVzdWx0
IHJ2ID0gZG9jU2hlbGwtPkdldFNhbmRib3hGbGFncygmbVNhbmRib3hGbGFncyk7CisgICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKyAgfQorCiAgIG5zcmVzdWx0IHJ2ID0gSW5pdENTUCgp
OwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIHJldHVybiBOU19PSzsKIH0KIAog
bnNyZXN1bHQKIG5zRG9jdW1lbnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNl
L3NyYy9uc0ZyYW1lTG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5j
cHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAorKysgYi9jb250ZW50
L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCkBAIC0xMTMsMTYgKzExMywxOCBAQAogI2luY2x1
ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNl
cy5oIgogI2luY2x1ZGUgIm1vemlsbGEvdW51c2VkLmgiCiAjaW5jbHVkZSAibW96aWxsYS9kb20v
RWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvbGF5b3V0L1JlbmRlckZyYW1lUGFyZW50Lmgi
CiAKICNpbmNsdWRlICJqc2FwaS5oIgogCisjaW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVudC5o
IgorCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpk
b207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwogdXNpbmcgbmFtZXNwYWNlIG1v
emlsbGE6OmxheW91dDsKIHR5cGVkZWYgRnJhbWVNZXRyaWNzOjpWaWV3SUQgVmlld0lEOwogCiBj
bGFzcyBuc0FzeW5jRG9jU2hlbGxEZXN0cm95ZXIgOiBwdWJsaWMgbnNSdW5uYWJsZQogewpAQCAt
NDY4LDIwICs0NzAsNzAgQEAgbnNGcmFtZUxvYWRlcjo6UmVhbGx5U3RhcnRMb2FkaW5nSW50ZXJu
YQogICAvLyBKdXN0IHRvIGJlIHNhZmUsIHJlY2hlY2sgdXJpLgogICBydiA9IENoZWNrVVJJTG9h
ZChtVVJJVG9Mb2FkKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBuc0NPTVB0
cjxuc0lEb2NTaGVsbExvYWRJbmZvPiBsb2FkSW5mbzsKICAgbURvY1NoZWxsLT5DcmVhdGVMb2Fk
SW5mbyhnZXR0ZXJfQWRkUmVmcyhsb2FkSW5mbykpOwogICBOU19FTlNVUkVfVFJVRShsb2FkSW5m
bywgTlNfRVJST1JfRkFJTFVSRSk7CiAKLSAgLy8gV2UnbGwgdXNlIG91ciBwcmluY2lwYWwsIG5v
dCB0aGF0IG9mIHRoZSBkb2N1bWVudCBsb2FkZWQgaW5zaWRlIHVzLiAgVGhpcwotICAvLyBpcyB2
ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvIHByZXZlbnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRz
IGxvYWRlZCBpbgotICAvLyBzdWJmcmFtZXMhCi0gIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJD
b250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOworICAvLyBJcyB0aGlzIGFuIDxpZnJhbWU+IHdpdGgg
YSBzYW5kYm94IGF0dHJpYnV0ZSBvciBhIHBhcmVudCB3aGljaCBpcworICAvLyBzYW5kYm94ZWQg
PworICBuc0hUTUxJRnJhbWVFbGVtZW50ICogaWZyYW1lID0KKyAgICBuc0hUTUxJRnJhbWVFbGVt
ZW50OjpGcm9tQ29udGVudChtT3duZXJDb250ZW50KTsKKworICBQUlVpbnQzMiBzYW5kYm94Rmxh
Z3MgPSAwOworCisgIGlmIChpZnJhbWUpIHsKKyAgICBzYW5kYm94RmxhZ3MgPSBpZnJhbWUtPkdl
dFNhbmRib3hGbGFncygpOworCisgICAgUFJVaW50MzIgcGFyZW50U2FuZGJveEZsYWdzID0gMDsK
KworICAgIC8vIEdldCB0aGUgcGFyZW50J3Mgc2FuZGJveCBmbGFncywgdGhleSdyZSBuZWVkZWQg
dG8gZGV0ZXJtaW5lIGlmIHRoZQorICAgIC8vIGZyYW1lIGJlaW5nIGxvYWRlZCBuZWVkcyB0byBi
ZSBzYW5kYm94ZWQuCisgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50RG9j
U2hlbGxJdGVtOworICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IGN1ckRvY1NoZWxs
SXRlbSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG1Eb2NTaGVsbCk7CisKKyAgICBpZiAoTlNfU1VDQ0VF
REVEKGN1ckRvY1NoZWxsSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudERvY1No
ZWxsSXRlbSkpKSkgeworICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IHBhcmVudERvYyA9IGRv
X0dldEludGVyZmFjZShwYXJlbnREb2NTaGVsbEl0ZW0pOworCisgICAgICBpZiAocGFyZW50RG9j
KSB7CisgICAgICAgIHBhcmVudFNhbmRib3hGbGFncyA9IHBhcmVudERvYy0+U2FuZGJveEZsYWdz
KCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHNhbmRib3hGbGFncyB8fCBwYXJlbnRTYW5k
Ym94RmxhZ3MpIHsKKyAgICAgIGlmIChwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgICAgLy8g
VGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0cmljdGlvbnMsIG5vdCByZW1vdmUgdGhlbS4KKyAg
ICAgICAgc2FuZGJveEZsYWdzIHw9IHBhcmVudFNhbmRib3hGbGFnczsKKyAgICAgIH0KKworICAg
ICAgbURvY1NoZWxsLT5TZXRTYW5kYm94RmxhZ3Moc2FuZGJveEZsYWdzKTsKKworICAgICAgLy8g
U2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGluZyBmb3Igc2NyaXB0cyBhbmQgcGx1Z2lucyBhcyBz
cGVjaWZpZWQuCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hF
RF9TQ1JJUFRTKSB7CisgICAgICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dKYXZhc2NyaXB0KGZhbHNl
KTsKKyAgICAgIH0KKworICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5E
Qk9YRURfUExVR0lOUykgeworICAgICAgICBtRG9jU2hlbGwtPlNldEFsbG93UGx1Z2lucyhmYWxz
ZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gU2V0IHVwIHRoZSBmcmFtZSdzIHByaW5j
aXBhbC4KKyAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lO
KSB7CisgICAgLy8gVGhpcyBmcmFtZSBpcyBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9yaWdp
biwgd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lwYWwgYW5kCisgICAgLy8gdXNl
IHRoYXQgYXMgdGhlIG93bmVyLgorICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gbnVsbFByaW5j
aXBhbCA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnVsbHByaW5jaXBhbDsxIik7
CisgICAgbG9hZEluZm8tPlNldE93bmVyKG51bGxQcmluY2lwYWwpOworICB9IGVsc2UgeworICAg
IC8vIFVzZSB0aGUgJ25vcm1hbCcgcHJpbmNpcGFsIGZvciB0aGUgPGlmcmFtZT4uCisgICAgbG9h
ZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7CisgIH0KIAog
ICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwogICBydiA9IG1Pd25lckNvbnRlbnQtPk5vZGVQ
cmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKHJlZmVycmVyKSk7CiAgIE5TX0VOU1VS
RV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbG9hZEluZm8tPlNldFJlZmVycmVyKHJlZmVycmVyKTsK
IAogICAvLyBLaWNrIG9mZiB0aGUgbG9hZC4uLgpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3Ny
Yy9uc0drQXRvbUxpc3QuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKLS0tIGEv
Y29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25z
R2tBdG9tTGlzdC5oCkBAIC05MywxNyArOTMsMjEgQEAgR0tfQVRPTShhY3R1YXRlLCAiYWN0dWF0
ZSIpCiBHS19BVE9NKGFkZHJlc3MsICJhZGRyZXNzIikKIEdLX0FUT00oYWZ0ZXIsICJhZnRlciIp
CiBHS19BVE9NKGFmdGVyX2VuZCwgImFmdGVyX2VuZCIpCiBHS19BVE9NKGFmdGVyX3N0YXJ0LCAi
YWZ0ZXJfc3RhcnQiKQogR0tfQVRPTShhbGlnbiwgImFsaWduIikKIEdLX0FUT00oYWxpbmssICJh
bGluayIpCiBHS19BVE9NKGFsbCwgImFsbCIpCiBHS19BVE9NKGFsbG93ZXZlbnRzLCAiYWxsb3dl
dmVudHMiKQorR0tfQVRPTShhbGxvd2Zvcm1zLCAiYWxsb3ctZm9ybXMiKQogR0tfQVRPTShhbGxv
d25lZ2F0aXZlYXNzZXJ0aW9ucywgImFsbG93bmVnYXRpdmVhc3NlcnRpb25zIikKK0dLX0FUT00o
YWxsb3dzYW1lb3JpZ2luLCAiYWxsb3ctc2FtZS1vcmlnaW4iKQorR0tfQVRPTShhbGxvd3Njcmlw
dHMsICJhbGxvdy1zY3JpcHRzIikKK0dLX0FUT00oYWxsb3d0b3BuYXZpZ2F0aW9uLCAiYWxsb3ct
dG9wLW5hdmlnYXRpb24iKQogR0tfQVRPTShhbGxvd3VudHJ1c3RlZCwgImFsbG93dW50cnVzdGVk
IikKIEdLX0FUT00oYWx0LCAiYWx0IikKIEdLX0FUT00oYWx0ZXJuYXRlLCAiYWx0ZXJuYXRlIikK
IEdLX0FUT00oYWx3YXlzLCAiYWx3YXlzIikKIEdLX0FUT00oYW5jZXN0b3IsICJhbmNlc3RvciIp
CiBHS19BVE9NKGFuY2VzdG9yT3JTZWxmLCAiYW5jZXN0b3Itb3Itc2VsZiIpCiBHS19BVE9NKF9h
bmQsICJhbmQiKQogR0tfQVRPTShhbnksICJhbnkiKQpAQCAtODc1LDE2ICs4NzksMTcgQEAgR0tf
QVRPTShyb3dzcGFuLCAicm93c3BhbiIpCiBHS19BVE9NKHJwLCAicnAiKQogR0tfQVRPTShydCwg
InJ0IikKIEdLX0FUT00ocnRsLCAicnRsIikKIEdLX0FUT00ocnVieSwgInJ1YnkiKQogR0tfQVRP
TShydWxlLCAicnVsZSIpCiBHS19BVE9NKHJ1bGVzLCAicnVsZXMiKQogR0tfQVRPTShzLCAicyIp
CiBHS19BVE9NKHNhbXAsICJzYW1wIikKK0dLX0FUT00oc2FuZGJveCwgInNhbmRib3giKQogR0tf
QVRPTShzYmF0dHIsICJzYmF0dHIiKQogR0tfQVRPTShzY2FsZSwgInNjYWxlIikKIEdLX0FUT00o
c2NhbiwgInNjYW4iKQogR0tfQVRPTShzY2hlbWUsICJzY2hlbWUiKQogR0tfQVRPTShzY29wZSwg
InNjb3BlIikKIEdLX0FUT00oc2NvcGVkLCAic2NvcGVkIikKIEdLX0FUT00oc2NyZWVuLCAic2Ny
ZWVuIikKIEdLX0FUT00oc2NyZWVuWCwgInNjcmVlblgiKQpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQv
c3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMv
bnNIVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC02ODQsMTcgKzY4NCwyNSBAQCBuc0hUTUxGb3JtRWxl
bWVudDo6RG9TdWJtaXRPclJlc2V0KG5zRXZlCiAgICAgcmV0dXJuIERvUmVzZXQoKTsKICAgfQog
CiAgIGlmIChOU19GT1JNX1NVQk1JVCA9PSBhTWVzc2FnZSkgewogICAgIC8vIERvbid0IHN1Ym1p
dCBpZiB3ZSdyZSBub3QgaW4gYSBkb2N1bWVudC4KICAgICBpZiAoIWRvYykgewogICAgICAgcmV0
dXJuIE5TX09LOwogICAgIH0KLSAgICByZXR1cm4gRG9TdWJtaXQoYUV2ZW50KTsKKyAgICAvLyBE
b24ndCBzdWJtaXQgaWYgd2UncmUgaW4gYSBzYW5kYm94ZWQgZnJhbWUgYW5kIGZvcm0gc3VibWl0
CisgICAgLy8gaXMgZGlzYWJsZWQuCisgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gZG9jLT5T
YW5kYm94RmxhZ3MoKTsKKworICAgIGlmICghKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpT
QU5EQk9YRURfRk9STVMpKSB7CisgICAgICByZXR1cm4gRG9TdWJtaXQoYUV2ZW50KTsKKyAgICB9
CisKKwlyZXR1cm4gTlNfT0s7CiAgIH0KIAogICBNT1pfQVNTRVJUKGZhbHNlKTsKICAgcmV0dXJu
IE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNIVE1MRm9ybUVsZW1lbnQ6OkRvUmVzZXQoKQpkaWZm
IC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3Bw
IGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCi0tLSBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTMzLDgx
ICszMywzMyBAQAogICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2Ug
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgogICogdGhlIHRlcm1zIG9mIGFueSBvbmUg
b2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5T
RSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVkZSAibW96aWxsYS9VdGlsLmgiCiAKICNpbmNsdWRl
ICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxGcmFt
ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01Eb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zSURP
TUdldFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5z
TWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIm5zRE9NRXJyb3IuaCIKLSNpbmNsdWRlICJu
c1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zSFRN
TElGcmFtZUVsZW1lbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1l
c3BhY2UgbW96aWxsYTo6ZG9tOwogCi1jbGFzcyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGlj
IG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBw
dWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
LCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLXsKLXB1YmxpYzoKLSAgbnNIVE1MSUZyYW1l
RWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCi0gICAgICAg
ICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96
aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOwotICB2aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVt
ZW50KCk7Ci0KLSAgLy8gbnNJU3VwcG9ydHMKLSAgTlNfREVDTF9JU1VQUE9SVFNfSU5IRVJJVEVE
Ci0KLSAgLy8gbnNJRE9NTm9kZQotICBOU19GT1JXQVJEX05TSURPTU5PREUobnNHZW5lcmljSFRN
TEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUVsZW1lbnQKLSAgTlNfRk9SV0FSRF9OU0lE
T01FTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1M
RWxlbWVudAotICBOU19GT1JXQVJEX05TSURPTUhUTUxFTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFt
ZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAotICBOU19ERUNMX05T
SURPTUhUTUxJRlJBTUVFTEVNRU5UCi0KLSAgLy8gbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLSAgTlNf
REVDTF9OU0lET01HRVRTVkdET0NVTUVOVAotCi0gIC8vIG5zSUNvbnRlbnQKLSAgdmlydHVhbCBi
b29sIFBhcnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpOwotICBOU19JTUVUSE9EXyhib29s
KSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKLSAg
dmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5j
dGlvbigpIGNvbnN0OwotCi0gIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFO
b2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0OwotICB2aXJ0dWFsIG5zWFBDQ2xhc3NJ
bmZvKiBHZXRDbGFzc0luZm8oKTsKLX07Ci0KLQogTlNfSU1QTF9OU19ORVdfSFRNTF9FTEVNRU5U
X0NIRUNLX1BBUlNFUihJRnJhbWUpCiAKLQogbnNIVE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZy
YW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJz
ZXIpCiAgIDogbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFyc2Vy
KQogewogfQogCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojp+bnNIVE1MSUZyYW1lRWxlbWVudCgpCiB7
CisgIGlmIChtU2FuZGJveFRva2VuTGlzdCkKKyAgICBtU2FuZGJveFRva2VuTGlzdC0+RHJvcFJl
ZmVyZW5jZSgpOwogfQogCiAKIE5TX0lNUExfQUREUkVGX0lOSEVSSVRFRChuc0hUTUxJRnJhbWVF
bGVtZW50LG5zR2VuZXJpY0VsZW1lbnQpCiBOU19JTVBMX1JFTEVBU0VfSU5IRVJJVEVEKG5zSFRN
TElGcmFtZUVsZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIAogRE9NQ0lfTk9ERV9EQVRBKEhUTUxJ
RnJhbWVFbGVtZW50LCBuc0hUTUxJRnJhbWVFbGVtZW50KQogCkBAIC0xNTAsMTYgKzEwMiwyOCBA
QCBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRDb250ZW50V2luZG93KG5zCiB9CiAKIE5TX0lNRVRI
T0RJTVAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldFNWR0RvY3VtZW50KG5zSURPTURvY3VtZW50
ICoqYVJlc3VsdCkKIHsKICAgcmV0dXJuIEdldENvbnRlbnREb2N1bWVudChhUmVzdWx0KTsKIH0K
IAorTlNfSU1FVEhPRElNUAorbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U2FuZGJveChuc0lET01E
T01TZXR0YWJsZVRva2VuTGlzdCoqIGFTYW5kYm94KQoreworICBpZiAoIW1TYW5kYm94VG9rZW5M
aXN0KSB7CisgICAgbVNhbmRib3hUb2tlbkxpc3QgPSBuZXcgbnNET01TZXR0YWJsZVRva2VuTGlz
dCh0aGlzLCBuc0drQXRvbXM6OnNhbmRib3gpOworICB9CisKKyAgTlNfQUREUkVGKCphU2FuZGJv
eCA9IG1TYW5kYm94VG9rZW5MaXN0KTsKKworICByZXR1cm4gTlNfT0s7Cit9CisKIGJvb2wKIG5z
SFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFS
ZXN1bHQpCiB7CiAgIGlmIChhTmFtZXNwYWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKICAg
ICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6Om1hcmdpbndpZHRoKSB7CkBAIC0xNzgsMTYg
KzE0MiwyMiBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShQUkluCiAgICAg
ICByZXR1cm4gUGFyc2VGcmFtZWJvcmRlclZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQog
ICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6c2Nyb2xsaW5nKSB7CiAgICAgICByZXR1
cm4gUGFyc2VTY3JvbGxpbmdWYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBpZiAo
YUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OmFsaWduKSB7CiAgICAgICByZXR1cm4gUGFyc2VBbGln
blZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQorICAgIGlmIChhQXR0cmlidXRlID09IG5z
R2tBdG9tczo6c2FuZGJveCkgeworICAgICAgLy8gVGhlIHNhbmRib3ggYXR0cmlidXRlIG5lZWRz
IHRvIGJlIHBhcnNlZCBhcyBhbiBhdG9tIGFycmF5IHNvCisgICAgICAvLyBpdCBjYW4gYmUgZXhw
b3NlZCBhcyBhIERPTVNldHRhYmxlVG9rZW5MaXN0LgorICAgICAgYVJlc3VsdC5QYXJzZUF0b21B
cnJheShhVmFsdWUpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICB9CiAKICAgcmV0dXJu
IG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmlidXRlKGFOYW1lc3BhY2VJRCwg
YUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFWYWx1ZSwgYVJlc3VsdCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBNYXBBdHRyaWJ1dGVz
SW50b1J1bGUoY29uc3QgbnNNYXBwZWRBdHRyaWJ1dGVzKiBhQXR0cmlidXRlcywKQEAgLTI2OCw4
ICsyMzgsMzQgQEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6SXNBdHRyaWJ1dGVNYXBwZWQoYwogCiAK
IG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEF0dHJp
YnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0CiB7CiAgIHJldHVybiAmTWFwQXR0cmlidXRlc0lu
dG9SdWxlOwogfQogCituc3Jlc3VsdAorbnNIVE1MSUZyYW1lRWxlbWVudDo6QWZ0ZXJTZXRBdHRy
KFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyogYVZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhTm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0g
bnNHa0F0b21zOjpzYW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkg
eworICAgIC8vIFBhcnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBh
bmQgaWYgd2UgaGF2ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFw
cHJvcHJpYXRlbHkuCisgICAgaWYgKG1GcmFtZUxvYWRlcikgeworICAgICAgbnNDT01QdHI8bnNJ
RG9jU2hlbGw+IGRvY3NoZWxsID0gbUZyYW1lTG9hZGVyLT5HZXRFeGlzdGluZ0RvY1NoZWxsKCk7
CisKKyAgICAgIGlmIChkb2NzaGVsbCkgeworICAgICAgICBQUlVpbnQzMiBuZXdGbGFncyA9IDA7
CisgICAgICAgIC8vIElmIGEgTlVMTCBhVmFsdWUgaXMgcGFzc2VkIGluLCB3ZSB3YW50IHRvIGNs
ZWFyIHRoZSBzYW5kYm94IGZsYWdzCisgICAgICAgIC8vIHdoaWNoIHdlIHdpbGwgZG8gYnkgc2V0
dGluZyB0aGVtIHRvIDAuCisgICAgICAgIGlmIChhVmFsdWUpIHsKKyAgICAgICAgICBuZXdGbGFn
cyA9IG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKCphVmFsdWUp
OworICAgICAgICB9CisgICAgICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3RmxhZ3Mp
OworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6OkFm
dGVyU2V0QXR0cihhTmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOb3RpZnkpOworCit9CmRpZmYgLS1naXQgYS9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJh
bWVFbGVtZW50LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0
aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8q
ICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BM
IDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1Ympl
Y3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxp
Y2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJh
c2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAq
CisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGllbnQgY29k
ZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMK
KyAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3Jl
YXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5OAorICog
dGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRy
aWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZp
bGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwKKyAq
IG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3Ig
bGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0
aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFi
b3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEws
IGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNp
b24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRo
IHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwg
b3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92
ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisg
KiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgor
ICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNsdWRlICJtb3pp
bGxhL1V0aWwuaCIKKworI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5j
bHVkZSAibnNHZW5lcmljSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRnJh
bWVFbGVtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0lE
T01HZXRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50LmgiCisjaW5j
bHVkZSAibnNHa0F0b21zLmgiCisjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJu
c01hcHBlZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJuc0RPTUVycm9yLmgiCisjaW5jbHVkZSAi
bnNSdWxlRGF0YS5oIgorI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRlICJuc0RP
TVNldHRhYmxlVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKKworY2xh
c3MgbnNIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50
CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUhUTUxJRnJhbWVFbGVt
ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUdldFNWR0RvY3Vt
ZW50Cit7CitwdWJsaWM6CisgIG5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxu
c0lOb2RlSW5mbz4gYU5vZGVJbmZvLAorICAgICAgICAgICAgICAgICAgICAgIG1vemlsbGE6OmRv
bTo6RnJvbVBhcnNlciBhRnJvbVBhcnNlciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZST01fUEFSU0VS
KTsKKyAgdmlydHVhbCB+bnNIVE1MSUZyYW1lRWxlbWVudCgpOworCisgIC8vIG5zSVN1cHBvcnRz
CisgIE5TX0RFQ0xfSVNVUFBPUlRTX0lOSEVSSVRFRAorCisgIC8vIG5zSURPTU5vZGUKKyAgTlNf
Rk9SV0FSRF9OU0lET01OT0RFKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKKworICAvLyBu
c0lET01FbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJh
bWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NSFRNTEVsZW1lbnQKKyAgTlNfRk9SV0FSRF9OU0lE
T01IVE1MRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9N
SFRNTElGcmFtZUVsZW1lbnQKKyAgTlNfREVDTF9OU0lET01IVE1MSUZSQU1FRUxFTUVOVAorCisg
IC8vIG5zSURPTUdldFNWR0RvY3VtZW50CisgIE5TX0RFQ0xfTlNJRE9NR0VUU1ZHRE9DVU1FTlQK
KworICAvLyBuc0lDb250ZW50CisgIHZpcnR1YWwgYm9vbCBQYXJzZUF0dHJpYnV0ZShQUkludDMy
IGFOYW1lc3BhY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSog
YUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3Ry
aW5nJiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVl
JiBhUmVzdWx0KTsKKyAgTlNfSU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1dGVNYXBwZWQoY29uc3Qg
bnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CisgIHZpcnR1YWwgbnNNYXBSdWxlVG9BdHRyaWJ1
dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdDsKKworICB2aXJ0dWFs
IG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5vZGUgKiphUmVzdWx0
KSBjb25zdDsKKyAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xhc3NJbmZvKCk7CisKKyAg
dmlydHVhbCBuc3Jlc3VsdCBBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0
b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0
cmluZyogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYU5v
dGlmeSk7CisKKyAgUFJVaW50MzIgR2V0U2FuZGJveEZsYWdzKCkgeworICAgIG5zQXV0b1N0cmlu
ZyBzYW5kYm94QXR0cjsKKworICAgIGlmIChHZXRBdHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0dr
QXRvbXM6OnNhbmRib3gsIHNhbmRib3hBdHRyKSkgeworICAgICAgcmV0dXJuIG5zQ29udGVudFV0
aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKHNhbmRib3hBdHRyKTsKKyAgICB9CisK
KyAgICAvLyBObyBzYW5kYm94IGF0dHJpYnV0ZSwgbm8gc2FuZGJveCBmbGFncy4KKyAgICByZXR1
cm4gMDsKKyAgfQorCisgIHN0YXRpYyBuc0hUTUxJRnJhbWVFbGVtZW50KiBGcm9tQ29udGVudChu
c0lDb250ZW50ICphQ29udGVudCkKKyAgeworICAgIGlmIChhQ29udGVudC0+SXNIVE1MKG5zR2tB
dG9tczo6aWZyYW1lKSkKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxuc0hUTUxJRnJhbWVFbGVt
ZW50Kj4oYUNvbnRlbnQpOworICAgIHJldHVybiBuc251bGw7CisgIH0KKworcHJvdGVjdGVkOgor
ICBuc1JlZlB0cjxuc0RPTVNldHRhYmxlVG9rZW5MaXN0PiAgbVNhbmRib3hUb2tlbkxpc3Q7Cit9
OwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5j
cHAgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcAotLS0gYS9j
b250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcAorKysgYi9jb250ZW50
L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcApAQCAtMTI2NywxNiArMTI2Nywy
MSBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiB7CiAgIGFDb29r
aWUuVHJ1bmNhdGUoKTsgLy8gY2xlYXIgY3VycmVudCBjb29raWUgaW4gY2FzZSBzZXJ2aWNlIGZh
aWxzOwogICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNvb2tpZSBpc24ndCBhbiBlcnJvciBj
b25kaXRpb24uCiAKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5T
X09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFn
IGlzIHNldCwgYWNjZXNzIHRvIHJlYWQgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBp
ZiAobVNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKQorICAgIHJl
dHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29r
aWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBz
ZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBp
ZiAoc2VydmljZSkgewogICAgIC8vIEdldCBhIFVSSSBmcm9tIHRoZSBkb2N1bWVudCBwcmluY2lw
YWwuIFdlIHVzZSB0aGUgb3JpZ2luYWwKICAgICAvLyBjb2RlYmFzZSBpbiBjYXNlIHRoZSBjb2Rl
YmFzZSB3YXMgY2hhbmdlZCBieSBTZXREb21haW4KICAgICBuc0NPTVB0cjxuc0lVUkk+IGNvZGVi
YXNlVVJJOwogICAgIE5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKGNvZGVi
YXNlVVJJKSk7CiAKQEAgLTEyOTcsMTYgKzEzMDIsMjEgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENv
b2tpZShuc0FTdHJpbmcmIGFDbwogCiBOU19JTUVUSE9ESU1QCiBuc0hUTUxEb2N1bWVudDo6U2V0
Q29va2llKGNvbnN0IG5zQVN0cmluZyYgYUNvb2tpZSkKIHsKICAgaWYgKG1EaXNhYmxlQ29va2ll
QWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50
J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNldCwgYWNjZXNzIHRvIHdyaXRlIGNvb2tpZXMK
KyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6
U0FOREJPWEVEX09SSUdJTikKKyAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsK
KwogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZpY2UgaXNuJ3QgYW4gZXJyb3IKICAgbnND
T01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9IGRvX0dldFNlcnZpY2UoTlNfQ09PS0lF
U0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZpY2UgJiYgbURvY3VtZW50VVJJKSB7CiAg
ICAgbnNDT01QdHI8bnNJUHJvbXB0PiBwcm9tcHQ7CiAgICAgbnNDT01QdHI8bnNQSURPTVdpbmRv
dz4gd2luZG93ID0gR2V0V2luZG93KCk7CiAgICAgaWYgKHdpbmRvdykgewogICAgICAgd2luZG93
LT5HZXRQcm9tcHRlcihnZXR0ZXJfQWRkUmVmcyhwcm9tcHQpKTsKICAgICB9CmRpZmYgLS1naXQg
YS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxs
LmNwcAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jh
c2UvbnNEb2NTaGVsbC5jcHAKQEAgLTcyNywxNiArNzI3LDE3IEBAIG5zRG9jU2hlbGw6Om5zRG9j
U2hlbGwoKToKICAgICBtQnVzeUZsYWdzKEJVU1lfRkxBR1NfTk9ORSksCiAgICAgbUFwcFR5cGUo
bnNJRG9jU2hlbGw6OkFQUF9UWVBFX1VOS05PV04pLAogICAgIG1Mb2FkVHlwZSgwKSwKICAgICBt
TWFyZ2luV2lkdGgoLTEpLAogICAgIG1NYXJnaW5IZWlnaHQoLTEpLAogICAgIG1JdGVtVHlwZSh0
eXBlQ29udGVudCksCiAgICAgbVByZXZpb3VzVHJhbnNJbmRleCgtMSksCiAgICAgbUxvYWRlZFRy
YW5zSW5kZXgoLTEpLAorICAgIG1TYW5kYm94RmxhZ3MoMCksCiAgICAgbUNyZWF0ZWQoZmFsc2Up
LAogICAgIG1BbGxvd1N1YmZyYW1lcyh0cnVlKSwKICAgICBtQWxsb3dQbHVnaW5zKHRydWUpLAog
ICAgIG1BbGxvd0phdmFzY3JpcHQodHJ1ZSksCiAgICAgbUFsbG93TWV0YVJlZGlyZWN0cyh0cnVl
KSwKICAgICBtQWxsb3dJbWFnZXModHJ1ZSksCiAgICAgbUFsbG93RE5TUHJlZmV0Y2godHJ1ZSks
CiAgICAgbUFsbG93V2luZG93Q29udHJvbCh0cnVlKSwKQEAgLTI5MjIsMTYgKzI5MjMsNzYgQEAg
bnNEb2NTaGVsbDo6RmluZEl0ZW1XaXRoTmFtZShjb25zdCBQUlVuaQogICAgICAgICAgICAgZm91
bmRJdGVtID0gbnNudWxsOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvdW5kSXRlbSkgewog
ICAgICAgICAgICAgLy8gV2UgcmV0dXJuIGZvdW5kSXRlbSBoZXJlIGV2ZW4gaWYgaXQncyBub3Qg
YW4gYWN0aXZlCiAgICAgICAgICAgICAvLyBpdGVtIHNpbmNlIGFsbCB0aGUgbmFtZXMgd2UndmUg
ZGVhbHQgd2l0aCBzbyBmYXIgYXJlCiAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2VzIHRoYXQg
d2Ugd29uJ3QgYm90aGVyIGxvb2tpbmcgZm9yIGZ1cnRoZXIuCiAKKyAgICAgICAgICAgIC8vIElm
IG91ciBkb2N1bWVudCBpcyBzYW5kYm94ZWQsIHdlIG5lZWQgdG8gZG8gc29tZSBleHRyYSBjaGVj
a3MuCisgICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworCisgICAgICAgICAg
ICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fR2V0SW50ZXJmYWNlKGFPcmlnaW5hbFJl
cXVlc3Rvcik7CisKKyAgICAgICAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgICAgICAgc2FuZGJv
eEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHNhbmRib3hGbGFncykgeworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1No
ZWxsVHJlZUl0ZW0+IHJvb3Q7CisgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVSb290VHJlZUl0
ZW0oZ2V0dGVyX0FkZFJlZnMocm9vdCkpOworCisgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGZv
dW5kIGl0ZW0gbm90IGEgdG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgYW5kIG5vdCBvdXJzZWxm
ID8KKyAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBzZWxmQXNJ
dGVtID0gc3RhdGljX2Nhc3Q8bnNJRG9jU2hlbGxUcmVlSXRlbSAqPih0aGlzKTsKKyAgICAgICAg
ICAgICAgICBpZiAoZm91bmRJdGVtICE9IHJvb3QgJiYgZm91bmRJdGVtICE9IHNlbGZBc0l0ZW0p
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXJlIHdlIGFuIGFuY2VzdG9yIG9mIHRoZSBmb3Vu
ZEl0ZW0gPworICAgICAgICAgICAgICAgICAgICBib29sIGlzQW5jZXN0b3IgPSBmYWxzZTsKKwor
ICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnRB
c0l0ZW07CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRS
ZWZzKHBhcmVudEFzSXRlbSkpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRB
c0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJl
ZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbS0+R2V0UGFy
ZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dG1wICYmIHRtcCA9PSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNBbmNlc3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRB
c0l0ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vLCB3ZSBh
cmUgbm90IGFuIGFuY2VzdG9yIGFuZCBvdXIgZG9jdW1lbnQgaXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHNhbmRib3hlZCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRvcCBsZXZlbCBi
cm93c2luZyBjb250ZXh0IC0gaXMgaXQgYW4gYW5jZXN0b3Igb2Ygb3VycyA/CisgICAgICAgICAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHBhcmVudEFzSXRlbTsKKyAg
ICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50
QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudEFzSXRlbSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1w
OworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVtLT5HZXRQYXJlbnQoZ2V0dGVy
X0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgdG1w
ID09IGZvdW5kSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
YW4gYW5jZXN0b3IsIGFuZCB3ZSBhcmUgc2FuZGJveGVkLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFVubGVzcyBhbGxvdy10b3AtbmF2aWdhdGlvbiBpcyBzZXQsIHdlIGNhbid0IGFs
bG93IHRoaXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAm
IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRl
bSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAg
ICAgICAgcmV0dXJuIE5TX09LOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29r
aW5nCiAgICAgICAgIAogICAgIC8vIEZpcnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAtNDk1Niwx
NiArNTAxNywzMCBAQCBuc0RvY1NoZWxsOjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5T
X0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsK
ICAgKmFJc0FwcFRhYiA9IG1Jc0FwcFRhYjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVU
SE9ESU1QCituc0RvY1NoZWxsOjpTZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFn
cykKK3sKKyAgbVNhbmRib3hGbGFncyA9IGFTYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsK
K30KKworTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMy
ICAqYVNhbmRib3hGbGFncykKK3sKKyAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOwor
ICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2li
aWxpdHkoYm9vbCBhVmlzaWJpbGl0eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAg
ICAgICByZXR1cm4gTlNfT0s7CiAgICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250
ZW50Vmlld2VyLT5TaG93KCk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtODE0NSwxNiArODIyMCwy
OSBAQCBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnND
T01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1X
aXRoTmFtZShhV2luZG93VGFyZ2V0LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2V0dGVyX0FkZFJlZnModGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5z
SURvY1NoZWxsPiB0YXJnZXREb2NTaGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0p
OwogICAgICAgICAKICAgICAgICAgYm9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBp
ZiAoIXRhcmdldERvY1NoZWxsKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBk
b2N1bWVudCBpcyBzYW5kYm94ZWQgYW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5h
dmlnYXRlL2xvYWQgYSBmcmFtZSBpdCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAg
ICAgICAgICAgLy8gRmluZEl0ZW1XaXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVs
bCBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8g
YWN0dWFsbHkgb3BlbiBhIG5ldyB3aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0
aG91Z2guIENoZWNrIGlmIHdlIGFyZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYgc28u
CisgICAgICAgICAgICBOU19FTlNVUkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1JfRkFJ
TFVSRSk7CisgICAgICAgICAgICBuc0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdl
dERvY3VtZW50KCk7CisgICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAg
ICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAg
IGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsK
KyAgICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gd2luID0KICAgICAgICAgICAgICAg
ICBkb19HZXRJbnRlcmZhY2UoR2V0QXNTdXBwb3J0cyh0aGlzKSk7CiAgICAgICAgICAgICBOU19F
TlNVUkVfVFJVRSh3aW4sIE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpOwogCiAgICAgICAgICAgICBu
c0RlcGVuZGVudFN0cmluZyBuYW1lKGFXaW5kb3dUYXJnZXQpOwogICAgICAgICAgICAgbnNDT01Q
dHI8bnNJRE9NV2luZG93PiBuZXdXaW47CiAgICAgICAgICAgICBydiA9IHdpbi0+T3BlbihFbXB0
eVN0cmluZygpLCAvLyBVUkwgdG8gbG9hZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSwgICAgICAgICAgLy8gd2luZG93IG5hbWUKQEAgLTg5MzksMTcgKzkwMjcsMjQgQEAgbnNEb2NT
aGVsbDo6RG9VUklMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIC8vIFNldCB0aGUgcmVmZXJy
ZXIgZXhwbGljaXRseQogICAgICAgICBpZiAoYVJlZmVycmVyVVJJICYmIGFTZW5kUmVmZXJyZXIp
IHsKICAgICAgICAgICAgIC8vIFJlZmVycmVyIGlzIGN1cnJlbmx5IG9ubHkgc2V0IGZvciBsaW5r
IGNsaWNrcyBoZXJlLgogICAgICAgICAgICAgaHR0cENoYW5uZWwtPlNldFJlZmVycmVyKGFSZWZl
cnJlclVSSSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+
IG93bmVyUHJpbmNpcGFsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFPd25lcikpOwotICAgIG5zQ29udGVu
dFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwg
dHJ1ZSk7CisKKyAgICAvLyBJZiB0aGUgY29udGVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4g
ZmxhZyBzZXQsIGZvcmNlIHRoZSBwYXNzZWQgaW4KKyAgICAvLyBvd25lciAod2hpY2ggc2hvdWxk
IGJlIGEgbnVsbCBwcmluY2lwYWwpIHRvIGJlIHNldCBvbiB0aGUgY2hhbm5lbC4gSWYKKyAgICAv
LyB0aGUgZmxhZyBpc24ndCBzZXQsIGFsbG93IHRoZSBjb250ZW50IHRvIGFzc3N1bWUgaXRzICJu
YXR1cmFsIGRvbWFpbiIgYXMKKyAgICAvLyBpdCBub3JtYWxseSB3b3VsZC4KKyAgICBuc0NvbnRl
bnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkks
IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVNhbmRib3hG
bGFncyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRG9jU2hl
bGw6OlNBTkRCT1hFRF9PUklHSU4pKTsKIAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENoYW5uZWw+
IHNjcmlwdENoYW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShjaGFubmVsKTsKICAgICBpZiAoc2Ny
aXB0Q2hhbm5lbCkgewogICAgICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBvdXIgY29u
dGV4dCBpZiB0aGUgcHJpbmNpcGFscyBtYXRjaAogICAgICAgICBzY3JpcHRDaGFubmVsLT4KICAg
ICAgICAgICAgIFNldEV4ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05P
Uk1BTCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaCBi
L2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVs
bC5oCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03ODEsMTYgKzc4MSwxOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgLy8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBpcyBub3Qg
ZXhwZWN0ZWQgdG8gY2hhbmdlLgogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1JdGVt
VHlwZTsKIAogICAgIC8vIEluZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwgaW5kaWNh
dGluZyB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBhdCB0aGUg
dGltZSB0aGF0IHRoaXMgRG9jU2hlbGwgYmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMyICAgICAg
ICAgICAgICAgICAgICBtUHJldmlvdXNUcmFuc0luZGV4OwogICAgIFBSSW50MzIgICAgICAgICAg
ICAgICAgICAgIG1Mb2FkZWRUcmFuc0luZGV4OwogCisgICAgUFJVaW50MzIgICAgICAgICAgICAg
ICAgICAgbVNhbmRib3hGbGFnczsKKwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1D
cmVhdGVkOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1N1YmZyYW1lczsK
ICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dQbHVnaW5zOwogICAgIGJvb2wg
ICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0phdmFzY3JpcHQ7CiAgICAgYm9vbCAgICAgICAg
ICAgICAgICAgICAgICAgbUFsbG93TWV0YVJlZGlyZWN0czsKICAgICBib29sICAgICAgICAgICAg
ICAgICAgICAgICBtQWxsb3dJbWFnZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAg
bUFsbG93RE5TUHJlZmV0Y2g7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93
V2luZG93Q29udHJvbDsKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRs
IGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0lE
b2NTaGVsbC5pZGwKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAgLTY3LDE3
ICs2NywxNyBAQCBpbnRlcmZhY2UgbnNJUmVxdWVzdDsKIGludGVyZmFjZSBuc0lTSEVudHJ5Owog
aW50ZXJmYWNlIG5zSUxheW91dEhpc3RvcnlTdGF0ZTsKIGludGVyZmFjZSBuc0lTZWN1cmVCcm93
c2VyVUk7CiBpbnRlcmZhY2UgbnNJRE9NU3RvcmFnZTsKIGludGVyZmFjZSBuc0lQcmluY2lwYWw7
CiBpbnRlcmZhY2UgbnNJV2ViQnJvd3NlclByaW50OwogaW50ZXJmYWNlIG5zSVZhcmlhbnQ7CiAK
LVtzY3JpcHRhYmxlLCB1dWlkKDA2MTVkMWE2LTMxM2YtMTFlMS1hMDQzLTZjNjI2ZDY5Njc1Yyld
Citbc2NyaXB0YWJsZSwgdXVpZCg5YjI4MzMzNy0wOTdkLTRmYTgtYTJkYS05MTYzMThlYWY4Mjgp
XQogaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKIHsKICAgLyoqCiAgICAqIExv
YWRzIGEgZ2l2ZW4gVVJJLiAgVGhpcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gbG9hZGluZyB0aGUg
cmVxdWVzdGVkIFVSSQogICAgKiBpbiB0aGUgb2JqZWN0IGltcGxlbWVudGluZwl0aGlzIGludGVy
ZmFjZS4gIElmIGl0IGNhbid0IGJlIGxvYWRlZCBoZXJlCiAgICAqIGhvd2V2ZXIsIHRoZSBVUkwg
ZGlzcGF0Y2hlciB3aWxsIGdvIHRocm91Z2ggaXRzIG5vcm1hbCBwcm9jZXNzIG9mIGNvbnRlbnQK
ICAgICogbG9hZGluZy4KICAgICoKQEAgLTU5Nyw5ICs1OTcsNjcgQEAgaW50ZXJmYWNlIG5zSURv
Y1NoZWxsIDogbnNJU3VwcG9ydHMKICAgICovCiAgIGF0dHJpYnV0ZSBuc0lBdG9tIHBhcmVudENo
YXJzZXQ7CiAKICAgLyoKICAgICogSW4gYSBjaGlsZCBkb2NzaGVsbCwgdGhpcyBpcyB0aGUgc291
cmNlIG9mIHBhcmVudENoYXJzZXQKICAgICogQHNlZSBuc0lQYXJzZXIKICAgICovCiAgIGF0dHJp
YnV0ZSBQUkludDMyIHBhcmVudENoYXJzZXRTb3VyY2U7CisKKyAgLyoqCisgICAqIFRoZSBzYW5k
Ym94IGZsYWdzIG9uIHRoZSBkb2NzaGVsbC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUgb2YgdGhl
IHNhbmRib3gKKyAgICogYXR0cmlidXRlIG9mIHRoZSBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1At
cHJvdGVjdGFibGUgY29udGVudCwgaWYKKyAgICogZXhpc3RlbnQuIFNlZSB0aGUgSFRNTDUgc3Bl
YyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBUaGVzZSBmbGFncyBvbiB0aGUgZG9jc2hlbGwgcmVm
bGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUsIHdo
aWNoIGlzIG1vZGlmaWFibGUuIFRoZXkgYXJlIG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcgbmV3Cisg
ICAqIGNvbnRlbnQsIHNhbmRib3ggZmxhZ3MgYXJlIGFsc28gaW1tdXRhYmx5IHNldCBvbiB0aGUg
ZG9jdW1lbnQgd2hlbiBpdCBpcworICAgKiBsb2FkZWQuCisgICAqIFRoZSBzYW5kYm94IGZsYWdz
IG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94IGZsYWdzIG9uIGl0cworICAgKiBk
b2NzaGVsbCBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVudCwgaWYgYW55LgorICAgKi8KKyAgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdzOworCisgIC8qKgorICAgKiBUaGlzIGZs
YWcgcHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgYnJvd3NpbmcgY29udGV4dHMgb3Ro
ZXIgdGhhbgorICAgKiB0aGUgc2FuZGJveGVkIGJyb3dzaW5nIGNvbnRleHQgaXRzZWxmIChvciBi
cm93c2luZyBjb250ZXh0cyBmdXJ0aGVyCisgICAqIG5lc3RlZCBpbnNpZGUgaXQpLCBhbmQgdGhl
IHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0LgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9u
ZyBTQU5EQk9YRURfTkFWSUdBVElPTiAgPSAweDE7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBw
cmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyB0aGVpciB0b3AtbGV2ZWwgYnJvd3NpbmcK
KyAgICogY29udGV4dC4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1RP
UExFVkVMX05BVklHQVRJT04gPSAweDI7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBwcmV2ZW50
cyBjb250ZW50IGZyb20gaW5zdGFudGlhdGluZyBwbHVnaW5zLCB3aGV0aGVyIHVzaW5nIHRoZQor
ICAgKiBlbWJlZCBlbGVtZW50LCB0aGUgb2JqZWN0IGVsZW1lbnQsIHRoZSBhcHBsZXQgZWxlbWVu
dCwgb3IgdGhyb3VnaAorICAgKiBuYXZpZ2F0aW9uIG9mIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRl
eHQsIHVubGVzcyB0aG9zZSBwbHVnaW5zIGNhbiBiZQorICAgKiBzZWN1cmVkLgorICAgKi8KKyAg
Y29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfUExVR0lOUyA9IDB4NDsKKworICAvKioKKyAg
ICogVGhpcyBmbGFnIGZvcmNlcyBjb250ZW50IGludG8gYSB1bmlxdWUgb3JpZ2luLCB0aHVzIHBy
ZXZlbnRpbmcgaXQgZnJvbQorICAgKiBhY2Nlc3Npbmcgb3RoZXIgY29udGVudCBmcm9tIHRoZSBz
YW1lIG9yaWdpbi4KKyAgICogVGhpcyBmbGFnIGFsc28gcHJldmVudHMgc2NyaXB0IGZyb20gcmVh
ZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gdGhlCisgICAqIGRvY3VtZW50LmNvb2tpZSBJREwgYXR0
cmlidXRlLCBhbmQgYmxvY2tzIGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAqLworICBjb25z
dCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9PUklHSU4gPSAweDg7CisKKyAgLyoqCisgICAqIFRo
aXMgZmxhZyBibG9ja3MgZm9ybSBzdWJtaXNzaW9uLgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQg
bG9uZyBTQU5EQk9YRURfRk9STVMgPSAweDEwOworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgYmxv
Y2tzIHNjcmlwdCBleGVjdXRpb24uCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRC
T1hFRF9TQ1JJUFRTID0gMHgyMDsKKworICAvKioKKyAgICogVGhpcyBmbGFnIGJsb2NrcyBmZWF0
dXJlcyB0aGF0IHRyaWdnZXIgYXV0b21hdGljYWxseSwgc3VjaCBhcworICAgKiBhdXRvbWF0aWNh
bGx5IHBsYXlpbmcgYSB2aWRlbyBvciBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIGEgZm9ybSBjb250
cm9sLgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfQVVUT01BVElDX0ZF
QVRVUkVTID0gMHg0MDsKIH07CmRpZmYgLS1naXQgYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5j
cHAgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKLS0tIGEvZG9tL2Jhc2UvbnNHbG9iYWxX
aW5kb3cuY3BwCisrKyBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcApAQCAtODIxOCwxNiAr
ODIxOCwyMiBAQCBuc0dsb2JhbFdpbmRvdzo6R2V0U2Vzc2lvblN0b3JhZ2UobnNJRE9NCiAgIGlm
ICghbVNlc3Npb25TdG9yYWdlKSB7CiAgICAgKmFTZXNzaW9uU3RvcmFnZSA9IG5zbnVsbDsKIAog
ICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAgICAgIG1E
b2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAorICAgIC8vIElm
IHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAgICAvLyBk
b24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9jICYmIChtRG9j
LT5TYW5kYm94RmxhZ3MoKSAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKSkgeworICAg
ICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAgbnNyZXN1
bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2Vzc2lvblN0b3JhZ2VGb3JQcmluY2lwYWwocHJpbmNpcGFs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY3VtZW50VVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobVNlc3Npb25TdG9yYWdl
KSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogI2lmZGVmIFBSX0xPR0dJTkcK
ICAgICBpZiAoUFJfTE9HX1RFU1QoZ0RPTUxlYWtQUkxvZywgUFJfTE9HX0RFQlVHKSkgewpAQCAt
ODMwNSwxNiArODMxMSwyMiBAQCBuc0dsb2JhbFdpbmRvdzo6R2V0TG9jYWxTdG9yYWdlKG5zSURP
TVN0CiAgICAgICBkb19HZXRTZXJ2aWNlKCJAbW96aWxsYS5vcmcvZG9tL3N0b3JhZ2VtYW5hZ2Vy
OzEiLCAmcnYpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgICBuc1N0cmlu
ZyBkb2N1bWVudFVSSTsKICAgICBpZiAobURvY3VtZW50KSB7CiAgICAgICBtRG9jdW1lbnQtPkdl
dERvY3VtZW50VVJJKGRvY3VtZW50VVJJKTsKICAgICB9CiAKKyAgICAvLyBJZiB0aGUgZG9jdW1l
bnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgLy8gZG9uJ3QgYWxsb3cg
YWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAgICBpZiAobURvYyAmJiAobURvYy0+U2FuZGJveEZs
YWdzKCkgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVybiBO
U19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIHJ2ID0gc3RvcmFnZU1hbmFn
ZXItPkdldExvY2FsU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50VVJJLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJf
QWRkUmVmcyhtTG9jYWxTdG9yYWdlKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsK
ICAgfQogCiAgIE5TX0FERFJFRigqYUxvY2FsU3RvcmFnZSA9IG1Mb2NhbFN0b3JhZ2UpOwogICBy
ZXR1cm4gTlNfT0s7CmRpZmYgLS1naXQgYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJ
RnJhbWVFbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVs
ZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1l
bnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQu
aWRsCkBAIC0zMyw0NCArMzMsNDYgQEAKICAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92
aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCiAgKiBhbmQgb3Ro
ZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8g
bm90IGRlbGV0ZQogICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2Ug
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgogICogdGhlIHRlcm1zIG9mIGFueSBvbmUg
b2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5T
RSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVkZSAibnNJRE9NSFRNTEVsZW1lbnQuaWRsIgorI2lu
Y2x1ZGUgIm5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0LmlkbCIKIAogLyoqCiAgKiBUaGUgbnNJ
RE9NSFRNTElGcmFtZUVsZW1lbnQgaW50ZXJmYWNlIGlzIHRoZSBpbnRlcmZhY2UgdG8gYSBbWF1I
VE1MCiAgKiBpZnJhbWUgZWxlbWVudC4KICAqCiAgKiBUaGlzIGludGVyZmFjZSBpcyB0cnlpbmcg
dG8gZm9sbG93IHRoZSBET00gTGV2ZWwgMiBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8v
d3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1MLwogICoKICAqIHdpdGggY2hhbmdlcyBmcm9t
IHRoZSB3b3JrLWluLXByb2dyZXNzIFdIQVRXRyBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRw
Oi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLwogICovCiAKLVtz
Y3JpcHRhYmxlLCB1dWlkKGQ0ZTg3MGJkLTQ1MmMtNDg2MC1iOTNjLWY0ZWUwMGJhMzNmNildCitb
c2NyaXB0YWJsZSwgdXVpZCg1MmY2MjQ0Yi1iMWY1LTRmNGMtOGZmMy03ZTE0NjMxNmY0MTEpXQog
aW50ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDogbnNJRE9NSFRNTEVsZW1lbnQKIHsK
ICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgYWxpZ247CiAgICAgICAgICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGZyYW1lQm9yZGVyOwogICAgICAgICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nICAgICAgICBoZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgICAgICAgIGxvbmdEZXNjOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAg
ICAgICBtYXJnaW5IZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAg
IG1hcmdpbldpZHRoOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBuYW1l
OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzY3JvbGxpbmc7CiAgICAg
ICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNyYzsKICAgICAgICAgICAgYXR0cmli
dXRlIERPTVN0cmluZyAgICAgICAgd2lkdGg7CiAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVs
IDI6CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01Eb2N1bWVudCAgIGNvbnRlbnREb2N1bWVu
dDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVdpbmRvdyAgICAgY29udGVudFdpbmRvdzsK
IAorICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3Qgc2FuZGJv
eDsKIAogICAvLyBNb3ppbGxhIGV4dGVuc2lvbnMKICAgLy8gaWZyYW1lIGVsZW1lbnRzIHJlcXVp
cmUgdGhlIG1vekFsbG93RnVsbFNjcmVlbiBhdHRyaWJ1dGUgdG8gYmUgcHJlc2VudAogICAvLyBp
ZiB0aGV5J3JlIHRvIGFsbG93IGNvbnRlbnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0byBnbyBpbnRv
IERPTSBmdWxsLXNjcmVlbgogICAvLyBtb2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1vemlsbGEub3Jn
L2luZGV4LnBocD90aXRsZT1HZWNrbzpGdWxsU2NyZWVuQVBJCiAgICAgICAgICAgIGF0dHJpYnV0
ZSBib29sZWFuICAgICAgICAgIG1vekFsbG93RnVsbFNjcmVlbjsKIH07CmRpZmYgLS1naXQgYS9l
bWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3Bw
IGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVy
LmNwcAotLS0gYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRv
d1dhdGNoZXIuY3BwCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3Jj
L25zV2luZG93V2F0Y2hlci5jcHAKQEAgLTYwMywxNiArNjAzLDMzIEBAIG5zV2luZG93V2F0Y2hl
cjo6T3BlbldpbmRvd0pTSW50ZXJuYWwobnMKICAgfQogCiAgIGlmICghbmV3RG9jU2hlbGxJdGVt
KSB7CiAgICAgLy8gV2UncmUgZ29pbmcgdG8gZWl0aGVyIG9wZW4gdXAgYSBuZXcgd2luZG93IG91
cnNlbHZlcyBvciBhc2sgYQogICAgIC8vIG5zSVdpbmRvd1Byb3ZpZGVyIGZvciBvbmUuICBJbiBl
aXRoZXIgY2FzZSwgd2UnbGwgd2FudCB0byBzZXQgdGhlIHJpZ2h0CiAgICAgLy8gbmFtZSBvbiBp
dC4KICAgICB3aW5kb3dOZWVkc05hbWUgPSB0cnVlOwogCisgICAgLy8gSWYgdGhlIHBhcmVudCB0
cnlpbmcgdG8gb3BlbiBhIG5ldyB3aW5kb3cgaXMgc2FuZGJveGVkLAorICAgIC8vIHRoaXMgaXMg
bm90IGFsbG93ZWQgYW5kIHdlIGZhaWwgaGVyZS4KKyAgICBpZiAoYVBhcmVudCkgeworICAgICAg
bnNDT01QdHI8bnNJRE9NRG9jdW1lbnQ+IGRvbWRvYzsKKyAgICAgIGFQYXJlbnQtPkdldERvY3Vt
ZW50KGdldHRlcl9BZGRSZWZzKGRvbWRvYykpOworICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+
IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGRvbWRvYyk7CisKKyAgICAgIGlmIChkb2MpIHsKKyAg
ICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKyAgICAgICAgc2FuZGJveEZsYWdzID0g
ZG9jLT5TYW5kYm94RmxhZ3MoKTsKKworICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9j
U2hlbGw6OlNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgcmV0dXJuIE5TX0VSUk9S
X0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKICAgICAvLyBOb3cgY2hlY2sg
d2hldGhlciBpdCdzIG9rIHRvIGFzayBhIHdpbmRvdyBwcm92aWRlciBmb3IgYSB3aW5kb3cuICBE
b24ndAogICAgIC8vIGRvIGl0IGlmIHdlJ3JlIG9wZW5pbmcgYSBkaWFsb2cgb3IgaWYgb3VyIHBh
cmVudCBpcyBhIGNocm9tZSB3aW5kb3cgb3IKICAgICAvLyBpZiB3ZSdyZSBvcGVuaW5nIHNvbWV0
aGluZyB0aGF0IGhhcyBtb2RhbCwgZGlhbG9nLCBvciBjaHJvbWUgZmxhZ3Mgc2V0LgogICAgIG5z
Q09NUHRyPG5zSURPTUNocm9tZVdpbmRvdz4gY2hyb21lV2luID0gZG9fUXVlcnlJbnRlcmZhY2Uo
YVBhcmVudCk7CiAgICAgaWYgKCFhRGlhbG9nICYmICFjaHJvbWVXaW4gJiYKICAgICAgICAgIShj
aHJvbWVGbGFncyAmIChuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfTU9EQUwgICAgICAgICB8
CiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX09Q
RU5BU19ESUFMT0cgfCAKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hy
b21lOjpDSFJPTUVfT1BFTkFTX0NIUk9NRSkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>597213</attachid>
            <date>2012-02-14 15:38:10 -0800</date>
            <delta_ts>2012-02-24 17:13:17 -0800</delta_ts>
            <desc>WIP - iframe sandbox v4</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>45303</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMmQ0MDllZDU2OWUwZmJmMGM1MmNkM2YzNWRj
M2UwNjA4OWYwMjVlMQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtMTg4MywzNSArMTg4MywzNyBAQCBwdWJsaWM6CiAgICAqIGZy
b20gdGhlIGRvY3VtZW50IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQg
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsK
IAogICAvKioKICAgICogU2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRo
ZSBnaXZlbiBjaGFubmVsLCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBv
ZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JB
Ym91dEJsYW5rIGlzIHRydWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHBy
aW5jaXBhbCBzZXQgdXAgb24gaXQuCi0gICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LiBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQg
b24gdGhlIGNoYW5uZWwsIGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAor
ICAgKiBmcm9tIHRoZSBjaGFubmVsLgogICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIg
dGhlIHByaW5jaXBhbCB3YXMgc2V0IHVwIGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5l
bC4KICAgICovCiAgIHN0YXRpYyBib29sIFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCog
YUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNo
YW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkq
IGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJv
dXRCbGFuayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9y
QWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VP
d25lciA9IGZhbHNlKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcm
IGFCaW5hcnlEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJh
c2U2NFN0cmluZyk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBh
QXNjaWlTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURh
dGEpOwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFz
c2VkIGluIHBhcmFtZXRlciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0
eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAg
KiBmdW5jdGlvbmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZv
cm0gb3duZXIuCiAgICAqIE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29t
cGxldGUgbWFrZXMgc2Vuc2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAg
ICogQHBhcmFtIGFJbnB1dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0
IGNhbid0IGJlIG51bGwuCiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBo
YXMgYXV0b2NvbXBsZXRlIGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21w
bGV0ZUVuYWJsZWQobnNJRE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIApAQCAtMTkyMiwx
NiArMTkyNCwyNiBAQCBwdWJsaWM6CiAgICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFVSSXMu
ICBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gVVJJJ3MgcHJlcGF0aCBpcwogICAgKiBpbiB0aGUg
bGlzdCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICoKICAgICogQ29tcGFyaXNvbnMgYXJlIGNh
c2UtaW5zZW5zaXRpdmUsIGFuZCB3aGl0ZXNwYWNlIGJldHdlZW4gZWxlbWVudHMgb2YgdGhlCiAg
ICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGlzIGlnbm9yZWQuCiAgICAqLwogICBzdGF0aWMgYm9v
bCBVUklJc0Nocm9tZU9ySW5QcmVmKG5zSVVSSSAqYVVSSSwgY29uc3QgY2hhciAqYVByZWYpOwog
CisgIC8qKgorICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0
cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICAgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBjb252
ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxseS4KKyAgICoKKyAgICog
QHBhcmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAg
ICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZsYWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIg
UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhjb25zdCBuc0FTdHJpbmcmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZGJveEF0dHIpOworCiBw
cml2YXRlOgogICBzdGF0aWMgYm9vbCBJbml0aWFsaXplRXZlbnRUYWJsZSgpOwogCiAgIHN0YXRp
YyBuc3Jlc3VsdCBFbnN1cmVTdHJpbmdCdW5kbGUoUHJvcGVydGllc0ZpbGUgYUZpbGUpOwogCiAg
IHN0YXRpYyBuc0lET01TY3JpcHRPYmplY3RGYWN0b3J5ICpHZXRET01TY3JpcHRPYmplY3RGYWN0
b3J5KCk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEhvbGRTY3JpcHRPYmplY3QoUFJVaW50MzIgYUxh
bmdJRCwgdm9pZCogYU9iamVjdCk7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25z
SURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKLS0tIGEvY29u
dGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNJRG9jdW1lbnQuaApAQCAtMTE5LDE4ICsxMTksMTggQEAgY2xhc3MgTG9hZGVyOwogCiBuYW1l
c3BhY2UgZG9tIHsKIGNsYXNzIExpbms7CiBjbGFzcyBFbGVtZW50OwogfSAvLyBuYW1lc3BhY2Ug
ZG9tCiB9IC8vIG5hbWVzcGFjZSBtb3ppbGxhCiAKICNkZWZpbmUgTlNfSURPQ1VNRU5UX0lJRCBc
Ci17IDB4MjgzZWMyN2QsIDB4NWIyMywgMHg0OWIyLCBcDQotICB7IDB4OTQsIDB4ZDksIDB4OSwg
MHhiNSwgMHhkYiwgMHg0NSwgMHgzMCwgMHg3MyB9IH0NCit7IDB4NTdmZTQ0YWUsIDB4NjY1Niwg
MHg0NGI4LCBcCisgIHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhhNywgMHg0MywgMHgyOCwgMHhiZSwg
MHg4NiB9IH0KIAogCiAvLyBGbGFnIGZvciBBZGRTdHlsZVNoZWV0KCkuCiAjZGVmaW5lIE5TX1NU
WUxFU0hFRVRfRlJPTV9DQVRBTE9HICAgICAgICAgICAgICAgICgxIDw8IDApCiAKIC8vIEVudW0g
Zm9yIHJlcXVlc3RpbmcgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZG9jdW1lbnQgd2hlbiBjcmVhdGlu
ZyBhIGRvYwogZW51bSBEb2N1bWVudEZsYXZvciB7CiAgIERvY3VtZW50Rmxhdm9yTGVnYWN5R3Vl
c3MsIC8vIGNvbXBhdCB3aXRoIG9sZCBjb2RlIHVudGlsIG1hZGUgSFRNTDUtY29tcGxpYW50CkBA
IC00NTYsMTcgKzQ1NiwyNiBAQCBwdWJsaWM6CiAgICAqIGNhbGxlcnMgYXJlIGV4cGVjdGVkIHRv
IHRha2UgYWN0aW9uIGFzIG5lZWRlZCBpZiB0aGV5IHdhbnQgdGhpcwogICAgKiBjaGFuZ2UgdG8g
YWN0dWFsbHkgY2hhbmdlIGFueXRoaW5nIGltbWVkaWF0ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0
aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9wdGlvbnMoUFJVaW50MzIgYUJpZGlPcHRpb25z
KQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJpZGlPcHRpb25zOwogICB9Ci0gIAorCisgIC8q
KgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQuCisgICAqIEBz
ZWUgbnNJRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWlu
dDMyIFNhbmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsK
KyAgfQorCiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxz
byBnZXQgc2V0IGZyb20gb3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncyku
CiAgICAqLwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmll
bGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRl
ckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7
CiAKICAgLyoqCkBAIC0xNzk3LDE2ICsxODA2LDIxIEBAIHByb3RlY3RlZDoKICAgLy8gSWYgbUlz
U3RhdGljRG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBv
cmlnaW5hbAogICAvLyBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5h
bERvY3VtZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQuICBX
aGF0IHRoaXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5o
CiAgIFBSVWludDMyIG1CaWRpT3B0aW9uczsKIAorICAvLyBUaGUgc2FuZGJveCBmbGFncyBvbiB0
aGUgZG9jdW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJp
YnV0ZSBvZiB0aGUKKyAgLy8gYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNv
bnRlbnQsIGlmIGV4aXN0ZW50LiBUaGVzZSBhcmUgc2V0IGF0IGxvYWQgdGltZSBhbmQKKyAgLy8g
YXJlIGltbXV0YWJsZSAtIHNlZSBuc0lEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJsZSBmbGFn
cy4KKyAgUFJVaW50MzIgbVNhbmRib3hGbGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5n
dWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAK
ICAgLy8gVGhlIGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0
cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRl
bnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9j
b250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3Jj
L25zQ29udGVudFV0aWxzLmNwcApAQCAtNzM5LDE2ICs3MzksNjIgQEAgbnNDb250ZW50VXRpbHM6
OkdldFBhcnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1Bh
cnNlclNlcnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikp
IHsKICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVy
biBzUGFyc2VyU2VydmljZTsKIH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJz
ZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVj
dGl2ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5
LgorICoKKyAqIEBwYXJhbSBhQXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUKKyAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLwor
UFJVaW50MzIKK25zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNv
bnN0IG5zQVN0cmluZyYgc2FuZGJveEF0dHJWYWx1ZSkKK3sKKyAgLy8gSWYgdGhlcmUncyBhIHNh
bmRib3ggYXR0cmlidXRlIGF0IGFsbCAoYW5kIHRoZXJlIGlzIGlmIHRoaXMgaXMgYmVpbmcKKyAg
Ly8gY2FsbGVkKSwgc3RhcnQgb2ZmIGJ5IHNldHRpbmcgYWxsIHRoZSByZXN0cmljdGlvbiBmbGFn
cy4KKyAgUFJVaW50MzIgb3V0ID0gbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9OQVZJR0FUSU9OIHwK
KyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gfAorICAgIG5z
SURvY1NoZWxsOjpTQU5EQk9YRURfUExVR0lOUyB8IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJ
R0lOIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TIHwgbnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9TQ1JJUFRTIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0FVVE9NQVRJQ19G
RUFUVVJFUzsKKworICBpZiAoIXNhbmRib3hBdHRyVmFsdWUuSXNFbXB0eSgpKSB7CisgICAgLy8g
VGhlIHNlcGFyYXRvciBvcHRpb25hbCBmbGFnIGlzIHVzZWQgYmVjYXVzZSB0aGUgSFRNTDUgc3Bl
YyBzYXlzIGFueQorICAgIC8vIHdoaXRlc3BhY2UgaXMgb2sgYXMgYSBzZXBhcmF0b3IsIHdoaWNo
IGlzIHdoYXQgdGhpcyBkb2VzLgorICAgIEhUTUxTcGxpdE9uU3BhY2VzVG9rZW5pemVyIHRva2Vu
aXplcihzYW5kYm94QXR0clZhbHVlLCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6
ZXJUZW1wbGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9P
UFRJT05BTCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAg
ICAgbnNEZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisK
KyAgICAgIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRzIikp
IHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFM7CisgICAg
ICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNhbWUtb3Jp
Z2luIikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTjsK
KyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9y
bXMiKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfRk9STVM7Cisg
ICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNjcmlw
dHMiKSkgeworICAgICAgICAvLyBhbGxvdy1zY3JpcHRzIHJlbW92ZXMgYm90aCBTQU5EQk9YRURf
U0NSSVBUUyBhbmQKKyAgICAgICAgLy8gU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUy4KKyAg
ICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFM7CisgICAgICAgIG91
dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisgICAgICB9
IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXRvcC1uYXZpZ2F0
aW9uIikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVM
X05BVklHQVRJT047CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIG91dDsKK30KIAog
I2lmZGVmIE1PWl9YVEYKIG5zSVhURlNlcnZpY2UqCiBuc0NvbnRlbnRVdGlsczo6R2V0WFRGU2Vy
dmljZSgpCiB7CiAgIGlmICghc1hURlNlcnZpY2UpIHsKICAgICBuc3Jlc3VsdCBydiA9IENhbGxH
ZXRTZXJ2aWNlKGtYVEZTZXJ2aWNlQ0lELCAmc1hURlNlcnZpY2UpOwogICAgIGlmIChOU19GQUlM
RUQocnYpKSB7CkBAIC02MDMxLDE3ICs2MDc3LDE4IEBAIG5zQ29udGVudFV0aWxzOjpVUklJbmhl
cml0c1NlY3VyaXR5Q29udGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJlc3VsdCk7
CiB9CiAKIC8vIHN0YXRpYwogYm9vbAogbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVy
KG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lcikKIHsKICAgLy8KICAgLy8gU2V0IHRoZSBvd25l
ciBvZiB0aGUgY2hhbm5lbCwgYnV0IG9ubHkgZm9yIGNoYW5uZWxzIHRoYXQgY2FuJ3QKICAgLy8g
cHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dC4KICAgLy8KICAgLy8gWFhYOiBJdCBz
ZWVtcyB3cm9uZyB0aGF0IHRoZSBvd25lciBpcyBpZ25vcmVkIC0gZXZlbiBpZiBvbmUgaXMKICAg
Ly8gICAgICBzdXBwbGllZCkgdW5sZXNzIHRoZSBVUkkgaXMgamF2YXNjcmlwdCBvciBkYXRhIG9y
IGFib3V0OmJsYW5rLgogICAvLyBYWFg6IElmIHRoaXMgaXMgZXZlciBjaGFuZ2VkLCBjaGVjayBh
bGwgY2FsbGVycyBmb3Igd2hhdCBvd25lcnMKQEAgLTYwNDksMjMgKzYwOTYsMjcgQEAgbnNDb250
ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaQogICAvLyAgICAgIGNvbW1lbnRzIGlu
IG5zRG9jU2hlbGw6OkxvYWRVUkkgd2hlcmUgd2UgZmFsbCBiYWNrIG9uCiAgIC8vICAgICAgaW5o
ZXJpdGluZyB0aGUgb3duZXIgaWYgY2FsbGVkIGZyb20gY2hyb21lLiAgVGhhdCB3b3VsZCBiZQog
ICAvLyAgICAgIHZlcnkgd3JvbmcgaWYgdGhpcyBjb2RlIGNoYW5nZWQgYW55dGhpbmcgYnV0IGNo
YW5uZWxzIHRoYXQKICAgLy8gICAgICBjYW4ndCBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBj
b250ZXh0IQogICAvLwogICAvLyAgICAgIChDdXJyZW50bHkgY2hyb21lIFVSSXMgc2V0IHRoZSBv
d25lciB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQhCiAgIC8vICAgICAgU28gc2V0dGluZyBhIE5VTEwg
b3duZXIgd291bGQgYmUgYmFkISkKICAgLy8KKyAgLy8gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwg
dGhlIG93bmVyIHdpbGwgYmUgc2V0LCBldmVuIGZvciBhIGNoYW5uZWwgdGhhdAorICAvLyBjYW4g
cHJvdmlkZSBpdHMgb3duIHNlY3VyaXR5IGNvbnRleHQuIFRoaXMgaXMgdXNlZCBmb3IgdGhlIEhU
TUw1IElGUkFNRQorICAvLyBzYW5kYm94IGF0dHJpYnV0ZSwgc28gd2UgY2FuIGZvcmNlIHRoZSBj
aGFubmVsIChhbmQgaXRzIGRvY3VtZW50KSB0bworICAvLyBleHBsaWNpdGx5IGhhdmUgYSBudWxs
IHByaW5jaXBhbC4KICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBlY3QgVVJJSW5oZXJpdHNT
ZWN1cml0eUNvbnRleHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAgIC8vIGFib3V0OmJsYW5r
IFVSSSwgc28gZG9uJ3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0aGlzIGNhbGwgZmFpbHMu
CiAgIC8vIFRoaXMgY29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBvbmUgaW4gbnNEb2NTaGVs
bDo6SW50ZXJuYWxMb2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5nIGZvciB0aGluZ3MgdGhh
dCB3aWxsIHVzZSB0aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGluaGVyaXQgfHwgKGFTZXRV
cEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpIHsKKyAgaWYgKGFGb3Jj
ZU93bmVyIHx8ICgoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkks
ICZpbmhlcml0KSkgJiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYm
IE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSkpIHsKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIoYUxv
YWRpbmdQcmluY2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8KICAgLy8gZmls
ZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMgaXMgYSBmaWxlOiBsb2Fk
IG9wZW5lZCBmcm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVlZApkaWZmIC0tZ2l0IGEv
Y29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1
bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAorKysgYi9jb250
ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0yMzkxLDE2ICsyMzkxLDI1IEBAIG5zRG9j
dW1lbnQ6OlN0YXJ0RG9jdW1lbnRMb2FkKGNvbnN0IGNoYXIKICAgICBGaW5kQ2hhckluUmVhZGFi
bGUoJzsnLCBzZW1pY29sb24sIGVuZCk7CiAgICAgU2V0Q29udGVudFR5cGVJbnRlcm5hbChTdWJz
dHJpbmcoc3RhcnQsIHNlbWljb2xvbikpOwogICB9CiAKICAgUmV0cmlldmVSZWxldmFudEhlYWRl
cnMoYUNoYW5uZWwpOwogCiAgIG1DaGFubmVsID0gYUNoYW5uZWw7CiAKKyAgLy8gSWYgdGhpcyBk
b2N1bWVudCBpcyBiZWluZyBsb2FkZWQgYnkgYSBkb2NzaGVsbCwgY29weSBpdHMgc2FuZGJveCBm
bGFncworICAvLyB0byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11dGFibGUgYWZ0ZXIgYmVp
bmcgc2V0IGhlcmUuCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1ZXJ5
SW50ZXJmYWNlKGFDb250YWluZXIpOworCisgIGlmIChkb2NTaGVsbCkgeworICAgIG5zcmVzdWx0
IHJ2ID0gZG9jU2hlbGwtPkdldFNhbmRib3hGbGFncygmbVNhbmRib3hGbGFncyk7CisgICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKyAgfQorCiAgIG5zcmVzdWx0IHJ2ID0gSW5pdENTUCgp
OwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIHJldHVybiBOU19PSzsKIH0KIAog
bnNyZXN1bHQKIG5zRG9jdW1lbnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNl
L3NyYy9uc0ZyYW1lTG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5j
cHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAorKysgYi9jb250ZW50
L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCkBAIC0xMTMsMTYgKzExMywxOCBAQAogI2luY2x1
ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNl
cy5oIgogI2luY2x1ZGUgIm1vemlsbGEvdW51c2VkLmgiCiAjaW5jbHVkZSAibW96aWxsYS9kb20v
RWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvbGF5b3V0L1JlbmRlckZyYW1lUGFyZW50Lmgi
CiAKICNpbmNsdWRlICJqc2FwaS5oIgogCisjaW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVudC5o
IgorCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpk
b207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwogdXNpbmcgbmFtZXNwYWNlIG1v
emlsbGE6OmxheW91dDsKIHR5cGVkZWYgRnJhbWVNZXRyaWNzOjpWaWV3SUQgVmlld0lEOwogCiBj
bGFzcyBuc0FzeW5jRG9jU2hlbGxEZXN0cm95ZXIgOiBwdWJsaWMgbnNSdW5uYWJsZQogewpAQCAt
NDY4LDE2ICs0NzAsNjQgQEAgbnNGcmFtZUxvYWRlcjo6UmVhbGx5U3RhcnRMb2FkaW5nSW50ZXJu
YQogICAvLyBKdXN0IHRvIGJlIHNhZmUsIHJlY2hlY2sgdXJpLgogICBydiA9IENoZWNrVVJJTG9h
ZChtVVJJVG9Mb2FkKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBuc0NPTVB0
cjxuc0lEb2NTaGVsbExvYWRJbmZvPiBsb2FkSW5mbzsKICAgbURvY1NoZWxsLT5DcmVhdGVMb2Fk
SW5mbyhnZXR0ZXJfQWRkUmVmcyhsb2FkSW5mbykpOwogICBOU19FTlNVUkVfVFJVRShsb2FkSW5m
bywgTlNfRVJST1JfRkFJTFVSRSk7CiAKKyAgLy8gSXMgdGhpcyBhbiA8aWZyYW1lPiB3aXRoIGEg
c2FuZGJveCBhdHRyaWJ1dGUgb3IgYSBwYXJlbnQgd2hpY2ggaXMKKyAgLy8gc2FuZGJveGVkID8K
KyAgbnNIVE1MSUZyYW1lRWxlbWVudCAqIGlmcmFtZSA9CisgICAgbnNIVE1MSUZyYW1lRWxlbWVu
dDo6RnJvbUNvbnRlbnQobU93bmVyQ29udGVudCk7CisKKyAgUFJVaW50MzIgc2FuZGJveEZsYWdz
ID0gMDsKKworICBpZiAoaWZyYW1lKSB7CisgICAgc2FuZGJveEZsYWdzID0gaWZyYW1lLT5HZXRT
YW5kYm94RmxhZ3MoKTsKKworICAgIFBSVWludDMyIHBhcmVudFNhbmRib3hGbGFncyA9IDA7CisK
KyAgICAvLyBHZXQgdGhlIHBhcmVudCdzIHNhbmRib3ggZmxhZ3MsIHRoZXkncmUgbmVlZGVkIHRv
IGRldGVybWluZSBpZiB0aGUKKyAgICAvLyBmcmFtZSBiZWluZyBsb2FkZWQgbmVlZHMgdG8gYmUg
c2FuZGJveGVkLgorICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHBhcmVudERvY1No
ZWxsSXRlbTsKKyAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBjdXJEb2NTaGVsbEl0
ZW0gPSBkb19RdWVyeUludGVyZmFjZShtRG9jU2hlbGwpOworCisgICAgaWYgKE5TX1NVQ0NFRURF
RChjdXJEb2NTaGVsbEl0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJlbnREb2NTaGVs
bEl0ZW0pKSkpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBwYXJlbnREb2MgPSBkb19H
ZXRJbnRlcmZhY2UocGFyZW50RG9jU2hlbGxJdGVtKTsKKworICAgICAgaWYgKHBhcmVudERvYykg
eworICAgICAgICBwYXJlbnRTYW5kYm94RmxhZ3MgPSBwYXJlbnREb2MtPlNhbmRib3hGbGFncygp
OworICAgICAgfQorICAgIH0KKworICAgIGlmIChzYW5kYm94RmxhZ3MgfHwgcGFyZW50U2FuZGJv
eEZsYWdzKSB7CisgICAgICBpZiAocGFyZW50U2FuZGJveEZsYWdzKSB7CisgICAgICAgIC8vIFRo
ZSBjaGlsZCBjYW4gb25seSBhZGQgcmVzdHJpY3Rpb25zLCBub3QgcmVtb3ZlIHRoZW0uCisgICAg
ICAgIHNhbmRib3hGbGFncyB8PSBwYXJlbnRTYW5kYm94RmxhZ3M7CisgICAgICB9CisKKyAgICAg
IG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFncyk7CisKKyAgICAgIC8vIFNl
dCB1cCB0aGUgYWN0dWFsIHNhbmRib3hpbmcgZm9yIHNjcmlwdHMgYW5kIHBsdWdpbnMgYXMgc3Bl
Y2lmaWVkLgorICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURf
U0NSSVBUUykgeworICAgICAgICBtRG9jU2hlbGwtPlNldEFsbG93SmF2YXNjcmlwdChmYWxzZSk7
CisgICAgICB9CisKKyAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJP
WEVEX1BMVUdJTlMpIHsKKyAgICAgICAgbURvY1NoZWxsLT5TZXRBbGxvd1BsdWdpbnMoZmFsc2Up
OworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIElmIHRoaXMgaXMgYW4gPGlmcmFtZT4gYW5k
IGl0J3Mgc2FuZGJveGVkIHdpdGggcmVzcGVjdCB0byBvcmlnaW4KKyAgLy8gd2Ugd2lsbCBzZXQg
aXQgdXAgd2l0aCBhIG51bGwgcHJpbmNpcGFsIGxhdGVyIGluIG5zRG9jU2hlbGw6OkRvVVJJTG9h
ZC4KKyAgLy8gV2UgZG8gaXQgdGhlcmUgdG8gY29ycmVjdGx5IHNhbmRib3ggY29udGVudCB0aGF0
IHdhcyBsb2FkZWQgaW50bworICAvLyB0aGUgaWZyYW1lIHZpYSBvdGhlciBtZXRob2RzIHRoYW4g
dGhlIHNyYyBhdHRyaWJ1dGUuCiAgIC8vIFdlJ2xsIHVzZSBvdXIgcHJpbmNpcGFsLCBub3QgdGhh
dCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRoaXMKICAgLy8gaXMgdmVyeSBp
bXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBsb2Fk
ZWQgaW4KICAgLy8gc3ViZnJhbWVzIQogICBsb2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29udGVu
dC0+Tm9kZVByaW5jaXBhbCgpKTsKIAogICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwogICBy
diA9IG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZz
KHJlZmVycmVyKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQgYS9j
b250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRv
bUxpc3QuaAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCisrKyBiL2NvbnRl
bnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKQEAgLTkzLDE3ICs5MywyMSBAQCBHS19BVE9NKGFj
dHVhdGUsICJhY3R1YXRlIikKIEdLX0FUT00oYWRkcmVzcywgImFkZHJlc3MiKQogR0tfQVRPTShh
ZnRlciwgImFmdGVyIikKIEdLX0FUT00oYWZ0ZXJfZW5kLCAiYWZ0ZXJfZW5kIikKIEdLX0FUT00o
YWZ0ZXJfc3RhcnQsICJhZnRlcl9zdGFydCIpCiBHS19BVE9NKGFsaWduLCAiYWxpZ24iKQogR0tf
QVRPTShhbGluaywgImFsaW5rIikKIEdLX0FUT00oYWxsLCAiYWxsIikKIEdLX0FUT00oYWxsb3dl
dmVudHMsICJhbGxvd2V2ZW50cyIpCitHS19BVE9NKGFsbG93Zm9ybXMsICJhbGxvdy1mb3JtcyIp
CiBHS19BVE9NKGFsbG93bmVnYXRpdmVhc3NlcnRpb25zLCAiYWxsb3duZWdhdGl2ZWFzc2VydGlv
bnMiKQorR0tfQVRPTShhbGxvd3NhbWVvcmlnaW4sICJhbGxvdy1zYW1lLW9yaWdpbiIpCitHS19B
VE9NKGFsbG93c2NyaXB0cywgImFsbG93LXNjcmlwdHMiKQorR0tfQVRPTShhbGxvd3RvcG5hdmln
YXRpb24sICJhbGxvdy10b3AtbmF2aWdhdGlvbiIpCiBHS19BVE9NKGFsbG93dW50cnVzdGVkLCAi
YWxsb3d1bnRydXN0ZWQiKQogR0tfQVRPTShhbHQsICJhbHQiKQogR0tfQVRPTShhbHRlcm5hdGUs
ICJhbHRlcm5hdGUiKQogR0tfQVRPTShhbHdheXMsICJhbHdheXMiKQogR0tfQVRPTShhbmNlc3Rv
ciwgImFuY2VzdG9yIikKIEdLX0FUT00oYW5jZXN0b3JPclNlbGYsICJhbmNlc3Rvci1vci1zZWxm
IikKIEdLX0FUT00oX2FuZCwgImFuZCIpCiBHS19BVE9NKGFueSwgImFueSIpCkBAIC04NzUsMTYg
Kzg3OSwxNyBAQCBHS19BVE9NKHJvd3NwYW4sICJyb3dzcGFuIikKIEdLX0FUT00ocnAsICJycCIp
CiBHS19BVE9NKHJ0LCAicnQiKQogR0tfQVRPTShydGwsICJydGwiKQogR0tfQVRPTShydWJ5LCAi
cnVieSIpCiBHS19BVE9NKHJ1bGUsICJydWxlIikKIEdLX0FUT00ocnVsZXMsICJydWxlcyIpCiBH
S19BVE9NKHMsICJzIikKIEdLX0FUT00oc2FtcCwgInNhbXAiKQorR0tfQVRPTShzYW5kYm94LCAi
c2FuZGJveCIpCiBHS19BVE9NKHNiYXR0ciwgInNiYXR0ciIpCiBHS19BVE9NKHNjYWxlLCAic2Nh
bGUiKQogR0tfQVRPTShzY2FuLCAic2NhbiIpCiBHS19BVE9NKHNjaGVtZSwgInNjaGVtZSIpCiBH
S19BVE9NKHNjb3BlLCAic2NvcGUiKQogR0tfQVRPTShzY29wZWQsICJzY29wZWQiKQogR0tfQVRP
TShzY3JlZW4sICJzY3JlZW4iKQogR0tfQVRPTShzY3JlZW5YLCAic2NyZWVuWCIpCmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAotLS0gYS9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTY4NCwxNyArNjg0LDI1IEBA
IG5zSFRNTEZvcm1FbGVtZW50OjpEb1N1Ym1pdE9yUmVzZXQobnNFdmUKICAgICByZXR1cm4gRG9S
ZXNldCgpOwogICB9CiAKICAgaWYgKE5TX0ZPUk1fU1VCTUlUID09IGFNZXNzYWdlKSB7CiAgICAg
Ly8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIG5vdCBpbiBhIGRvY3VtZW50LgogICAgIGlmICghZG9j
KSB7CiAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgfQotICAgIHJldHVybiBEb1N1Ym1pdChhRXZl
bnQpOworICAgIC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdyZSBpbiBhIHNhbmRib3hlZCBmcmFtZSBh
bmQgZm9ybSBzdWJtaXQKKyAgICAvLyBpcyBkaXNhYmxlZC4KKyAgICBQUlVpbnQzMiBzYW5kYm94
RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgaWYgKCEoc2FuZGJveEZsYWdzICYg
bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9GT1JNUykpIHsKKyAgICAgIHJldHVybiBEb1N1Ym1pdChh
RXZlbnQpOworICAgIH0KKworCXJldHVybiBOU19PSzsKICAgfQogCiAgIE1PWl9BU1NFUlQoZmFs
c2UpOwogICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0hUTUxGb3JtRWxlbWVudDo6
RG9SZXNldCgpCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZy
YW1lRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxl
bWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1l
bnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50
LmNwcApAQCAtMzMsODEgKzMzLDMzIEBACiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNp
cGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0aGUgdGVy
bXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoKICAqICoq
KioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJtb3ppbGxhL1V0aWwu
aCIKIAogI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAibnNH
ZW5lcmljSFRNTEZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIm5zSURPTURvY3VtZW50LmgiCi0j
aW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01TVkdEb2N1
bWVudC5oIgotI2luY2x1ZGUgIm5zR2tBdG9tcy5oIgotI2luY2x1ZGUgIm5zSURvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAibnNET01FcnJvci5o
IgotI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIKLSNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCisj
aW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxs
YTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKLWNsYXNzIG5zSFRNTElGcmFtZUVs
ZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAotewotcHVibGljOgot
ICBuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2Rl
SW5mbywKLSAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZy
b21QYXJzZXIgPSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7Ci0gIHZpcnR1YWwgfm5z
SFRNTElGcmFtZUVsZW1lbnQoKTsKLQotICAvLyBuc0lTdXBwb3J0cwotICBOU19ERUNMX0lTVVBQ
T1JUU19JTkhFUklURUQKLQotICAvLyBuc0lET01Ob2RlCi0gIE5TX0ZPUldBUkRfTlNJRE9NTk9E
RShuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NRWxlbWVudAotICBO
U19GT1JXQVJEX05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0g
IC8vIG5zSURPTUhUTUxFbGVtZW50Ci0gIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNH
ZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50
Ci0gIE5TX0RFQ0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKLQotICAvLyBuc0lET01HZXRTVkdE
b2N1bWVudAotICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCi0KLSAgLy8gbnNJQ29udGVu
dAotICB2aXJ0dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7Ci0gIE5T
X0lNRVRIT0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1
dGUpIGNvbnN0OwotICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmli
dXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3Q7Ci0KLSAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShu
c0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7Ci0gIHZpcnR1
YWwgbnNYUENDbGFzc0luZm8qIEdldENsYXNzSW5mbygpOwotfTsKLQotCiBOU19JTVBMX05TX05F
V19IVE1MX0VMRU1FTlRfQ0hFQ0tfUEFSU0VSKElGcmFtZSkKIAotCiBuc0hUTUxJRnJhbWVFbGVt
ZW50Ojpuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFO
b2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbVBh
cnNlciBhRnJvbVBhcnNlcikKICAgOiBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50KGFOb2RlSW5m
bywgYUZyb21QYXJzZXIpCiB7CiB9CiAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6On5uc0hUTUxJRnJh
bWVFbGVtZW50KCkKIHsKKyAgaWYgKG1TYW5kYm94VG9rZW5MaXN0KQorICAgIG1TYW5kYm94VG9r
ZW5MaXN0LT5Ecm9wUmVmZXJlbmNlKCk7CiB9CiAKIAogTlNfSU1QTF9BRERSRUZfSU5IRVJJVEVE
KG5zSFRNTElGcmFtZUVsZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIE5TX0lNUExfUkVMRUFTRV9J
TkhFUklURUQobnNIVE1MSUZyYW1lRWxlbWVudCxuc0dlbmVyaWNFbGVtZW50KQogCiBET01DSV9O
T0RFX0RBVEEoSFRNTElGcmFtZUVsZW1lbnQsIG5zSFRNTElGcmFtZUVsZW1lbnQpCiAKQEAgLTE1
MCwxNiArMTAyLDI4IEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldENvbnRlbnRXaW5kb3cobnMK
IH0KIAogTlNfSU1FVEhPRElNUAogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U1ZHRG9jdW1lbnQo
bnNJRE9NRG9jdW1lbnQgKiphUmVzdWx0KQogewogICByZXR1cm4gR2V0Q29udGVudERvY3VtZW50
KGFSZXN1bHQpOwogfQogCitOU19JTUVUSE9ESU1QCituc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRT
YW5kYm94KG5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0KiogYVNhbmRib3gpCit7CisgIGlmICgh
bVNhbmRib3hUb2tlbkxpc3QpIHsKKyAgICBtU2FuZGJveFRva2VuTGlzdCA9IG5ldyBuc0RPTVNl
dHRhYmxlVG9rZW5MaXN0KHRoaXMsIG5zR2tBdG9tczo6c2FuZGJveCk7CisgIH0KKworICBOU19B
RERSRUYoKmFTYW5kYm94ID0gbVNhbmRib3hUb2tlbkxpc3QpOworCisgIHJldHVybiBOU19PSzsK
K30KKwogYm9vbAogbnNIVE1MSUZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBh
TmFtZXNwYWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9t
KiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNBU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0F0dHJWYWx1ZSYgYVJlc3VsdCkKIHsKICAgaWYgKGFOYW1lc3BhY2VJRCA9PSBrTmFtZVNwYWNl
SURfTm9uZSkgewogICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6bWFyZ2lud2lkdGgp
IHsKQEAgLTE3OCwxNiArMTQyLDIyIEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmli
dXRlKFBSSW4KICAgICAgIHJldHVybiBQYXJzZUZyYW1lYm9yZGVyVmFsdWUoYVZhbHVlLCBhUmVz
dWx0KTsKICAgICB9CiAgICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjpzY3JvbGxpbmcp
IHsKICAgICAgIHJldHVybiBQYXJzZVNjcm9sbGluZ1ZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAg
ICAgfQogICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6YWxpZ24pIHsKICAgICAgIHJl
dHVybiBQYXJzZUFsaWduVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CisgICAgaWYgKGFB
dHRyaWJ1dGUgPT0gbnNHa0F0b21zOjpzYW5kYm94KSB7CisgICAgICAvLyBUaGUgc2FuZGJveCBh
dHRyaWJ1dGUgbmVlZHMgdG8gYmUgcGFyc2VkIGFzIGFuIGF0b20gYXJyYXkgc28KKyAgICAgIC8v
IGl0IGNhbiBiZSBleHBvc2VkIGFzIGEgRE9NU2V0dGFibGVUb2tlbkxpc3QuCisgICAgICBhUmVz
dWx0LlBhcnNlQXRvbUFycmF5KGFWYWx1ZSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAg
IH0KIAogICByZXR1cm4gbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUo
YU5hbWVzcGFjZUlELCBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYVZhbHVlLCBhUmVzdWx0KTsKIH0KIAogc3RhdGljIHZvaWQK
IE1hcEF0dHJpYnV0ZXNJbnRvUnVsZShjb25zdCBuc01hcHBlZEF0dHJpYnV0ZXMqIGFBdHRyaWJ1
dGVzLApAQCAtMjY4LDggKzIzOCwzNCBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpJc0F0dHJpYnV0
ZU1hcHBlZChjCiAKIAogbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYwogbnNIVE1MSUZyYW1lRWxl
bWVudDo6R2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3QKIHsKICAgcmV0dXJuICZN
YXBBdHRyaWJ1dGVzSW50b1J1bGU7CiB9CiAKK25zcmVzdWx0Cituc0hUTUxJRnJhbWVFbGVtZW50
OjpBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nKiBhVmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpCit7Cisg
IGlmIChhTmFtZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5hbWVTcGFjZUlEID09IGtOYW1l
U3BhY2VJRF9Ob25lKSB7CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgc2FuZGJv
eCBhdHRyaWJ1dGUsIGFuZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwKKyAgICAvLyBzZXQgaXRzIHNh
bmRib3ggZmxhZ3MgYXBwcm9wcmlhdGVseS4KKyAgICBpZiAobUZyYW1lTG9hZGVyKSB7CisgICAg
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jc2hlbGwgPSBtRnJhbWVMb2FkZXItPkdldEV4aXN0
aW5nRG9jU2hlbGwoKTsKKworICAgICAgaWYgKGRvY3NoZWxsKSB7CisgICAgICAgIFBSVWludDMy
IG5ld0ZsYWdzID0gMDsKKyAgICAgICAgLy8gSWYgYSBOVUxMIGFWYWx1ZSBpcyBwYXNzZWQgaW4s
IHdlIHdhbnQgdG8gY2xlYXIgdGhlIHNhbmRib3ggZmxhZ3MKKyAgICAgICAgLy8gd2hpY2ggd2Ug
d2lsbCBkbyBieSBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAgaWYgKGFWYWx1ZSkgeworICAg
ICAgICAgIG5ld0ZsYWdzID0gbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRv
RmxhZ3MoKmFWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZG9jc2hlbGwtPlNldFNhbmRib3hG
bGFncyhuZXdGbGFncyk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBuc0dlbmVyaWNI
VE1MRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKGFOYW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5vdGlmeSk7CisKK30K
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50
LmggYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQv
c3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApAQCAtMCwwICsxLDExNyBAQAorLyogLSotIE1vZGU6
IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0
OiAyIC0qLSAqLworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lv
bjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisg
KiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAq
IFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lm
aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisg
KiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNh
dG9yIGNsaWVudCBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3Jp
Z2luYWwgQ29kZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisg
KiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0
IChDKSAxOTk4CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRl
bnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhl
ciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0
aGUgIkdQTCIpLAorICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBw
cm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAor
ICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQ
TCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZl
cnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5
b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVw
bGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWly
ZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBw
cm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwg
b3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKwor
I2luY2x1ZGUgIm1vemlsbGEvVXRpbC5oIgorCisjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIm5z
R2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01Eb2N1bWVudC5oIgor
I2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NU1ZHRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJuc0drQXRvbXMuaCIKKyNpbmNsdWRlICJuc0lEb2N1bWVudC5o
IgorI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIm5zRE9NRXJyb3Iu
aCIKKyNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCisjaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgor
I2luY2x1ZGUgIm5zRE9NU2V0dGFibGVUb2tlbkxpc3QuaCIKKyNpbmNsdWRlICJuc0NvbnRlbnRV
dGlscy5oIgorCitjbGFzcyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hU
TUxGcmFtZUVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9N
SFRNTElGcmFtZUVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJ
RE9NR2V0U1ZHRG9jdW1lbnQKK3sKK3B1YmxpYzoKKyAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJl
YWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCisgICAgICAgICAgICAgICAgICAg
ICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpO
T1RfRlJPTV9QQVJTRVIpOworICB2aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7CisKKyAg
Ly8gbnNJU3VwcG9ydHMKKyAgTlNfREVDTF9JU1VQUE9SVFNfSU5IRVJJVEVECisKKyAgLy8gbnNJ
RE9NTm9kZQorICBOU19GT1JXQVJEX05TSURPTU5PREUobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVu
dDo6KQorCisgIC8vIG5zSURPTUVsZW1lbnQKKyAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UKG5z
R2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKKworICAvLyBuc0lET01IVE1MRWxlbWVudAorICBO
U19GT1JXQVJEX05TSURPTUhUTUxFTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikK
KworICAvLyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAorICBOU19ERUNMX05TSURPTUhUTUxJRlJB
TUVFTEVNRU5UCisKKyAgLy8gbnNJRE9NR2V0U1ZHRG9jdW1lbnQKKyAgTlNfREVDTF9OU0lET01H
RVRTVkdET0NVTUVOVAorCisgIC8vIG5zSUNvbnRlbnQKKyAgdmlydHVhbCBib29sIFBhcnNlQXR0
cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpOworICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0
ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKKyAgdmlydHVhbCBuc01h
cFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0
OworCisgIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJ
Tm9kZSAqKmFSZXN1bHQpIGNvbnN0OworICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFz
c0luZm8oKTsKKworICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1l
U3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNBU3RyaW5nKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBhTm90aWZ5KTsKKworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKSB7Cisg
ICAgbnNBdXRvU3RyaW5nIHNhbmRib3hBdHRyOworCisgICAgaWYgKEdldEF0dHIoa05hbWVTcGFj
ZUlEX05vbmUsIG5zR2tBdG9tczo6c2FuZGJveCwgc2FuZGJveEF0dHIpKSB7CisgICAgICByZXR1
cm4gbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2FuZGJveEF0
dHIpOworICAgIH0KKworICAgIC8vIE5vIHNhbmRib3ggYXR0cmlidXRlLCBubyBzYW5kYm94IGZs
YWdzLgorICAgIHJldHVybiAwOworICB9CisKKyAgc3RhdGljIG5zSFRNTElGcmFtZUVsZW1lbnQq
IEZyb21Db250ZW50KG5zSUNvbnRlbnQgKmFDb250ZW50KQorICB7CisgICAgaWYgKGFDb250ZW50
LT5Jc0hUTUwobnNHa0F0b21zOjppZnJhbWUpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG5z
SFRNTElGcmFtZUVsZW1lbnQqPihhQ29udGVudCk7CisgICAgcmV0dXJuIG5zbnVsbDsKKyAgfQor
Citwcm90ZWN0ZWQ6CisgIG5zUmVmUHRyPG5zRE9NU2V0dGFibGVUb2tlbkxpc3Q+ICBtU2FuZGJv
eFRva2VuTGlzdDsKK307CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25z
SFRNTERvY3VtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1l
bnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3Bw
CisrKyBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCkBAIC0x
MjY3LDE2ICsxMjY3LDIxIEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3RyaW5nJiBh
Q28KIHsKICAgYUNvb2tpZS5UcnVuY2F0ZSgpOyAvLyBjbGVhciBjdXJyZW50IGNvb2tpZSBpbiBj
YXNlIHNlcnZpY2UgZmFpbHM7CiAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gY29va2llIGlz
bid0IGFuIGVycm9yIGNvbmRpdGlvbi4KIAogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsK
ICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94
ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gcmVhZCBjb29raWVzCisgIC8vIGlzIHBy
b2hpYml0ZWQuCisgIGlmIChtU2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9P
UklHSU4pCisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisKICAgLy8gbm90
IGhhdmluZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNv
b2tpZVNlcnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09O
VFJBQ1RJRCk7CiAgIGlmIChzZXJ2aWNlKSB7CiAgICAgLy8gR2V0IGEgVVJJIGZyb20gdGhlIGRv
Y3VtZW50IHByaW5jaXBhbC4gV2UgdXNlIHRoZSBvcmlnaW5hbAogICAgIC8vIGNvZGViYXNlIGlu
IGNhc2UgdGhlIGNvZGViYXNlIHdhcyBjaGFuZ2VkIGJ5IFNldERvbWFpbgogICAgIG5zQ09NUHRy
PG5zSVVSST4gY29kZWJhc2VVUkk7CiAgICAgTm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVy
X0FkZFJlZnMoY29kZWJhc2VVUkkpKTsKIApAQCAtMTI5NywxNiArMTMwMiwyMSBAQCBuc0hUTUxE
b2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRN
TERvY3VtZW50OjpTZXRDb29raWUoY29uc3QgbnNBU3RyaW5nJiBhQ29va2llKQogewogICBpZiAo
bURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJ
ZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8g
d3JpdGUgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAm
IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKQorICAgIHJldHVybiBOU19FUlJPUl9ET01f
U0VDVVJJVFlfRVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBh
biBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2Vy
dmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSAmJiBtRG9j
dW1lbnRVUkkpIHsKICAgICBuc0NPTVB0cjxuc0lQcm9tcHQ+IHByb21wdDsKICAgICBuc0NPTVB0
cjxuc1BJRE9NV2luZG93PiB3aW5kb3cgPSBHZXRXaW5kb3coKTsKICAgICBpZiAod2luZG93KSB7
CiAgICAgICB3aW5kb3ctPkdldFByb21wdGVyKGdldHRlcl9BZGRSZWZzKHByb21wdCkpOwogICAg
IH0KZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9i
YXNlL25zRG9jU2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysr
IGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcApAQCAtNzI3LDE2ICs3MjcsMTcgQEAgbnNE
b2NTaGVsbDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVTWV9GTEFHU19OT05FKSwK
ICAgICBtQXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9XTiksCiAgICAgbUxvYWRU
eXBlKDApLAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdpbkhlaWdodCgtMSksCiAg
ICAgbUl0ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNUcmFuc0luZGV4KC0xKSwK
ICAgICBtTG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hGbGFncygwKSwKICAgICBt
Q3JlYXRlZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUpLAogICAgIG1BbGxvd1Bs
dWdpbnModHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwKICAgICBtQWxsb3dNZXRh
UmVkaXJlY3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwKICAgICBtQWxsb3dETlNQ
cmVmZXRjaCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRydWUpLApAQCAtMjkyMiwx
NiArMjkyMyw3MyBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pCiAg
ICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
Zm91bmRJdGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91bmRJdGVtIGhlcmUgZXZl
biBpZiBpdCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0ZW0gc2luY2UgYWxsIHRo
ZSBuYW1lcyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAgICAgICAgIC8vIHNwZWNp
YWwgY2FzZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3IgZnVydGhlci4KIAorICAg
ICAgICAgICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwgd2UgbmVlZCB0byBkbyBz
b21lIGV4dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7
CisKKyAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19HZXRJbnRlcmZh
Y2UoYU9yaWdpbmFsUmVxdWVzdG9yKTsKKworICAgICAgICAgICAgaWYgKGRvYykgeworICAgICAg
ICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzKSB7CisgICAgICAgICAgICAgICAgbnND
T01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcm9vdDsKKyAgICAgICAgICAgICAgICBHZXRTYW1l
VHlwZVJvb3RUcmVlSXRlbShnZXR0ZXJfQWRkUmVmcyhyb290KSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBJcyB0aGUgZm91bmQgaXRlbSBub3QgYSB0b3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBh
bmQgbm90IG91cnNlbGYgPworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJl
ZUl0ZW0+IHNlbGZBc0l0ZW0gPSBzdGF0aWNfY2FzdDxuc0lEb2NTaGVsbFRyZWVJdGVtICo+KHRo
aXMpOworICAgICAgICAgICAgICAgIGlmIChmb3VuZEl0ZW0gIT0gcm9vdCAmJiBmb3VuZEl0ZW0g
IT0gc2VsZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgYW4gYW5jZXN0
b3Igb2YgdGhlIGZvdW5kSXRlbSA/CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNBbmNlc3Rv
ciA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJl
ZUl0ZW0+IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJl
bnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
QXNJdGVtLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0bXAgJiYgdG1wID09IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc0FuY2VzdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNBbmNlc3RvcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTm8sIHdlIGFyZSBub3QgYW4gYW5jZXN0b3IgYW5kIG91ciBkb2N1bWVudCBpcworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2FuZGJveGVkLCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgor
ICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgLSBpcyBpdCBhbiBhbmNlc3RvciBvZiBvdXJz
ID8KKyAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1w
OworICAgICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyh0
bXApKTsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG1wKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBmb3VuZEl0ZW0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFuY2VzdG9yLCBhbmQgd2UgYXJlIHNhbmRib3hl
ZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9wLW5hdmln
YXRpb24gaXMgc2V0LCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVM
X05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9
IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB0bXAtPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAgICAgICAgcmV0dXJuIE5T
X09LOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29raW5nCiAgICAgICAgIAog
ICAgIC8vIEZpcnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAtNDk1NiwxNiArNTAxNCwzMCBAQCBu
c0RvY1NoZWxsOjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5z
RG9jU2hlbGw6OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9
IG1Jc0FwcFRhYjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1No
ZWxsOjpTZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgbVNhbmRi
b3hGbGFncyA9IGFTYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhP
RElNUAorbnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFn
cykKK3sKKyAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7
Cit9CisKK05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHkoYm9vbCBhVmlz
aWJpbGl0eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICByZXR1cm4gTlNf
T0s7CiAgICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmlld2VyLT5TaG93
KCk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtODE0NSwxNiArODIxNywyOSBAQCBuc0RvY1NoZWxs
OjpJbnRlcm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hl
bGxUcmVlSXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2luZG93
VGFyZ2V0LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0Fk
ZFJlZnModGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiB0YXJn
ZXREb2NTaGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAgICAgICAKICAg
ICAgICAgYm9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRhcmdldERvY1No
ZWxsKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVudCBpcyBzYW5k
Ym94ZWQgYW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRlL2xvYWQgYSBm
cmFtZSBpdCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAgICAgLy8gRmlu
ZEl0ZW1XaXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3IgdGhlIHRhcmdl
dAorICAgICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgb3BlbiBh
IG5ldyB3aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0aG91Z2guIENoZWNrIGlm
IHdlIGFyZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYgc28uCisgICAgICAgICAgICBO
U19FTlNVUkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1JfRkFJTFVSRSk7CisgICAgICAg
ICAgICBuc0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3VtZW50KCk7Cisg
ICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICAgICAgc2FuZGJv
eEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIGlmIChzYW5kYm94Rmxh
Z3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAg
cmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG5z
Q09NUHRyPG5zSURPTVdpbmRvdz4gd2luID0KICAgICAgICAgICAgICAgICBkb19HZXRJbnRlcmZh
Y2UoR2V0QXNTdXBwb3J0cyh0aGlzKSk7CiAgICAgICAgICAgICBOU19FTlNVUkVfVFJVRSh3aW4s
IE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpOwogCiAgICAgICAgICAgICBuc0RlcGVuZGVudFN0cmlu
ZyBuYW1lKGFXaW5kb3dUYXJnZXQpOwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93
PiBuZXdXaW47CiAgICAgICAgICAgICBydiA9IHdpbi0+T3BlbihFbXB0eVN0cmluZygpLCAvLyBV
UkwgdG8gbG9hZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgICAgICAgICAgLy8g
d2luZG93IG5hbWUKQEAgLTg5MzgsMTggKzkwMjMsMzIgQEAgbnNEb2NTaGVsbDo6RG9VUklMb2Fk
KG5zSVVSSSAqIGFVUkksCiAgICAgICAgIH0KICAgICAgICAgLy8gU2V0IHRoZSByZWZlcnJlciBl
eHBsaWNpdGx5CiAgICAgICAgIGlmIChhUmVmZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJlcikgewog
ICAgICAgICAgICAgLy8gUmVmZXJyZXIgaXMgY3VycmVubHkgb25seSBzZXQgZm9yIGxpbmsgY2xp
Y2tzIGhlcmUuCiAgICAgICAgICAgICBodHRwQ2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJlZmVycmVy
VVJJKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3du
ZXJQcmluY2lwYWwoZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKSk7Ci0gICAgbnNDb250ZW50VXRp
bHM6OlNldFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVl
KTsKKyAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFsOworCisgICAgLy8g
SWYgdGhlIGNvbnRlbnQgYmVpbmcgbG9hZGVkIHNob3VsZCBiZSBzYW5kYm94ZWQgd2l0aCByZXNw
ZWN0IHRvIG9yaWdpbgorICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG51bGwgcHJpbmNp
cGFsIGhlcmUsIGFuZCB0aGVuIHRlbGwKKyAgICAvLyBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFu
bmVsT3duZXIgdG8gZm9yY2UgaXQgdG8gYmUgc2V0IGFzIHRoZQorICAgIC8vIGNoYW5uZWwgb3du
ZXIuCisgICAgaWYgKG1TYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJ
TikgeworICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEu
b3JnL251bGxwcmluY2lwYWw7MSIpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBOb3Qgc2FuZGJv
eGVkIC0gd2UgYWxsb3cgdGhlIGNvbnRlbnQgdG8gYXNzdW1lIGl0cyBuYXR1cmFsIG93bmVyLgor
ICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19RdWVyeUludGVyZmFjZShhT3duZXIpOworICAgIH0K
KworICAgIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwg
Y2hhbm5lbCwgYVVSSSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChtU2FuZGJveEZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpOwogCiAgICAgbnNDT01QdHI8bnNJ
U2NyaXB0Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW5uZWwp
OwogICAgIGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBh
Z2FpbnN0IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgICAgIHNjcmlw
dENoYW5uZWwtPgogICAgICAgICAgICAgU2V0RXhlY3V0aW9uUG9saWN5KG5zSVNjcmlwdENoYW5u
ZWw6OkVYRUNVVEVfTk9STUFMKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2Uv
bnNEb2NTaGVsbC5oIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKLS0tIGEvZG9jc2hlbGwv
YmFzZS9uc0RvY1NoZWxsLmgKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKQEAgLTc4
MSwxNiArNzgxLDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBDcmVhdGUoKSBpcyBjYWxsZWQsIHRo
ZSB0eXBlIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuCiAgICAgUFJJbnQzMiAgICAgICAgICAg
ICAgICAgICAgbUl0ZW1UeXBlOwogCiAgICAgLy8gSW5kZXggaW50byB0aGUgU0hUcmFuc2FjdGlv
biBsaXN0LCBpbmRpY2F0aW5nIHRoZSBwcmV2aW91cyBhbmQgY3VycmVudAogICAgIC8vIHRyYW5z
YWN0aW9uIGF0IHRoZSB0aW1lIHRoYXQgdGhpcyBEb2NTaGVsbCBiZWdpbnMgdG8gbG9hZAogICAg
IFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1QcmV2aW91c1RyYW5zSW5kZXg7CiAgICAgUFJJ
bnQzMiAgICAgICAgICAgICAgICAgICAgbUxvYWRlZFRyYW5zSW5kZXg7CiAKKyAgICBQUlVpbnQz
MiAgICAgICAgICAgICAgICAgICBtU2FuZGJveEZsYWdzOworCiAgICAgYm9vbCAgICAgICAgICAg
ICAgICAgICAgICAgbUNyZWF0ZWQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFs
bG93U3ViZnJhbWVzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1BsdWdp
bnM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93SmF2YXNjcmlwdDsKICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzOwogICAgIGJv
b2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ltYWdlczsKICAgICBib29sICAgICAgICAg
ICAgICAgICAgICAgICBtQWxsb3dETlNQcmVmZXRjaDsKICAgICBib29sICAgICAgICAgICAgICAg
ICAgICAgICBtQWxsb3dXaW5kb3dDb250cm9sOwpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9u
c0lEb2NTaGVsbC5pZGwgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAotLS0gYS9kb2Nz
aGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAorKysgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxs
LmlkbApAQCAtNjcsMTcgKzY3LDE3IEBAIGludGVyZmFjZSBuc0lSZXF1ZXN0OwogaW50ZXJmYWNl
IG5zSVNIRW50cnk7CiBpbnRlcmZhY2UgbnNJTGF5b3V0SGlzdG9yeVN0YXRlOwogaW50ZXJmYWNl
IG5zSVNlY3VyZUJyb3dzZXJVSTsKIGludGVyZmFjZSBuc0lET01TdG9yYWdlOwogaW50ZXJmYWNl
IG5zSVByaW5jaXBhbDsKIGludGVyZmFjZSBuc0lXZWJCcm93c2VyUHJpbnQ7CiBpbnRlcmZhY2Ug
bnNJVmFyaWFudDsKIAotW3NjcmlwdGFibGUsIHV1aWQoMDYxNWQxYTYtMzEzZi0xMWUxLWEwNDMt
NmM2MjZkNjk2NzVjKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDliMjgzMzM3LTA5N2QtNGZhOC1hMmRh
LTkxNjMxOGVhZjgyOCldCiBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogewog
ICAvKioKICAgICogTG9hZHMgYSBnaXZlbiBVUkkuICBUaGlzIHdpbGwgZ2l2ZSBwcmlvcml0eSB0
byBsb2FkaW5nIHRoZSByZXF1ZXN0ZWQgVVJJCiAgICAqIGluIHRoZSBvYmplY3QgaW1wbGVtZW50
aW5nCXRoaXMgaW50ZXJmYWNlLiAgSWYgaXQgY2FuJ3QgYmUgbG9hZGVkIGhlcmUKICAgICogaG93
ZXZlciwgdGhlIFVSTCBkaXNwYXRjaGVyIHdpbGwgZ28gdGhyb3VnaCBpdHMgbm9ybWFsIHByb2Nl
c3Mgb2YgY29udGVudAogICAgKiBsb2FkaW5nLgogICAgKgpAQCAtNTk3LDkgKzU5Nyw2NyBAQCBp
bnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogICAgKi8KICAgYXR0cmlidXRlIG5z
SUF0b20gcGFyZW50Q2hhcnNldDsKIAogICAvKgogICAgKiBJbiBhIGNoaWxkIGRvY3NoZWxsLCB0
aGlzIGlzIHRoZSBzb3VyY2Ugb2YgcGFyZW50Q2hhcnNldAogICAgKiBAc2VlIG5zSVBhcnNlcgog
ICAgKi8KICAgYXR0cmlidXRlIFBSSW50MzIgcGFyZW50Q2hhcnNldFNvdXJjZTsKKworICAvKioK
KyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3NoZWxsLiBUaGVzZSByZWZsZWN0IHRo
ZSB2YWx1ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUgb2YgdGhlIGFzc29jaWF0ZWQg
SUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZgorICAgKiBleGlzdGVudC4gU2Vl
IHRoZSBIVE1MNSBzcGVjIGZvciBtb3JlIGRldGFpbHMuCisgICAqIFRoZXNlIGZsYWdzIG9uIHRo
ZSBkb2NzaGVsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzYW5kYm94CisgICAq
IGF0dHJpYnV0ZSwgd2hpY2ggaXMgbW9kaWZpYWJsZS4gVGhleSBhcmUgb25seSB1c2VkIHdoZW4g
bG9hZGluZyBuZXcKKyAgICogY29udGVudCwgc2FuZGJveCBmbGFncyBhcmUgYWxzbyBpbW11dGFi
bHkgc2V0IG9uIHRoZSBkb2N1bWVudCB3aGVuIGl0IGlzCisgICAqIGxvYWRlZC4KKyAgICogVGhl
IHNhbmRib3ggZmxhZ3Mgb2YgYSBkb2N1bWVudCBkZXBlbmQgb24gdGhlIHNhbmRib3ggZmxhZ3Mg
b24gaXRzCisgICAqIGRvY3NoZWxsIGFuZCBvZiBpdHMgcGFyZW50IGRvY3VtZW50LCBpZiBhbnku
CisgICAqLworICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzYW5kYm94RmxhZ3M7CisKKyAgLyoq
CisgICAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyBicm93c2lu
ZyBjb250ZXh0cyBvdGhlciB0aGFuCisgICAqIHRoZSBzYW5kYm94ZWQgYnJvd3NpbmcgY29udGV4
dCBpdHNlbGYgKG9yIGJyb3dzaW5nIGNvbnRleHRzIGZ1cnRoZXIKKyAgICogbmVzdGVkIGluc2lk
ZSBpdCksIGFuZCB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQuCisgICAqLworICBjb25z
dCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9OQVZJR0FUSU9OICA9IDB4MTsKKworICAvKioKKyAg
ICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWlyIHRvcC1s
ZXZlbCBicm93c2luZworICAgKiBjb250ZXh0LgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9u
ZyBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiA9IDB4MjsKKworICAvKioKKyAgICogVGhp
cyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBpbnN0YW50aWF0aW5nIHBsdWdpbnMsIHdoZXRo
ZXIgdXNpbmcgdGhlCisgICAqIGVtYmVkIGVsZW1lbnQsIHRoZSBvYmplY3QgZWxlbWVudCwgdGhl
IGFwcGxldCBlbGVtZW50LCBvciB0aHJvdWdoCisgICAqIG5hdmlnYXRpb24gb2YgYSBuZXN0ZWQg
YnJvd3NpbmcgY29udGV4dCwgdW5sZXNzIHRob3NlIHBsdWdpbnMgY2FuIGJlCisgICAqIHNlY3Vy
ZWQuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5TID0gMHg0
OworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgZm9yY2VzIGNvbnRlbnQgaW50byBhIHVuaXF1ZSBv
cmlnaW4sIHRodXMgcHJldmVudGluZyBpdCBmcm9tCisgICAqIGFjY2Vzc2luZyBvdGhlciBjb250
ZW50IGZyb20gdGhlIHNhbWUgb3JpZ2luLgorICAgKiBUaGlzIGZsYWcgYWxzbyBwcmV2ZW50cyBz
Y3JpcHQgZnJvbSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byB0aGUKKyAgICogZG9jdW1lbnQu
Y29va2llIElETCBhdHRyaWJ1dGUsIGFuZCBibG9ja3MgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4K
KyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX09SSUdJTiA9IDB4ODsKKwor
ICAvKioKKyAgICogVGhpcyBmbGFnIGJsb2NrcyBmb3JtIHN1Ym1pc3Npb24uCisgICAqLworICBj
b25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9GT1JNUyA9IDB4MTA7CisKKyAgLyoqCisgICAq
IFRoaXMgZmxhZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlvbi4KKyAgICovCisgIGNvbnN0IHVuc2ln
bmVkIGxvbmcgU0FOREJPWEVEX1NDUklQVFMgPSAweDIwOworCisgIC8qKgorICAgKiBUaGlzIGZs
YWcgYmxvY2tzIGZlYXR1cmVzIHRoYXQgdHJpZ2dlciBhdXRvbWF0aWNhbGx5LCBzdWNoIGFzCisg
ICAqIGF1dG9tYXRpY2FsbHkgcGxheWluZyBhIHZpZGVvIG9yIGF1dG9tYXRpY2FsbHkgZm9jdXNp
bmcgYSBmb3JtIGNvbnRyb2wuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hF
RF9BVVRPTUFUSUNfRkVBVFVSRVMgPSAweDQwOwogfTsKZGlmZiAtLWdpdCBhL2RvbS9iYXNlL25z
R2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcAotLS0gYS9kb20v
YmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3Bw
CkBAIC04MjE4LDE2ICs4MjE4LDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRTZXNzaW9uU3RvcmFn
ZShuc0lET00KICAgaWYgKCFtU2Vzc2lvblN0b3JhZ2UpIHsKICAgICAqYVNlc3Npb25TdG9yYWdl
ID0gbnNudWxsOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVu
dCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAgICAg
fQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFn
IHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAgaWYg
KG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9P
UklHSU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9
CisKICAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTZXNzaW9uU3RvcmFnZUZvclByaW5j
aXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyht
U2Vzc2lvblN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAjaWZk
ZWYgUFJfTE9HR0lORwogICAgIGlmIChQUl9MT0dfVEVTVChnRE9NTGVha1BSTG9nLCBQUl9MT0df
REVCVUcpKSB7CkBAIC04MzA1LDE2ICs4MzExLDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRMb2Nh
bFN0b3JhZ2UobnNJRE9NU3QKICAgICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9kb20v
c3RvcmFnZW1hbmFnZXI7MSIsICZydik7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsK
IAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAgICAg
IG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAorICAgIC8v
IElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAgICAv
LyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9jICYmICht
RG9jLT5TYW5kYm94RmxhZ3MoKSAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKSkgewor
ICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAgcnYg
PSBzdG9yYWdlTWFuYWdlci0+R2V0TG9jYWxTdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9j
dW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldHRlcl9BZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VD
Q0VTUyhydiwgcnYpOwogICB9CiAKICAgTlNfQUREUkVGKCphTG9jYWxTdG9yYWdlID0gbUxvY2Fs
U3RvcmFnZSk7CiAgIHJldHVybiBOU19PSzsKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZhY2VzL2h0
bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lE
T01IVE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01I
VE1MSUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1M
SUZyYW1lRWxlbWVudC5pZGwKQEAgLTMzLDQ0ICszMyw0NiBAQAogICogZGVjaXNpb24gYnkgZGVs
ZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3Rp
Y2UKICAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExH
UEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNp
cGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0aGUgdGVy
bXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoKICAqICoq
KioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJuc0lET01IVE1MRWxl
bWVudC5pZGwiCisjaW5jbHVkZSAibnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRsIgogCiAv
KioKICAqIFRoZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2UgaXMgdGhlIGludGVy
ZmFjZSB0byBhIFtYXUhUTUwKICAqIGlmcmFtZSBlbGVtZW50LgogICoKICAqIFRoaXMgaW50ZXJm
YWNlIGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lmaWNhdGlv
bjoKICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgogICogd2l0
aCBjaGFuZ2VzIGZyb20gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgV0hBVFdHIEhUTUwgc3BlY2lmaWNh
dGlvbjoKICAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdv
cmsvCiAgKi8KIAotW3NjcmlwdGFibGUsIHV1aWQoZDRlODcwYmQtNDUyYy00ODYwLWI5M2MtZjRl
ZTAwYmEzM2Y2KV0KK1tzY3JpcHRhYmxlLCB1dWlkKDUyZjYyNDRiLWIxZjUtNGY0Yy04ZmYzLTdl
MTQ2MzE2ZjQxMSldCiBpbnRlcmZhY2UgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgOiBuc0lET01I
VE1MRWxlbWVudAogewogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBhbGln
bjsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgZnJhbWVCb3JkZXI7CiAg
ICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGhlaWdodDsKICAgICAgICAgICAg
YXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbG9uZ0Rlc2M7CiAgICAgICAgICAgIGF0dHJpYnV0
ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbkhlaWdodDsKICAgICAgICAgICAgYXR0cmlidXRlIERP
TVN0cmluZyAgICAgICAgbWFyZ2luV2lkdGg7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgICAgICAgIG5hbWU7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNj
cm9sbGluZzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc3JjOwogICAg
ICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB3aWR0aDsKICAgLy8gSW50cm9kdWNl
ZCBpbiBET00gTGV2ZWwgMjoKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTURvY3VtZW50ICAg
Y29udGVudERvY3VtZW50OwogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NV2luZG93ICAgICBj
b250ZW50V2luZG93OwogCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01ET01TZXR0YWJsZVRv
a2VuTGlzdCBzYW5kYm94OwogCiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBpZnJhbWUg
ZWxlbWVudHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0byBiZSBw
cmVzZW50CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3ViIGRvY3Vt
ZW50IHRvIGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRwczovL3dp
a2kubW96aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkKICAgICAg
ICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVuOwogfTsK
ZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2lu
ZG93V2F0Y2hlci5jcHAgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9u
c1dpbmRvd1dhdGNoZXIuY3BwCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNo
ZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2lu
ZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcApAQCAtNjAzLDE2ICs2MDMsMzMgQEAg
bnNXaW5kb3dXYXRjaGVyOjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAgaWYgKCFu
ZXdEb2NTaGVsbEl0ZW0pIHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3BlbiB1cCBh
IG5ldyB3aW5kb3cgb3Vyc2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJvdmlkZXIg
Zm9yIG9uZS4gIEluIGVpdGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmlnaHQKICAg
ICAvLyBuYW1lIG9uIGl0LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAgICAvLyBJ
ZiB0aGUgcGFyZW50IHRyeWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94ZWQsCisg
ICAgLy8gdGhpcyBpcyBub3QgYWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlmIChhUGFy
ZW50KSB7CisgICAgICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAgICAgYVBh
cmVudC0+R2V0RG9jdW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBuc0NPTVB0
cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKworICAgICAg
aWYgKGRvYykgeworICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICBz
YW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgICAgIGlmIChzYW5kYm94
RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAgICAgICBy
ZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKwogICAg
IC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHByb3ZpZGVyIGZv
ciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3BlbmluZyBhIGRpYWxv
ZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8vIGlmIHdlJ3Jl
IG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNocm9tZSBmbGFn
cyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVXaW4gPSBkb19R
dWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNocm9tZVdpbiAm
JgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9N
T0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hy
b21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>600577</attachid>
            <date>2012-02-24 17:13:17 -0800</date>
            <delta_ts>2012-03-15 08:56:24 -0700</delta_ts>
            <desc>WIP - iframe sandbox v5</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>45338</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZTVmOTEwZjlkODU0ODA3YzBhNzRlNTgzMTUw
ZDBiNzAxYmEwMmFiYwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtMTkwMywzNSArMTkwMywzNyBAQCBwdWJsaWM6CiAgICAqIGZy
b20gdGhlIGRvY3VtZW50IGl0IGNvbWVzIGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQg
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsK
IAogICAvKioKICAgICogU2V0IHRoZSBnaXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRo
ZSBnaXZlbiBjaGFubmVsLCBpZgogICAgKiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBv
ZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwgbWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JB
Ym91dEJsYW5rIGlzIHRydWUsIHRoZW4gYWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHBy
aW5jaXBhbCBzZXQgdXAgb24gaXQuCi0gICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LiBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQg
b24gdGhlIGNoYW5uZWwsIGV2ZW4gaWYgdGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAor
ICAgKiBmcm9tIHRoZSBjaGFubmVsLgogICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIg
dGhlIHByaW5jaXBhbCB3YXMgc2V0IHVwIGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5l
bC4KICAgICovCiAgIHN0YXRpYyBib29sIFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCog
YUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNo
YW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkq
IGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJv
dXRCbGFuayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9y
QWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VP
d25lciA9IGZhbHNlKTsKIAogICBzdGF0aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcm
IGFCaW5hcnlEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJh
c2U2NFN0cmluZyk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBh
QXNjaWlTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURh
dGEpOwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFz
c2VkIGluIHBhcmFtZXRlciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0
eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAg
KiBmdW5jdGlvbmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZv
cm0gb3duZXIuCiAgICAqIE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29t
cGxldGUgbWFrZXMgc2Vuc2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAg
ICogQHBhcmFtIGFJbnB1dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0
IGNhbid0IGJlIG51bGwuCiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBo
YXMgYXV0b2NvbXBsZXRlIGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21w
bGV0ZUVuYWJsZWQobnNJRE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIApAQCAtMTk0Miwx
NiArMTk0NCwyNiBAQCBwdWJsaWM6CiAgICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFVSSXMu
ICBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gVVJJJ3MgcHJlcGF0aCBpcwogICAgKiBpbiB0aGUg
bGlzdCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICoKICAgICogQ29tcGFyaXNvbnMgYXJlIGNh
c2UtaW5zZW5zaXRpdmUsIGFuZCB3aGl0ZXNwYWNlIGJldHdlZW4gZWxlbWVudHMgb2YgdGhlCiAg
ICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGlzIGlnbm9yZWQuCiAgICAqLwogICBzdGF0aWMgYm9v
bCBVUklJc0Nocm9tZU9ySW5QcmVmKG5zSVVSSSAqYVVSSSwgY29uc3QgY2hhciAqYVByZWYpOwog
CisgIC8qKgorICAgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0
cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICAgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBjb252
ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxseS4KKyAgICoKKyAgICog
QHBhcmFtIGFBdHRyaWJ1dGUgCXRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAg
ICogQHJldHVybiAJCQl0aGUgc2V0IG9mIGZsYWdzCisgICAqLworICBzdGF0aWMgUFJVaW50MzIg
UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhjb25zdCBuc0FTdHJpbmcmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZGJveEF0dHIpOworCiBw
cml2YXRlOgogICBzdGF0aWMgYm9vbCBJbml0aWFsaXplRXZlbnRUYWJsZSgpOwogCiAgIHN0YXRp
YyBuc3Jlc3VsdCBFbnN1cmVTdHJpbmdCdW5kbGUoUHJvcGVydGllc0ZpbGUgYUZpbGUpOwogCiAg
IHN0YXRpYyBuc0lET01TY3JpcHRPYmplY3RGYWN0b3J5ICpHZXRET01TY3JpcHRPYmplY3RGYWN0
b3J5KCk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEhvbGRTY3JpcHRPYmplY3QoUFJVaW50MzIgYUxh
bmdJRCwgdm9pZCogYU9iamVjdCk7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25z
SURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKLS0tIGEvY29u
dGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNJRG9jdW1lbnQuaApAQCAtMTE5LDE4ICsxMTksMTggQEAgY2xhc3MgTG9hZGVyOwogCiBuYW1l
c3BhY2UgZG9tIHsKIGNsYXNzIExpbms7CiBjbGFzcyBFbGVtZW50OwogfSAvLyBuYW1lc3BhY2Ug
ZG9tCiB9IC8vIG5hbWVzcGFjZSBtb3ppbGxhCiAKICNkZWZpbmUgTlNfSURPQ1VNRU5UX0lJRCBc
Ci17IDB4MjgzZWMyN2QsIDB4NWIyMywgMHg0OWIyLCBcDQotICB7IDB4OTQsIDB4ZDksIDB4OSwg
MHhiNSwgMHhkYiwgMHg0NSwgMHgzMCwgMHg3MyB9IH0NCit7IDB4NTdmZTQ0YWUsIDB4NjY1Niwg
MHg0NGI4LCBcCisgIHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhhNywgMHg0MywgMHgyOCwgMHhiZSwg
MHg4NiB9IH0KIAogCiAvLyBGbGFnIGZvciBBZGRTdHlsZVNoZWV0KCkuCiAjZGVmaW5lIE5TX1NU
WUxFU0hFRVRfRlJPTV9DQVRBTE9HICAgICAgICAgICAgICAgICgxIDw8IDApCiAKIC8vIEVudW0g
Zm9yIHJlcXVlc3RpbmcgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZG9jdW1lbnQgd2hlbiBjcmVhdGlu
ZyBhIGRvYwogZW51bSBEb2N1bWVudEZsYXZvciB7CiAgIERvY3VtZW50Rmxhdm9yTGVnYWN5R3Vl
c3MsIC8vIGNvbXBhdCB3aXRoIG9sZCBjb2RlIHVudGlsIG1hZGUgSFRNTDUtY29tcGxpYW50CkBA
IC00NTYsMTcgKzQ1NiwyNiBAQCBwdWJsaWM6CiAgICAqIGNhbGxlcnMgYXJlIGV4cGVjdGVkIHRv
IHRha2UgYWN0aW9uIGFzIG5lZWRlZCBpZiB0aGV5IHdhbnQgdGhpcwogICAgKiBjaGFuZ2UgdG8g
YWN0dWFsbHkgY2hhbmdlIGFueXRoaW5nIGltbWVkaWF0ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0
aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9wdGlvbnMoUFJVaW50MzIgYUJpZGlPcHRpb25z
KQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJpZGlPcHRpb25zOwogICB9Ci0gIAorCisgIC8q
KgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQuCisgICAqIEBz
ZWUgbnNJRG9jU2hlbGwuaWRsIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWlu
dDMyIFNhbmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsK
KyAgfQorCiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxz
byBnZXQgc2V0IGZyb20gb3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncyku
CiAgICAqLwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmll
bGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRl
ckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7
CiAKICAgLyoqCkBAIC0xNzk3LDE2ICsxODA2LDIxIEBAIHByb3RlY3RlZDoKICAgLy8gSWYgbUlz
U3RhdGljRG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBv
cmlnaW5hbAogICAvLyBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5h
bERvY3VtZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQuICBX
aGF0IHRoaXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5o
CiAgIFBSVWludDMyIG1CaWRpT3B0aW9uczsKIAorICAvLyBUaGUgc2FuZGJveCBmbGFncyBvbiB0
aGUgZG9jdW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJp
YnV0ZSBvZiB0aGUKKyAgLy8gYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNv
bnRlbnQsIGlmIGV4aXN0ZW50LiBUaGVzZSBhcmUgc2V0IGF0IGxvYWQgdGltZSBhbmQKKyAgLy8g
YXJlIGltbXV0YWJsZSAtIHNlZSBuc0lEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJsZSBmbGFn
cy4KKyAgUFJVaW50MzIgbVNhbmRib3hGbGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5n
dWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAK
ICAgLy8gVGhlIGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0
cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRl
bnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9j
b250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3Jj
L25zQ29udGVudFV0aWxzLmNwcApAQCAtNzQxLDE2ICs3NDEsNjIgQEAgbnNDb250ZW50VXRpbHM6
OkdldFBhcnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1Bh
cnNlclNlcnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikp
IHsKICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVy
biBzUGFyc2VyU2VydmljZTsKIH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJz
ZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVj
dGl2ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5
LgorICoKKyAqIEBwYXJhbSBhQXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUKKyAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLwor
UFJVaW50MzIKK25zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNv
bnN0IG5zQVN0cmluZyYgc2FuZGJveEF0dHJWYWx1ZSkKK3sKKyAgLy8gSWYgdGhlcmUncyBhIHNh
bmRib3ggYXR0cmlidXRlIGF0IGFsbCAoYW5kIHRoZXJlIGlzIGlmIHRoaXMgaXMgYmVpbmcKKyAg
Ly8gY2FsbGVkKSwgc3RhcnQgb2ZmIGJ5IHNldHRpbmcgYWxsIHRoZSByZXN0cmljdGlvbiBmbGFn
cy4KKyAgUFJVaW50MzIgb3V0ID0gbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9OQVZJR0FUSU9OIHwK
KyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gfAorICAgIG5z
SURvY1NoZWxsOjpTQU5EQk9YRURfUExVR0lOUyB8IG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJ
R0lOIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TIHwgbnNJRG9jU2hlbGw6OlNB
TkRCT1hFRF9TQ1JJUFRTIHwKKyAgICBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0FVVE9NQVRJQ19G
RUFUVVJFUzsKKworICBpZiAoIXNhbmRib3hBdHRyVmFsdWUuSXNFbXB0eSgpKSB7CisgICAgLy8g
VGhlIHNlcGFyYXRvciBvcHRpb25hbCBmbGFnIGlzIHVzZWQgYmVjYXVzZSB0aGUgSFRNTDUgc3Bl
YyBzYXlzIGFueQorICAgIC8vIHdoaXRlc3BhY2UgaXMgb2sgYXMgYSBzZXBhcmF0b3IsIHdoaWNo
IGlzIHdoYXQgdGhpcyBkb2VzLgorICAgIEhUTUxTcGxpdE9uU3BhY2VzVG9rZW5pemVyIHRva2Vu
aXplcihzYW5kYm94QXR0clZhbHVlLCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6
ZXJUZW1wbGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9P
UFRJT05BTCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAg
ICAgbnNEZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisK
KyAgICAgIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRzIikp
IHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFM7CisgICAg
ICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNhbWUtb3Jp
Z2luIikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTjsK
KyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9y
bXMiKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9YRURfRk9STVM7Cisg
ICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNjcmlw
dHMiKSkgeworICAgICAgICAvLyBhbGxvdy1zY3JpcHRzIHJlbW92ZXMgYm90aCBTQU5EQk9YRURf
U0NSSVBUUyBhbmQKKyAgICAgICAgLy8gU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUy4KKyAg
ICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFM7CisgICAgICAgIG91
dCAmPSB+bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisgICAgICB9
IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXRvcC1uYXZpZ2F0
aW9uIikpIHsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVM
X05BVklHQVRJT047CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIG91dDsKK30KIAog
I2lmZGVmIE1PWl9YVEYKIG5zSVhURlNlcnZpY2UqCiBuc0NvbnRlbnRVdGlsczo6R2V0WFRGU2Vy
dmljZSgpCiB7CiAgIGlmICghc1hURlNlcnZpY2UpIHsKICAgICBuc3Jlc3VsdCBydiA9IENhbGxH
ZXRTZXJ2aWNlKGtYVEZTZXJ2aWNlQ0lELCAmc1hURlNlcnZpY2UpOwogICAgIGlmIChOU19GQUlM
RUQocnYpKSB7CkBAIC02MDU1LDE3ICs2MTAxLDE4IEBAIG5zQ29udGVudFV0aWxzOjpVUklJbmhl
cml0c1NlY3VyaXR5Q29udGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJlc3VsdCk7
CiB9CiAKIC8vIHN0YXRpYwogYm9vbAogbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVy
KG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lcikKIHsKICAgLy8KICAgLy8gU2V0IHRoZSBvd25l
ciBvZiB0aGUgY2hhbm5lbCwgYnV0IG9ubHkgZm9yIGNoYW5uZWxzIHRoYXQgY2FuJ3QKICAgLy8g
cHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dC4KICAgLy8KICAgLy8gWFhYOiBJdCBz
ZWVtcyB3cm9uZyB0aGF0IHRoZSBvd25lciBpcyBpZ25vcmVkIC0gZXZlbiBpZiBvbmUgaXMKICAg
Ly8gICAgICBzdXBwbGllZCkgdW5sZXNzIHRoZSBVUkkgaXMgamF2YXNjcmlwdCBvciBkYXRhIG9y
IGFib3V0OmJsYW5rLgogICAvLyBYWFg6IElmIHRoaXMgaXMgZXZlciBjaGFuZ2VkLCBjaGVjayBh
bGwgY2FsbGVycyBmb3Igd2hhdCBvd25lcnMKQEAgLTYwNzMsMjMgKzYxMjAsMjcgQEAgbnNDb250
ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaQogICAvLyAgICAgIGNvbW1lbnRzIGlu
IG5zRG9jU2hlbGw6OkxvYWRVUkkgd2hlcmUgd2UgZmFsbCBiYWNrIG9uCiAgIC8vICAgICAgaW5o
ZXJpdGluZyB0aGUgb3duZXIgaWYgY2FsbGVkIGZyb20gY2hyb21lLiAgVGhhdCB3b3VsZCBiZQog
ICAvLyAgICAgIHZlcnkgd3JvbmcgaWYgdGhpcyBjb2RlIGNoYW5nZWQgYW55dGhpbmcgYnV0IGNo
YW5uZWxzIHRoYXQKICAgLy8gICAgICBjYW4ndCBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBj
b250ZXh0IQogICAvLwogICAvLyAgICAgIChDdXJyZW50bHkgY2hyb21lIFVSSXMgc2V0IHRoZSBv
d25lciB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQhCiAgIC8vICAgICAgU28gc2V0dGluZyBhIE5VTEwg
b3duZXIgd291bGQgYmUgYmFkISkKICAgLy8KKyAgLy8gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwg
dGhlIG93bmVyIHdpbGwgYmUgc2V0LCBldmVuIGZvciBhIGNoYW5uZWwgdGhhdAorICAvLyBjYW4g
cHJvdmlkZSBpdHMgb3duIHNlY3VyaXR5IGNvbnRleHQuIFRoaXMgaXMgdXNlZCBmb3IgdGhlIEhU
TUw1IElGUkFNRQorICAvLyBzYW5kYm94IGF0dHJpYnV0ZSwgc28gd2UgY2FuIGZvcmNlIHRoZSBj
aGFubmVsIChhbmQgaXRzIGRvY3VtZW50KSB0bworICAvLyBleHBsaWNpdGx5IGhhdmUgYSBudWxs
IHByaW5jaXBhbC4KICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBlY3QgVVJJSW5oZXJpdHNT
ZWN1cml0eUNvbnRleHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAgIC8vIGFib3V0OmJsYW5r
IFVSSSwgc28gZG9uJ3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0aGlzIGNhbGwgZmFpbHMu
CiAgIC8vIFRoaXMgY29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBvbmUgaW4gbnNEb2NTaGVs
bDo6SW50ZXJuYWxMb2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5nIGZvciB0aGluZ3MgdGhh
dCB3aWxsIHVzZSB0aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGluaGVyaXQgfHwgKGFTZXRV
cEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpIHsKKyAgaWYgKGFGb3Jj
ZU93bmVyIHx8ICgoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkks
ICZpbmhlcml0KSkgJiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYm
IE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSkpIHsKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIoYUxv
YWRpbmdQcmluY2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8KICAgLy8gZmls
ZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMgaXMgYSBmaWxlOiBsb2Fk
IG9wZW5lZCBmcm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVlZApkaWZmIC0tZ2l0IGEv
Y29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1
bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAorKysgYi9jb250
ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0yMzkyLDE2ICsyMzkyLDI1IEBAIG5zRG9j
dW1lbnQ6OlN0YXJ0RG9jdW1lbnRMb2FkKGNvbnN0IGNoYXIKICAgICBGaW5kQ2hhckluUmVhZGFi
bGUoJzsnLCBzZW1pY29sb24sIGVuZCk7CiAgICAgU2V0Q29udGVudFR5cGVJbnRlcm5hbChTdWJz
dHJpbmcoc3RhcnQsIHNlbWljb2xvbikpOwogICB9CiAKICAgUmV0cmlldmVSZWxldmFudEhlYWRl
cnMoYUNoYW5uZWwpOwogCiAgIG1DaGFubmVsID0gYUNoYW5uZWw7CiAKKyAgLy8gSWYgdGhpcyBk
b2N1bWVudCBpcyBiZWluZyBsb2FkZWQgYnkgYSBkb2NzaGVsbCwgY29weSBpdHMgc2FuZGJveCBm
bGFncworICAvLyB0byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11dGFibGUgYWZ0ZXIgYmVp
bmcgc2V0IGhlcmUuCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1ZXJ5
SW50ZXJmYWNlKGFDb250YWluZXIpOworCisgIGlmIChkb2NTaGVsbCkgeworICAgIG5zcmVzdWx0
IHJ2ID0gZG9jU2hlbGwtPkdldFNhbmRib3hGbGFncygmbVNhbmRib3hGbGFncyk7CisgICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKyAgfQorCiAgIG5zcmVzdWx0IHJ2ID0gSW5pdENTUCgp
OwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIHJldHVybiBOU19PSzsKIH0KIAog
bnNyZXN1bHQKIG5zRG9jdW1lbnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNl
L3NyYy9uc0ZyYW1lTG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5j
cHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAorKysgYi9jb250ZW50
L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCkBAIC0xMTMsMTYgKzExMywxOCBAQAogI2luY2x1
ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNl
cy5oIgogI2luY2x1ZGUgIm1vemlsbGEvdW51c2VkLmgiCiAjaW5jbHVkZSAibW96aWxsYS9kb20v
RWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvbGF5b3V0L1JlbmRlckZyYW1lUGFyZW50Lmgi
CiAKICNpbmNsdWRlICJqc2FwaS5oIgogCisjaW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVudC5o
IgorCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpk
b207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwogdXNpbmcgbmFtZXNwYWNlIG1v
emlsbGE6OmxheW91dDsKIHR5cGVkZWYgRnJhbWVNZXRyaWNzOjpWaWV3SUQgVmlld0lEOwogCiBj
bGFzcyBuc0FzeW5jRG9jU2hlbGxEZXN0cm95ZXIgOiBwdWJsaWMgbnNSdW5uYWJsZQogewpAQCAt
NDY4LDE2ICs0NzAsNjQgQEAgbnNGcmFtZUxvYWRlcjo6UmVhbGx5U3RhcnRMb2FkaW5nSW50ZXJu
YQogICAvLyBKdXN0IHRvIGJlIHNhZmUsIHJlY2hlY2sgdXJpLgogICBydiA9IENoZWNrVVJJTG9h
ZChtVVJJVG9Mb2FkKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBuc0NPTVB0
cjxuc0lEb2NTaGVsbExvYWRJbmZvPiBsb2FkSW5mbzsKICAgbURvY1NoZWxsLT5DcmVhdGVMb2Fk
SW5mbyhnZXR0ZXJfQWRkUmVmcyhsb2FkSW5mbykpOwogICBOU19FTlNVUkVfVFJVRShsb2FkSW5m
bywgTlNfRVJST1JfRkFJTFVSRSk7CiAKKyAgLy8gSXMgdGhpcyBhbiA8aWZyYW1lPiB3aXRoIGEg
c2FuZGJveCBhdHRyaWJ1dGUgb3IgYSBwYXJlbnQgd2hpY2ggaXMKKyAgLy8gc2FuZGJveGVkID8K
KyAgbnNIVE1MSUZyYW1lRWxlbWVudCAqIGlmcmFtZSA9CisgICAgbnNIVE1MSUZyYW1lRWxlbWVu
dDo6RnJvbUNvbnRlbnQobU93bmVyQ29udGVudCk7CisKKyAgUFJVaW50MzIgc2FuZGJveEZsYWdz
ID0gMDsKKworICBpZiAoaWZyYW1lKSB7CisgICAgc2FuZGJveEZsYWdzID0gaWZyYW1lLT5HZXRT
YW5kYm94RmxhZ3MoKTsKKworICAgIFBSVWludDMyIHBhcmVudFNhbmRib3hGbGFncyA9IDA7CisK
KyAgICAvLyBHZXQgdGhlIHBhcmVudCdzIHNhbmRib3ggZmxhZ3MsIHRoZXkncmUgbmVlZGVkIHRv
IGRldGVybWluZSBpZiB0aGUKKyAgICAvLyBmcmFtZSBiZWluZyBsb2FkZWQgbmVlZHMgdG8gYmUg
c2FuZGJveGVkLgorICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHBhcmVudERvY1No
ZWxsSXRlbTsKKyAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBjdXJEb2NTaGVsbEl0
ZW0gPSBkb19RdWVyeUludGVyZmFjZShtRG9jU2hlbGwpOworCisgICAgaWYgKE5TX1NVQ0NFRURF
RChjdXJEb2NTaGVsbEl0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJlbnREb2NTaGVs
bEl0ZW0pKSkpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBwYXJlbnREb2MgPSBkb19H
ZXRJbnRlcmZhY2UocGFyZW50RG9jU2hlbGxJdGVtKTsKKworICAgICAgaWYgKHBhcmVudERvYykg
eworICAgICAgICBwYXJlbnRTYW5kYm94RmxhZ3MgPSBwYXJlbnREb2MtPlNhbmRib3hGbGFncygp
OworICAgICAgfQorICAgIH0KKworICAgIGlmIChzYW5kYm94RmxhZ3MgfHwgcGFyZW50U2FuZGJv
eEZsYWdzKSB7CisgICAgICBpZiAocGFyZW50U2FuZGJveEZsYWdzKSB7CisgICAgICAgIC8vIFRo
ZSBjaGlsZCBjYW4gb25seSBhZGQgcmVzdHJpY3Rpb25zLCBub3QgcmVtb3ZlIHRoZW0uCisgICAg
ICAgIHNhbmRib3hGbGFncyB8PSBwYXJlbnRTYW5kYm94RmxhZ3M7CisgICAgICB9CisKKyAgICAg
IG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFncyk7CisKKyAgICAgIC8vIFNl
dCB1cCB0aGUgYWN0dWFsIHNhbmRib3hpbmcgZm9yIHNjcmlwdHMgYW5kIHBsdWdpbnMgYXMgc3Bl
Y2lmaWVkLgorICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURf
U0NSSVBUUykgeworICAgICAgICBtRG9jU2hlbGwtPlNldEFsbG93SmF2YXNjcmlwdChmYWxzZSk7
CisgICAgICB9CisKKyAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJP
WEVEX1BMVUdJTlMpIHsKKyAgICAgICAgbURvY1NoZWxsLT5TZXRBbGxvd1BsdWdpbnMoZmFsc2Up
OworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIElmIHRoaXMgaXMgYW4gPGlmcmFtZT4gYW5k
IGl0J3Mgc2FuZGJveGVkIHdpdGggcmVzcGVjdCB0byBvcmlnaW4KKyAgLy8gd2Ugd2lsbCBzZXQg
aXQgdXAgd2l0aCBhIG51bGwgcHJpbmNpcGFsIGxhdGVyIGluIG5zRG9jU2hlbGw6OkRvVVJJTG9h
ZC4KKyAgLy8gV2UgZG8gaXQgdGhlcmUgdG8gY29ycmVjdGx5IHNhbmRib3ggY29udGVudCB0aGF0
IHdhcyBsb2FkZWQgaW50bworICAvLyB0aGUgaWZyYW1lIHZpYSBvdGhlciBtZXRob2RzIHRoYW4g
dGhlIHNyYyBhdHRyaWJ1dGUuCiAgIC8vIFdlJ2xsIHVzZSBvdXIgcHJpbmNpcGFsLCBub3QgdGhh
dCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRoaXMKICAgLy8gaXMgdmVyeSBp
bXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBsb2Fk
ZWQgaW4KICAgLy8gc3ViZnJhbWVzIQogICBsb2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29udGVu
dC0+Tm9kZVByaW5jaXBhbCgpKTsKIAogICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwogICBy
diA9IG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZz
KHJlZmVycmVyKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQgYS9j
b250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRv
bUxpc3QuaAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCisrKyBiL2NvbnRl
bnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKQEAgLTkzLDE3ICs5MywyMSBAQCBHS19BVE9NKGFj
dHVhdGUsICJhY3R1YXRlIikKIEdLX0FUT00oYWRkcmVzcywgImFkZHJlc3MiKQogR0tfQVRPTShh
ZnRlciwgImFmdGVyIikKIEdLX0FUT00oYWZ0ZXJfZW5kLCAiYWZ0ZXJfZW5kIikKIEdLX0FUT00o
YWZ0ZXJfc3RhcnQsICJhZnRlcl9zdGFydCIpCiBHS19BVE9NKGFsaWduLCAiYWxpZ24iKQogR0tf
QVRPTShhbGluaywgImFsaW5rIikKIEdLX0FUT00oYWxsLCAiYWxsIikKIEdLX0FUT00oYWxsb3dl
dmVudHMsICJhbGxvd2V2ZW50cyIpCitHS19BVE9NKGFsbG93Zm9ybXMsICJhbGxvdy1mb3JtcyIp
CiBHS19BVE9NKGFsbG93bmVnYXRpdmVhc3NlcnRpb25zLCAiYWxsb3duZWdhdGl2ZWFzc2VydGlv
bnMiKQorR0tfQVRPTShhbGxvd3NhbWVvcmlnaW4sICJhbGxvdy1zYW1lLW9yaWdpbiIpCitHS19B
VE9NKGFsbG93c2NyaXB0cywgImFsbG93LXNjcmlwdHMiKQorR0tfQVRPTShhbGxvd3RvcG5hdmln
YXRpb24sICJhbGxvdy10b3AtbmF2aWdhdGlvbiIpCiBHS19BVE9NKGFsbG93dW50cnVzdGVkLCAi
YWxsb3d1bnRydXN0ZWQiKQogR0tfQVRPTShhbHQsICJhbHQiKQogR0tfQVRPTShhbHRlcm5hdGUs
ICJhbHRlcm5hdGUiKQogR0tfQVRPTShhbHdheXMsICJhbHdheXMiKQogR0tfQVRPTShhbmNlc3Rv
ciwgImFuY2VzdG9yIikKIEdLX0FUT00oYW5jZXN0b3JPclNlbGYsICJhbmNlc3Rvci1vci1zZWxm
IikKIEdLX0FUT00oX2FuZCwgImFuZCIpCiBHS19BVE9NKGFueSwgImFueSIpCkBAIC04NzUsMTYg
Kzg3OSwxNyBAQCBHS19BVE9NKHJvd3NwYW4sICJyb3dzcGFuIikKIEdLX0FUT00ocnAsICJycCIp
CiBHS19BVE9NKHJ0LCAicnQiKQogR0tfQVRPTShydGwsICJydGwiKQogR0tfQVRPTShydWJ5LCAi
cnVieSIpCiBHS19BVE9NKHJ1bGUsICJydWxlIikKIEdLX0FUT00ocnVsZXMsICJydWxlcyIpCiBH
S19BVE9NKHMsICJzIikKIEdLX0FUT00oc2FtcCwgInNhbXAiKQorR0tfQVRPTShzYW5kYm94LCAi
c2FuZGJveCIpCiBHS19BVE9NKHNiYXR0ciwgInNiYXR0ciIpCiBHS19BVE9NKHNjYWxlLCAic2Nh
bGUiKQogR0tfQVRPTShzY2FuLCAic2NhbiIpCiBHS19BVE9NKHNjaGVtZSwgInNjaGVtZSIpCiBH
S19BVE9NKHNjb3BlLCAic2NvcGUiKQogR0tfQVRPTShzY29wZWQsICJzY29wZWQiKQogR0tfQVRP
TShzY3JlZW4sICJzY3JlZW4iKQogR0tfQVRPTShzY3JlZW5YLCAic2NyZWVuWCIpCmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAotLS0gYS9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTY4NCwxNyArNjg0LDI1IEBA
IG5zSFRNTEZvcm1FbGVtZW50OjpEb1N1Ym1pdE9yUmVzZXQobnNFdmUKICAgICByZXR1cm4gRG9S
ZXNldCgpOwogICB9CiAKICAgaWYgKE5TX0ZPUk1fU1VCTUlUID09IGFNZXNzYWdlKSB7CiAgICAg
Ly8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIG5vdCBpbiBhIGRvY3VtZW50LgogICAgIGlmICghZG9j
KSB7CiAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgfQotICAgIHJldHVybiBEb1N1Ym1pdChhRXZl
bnQpOworICAgIC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdyZSBpbiBhIHNhbmRib3hlZCBmcmFtZSBh
bmQgZm9ybSBzdWJtaXQKKyAgICAvLyBpcyBkaXNhYmxlZC4KKyAgICBQUlVpbnQzMiBzYW5kYm94
RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgaWYgKCEoc2FuZGJveEZsYWdzICYg
bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9GT1JNUykpIHsKKyAgICAgIHJldHVybiBEb1N1Ym1pdChh
RXZlbnQpOworICAgIH0KKworCXJldHVybiBOU19PSzsKICAgfQogCiAgIE1PWl9BU1NFUlQoZmFs
c2UpOwogICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0hUTUxGb3JtRWxlbWVudDo6
RG9SZXNldCgpCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZy
YW1lRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxl
bWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1l
bnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50
LmNwcApAQCAtMzMsODEgKzMzLDMzIEBACiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNp
cGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0aGUgdGVy
bXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoKICAqICoq
KioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJtb3ppbGxhL1V0aWwu
aCIKIAogI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAibnNH
ZW5lcmljSFRNTEZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIm5zSURPTURvY3VtZW50LmgiCi0j
aW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01TVkdEb2N1
bWVudC5oIgotI2luY2x1ZGUgIm5zR2tBdG9tcy5oIgotI2luY2x1ZGUgIm5zSURvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAibnNET01FcnJvci5o
IgotI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIKLSNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCisj
aW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxs
YTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKLWNsYXNzIG5zSFRNTElGcmFtZUVs
ZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAotewotcHVibGljOgot
ICBuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2Rl
SW5mbywKLSAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZy
b21QYXJzZXIgPSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7Ci0gIHZpcnR1YWwgfm5z
SFRNTElGcmFtZUVsZW1lbnQoKTsKLQotICAvLyBuc0lTdXBwb3J0cwotICBOU19ERUNMX0lTVVBQ
T1JUU19JTkhFUklURUQKLQotICAvLyBuc0lET01Ob2RlCi0gIE5TX0ZPUldBUkRfTlNJRE9NTk9E
RShuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NRWxlbWVudAotICBO
U19GT1JXQVJEX05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0g
IC8vIG5zSURPTUhUTUxFbGVtZW50Ci0gIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNH
ZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50
Ci0gIE5TX0RFQ0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKLQotICAvLyBuc0lET01HZXRTVkdE
b2N1bWVudAotICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCi0KLSAgLy8gbnNJQ29udGVu
dAotICB2aXJ0dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7Ci0gIE5T
X0lNRVRIT0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1
dGUpIGNvbnN0OwotICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmli
dXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3Q7Ci0KLSAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShu
c0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7Ci0gIHZpcnR1
YWwgbnNYUENDbGFzc0luZm8qIEdldENsYXNzSW5mbygpOwotfTsKLQotCiBOU19JTVBMX05TX05F
V19IVE1MX0VMRU1FTlRfQ0hFQ0tfUEFSU0VSKElGcmFtZSkKIAotCiBuc0hUTUxJRnJhbWVFbGVt
ZW50Ojpuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFO
b2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbVBh
cnNlciBhRnJvbVBhcnNlcikKICAgOiBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50KGFOb2RlSW5m
bywgYUZyb21QYXJzZXIpCiB7CiB9CiAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6On5uc0hUTUxJRnJh
bWVFbGVtZW50KCkKIHsKKyAgaWYgKG1TYW5kYm94VG9rZW5MaXN0KQorICAgIG1TYW5kYm94VG9r
ZW5MaXN0LT5Ecm9wUmVmZXJlbmNlKCk7CiB9CiAKIAogTlNfSU1QTF9BRERSRUZfSU5IRVJJVEVE
KG5zSFRNTElGcmFtZUVsZW1lbnQsbnNHZW5lcmljRWxlbWVudCkKIE5TX0lNUExfUkVMRUFTRV9J
TkhFUklURUQobnNIVE1MSUZyYW1lRWxlbWVudCxuc0dlbmVyaWNFbGVtZW50KQogCiBET01DSV9O
T0RFX0RBVEEoSFRNTElGcmFtZUVsZW1lbnQsIG5zSFRNTElGcmFtZUVsZW1lbnQpCiAKQEAgLTE1
MCwxNiArMTAyLDI4IEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldENvbnRlbnRXaW5kb3cobnMK
IH0KIAogTlNfSU1FVEhPRElNUAogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0U1ZHRG9jdW1lbnQo
bnNJRE9NRG9jdW1lbnQgKiphUmVzdWx0KQogewogICByZXR1cm4gR2V0Q29udGVudERvY3VtZW50
KGFSZXN1bHQpOwogfQogCitOU19JTUVUSE9ESU1QCituc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRT
YW5kYm94KG5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0KiogYVNhbmRib3gpCit7CisgIGlmICgh
bVNhbmRib3hUb2tlbkxpc3QpIHsKKyAgICBtU2FuZGJveFRva2VuTGlzdCA9IG5ldyBuc0RPTVNl
dHRhYmxlVG9rZW5MaXN0KHRoaXMsIG5zR2tBdG9tczo6c2FuZGJveCk7CisgIH0KKworICBOU19B
RERSRUYoKmFTYW5kYm94ID0gbVNhbmRib3hUb2tlbkxpc3QpOworCisgIHJldHVybiBOU19PSzsK
K30KKwogYm9vbAogbnNIVE1MSUZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBh
TmFtZXNwYWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9t
KiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNBU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0F0dHJWYWx1ZSYgYVJlc3VsdCkKIHsKICAgaWYgKGFOYW1lc3BhY2VJRCA9PSBrTmFtZVNwYWNl
SURfTm9uZSkgewogICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6bWFyZ2lud2lkdGgp
IHsKQEAgLTE3OCwxNiArMTQyLDIyIEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0cmli
dXRlKFBSSW4KICAgICAgIHJldHVybiBQYXJzZUZyYW1lYm9yZGVyVmFsdWUoYVZhbHVlLCBhUmVz
dWx0KTsKICAgICB9CiAgICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjpzY3JvbGxpbmcp
IHsKICAgICAgIHJldHVybiBQYXJzZVNjcm9sbGluZ1ZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAg
ICAgfQogICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6YWxpZ24pIHsKICAgICAgIHJl
dHVybiBQYXJzZUFsaWduVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CisgICAgaWYgKGFB
dHRyaWJ1dGUgPT0gbnNHa0F0b21zOjpzYW5kYm94KSB7CisgICAgICAvLyBUaGUgc2FuZGJveCBh
dHRyaWJ1dGUgbmVlZHMgdG8gYmUgcGFyc2VkIGFzIGFuIGF0b20gYXJyYXkgc28KKyAgICAgIC8v
IGl0IGNhbiBiZSBleHBvc2VkIGFzIGEgRE9NU2V0dGFibGVUb2tlbkxpc3QuCisgICAgICBhUmVz
dWx0LlBhcnNlQXRvbUFycmF5KGFWYWx1ZSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAg
IH0KIAogICByZXR1cm4gbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUo
YU5hbWVzcGFjZUlELCBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYVZhbHVlLCBhUmVzdWx0KTsKIH0KIAogc3RhdGljIHZvaWQK
IE1hcEF0dHJpYnV0ZXNJbnRvUnVsZShjb25zdCBuc01hcHBlZEF0dHJpYnV0ZXMqIGFBdHRyaWJ1
dGVzLApAQCAtMjY4LDggKzIzOCwzNSBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpJc0F0dHJpYnV0
ZU1hcHBlZChjCiAKIAogbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYwogbnNIVE1MSUZyYW1lRWxl
bWVudDo6R2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3QKIHsKICAgcmV0dXJuICZN
YXBBdHRyaWJ1dGVzSW50b1J1bGU7CiB9CiAKK25zcmVzdWx0Cituc0hUTUxJRnJhbWVFbGVtZW50
OjpBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBdHRyVmFsdWUqIGFWYWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYU5vdGlmeSkKK3sK
KyAgaWYgKGFOYW1lID09IG5zR2tBdG9tczo6c2FuZGJveCAmJiBhTmFtZVNwYWNlSUQgPT0ga05h
bWVTcGFjZUlEX05vbmUpIHsKKyAgICAvLyBQYXJzZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzYW5k
Ym94IGF0dHJpYnV0ZSwgYW5kIGlmIHdlIGhhdmUgYSBkb2NzaGVsbAorICAgIC8vIHNldCBpdHMg
c2FuZGJveCBmbGFncyBhcHByb3ByaWF0ZWx5LgorICAgIGlmIChtRnJhbWVMb2FkZXIpIHsKKyAg
ICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NzaGVsbCA9IG1GcmFtZUxvYWRlci0+R2V0RXhp
c3RpbmdEb2NTaGVsbCgpOworCisgICAgICBpZiAoZG9jc2hlbGwpIHsKKyAgICAgICAgUFJVaW50
MzIgbmV3RmxhZ3MgPSAwOworICAgICAgICAvLyBJZiBhIE5VTEwgYVZhbHVlIGlzIHBhc3NlZCBp
biwgd2Ugd2FudCB0byBjbGVhciB0aGUgc2FuZGJveCBmbGFncworICAgICAgICAvLyB3aGljaCB3
ZSB3aWxsIGRvIGJ5IHNldHRpbmcgdGhlbSB0byAwLgorICAgICAgICBpZiAoYVZhbHVlKSB7Cisg
ICAgICAgICAgbmV3RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRl
VG9GbGFncygKKyAgICAgICAgICAgIGFWYWx1ZS0+R2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgZG9jc2hlbGwtPlNldFNhbmRib3hGbGFncyhuZXdGbGFncyk7CisgICAgICB9
CisgICAgfQorICB9CisgIHJldHVybiBuc0dlbmVyaWNIVE1MRWxlbWVudDo6QWZ0ZXJTZXRBdHRy
KGFOYW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYU5vdGlmeSk7CisKK30KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmggYi9jb250ZW50L2h0bWwvY29udGVu
dC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQu
aApAQCAtMCwwICsxLDExNyBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRl
bnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLworLyogKioqKiogQkVH
SU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwg
Mi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUg
TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRo
ZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0
dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBX
SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBT
ZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJp
Z2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBP
cmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNsaWVudCBjb2RlLgorICoKKyAq
IFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogTmV0c2Nh
cGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRo
ZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4CisgKiB0aGUgSW5pdGlh
bCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6
CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUg
dXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLAorICogb3IgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhl
ICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3Ig
dGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlv
dSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAq
IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0
byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxl
dGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGlj
ZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQ
TC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lw
aWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJt
cyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioq
KiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2luY2x1ZGUgIm1vemlsbGEvVXRpbC5o
IgorCisjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0dl
bmVyaWNIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJuc0lET01Eb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTUdldFNWR0Rv
Y3VtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0dr
QXRvbXMuaCIKKyNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zTWFwcGVkQXR0
cmlidXRlcy5oIgorI2luY2x1ZGUgIm5zRE9NRXJyb3IuaCIKKyNpbmNsdWRlICJuc1J1bGVEYXRh
LmgiCisjaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zRE9NU2V0dGFibGVU
b2tlbkxpc3QuaCIKKyNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgorCitjbGFzcyBuc0hUTUxJ
RnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKK3sKK3B1
YmxpYzoKKyAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZv
PiBhTm9kZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFy
c2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOworICB2aXJ0
dWFsIH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7CisKKyAgLy8gbnNJU3VwcG9ydHMKKyAgTlNfREVD
TF9JU1VQUE9SVFNfSU5IRVJJVEVECisKKyAgLy8gbnNJRE9NTm9kZQorICBOU19GT1JXQVJEX05T
SURPTU5PREUobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUVsZW1l
bnQKKyAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6
OikKKworICAvLyBuc0lET01IVE1MRWxlbWVudAorICBOU19GT1JXQVJEX05TSURPTUhUTUxFTEVN
RU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKKworICAvLyBuc0lET01IVE1MSUZyYW1l
RWxlbWVudAorICBOU19ERUNMX05TSURPTUhUTUxJRlJBTUVFTEVNRU5UCisKKyAgLy8gbnNJRE9N
R2V0U1ZHRG9jdW1lbnQKKyAgTlNfREVDTF9OU0lET01HRVRTVkdET0NVTUVOVAorCisgIC8vIG5z
SUNvbnRlbnQKKyAgdmlydHVhbCBib29sIFBhcnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVzcGFj
ZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQp
OworICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBh
QXR0cmlidXRlKSBjb25zdDsKKyAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdl
dEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OworCisgIHZpcnR1YWwgbnNyZXN1bHQg
Q2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0Owor
ICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKKworICB2aXJ0dWFsIG5z
cmVzdWx0IEFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBdHRyVmFsdWUqIGFW
YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpOwor
CisgIFBSVWludDMyIEdldFNhbmRib3hGbGFncygpIHsKKyAgICBuc0F1dG9TdHJpbmcgc2FuZGJv
eEF0dHI7CisKKyAgICBpZiAoR2V0QXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpz
YW5kYm94LCBzYW5kYm94QXR0cikpIHsKKyAgICAgIHJldHVybiBuc0NvbnRlbnRVdGlsczo6UGFy
c2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhzYW5kYm94QXR0cik7CisgICAgfQorCisgICAgLy8g
Tm8gc2FuZGJveCBhdHRyaWJ1dGUsIG5vIHNhbmRib3ggZmxhZ3MuCisgICAgcmV0dXJuIDA7Cisg
IH0KKworICBzdGF0aWMgbnNIVE1MSUZyYW1lRWxlbWVudCogRnJvbUNvbnRlbnQobnNJQ29udGVu
dCAqYUNvbnRlbnQpCisgIHsKKyAgICBpZiAoYUNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6Omlm
cmFtZSkpCisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnNIVE1MSUZyYW1lRWxlbWVudCo+KGFD
b250ZW50KTsKKyAgICByZXR1cm4gbnNudWxsOworICB9CisKK3Byb3RlY3RlZDoKKyAgbnNSZWZQ
dHI8bnNET01TZXR0YWJsZVRva2VuTGlzdD4gIG1TYW5kYm94VG9rZW5MaXN0OworfTsKZGlmZiAt
LWdpdCBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwIGIvY29u
dGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9o
dG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2Rv
Y3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKQEAgLTEyNjcsMTYgKzEyNjcsMjEgQEAgbnNI
VE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwogewogICBhQ29va2llLlRydW5j
YXRlKCk7IC8vIGNsZWFyIGN1cnJlbnQgY29va2llIGluIGNhc2Ugc2VydmljZSBmYWlsczsKICAg
ICAgICAgICAgICAgICAgICAgICAvLyBubyBjb29raWUgaXNuJ3QgYW4gZXJyb3IgY29uZGl0aW9u
LgogCiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2VzcykgewogICAgIHJldHVybiBOU19PSzsKICAg
fQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBpcyBzZXQs
IGFjY2VzcyB0byByZWFkIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1TYW5k
Ym94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikKKyAgICByZXR1cm4gTlNf
RVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKwogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZp
Y2UgaXNuJ3QgYW4gZXJyb3IKICAgbnNDT01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9
IGRvX0dldFNlcnZpY2UoTlNfQ09PS0lFU0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZp
Y2UpIHsKICAgICAvLyBHZXQgYSBVUkkgZnJvbSB0aGUgZG9jdW1lbnQgcHJpbmNpcGFsLiBXZSB1
c2UgdGhlIG9yaWdpbmFsCiAgICAgLy8gY29kZWJhc2UgaW4gY2FzZSB0aGUgY29kZWJhc2Ugd2Fz
IGNoYW5nZWQgYnkgU2V0RG9tYWluCiAgICAgbnNDT01QdHI8bnNJVVJJPiBjb2RlYmFzZVVSSTsK
ICAgICBOb2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhjb2RlYmFzZVVSSSkp
OwogCkBAIC0xMjk3LDE2ICsxMzAyLDIxIEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNB
U3RyaW5nJiBhQ28KIAogTlNfSU1FVEhPRElNUAogbnNIVE1MRG9jdW1lbnQ6OlNldENvb2tpZShj
b25zdCBuc0FTdHJpbmcmIGFDb29raWUpCiB7CiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2Vzcykg
ewogICAgIHJldHVybiBOU19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRi
b3hlZCBvcmlnaW4gZmxhZyBpcyBzZXQsIGFjY2VzcyB0byB3cml0ZSBjb29raWVzCisgIC8vIGlz
IHByb2hpYml0ZWQuCisgIGlmIChtU2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hF
RF9PUklHSU4pCisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisKICAgLy8g
bm90IGhhdmluZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5z
SUNvb2tpZVNlcnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0Vf
Q09OVFJBQ1RJRCk7CiAgIGlmIChzZXJ2aWNlICYmIG1Eb2N1bWVudFVSSSkgewogICAgIG5zQ09N
UHRyPG5zSVByb21wdD4gcHJvbXB0OwogICAgIG5zQ09NUHRyPG5zUElET01XaW5kb3c+IHdpbmRv
dyA9IEdldFdpbmRvdygpOwogICAgIGlmICh3aW5kb3cpIHsKICAgICAgIHdpbmRvdy0+R2V0UHJv
bXB0ZXIoZ2V0dGVyX0FkZFJlZnMocHJvbXB0KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZG9jc2hl
bGwvYmFzZS9uc0RvY1NoZWxsLmNwcCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKLS0t
IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAorKysgYi9kb2NzaGVsbC9iYXNlL25zRG9j
U2hlbGwuY3BwCkBAIC03MjcsMTYgKzcyNywxNyBAQCBuc0RvY1NoZWxsOjpuc0RvY1NoZWxsKCk6
CiAgICAgbUJ1c3lGbGFncyhCVVNZX0ZMQUdTX05PTkUpLAogICAgIG1BcHBUeXBlKG5zSURvY1No
ZWxsOjpBUFBfVFlQRV9VTktOT1dOKSwKICAgICBtTG9hZFR5cGUoMCksCiAgICAgbU1hcmdpbldp
ZHRoKC0xKSwKICAgICBtTWFyZ2luSGVpZ2h0KC0xKSwKICAgICBtSXRlbVR5cGUodHlwZUNvbnRl
bnQpLAogICAgIG1QcmV2aW91c1RyYW5zSW5kZXgoLTEpLAogICAgIG1Mb2FkZWRUcmFuc0luZGV4
KC0xKSwKKyAgICBtU2FuZGJveEZsYWdzKDApLAogICAgIG1DcmVhdGVkKGZhbHNlKSwKICAgICBt
QWxsb3dTdWJmcmFtZXModHJ1ZSksCiAgICAgbUFsbG93UGx1Z2lucyh0cnVlKSwKICAgICBtQWxs
b3dKYXZhc2NyaXB0KHRydWUpLAogICAgIG1BbGxvd01ldGFSZWRpcmVjdHModHJ1ZSksCiAgICAg
bUFsbG93SW1hZ2VzKHRydWUpLAogICAgIG1BbGxvd0ROU1ByZWZldGNoKHRydWUpLAogICAgIG1B
bGxvd1dpbmRvd0NvbnRyb2wodHJ1ZSksCkBAIC0yOTIyLDE2ICsyOTIzLDczIEBAIG5zRG9jU2hl
bGw6OkZpbmRJdGVtV2l0aE5hbWUoY29uc3QgUFJVbmkKICAgICAgICAgICAgIGZvdW5kSXRlbSA9
IG5zbnVsbDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChmb3VuZEl0ZW0pIHsKICAgICAgICAg
ICAgIC8vIFdlIHJldHVybiBmb3VuZEl0ZW0gaGVyZSBldmVuIGlmIGl0J3Mgbm90IGFuIGFjdGl2
ZQogICAgICAgICAgICAgLy8gaXRlbSBzaW5jZSBhbGwgdGhlIG5hbWVzIHdlJ3ZlIGRlYWx0IHdp
dGggc28gZmFyIGFyZQogICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlcyB0aGF0IHdlIHdvbid0
IGJvdGhlciBsb29raW5nIGZvciBmdXJ0aGVyLgogCisgICAgICAgICAgICAvLyBJZiBvdXIgZG9j
dW1lbnQgaXMgc2FuZGJveGVkLCB3ZSBuZWVkIHRvIGRvIHNvbWUgZXh0cmEgY2hlY2tzLgorICAg
ICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICAgICAgICAgICAgbnNDT01Q
dHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX0dldEludGVyZmFjZShhT3JpZ2luYWxSZXF1ZXN0b3Ip
OworCisgICAgICAgICAgICBpZiAoZG9jKSB7CisgICAgICAgICAgICAgIHNhbmRib3hGbGFncyA9
IGRvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChz
YW5kYm94RmxhZ3MpIHsKKyAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJ
dGVtPiByb290OworICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUm9vdFRyZWVJdGVtKGdldHRl
cl9BZGRSZWZzKHJvb3QpKTsKKworICAgICAgICAgICAgICAgIC8vIElzIHRoZSBmb3VuZCBpdGVt
IG5vdCBhIHRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0IGFuZCBub3Qgb3Vyc2VsZiA/CisgICAg
ICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gc2VsZkFzSXRlbSA9IHN0
YXRpY19jYXN0PG5zSURvY1NoZWxsVHJlZUl0ZW0gKj4odGhpcyk7CisgICAgICAgICAgICAgICAg
aWYgKGZvdW5kSXRlbSAhPSByb290ICYmIGZvdW5kSXRlbSAhPSBzZWxmQXNJdGVtKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEFyZSB3ZSBhbiBhbmNlc3RvciBvZiB0aGUgZm91bmRJdGVtID8K
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0FuY2VzdG9yID0gZmFsc2U7CisKKyAgICAgICAg
ICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50QXNJdGVtOwor
ICAgICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJl
bnRBc0l0ZW0pKTsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50QXNJdGVtKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0
bXA7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0tPkdldFBhcmVudChnZXR0
ZXJfQWRkUmVmcyh0bXApKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0
bXAgPT0gc2VsZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5jZXN0
b3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVtID0g
dG1wOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c0FuY2VzdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBObywgd2UgYXJlIG5vdCBh
biBhbmNlc3RvciBhbmQgb3VyIGRvY3VtZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBzYW5kYm94ZWQsIHdlIGNhbid0IGFsbG93IHRoaXMuCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3VuZEl0ZW0gPSBuc251bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBUb3AgbGV2ZWwgYnJvd3Npbmcg
Y29udGV4dCAtIGlzIGl0IGFuIGFuY2VzdG9yIG9mIG91cnMgPworICAgICAgICAgICAgICAgICAg
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0bXA7CisgICAgICAgICAgICAgICAgICAg
IEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICh0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgJiYg
dG1wID09IGZvdW5kSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgYW4gYW5jZXN0b3IsIGFuZCB3ZSBhcmUgc2FuZGJveGVkLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFVubGVzcyBhbGxvdy10b3AtbmF2aWdhdGlvbiBpcyBzZXQsIHdlIGNhbid0
IGFsbG93IHRoaXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFn
cyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcC0+R2V0
UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBmb3VuZEl0ZW0uc3dh
cCgqX3JldHZhbCk7CiAgICAgICAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBLZWVwIGxvb2tpbmcKICAgICAgICAgCiAgICAgLy8gRmlyc3Qgd2UgY2hlY2sg
b3VyIG5hbWUuCkBAIC00OTU4LDE2ICs1MDE2LDMwIEBAIG5zRG9jU2hlbGw6OlNldElzQXBwVGFi
KGJvb2wgYUlzQXBwVGFiKQogTlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6R2V0SXNBcHBUYWIo
Ym9vbCAqYUlzQXBwVGFiKQogewogICAqYUlzQXBwVGFiID0gbUlzQXBwVGFiOwogICByZXR1cm4g
TlNfT0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6OlNldFNhbmRib3hGbGFncyhQ
UlVpbnQzMiBhU2FuZGJveEZsYWdzKQoreworICBtU2FuZGJveEZsYWdzID0gYVNhbmRib3hGbGFn
czsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpHZXRT
YW5kYm94RmxhZ3MoUFJVaW50MzIgICphU2FuZGJveEZsYWdzKQoreworICAqYVNhbmRib3hGbGFn
cyA9IG1TYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAog
bnNEb2NTaGVsbDo6U2V0VmlzaWJpbGl0eShib29sIGFWaXNpYmlsaXR5KQogewogICAgIGlmICgh
bUNvbnRlbnRWaWV3ZXIpCiAgICAgICAgIHJldHVybiBOU19PSzsKICAgICBpZiAoYVZpc2liaWxp
dHkpIHsKICAgICAgICAgbUNvbnRlbnRWaWV3ZXItPlNob3coKTsKICAgICB9CiAgICAgZWxzZSB7
CkBAIC04MTQ3LDE2ICs4MjE5LDI5IEBAIG5zRG9jU2hlbGw6OkludGVybmFsTG9hZChuc0lVUkkg
KiBhVVJJLAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0YXJnZXRJdGVt
OwogICAgICAgICBGaW5kSXRlbVdpdGhOYW1lKGFXaW5kb3dUYXJnZXQsIG5zbnVsbCwgdGhpcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyh0YXJnZXRJdGVtKSk7CiAK
ICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IHRhcmdldERvY1NoZWxsID0gZG9fUXVlcnlJ
bnRlcmZhY2UodGFyZ2V0SXRlbSk7CiAgICAgICAgIAogICAgICAgICBib29sIGlzTmV3V2luZG93
ID0gZmFsc2U7CiAgICAgICAgIGlmICghdGFyZ2V0RG9jU2hlbGwpIHsKKyAgICAgICAgICAgIC8v
IElmIHRoZSBkb2NzaGVsbCdzIGRvY3VtZW50IGlzIHNhbmRib3hlZCBhbmQgd2FzIHRyeWluZyB0
bworICAgICAgICAgICAgLy8gbmF2aWdhdGUvbG9hZCBhIGZyYW1lIGl0IHdhc24ndCBhbGxvd2Vk
IHRvIGFjY2VzcywgdGhlCisgICAgICAgICAgICAvLyBGaW5kSXRlbVdpdGhOYW1lIGFib3ZlIHdp
bGwgaGF2ZSByZXR1cm5lZCBudWxsIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAvLyBpdGVt
IC0gd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBvcGVuIGEgbmV3IHdpbmRvdyBpbiB0aGlzIGNh
c2UKKyAgICAgICAgICAgIC8vIHRob3VnaC4gQ2hlY2sgaWYgd2UgYXJlIHNhbmRib3hlZCBhbmQg
YmFpbCBvdXQgaGVyZSBpZiBzby4KKyAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKG1Db250ZW50
Vmlld2VyLCBOU19FUlJPUl9GQUlMVVJFKTsKKyAgICAgICAgICAgIG5zSURvY3VtZW50KiBkb2Mg
PSBtQ29udGVudFZpZXdlci0+R2V0RG9jdW1lbnQoKTsKKyAgICAgICAgICAgIFBSVWludDMyIHNh
bmRib3hGbGFncyA9IDA7CisgICAgICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hG
bGFncygpOworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpTQU5E
Qk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVS
RTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiB3
aW4gPQogICAgICAgICAgICAgICAgIGRvX0dldEludGVyZmFjZShHZXRBc1N1cHBvcnRzKHRoaXMp
KTsKICAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKHdpbiwgTlNfRVJST1JfTk9UX0FWQUlMQUJM
RSk7CiAKICAgICAgICAgICAgIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUoYVdpbmRvd1RhcmdldCk7
CiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IG5ld1dpbjsKICAgICAgICAgICAg
IHJ2ID0gd2luLT5PcGVuKEVtcHR5U3RyaW5nKCksIC8vIFVSTCB0byBsb2FkCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAvLyB3aW5kb3cgbmFtZQpAQCAtODk0MCwx
OCArOTAyNSwzMiBAQCBuc0RvY1NoZWxsOjpEb1VSSUxvYWQobnNJVVJJICogYVVSSSwKICAgICAg
ICAgfQogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkKICAgICAgICAgaWYg
KGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAgICAvLyBSZWZlcnJl
ciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4KICAgICAgICAgICAg
IGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChkb19RdWVyeUlu
dGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIo
b3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUpOworICAgIG5zQ09NUHRyPG5zSVBy
aW5jaXBhbD4gb3duZXJQcmluY2lwYWw7CisKKyAgICAvLyBJZiB0aGUgY29udGVudCBiZWluZyBs
b2FkZWQgc2hvdWxkIGJlIHNhbmRib3hlZCB3aXRoIHJlc3BlY3QgdG8gb3JpZ2luCisgICAgLy8g
d2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lwYWwgaGVyZSwgYW5kIHRoZW4gdGVs
bAorICAgIC8vIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lciB0byBmb3JjZSBpdCB0
byBiZSBzZXQgYXMgdGhlCisgICAgLy8gY2hhbm5lbCBvd25lci4KKyAgICBpZiAobVNhbmRib3hG
bGFncyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKSB7CisgICAgICBvd25lclByaW5j
aXBhbCA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnVsbHByaW5jaXBhbDsxIik7
CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIE5vdCBzYW5kYm94ZWQgLSB3ZSBhbGxvdyB0aGUgY29u
dGVudCB0byBhc3N1bWUgaXRzIG5hdHVyYWwgb3duZXIuCisgICAgICBvd25lclByaW5jaXBhbCA9
IGRvX1F1ZXJ5SW50ZXJmYWNlKGFPd25lcik7CisgICAgfQorCisgICAgbnNDb250ZW50VXRpbHM6
OlNldFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TYW5kYm94RmxhZ3MgJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURvY1NoZWxsOjpTQU5E
Qk9YRURfT1JJR0lOKSk7CiAKICAgICBuc0NPTVB0cjxuc0lTY3JpcHRDaGFubmVsPiBzY3JpcHRD
aGFubmVsID0gZG9fUXVlcnlJbnRlcmZhY2UoY2hhbm5lbCk7CiAgICAgaWYgKHNjcmlwdENoYW5u
ZWwpIHsKICAgICAgICAgLy8gQWxsb3cgZXhlY3V0aW9uIGFnYWluc3Qgb3VyIGNvbnRleHQgaWYg
dGhlIHByaW5jaXBhbHMgbWF0Y2gKICAgICAgICAgc2NyaXB0Q2hhbm5lbC0+CiAgICAgICAgICAg
ICBTZXRFeGVjdXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhFQ1VURV9OT1JNQUwpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmggYi9kb2NzaGVs
bC9iYXNlL25zRG9jU2hlbGwuaAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAorKysg
Yi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaApAQCAtNzgxLDE2ICs3ODEsMTggQEAgcHJvdGVj
dGVkOgogICAgIC8vIENyZWF0ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUgaXMgbm90IGV4cGVjdGVk
IHRvIGNoYW5nZS4KICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtSXRlbVR5cGU7CiAK
ICAgICAvLyBJbmRleCBpbnRvIHRoZSBTSFRyYW5zYWN0aW9uIGxpc3QsIGluZGljYXRpbmcgdGhl
IHByZXZpb3VzIGFuZCBjdXJyZW50CiAgICAgLy8gdHJhbnNhY3Rpb24gYXQgdGhlIHRpbWUgdGhh
dCB0aGlzIERvY1NoZWxsIGJlZ2lucyB0byBsb2FkCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAg
ICAgICAgbVByZXZpb3VzVHJhbnNJbmRleDsKICAgICBQUkludDMyICAgICAgICAgICAgICAgICAg
ICBtTG9hZGVkVHJhbnNJbmRleDsKIAorICAgIFBSVWludDMyICAgICAgICAgICAgICAgICAgIG1T
YW5kYm94RmxhZ3M7CisKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQ3JlYXRlZDsK
ICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJmcmFtZXM7CiAgICAgYm9v
bCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAgICBib29sICAgICAgICAg
ICAgICAgICAgICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wgICAgICAgICAgICAgICAg
ICAgICAgIG1BbGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAg
ICAgbUFsbG93SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0RO
U1ByZWZldGNoOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1dpbmRvd0Nv
bnRyb2w7CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbCBiL2RvY3No
ZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwu
aWRsCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCkBAIC02NywxNyArNjcsMTcg
QEAgaW50ZXJmYWNlIG5zSVJlcXVlc3Q7CiBpbnRlcmZhY2UgbnNJU0hFbnRyeTsKIGludGVyZmFj
ZSBuc0lMYXlvdXRIaXN0b3J5U3RhdGU7CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJvd3NlclVJOwog
aW50ZXJmYWNlIG5zSURPTVN0b3JhZ2U7CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsOwogaW50ZXJm
YWNlIG5zSVdlYkJyb3dzZXJQcmludDsKIGludGVyZmFjZSBuc0lWYXJpYW50OwogCi1bc2NyaXB0
YWJsZSwgdXVpZCgwNjE1ZDFhNi0zMTNmLTExZTEtYTA0My02YzYyNmQ2OTY3NWMpXQorW3Njcmlw
dGFibGUsIHV1aWQoOWIyODMzMzctMDk3ZC00ZmE4LWEyZGEtOTE2MzE4ZWFmODI4KV0KIGludGVy
ZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiB7CiAgIC8qKgogICAgKiBMb2FkcyBhIGdp
dmVuIFVSSS4gIFRoaXMgd2lsbCBnaXZlIHByaW9yaXR5IHRvIGxvYWRpbmcgdGhlIHJlcXVlc3Rl
ZCBVUkkKICAgICogaW4gdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcJdGhpcyBpbnRlcmZhY2UuICBJ
ZiBpdCBjYW4ndCBiZSBsb2FkZWQgaGVyZQogICAgKiBob3dldmVyLCB0aGUgVVJMIGRpc3BhdGNo
ZXIgd2lsbCBnbyB0aHJvdWdoIGl0cyBub3JtYWwgcHJvY2VzcyBvZiBjb250ZW50CiAgICAqIGxv
YWRpbmcuCiAgICAqCkBAIC01OTcsOSArNTk3LDY3IEBAIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6
IG5zSVN1cHBvcnRzCiAgICAqLwogICBhdHRyaWJ1dGUgbnNJQXRvbSBwYXJlbnRDaGFyc2V0Owog
CiAgIC8qCiAgICAqIEluIGEgY2hpbGQgZG9jc2hlbGwsIHRoaXMgaXMgdGhlIHNvdXJjZSBvZiBw
YXJlbnRDaGFyc2V0CiAgICAqIEBzZWUgbnNJUGFyc2VyCiAgICAqLwogICBhdHRyaWJ1dGUgUFJJ
bnQzMiBwYXJlbnRDaGFyc2V0U291cmNlOworCisgIC8qKgorICAgKiBUaGUgc2FuZGJveCBmbGFn
cyBvbiB0aGUgZG9jc2hlbGwuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94
CisgICAqIGF0dHJpYnV0ZSBvZiB0aGUgYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3Rh
YmxlIGNvbnRlbnQsIGlmCisgICAqIGV4aXN0ZW50LiBTZWUgdGhlIEhUTUw1IHNwZWMgZm9yIG1v
cmUgZGV0YWlscy4KKyAgICogVGhlc2UgZmxhZ3Mgb24gdGhlIGRvY3NoZWxsIHJlZmxlY3QgdGhl
IGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlLCB3aGljaCBpcyBt
b2RpZmlhYmxlLiBUaGV5IGFyZSBvbmx5IHVzZWQgd2hlbiBsb2FkaW5nIG5ldworICAgKiBjb250
ZW50LCBzYW5kYm94IGZsYWdzIGFyZSBhbHNvIGltbXV0YWJseSBzZXQgb24gdGhlIGRvY3VtZW50
IHdoZW4gaXQgaXMKKyAgICogbG9hZGVkLgorICAgKiBUaGUgc2FuZGJveCBmbGFncyBvZiBhIGRv
Y3VtZW50IGRlcGVuZCBvbiB0aGUgc2FuZGJveCBmbGFncyBvbiBpdHMKKyAgICogZG9jc2hlbGwg
YW5kIG9mIGl0cyBwYXJlbnQgZG9jdW1lbnQsIGlmIGFueS4KKyAgICovCisgIGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIHNhbmRib3hGbGFnczsKKworICAvKioKKyAgICogVGhpcyBmbGFnIHByZXZl
bnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIGJyb3dzaW5nIGNvbnRleHRzIG90aGVyIHRoYW4K
KyAgICogdGhlIHNhbmRib3hlZCBicm93c2luZyBjb250ZXh0IGl0c2VsZiAob3IgYnJvd3Npbmcg
Y29udGV4dHMgZnVydGhlcgorICAgKiBuZXN0ZWQgaW5zaWRlIGl0KSwgYW5kIHRoZSB0b3AtbGV2
ZWwgYnJvd3NpbmcgY29udGV4dC4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJP
WEVEX05BVklHQVRJT04gID0gMHgxOworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgcHJldmVudHMg
Y29udGVudCBmcm9tIG5hdmlnYXRpbmcgdGhlaXIgdG9wLWxldmVsIGJyb3dzaW5nCisgICAqIGNv
bnRleHQuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9UT1BMRVZFTF9O
QVZJR0FUSU9OID0gMHgyOworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgcHJldmVudHMgY29udGVu
dCBmcm9tIGluc3RhbnRpYXRpbmcgcGx1Z2lucywgd2hldGhlciB1c2luZyB0aGUKKyAgICogZW1i
ZWQgZWxlbWVudCwgdGhlIG9iamVjdCBlbGVtZW50LCB0aGUgYXBwbGV0IGVsZW1lbnQsIG9yIHRo
cm91Z2gKKyAgICogbmF2aWdhdGlvbiBvZiBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCB1bmxl
c3MgdGhvc2UgcGx1Z2lucyBjYW4gYmUKKyAgICogc2VjdXJlZC4KKyAgICovCisgIGNvbnN0IHVu
c2lnbmVkIGxvbmcgU0FOREJPWEVEX1BMVUdJTlMgPSAweDQ7CisKKyAgLyoqCisgICAqIFRoaXMg
ZmxhZyBmb3JjZXMgY29udGVudCBpbnRvIGEgdW5pcXVlIG9yaWdpbiwgdGh1cyBwcmV2ZW50aW5n
IGl0IGZyb20KKyAgICogYWNjZXNzaW5nIG90aGVyIGNvbnRlbnQgZnJvbSB0aGUgc2FtZSBvcmln
aW4uCisgICAqIFRoaXMgZmxhZyBhbHNvIHByZXZlbnRzIHNjcmlwdCBmcm9tIHJlYWRpbmcgZnJv
bSBvciB3cml0aW5nIHRvIHRoZQorICAgKiBkb2N1bWVudC5jb29raWUgSURMIGF0dHJpYnV0ZSwg
YW5kIGJsb2NrcyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgKi8KKyAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBTQU5EQk9YRURfT1JJR0lOID0gMHg4OworCisgIC8qKgorICAgKiBUaGlzIGZsYWcg
YmxvY2tzIGZvcm0gc3VibWlzc2lvbi4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FO
REJPWEVEX0ZPUk1TID0gMHgxMDsKKworICAvKioKKyAgICogVGhpcyBmbGFnIGJsb2NrcyBzY3Jp
cHQgZXhlY3V0aW9uLgorICAgKi8KKyAgY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfU0NS
SVBUUyA9IDB4MjA7CisKKyAgLyoqCisgICAqIFRoaXMgZmxhZyBibG9ja3MgZmVhdHVyZXMgdGhh
dCB0cmlnZ2VyIGF1dG9tYXRpY2FsbHksIHN1Y2ggYXMKKyAgICogYXV0b21hdGljYWxseSBwbGF5
aW5nIGEgdmlkZW8gb3IgYXV0b21hdGljYWxseSBmb2N1c2luZyBhIGZvcm0gY29udHJvbC4KKyAg
ICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUyA9
IDB4NDA7CiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwIGIvZG9t
L2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCi0tLSBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNw
cAorKysgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKQEAgLTgyMjgsMTYgKzgyMjgsMjIg
QEAgbnNHbG9iYWxXaW5kb3c6OkdldFNlc3Npb25TdG9yYWdlKG5zSURPTQogICBpZiAoIW1TZXNz
aW9uU3RvcmFnZSkgewogICAgICphU2Vzc2lvblN0b3JhZ2UgPSBuc251bGw7CiAKICAgICBuc1N0
cmluZyBkb2N1bWVudFVSSTsKICAgICBpZiAobURvY3VtZW50KSB7CiAgICAgICBtRG9jdW1lbnQt
PkdldERvY3VtZW50VVJJKGRvY3VtZW50VVJJKTsKICAgICB9CiAKKyAgICAvLyBJZiB0aGUgZG9j
dW1lbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgLy8gZG9uJ3QgYWxs
b3cgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAgICBpZiAobURvYyAmJiAobURvYy0+U2FuZGJv
eEZsYWdzKCkgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVy
biBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zcmVzdWx0IHJ2ID0g
ZG9jU2hlbGwtPkdldFNlc3Npb25TdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudFVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1TZXNzaW9uU3RvcmFnZSkpOwogICAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICNpZmRlZiBQUl9MT0dHSU5HCiAgICAgaWYg
KFBSX0xPR19URVNUKGdET01MZWFrUFJMb2csIFBSX0xPR19ERUJVRykpIHsKQEAgLTgzMTUsMTYg
KzgzMjEsMjIgQEAgbnNHbG9iYWxXaW5kb3c6OkdldExvY2FsU3RvcmFnZShuc0lET01TdAogICAg
ICAgZG9fR2V0U2VydmljZSgiQG1vemlsbGEub3JnL2RvbS9zdG9yYWdlbWFuYWdlcjsxIiwgJnJ2
KTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgbnNTdHJpbmcgZG9jdW1l
bnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVu
dFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0
aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0
byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYg
bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1Jf
RE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBydiA9IHN0b3JhZ2VNYW5hZ2VyLT5HZXRM
b2NhbFN0b3JhZ2VGb3JQcmluY2lwYWwocHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFVSSSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMo
bUxvY2FsU3RvcmFnZSkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgIH0KIAog
ICBOU19BRERSRUYoKmFMb2NhbFN0b3JhZ2UgPSBtTG9jYWxTdG9yYWdlKTsKICAgcmV0dXJuIE5T
X09LOwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxl
bWVudC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50Lmlk
bAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAor
KysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbApAQCAt
MzMsNDQgKzMzLDQ2IEBACiAgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBh
Ym92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQogICogYW5kIG90aGVyIHByb3Zp
c2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxl
dGUKICAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVy
c2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBN
UEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCiAgKgogICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sg
KioqKiogKi8KIAogI2luY2x1ZGUgIm5zSURPTUhUTUxFbGVtZW50LmlkbCIKKyNpbmNsdWRlICJu
c0lET01ET01TZXR0YWJsZVRva2VuTGlzdC5pZGwiCiAKIC8qKgogICogVGhlIG5zSURPTUhUTUxJ
RnJhbWVFbGVtZW50IGludGVyZmFjZSBpcyB0aGUgaW50ZXJmYWNlIHRvIGEgW1hdSFRNTAogICog
aWZyYW1lIGVsZW1lbnQuCiAgKgogICogVGhpcyBpbnRlcmZhY2UgaXMgdHJ5aW5nIHRvIGZvbGxv
dyB0aGUgRE9NIExldmVsIDIgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53My5v
cmcvVFIvRE9NLUxldmVsLTItSFRNTC8KICAqCiAgKiB3aXRoIGNoYW5nZXMgZnJvbSB0aGUgd29y
ay1pbi1wcm9ncmVzcyBXSEFUV0cgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53
aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8KICAqLwogCi1bc2NyaXB0YWJs
ZSwgdXVpZChkNGU4NzBiZC00NTJjLTQ4NjAtYjkzYy1mNGVlMDBiYTMzZjYpXQorW3NjcmlwdGFi
bGUsIHV1aWQoNTJmNjI0NGItYjFmNS00ZjRjLThmZjMtN2UxNDYzMTZmNDExKV0KIGludGVyZmFj
ZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCA6IG5zSURPTUhUTUxFbGVtZW50CiB7CiAgICAgICAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGFsaWduOwogICAgICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nICAgICAgICBmcmFtZUJvcmRlcjsKICAgICAgICAgICAgYXR0cmlidXRlIERP
TVN0cmluZyAgICAgICAgaGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAg
ICAgICBsb25nRGVzYzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbWFy
Z2luSGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5X
aWR0aDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFtZTsKICAgICAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc2Nyb2xsaW5nOwogICAgICAgICAgICBh
dHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzcmM7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgICAgICAgIHdpZHRoOwogICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICBy
ZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRG9jdW1lbnQgICBjb250ZW50RG9jdW1lbnQ7CiAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBuc0lET01XaW5kb3cgICAgIGNvbnRlbnRXaW5kb3c7CiAKKyAgcmVh
ZG9ubHkgYXR0cmlidXRlIG5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0IHNhbmRib3g7CiAKICAg
Ly8gTW96aWxsYSBleHRlbnNpb25zCiAgIC8vIGlmcmFtZSBlbGVtZW50cyByZXF1aXJlIHRoZSBt
b3pBbGxvd0Z1bGxTY3JlZW4gYXR0cmlidXRlIHRvIGJlIHByZXNlbnQKICAgLy8gaWYgdGhleSdy
ZSB0byBhbGxvdyBjb250ZW50IGluIHRoZSBzdWIgZG9jdW1lbnQgdG8gZ28gaW50byBET00gZnVs
bC1zY3JlZW4KICAgLy8gbW9kZS4gU2VlIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9pbmRleC5w
aHA/dGl0bGU9R2Vja286RnVsbFNjcmVlbkFQSQogICAgICAgICAgICBhdHRyaWJ1dGUgYm9vbGVh
biAgICAgICAgICBtb3pBbGxvd0Z1bGxTY3JlZW47CiB9OwpkaWZmIC0tZ2l0IGEvZW1iZWRkaW5n
L2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcCBiL2VtYmVk
ZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKLS0t
IGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVy
LmNwcAorKysgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRv
d1dhdGNoZXIuY3BwCkBAIC02MDMsMTYgKzYwMywzMyBAQCBuc1dpbmRvd1dhdGNoZXI6Ok9wZW5X
aW5kb3dKU0ludGVybmFsKG5zCiAgIH0KIAogICBpZiAoIW5ld0RvY1NoZWxsSXRlbSkgewogICAg
IC8vIFdlJ3JlIGdvaW5nIHRvIGVpdGhlciBvcGVuIHVwIGEgbmV3IHdpbmRvdyBvdXJzZWx2ZXMg
b3IgYXNrIGEKICAgICAvLyBuc0lXaW5kb3dQcm92aWRlciBmb3Igb25lLiAgSW4gZWl0aGVyIGNh
c2UsIHdlJ2xsIHdhbnQgdG8gc2V0IHRoZSByaWdodAogICAgIC8vIG5hbWUgb24gaXQuCiAgICAg
d2luZG93TmVlZHNOYW1lID0gdHJ1ZTsKIAorICAgIC8vIElmIHRoZSBwYXJlbnQgdHJ5aW5nIHRv
IG9wZW4gYSBuZXcgd2luZG93IGlzIHNhbmRib3hlZCwKKyAgICAvLyB0aGlzIGlzIG5vdCBhbGxv
d2VkIGFuZCB3ZSBmYWlsIGhlcmUuCisgICAgaWYgKGFQYXJlbnQpIHsKKyAgICAgIG5zQ09NUHRy
PG5zSURPTURvY3VtZW50PiBkb21kb2M7CisgICAgICBhUGFyZW50LT5HZXREb2N1bWVudChnZXR0
ZXJfQWRkUmVmcyhkb21kb2MpKTsKKyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBk
b19RdWVyeUludGVyZmFjZShkb21kb2MpOworCisgICAgICBpZiAoZG9jKSB7CisgICAgICAgIFBS
VWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2Fu
ZGJveEZsYWdzKCk7CisKKyAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIG5zSURvY1NoZWxsOjpT
QU5EQk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJF
OworICAgICAgICB9CisgICAgICB9CisgICAgfQorCiAgICAgLy8gTm93IGNoZWNrIHdoZXRoZXIg
aXQncyBvayB0byBhc2sgYSB3aW5kb3cgcHJvdmlkZXIgZm9yIGEgd2luZG93LiAgRG9uJ3QKICAg
ICAvLyBkbyBpdCBpZiB3ZSdyZSBvcGVuaW5nIGEgZGlhbG9nIG9yIGlmIG91ciBwYXJlbnQgaXMg
YSBjaHJvbWUgd2luZG93IG9yCiAgICAgLy8gaWYgd2UncmUgb3BlbmluZyBzb21ldGhpbmcgdGhh
dCBoYXMgbW9kYWwsIGRpYWxvZywgb3IgY2hyb21lIGZsYWdzIHNldC4KICAgICBuc0NPTVB0cjxu
c0lET01DaHJvbWVXaW5kb3c+IGNocm9tZVdpbiA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFQYXJlbnQp
OwogICAgIGlmICghYURpYWxvZyAmJiAhY2hyb21lV2luICYmCiAgICAgICAgICEoY2hyb21lRmxh
Z3MgJiAobnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX01PREFMICAgICAgICAgfAogICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfRElB
TE9HIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hS
T01FX09QRU5BU19DSFJPTUUpKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>603453</attachid>
            <date>2012-03-06 14:01:18 -0800</date>
            <delta_ts>2012-03-19 14:23:26 -0700</delta_ts>
            <desc>iframe sandbox tests - inheritance</desc>
            <filename>iframe_sandbox_tests_inheritance</filename>
            <type>text/plain</type>
            <size>12687</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNGRkY2U2MGEzMTUzMDJjNTU4YTQ4NzkyMDc0
ZjFkOWEwNzYwMmU4NwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KdGVz
dHMgZm9yIGlmcmFtZSBzYW5kYm94IC0gaW5oZXJpdGFuY2UKCmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmlu
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KQEAgLTI5MiwxNiAr
MjkyLDI0IEBAIF9URVNUX0ZJTEVTID0gXAogCQlmaWxlX2Z1bGxzY3JlZW4tZXNjLWV4aXQuaHRt
bCBcCiAJCWZpbGVfZnVsbHNjcmVlbi1lc2MtZXhpdC1pbm5lci5odG1sIFwKIAkJZmlsZV9mdWxs
c2NyZWVuLXJvbGxiYWNrLmh0bWwgXAogCQl0ZXN0X2xpX2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5o
dG1sIFwKIAkJdGVzdF9vbF9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRtbCBcCiAJCXRlc3RfYnVn
NjUxOTU2Lmh0bWwgXAogCQl0ZXN0X2J1ZzY5NDUwMy5odG1sIFwKIAkJdGVzdF9vYmplY3RfcGx1
Z2luX25hdi5odG1sIFwKKwkJdGVzdF9pZnJhbWVfc2FuZGJveF9pbmhlcml0YW5jZS5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmMi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sIFwKKwkJZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lm
NS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNi5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF9hX2lmNy5odG1sIFwKIAkJJChOVUxMKQogCiBfQlJPV1NFUl9URVNUX0ZJTEVT
ID0gXAogCQlicm93c2VyX2J1ZzY0OTc3OC5qcyBcCiAJCWZpbGVfYnVnNjQ5Nzc4Lmh0bWwgXAog
CQlmaWxlX2J1ZzY0OTc3OC5odG1sXmhlYWRlcnNeIFwKIAkJJChOVUxMKQogCmRpZmYgLS1naXQg
YS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjEuaHRt
bCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYxLmh0bWwKQEAgLTAsMCArMSwx
MyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVz
dC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5PgorICBJIGFtIHNhbmRib3hlZCB3aXRob3V0IGFueSBw
ZXJtaXNzaW9ucworICA8aWZyYW1lIGlkPSJpZl8yYSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94
X2FfaWYyLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+CisgIDxpZnJhbWUg
aWQ9ImlmXzJiIiBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRi
b3hfYV9pZjIuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9hX2lmMi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2FfaWYyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9p
ZjIuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8
L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIv
dGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1N0dWZmKCkgeworICAvLyBzaG91bGQgTk9UIGJl
IGFibGUgdG8gZXhlY3V0ZSBzY3JpcHRzCisgIHdpbmRvdy50b3AucG9zdE1lc3NhZ2Uoe29rOiBm
YWxzZSwgZGVzYzogImEgZG9jdW1lbnQgd2l0aGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCBz
YW5kYm94PScnIHNob3VsZCBOT1QgYmUgYWJsZSB0byBleGVjdXRlIHNjcmlwdHMifSwgIioiKTsK
K30KKzwvc2NyaXB0PgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgYW0gTk9UIHNh
bmRib3hlZCBvciBhbSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYnV0IGFtIGNvbnRh
aW5lZCB3aXRoaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoIHNhbmRib3ggPSAiIiAKKyAgb3Ig
YW0gc2FuZGJveGVkIHdpdGggc2FuZGJveD0nJyBpbnNpZGUgYW4gaWZyYW1lIHNhbmRib3hlZCB3
aXRoICJhbGxvdy1zY3JpcHRzIgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbCBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwKQEAgLTAsMCArMSwyNCBAQAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4gCisgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3Nz
Ii8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVU
ZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PiAgCis8L2hlYWQ+CisKKzxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KKyAgZnVuY3Rpb24gb2soY29uZGl0aW9uLCBtc2cpIHsKKyAgICB3
aW5kb3cucGFyZW50Lm9rKGNvbmRpdGlvbiwgbXNnKTsKKyAgfQorPC9zY3JpcHQ+CisKKzxib2R5
PgorICBJIGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyIKKyAgCisgIDxpZnJh
bWUgaWQ9J2lmXzQnIHNyYz0nZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sJyBoZWlnaHQ9
IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorICA8aWZyYW1lIGlkPSdpZl83JyBzcmM9J2ZpbGVf
aWZyYW1lX3NhbmRib3hfYV9pZjcuaHRtbCcgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFt
ZT4KKyAgPGlmcmFtZSBpZD0naWZfMicgc2FuZGJveD0nJyBzcmM9J2ZpbGVfaWZyYW1lX3NhbmRi
b3hfYV9pZjIuaHRtbCcgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwvYm9keT4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2FfaWY0Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfYV9pZjQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9u
dWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9h
X2lmNC5odG1sCkBAIC0wLDAgKzEsMjggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVh
ZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYw
NDwvdGl0bGU+IAorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVm
PSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4g
IAorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBk
b1N0dWZmKCkgeworICB0cnkgeworICAgIHdpbmRvdy5wYXJlbnQub2soZmFsc2UsICJhIGRvY3Vt
ZW50IGNvbnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aG91dCAnYWxsb3ct
c2FtZS1vcmlnaW4nIHNob3VsZCBOT1QgYmUgc2FtZSBkb21haW4gd2l0aCBpdHMgcGFyZW50Iik7
CisgIH0gY2F0Y2goZSkgeworICB9CisgIAorICB0cnkgeworICAgIHdpbmRvdy50b3Aub2soZmFs
c2UsICJhIGRvY3VtZW50IGNvbnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0
aG91dCAnYWxsb3ctc2FtZS1vcmlnaW4nIHNob3VsZCBOT1QgYmUgc2FtZSBkb21haW4gd2l0aCB0
aGUgdG9wIGxldmVsIik7CisgIH0gY2F0Y2goZSkgeworICB9Cit9Cis8L3NjcmlwdD4KKworPGJv
ZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIG5vdCBzYW5kYm94ZWQgYnV0IGNvbnRhaW5l
ZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aCAnYWxsb3ctc2NyaXB0cycKKzwvYm9k
eT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2FfaWY1Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfYV9pZjUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmNS5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+IAorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3Njcmlw
dD4gIAorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0
aW9uIHBhc3MobXNnKSB7CisgICAgd2luZG93LnBhcmVudC5wYXNzKG1zZyk7CisgIH0KKzwvc2Ny
aXB0PgorCis8Ym9keT4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMg
YWxsb3ctc2FtZS1vcmlnaW4iCisgIAorICA8aWZyYW1lIHNhbmRib3g9J2FsbG93LXNjcmlwdHMg
YWxsb3ctc2FtZS1vcmlnaW4nIGlkPSdpZl82JyBzcmM9J2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9p
ZjYuaHRtbCcgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRt
bD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2FfaWY2Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNi5o
dG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0
bGU+IAorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVz
dHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4gIAorPC9o
ZWFkPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1N0dWZm
KCkgeyAKKyAgd2luZG93LnBhcmVudC5wYXNzKCJhIGRvY3VtZW50IHNhbmRib3hlZCB3aXRoICdh
bGxvdy1zYW1lLW9yaWdpbicgYW5kIGNvbnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1l
bnQgd2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nIHNob3VsZCBiZSBzYW1lIGRvbWFpbiB3aXRoIGl0
cyBwYXJlbnQiKTsKKyAgd2luZG93LnRvcC5wYXNzKCJhIGRvY3VtZW50IHNhbmRib3hlZCB3aXRo
ICdhbGxvdy1zYW1lLW9yaWdpbicgY29udGFpbmVkIHdpdGhpbiBhIHNhbmRib3hlZCBkb2N1bWVu
dCB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgc2hvdWxkIGJlIHNhbWUgZG9tYWluIHdpdGggdGhl
IHRvcCBsZXZlbCIpOworfQorPC9zY3JpcHQ+CisKKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4K
KyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicg
YW5kIGNvbnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aCAnYWxsb3ctc2Ny
aXB0cyBhbGxvdy1zYW1lLW9yaWdpbicKKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY3Lmh0bWwg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjcuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNy5odG1sCkBAIC0wLDAgKzEsMjAg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRm
LTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3Qu
Y3NzIi8+Cis8L2hlYWQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0
aW9uIGRvU3R1ZmYoKSB7CisgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGV4ZWN1dGUgc2NyaXB0cwor
ICB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKHtvazogdHJ1ZSwgZGVzYzogImEgZG9jdW1lbnQgY29u
dGFpbmVkIHdpdGhpbiBhbiBpZnJhbWUgY29udGFpbmVkIHdpdGhpbiBhbiBpZnJhbWUgc2FuZGJv
eGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnIHNob3VsZCBiZSBhYmxlIHRvIGV4ZWN1dGUgc2NyaXB0
cyJ9LCAiKiIpOworfQorPC9zY3JpcHQ+CisKKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAg
SSBhbSBOT1Qgc2FuZGJveGVkIGJ1dCBhbSBjb250YWluZWQgd2l0aGluIGFuIGlmcmFtZSBjb250
YWluZWQgd2l0aGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCBzYW5kYm94ID0gImFsbG93LXNj
cmlwdHMiIAorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfaW5oZXJpdGFuY2UuaHRtbCBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9pbmhlcml0YW5jZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2luaGVyaXRhbmNlLmh0bWwKQEAgLTAsMCArMSwx
MDkgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzwhLS0NCitodHRwczovL2J1Z3ppbGxh
Lm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQNCitJbXBsZW1lbnQgSFRNTDUgc2Fu
ZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMgLSBpbmhlcml0YW5jZSB0ZXN0cw0KKy0tPg0KKzxo
ZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAz
NDE2MDQ8L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBz
cmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0Pg0KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2Ny
aXB0Ij4NCisvKiogVGVzdCBmb3IgQnVnIDM0MTYwNCAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94
IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAqKi8NCisvKiogSW5oZXJpdGFuY2UgVGVzdHMgKiovDQor
DQorLy8gYSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRoYXQgaXMgdXNlZCBieSBzYW5kYm94ZWQgaWZy
YW1lcyB3aXRob3V0DQorLy8gJ2FsbG93LXNhbWUtb3JpZ2luJyB0byBjb21tdW5pY2F0ZSBwYXNz
L2ZhaWwgYmFjayB0byB0aGlzIG1haW4gcGFnZS4NCisvLyBpdCBleHBlY3RzIHRvIGJlIGNhbGxl
ZCB3aXRoIGFuIG9iamVjdCBsaWtlIHtvazogdHJ1ZS9mYWxzZSwgZGVzYzogDQorLy8gPGRlc2Ny
aXB0aW9uIG9mIHRoZSB0ZXN0PiB3aGljaCBpdCB0aGVuIGZvcndhcmRzIHRvIG9rKCkNCit3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7ICAN
CisNCit2YXIgY29tcGxldGVkVGVzdHMgPSAwOw0KKw0KK2Z1bmN0aW9uIHJlY2VpdmVNZXNzYWdl
KGV2ZW50KSAgDQoreyANCisgIG9rKGV2ZW50LmRhdGEub2ssIGV2ZW50LmRhdGEuZGVzYyk7DQor
ICANCisgIC8vIFJFVklFVyA6IHRoaXMgaXMgaGFja3kgYXMgd2VsbCAtIGhvdyBkbyBpIHN5bmNo
cm9uaXplIGFuZCBtYWtlIHN1cmUNCisgIC8vIGkgZ290IGFueSBmYWlscyA/IHRoZXkgY2FuJ3Qg
cnVuIHNjcmlwdHMgb3IgdGhleSB3b3VsZCBiZSBhIGZhaWxpbmcgdGVzdC4uLg0KKyAgaWYgKGV2
ZW50LmRhdGEub2spIHsNCisgICAgY29tcGxldGVkVGVzdHMrKzsgIA0KKyAgfQ0KKyAgDQorICAv
LyBSRVZJRVcgOiBpZiBvbmUgb2YgdGhlc2UgdGVzdHMgZmFpbHMgYW5kIHRoZSBtZXNzYWdlIGlz
bid0IHNlbnQNCisgIC8vIHRoaXMgbWVhbnMgdGhpcyB0ZXN0IHdpbGwgaGFuZyB1bnRpbCB0aGUg
dGltZSBvdXQgaGFwcGVucyA6KA0KKyAgLy8gYWR2aWNlIG9uIGJldHRlciB3YXlzIHRvIHN5bmNo
cm9uaXplIHRoaW5ncyBhcHByZWNpYXRlZCAhDQorICBpZiAoY29tcGxldGVkVGVzdHMgPT0gMykg
ew0KKyAgICBTaW1wbGVUZXN0LmZpbmlzaCgpOw0KKyAgfQ0KK30gIA0KKw0KK2Z1bmN0aW9uIHBh
c3MoZGVzYykgew0KKyAgb2sodHJ1ZSwgZGVzYyk7DQorICANCisgIGNvbXBsZXRlZFRlc3RzKys7
DQorICAgIA0KKyAgLy8gUkVWSUVXIDogaWYgb25lIG9mIHRoZXNlIHRlc3RzIGZhaWxzIGFuZCB0
aGUgbWVzc2FnZSBpc24ndCBzZW50DQorICAvLyB0aGlzIG1lYW5zIHRoaXMgdGVzdCB3aWxsIGhh
bmcgdW50aWwgdGhlIHRpbWUgb3V0IGhhcHBlbnMgOigNCisgIC8vIGFkdmljZSBvbiBiZXR0ZXIg
d2F5cyB0byBzeW5jaHJvbml6ZSB0aGluZ3MgYXBwcmVjaWF0ZWQgIQ0KKyAgaWYgKGNvbXBsZXRl
ZFRlc3RzID09IDMpIHsNCisgICAgU2ltcGxlVGVzdC5maW5pc2goKTsNCisgIH0NCit9DQorDQor
d2luZG93LnBhc3MgPSBwYXNzOw0KKw0KK2Z1bmN0aW9uIGRvVGVzdCgpIHsgDQorICBTaW1wbGVU
ZXN0LndhaXRGb3JFeHBsaWNpdEZpbmlzaCgpOw0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAv
LyAxKSBhbiBpZnJhbWUgd2l0aCBubyBzYW5kYm94IGF0dHJpYnV0ZSBpbnNpZGUgYW4gaWZyYW1l
IHRoYXQgaGFzIHNhbmRib3ggPSAiIg0KKyAgLy8gc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGV4ZWN1
dGUgc2NyaXB0cyAoY2Fubm90IGV2ZXIgbG9vc2VuIHBlcm1pc3Npb25zKSANCisgIC8vIChkb25l
IGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCBjb250YWluZWQgd2l0aGluIGZpbGVf
aWZyYW1lX3NhbmRib3hfYV9pZjEuaHRtbCkNCisgIA0KKyAgLy8gZmFpbHMgaWYgYmFkIA0KKyAg
Ly8gMikgYW4gaWZyYW1lIHdpdGggc2FuZGJveCA9ICJhbGxvdy1zY3JpcHRzIiBpbnNpZGUgYW4g
aWZyYW1lIHRoYXQgaGFzIHNhbmRib3ggPSAiIg0KKyAgLy8gc2hvdWxkIG5vdCBiZSBhYmxlIHRv
IGV4ZWN1dGUgc2NyaXB0cyAoY2Fubm90IGV2ZXIgbG9vc2VuIHBlcm1pc3Npb25zKQ0KKyAgLy8g
KGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sIGNvbnRhaW5lZCB3aXRoaW4g
ZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMS5odG1sKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQor
ICAvLyAzKSBhbiBpZnJhbWUgd2l0aCBubyBzYW5kYm94IGF0dHJpYnV0ZSBpbnNpZGUgYW4gaWZy
YW1lIHRoYXQgaGFzIHNhbmRib3ggPSAiYWxsb3ctc2NyaXB0cyINCisgIC8vIHNob3VsZCBub3Qg
YmUgc2FtZSBvcmlnaW4gd2l0aCB0aGUgdG9wIHdpbmRvdw0KKyAgLy8gKGRvbmUgYnkgZmlsZV9p
ZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2Fu
ZGJveF9hX2lmMy5odG1sKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA0KSBhbiBpZnJh
bWUgd2l0aCBubyBzYW5kYm94IGF0dHJpYnV0ZSBpbnNpZGUgYW4gaWZyYW1lIHRoYXQgaGFzIHNh
bmRib3ggPSAiYWxsb3ctc2NyaXB0cyINCisgIC8vIHNob3VsZCBub3QgYmUgc2FtZSBvcmlnaW4g
d2l0aCBpdHMgcGFyZW50DQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY0
Lmh0bWwgY29udGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwpDQor
DQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gNSkgYW4gaWZyYW1lIHdpdGggJ2FsbG93LXNh
bWUtb3JpZ2luJyBhbmQgJ2FsbG93LXNjcmlwdHMnIGluc2lkZSBhbiBpZnJhbWUgd2l0aCAnYWxs
b3ctc2FtZS1vcmlnaW4nDQorICAvLyBhbmQgJ2FsbG93LXNjcmlwdHMnIHNob3VsZCBiZSBzYW1l
IG9yaWdpbiB3aXRoIHRoZSB0b3Agd2luZG93IA0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVf
c2FuZGJveF9hX2lmNi5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9h
X2lmNS5odG1sKQ0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDYpIGFuIGlmcmFtZSB3
aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kICdhbGxvdy1zY3JpcHRzJyBpbnNpZGUgYW4gaWZy
YW1lIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJw0KKyAgLy8gYW5kICdhbGxvdy1zY3JpcHRzJyBz
aG91bGQgYmUgc2FtZSBvcmlnaW4gd2l0aCBpdHMgcGFyZW50DQorICAvLyAoZG9uZSBieSBmaWxl
X2lmcmFtZV9zYW5kYm94X2FfaWY2Lmh0bWwgY29udGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9z
YW5kYm94X2FfaWY1Lmh0bWwpDQorICANCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyA3KSBh
biBpZnJhbWUgd2l0aCBubyBzYW5kYm94IGF0dHJpYnV0ZSBpbnNpZGUgYW4gaWZyYW1lIHRoYXQg
aGFzIHNhbmRib3ggPSAiYWxsb3ctc2NyaXB0cyINCisgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGV4
ZWN1dGUgc2NyaXB0cw0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNy5o
dG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sKQ0KKw0K
KyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA4KSBhbiBpZnJhbWUgd2l0aCBzYW5kYm94PSIiIGlu
c2lkZSBhbiBpZnJhbWUgdGhhdCBoYXMgYWxsb3ctc2NyaXB0cyBzaG91bGQgbm90IGJlIGFibGUN
CisgIC8vIHRvIGV4ZWN1dGUgc2NyaXB0cw0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2Fu
ZGJveF9hX2lmMi5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lm
My5odG1sKQ0KK30NCis8L3NjcmlwdD4NCis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4NCis8YSB0
YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzQxNjA0Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1
IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzDQorPHAgaWQ9ImRpc3BsYXkiPjwvcD4NCis8
ZGl2IGlkPSJjb250ZW50Ij4NCis8aWZyYW1lIHNhbmRib3g9IiIgaWQ9ImlmXzEiIHNyYz0iZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmMS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZy
YW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzMiIHNyYz0iZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZy
YW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIg
aWQ9ImlmXzUiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNS5odG1sIiBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvZGl2Pg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>603514</attachid>
            <date>2012-03-06 16:32:00 -0800</date>
            <delta_ts>2012-03-30 16:27:52 -0700</delta_ts>
            <desc>iframe sandbox tests - same origin</desc>
            <filename>iframe_sandbox_tests_same_origin</filename>
            <type>text/plain</type>
            <size>10713</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNGRkY2U2MGEzMTUzMDJjNTU4YTQ4NzkyMDc0
ZjFkOWEwNzYwMmU4NwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBzYW1lIG9yaWdpbgoKCmRpZmYgLS1naXQgYS9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9N
YWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KQEAgLTI5MiwxNiArMjky
LDIwIEBAIF9URVNUX0ZJTEVTID0gXAogCQlmaWxlX2Z1bGxzY3JlZW4tZXNjLWV4aXQuaHRtbCBc
CiAJCWZpbGVfZnVsbHNjcmVlbi1lc2MtZXhpdC1pbm5lci5odG1sIFwKIAkJZmlsZV9mdWxsc2Ny
ZWVuLXJvbGxiYWNrLmh0bWwgXAogCQl0ZXN0X2xpX2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5odG1s
IFwKIAkJdGVzdF9vbF9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRtbCBcCiAJCXRlc3RfYnVnNjUx
OTU2Lmh0bWwgXAogCQl0ZXN0X2J1ZzY5NDUwMy5odG1sIFwKIAkJdGVzdF9vYmplY3RfcGx1Z2lu
X25hdi5odG1sIFwKKwkJdGVzdF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdpbi5odG1sIFwKKwkJ
ZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9i
X2lmMi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5odG1sIFwKIAkJJChOVUxM
KQogCiBfQlJPV1NFUl9URVNUX0ZJTEVTID0gXAogCQlicm93c2VyX2J1ZzY0OTc3OC5qcyBcCiAJ
CWZpbGVfYnVnNjQ5Nzc4Lmh0bWwgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sXmhlYWRlcnNeIFwK
IAkJJChOVUxMKQogCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfYl9pZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2JfaWYxLmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxo
ZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQx
NjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJl
Zj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5PgorICBJIGFt
IHNhbmRib3hlZCB3aXRob3V0IGFueSBwZXJtaXNzaW9ucworPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Jf
aWYyLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
Yl9pZjIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMi5odG1sCkBAIC0w
LDAgKzEsNDkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVU
ZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8c2NyaXB0PgorICBmdW5jdGlvbiBvayhjb25kaXRp
b24sIG1zZykgeworICAgIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihjb25kaXRpb24sIG1zZyk7
CisgIH0KKworICBmdW5jdGlvbiB0ZXN0WEhSKCkgeworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKKworICAgIHhoci5vcGVuKCJHRVQiLCAiZmlsZV9pZnJhbWVfc2FuZGJveF9p
ZjEuaHRtbCIpOworCisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIChvRXZl
bnQpIHsKKyAgICAgIHZhciByZXN1bHQgPSBmYWxzZTsKKyAgICAgIGlmICh4aHIucmVhZHlTdGF0
ZSA9PSA0KSB7CisgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkgeworICAgICAgICAgIHJl
c3VsdCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgb2socmVzdWx0LCAiWEhSIHNob3VsZCB3
b3JrIG5vcm1hbGx5IGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2FtZS1vcmln
aW4nIik7CisgICAgICB9CisgICAgfQorICAgIAorICAgIHhoci5zZW5kKG51bGwpOworICB9CisK
KyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICBvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hl
ZCB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIHRoZWly
IHBhcmVudCIpOworICAgIAorICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyBkb2N1bWVu
dC5jb29raWUgc2luY2Ugd2UgaGF2ZSAnYWxsb3ctc2FtZS1vcmlnaW4nCisgICAgb2soZG9jdW1l
bnQuY29va2llID09ICIiLCAiYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zYW1lLW9y
aWdpbiBzaG91bGQgYmUgYWJsZSB0byBhY2Nlc3MgZG9jdW1lbnQuY29va2llIik7CisgICAgCisg
ICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIGxvY2FsU3RvcmFnZSBzaW5jZSB3ZSBoYXZl
ICdhbGxvdy1zYW1lLW9yaWdpbicKKyAgICBvayh3aW5kb3cubG9jYWxTdG9yYWdlLCAiYSBkb2N1
bWVudCBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zYW1lLW9yaWdpbiBzaG91bGQgYmUgYWJsZSB0byBh
Y2Nlc3MgbG9jYWxTdG9yYWdlIik7CisgICAgCisgICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gYWNj
ZXNzIHNlc3Npb25TdG9yYWdlIHNpbmNlIHdlIGhhdmUgJ2FsbG93LXNhbWUtb3JpZ2luJworICAg
IG9rKHdpbmRvdy5zZXNzaW9uU3RvcmFnZSwgImEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGggYWxs
b3ctc2FtZS1vcmlnaW4gc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIHNlc3Npb25TdG9yYWdlIik7
CisgIAorICAgIHRlc3RYSFIoKTsKKyAgfQorPC9zY3JpcHQ+Cis8Ym9keSBvbkxvYWQ9ImRvU3R1
ZmYoKSI+CisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zYW1lLW9yaWdpbiIgYW5k
ICJhbGxvdy1zY3JpcHRzIgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2JfaWYzLmh0bWwgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8
dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8
L2hlYWQ+Cis8c2NyaXB0PgorICBmdW5jdGlvbiBvayhyZXN1bHQsIG1lc3NhZ2UpIHsKKyAgICB3
aW5kb3cudG9wLnBvc3RNZXNzYWdlKHtvazogcmVzdWx0LCBkZXNjOiBtZXNzYWdlfSwgIioiKTsK
KyAgfQorCisgIGZ1bmN0aW9uIHRlc3RYSFIoKSB7CisgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJl
cXVlc3QoKTsKKworICB4aHIub3BlbigiR0VUIiwgImZpbGVfaWZyYW1lX3NhbmRib3hfaWYxLmh0
bWwiKTsKKworICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKG9FdmVudCkgewor
ICAgIHZhciByZXN1bHQgPSBmYWxzZTsKKyAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgewor
ICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMCkgeworICAgICAgICByZXN1bHQgPSB0cnVlOworICAg
ICAgfQorICAgICAgb2socmVzdWx0LCAiWEhSIHNob3VsZCBiZSBibG9ja2VkIGluIGFuIGlmcmFt
ZSBzYW5kYm94ZWQgV0lUSE9VVCAnYWxsb3ctc2FtZS1vcmlnaW4nIik7CisgICAgfQorICB9Cisg
IAorICB4aHIuc2VuZChudWxsKTsKK30KKyAgCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAg
dHJ5IHsKKyAgICAgIHdpbmRvdy5wYXJlbnQub2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVk
IHdpdGhvdXQgJ2FsbG93LXNhbWUtb3JpZ2luJyBzaG91bGQgTk9UIGJlIGFibGUgdG8gYWNjZXNz
IHRoZWlyIHBhcmVudCIpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICBvayh0cnVlLCAi
ZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zYW1lLW9yaWdpbicgc2hvdWxkIE5P
VCBiZSBhYmxlIHRvIGFjY2VzcyB0aGVpciBwYXJlbnQiKTsKKyAgICB9CisgICAgCisgICAgLy8g
c2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBkb2N1bWVudC5jb29raWUgCisgICAgdHJ5IHsK
KyAgICAgIHZhciBmb28gPSBkb2N1bWVudC5jb29raWU7CisgICAgfSBjYXRjaChlcnJvcikgewor
ICAgICAgb2sodHJ1ZSwgImEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2FtZS1v
cmlnaW4gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBkb2N1bWVudC5jb29raWUiKTsKKyAg
ICB9CisgICAgCisgICAgLy8gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBsb2NhbFN0b3Jh
Z2UKKyAgICB0cnkgeworICAgICAgdmFyIGZvbyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7CisgICAg
fSBjYXRjaChlcnJvcikgeworICAgICAgb2sodHJ1ZSwgImEgZG9jdW1lbnQgc2FuZGJveGVkIHdp
dGhvdXQgYWxsb3ctc2FtZS1vcmlnaW4gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBsb2Nh
bFN0b3JhZ2UiKTsKKyAgICB9CisKKyAgICAvLyBzaG91bGQgTk9UIGJlIGFibGUgdG8gYWNjZXNz
IHNlc3Npb25TdG9yYWdlIAorICAgIHRyeSB7CisgICAgICB2YXIgZm9vID0gd2luZG93LnNlc3Np
b25TdG9yYWdlOworICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgIG9rKHRydWUsICJhIGRvY3Vt
ZW50IHNhbmRib3hlZCB3aXRob3V0IGFsbG93LXNhbWUtb3JpZ2luIHNob3VsZCBOT1QgYmUgYWJs
ZSB0byBhY2Nlc3Mgc2Vzc2lvblN0b3JhZ2UiKTsKKyAgICB9CisgIAorICB0ZXN0WEhSKCk7Cisg
IH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIHNhbmRib3hl
ZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyIKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdp
bi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X3Nh
bWVfb3JpZ2luLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfc2FtZV9vcmlnaW4u
aHRtbApAQCAtMCwwICsxLDExMCBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPCEtLQ0K
K2h0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNA0KK0lt
cGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAtIHNhbWUgb3JpZ2lu
IHRlc3RzDQorLS0+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0
bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0
aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9z
Y3JpcHQ+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIv
dGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9ImFw
cGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KKy8qKiBUZXN0IGZvciBCdWcgMzQxNjA0IC0gSW1wbGVt
ZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzICoqLw0KKy8qKiBTYW1lIE9y
aWdpbiBUZXN0cyAqKi8NCisNCit2YXIgY29tcGxldGVkVGVzdHMgPSAwOw0KK3ZhciBwYXNzZWRU
ZXN0cyA9IDA7DQorDQorZnVuY3Rpb24gb2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpIHsNCisgIG9r
KHJlc3VsdCwgZGVzYyk7DQorICANCisgIGNvbXBsZXRlZFRlc3RzKys7DQorDQorICBpZiAocmVz
dWx0KSB7DQorICAgIHBhc3NlZFRlc3RzKys7DQorICB9DQorICANCisgIC8vIFJFVklFVyA6IGlm
IG9uZSBvZiB0aGVzZSB0ZXN0cyBmYWlscyBhbmQgdGhpcyBpc24ndCBjYWxsZWQNCisgIC8vIHRo
aXMgbWVhbnMgdGhpcyB0ZXN0IHdpbGwgaGFuZyB1bnRpbCB0aGUgdGltZSBvdXQgaGFwcGVucyA6
KA0KKyAgLy8gYWR2aWNlIG9uIGJldHRlciB3YXlzIHRvIHN5bmNocm9uaXplIHRoaW5ncyBhcHBy
ZWNpYXRlZCAhDQorICBpZiAoY29tcGxldGVkVGVzdHMgPT0gMTIpIHsNCisgICAgb2socGFzc2Vk
VGVzdHMgPT0gMTIsICJUaGVyZSBhcmUgMTIgc2FtZS1vcmlnaW4gdGVzdHMgdGhhdCBzaG91bGQg
cGFzcyIpOw0KKyAgDQorICAgIFNpbXBsZVRlc3QuZmluaXNoKCk7DQorICB9DQorfQ0KKw0KK2Z1
bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KSAgDQoreyANCisgIG9rX3dyYXBwZXIoZXZlbnQu
ZGF0YS5vaywgZXZlbnQuZGF0YS5kZXNjKTsNCit9ICANCisNCisvLyBhIHBvc3RNZXNzYWdlIGhh
bmRsZXIgdGhhdCBpcyB1c2VkIGJ5IHNhbmRib3hlZCBpZnJhbWVzIHdpdGhvdXQNCisvLyAnYWxs
b3ctc2FtZS1vcmlnaW4nIHRvIGNvbW11bmljYXRlIHBhc3MvZmFpbCBiYWNrIHRvIHRoaXMgbWFp
biBwYWdlLg0KKy8vIGl0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0IGxpa2Ug
e29rOiB0cnVlL2ZhbHNlLCBkZXNjOiANCisvLyA8ZGVzY3JpcHRpb24gb2YgdGhlIHRlc3Q+IHdo
aWNoIGl0IHRoZW4gZm9yd2FyZHMgdG8gb2soKQ0KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJt
ZXNzYWdlIiwgcmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTsgIA0KKw0KK2Z1bmN0aW9uIGRvVGVzdCgp
IHsgDQorICBTaW1wbGVUZXN0LndhaXRGb3JFeHBsaWNpdEZpbmlzaCgpOw0KKw0KKyAgLy8gMSkg
dGVzdCB0aGF0IHdlIGNhbid0IGFjY2VzcyBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFs
bG93LXNhbWUtb3JpZ2luIg0KKyAgdmFyIGlmXzEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aWZfMSIpOw0KKyAgdHJ5IHsNCisgICAgdmFyIGIgPSBpZl8xLmNvbnRlbnREb2N1bWVudC5ib2R5
Ow0KKyAgICBva193cmFwcGVyKGZhbHNlLCAiYWNjZXNzaW5nIGJvZHkgb2YgYSBzYW5kYm94ZWQg
ZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIik7DQorICB9IGNhdGNoIChlcnIpew0KKyAg
ICBva193cmFwcGVyKHRydWUsICJhY2Nlc3NpbmcgYm9keSBvZiBhIHNhbmRib3hlZCBkb2N1bWVu
dCBzaG91bGQgbm90IGJlIGFsbG93ZWQiKTsNCisgIH0NCisgIA0KKyAgLy8gMikgdGVzdCB0aGF0
IHdlIGNhbiBhY2Nlc3MgYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zYW1lLW9yaWdp
biINCisgIHZhciBpZl8yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlmXzIiKTsNCisgIA0K
KyAgdHJ5IHsNCisgICAgdmFyIGIgPSBpZl8yLmNvbnRlbnREb2N1bWVudC5ib2R5Ow0KKyAgICBv
a193cmFwcGVyKHRydWUsICJhY2Nlc3NpbmcgYm9keSBvZiBhIHNhbmRib3hlZCBkb2N1bWVudCB3
aXRoIGFsbG93LXNhbWUtb3JpZ2luIHNob3VsZCBiZSBhbGxvd2VkIik7DQorICB9IGNhdGNoIChl
cnIpIHsNCisgICAgb2tfd3JhcHBlcihmYWxzZSwgImFjY2Vzc2luZyBib2R5IG9mIGEgc2FuZGJv
eGVkIGRvY3VtZW50IHdpdGggYWxsb3ctc2FtZS1vcmlnaW4gc2hvdWxkIGJlIGFsbG93ZWQiKTsN
CisgIH0NCisgIA0KKyAgLy8gMykgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSB3aXRob3V0
ICdhbGxvdy1zYW1lLW9yaWdpbicgY2Fubm90IGFjY2VzcyBpdHMgcGFyZW50DQorICAvLyB0aGlz
IGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjMuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlw
dHMnIGJ1dCBub3QgJ2FsbG93LXNhbWUtb3JpZ2luJw0KKyAgDQorICAvLyA0KSB0ZXN0IHRoYXQg
YSBzYW5kYm94ZWQgaWZyYW1lIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyBjYW4gYWNjZXNzIGl0
cyBwYXJlbnQNCisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lmMi5odG1sIHdo
aWNoIGhhcyAnYWxsb3ctc2FtZS1vcmlnaW4nIGFuZCAnYWxsb3ctc2NyaXB0cycNCisgDQorICAv
LyA1KSBjaGVjayB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSB3aXRoICJhbGxvdy1zYW1lLW9yaWdp
biIgY2FuIGFjY2VzcyBkb2N1bWVudC5jb29raWUNCisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxl
X2lmcmFtZV9iX2lmMi5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2FtZS1vcmlnaW4nIGFuZCAnYWxs
b3ctc2NyaXB0cycNCisgDQorICAvLyA2KSBjaGVjayB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSB3
aXRoICJhbGxvdy1zYW1lLW9yaWdpbiIgY2FuIGFjY2VzcyB3aW5kb3cubG9jYWxTdG9yYWdlDQor
ICAvLyB0aGlzIGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjIuaHRtbCB3aGljaCBoYXMgJ2Fs
bG93LXNhbWUtb3JpZ2luJyBhbmQgJ2FsbG93LXNjcmlwdHMnDQorDQorICAvLyA3KSBjaGVjayB0
aGF0IGEgc2FuZGJveGVkIGlmcmFtZSB3aXRoICJhbGxvdy1zYW1lLW9yaWdpbiIgY2FuIGFjY2Vz
cyB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UNCisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFt
ZV9iX2lmMi5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2FtZS1vcmlnaW4nIGFuZCAnYWxsb3ctc2Ny
aXB0cycNCisgDQorICAvLyA4KSBjaGVjayB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBXSVRIT1VU
ICJhbGxvdy1zYW1lLW9yaWdpbiIgY2FuIE5PVCBhY2Nlc3MgZG9jdW1lbnQuY29va2llDQorICAv
LyB0aGlzIGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjMuaHRtbCB3aGljaCBoYXMgJ2FsbG93
LXNjcmlwdHMnIGJ1dCBub3QgJ2FsbG93LXNhbWUtb3JpZ2luJw0KKyAgDQorICAvLyA5KSBjaGVj
ayB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBXSVRIT1VUICJhbGxvdy1zYW1lLW9yaWdpbiIgY2Fu
IE5PVCBhY2Nlc3Mgd2luZG93LmxvY2FsU3RvcmFnZQ0KKyAgLy8gdGhpcyBpcyBkb25lIGJ5IGZp
bGVfaWZyYW1lX2JfaWYzLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJyBidXQgbm90ICdh
bGxvdy1zYW1lLW9yaWdpbicNCisgIA0KKyAgLy8gMTApIGNoZWNrIHRoYXQgYSBzYW5kYm94ZWQg
aWZyYW1lIFdJVEhPVVQgImFsbG93LXNhbWUtb3JpZ2luIiBjYW4gTk9UIGFjY2VzcyB3aW5kb3cu
c2Vzc2lvblN0b3JhZ2UNCisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lmMy5o
dG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycgYnV0IG5vdCAnYWxsb3ctc2FtZS1vcmlnaW4n
DQorICANCisgIC8vIDExKSBjaGVjayB0aGF0IFhIUiB3b3JrcyBub3JtYWxseSBpbiBhIHNhbmRi
b3hlZCBpZnJhbWUgd2l0aCAiYWxsb3ctc2FtZS1vcmlnaW4iIGFuZCAiYWxsb3ctc2NyaXB0cyIN
CisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lmMi5odG1sIHdoaWNoIGhhcyAn
YWxsb3ctc2FtZS1vcmlnaW4nIGFuZCAnYWxsb3ctc2NyaXB0cycNCisgIA0KKyAgLy8gMTIpIGNo
ZWNrIHRoYXQgWEhSIGlzIGJsb2NrZWQgaW4gYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGggImFsbG93
LXNjcmlwdHMiIGJ1dCBXSVRIT1VUICJhbGxvdy1zYW1lLW9yaWdpbiIgDQorICAvLyB0aGlzIGlz
IGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjMuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMn
IGJ1dCBub3QgJ2FsbG93LXNhbWUtb3JpZ2luJw0KK30NCis8L3NjcmlwdD4NCis8Ym9keSBvbmxv
YWQ9ImRvVGVzdCgpIj4NCis8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9idWd6aWxs
YS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8
L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzDQorPHAg
aWQ9ImRpc3BsYXkiPjwvcD4NCis8ZGl2IGlkPSJjb250ZW50Ij4NCis8aWZyYW1lIHNhbmRib3g9
IiIgaWQ9ImlmXzEiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIiBoZWlnaHQ9
IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1v
cmlnaW4gYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzIiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9i
X2lmMi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2Fu
ZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzMiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9i
X2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvZGl2Pg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>603903</attachid>
            <date>2012-03-07 15:58:20 -0800</date>
            <delta_ts>2012-04-03 16:14:11 -0700</delta_ts>
            <desc>iframe sandbox tests - general</desc>
            <filename>iframe_sandbox_tests_general</filename>
            <type>text/plain</type>
            <size>13713</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZDBmZWVjNDgyMWE3NzNhNDM5YzFlNmU2YjQ5
M2Q3NzkwMDViOGNkOQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4gYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvTWFrZWZpbGUuaW4KKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmls
ZS5pbgpAQCAtMjkyLDE2ICsyOTIsMjQgQEAgX1RFU1RfRklMRVMgPSBcCiAJCWZpbGVfZnVsbHNj
cmVlbi1lc2MtZXhpdC5odG1sIFwKIAkJZmlsZV9mdWxsc2NyZWVuLWVzYy1leGl0LWlubmVyLmh0
bWwgXAogCQlmaWxlX2Z1bGxzY3JlZW4tcm9sbGJhY2suaHRtbCBcCiAJCXRlc3RfbGlfYXR0cmli
dXRlc19yZWZsZWN0aW9uLmh0bWwgXAogCQl0ZXN0X29sX2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5o
dG1sIFwKIAkJdGVzdF9idWc2NTE5NTYuaHRtbCBcCiAJCXRlc3RfYnVnNjk0NTAzLmh0bWwgXAog
CQl0ZXN0X29iamVjdF9wbHVnaW5fbmF2Lmh0bWwgXAorCQl0ZXN0X2lmcmFtZV9zYW5kYm94X2dl
bmVyYWwuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCBcCisJCWZpbGVf
aWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMu
aHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbCBcCisJCWZpbGVfaWZyYW1l
X3NhbmRib3hfZm9ybV9mYWlsLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFz
cy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWlsLmh0bWwgXAog
CQkkKE5VTEwpCiAKIF9CUk9XU0VSX1RFU1RfRklMRVMgPSBcCiAJCWJyb3dzZXJfYnVnNjQ5Nzc4
LmpzIFwKIAkJZmlsZV9idWc2NDk3NzguaHRtbCBcCiAJCWZpbGVfYnVnNjQ5Nzc4Lmh0bWxeaGVh
ZGVyc14gXAogCQkkKE5VTEwpCiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
LS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfY19pZjEuaHRtbApAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9y
IEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4gICAgIAorICA8bGlu
ayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVz
dC90ZXN0LmNzcyIvPgorICAKKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
Ij4KKyAgZnVuY3Rpb24gb2socmVzdWx0LCBkZXNjKSB7IAorICAgIHdpbmRvdy50b3AucG9zdE1l
c3NhZ2Uoe29rOiByZXN1bHQsIGRlc2M6IGRlc2N9LCAiKiIpOworICB9CisgIAorICBmdW5jdGlv
biBkb1N1Ym1pdCgpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYV9mb3JtJykuc3Vi
bWl0KCk7CisgIH0KKyAgCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgb2sodHJ1ZSwgImRv
Y3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1
biBzY3JpcHRzIik7IAorICAgIAorICAgIC8vIHNob3VsZCBub3QgYmUgYWxsb3dlZCAtIGRvbid0
IGhhdmUgYWxsb3ctZm9ybXMKKyAgICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2Ff
YnV0dG9uJyk7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJ
IGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyIKKyAgCisgIDxmb3JtIG1ldGhv
ZD0iZ2V0IiBhY3Rpb249ImZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwiIGlkPSJh
X2Zvcm0iPgorICAgIEZpcnN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmaXJzdG5h
bWUiPgorICAgIExhc3QgbmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imxhc3RuYW1lIj4K
KyAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBvbmNsaWNrPSJkb1N1Ym1pdCgpIiBpZD0iYV9idXR0
b24iPgorICA8L2Zvcm0+CisgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
ICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+ICAgCisgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3Nz
Ii8+CisgIAorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5j
dGlvbiBvayhyZXN1bHQsIGRlc2MpIHsgCisgICAgd2luZG93LnRvcC5wb3N0TWVzc2FnZSh7b2s6
IHJlc3VsdCwgZGVzYzogbWVzc2FnZX0sICIqIik7CisgIH0KKyAgCisgIGZ1bmN0aW9uIGRvU3R1
ZmYoKSB7CisgICAgb2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIFdJVEhPVVQgYWxsb3ct
c2NyaXB0cyBzaG91bGQgTk9UIGJlIGFibGUgdG8gcnVuIHNjcmlwdHMiKTsgCisgIH0KKzwvc2Ny
aXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIHNhbmRib3hlZCB3aXRoIG5v
IHBlcm1pc3Npb25zCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbCBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+ICAg
ICAKKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3Rz
L1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIGRvU3VibWl0KCkgeworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdhX2Zvcm0nKS5zdWJtaXQoKTsKKyAgfQorICAKKyAgZnVuY3Rpb24gZG9TdHVm
ZigpIHsgICAgCisgICAgLy8gdHJ5IGFuZCBzdWJtaXQgdGhlIGZvcm0gLSB0aGlzIHNob3VsZCBz
dWNjZWVkCisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhX2J1dHRvbicpOwor
ICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBzYW5kYm94
ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ctZm9ybXMiCisgIAorICA8Zm9ybSBtZXRo
b2Q9ImdldCIgYWN0aW9uPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1sIiBpZD0i
YV9mb3JtIj4KKyAgICBGaXJzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmlyc3Ru
YW1lIj4KKyAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYXN0bmFtZSI+
CisgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgb25jbGljaz0iZG9TdWJtaXQoKSIgaWQ9ImFfYnV0
dG9uIj4KKyAgPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8
dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0
PiAgICAgCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90
ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIAorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2MpIHsgCisgICAgd2lu
ZG93LnBhcmVudC5va193cmFwcGVyKHJlc3VsdCwgZGVzYyk7CisgIH0KKyAgCisgIGZ1bmN0aW9u
IGRvU3R1ZmYoKSB7CisgICAgLy8gdHJ5IHRvIG9wZW4gYSBuZXcgd2luZG93IHZpYSB0YXJnZXQ9
Il9ibGFuayIsIHdpbmRvdy5vcGVuKCksIGFuZCBzaG93TW9kYWxEaWFsb2coKQorICAgIC8vIHRo
ZSB3aW5kb3cgd2UgdHJ5IHRvIG9wZW4gY2xvc2VzIGl0c2VsZiBvbmNlIGl0IG9wZW5zCisgICAg
c2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICd0YXJnZXRfYmxhbmsnKTsKKworICAgIC8v
IFJFVklFVyA6IHdpbmRvdy5vcGVuIGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHRocm93cyBhbiBl
eGNlcHRpb24gOiAKKyAgICAvLyBzaG91bGQgaXQgPworICAgIHRyeSB7IAorICAgICAgd2luZG93
Lm9wZW4oImZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIik7CisgICAg
fSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgIG9rKHRydWUsICJ3aW5kb3cub3BlbiB0aHJldyBhIEpT
IGV4Y2VwdGlvbiBhbmQgd2FzIG5vdCBhbGxvd2VkIik7CisgICAgfQorCisgICAgLy8gUkVWSUVX
IDogd2luZG93LnNob3dNb2RhbERpYWxvZyBpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB0aHJvd3Mg
YW4gZXhjZXB0aW9uIDogCisgICAgLy8gc2hvdWxkIGl0ID8KKyAgICB0cnkgeworICAgICAgd2lu
ZG93LnNob3dNb2RhbERpYWxvZygiZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWls
Lmh0bWwiKTsgCisgICAgfSBjYXRjaChlcnJvcikgeworICAgICAgb2sodHJ1ZSwgIndpbmRvdy5z
aG93TW9kYWxEaWFsb2cgdGhyZXcgYSBKUyBleGNlcHRpb24gYW5kIHdhcyBub3QgYWxsb3dlZCIp
OworICAgIH0KKyAgfSAgICAKKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgor
ICBJIGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdp
biIKKyAgCisgIDxhIGhyZWY9ImZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5o
dG1sIiB0YXJnZXQ9Il9ibGFuayIgaWQ9InRhcmdldF9ibGFuayI+b3BlbiB3aW5kb3c8L2E+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5U
ZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9q
YXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0
PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMv
U2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYo
KSI+CisgIEkgc2hvdWxkIE5PVCBiZSBsb2FkZWQgYnkgYSBmb3JtIHN1Ym1pdCBmcm9tIGEgc2Fu
ZGJveCB3aXRob3V0ICdhbGxvdy1mb3JtcycKKzwvYm9keT4KKzwvaHRtbD4KKworPHNjcmlwdD4K
KyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKHtvazog
ZmFsc2UsIGRlc2M6ICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctZm9ybXMgc2hv
dWxkIE5PVCBiZSBhYmxlIHRvIHN1Ym1pdCBmb3JtcyJ9LCAiKiIpOworICB9Cis8L3NjcmlwdD4K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwKQEAgLTAsMCArMSwxOSBAQAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJh
cHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3Qu
anMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8Ym9keSBvbkxv
YWQ9ImRvU3R1ZmYoKSI+CisgIEkgc2hvdWxkIGJlIGxvYWRlZCBieSBhIGZvcm0gc3VibWl0IGZy
b20gYSBzYW5kYm94IHdpdGggJ2FsbG93LWZvcm1zJworPC9ib2R5PgorPC9odG1sPgorCis8c2Ny
aXB0PgorICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIHdpbmRvdy50b3AucG9zdE1lc3NhZ2Uo
e29rOiB0cnVlLCBkZXNjOiAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LWZvcm1zIHNo
b3VsZCBiZSBhYmxlIHRvIHN1Ym1pdCBmb3JtcyJ9LCAiKiIpOworICB9Cis8L3NjcmlwdD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93X2ZhaWwu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWlsLmh0bWwK
QEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4K
KyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1w
bGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQi
IHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9o
ZWFkPgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgc2hvdWxkIE5PVCBiZSBvcGVu
ZWQgYnkgYSBzYW5kYm94ZWQgaWZyYW1lIHZpYSBhbnkgbWV0aG9kCis8L2JvZHk+Cis8L2h0bWw+
CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgY29uc29sZS5sb2coImZp
bGVfaWZyYW1lX3NhbmRib3hfd2luZG93X29wZW5fZmFpbC5odG1sIik7CisgICAgd2luZG93Lm9w
ZW5lci5vayhmYWxzZSwgInNhbmRib3hlZCBkb2N1bWVudHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRv
IG9wZW4gd2luZG93cyIpOworICAgIHNlbGYuY2xvc2UoKTsKKyAgfQorPC9zY3JpcHQ+ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3Rf
aWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8IURPQ1RZUEUg
SFRNTD4NCis8aHRtbD4NCis8IS0tDQoraHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZv
ciBJRlJBTUVzIC0gZ2VuZXJhbCB0ZXN0cw0KKy0tPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNl
dD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPHNj
cmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0
L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0Pg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBl
PSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+
DQorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCisvKiogVGVzdCBmb3Ig
QnVnIDM0MTYwNCAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1F
cyAtIGdlbmVyYWwgdGVzdHMgKiovDQorDQorLy8gYSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRoYXQg
aXMgdXNlZCBieSBzYW5kYm94ZWQgaWZyYW1lcyB3aXRob3V0DQorLy8gJ2FsbG93LXNhbWUtb3Jp
Z2luJyB0byBjb21tdW5pY2F0ZSBwYXNzL2ZhaWwgYmFjayB0byB0aGlzIG1haW4gcGFnZS4NCisv
LyBpdCBleHBlY3RzIHRvIGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCBsaWtlIHtvazogdHJ1ZS9m
YWxzZSwgZGVzYzogDQorLy8gPGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0PiB3aGljaCBpdCB0aGVu
IGZvcndhcmRzIHRvIG9rKCkNCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJl
Y2VpdmVNZXNzYWdlLCBmYWxzZSk7ICANCisgICAgICANCitmdW5jdGlvbiByZWNlaXZlTWVzc2Fn
ZShldmVudCkgIA0KK3sgDQorICBva193cmFwcGVyKGV2ZW50LmRhdGEub2ssIGV2ZW50LmRhdGEu
ZGVzYyk7DQorfSAgDQorDQordmFyIGNvbXBsZXRlZFRlc3RzID0gMDsNCit2YXIgcGFzc2VkVGVz
dHMgPSAwOw0KKw0KK2Z1bmN0aW9uIG9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKSB7DQorICBvayhy
ZXN1bHQsIGRlc2MpOw0KKyAgDQorICBjb21wbGV0ZWRUZXN0cysrOw0KKyAgDQorICBpZiAocmVz
dWx0KSB7DQorICAgIHBhc3NlZFRlc3RzKys7DQorICB9DQorICANCisgIC8vIFJFVklFVyA6IGlm
IG9uZSBvZiB0aGVzZSB0ZXN0cyBmYWlscyBhbmQgdGhpcyBpc24ndCBjYWxsZWQNCisgIC8vIHRo
aXMgbWVhbnMgdGhpcyB0ZXN0IHdpbGwgaGFuZyB1bnRpbCB0aGUgdGltZSBvdXQgaGFwcGVucyA6
KA0KKyAgLy8gYWR2aWNlIG9uIGJldHRlciB3YXlzIHRvIHN5bmNocm9uaXplIHRoaW5ncyBhcHBy
ZWNpYXRlZCAhDQorICBpZiAoY29tcGxldGVkVGVzdHMgPT0gNikgew0KKyAgICBvayhwYXNzZWRU
ZXN0cyA9PSA2LCAiVGhlcmUgYXJlIDYgZ2VuZXJhbCB0ZXN0cyB0aGF0IHNob3VsZCBwYXNzIik7
DQorICAgIFNpbXBsZVRlc3QuZmluaXNoKCk7DQorICB9DQorfQ0KKw0KK2Z1bmN0aW9uIGRvVGVz
dCgpIHsgDQorICBTaW1wbGVUZXN0LndhaXRGb3JFeHBsaWNpdEZpbmlzaCgpOw0KKyAgDQorICAv
LyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMSkgdGVzdCB0aGF0IHNjcmlwdHMgY2FuIHJ1biBpbiBh
biBpZnJhbWUgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBm
aWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJykN
CisgIA0KKyAgLy8gZmFpbHMgaWYgYmFkIA0KKyAgLy8gMikgdGVzdCB0aGF0IGFsbG93IHNjcmlw
dHMgY2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFsbG93LXNjcmlw
dHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgd2hpY2gg
aGFzIHNhbmRib3g9JycpDQorICANCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAzKSB0ZXN0
IHRoYXQgYSBuZXcgaWZyYW1lIGhhcyBzYW5kYm94IGF0dHJpYnV0ZQ0KKyAgdmFyIGlmciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOw0KKyAgb2tfd3JhcHBlcigic2FuZGJveCIg
aW4gaWZyLCAiYSBuZXcgaWZyYW1lIHNob3VsZCBoYXZlIGEgc2FuZGJveCBhdHRyaWJ1dGUiKTsN
CisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyA0KSB0ZXN0IHRoYXQgdGhlIHNhbmRib3gg
YXR0cmlidXRlIGlzIGEgRE9NU2V0dGFibGVUb2tlbkxpc3QNCisgIG9rX3dyYXBwZXIoaWZyLnNh
bmRib3ggaW5zdGFuY2VvZiBET01TZXR0YWJsZVRva2VuTGlzdCwgInNhbmRib3ggYXR0cmlidXRl
IHNob3VsZCBiZSBhIERPTVNldHRhYmxlIFRva2VuIExpc3QiKTsNCisgIA0KKyAgLy8gcGFzc2Vz
IGlmIGdvb2QNCisgIC8vIDUpIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAnYWxs
b3ctZm9ybXMnIGNhbiBzdWJtaXQgZm9ybXMNCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3Nh
bmRib3hfY19pZjMuaHRtbCB3aGljaCBoYXMgJ2FsbG93LWZvcm1zJyBhbmQgJ2FsbG93LXNjcmlw
dHMnKQ0KKyAgDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDYpIHRlc3QgdGhhdCBhIHNhbmRi
b3hlZCBpZnJhbWUgd2l0aG91dCAnYWxsb3ctZm9ybXMnIGNhbiBOT1Qgc3VibWl0IGZvcm1zIA0K
KyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIG9ubHkg
aGFzICdhbGxvdy1zY3JpcHRzJykNCisgDQorICAvLyBSRVZJRVcgOiBhcmUgdGhlcmUgb3RoZXIg
d2F5cyBvZiBvcGVuaW5nIG5ldyB3aW5kb3dzIHRoYXQgdGhlIDMgYmVsb3cgdGhhdCBhcmUgbWVu
dGlvbmVkIGluIHRoZSBIVE1MNQ0KKyAgLy8gc3BlYyA/IA0KKyAgDQorICAvLyBmYWlscyBpZiBi
YWQNCisgIC8vIDcpIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgY2FuJ3Qgb3BlbiBhIG5l
dyB3aW5kb3cgdXNpbmcgdGhlIHRhcmdldC5hdHRyaWJ1dGUNCisgIC8vIHRoaXMgaXMgZG9uZSB2
aWEgZmlsZV9pZnJhbWVfY19pZjQuaHRtbCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAiYWxsb3ct
c2NyaXB0cyIgYW5kICJhbGxvdy1zYW1lLW9yaWdpbiINCisgIC8vIHRoZSB3aW5kb3cgaXQgYXR0
ZW1wdHMgdG8gb3BlbiBjYWxscyB3aW5kb3cub3BlbmVyLm9rKGZhbHNlLCAuLi4pIGFuZCBmaWxl
X2lmcmFtZV9jX2lmNC5odG1sIGhhcyBhbiBvaygpDQorICAvLyBmdW5jdGlvbiB0aGF0IGNhbGxz
IHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlciANCisgIA0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisg
IC8vIDgpIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgY2FuJ3Qgb3BlbiBhIG5ldyB3aW5k
b3cgdXNpbmcgd2luZG93Lm9wZW4NCisgIC8vIHRoaXMgaXMgZG9uZSB2aWEgZmlsZV9pZnJhbWVf
Y19pZjQuaHRtbCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYW5kICJh
bGxvdy1zYW1lLW9yaWdpbiINCisgIC8vIHRoZSB3aW5kb3cgaXQgYXR0ZW1wdHMgdG8gb3BlbiBj
YWxscyB3aW5kb3cub3BlbmVyLm9rKGZhbHNlLCAuLi4pIGFuZCBmaWxlX2lmcmFtZV9jX2lmNC5o
dG1sIGhhcyBhbiBvaygpDQorICAvLyBmdW5jdGlvbiB0aGF0IGNhbGxzIHdpbmRvdy5wYXJlbnQu
b2tfd3JhcHBlcg0KKyAgDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gOSkgdGVzdCB0aGF0
IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdpbmRvdyB1c2luZyB3aW5kb3cu
U2hvd01vZGFsRGlhbG9nDQorICAvLyB0aGlzIGlzIGRvbmUgdmlhIGZpbGVfaWZyYW1lX2NfaWY0
Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlwdHMiIGFuZCAiYWxsb3ct
c2FtZS1vcmlnaW4iDQorICAvLyB0aGUgd2luZG93IGl0IGF0dGVtcHRzIHRvIG9wZW4gY2FsbHMg
d2luZG93Lm9wZW5lci5vayhmYWxzZSwgLi4uKSBhbmQgZmlsZV9pZnJhbWVfY19pZjQuaHRtbCBo
YXMgYW4gb2soKQ0KKyAgLy8gZnVuY3Rpb24gdGhhdCBjYWxscyB3aW5kb3cucGFyZW50Lm9rX3dy
YXBwZXINCit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+DQorPGEgdGFy
Z2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcu
Y2dpP2lkPTM0MTYwNCI+TW96aWxsYSBCdWcgMzQxNjA0PC9hPiAtIEltcGxlbWVudCBIVE1MNSBz
YW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1Fcw0KKzxwIGlkPSJkaXNwbGF5Ij48L3A+DQorPGRp
diBpZD0iY29udGVudCI+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZf
MSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRo
PSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSIiIGlkPSJpZl8yIiBzcmM9ImZpbGVf
aWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFt
ZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LWZvcm1zIGFsbG93LXNjcmlwdHMiIGlkPSJpZl8z
IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9
IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93
LXNjcmlwdHMiIGlkPSJpZl80IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbCIg
aGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8L2Rpdj4NCis8L2JvZHk+DQorPC9o
dG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>604565</attachid>
            <date>2012-03-09 16:42:13 -0800</date>
            <delta_ts>2012-03-09 17:25:27 -0800</delta_ts>
            <desc>iframe sandbox tests - navigation</desc>
            <filename>iframe_sandbox_tests_navigation</filename>
            <type>text/plain</type>
            <size>1206</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNGRkY2U2MGEzMTUzMDJjNTU4YTQ4NzkyMDc0
ZjFkOWEwNzYwMmU4NwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBuYXZpZ2F0aW9uCgoKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4gYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01h
a2VmaWxlLmluCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgpAQCAtMjkyLDE2ICsyOTIs
MjcgQEAgX1RFU1RfRklMRVMgPSBcCiAJCWZpbGVfZnVsbHNjcmVlbi1lc2MtZXhpdC5odG1sIFwK
IAkJZmlsZV9mdWxsc2NyZWVuLWVzYy1leGl0LWlubmVyLmh0bWwgXAogCQlmaWxlX2Z1bGxzY3Jl
ZW4tcm9sbGJhY2suaHRtbCBcCiAJCXRlc3RfbGlfYXR0cmlidXRlc19yZWZsZWN0aW9uLmh0bWwg
XAogCQl0ZXN0X29sX2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9idWc2NTE5
NTYuaHRtbCBcCiAJCXRlc3RfYnVnNjk0NTAzLmh0bWwgXAogCQl0ZXN0X29iamVjdF9wbHVnaW5f
bmF2Lmh0bWwgXAorCQl0ZXN0X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb24uaHRtbCBcCisJCWZp
bGVfaWZyYW1lX3NhbmRib3hfZF9pZjEuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9p
ZjIuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjMuaHRtbCBcCisJCWZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjQuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRt
bCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjYuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjcuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFy
dC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbCBcCisJ
CWZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwgXAogCQkkKE5VTEwpCiAK
IF9CUk9XU0VSX1RFU1RfRklMRVMgPSBcCiAJCWJyb3dzZXJfYnVnNjQ5Nzc4LmpzIFwKIAkJZmls
ZV9idWc2NDk3NzguaHRtbCBcCiAJCWZpbGVfYnVnNjQ5Nzc4Lmh0bWxeaGVhZGVyc14gXAogCQkk
KE5VTEwpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>604572</attachid>
            <date>2012-03-09 17:25:27 -0800</date>
            <delta_ts>2012-03-17 19:21:39 -0700</delta_ts>
            <desc>iframe sandbox tests - navigation v2</desc>
            <filename>iframe_sandbox_tests_navigation</filename>
            <type>text/plain</type>
            <size>13661</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNGRkY2U2MGEzMTUzMDJjNTU4YTQ4NzkyMDc0
ZjFkOWEwNzYwMmU4NwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBuYXZpZ2F0aW9uCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFr
ZWZpbGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yOTIsMTYgKzI5Miwy
NyBAQCBfVEVTVF9GSUxFUyA9IFwKIAkJZmlsZV9mdWxsc2NyZWVuLWVzYy1leGl0Lmh0bWwgXAog
CQlmaWxlX2Z1bGxzY3JlZW4tZXNjLWV4aXQtaW5uZXIuaHRtbCBcCiAJCWZpbGVfZnVsbHNjcmVl
bi1yb2xsYmFjay5odG1sIFwKIAkJdGVzdF9saV9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRtbCBc
CiAJCXRlc3Rfb2xfYXR0cmlidXRlc19yZWZsZWN0aW9uLmh0bWwgXAogCQl0ZXN0X2J1ZzY1MTk1
Ni5odG1sIFwKIAkJdGVzdF9idWc2OTQ1MDMuaHRtbCBcCiAJCXRlc3Rfb2JqZWN0X3BsdWdpbl9u
YXYuaHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbi5odG1sIFwKKwkJZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
Mi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmNC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1s
IFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmNy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sIFwKKwkJ
ZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCBcCiAJCSQoTlVMTCkKIAog
X0JST1dTRVJfVEVTVF9GSUxFUyA9IFwKIAkJYnJvd3Nlcl9idWc2NDk3NzguanMgXAogCQlmaWxl
X2J1ZzY0OTc3OC5odG1sIFwKIAkJZmlsZV9idWc2NDk3NzguaHRtbF5oZWFkZXJzXiBcCiAJCSQo
TlVMTCkKIApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWYxLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxs
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
MS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4K
KyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwv
dGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90
ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRv
VGVzdCgpIHsKKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsKK30K
Kzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdp
dGggJ2FsbG93LXNjcmlwdHMnCisgIAorICA8YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X25h
dmlnYXRpb25fcGFzcy5odG1sP2lmXzEiIHRhcmdldD0iX3NlbGYiIGlkPSdhbmNob3InPgorPC9i
b2R5PgorPC9odG1sPgorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0
bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjIu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sCkBAIC0wLDAgKzEs
MjIgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rl
c3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9T
aW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCB0eXBl
PSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgc2VuZE1v
dXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsKK30KKzwvc2NyaXB0PgorPGJvZHkg
b25sb2FkPSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMn
CisgICAgCisgIDxpZnJhbWUgbmFtZT0iZm9vIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfbmF2
aWdhdGlvbl9zdGFydC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorICAK
KyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbD9pZjIi
IHRhcmdldD0nZm9vJyBpZD0nYW5jaG9yJz4KKzwvYm9keT4KKzwvaHRtbD4KKyAgIApcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
LS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfZF9pZjMuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9y
IEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQv
Y3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPGJvZHk+
CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCisgICAgCisgIDxpZnJhbWUg
c2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzQiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJv
eF9kX2lmNC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPC9ib2R5Pgor
PC9odG1sPgorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY0Lmh0bWwgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sCkBAIC0wLDAgKzEsMjAgQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3Nz
Ii8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVU
ZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBs
aWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgc2VuZE1vdXNlRXZl
bnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2Fk
PSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCisgICAg
CisgIDxhIGhyZWY9ImZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwiIHRh
cmdldD0nX3BhcmVudCcgaWQ9J2FuY2hvcic+Cis8L2JvZHk+Cis8L2h0bWw+CisgICAKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWY1Lmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBFIEhUTUw+Cis8
aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZv
ciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0
L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQi
PgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwg
J2FuY2hvcicpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKyAgSSBh
bSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicKKyAgICAK
KyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCIgdGFy
Z2V0PSdzaWJsaW5nJyBpZD0nYW5jaG9yJz4KKzwvYm9keT4KKzwvaHRtbD4KKyAgIApcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
LS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfZF9pZjYuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9y
IEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQv
Y3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+
CitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAn
YW5jaG9yJyk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPgorICBJIGFt
IHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworICAgIAorICA8YSBocmVmPSJmaWxlX2lm
cmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwiIHRhcmdldD0nX3NlbGYnIGlkPSdhbmNob3InPgorPC9i
b2R5PgorPC9odG1sPgorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0
bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjcu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNy5odG1sCkBAIC0wLDAgKzEs
MTggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rl
c3QuY3NzIi8+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQi
PgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBjb25zb2xlLmxvZygiKioqKiBmaWxlX2lmcmFtZV9z
YW5kYm94X2RfaWY3Lmh0bWwiKTsKKyAgd2luZG93LnBhcmVudC5va193cmFwcGVyKGZhbHNlLCAi
YSBzYW5kYm94ZWQgZG9jdW1lbnQgd2hlbiBuYXZpZ2F0ZWQgc2hvdWxkIHN0aWxsIE5PVCBiZSBz
YW1lLW9yaWdpbiB3aXRoIGl0cyBwYXJlbnQiKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2Fk
PSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCis8L2Jv
ZHk+Cis8L2h0bWw+CisgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlv
bl9mYWlsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2
aWdhdGlvbl9mYWlsLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBC
dWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2Nz
cyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5IG9u
TG9hZD0iZG9TdHVmZigpIj4KK0ZBSUwKKzwvYm9keT4KKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRv
U3R1ZmYoKSB7CisgICAgY29uc29sZS5sb2coIioqKiBmaWxlX2lmcmFtZV9zYW5kYm94X25hdmln
YXRpb25fZmFpbC5odG1sIik7CisgICAgd2luZG93LnRvcC5wb3N0TWVzc2FnZSh7b2s6IGZhbHNl
LCBkZXNjOiAidGhpcyBuYXZpZ2F0aW9uIHNob3VsZCBOT1QgYmUgYWxsb3dlZCBieSBhIHNhbmRi
b3hlZCBkb2N1bWVudCJ9LCAiKiIpOworICB9Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0
aW9uX3Bhc3MuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9u
dWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9u
YXZpZ2F0aW9uX3Bhc3MuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9y
IEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQv
Y3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlw
dD4KK2Z1bmN0aW9uIGRvU3R1ZmYoKSB7CisgIGNvbnNvbGUubG9nKCIqKiogZmlsZV9pZnJhbWVf
c2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbCIpOworCWNvbnNvbGUubG9nKCJ1cmwgaXMgIiAr
IGRvY3VtZW50LmxvY2F0aW9uKTsKKyAgd2luZG93LnRvcC5wb3N0TWVzc2FnZSh7b2s6IHRydWUs
IGRlc2M6ICJ0aGlzIG5hdmlnYXRpb24gc2hvdWxkIGJlIGFsbG93ZWQgYnkgYSBzYW5kYm94ZWQg
ZG9jdW1lbnQifSwgIioiKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCki
PgorUEFTUworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fc3RhcnQuaHRtbCBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1s
CkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+
CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9T
aW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gZG9TdHVm
ZigpIHsKKyAgY29uc29sZS5sb2coIioqKiogZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9u
X3N0YXJ0Lmh0bWwiKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgor
SSBhbSBqdXN0IGEgbm9ybWFsIEhUTUwgZG9jdW1lbnQsIHByb2JhYmx5IGNvbnRhaW5lZCBpbiBh
IHNhbmRib3hlZCBpZnJhbWUKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uLmh0bWwgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbi5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb24uaHRtbApAQCAtMCww
ICsxLDk2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPCEtLQoraHR0cHM6Ly9idWd6aWxs
YS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1IHNh
bmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzCistLT4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0
PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0IC0gbmF2aWdhdGlvbjwvdGl0
bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMv
U2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4K
KzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CisvKiogVGVz
dCBmb3IgQnVnIDM0MTYwNCAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3Ig
SUZSQU1FcyAqKi8KKy8qKiBOYXZpZ2F0aW9uIHRlc3RzICoqLworCisvLyBhIHBvc3RNZXNzYWdl
IGhhbmRsZXIgdGhhdCBpcyB1c2VkIGJ5IHNhbmRib3hlZCBpZnJhbWVzIHdpdGhvdXQKKy8vICdh
bGxvdy1zYW1lLW9yaWdpbicvb3RoZXIgd2luZG93cyB0byBjb21tdW5pY2F0ZSBwYXNzL2ZhaWwg
YmFjayB0byB0aGlzIG1haW4gcGFnZS4KKy8vIGl0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGgg
YW4gb2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNjOiAKKy8vIDxkZXNjcmlwdGlvbiBv
ZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0byBvaygpCit3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcigibWVzc2FnZSIsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7ICAKKyAgICAgIAor
dmFyIHRlc3RQYXNzZXNSZWNlaXZlZCA9IDA7CisgICAgICAKK2Z1bmN0aW9uIHJlY2VpdmVNZXNz
YWdlKGV2ZW50KSAgCit7IAorICBva193cmFwcGVyKGV2ZW50LmRhdGEub2ssIGV2ZW50LmRhdGEu
ZGVzYyk7Cit9ICAKKwordmFyIGNvbXBsZXRlZFRlc3RzID0gMDsKK3ZhciBwYXNzZWRUZXN0cyA9
IDA7CisKK2Z1bmN0aW9uIG9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKSB7CisgIG9rKHJlc3VsdCwg
ZGVzYyk7CisKKyAgY29tcGxldGVkVGVzdHMrKzsKKworICBpZiAocmVzdWx0KSB7CisgICAgcGFz
c2VkVGVzdHMrKzsKKyAgfQorICAKKyAgLy8gUkVWSUVXIDogaWYgb25lIG9mIHRoZXNlIHRlc3Rz
IGZhaWxzIGFuZCB0aGlzIGlzbid0IGNhbGxlZAorICAvLyB0aGlzIG1lYW5zIHRoaXMgdGVzdCB3
aWxsIGhhbmcgdW50aWwgdGhlIHRpbWUgb3V0IGhhcHBlbnMgOigKKyAgLy8gYWR2aWNlIG9uIGJl
dHRlciB3YXlzIHRvIHN5bmNocm9uaXplIHRoaW5ncyBhcHByZWNpYXRlZCAhCisgIC8vIEFsc28s
IG1hbnkgb2YgdGhlIHRlc3RzIGZvciBuYXZpZ2F0aW9uIGZhaWwgaWYgYmFkIChjYWxsIG9rKGZh
bHNlLCAuLi4pCisgIC8vIHNvIGhvdyBkbyB3ZSB0ZWxsIGlmIHRoZXNlIGhhdmUgY29tcGxldGVk
IC0gaXMgdXNpbmcgb25Mb2FkIGVub3VnaCA/CisgIGlmIChjb21wbGV0ZWRUZXN0cyA9PSAyKSB7
CisgICAgb2socGFzc2VkVGVzdHMgPT0gMiwgIlRoZXJlIGFyZSAyIG5hdmlnYXRpb24gdGVzdHMg
dGhhdCBzaG91bGQgcGFzcyIpOworICAKKyAgICBTaW1wbGVUZXN0LmZpbmlzaCgpOworICB9Cit9
CisKK2Z1bmN0aW9uIGRvVGVzdCgpIHsgCisgIFNpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0Rmlu
aXNoKCk7CisgIC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDEpIGEgc2FuZGJveGVkIGlmcmFtZSBp
cyBhbGxvd2VkIHRvIG5hdmlnYXRlIGl0c2VsZgorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9z
YW5kYm94X2RfaWYxLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJyBhbmQgbmF2aWdhdGVz
IHRvCisgIC8vIGZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9wYXNzLmh0bWwpCisgCisg
IC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDIpIGEgc2FuZGJveGVkIGlmcmFtZSBpcyBhbGxvd2Vk
IHRvIG5hdmlnYXRlIGl0cyBjaGlsZHJlbiwgZXZlbiBpZiB0aGV5IGFyZSBzYW5kYm94ZWQKKyAg
Ly8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIHdoaWNoIGhhcyAnYWxs
b3ctc2NyaXB0cycsIGl0IG5hdmlnYXRlcyBhIGNoaWxkCisgIC8vIGlmcmFtZSBjb250YWluaW5n
IGZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1sIHRvIGZpbGVfaWZyYW1l
X3NhbmRib3hfbmF2aWdhdGlvbl9wYXNzLmh0bWwpCisgCisgIC8vIGZhaWxzIGlmIGJhZAorICAv
LyAzKSBhIHNhbmRib3hlZCBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gbmF2aWdhdGUgaXRzIGFu
Y2VzdG9yIAorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY0Lmh0bWwgY29u
dGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYzLmh0bWwsCisgIC8vIGl0IGF0
dGVtcHRzIHRvIG5hdmlnYXRlIGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjMuaHRtbCB0byBmaWxl
X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fZmFpbC5odG1sKQorCisgIC8vIGZhaWxzIGlmIGJh
ZAorICAvLyA0KSBhIHNhbmRib3hlZCBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gbmF2aWdhdGUg
aXRzIHNpYmxpbmcKKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1s
IHdoaWNoIGhhcyAnYWxsb3cgc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicKKyAgLy8gYW5kIGF0
dGVtcHRzIHRvIG5hdmlnYXRlIGZpbGVfaWZyYW1lX25hdmlnYXRpb25fc3RhcnQuaHRtbCBjb250
YWluZWQgaW4gaWZfc2libGluZyBvbiB0aGlzCisgIC8vIHBhZ2UgdG8gZmlsZV9pZnJhbWVfc2Fu
ZGJveF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCkKKyAKKyAgLy8gZmFpbHMgaWYgYmFkCisgIC8vIDUp
IHdoZW4gYSBsaW5rIGlzIGNsaWNrZWQgaW4gYSBzYW5kYm94ZWQgaWZyYW1lLCB0aGUgZG9jdW1l
bnQgbmF2aWdhdGVkIHRvIGlzIHNhbmRib3hlZAorICAvLyB0aGUgc2FtZSBhcyB0aGUgb3JpZ2lu
YWwgZG9jdW1lbnQgYW5kIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIHBhcmVudCBkb2N1bWVudAor
ICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwgd2hpY2ggc2ltdWxh
dGVzIGEgbGluayBjbGljayBhbmQgbmF2aWdhdGVzCisgIC8vIHRvIGZpbGVfaWZyYW1lX3NhbmRi
b3hfZF9pZjcuaHRtbCB3aGljaCBhdHRlbXB0cyB0byBjYWxsIGJhY2sgaW50byBpdHMgcGFyZW50
KQorfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKzxhIHRhcmdldD0iX2Js
YW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBh
dHRyaWJ1dGUgZm9yIElGUkFNRXMKKzxwIGlkPSJkaXNwbGF5Ij48L3A+Cis8ZGl2IGlkPSJjb250
ZW50Ij4KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzEiIHNyYz0iZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZy
YW1lPgorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMiIgc3JjPSJmaWxl
X2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJh
bWU+Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIGlkPSJpZl8zIiBzcmM9ImZpbGVf
aWZyYW1lX3NhbmRib3hfZF9pZjMuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFt
ZT4KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3dfc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIgaWQ9
ImlmXzUiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1sIiBoZWlnaHQ9IjEwIiB3
aWR0aD0iMTAiPjwvaWZyYW1lPgorPGlmcmFtZSBpZD0iaWZfc2libGluZyIgc3JjPSJmaWxlX2lm
cmFtZV9zYW5kYm94X25hdmlnYXRpb25fc3RhcnQuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEw
Ij48L2lmcmFtZT4gCis8aWZyYW1lIHNhbmRib3g9ImFsbG93X3NjcmlwdHMiIGlkPSJpZl82IiBz
cmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjYuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEw
Ij48L2lmcmFtZT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>605220</attachid>
            <date>2012-03-12 16:50:26 -0700</date>
            <delta_ts>2012-05-16 14:00:53 -0700</delta_ts>
            <desc>iframe sandbox tests - plugins</desc>
            <filename>iframe_sandbox_tests_plugins</filename>
            <type>text/plain</type>
            <size>5773</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNGRkY2U2MGEzMTUzMDJjNTU4YTQ4NzkyMDc0
ZjFkOWEwNzYwMmU4NwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBwbHVnaW5zCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yOTIsMTYgKzI5MiwyMCBA
QCBfVEVTVF9GSUxFUyA9IFwKIAkJZmlsZV9mdWxsc2NyZWVuLWVzYy1leGl0Lmh0bWwgXAogCQlm
aWxlX2Z1bGxzY3JlZW4tZXNjLWV4aXQtaW5uZXIuaHRtbCBcCiAJCWZpbGVfZnVsbHNjcmVlbi1y
b2xsYmFjay5odG1sIFwKIAkJdGVzdF9saV9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRtbCBcCiAJ
CXRlc3Rfb2xfYXR0cmlidXRlc19yZWZsZWN0aW9uLmh0bWwgXAogCQl0ZXN0X2J1ZzY1MTk1Ni5o
dG1sIFwKIAkJdGVzdF9idWc2OTQ1MDMuaHRtbCBcCiAJCXRlc3Rfb2JqZWN0X3BsdWdpbl9uYXYu
aHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRib3hfcGx1Z2lucy5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF9mX2lmMS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5odG1s
IFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5odG1sXmhlYWRlcnNeIFwKIAkJJChOVUxM
KQogCiBfQlJPV1NFUl9URVNUX0ZJTEVTID0gXAogCQlicm93c2VyX2J1ZzY0OTc3OC5qcyBcCiAJ
CWZpbGVfYnVnNjQ5Nzc4Lmh0bWwgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sXmhlYWRlcnNeIFwK
IAkJJChOVUxMKQogCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfZl9pZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9mX2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2ZfaWYxLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQor
PGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVn
IDM0MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3Nz
IiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8Ym9keT4N
CitJIGhhdmUgMiBwbHVnaW4gaW5zdGFuY2VzIGVtYmVkZGVkIGluIG1lLg0KKzxlbWJlZCBpZD0i
cGx1Z2luMSIgdHlwZT0iYXBwbGljYXRpb24veC10ZXN0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIw
MCI+PC9lbWJlZD4NCis8b2JqZWN0IHR5cGU9ImFwcGxpY2F0aW9uL3gtdGVzdCIgd2lkdGg9IjIw
MCIgaGVpZ2h0PSIyMDAiPjwvb2JqZWN0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0
IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0
bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5odG1sCkBAIC0wLDAgKzEs
MTEgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNl
dD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRl
c3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPGJvZHk+DQorICBJIGFtIGEgZG9jdW1lbnQgdGhh
dCBzaG91bGQgYmUgaGFuZGxlZCBieSBhIHBsdWdpbiBsb2FkLg0KKzwvYm9keT4NCis8L2h0bWw+
DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2ZfaWYyLmh0bWxeaGVhZGVyc14gYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbF5oZWFkZXJzXgpuZXcgZmlsZSBtb2RlIDEwMDY0NAot
LS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9mX2lmMi5odG1sXmhlYWRlcnNeCkBAIC0wLDAgKzEsMSBAQAorQ29udGVudC1UeXBl
OiBhcHBsaWNhdGlvbi94LXRlc3QNCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfcGx1Z2lucy5odG1sIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X3BsdWdpbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9p
ZnJhbWVfc2FuZGJveF9wbHVnaW5zLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIEhU
TUw+DQorPGh0bWw+DQorPCEtLQ0KK2h0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0MTYwNA0KK0ltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3Ig
SUZSQU1Fcw0KKy0tPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRp
dGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQgLSBwbHVnaW5zPC90aXRsZT4NCisgIDxzY3JpcHQgdHlw
ZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVU
ZXN0LmpzIj48L3NjcmlwdD4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9j
c3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxzY3Jp
cHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+DQorLyoqIFRlc3QgZm9yIEJ1ZyAzNDE2
MDQgLSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMgKiovDQor
LyoqIFBsdWdpbiB0ZXN0cyAqKi8NCisNCitmdW5jdGlvbiBkb1Rlc3QoKSB7IA0KKyAgU2ltcGxl
VGVzdC53YWl0Rm9yRXhwbGljaXRGaW5pc2goKTsNCisJDQorCS8vIDEpIHRlc3QgdGhhdCBhIHBs
dWdpbiBjYW4ndCBiZSBsb2FkZWQgd2l0aCA8ZW1iZWQ+IGluc2lkZSBhIHNhbmRib3hlZCA8aWZy
YW1lPg0KKwkvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwgbG9hZGVk
IGluIGlmMSBiZWxvdykNCisJLy8gMikgdGVzdCB0aGF0IGEgcGx1Z2luIGNhbid0IGJlIGxvYWRl
ZCB3aXRoIDxvYmplY3Q+IGluc2lkZSBhIHNhbmRib3hlZCA8aWZyYW1lPg0KKwkvLyAoZG9uZSBi
eSBmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwgbG9hZGVkIGluIGlmMSBiZWxvdykNCisJ
Ly8gMykgdGVzdCB0aGF0IHBsdWdpbiBjYW4ndCBiZSBsb2FkZWQgYnkgYSBzYW5kYm94ZWQgPGlm
cmFtZT4gd2l0aCBzcmMgcG9pbnRpbmcgdG8NCisJLy8gYSBkb2N1bWVudCB0aGF0IGlzIGhhbmRs
ZWQgYnkgYSBwbHVnaW4gKGRvbmUgYnkgaWZfMiBiZWxvdykNCisJDQorCS8vIHRoZXNlIGFyZSBh
bGwgaGFuZGxlZCBieSBjaGVja2luZyBob3cgbWFueSBpbnN0YW5jZXMgb2YgdGhlIHRlc3QgcGx1
Z2luIGFyZSBsb2FkZWQNCisJLy8gd2hlbiB0aGlzIHNjcmlwdCBydW5zIGFzIHRoZSBvbmxvYWQg
aGFuZGxlciAtIHRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBpbnN0YW5jZSwNCisJLy8gdGhlIG9u
ZSBsb2FkZWQgaW4gdGhpcyBwYWdlIGl0c2VsZiANCisJdmFyIHAgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgncGx1Z2luMScpOw0KKyAgdmFyIGlmXzEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnaWZfMScpOw0KKwlwLnN0YXJ0V2F0Y2hpbmdJbnN0YW5jZUNvdW50KCk7DQorDQorCWlmXzEu
c3JjID0gJ2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjEuaHRtbCc7DQorfQ0KKw0KK2Z1bmN0aW9u
IGlmXzFfbG9hZCgpIHsgDQorICB2YXIgaWZfMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdp
Zl8xJyk7DQorDQorCWlmIChpZl8xLnNyYyA9PSAiYWJvdXQ6YmxhbmsiKQ0KKwkJcmV0dXJuOw0K
Kw0KKwkvLyBuZWVkIHRvIHdhaXQgZm9yIHBsdWdpbiB0byBsb2FkLCBpZiB0aGUgdGVzdCBmYWls
cy4uLg0KKyAgU2ltcGxlVGVzdC5leGVjdXRlU29vbihpZl8xX2NvbnRpbnVlKTsNCit9DQorDQor
ZnVuY3Rpb24gaWZfMV9jb250aW51ZSgpIHsNCisJLy8gaW5zdGFuY2UgY291bnQgc2hvdWxkIGJl
IDAgKHRlc3RzICMxIGFuZCAjMiBhYm92ZSkgDQorCXZhciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3BsdWdpbjEnKTsNCisJaXMocC5nZXRJbnN0YW5jZUNvdW50KCksIDAsICJwbHVnaW5z
IHNob3VsZCBub3QgYmUgbG9hZGVkIHZpYSA8b2JqZWN0PiBvciA8ZW1iZWQ+IGJ5IGEgc2FuZGJv
eGVkIGlmcmFtZSIpOw0KKw0KKyAgdmFyIGlmXzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
aWZfMicpOw0KKwlpZl8yLnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWwnOw0K
KwkNCisJU2ltcGxlVGVzdC5leGVjdXRlU29vbihpZl8yX2NvbnRpbnVlKTsNCit9DQorDQorZnVu
Y3Rpb24gaWZfMl9jb250aW51ZSgpIHsNCisJLy8gaW5zdGFuY2UgY291bnQgc2hvdWxkIGJlIDAg
KHRlc3QgIzMgYWJvdmUpIA0KKwl2YXIgcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbHVn
aW4xJyk7DQorCQ0KKwlpcyhwLmdldEluc3RhbmNlQ291bnQoKSwgMCwgInBsdWdpbnMgc2hvdWxk
IG5vdCBiZSBsb2FkZWQgdmlhIGEgZG9jdW1lbnQgb2YgYSB0eXBlIHRoYXQgcmVxdWlyZXMgYSBw
bHVnaW4gZW1iZWRkZWQgaW4gYSBzYW5kYm94ZWQgaWZyYW1lIik7DQorCQ0KKwlwLnN0b3BXYXRj
aGluZ0luc3RhbmNlQ291bnQoKTsNCisJDQorICBTaW1wbGVUZXN0LmV4ZWN1dGVTb29uKGZpbmlz
aF90ZXN0KTsNCit9DQorDQorZnVuY3Rpb24gZmluaXNoX3Rlc3QoKSB7DQorCWNvbnNvbGUubG9n
KCJjYWxsaW5nIGZpbmlzaC4uLiIpOw0KKwlTaW1wbGVUZXN0LmZpbmlzaCgpOw0KK30NCis8L3Nj
cmlwdD4NCis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4NCis8YSB0YXJnZXQ9Il9ibGFuayIgaHJl
Zj0iaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0Ij5N
b3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRl
IGZvciBJRlJBTUVzDQorPHAgaWQ9ImRpc3BsYXkiPjwvcD4NCis8ZGl2IGlkPSJjb250ZW50Ij4N
Cis8ZW1iZWQgaWQ9InBsdWdpbjEiIHR5cGU9ImFwcGxpY2F0aW9uL3gtdGVzdCIgd2lkdGg9IjIw
MCIgaGVpZ2h0PSIyMDAiPjwvZW1iZWQ+DQorPGlmcmFtZSBpZD0iaWZfMSIgc2FuZGJveD0nJyBv
bkxvYWQ9J2lmXzFfbG9hZCgpJyBzcmM9ImFib3V0OmJsYW5rIiBoZWlnaHQ9IjQwMCIgd2lkdGg9
IjQwMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBpZD0iaWZfMiIgc2FuZGJveD0nJyBzcmM9ImFib3V0
OmJsYW5rIiBoZWlnaHQ9IjQwMCIgd2lkdGg9IjQwMCI+PC9pZnJhbWU+DQorPC9kaXY+DQorPC9i
b2R5Pg0KKzwvaHRtbD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>606238</attachid>
            <date>2012-03-15 08:56:24 -0700</date>
            <delta_ts>2012-03-17 19:28:36 -0700</delta_ts>
            <desc>WIP - iframe sandbox v6</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>46620</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZDBkMTNmMDliZTQ0NjNlNGE4Y2NhZWJkODk5
MTU2ZGY3YWJiM2VjMQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtODQwLDE2ICs4NDAsMjcgQEAgcHVibGljOgogICAvKioKICAg
ICogR2V0IHRoZSBsb2NhbGl6ZWQgc3RyaW5nIG5hbWVkIHxhS2V5fCBpbiBwcm9wZXJ0aWVzIGZp
bGUgfGFGaWxlfC4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBHZXRMb2NhbGl6ZWRTdHJpbmco
UHJvcGVydGllc0ZpbGUgYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogYUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1hQSURMU3RyaW5nJiBhUmVzdWx0KTsKIAogICAvKioKKyAgICogQSBoZWxwZXIgZnVuY3Rp
b24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAg
ICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1
c2VkIGludGVybmFsbHkuCisgICAqCisgICAqIEBwYXJhbSBhQXR0cmlidXRlIAl0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisgICAqIEByZXR1cm4gCQkJdGhlIHNldCBvZiBmbGFn
cworICAgKi8KKyAgc3RhdGljIFBSVWludDMyIFBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Mo
Y29uc3QgbnNBU3RyaW5nJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNhbmRib3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBw
YXJhbWV0ZXJzIGdpdmVuKSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAg
ICogcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5z
cmVzdWx0IEZvcm1hdExvY2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQ
YXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIg
YVBhcmFtc0xlbmd0aCwKQEAgLTE5NzYsMzUgKzE5ODcsMzcgQEAgcHVibGljOgogICAgKiBmcm9t
IHRoZSBkb2N1bWVudCBpdCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVS
SUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAK
ICAgLyoqCiAgICAqIFNldCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUg
Z2l2ZW4gY2hhbm5lbCwgaWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2Yg
YUNoYW5uZWwuICBhUHJpbmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJv
dXRCbGFuayBpcyB0cnVlLCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmlu
Y2lwYWwgc2V0IHVwIG9uIGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBp
dC4gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9u
IHRoZSBjaGFubmVsLCBldmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAg
ICogZnJvbSB0aGUgY2hhbm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRo
ZSBwcmluY2lwYWwgd2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwu
CiAgICAqLwogICBzdGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFM
b2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFu
bmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBh
VVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0
QmxhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFi
b3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3du
ZXIgPSBmYWxzZSk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBh
QmluYXJ5RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNl
NjRTdHJpbmcpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFz
Y2lpU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRh
KTsKIAogICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IHBhc3Nl
ZCBpbiBwYXJhbWV0ZXIgaGFzIHRoZSBhdXRvY29tcGxldGUKLSAgICogZnVuY3Rpb25uYWxpdHkg
ZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9ybSBvd25lci4KKyAgICog
ZnVuY3Rpb25hbGl0eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3Jt
IG93bmVyLgogICAgKiBOT1RFOiB0aGUgY2FsbGVyIGhhcyB0byBtYWtlIHN1cmUgYXV0b2NvbXBs
ZXRlIG1ha2VzIHNlbnNlIGZvciB0aGUKICAgICogZWxlbWVudCdzIHR5cGUuCiAgICAqCiAgICAq
IEBwYXJhbSBhSW5wdXQgdGhlIGlucHV0IGVsZW1lbnQgdG8gY2hlY2suIE5PVEU6IGFJbnB1dCBj
YW4ndCBiZSBudWxsLgogICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgaGFz
IGF1dG9jb21wbGV0ZSBlbmFibGVkLgogICAgKi8KICAgc3RhdGljIGJvb2wgSXNBdXRvY29tcGxl
dGVFbmFibGVkKG5zSURPTUhUTUxJbnB1dEVsZW1lbnQqIGFJbnB1dCk7CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNJRG9jdW1lbnQuaAotLS0gYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysr
IGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCkBAIC0xMTksMTggKzExOSwxOCBA
QCBjbGFzcyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xhc3MgTGluazsKIGNsYXNzIEVs
ZW1lbnQ7CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNwYWNlIG1vemlsbGEKIAogI2Rl
ZmluZSBOU19JRE9DVU1FTlRfSUlEIFwKLXsgMHgyODNlYzI3ZCwgMHg1YjIzLCAweDQ5YjIsIFwN
Ci0gIHsgMHg5NCwgMHhkOSwgMHg5LCAweGI1LCAweGRiLCAweDQ1LCAweDMwLCAweDczIH0gfQ0K
K3sgMHg1N2ZlNDRhZSwgMHg2NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAw
eGE3LCAweDQzLCAweDI4LCAweGJlLCAweDg2IH0gfQogCiAKIC8vIEZsYWcgZm9yIEFkZFN0eWxl
U2hlZXQoKS4KICNkZWZpbmUgTlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFMT0cgICAgICAgICAgICAg
ICAgKDEgPDwgMCkKIAogLy8gRW51bSBmb3IgcmVxdWVzdGluZyBhIHBhcnRpY3VsYXIgdHlwZSBv
ZiBkb2N1bWVudCB3aGVuIGNyZWF0aW5nIGEgZG9jCiBlbnVtIERvY3VtZW50Rmxhdm9yIHsKICAg
RG9jdW1lbnRGbGF2b3JMZWdhY3lHdWVzcywgLy8gY29tcGF0IHdpdGggb2xkIGNvZGUgdW50aWwg
bWFkZSBIVE1MNS1jb21wbGlhbnQKQEAgLTQ1NSwxNyArNDU1LDI2IEBAIHB1YmxpYzoKICAgICog
Y2FsbGVycyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhY3Rpb24gYXMgbmVlZGVkIGlmIHRoZXkgd2Fu
dCB0aGlzCiAgICAqIGNoYW5nZSB0byBhY3R1YWxseSBjaGFuZ2UgYW55dGhpbmcgaW1tZWRpYXRl
bHkuCiAgICAqIEBzZWUgbnNCaWRpVXRpbHMuaAogICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9u
cyhQUlVpbnQzMiBhQmlkaU9wdGlvbnMpCiAgIHsKICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9w
dGlvbnM7CiAgIH0KLSAgCisKKyAgLyoqCisgICAqIEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3Ig
dGhpcyBkb2N1bWVudC4KKyAgICogQHNlZSBuc0lEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJs
ZSBmbGFncworICAgKi8KKyAgUFJVaW50MzIgU2FuZGJveEZsYWdzKCkgY29uc3QKKyAgeworICAg
IHJldHVybiBtU2FuZGJveEZsYWdzOworICB9CisKICAgLyoqCiAgICAqIEFjY2VzcyBIVFRQIGhl
YWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAgKiBzb3VyY2Vz
LCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCiAgIHZpcnR1YWwgdm9pZCBHZXRIZWFkZXJE
YXRhKG5zSUF0b20qIGFIZWFkZXJGaWVsZCwgbnNBU3RyaW5nJiBhRGF0YSkgY29uc3QgPSAwOwog
ICB2aXJ0dWFsIHZvaWQgU2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhaGVhZGVyRmllbGQsIGNvbnN0
IG5zQVN0cmluZyYgYURhdGEpID0gMDsKIAogICAvKioKQEAgLTE4MDUsMTYgKzE4MTQsMjEgQEAg
cHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1bWVudCBpcyB0cnVlLCBtT3JpZ2luYWxE
b2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAgIC8vIGRvY3VtZW50LgogICBuc0NPTVB0
cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7CiAKICAgLy8gVGhlIGJpZGkgb3B0aW9u
cyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBiaXRmaWVsZCBtZWFucyBpcwogICAvLyBk
ZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50MzIgbUJpZGlPcHRpb25zOwogCisgIC8v
IFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVudC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFs
dWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRoZQorICAvLyBhc3NvY2lhdGVkIElGUkFN
RSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3RlbnQuIFRoZXNlIGFyZSBzZXQg
YXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRhYmxlIC0gc2VlIG5zSURvY1NoZWxsLmlk
bCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICBQUlVpbnQzMiBtU2FuZGJveEZsYWdzOworCiAg
IG5zQ1N0cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnNDU3RyaW5nIG1Db250
ZW50VHlwZTsKIHByb3RlY3RlZDoKIAogICAvLyBUaGUgZG9jdW1lbnQncyBzZWN1cml0eSBpbmZv
CiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VjdXJpdHlJbmZvOwogCmRpZmYgLS1naXQgYS9j
b250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnND
b250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3Bw
CisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC05MTYsMTYgKzkx
Niw2MiBAQCBuc0NvbnRlbnRVdGlsczo6R2V0UGFyc2VyU2VydmljZSgpCiAgICAgbnNyZXN1bHQg
cnYgPSBDYWxsR2V0U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwgJnNQYXJzZXJTZXJ2aWNlKTsK
ICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNlclNlcnZpY2UgPSBuc251bGw7
CiAgICAgfQogICB9CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNlOwogfQorLyoqCisgKiBBIGhl
bHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmlidXRlIChvZiBhbiA8aWZy
YW1lPiBvcgorICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBv
ZiBmbGFncyB1c2VkIGludGVybmFsbHkuCisgKgorICogQHBhcmFtIGFBdHRyaWJ1dGUgICAgdGhl
IHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJldHVybiAgICAgICAgICAgICAg
dGhlIHNldCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRpbHM6OlBhcnNlU2Fu
ZGJveEF0dHJpYnV0ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBzYW5kYm94QXR0clZhbHVlKQor
eworICAvLyBJZiB0aGVyZSdzIGEgc2FuZGJveCBhdHRyaWJ1dGUgYXQgYWxsIChhbmQgdGhlcmUg
aXMgaWYgdGhpcyBpcyBiZWluZworICAvLyBjYWxsZWQpLCBzdGFydCBvZmYgYnkgc2V0dGluZyBh
bGwgdGhlIHJlc3RyaWN0aW9uIGZsYWdzLgorICBQUlVpbnQzMiBvdXQgPSBuc0lEb2NTaGVsbDo6
U0FOREJPWEVEX05BVklHQVRJT04gfAorICAgIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfVE9QTEVW
RUxfTkFWSUdBVElPTiB8CisgICAgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9QTFVHSU5TIHwgbnNJ
RG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4gfAorICAgIG5zSURvY1NoZWxsOjpTQU5EQk9YRURf
Rk9STVMgfCBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFMgfAorICAgIG5zSURvY1NoZWxs
OjpTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTOworCisgIGlmICghc2FuZGJveEF0dHJWYWx1
ZS5Jc0VtcHR5KCkpIHsKKyAgICAvLyBUaGUgc2VwYXJhdG9yIG9wdGlvbmFsIGZsYWcgaXMgdXNl
ZCBiZWNhdXNlIHRoZSBIVE1MNSBzcGVjIHNheXMgYW55CisgICAgLy8gd2hpdGVzcGFjZSBpcyBv
ayBhcyBhIHNlcGFyYXRvciwgd2hpY2ggaXMgd2hhdCB0aGlzIGRvZXMuCisgICAgSFRNTFNwbGl0
T25TcGFjZXNUb2tlbml6ZXIgdG9rZW5pemVyKHNhbmRib3hBdHRyVmFsdWUsICcgJywKKyAgICAg
IG5zQ2hhclNlcGFyYXRlZFRva2VuaXplclRlbXBsYXRlPG5zQ29udGVudFV0aWxzOjpJc0hUTUxX
aGl0ZXNwYWNlPjo6U0VQQVJBVE9SX09QVElPTkFMKTsKKworICAgIHdoaWxlICh0b2tlbml6ZXIu
aGFzTW9yZVRva2VucygpKSB7CisgICAgICBuc0RlcGVuZGVudFN1YnN0cmluZyB0b2tlbiA9IHRv
a2VuaXplci5uZXh0VG9rZW4oKTsKKworICAgICAgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xp
dGVyYWwoImFsbG93LXNjcmlwdHMiKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpT
QU5EQk9YRURfU0NSSVBUUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxz
TGl0ZXJhbCgiYWxsb3ctc2FtZS1vcmlnaW4iKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1No
ZWxsOjpTQU5EQk9YRURfT1JJR0lOOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VF
cXVhbHNMaXRlcmFsKCJhbGxvdy1mb3JtcyIpKSB7CisgICAgICAgIG91dCAmPSB+bnNJRG9jU2hl
bGw6OlNBTkRCT1hFRF9GT1JNUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1
YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7CisgICAgICAgIC8vIGFsbG93LXNjcmlwdHMg
cmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRTIGFuZAorICAgICAgICAvLyBTQU5EQk9YRURf
QVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9Y
RURfU0NSSVBUUzsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX0FVVE9N
QVRJQ19GRUFUVVJFUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0
ZXJhbCgiYWxsb3ctdG9wLW5hdmlnYXRpb24iKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1No
ZWxsOjpTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTjsKKyAgICAgIH0KKyAgICB9CisgIH0K
KworICByZXR1cm4gb3V0OworfQogCiAjaWZkZWYgTU9aX1hURgogbnNJWFRGU2VydmljZSoKIG5z
Q29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFzWFRGU2VydmljZSkgewog
ICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZzWFRGU2Vy
dmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKQEAgLTYzNzgsMTcgKzY0MjQsMTggQEAg
bnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJpdHlDb250ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8gc3RhdGljCiBib29sCiBuc0NvbnRlbnRV
dGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFGb3JjZU93bmVyKQogewog
ICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBjaGFubmVsLCBidXQgb25seSBmb3IgY2hh
bm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBjb250ZXh0
LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25nIHRoYXQgdGhlIG93bmVyIGlzIGlnbm9y
ZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1cHBsaWVkKSB1bmxlc3MgdGhlIFVSSSBp
cyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6YmxhbmsuCiAgIC8vIFhYWDogSWYgdGhpcyBp
cyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJzIGZvciB3aGF0IG93bmVycwpAQCAtNjM5
NiwyMyArNjQ0MywyNyBAQCBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJp
CiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVsbDo6TG9hZFVSSSB3aGVyZSB3ZSBmYWxs
IGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRoZSBvd25lciBpZiBjYWxsZWQgZnJvbSBj
aHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAgdmVyeSB3cm9uZyBpZiB0aGlzIGNvZGUg
Y2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhhdAogICAvLyAgICAgIGNhbid0IHByb3Zp
ZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAgIC8vCiAgIC8vICAgICAgKEN1cnJlbnRs
eSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4gdGhleSBhcmUgY3JlYXRlZCEKICAgLy8g
ICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3VsZCBiZSBiYWQhKQogICAvLworICAvLyBJ
ZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIgd2lsbCBiZSBzZXQsIGV2ZW4gZm9yIGEg
Y2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0cyBvd24gc2VjdXJpdHkgY29udGV4dC4g
VGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1FCisgIC8vIHNhbmRib3ggYXR0cmlidXRl
LCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFuZCBpdHMgZG9jdW1lbnQpIHRvCisgIC8v
IGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFsLgogICBib29sIGluaGVyaXQ7CiAgIC8v
IFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dCB0byByZXR1cm4gc3VjY2VzcyBm
b3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24ndCBjYWxsIE5TX0lzQWJvdXRCbGFu
aygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBjb25kaXRpb24gbmVlZHMgdG8gbWF0
Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQgd2hlcmUKICAgLy8gd2UncmUg
Y2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRoZSBvd25lci4KLSAgaWYgKE5TX1NV
Q0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYmCi0g
ICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0Qmxhbmso
YVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChOU19TVUNDRUVERUQoVVJJSW5oZXJp
dHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgorICAgICAgKGluaGVyaXQgfHwg
KGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpKSkgewogICAg
IGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7
CiAgIH0KIAogICAvLwogICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8g
SWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0
IG1heSBuZWVkCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIv
Y29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25z
RG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTIz
OTgsMTYgKzIzOTgsMjUgQEAgbnNEb2N1bWVudDo6U3RhcnREb2N1bWVudExvYWQoY29uc3QgY2hh
cgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgnOycsIHNlbWljb2xvbiwgZW5kKTsKICAgICBTZXRD
b250ZW50VHlwZUludGVybmFsKFN1YnN0cmluZyhzdGFydCwgc2VtaWNvbG9uKSk7CiAgIH0KIAog
ICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhhQ2hhbm5lbCk7CiAKICAgbUNoYW5uZWwgPSBhQ2hh
bm5lbDsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRvY3No
ZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdzCisgIC8vIHRvIHRoZSBkb2N1bWVudC4gVGhlc2Ug
YXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgaGVyZS4KKyAgbnNDT01QdHI8bnNJRG9jU2hl
bGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNvbnRhaW5lcik7CisKKyAgaWYgKGRv
Y1NoZWxsKSB7CisgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2FuZGJveEZsYWdzKCZt
U2FuZGJveEZsYWdzKTsKKyAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworICB9CisKICAg
bnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAK
ICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNEb2N1bWVudDo6SW5pdENTUCgpCmRp
ZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9i
YXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVM
b2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTEx
NSwxNiArMTE1LDE4IEBACiAjaW5jbHVkZSAibW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNs
dWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIK
ICNpbmNsdWRlICJtb3ppbGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlv
dXQvUmVuZGVyRnJhbWVQYXJlbnQuaCIKIAogI2luY2x1ZGUgImpzYXBpLmgiCiAKKyNpbmNsdWRl
ICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCisKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXll
cnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5b3V0OwogdHlwZWRlZiBGcmFtZU1ldHJp
Y3M6OlZpZXdJRCBWaWV3SUQ7CiAKIGNsYXNzIG5zQXN5bmNEb2NTaGVsbERlc3Ryb3llciA6IHB1
YmxpYyBuc1J1bm5hYmxlCiB7CkBAIC00NzEsMTYgKzQ3Myw2NCBAQCBuc0ZyYW1lTG9hZGVyOjpS
ZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3QgdG8gYmUgc2FmZSwgcmVjaGVjayB1
cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQpOwogICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsTG9hZEluZm8+IGxvYWRJbmZvOwog
ICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9BZGRSZWZzKGxvYWRJbmZvKSk7CiAg
IE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9GQUlMVVJFKTsKIAorICAvLyBJcyB0
aGlzIGFuIDxpZnJhbWU+IHdpdGggYSBzYW5kYm94IGF0dHJpYnV0ZSBvciBhIHBhcmVudCB3aGlj
aCBpcworICAvLyBzYW5kYm94ZWQgPworICBuc0hUTUxJRnJhbWVFbGVtZW50ICogaWZyYW1lID0K
KyAgICBuc0hUTUxJRnJhbWVFbGVtZW50OjpGcm9tQ29udGVudChtT3duZXJDb250ZW50KTsKKwor
ICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworCisgIGlmIChpZnJhbWUpIHsKKyAgICBzYW5k
Ym94RmxhZ3MgPSBpZnJhbWUtPkdldFNhbmRib3hGbGFncygpOworCisgICAgUFJVaW50MzIgcGFy
ZW50U2FuZGJveEZsYWdzID0gMDsKKworICAgIC8vIEdldCB0aGUgcGFyZW50J3Mgc2FuZGJveCBm
bGFncywgdGhleSdyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZQorICAgIC8vIGZyYW1lIGJl
aW5nIGxvYWRlZCBuZWVkcyB0byBiZSBzYW5kYm94ZWQuCisgICAgbnNDT01QdHI8bnNJRG9jU2hl
bGxUcmVlSXRlbT4gcGFyZW50RG9jU2hlbGxJdGVtOworICAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
VHJlZUl0ZW0+IGN1ckRvY1NoZWxsSXRlbSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG1Eb2NTaGVsbCk7
CisKKyAgICBpZiAoTlNfU1VDQ0VFREVEKGN1ckRvY1NoZWxsSXRlbS0+R2V0UGFyZW50KGdldHRl
cl9BZGRSZWZzKHBhcmVudERvY1NoZWxsSXRlbSkpKSkgeworICAgICAgbnNDT01QdHI8bnNJRG9j
dW1lbnQ+IHBhcmVudERvYyA9IGRvX0dldEludGVyZmFjZShwYXJlbnREb2NTaGVsbEl0ZW0pOwor
CisgICAgICBpZiAocGFyZW50RG9jKSB7CisgICAgICAgIHBhcmVudFNhbmRib3hGbGFncyA9IHBh
cmVudERvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHNhbmRi
b3hGbGFncyB8fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgIGlmIChwYXJlbnRTYW5kYm94
RmxhZ3MpIHsKKyAgICAgICAgLy8gVGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0cmljdGlvbnMs
IG5vdCByZW1vdmUgdGhlbS4KKyAgICAgICAgc2FuZGJveEZsYWdzIHw9IHBhcmVudFNhbmRib3hG
bGFnczsKKyAgICAgIH0KKworICAgICAgbURvY1NoZWxsLT5TZXRTYW5kYm94RmxhZ3Moc2FuZGJv
eEZsYWdzKTsKKworICAgICAgLy8gU2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGluZyBmb3Igc2Ny
aXB0cyBhbmQgcGx1Z2lucyBhcyBzcGVjaWZpZWQuCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYg
bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgICAgIG1Eb2NTaGVsbC0+U2V0
QWxsb3dKYXZhc2NyaXB0KGZhbHNlKTsKKyAgICAgIH0KKworICAgICAgaWYgKHNhbmRib3hGbGFn
cyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfUExVR0lOUykgeworICAgICAgICBtRG9jU2hlbGwt
PlNldEFsbG93UGx1Z2lucyhmYWxzZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gSWYg
dGhpcyBpcyBhbiA8aWZyYW1lPiBhbmQgaXQncyBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9y
aWdpbgorICAvLyB3ZSB3aWxsIHNldCBpdCB1cCB3aXRoIGEgbnVsbCBwcmluY2lwYWwgbGF0ZXIg
aW4gbnNEb2NTaGVsbDo6RG9VUklMb2FkLgorICAvLyBXZSBkbyBpdCB0aGVyZSB0byBjb3JyZWN0
bHkgc2FuZGJveCBjb250ZW50IHRoYXQgd2FzIGxvYWRlZCBpbnRvCisgIC8vIHRoZSBpZnJhbWUg
dmlhIG90aGVyIG1ldGhvZHMgdGhhbiB0aGUgc3JjIGF0dHJpYnV0ZS4KICAgLy8gV2UnbGwgdXNl
IG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZSBkb2N1bWVudCBsb2FkZWQgaW5zaWRlIHVz
LiAgVGhpcwogICAvLyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvIHByZXZlbnQgWFNTIGF0
dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbgogICAvLyBzdWJmcmFtZXMhCiAgIGxvYWRJbmZv
LT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOwogCiAgIG5zQ09NUHRy
PG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgp
LT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1Mo
cnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmggYi9j
b250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNH
a0F0b21MaXN0LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaApAQCAtOTMs
MTcgKzkzLDIxIEBAIEdLX0FUT00oYWN0dWF0ZSwgImFjdHVhdGUiKQogR0tfQVRPTShhZGRyZXNz
LCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVyLCAiYWZ0ZXIiKQogR0tfQVRPTShhZnRlcl9lbmQs
ICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRlcl9zdGFydCwgImFmdGVyX3N0YXJ0IikKIEdLX0FU
T00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9NKGFsaW5rLCAiYWxpbmsiKQogR0tfQVRPTShhbGws
ICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50cywgImFsbG93ZXZlbnRzIikKK0dLX0FUT00oYWxs
b3dmb3JtcywgImFsbG93LWZvcm1zIikKIEdLX0FUT00oYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMs
ICJhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucyIpCitHS19BVE9NKGFsbG93c2FtZW9yaWdpbiwgImFs
bG93LXNhbWUtb3JpZ2luIikKK0dLX0FUT00oYWxsb3dzY3JpcHRzLCAiYWxsb3ctc2NyaXB0cyIp
CitHS19BVE9NKGFsbG93dG9wbmF2aWdhdGlvbiwgImFsbG93LXRvcC1uYXZpZ2F0aW9uIikKIEdL
X0FUT00oYWxsb3d1bnRydXN0ZWQsICJhbGxvd3VudHJ1c3RlZCIpCiBHS19BVE9NKGFsdCwgImFs
dCIpCiBHS19BVE9NKGFsdGVybmF0ZSwgImFsdGVybmF0ZSIpCiBHS19BVE9NKGFsd2F5cywgImFs
d2F5cyIpCiBHS19BVE9NKGFuY2VzdG9yLCAiYW5jZXN0b3IiKQogR0tfQVRPTShhbmNlc3Rvck9y
U2VsZiwgImFuY2VzdG9yLW9yLXNlbGYiKQogR0tfQVRPTShfYW5kLCAiYW5kIikKIEdLX0FUT00o
YW55LCAiYW55IikKQEAgLTg3NywxNiArODgxLDE3IEBAIEdLX0FUT00ocm93c3BhbiwgInJvd3Nw
YW4iKQogR0tfQVRPTShycCwgInJwIikKIEdLX0FUT00ocnQsICJydCIpCiBHS19BVE9NKHJ0bCwg
InJ0bCIpCiBHS19BVE9NKHJ1YnksICJydWJ5IikKIEdLX0FUT00ocnVsZSwgInJ1bGUiKQogR0tf
QVRPTShydWxlcywgInJ1bGVzIikKIEdLX0FUT00ocywgInMiKQogR0tfQVRPTShzYW1wLCAic2Ft
cCIpCitHS19BVE9NKHNhbmRib3gsICJzYW5kYm94IikKIEdLX0FUT00oc2JhdHRyLCAic2JhdHRy
IikKIEdLX0FUT00oc2NhbGUsICJzY2FsZSIpCiBHS19BVE9NKHNjYW4sICJzY2FuIikKIEdLX0FU
T00oc2NoZW1lLCAic2NoZW1lIikKIEdLX0FUT00oc2NvcGUsICJzY29wZSIpCiBHS19BVE9NKHNj
b3BlZCwgInNjb3BlZCIpCiBHS19BVE9NKHNjcmVlbiwgInNjcmVlbiIpCiBHS19BVE9NKHNjcmVl
blgsICJzY3JlZW5YIikKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxGb3JtRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVs
ZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVu
dC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNw
cApAQCAtNjg0LDE3ICs2ODQsMjUgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNl
dChuc0V2ZQogICAgIHJldHVybiBEb1Jlc2V0KCk7CiAgIH0KIAogICBpZiAoTlNfRk9STV9TVUJN
SVQgPT0gYU1lc3NhZ2UpIHsKICAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgbm90IGluIGEg
ZG9jdW1lbnQuCiAgICAgaWYgKCFkb2MpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAgICB9Ci0g
ICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3Jl
IGluIGEgc2FuZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1Ym1pdAorICAgIC8vIGlzIGRpc2FibGVk
LgorICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisKKyAg
ICBpZiAoIShzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TKSkgewor
ICAgICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAgfQorCisgICAgcmV0dXJuIE5TX09L
OwogICB9CiAKICAgTU9aX0FTU0VSVChmYWxzZSk7CiAgIHJldHVybiBOU19PSzsKIH0KIAogbnNy
ZXN1bHQKIG5zSFRNTEZvcm1FbGVtZW50OjpEb1Jlc2V0KCkKQEAgLTE2NzYsMTYgKzE2ODQsMjgg
QEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkNoZWNrVmFsaWRGb3JtU3VibWlzcwogICAgKiBUT0RPOiB0
aGUgY2hlY2sgZm9yIG9ic2VydmVyIHNob3VsZCBiZSByZW1vdmVkIGxhdGVyIHdoZW4gSFRNTDUg
Rm9ybXMgd2lsbAogICAgKiBiZSBzcHJlYWQgZW5vdWdoIGFuZCBhdXRob3JzIHdpbGwgYXNzdW1l
IGZvcm1zIGNhbid0IGJlIHN1Ym1pdHRlZCB3aGVuCiAgICAqIGludmFsaWQuIFNlZSBidWcgNTg3
NjcxLgogICAgKi8KIAogICBOU19BU1NFUlRJT04oIUhhc0F0dHIoa05hbWVTcGFjZUlEX05vbmUs
IG5zR2tBdG9tczo6bm92YWxpZGF0ZSksCiAgICAgICAgICAgICAgICAiV2Ugc2hvdWxkbid0IGJl
IHRoZXJlIGlmIG5vdmFsaWRhdGUgaXMgc2V0ISIpOwogCisgIC8vIERvbid0IGRvIHZhbGlkYXRp
b24gZm9yIGEgZm9ybSBzdWJtaXQgZG9uZSBieSBhIHNhbmRib3hlZCBkb2N1bWVudCB0aGF0Cisg
IC8vIGRvZXNuJ3QgaGF2ZSAnYWxsb3ctZm9ybXMnLCB0aGUgc3VibWl0IHdpbGwgaGF2ZSBiZWVu
IGJsb2NrZWQgYW5kIHRoZQorICAvLyBIVE1MNSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IHZhbGlk
YXRlIGluIHRoaXMgY2FzZS4KKyAgbnNJRG9jdW1lbnQqIGRvYyA9IEdldEN1cnJlbnREb2MoKTsK
KyAgaWYgKGRvYykgeworICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZs
YWdzKCk7CisKKyAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9G
T1JNUykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisgICAgICAgICAgICAgICAK
ICAgLy8gV2hlbiAuc3VibWl0KCkgaXMgY2FsbGVkIGFFdmVudCA9IG5zbnVsbCBzbyB3ZSBjYW4g
cmVseSBvbiB0aGF0IHRvIGtub3cgaWYKICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGUgdmFsaWRp
dHkgb2YgdGhlIGZvcm0uCiAgIG5zQ09NUHRyPG5zSU9ic2VydmVyU2VydmljZT4gc2VydmljZSA9
CiAgICAgbW96aWxsYTo6c2VydmljZXM6OkdldE9ic2VydmVyU2VydmljZSgpOwogICBpZiAoIXNl
cnZpY2UpIHsKICAgICBOU19XQVJOSU5HKCJObyBvYnNlcnZlciBzZXJ2aWNlIGF2YWlsYWJsZSEi
KTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNI
VE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTMzLDgxICszMywzMyBAQAogICogdGhlIHByb3Zpc2lv
bnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlcgogICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUg
TEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVk
ZSAibW96aWxsYS9VdGlsLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5o
IgotI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0lE
T01Eb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCi0jaW5jbHVk
ZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRl
ICJuc0lEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1
ZGUgIm5zRE9NRXJyb3IuaCIKLSNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNT
dHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCi1jbGFz
cyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1l
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1l
bnQKLXsKLXB1YmxpYzoKLSAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5z
SU5vZGVJbmZvPiBhTm9kZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9t
OjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIp
OwotICB2aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7Ci0KLSAgLy8gbnNJU3VwcG9ydHMK
LSAgTlNfREVDTF9JU1VQUE9SVFNfSU5IRVJJVEVECi0KLSAgLy8gbnNJRE9NTm9kZQotICBOU19G
T1JXQVJEX05TSURPTU5PREUobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5z
SURPTUVsZW1lbnQKLSAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFt
ZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1MRWxlbWVudAotICBOU19GT1JXQVJEX05TSURP
TUhUTUxFTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01I
VE1MSUZyYW1lRWxlbWVudAotICBOU19ERUNMX05TSURPTUhUTUxJRlJBTUVFTEVNRU5UCi0KLSAg
Ly8gbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLSAgTlNfREVDTF9OU0lET01HRVRTVkdET0NVTUVOVAot
Ci0gIC8vIG5zSUNvbnRlbnQKLSAgdmlydHVhbCBib29sIFBhcnNlQXR0cmlidXRlKFBSSW50MzIg
YU5hbWVzcGFjZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBh
QXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJp
bmcmIGFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUm
IGFSZXN1bHQpOwotICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBu
c0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKLSAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0
ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OwotCi0gIHZpcnR1YWwg
bnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQp
IGNvbnN0OwotICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKLX07Ci0K
LQogTlNfSU1QTF9OU19ORVdfSFRNTF9FTEVNRU5UX0NIRUNLX1BBUlNFUihJRnJhbWUpCiAKLQog
bnNIVE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVk
PG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJzZXIpCiAgIDogbnNHZW5lcmljSFRNTEZyYW1l
RWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFyc2VyKQogewogfQogCiBuc0hUTUxJRnJhbWVFbGVt
ZW50Ojp+bnNIVE1MSUZyYW1lRWxlbWVudCgpCiB7CisgIGlmIChtU2FuZGJveFRva2VuTGlzdCkK
KyAgICBtU2FuZGJveFRva2VuTGlzdC0+RHJvcFJlZmVyZW5jZSgpOwogfQogCiAKIE5TX0lNUExf
QUREUkVGX0lOSEVSSVRFRChuc0hUTUxJRnJhbWVFbGVtZW50LG5zR2VuZXJpY0VsZW1lbnQpCiBO
U19JTVBMX1JFTEVBU0VfSU5IRVJJVEVEKG5zSFRNTElGcmFtZUVsZW1lbnQsbnNHZW5lcmljRWxl
bWVudCkKIAogRE9NQ0lfTk9ERV9EQVRBKEhUTUxJRnJhbWVFbGVtZW50LCBuc0hUTUxJRnJhbWVF
bGVtZW50KQogCkBAIC0xNTAsMTYgKzEwMiwyOCBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRD
b250ZW50V2luZG93KG5zCiB9CiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6
OkdldFNWR0RvY3VtZW50KG5zSURPTURvY3VtZW50ICoqYVJlc3VsdCkKIHsKICAgcmV0dXJuIEdl
dENvbnRlbnREb2N1bWVudChhUmVzdWx0KTsKIH0KIAorTlNfSU1FVEhPRElNUAorbnNIVE1MSUZy
YW1lRWxlbWVudDo6R2V0U2FuZGJveChuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCoqIGFTYW5k
Ym94KQoreworICBpZiAoIW1TYW5kYm94VG9rZW5MaXN0KSB7CisgICAgbVNhbmRib3hUb2tlbkxp
c3QgPSBuZXcgbnNET01TZXR0YWJsZVRva2VuTGlzdCh0aGlzLCBuc0drQXRvbXM6OnNhbmRib3gp
OworICB9CisKKyAgTlNfQUREUkVGKCphU2FuZGJveCA9IG1TYW5kYm94VG9rZW5MaXN0KTsKKwor
ICByZXR1cm4gTlNfT0s7Cit9CisKIGJvb2wKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0
cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpCiB7CiAgIGlmIChhTmFtZXNwYWNl
SUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKICAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRv
bXM6Om1hcmdpbndpZHRoKSB7CkBAIC0xNzgsMTYgKzE0MiwyMiBAQCBuc0hUTUxJRnJhbWVFbGVt
ZW50OjpQYXJzZUF0dHJpYnV0ZShQUkluCiAgICAgICByZXR1cm4gUGFyc2VGcmFtZWJvcmRlclZh
bHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQogICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tB
dG9tczo6c2Nyb2xsaW5nKSB7CiAgICAgICByZXR1cm4gUGFyc2VTY3JvbGxpbmdWYWx1ZShhVmFs
dWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OmFs
aWduKSB7CiAgICAgICByZXR1cm4gUGFyc2VBbGlnblZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAg
ICAgfQorICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6c2FuZGJveCkgeworICAgICAg
Ly8gVGhlIHNhbmRib3ggYXR0cmlidXRlIG5lZWRzIHRvIGJlIHBhcnNlZCBhcyBhbiBhdG9tIGFy
cmF5IHNvCisgICAgICAvLyBpdCBjYW4gYmUgZXhwb3NlZCBhcyBhIERPTVNldHRhYmxlVG9rZW5M
aXN0LgorICAgICAgYVJlc3VsdC5QYXJzZUF0b21BcnJheShhVmFsdWUpOworICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQogICB9CiAKICAgcmV0dXJuIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6
OlBhcnNlQXR0cmlidXRlKGFOYW1lc3BhY2VJRCwgYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZSwgYVJlc3VsdCk7CiB9
CiAKIHN0YXRpYyB2b2lkCiBNYXBBdHRyaWJ1dGVzSW50b1J1bGUoY29uc3QgbnNNYXBwZWRBdHRy
aWJ1dGVzKiBhQXR0cmlidXRlcywKQEAgLTI2OCw4ICsyMzgsMzUgQEAgbnNIVE1MSUZyYW1lRWxl
bWVudDo6SXNBdHRyaWJ1dGVNYXBwZWQoYwogCiAKIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMK
IG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0
CiB7CiAgIHJldHVybiAmTWFwQXR0cmlidXRlc0ludG9SdWxlOwogfQogCituc3Jlc3VsdAorbnNI
VE1MSUZyYW1lRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lB
dG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
QXR0clZhbHVlKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFOb3RpZnkpCit7CisgIGlmIChhTmFtZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5h
bWVTcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2
YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUsIGFuZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwK
KyAgICAvLyBzZXQgaXRzIHNhbmRib3ggZmxhZ3MgYXBwcm9wcmlhdGVseS4KKyAgICBpZiAobUZy
YW1lTG9hZGVyKSB7CisgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jc2hlbGwgPSBtRnJh
bWVMb2FkZXItPkdldEV4aXN0aW5nRG9jU2hlbGwoKTsKKworICAgICAgaWYgKGRvY3NoZWxsKSB7
CisgICAgICAgIFBSVWludDMyIG5ld0ZsYWdzID0gMDsKKyAgICAgICAgLy8gSWYgYSBOVUxMIGFW
YWx1ZSBpcyBwYXNzZWQgaW4sIHdlIHdhbnQgdG8gY2xlYXIgdGhlIHNhbmRib3ggZmxhZ3MKKyAg
ICAgICAgLy8gd2hpY2ggd2Ugd2lsbCBkbyBieSBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAg
aWYgKGFWYWx1ZSkgeworICAgICAgICAgIG5ld0ZsYWdzID0gbnNDb250ZW50VXRpbHM6OlBhcnNl
U2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3MoCisgICAgICAgICAgICBhVmFsdWUtPkdldFN0cmluZ1Zh
bHVlKCkpOworICAgICAgICB9CisgICAgICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3
RmxhZ3MpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1l
bnQ6OkFmdGVyU2V0QXR0cihhTmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOb3RpZnkpOworCit9CmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxJRnJhbWVFbGVtZW50LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRh
Yi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0g
Ki8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAx
LjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJl
IHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0
aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2Fy
ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5z
ZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGll
bnQgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENv
ZGUgaXMKKyAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogUG9ydGlv
bnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5
OAorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0
aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwi
KSwKKyAqIG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAy
LjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9u
cyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRo
b3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhl
IExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICog
ZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhl
bSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRo
ZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9u
cyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBM
R1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNsdWRl
ICJtb3ppbGxhL1V0aWwuaCIKKworI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50Lmgi
CisjaW5jbHVkZSAibnNHZW5lcmljSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50Lmgi
CisjaW5jbHVkZSAibnNHa0F0b21zLmgiCisjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJuc0RPTUVycm9yLmgiCisjaW5j
bHVkZSAibnNSdWxlRGF0YS5oIgorI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRl
ICJuc0RPTVNldHRhYmxlVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIK
KworY2xhc3MgbnNIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJhbWVF
bGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUhUTUxJRnJh
bWVFbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUdldFNW
R0RvY3VtZW50Cit7CitwdWJsaWM6CisgIG5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRS
ZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvLAorICAgICAgICAgICAgICAgICAgICAgIG1vemls
bGE6OmRvbTo6RnJvbVBhcnNlciBhRnJvbVBhcnNlciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZST01f
UEFSU0VSKTsKKyAgdmlydHVhbCB+bnNIVE1MSUZyYW1lRWxlbWVudCgpOworCisgIC8vIG5zSVN1
cHBvcnRzCisgIE5TX0RFQ0xfSVNVUFBPUlRTX0lOSEVSSVRFRAorCisgIC8vIG5zSURPTU5vZGUK
KyAgTlNfRk9SV0FSRF9OU0lET01OT0RFKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKKwor
ICAvLyBuc0lET01FbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NRUxFTUVOVChuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NSFRNTEVsZW1lbnQKKyAgTlNfRk9SV0FS
RF9OU0lET01IVE1MRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8g
bnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKKyAgTlNfREVDTF9OU0lET01IVE1MSUZSQU1FRUxFTUVO
VAorCisgIC8vIG5zSURPTUdldFNWR0RvY3VtZW50CisgIE5TX0RFQ0xfTlNJRE9NR0VUU1ZHRE9D
VU1FTlQKKworICAvLyBuc0lDb250ZW50CisgIHZpcnR1YWwgYm9vbCBQYXJzZUF0dHJpYnV0ZShQ
UkludDMyIGFOYW1lc3BhY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
QXRvbSogYUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNBU3RyaW5nJiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0
clZhbHVlJiBhUmVzdWx0KTsKKyAgTlNfSU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1dGVNYXBwZWQo
Y29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CisgIHZpcnR1YWwgbnNNYXBSdWxlVG9B
dHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdDsKKworICB2
aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5vZGUgKiph
UmVzdWx0KSBjb25zdDsKKyAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xhc3NJbmZvKCk7
CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQs
IG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zQXR0clZhbHVlKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhTm90aWZ5KTsKKworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKSB7CisgICAgbnNB
dXRvU3RyaW5nIHNhbmRib3hBdHRyOworCisgICAgaWYgKEdldEF0dHIoa05hbWVTcGFjZUlEX05v
bmUsIG5zR2tBdG9tczo6c2FuZGJveCwgc2FuZGJveEF0dHIpKSB7CisgICAgICByZXR1cm4gbnND
b250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2FuZGJveEF0dHIpOwor
ICAgIH0KKworICAgIC8vIE5vIHNhbmRib3ggYXR0cmlidXRlLCBubyBzYW5kYm94IGZsYWdzLgor
ICAgIHJldHVybiAwOworICB9CisKKyAgc3RhdGljIG5zSFRNTElGcmFtZUVsZW1lbnQqIEZyb21D
b250ZW50KG5zSUNvbnRlbnQgKmFDb250ZW50KQorICB7CisgICAgaWYgKGFDb250ZW50LT5Jc0hU
TUwobnNHa0F0b21zOjppZnJhbWUpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG5zSFRNTElG
cmFtZUVsZW1lbnQqPihhQ29udGVudCk7CisgICAgcmV0dXJuIG5zbnVsbDsKKyAgfQorCitwcm90
ZWN0ZWQ6CisgIG5zUmVmUHRyPG5zRE9NU2V0dGFibGVUb2tlbkxpc3Q+ICBtU2FuZGJveFRva2Vu
TGlzdDsKK307CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERv
Y3VtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3Bw
Ci0tLSBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCisrKyBi
L2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCkBAIC0xMjY0LDE2
ICsxMjY0LDIxIEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3RyaW5nJiBhQ28KIHsK
ICAgYUNvb2tpZS5UcnVuY2F0ZSgpOyAvLyBjbGVhciBjdXJyZW50IGNvb2tpZSBpbiBjYXNlIHNl
cnZpY2UgZmFpbHM7CiAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gY29va2llIGlzbid0IGFu
IGVycm9yIGNvbmRpdGlvbi4KIAogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICBy
ZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3Jp
Z2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gcmVhZCBjb29raWVzCisgIC8vIGlzIHByb2hpYml0
ZWQuCisgIGlmIChtU2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4p
CisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisKICAgLy8gbm90IGhhdmlu
ZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNl
cnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJ
RCk7CiAgIGlmIChzZXJ2aWNlKSB7CiAgICAgLy8gR2V0IGEgVVJJIGZyb20gdGhlIGRvY3VtZW50
IHByaW5jaXBhbC4gV2UgdXNlIHRoZSBvcmlnaW5hbAogICAgIC8vIGNvZGViYXNlIGluIGNhc2Ug
dGhlIGNvZGViYXNlIHdhcyBjaGFuZ2VkIGJ5IFNldERvbWFpbgogICAgIG5zQ09NUHRyPG5zSVVS
ST4gY29kZWJhc2VVUkk7CiAgICAgTm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJl
ZnMoY29kZWJhc2VVUkkpKTsKIApAQCAtMTI5NCwxNiArMTI5OSwyMSBAQCBuc0hUTUxEb2N1bWVu
dDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTERvY3Vt
ZW50OjpTZXRDb29raWUoY29uc3QgbnNBU3RyaW5nJiBhQ29va2llKQogewogICBpZiAobURpc2Fi
bGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUg
ZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gd3JpdGUg
Y29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAmIG5zSURv
Y1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKQorICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJ
VFlfRVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJv
cgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShO
U19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSAmJiBtRG9jdW1lbnRV
UkkpIHsKICAgICBuc0NPTVB0cjxuc0lQcm9tcHQ+IHByb21wdDsKICAgICBuc0NPTVB0cjxuc1BJ
RE9NV2luZG93PiB3aW5kb3cgPSBHZXRXaW5kb3coKTsKICAgICBpZiAod2luZG93KSB7CiAgICAg
ICB3aW5kb3ctPkdldFByb21wdGVyKGdldHRlcl9BZGRSZWZzKHByb21wdCkpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25z
RG9jU2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9j
c2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcApAQCAtNzI3LDE2ICs3MjcsMTcgQEAgbnNEb2NTaGVs
bDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVTWV9GTEFHU19OT05FKSwKICAgICBt
QXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9XTiksCiAgICAgbUxvYWRUeXBlKDAp
LAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdpbkhlaWdodCgtMSksCiAgICAgbUl0
ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNUcmFuc0luZGV4KC0xKSwKICAgICBt
TG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hGbGFncygwKSwKICAgICBtQ3JlYXRl
ZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUpLAogICAgIG1BbGxvd1BsdWdpbnMo
dHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwKICAgICBtQWxsb3dNZXRhUmVkaXJl
Y3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwKICAgICBtQWxsb3dETlNQcmVmZXRj
aCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRydWUpLApAQCAtMjkwNywxNiArMjkw
OCw3MyBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pCiAgICAgICAg
ICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmRJ
dGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91bmRJdGVtIGhlcmUgZXZlbiBpZiBp
dCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0ZW0gc2luY2UgYWxsIHRoZSBuYW1l
cyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2Fz
ZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3IgZnVydGhlci4KIAorICAgICAgICAg
ICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwgd2UgbmVlZCB0byBkbyBzb21lIGV4
dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisKKyAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19HZXRJbnRlcmZhY2UoYU9y
aWdpbmFsUmVxdWVzdG9yKTsKKworICAgICAgICAgICAgaWYgKGRvYykgeworICAgICAgICAgICAg
ICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzKSB7CisgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gcm9vdDsKKyAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVJv
b3RUcmVlSXRlbShnZXR0ZXJfQWRkUmVmcyhyb290KSk7CisKKyAgICAgICAgICAgICAgICAvLyBJ
cyB0aGUgZm91bmQgaXRlbSBub3QgYSB0b3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBhbmQgbm90
IG91cnNlbGYgPworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHNlbGZBc0l0ZW0gPSBzdGF0aWNfY2FzdDxuc0lEb2NTaGVsbFRyZWVJdGVtICo+KHRoaXMpOwor
ICAgICAgICAgICAgICAgIGlmIChmb3VuZEl0ZW0gIT0gcm9vdCAmJiBmb3VuZEl0ZW0gIT0gc2Vs
ZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgYW4gYW5jZXN0b3Igb2Yg
dGhlIGZvdW5kSXRlbSA/CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNBbmNlc3RvciA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0
dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVt
LT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAgJiYgdG1wID09IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc0FuY2VzdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNBbmNlc3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm8sIHdlIGFyZSBub3QgYW4gYW5jZXN0b3IgYW5kIG91ciBkb2N1bWVudCBpcworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc2FuZGJveGVkLCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAg
ICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVG9w
IGxldmVsIGJyb3dzaW5nIGNvbnRleHQgLSBpcyBpdCBhbiBhbmNlc3RvciBvZiBvdXJzID8KKyAg
ICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAg
ICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsK
KworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG1wKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodG1wICYmIHRtcCA9PSBmb3VuZEl0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIGFuIGFuY2VzdG9yLCBhbmQgd2UgYXJlIHNhbmRib3hlZC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9wLW5hdmlnYXRpb24g
aXMgc2V0LCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVMX05BVklH
QVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB0bXAtPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAgICAgICAgcmV0dXJuIE5TX09LOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29raW5nCiAgICAgICAgIAogICAgIC8v
IEZpcnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAtNDk0MywxNiArNTAwMSwzMCBAQCBuc0RvY1No
ZWxsOjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hl
bGw6OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0Fw
cFRhYjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpT
ZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgbVNhbmRib3hGbGFn
cyA9IGFTYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAor
bnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFncykKK3sK
KyAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisK
K05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHkoYm9vbCBhVmlzaWJpbGl0
eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICByZXR1cm4gTlNfT0s7CiAg
ICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmlld2VyLT5TaG93KCk7CiAg
ICAgfQogICAgIGVsc2UgewpAQCAtODEzMiwxNiArODIwNCwyOSBAQCBuc0RvY1NoZWxsOjpJbnRl
cm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVl
SXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2luZG93VGFyZ2V0
LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMo
dGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiB0YXJnZXREb2NT
aGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRhcmdldERvY1NoZWxsKSB7
CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVudCBpcyBzYW5kYm94ZWQg
YW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRlL2xvYWQgYSBmcmFtZSBp
dCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAgICAgLy8gRmluZEl0ZW1X
aXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3IgdGhlIHRhcmdldAorICAg
ICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgb3BlbiBhIG5ldyB3
aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0aG91Z2guIENoZWNrIGlmIHdlIGFy
ZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYgc28uCisgICAgICAgICAgICBOU19FTlNV
UkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1JfRkFJTFVSRSk7CisgICAgICAgICAgICBu
c0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3VtZW50KCk7CisgICAgICAg
ICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICAgICAgc2FuZGJveEZsYWdz
ID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBu
c0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgcmV0dXJu
IE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG5zQ09NUHRy
PG5zSURPTVdpbmRvdz4gd2luID0KICAgICAgICAgICAgICAgICBkb19HZXRJbnRlcmZhY2UoR2V0
QXNTdXBwb3J0cyh0aGlzKSk7CiAgICAgICAgICAgICBOU19FTlNVUkVfVFJVRSh3aW4sIE5TX0VS
Uk9SX05PVF9BVkFJTEFCTEUpOwogCiAgICAgICAgICAgICBuc0RlcGVuZGVudFN0cmluZyBuYW1l
KGFXaW5kb3dUYXJnZXQpOwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiBuZXdX
aW47CiAgICAgICAgICAgICBydiA9IHdpbi0+T3BlbihFbXB0eVN0cmluZygpLCAvLyBVUkwgdG8g
bG9hZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgICAgICAgICAgLy8gd2luZG93
IG5hbWUKQEAgLTg5MTMsMTggKzg5OTgsMzIgQEAgbnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVS
SSAqIGFVUkksCiAgICAgICAgIH0KICAgICAgICAgLy8gU2V0IHRoZSByZWZlcnJlciBleHBsaWNp
dGx5CiAgICAgICAgIGlmIChhUmVmZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJlcikgewogICAgICAg
ICAgICAgLy8gUmVmZXJyZXIgaXMgY3VycmVubHkgb25seSBzZXQgZm9yIGxpbmsgY2xpY2tzIGhl
cmUuCiAgICAgICAgICAgICBodHRwQ2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJlZmVycmVyVVJJKTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmlu
Y2lwYWwoZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKSk7Ci0gICAgbnNDb250ZW50VXRpbHM6OlNl
dFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlKTsKKyAg
ICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFsOworCisgICAgLy8gSWYgdGhl
IGNvbnRlbnQgYmVpbmcgbG9hZGVkIHNob3VsZCBiZSBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRv
IG9yaWdpbgorICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG51bGwgcHJpbmNpcGFsIGhl
cmUsIGFuZCB0aGVuIHRlbGwKKyAgICAvLyBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3du
ZXIgdG8gZm9yY2UgaXQgdG8gYmUgc2V0IGFzIHRoZQorICAgIC8vIGNoYW5uZWwgb3duZXIuCisg
ICAgaWYgKG1TYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikgewor
ICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL251
bGxwcmluY2lwYWw7MSIpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBOb3Qgc2FuZGJveGVkIC0g
d2UgYWxsb3cgdGhlIGNvbnRlbnQgdG8gYXNzdW1lIGl0cyBuYXR1cmFsIG93bmVyLgorICAgICAg
b3duZXJQcmluY2lwYWwgPSBkb19RdWVyeUludGVyZmFjZShhT3duZXIpOworICAgIH0KKworICAg
IG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5l
bCwgYVVSSSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht
U2FuZGJveEZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpOwogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0
Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAg
IGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0
IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5u
ZWwtPgogICAgICAgICAgICAgU2V0RXhlY3V0aW9uUG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVY
RUNVVEVfTk9STUFMKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NT
aGVsbC5oIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKLS0tIGEvZG9jc2hlbGwvYmFzZS9u
c0RvY1NoZWxsLmgKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKQEAgLTc4MSwxNiAr
NzgxLDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBDcmVhdGUoKSBpcyBjYWxsZWQsIHRoZSB0eXBl
IGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAg
ICAgbUl0ZW1UeXBlOwogCiAgICAgLy8gSW5kZXggaW50byB0aGUgU0hUcmFuc2FjdGlvbiBsaXN0
LCBpbmRpY2F0aW5nIHRoZSBwcmV2aW91cyBhbmQgY3VycmVudAogICAgIC8vIHRyYW5zYWN0aW9u
IGF0IHRoZSB0aW1lIHRoYXQgdGhpcyBEb2NTaGVsbCBiZWdpbnMgdG8gbG9hZAogICAgIFBSSW50
MzIgICAgICAgICAgICAgICAgICAgIG1QcmV2aW91c1RyYW5zSW5kZXg7CiAgICAgUFJJbnQzMiAg
ICAgICAgICAgICAgICAgICAgbUxvYWRlZFRyYW5zSW5kZXg7CiAKKyAgICBQUlVpbnQzMiAgICAg
ICAgICAgICAgICAgICBtU2FuZGJveEZsYWdzOworCiAgICAgYm9vbCAgICAgICAgICAgICAgICAg
ICAgICAgbUNyZWF0ZWQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93U3Vi
ZnJhbWVzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1BsdWdpbnM7CiAg
ICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93SmF2YXNjcmlwdDsKICAgICBib29s
ICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzOwogICAgIGJvb2wgICAg
ICAgICAgICAgICAgICAgICAgIG1BbGxvd0ltYWdlczsKICAgICBib29sICAgICAgICAgICAgICAg
ICAgICAgICBtQWxsb3dETlNQcmVmZXRjaDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAg
ICBtQWxsb3dXaW5kb3dDb250cm9sOwpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NT
aGVsbC5pZGwgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAotLS0gYS9kb2NzaGVsbC9i
YXNlL25zSURvY1NoZWxsLmlkbAorKysgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbApA
QCAtNjcsMTcgKzY3LDE3IEBAIGludGVyZmFjZSBuc0lSZXF1ZXN0OwogaW50ZXJmYWNlIG5zSVNI
RW50cnk7CiBpbnRlcmZhY2UgbnNJTGF5b3V0SGlzdG9yeVN0YXRlOwogaW50ZXJmYWNlIG5zSVNl
Y3VyZUJyb3dzZXJVSTsKIGludGVyZmFjZSBuc0lET01TdG9yYWdlOwogaW50ZXJmYWNlIG5zSVBy
aW5jaXBhbDsKIGludGVyZmFjZSBuc0lXZWJCcm93c2VyUHJpbnQ7CiBpbnRlcmZhY2UgbnNJVmFy
aWFudDsKIAotW3NjcmlwdGFibGUsIHV1aWQoREJEMzlDMjEtNTc4OC00QzY4LTlEOTctMEZDRUUy
ODlCQ0UxKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDliMjgzMzM3LTA5N2QtNGZhOC1hMmRhLTkxNjMx
OGVhZjgyOCldCiBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogewogICAvKioK
ICAgICogTG9hZHMgYSBnaXZlbiBVUkkuICBUaGlzIHdpbGwgZ2l2ZSBwcmlvcml0eSB0byBsb2Fk
aW5nIHRoZSByZXF1ZXN0ZWQgVVJJCiAgICAqIGluIHRoZSBvYmplY3QgaW1wbGVtZW50aW5nCXRo
aXMgaW50ZXJmYWNlLiAgSWYgaXQgY2FuJ3QgYmUgbG9hZGVkIGhlcmUKICAgICogaG93ZXZlciwg
dGhlIFVSTCBkaXNwYXRjaGVyIHdpbGwgZ28gdGhyb3VnaCBpdHMgbm9ybWFsIHByb2Nlc3Mgb2Yg
Y29udGVudAogICAgKiBsb2FkaW5nLgogICAgKgpAQCAtNjA5LDkgKzYwOSw2NyBAQCBpbnRlcmZh
Y2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogICAgKiB3aGVuIGl0IGluaXRpYWxpemVzIHRo
ZSBkb2NzaGVsbC4KICAgICoKICAgICogSWYgc28sIHRoaXMgZG9jc2hlbGwgc2hvdWxkIGFjdCBs
aWtlIGEgY2hyb21lL2NvbnRlbnQgYm91bmRhcnkgZm9yIHRoZQogICAgKiBwdXJwb3NlcyBvZiB3
aW5kb3cudG9wIGFuZCB3aW5kb3cucGFyZW50LgogICAgKgogICAgKiBTZWUgYWxzbyBuc0lNb3pC
cm93c2VyRnJhbWUuCiAgICAqLwogICBhdHRyaWJ1dGUgYm9vbCBpc0Jyb3dzZXJGcmFtZTsKKwor
ICAvKioKKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3NoZWxsLiBUaGVzZSByZWZs
ZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUgb2YgdGhlIGFzc29j
aWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZgorICAgKiBleGlzdGVu
dC4gU2VlIHRoZSBIVE1MNSBzcGVjIGZvciBtb3JlIGRldGFpbHMuCisgICAqIFRoZXNlIGZsYWdz
IG9uIHRoZSBkb2NzaGVsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzYW5kYm94
CisgICAqIGF0dHJpYnV0ZSwgd2hpY2ggaXMgbW9kaWZpYWJsZS4gVGhleSBhcmUgb25seSB1c2Vk
IHdoZW4gbG9hZGluZyBuZXcKKyAgICogY29udGVudCwgc2FuZGJveCBmbGFncyBhcmUgYWxzbyBp
bW11dGFibHkgc2V0IG9uIHRoZSBkb2N1bWVudCB3aGVuIGl0IGlzCisgICAqIGxvYWRlZC4KKyAg
ICogVGhlIHNhbmRib3ggZmxhZ3Mgb2YgYSBkb2N1bWVudCBkZXBlbmQgb24gdGhlIHNhbmRib3gg
ZmxhZ3Mgb24gaXRzCisgICAqIGRvY3NoZWxsIGFuZCBvZiBpdHMgcGFyZW50IGRvY3VtZW50LCBp
ZiBhbnkuCisgICAqLworICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzYW5kYm94RmxhZ3M7CisK
KyAgLyoqCisgICAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyBi
cm93c2luZyBjb250ZXh0cyBvdGhlciB0aGFuCisgICAqIHRoZSBzYW5kYm94ZWQgYnJvd3Npbmcg
Y29udGV4dCBpdHNlbGYgKG9yIGJyb3dzaW5nIGNvbnRleHRzIGZ1cnRoZXIKKyAgICogbmVzdGVk
IGluc2lkZSBpdCksIGFuZCB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQuCisgICAqLwor
ICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9OQVZJR0FUSU9OICA9IDB4MTsKKworICAv
KioKKyAgICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWly
IHRvcC1sZXZlbCBicm93c2luZworICAgKiBjb250ZXh0LgorICAgKi8KKyAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiA9IDB4MjsKKworICAvKioKKyAg
ICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBpbnN0YW50aWF0aW5nIHBsdWdpbnMs
IHdoZXRoZXIgdXNpbmcgdGhlCisgICAqIGVtYmVkIGVsZW1lbnQsIHRoZSBvYmplY3QgZWxlbWVu
dCwgdGhlIGFwcGxldCBlbGVtZW50LCBvciB0aHJvdWdoCisgICAqIG5hdmlnYXRpb24gb2YgYSBu
ZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgdW5sZXNzIHRob3NlIHBsdWdpbnMgY2FuIGJlCisgICAq
IHNlY3VyZWQuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5T
ID0gMHg0OworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgZm9yY2VzIGNvbnRlbnQgaW50byBhIHVu
aXF1ZSBvcmlnaW4sIHRodXMgcHJldmVudGluZyBpdCBmcm9tCisgICAqIGFjY2Vzc2luZyBvdGhl
ciBjb250ZW50IGZyb20gdGhlIHNhbWUgb3JpZ2luLgorICAgKiBUaGlzIGZsYWcgYWxzbyBwcmV2
ZW50cyBzY3JpcHQgZnJvbSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byB0aGUKKyAgICogZG9j
dW1lbnQuY29va2llIElETCBhdHRyaWJ1dGUsIGFuZCBibG9ja3MgYWNjZXNzIHRvIGxvY2FsU3Rv
cmFnZS4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX09SSUdJTiA9IDB4
ODsKKworICAvKioKKyAgICogVGhpcyBmbGFnIGJsb2NrcyBmb3JtIHN1Ym1pc3Npb24uCisgICAq
LworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9GT1JNUyA9IDB4MTA7CisKKyAgLyoq
CisgICAqIFRoaXMgZmxhZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlvbi4KKyAgICovCisgIGNvbnN0
IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1NDUklQVFMgPSAweDIwOworCisgIC8qKgorICAgKiBU
aGlzIGZsYWcgYmxvY2tzIGZlYXR1cmVzIHRoYXQgdHJpZ2dlciBhdXRvbWF0aWNhbGx5LCBzdWNo
IGFzCisgICAqIGF1dG9tYXRpY2FsbHkgcGxheWluZyBhIHZpZGVvIG9yIGF1dG9tYXRpY2FsbHkg
Zm9jdXNpbmcgYSBmb3JtIGNvbnRyb2wuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNB
TkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMgPSAweDQwOwogfTsKZGlmZiAtLWdpdCBhL2RvbS9i
YXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcAotLS0g
YS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5k
b3cuY3BwCkBAIC04Mjg1LDE2ICs4Mjg1LDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRTZXNzaW9u
U3RvcmFnZShuc0lET00KICAgaWYgKCFtU2Vzc2lvblN0b3JhZ2UpIHsKICAgICAqYVNlc3Npb25T
dG9yYWdlID0gbnNudWxsOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1E
b2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7
CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdp
biBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisg
ICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYgbnNJRG9jU2hlbGw6OlNBTkRC
T1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsK
KyAgICB9CisKICAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTZXNzaW9uU3RvcmFnZUZv
clByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRk
UmVmcyhtU2Vzc2lvblN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwog
CiAjaWZkZWYgUFJfTE9HR0lORwogICAgIGlmIChQUl9MT0dfVEVTVChnRE9NTGVha1BSTG9nLCBQ
Ul9MT0dfREVCVUcpKSB7CkBAIC04MzQ2LDE2ICs4MzUyLDIyIEBAIG5zR2xvYmFsV2luZG93OjpH
ZXRMb2NhbFN0b3JhZ2UobnNJRE9NU3QKICAgICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9y
Zy9kb20vc3RvcmFnZW1hbmFnZXI7MSIsICZydik7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYs
IHJ2KTsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsK
ICAgICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAor
ICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQK
KyAgICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9j
ICYmIChtRG9jLT5TYW5kYm94RmxhZ3MoKSAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lO
KSkgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAg
ICAgcnYgPSBzdG9yYWdlTWFuYWdlci0+R2V0TG9jYWxTdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5j
aXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogICB9CiAKICAgTlNfQUREUkVGKCphTG9jYWxTdG9yYWdlID0g
bUxvY2FsU3RvcmFnZSk7CiAgIHJldHVybiBOU19PSzsKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZh
Y2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRt
bC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9u
c0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lE
T01IVE1MSUZyYW1lRWxlbWVudC5pZGwKQEAgLTMzLDQ0ICszMyw0NiBAQAogICogZGVjaXNpb24g
YnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRo
ZSBub3RpY2UKICAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3Ig
dGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwg
YSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0
aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoK
ICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJuc0lET01I
VE1MRWxlbWVudC5pZGwiCisjaW5jbHVkZSAibnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRs
IgogCiAvKioKICAqIFRoZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2UgaXMgdGhl
IGludGVyZmFjZSB0byBhIFtYXUhUTUwKICAqIGlmcmFtZSBlbGVtZW50LgogICoKICAqIFRoaXMg
aW50ZXJmYWNlIGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lm
aWNhdGlvbjoKICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgog
ICogd2l0aCBjaGFuZ2VzIGZyb20gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgV0hBVFdHIEhUTUwgc3Bl
Y2lmaWNhdGlvbjoKICAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvCiAgKi8KIAotW3NjcmlwdGFibGUsIHV1aWQoZDRlODcwYmQtNDUyYy00ODYwLWI5
M2MtZjRlZTAwYmEzM2Y2KV0KK1tzY3JpcHRhYmxlLCB1dWlkKDUyZjYyNDRiLWIxZjUtNGY0Yy04
ZmYzLTdlMTQ2MzE2ZjQxMSldCiBpbnRlcmZhY2UgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgOiBu
c0lET01IVE1MRWxlbWVudAogewogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBhbGlnbjsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgZnJhbWVCb3Jk
ZXI7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGhlaWdodDsKICAgICAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbG9uZ0Rlc2M7CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbkhlaWdodDsKICAgICAgICAgICAgYXR0cmli
dXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luV2lkdGg7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmcgICAgICAgIG5hbWU7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIHNjcm9sbGluZzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc3Jj
OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB3aWR0aDsKICAgLy8gSW50
cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTURvY3Vt
ZW50ICAgY29udGVudERvY3VtZW50OwogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NV2luZG93
ICAgICBjb250ZW50V2luZG93OwogCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01ET01TZXR0
YWJsZVRva2VuTGlzdCBzYW5kYm94OwogCiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBp
ZnJhbWUgZWxlbWVudHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0
byBiZSBwcmVzZW50CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3Vi
IGRvY3VtZW50IHRvIGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRw
czovL3dpa2kubW96aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkK
ICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVu
OwogfTsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3Jj
L25zV2luZG93V2F0Y2hlci5jcHAgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVy
L3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRv
d3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVu
dHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcApAQCAtNjAzLDE2ICs2MDMs
MzMgQEAgbnNXaW5kb3dXYXRjaGVyOjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAg
aWYgKCFuZXdEb2NTaGVsbEl0ZW0pIHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3Bl
biB1cCBhIG5ldyB3aW5kb3cgb3Vyc2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJv
dmlkZXIgZm9yIG9uZS4gIEluIGVpdGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmln
aHQKICAgICAvLyBuYW1lIG9uIGl0LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAg
ICAvLyBJZiB0aGUgcGFyZW50IHRyeWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94
ZWQsCisgICAgLy8gdGhpcyBpcyBub3QgYWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlm
IChhUGFyZW50KSB7CisgICAgICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAg
ICAgYVBhcmVudC0+R2V0RG9jdW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBu
c0NPTVB0cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKwor
ICAgICAgaWYgKGRvYykgeworICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAg
ICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgICAgIGlmIChz
YW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAg
ICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0K
KwogICAgIC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHByb3Zp
ZGVyIGZvciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3BlbmluZyBh
IGRpYWxvZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8vIGlm
IHdlJ3JlIG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNocm9t
ZSBmbGFncyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVXaW4g
PSBkb19RdWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNocm9t
ZVdpbiAmJgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNI
Uk9NRV9NT0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93
c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>606927</attachid>
            <date>2012-03-17 19:21:39 -0700</date>
            <delta_ts>2012-03-27 13:55:25 -0700</delta_ts>
            <desc>iframe sandbox tests - navigation v3</desc>
            <filename>iframe_sandbox_tests_navigation</filename>
            <type>text/plain</type>
            <size>17739</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgM2ZhZmU0OWM5ZTIxMzE4ZmZhMWJjY2UzYTAz
Yzg0MTgxZjc4YWZmYwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBuYXZpZ2F0aW9uCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFr
ZWZpbGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yOTMsMTYgKzI5Mywy
OSBAQCBfVEVTVF9GSUxFUyA9IFwKIAkJZmlsZV9mdWxsc2NyZWVuLWVzYy1leGl0Lmh0bWwgXAog
CQlmaWxlX2Z1bGxzY3JlZW4tZXNjLWV4aXQtaW5uZXIuaHRtbCBcCiAJCWZpbGVfZnVsbHNjcmVl
bi1yb2xsYmFjay5odG1sIFwKIAkJdGVzdF9saV9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRtbCBc
CiAJCXRlc3Rfb2xfYXR0cmlidXRlc19yZWZsZWN0aW9uLmh0bWwgXAogCQl0ZXN0X2J1ZzY1MTk1
Ni5odG1sIFwKIAkJdGVzdF9idWc2OTQ1MDMuaHRtbCBcCiAJCXRlc3Rfb2JqZWN0X3BsdWdpbl9u
YXYuaHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbi5odG1sIFwKKwkJZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
Mi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmNC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1s
IFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmNy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5odG1sIFwKKwkJ
ZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9u
YXZpZ2F0aW9uX3N0YXJ0Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25f
cGFzcy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCBc
CiAJCSQoTlVMTCkKIAogX0JST1dTRVJfVEVTVF9GSUxFUyA9IFwKIAkJYnJvd3Nlcl9idWc2NDk3
NzguanMgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sIFwKIAkJZmlsZV9idWc2NDk3NzguaHRtbF5o
ZWFkZXJzXiBcCiAJCSQoTlVMTCkKIApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmMS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBIVE1MPgor
PGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBm
b3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4
dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0
Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30s
ICdhbmNob3InKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+CisgIEkg
YW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCisgIAorICA8YSBocmVmPSJmaWxlX2lm
cmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sP2lmXzEiIHRhcmdldD0iX3NlbGYiIGlk
PSdhbmNob3InPgorPC9ib2R5PgorPC9odG1sPgorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2RfaWYyLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfZF9pZjIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5o
dG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0
bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0
cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVz
dCgpIHsKKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsKK30KKzwv
c2NyaXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGgg
J2FsbG93LXNjcmlwdHMnCisgICAgCisgIDxpZnJhbWUgbmFtZT0iZm9vIiBzcmM9ImZpbGVfaWZy
YW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAi
PjwvaWZyYW1lPgorICAKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9u
X3Bhc3MuaHRtbD9pZjIiIHRhcmdldD0nZm9vJyBpZD0nYW5jaG9yJz4KKzwvYm9keT4KKzwvaHRt
bD4KKyAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjMuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgor
PC9oZWFkPgorPGJvZHk+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCisg
ICAgCisgIDxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzQiIHNyYz0iZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZy
YW1lPgorPC9ib2R5PgorPC9odG1sPgorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2RfaWY0Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZF9pZjQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sCkBA
IC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEg
Y2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+Cisg
IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1w
bGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNj
cmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsK
KyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsKK30KKzwvc2NyaXB0
PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93
LXNjcmlwdHMnCisgICAgCisgIDxhIGhyZWY9ImZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlv
bl9mYWlsLmh0bWwiIHRhcmdldD0nX3BhcmVudCcgaWQ9J2FuY2hvcic+Cis8L2JvZHk+Cis8L2h0
bWw+CisgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRtbCBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cisg
IDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4K
KyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3Qv
RXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0
aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBzZW5kTW91c2VFdmVudCh7
dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRv
VGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1l
LW9yaWdpbicKKyAgICAKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9u
X2ZhaWwuaHRtbCIgdGFyZ2V0PSdzaWJsaW5nJyBpZD0nYW5jaG9yJz4KKzwvYm9keT4KKzwvaHRt
bD4KKyAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNi5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjYuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgor
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9F
dmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRp
b24vamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIHNlbmRNb3VzZUV2ZW50KHt0
eXBlOidjbGljayd9LCAnYW5jaG9yJyk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9U
ZXN0KCkiPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworICAgIAorICA8
YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwiIHRhcmdldD0nX3NlbGYnIGlk
PSdhbmNob3InPgorPC9ib2R5PgorPC9odG1sPgorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2RfaWY3Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfZF9pZjcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNy5o
dG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0
bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0
cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0
aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBjb25zb2xlLmxvZygiKioq
KiBmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwiKTsKKyAgd2luZG93LnBhcmVudC5va193
cmFwcGVyKGZhbHNlLCAiYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2hlbiBuYXZpZ2F0ZWQgc2hvdWxk
IHN0aWxsIE5PVCBiZSBzYW1lLW9yaWdpbiB3aXRoIGl0cyBwYXJlbnQiKTsKK30KKzwvc2NyaXB0
PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93
LXNjcmlwdHMnCis8L2JvZHk+Cis8L2h0bWw+CisgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjguaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9kX2lmOC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY4Lmh0
bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRs
ZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3Rz
L1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRp
b24vamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIGNvbnNvbGUubG9nKCJIRUxM
TyBJRl84Iik7CisJd2luZG93LnBhcmVudC5tb2RpZnlfaWZfOCgpOworfQorPC9zY3JpcHQ+Cis8
Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2Ny
aXB0cycgYW5kICdhbGxvdy1zYW1lLW9yaWdpbicgdGhlIGZpcnN0IHRpbWUgSSBhbSBsb2FkZWQs
IGFuZAorCXdpdGggJ2FsbG93LXNjcmlwdHMnIHRoZSBzZWNvbmQgdGltZQorPC9ib2R5PgorPC9o
dG1sPgorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY5Lmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjkuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOS5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
ICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+
Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rp
b24gZG9UZXN0KCkgeworICBjb25zb2xlLmxvZygiSEVMTE8gSUZfOSIpOworCXdpbmRvdy5wYXJl
bnQubW9kaWZ5X2lmXzkoKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+
CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnIGFuZCAnYWxsb3ctc2FtZS1v
cmlnaW4nIHRoZSBmaXJzdCB0aW1lIEkgYW0gbG9hZGVkLCBhbmQKKwl3aXRoICdhbGxvdy1zYW1l
LW9yaWdpbicgdGhlIHNlY29uZCB0aW1lCis8L2JvZHk+Cis8L2h0bWw+CisgICAKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwKQEAgLTAsMCAr
MSwxNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0
PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KK0ZBSUwKKzwv
Ym9keT4KKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgd2luZG93LnRvcC5w
b3N0TWVzc2FnZSh7b2s6IGZhbHNlLCBkZXNjOiAidGhpcyBuYXZpZ2F0aW9uIHNob3VsZCBOT1Qg
YmUgYWxsb3dlZCBieSBhIHNhbmRib3hlZCBkb2N1bWVudCJ9LCAiKiIpOworICB9Cis8L3Njcmlw
dD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbApAQCAtMCwwICsxLDE2IEBA
Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04
Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0
eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNz
cyIvPgorPC9oZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGRvU3R1ZmYoKSB7CisgIHdpbmRvdy50
b3AucG9zdE1lc3NhZ2Uoe29rOiB0cnVlLCBkZXNjOiAidGhpcyBuYXZpZ2F0aW9uIHNob3VsZCBi
ZSBhbGxvd2VkIGJ5IGEgc2FuZGJveGVkIGRvY3VtZW50In0sICIqIik7Cit9Cis8L3NjcmlwdD4K
Kzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KK1BBU1MKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZp
Z2F0aW9uX3N0YXJ0Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X25hdmlnYXRpb25fc3RhcnQuaHRtbApAQCAtMCwwICsxLDExIEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRl
c3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9
InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgor
PGJvZHk+CitJIGFtIGp1c3QgYSBub3JtYWwgSFRNTCBkb2N1bWVudCwgcHJvYmFibHkgY29udGFp
bmVkIGluIGEgc2FuZGJveGVkIGlmcmFtZQorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb24u
aHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9uYXZp
Z2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbi5odG1s
CkBAIC0wLDAgKzEsMTY5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPCEtLQoraHR0cHM6
Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1wbGVtZW50
IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzCistLT4KKzxoZWFkPgorICA8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0IC0gbmF2aWdh
dGlvbjwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3Jj
PSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpz
Ij48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJl
Zj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0i
YXBwbGljYXRpb24vamF2YXNjcmlwdCI+CisvKiogVGVzdCBmb3IgQnVnIDM0MTYwNCAtIEltcGxl
bWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAqKi8KKy8qKiBOYXZpZ2F0
aW9uIHRlc3RzICoqLworCisvLyBhIHBvc3RNZXNzYWdlIGhhbmRsZXIgdGhhdCBpcyB1c2VkIGJ5
IHNhbmRib3hlZCBpZnJhbWVzIHdpdGhvdXQKKy8vICdhbGxvdy1zYW1lLW9yaWdpbicvb3RoZXIg
d2luZG93cyB0byBjb21tdW5pY2F0ZSBwYXNzL2ZhaWwgYmFjayB0byB0aGlzIG1haW4gcGFnZS4K
Ky8vIGl0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0IGxpa2Uge29rOiB0cnVl
L2ZhbHNlLCBkZXNjOiAKKy8vIDxkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhl
biBmb3J3YXJkcyB0byBvaygpCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJl
Y2VpdmVNZXNzYWdlLCBmYWxzZSk7ICAKKyAgICAgIAordmFyIHRlc3RQYXNzZXNSZWNlaXZlZCA9
IDA7CisgICAgICAKK2Z1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KSAgCit7IAorICBva193
cmFwcGVyKGV2ZW50LmRhdGEub2ssIGV2ZW50LmRhdGEuZGVzYyk7Cit9ICAKKwordmFyIGNvbXBs
ZXRlZFRlc3RzID0gMDsKK3ZhciBwYXNzZWRUZXN0cyA9IDA7CisKK2Z1bmN0aW9uIG9rX3dyYXBw
ZXIocmVzdWx0LCBkZXNjKSB7CisgIG9rKHJlc3VsdCwgZGVzYyk7CisKKyAgY29tcGxldGVkVGVz
dHMrKzsKKworICBpZiAocmVzdWx0KSB7CisgICAgcGFzc2VkVGVzdHMrKzsKKyAgfQorICAKKyAg
Ly8gUkVWSUVXIDogaWYgb25lIG9mIHRoZXNlIHRlc3RzIGZhaWxzIGFuZCB0aGlzIGlzbid0IGNh
bGxlZAorICAvLyB0aGlzIG1lYW5zIHRoaXMgdGVzdCB3aWxsIGhhbmcgdW50aWwgdGhlIHRpbWUg
b3V0IGhhcHBlbnMgOigKKyAgLy8gYWR2aWNlIG9uIGJldHRlciB3YXlzIHRvIHN5bmNocm9uaXpl
IHRoaW5ncyBhcHByZWNpYXRlZCAhCisgIC8vIEFsc28sIG1hbnkgb2YgdGhlIHRlc3RzIGZvciBu
YXZpZ2F0aW9uIGZhaWwgaWYgYmFkIChjYWxsIG9rKGZhbHNlLCAuLi4pCisgIC8vIHNvIGhvdyBk
byB3ZSB0ZWxsIGlmIHRoZXNlIGhhdmUgY29tcGxldGVkIC0gaXMgdXNpbmcgb25Mb2FkIGVub3Vn
aCA/CisgIGlmIChjb21wbGV0ZWRUZXN0cyA9PSAyKSB7CisgICAgb2socGFzc2VkVGVzdHMgPT0g
MiwgIlRoZXJlIGFyZSAyIG5hdmlnYXRpb24gdGVzdHMgdGhhdCBzaG91bGQgcGFzcyIpOworICAK
KyAgICBTaW1wbGVUZXN0LmZpbmlzaCgpOworICB9Cit9CisKK2Z1bmN0aW9uIGRvVGVzdCgpIHsg
CisgIFNpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0RmluaXNoKCk7CisgIC8vIHBhc3NlcyBpZiBn
b29kCisgIC8vIDEpIEEgc2FuZGJveGVkIGlmcmFtZSBpcyBhbGxvd2VkIHRvIG5hdmlnYXRlIGl0
c2VsZgorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxLmh0bWwgd2hpY2gg
aGFzICdhbGxvdy1zY3JpcHRzJyBhbmQgbmF2aWdhdGVzIHRvCisgIC8vIGZpbGVfaWZyYW1lX3Nh
bmRib3hfbmF2aWdhdGlvbl9wYXNzLmh0bWwpLgorIAorICAvLyBwYXNzZXMgaWYgZ29vZAorICAv
LyAyKSBBIHNhbmRib3hlZCBpZnJhbWUgaXMgYWxsb3dlZCB0byBuYXZpZ2F0ZSBpdHMgY2hpbGRy
ZW4sIGV2ZW4gaWYgdGhleSBhcmUgc2FuZGJveGVkCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1l
X3NhbmRib3hfZF9pZjIuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnLCBpdCBuYXZpZ2F0
ZXMgYSBjaGlsZAorICAvLyBpZnJhbWUgY29udGFpbmluZyBmaWxlX2lmcmFtZV9zYW5kYm94X25h
dmlnYXRpb25fc3RhcnQuaHRtbCB0byBmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFz
cy5odG1sKS4KKyAKKyAgLy8gZmFpbHMgaWYgYmFkCisgIC8vIDMpIEEgc2FuZGJveGVkIGlmcmFt
ZSBpcyBub3QgYWxsb3dlZCB0byBuYXZpZ2F0ZSBpdHMgYW5jZXN0b3IgCisgIC8vIChkb25lIGJ5
IGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjQuaHRtbCBjb250YWluZWQgd2l0aGluIGZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjMuaHRtbCwKKyAgLy8gaXQgYXR0ZW1wdHMgdG8gbmF2aWdhdGUgZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sIHRvIGZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdh
dGlvbl9mYWlsLmh0bWwpLgorCisgIC8vIGZhaWxzIGlmIGJhZAorICAvLyA0KSBBIHNhbmRib3hl
ZCBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gbmF2aWdhdGUgaXRzIHNpYmxpbmcKKyAgLy8gKGRv
bmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1sIHdoaWNoIGhhcyAnYWxsb3cgc2Ny
aXB0cyBhbGxvdy1zYW1lLW9yaWdpbicKKyAgLy8gYW5kIGF0dGVtcHRzIHRvIG5hdmlnYXRlIGZp
bGVfaWZyYW1lX25hdmlnYXRpb25fc3RhcnQuaHRtbCBjb250YWluZWQgaW4gaWZfc2libGluZyBv
biB0aGlzCisgIC8vIHBhZ2UgdG8gZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX2ZhaWwu
aHRtbCkuCisgCisgIC8vIGZhaWxzIGlmIGJhZAorICAvLyA1KSBXaGVuIGEgbGluayBpcyBjbGlj
a2VkIGluIGEgc2FuZGJveGVkIGlmcmFtZSwgdGhlIGRvY3VtZW50IG5hdmlnYXRlZCB0byBpcyBz
YW5kYm94ZWQKKyAgLy8gdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGRvY3VtZW50IGFuZCBpcyBu
b3Qgc2FtZSBvcmlnaW4gd2l0aCBwYXJlbnQgZG9jdW1lbnQKKyAgLy8gKGRvbmUgYnkgZmlsZV9p
ZnJhbWVfc2FuZGJveF9kX2lmNi5odG1sIHdoaWNoIHNpbXVsYXRlcyBhIGxpbmsgY2xpY2sgYW5k
IG5hdmlnYXRlcworICAvLyB0byBmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwgd2hpY2gg
YXR0ZW1wdHMgdG8gY2FsbCBiYWNrIGludG8gaXRzIHBhcmVudCkuCisJCisJLy8gZmFpbHMgaWYg
YmFkCisJLy8gNikgQW4gaWZyYW1lIChpZl84KSBoYXMgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmln
aW4gYWxsb3ctc2NyaXB0cyIsIHRoZSBzYW5kYm94ZWQgZG9jdW1lbnQgCisJLy8gKGZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZl84Lmh0bWwpIHRoYXQgaXQgY29udGFpbnMgYWNjZXNzZXMgaXRzIHBh
cmVudCAodGhpcyBmaWxlKSBhbmQgcmVtb3ZlcyAKKwkvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIGFu
ZCB0aGVuIHRyaWdnZXJzIGEgcmVsb2FkLiAKKwkvLyBUaGUgZG9jdW1lbnQgc2hvdWxkIG5vdCBi
ZSBhYmxlIHRvIGFjY2VzcyBpdHMgcGFyZW50ICh0aGlzIGZpbGUpLgorICAKKyAgLy8gZmFpbHMg
aWYgYmFkCisJLy8gNykgQW4gaWZyYW1lIChpZl85KSBoYXMgc2FuZGJveD0iYWxsb3ctc2FtZS1v
cmlnaW4gYWxsb3ctc2NyaXB0cyIsIHRoZSBzYW5kYm94ZWQgZG9jdW1lbnQgCisJLy8gKGZpbGVf
aWZyYW1lX3NhbmRib3hfZF9pZl85Lmh0bWwpIHRoYXQgaXQgY29udGFpbnMgYWNjZXNzZXMgaXRz
IHBhcmVudCAodGhpcyBmaWxlKSBhbmQgcmVtb3ZlcyAKKwkvLyAnYWxsb3ctc2NyaXB0cycgYW5k
IHRoZW4gdHJpZ2dlcnMgYSByZWxvYWQuIAorCS8vIFRoZSBkb2N1bWVudCBzaG91bGQgbm90IGJl
IGFibGUgdG8gcnVuIGEgc2NyaXB0IGFuZCBhY2Nlc3MgaXRzIHBhcmVudCAodGhpcyBmaWxlKS4K
K30KKword2luZG93Lm1vZGlmaWVkX2lmXzggPSBmYWxzZTsKKworZnVuY3Rpb24gcmVsb2FkX2lm
XzgoKSB7CisgIHZhciBpZl84ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmXzgnKTsKKyAg
aWZfOC5zcmMgPSAnZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5odG1sJzsKK30KKworZnVuY3Rp
b24gbW9kaWZ5X2lmXzgoKSB7CisJLy8gSWYgdGhpcyBpcyB0aGUgc2Vjb25kIHRpbWUgdGhpcyBo
YXMgYmVlbiBjYWxsZWQKKwkvLyB0aGF0J3MgYSBmYWlsZWQgdGVzdCAoYWxsb3ctc2FtZS1vcmln
aW4gd2FzIHJlbW92ZWQKKwkvLyB0aGUgZmlyc3QgdGltZSkuCisJaWYgKHdpbmRvdy5tb2RpZmll
ZF9pZl84KSB7CisJCW9rX3dyYXBwZXIoZmFsc2UsICJhbiBzYW5kYm94ZWQgaWZyYW1lIGZyb20g
d2hpY2ggJ2FsbG93LXNhbWUtb3JpZ2luJyB3YXMgcmVtb3ZlZCBzaG91bGQgbm90IGJlIGFibGUg
dG8gYWNjZXNzIGl0cyBwYXJlbnQiKTsKKworCQkvLyBuZWVkIHRvIHJldHVybiBoZXJlIHNpbmNl
IHdlIGVuZCB1cCBpbiBhbiBpbmZpbml0ZSBsb29wIG90aGVyd2lzZQorCQlyZXR1cm47CisJfQor
CisJdmFyIGlmXzggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfOCcpOworCXdpbmRvdy5t
b2RpZmllZF9pZl84ID0gdHJ1ZTsKKworCWlmXzguc2FuZGJveC52YWx1ZSA9ICdhbGxvdy1zY3Jp
cHRzJzsKKworCXNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYV9idXR0b24nKTsKK30K
Kword2luZG93Lm1vZGlmaWVkX2lmXzkgPSBmYWxzZTsKKworZnVuY3Rpb24gcmVsb2FkX2lmXzko
KSB7CisgIGNvbnNvbGUubG9nKCJOVU1CRVIgTklORSIpOworICB2YXIgaWZfOSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpZl85Jyk7CisgIGlmXzkuc3JjID0gJ2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZF9pZjkuaHRtbCc7Cit9CisKK2Z1bmN0aW9uIG1vZGlmeV9pZl85KCkgeworICBjb25zb2xl
LmxvZygibW9kaWZpZWRfaWZfOSA6ICIgKyB3aW5kb3cubW9kaWZpZWRfaWZfOSk7CisJCisJLy8g
SWYgdGhpcyBpcyB0aGUgc2Vjb25kIHRpbWUgdGhpcyBoYXMgYmVlbiBjYWxsZWQKKwkvLyB0aGF0
J3MgYSBmYWlsZWQgdGVzdCAoYWxsb3ctc2NyaXB0cyB3YXMgcmVtb3ZlZAorCS8vIHRoZSBmaXJz
dCB0aW1lKS4KKwlpZiAod2luZG93Lm1vZGlmaWVkX2lmXzkpIHsKKwkJb2tfd3JhcHBlcihmYWxz
ZSwgImFuIHNhbmRib3hlZCBpZnJhbWUgZnJvbSB3aGljaCAnYWxsb3ctc2NyaXB0cycgc2hvdWxk
IGJlIHJlbW92ZWQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyBpdHMgcGFyZW50IHZpYSBh
IHNjcmlwdCIpOworCisJCS8vIG5lZWQgdG8gcmV0dXJuIGhlcmUgc2luY2Ugd2UgZW5kIHVwIGlu
IGFuIGluZmluaXRlIGxvb3Agb3RoZXJ3aXNlCisJCXJldHVybjsKKwl9CisKKwl2YXIgaWZfOSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl85Jyk7CisJd2luZG93Lm1vZGlmaWVkX2lmXzkg
PSB0cnVlOworCisJaWZfOS5zYW5kYm94LnZhbHVlID0gJ2FsbG93LXNhbWUtb3JpZ2luJzsKKwor
CXNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYV9idXR0b24yJyk7Cit9CisKKzwvc2Ny
aXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+Cis8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0i
aHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0Ij5Nb3pp
bGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZv
ciBJRlJBTUVzCis8cCBpZD0iZGlzcGxheSI+PC9wPgorPGRpdiBpZD0iY29udGVudCI+Cis8aWZy
YW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIGlkPSJpZl8xIiBzcmM9ImZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzxpZnJh
bWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzIiIHNyYz0iZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmMi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPGlmcmFt
ZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMyIgc3JjPSJmaWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWYzLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+Cis8aWZyYW1l
IHNhbmRib3g9ImFsbG93X3NjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4iIGlkPSJpZl81IiBzcmM9
ImZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48
L2lmcmFtZT4KKzxpZnJhbWUgaWQ9ImlmX3NpYmxpbmciIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJv
eF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+
Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93X3NjcmlwdHMiIGlkPSJpZl82IiBzcmM9ImZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjYuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4K
KzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyIgaWQ9Imlm
XzgiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0
aD0iMTAiPjwvaWZyYW1lPgorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxv
dy1zY3JpcHRzIiBpZD0iaWZfOSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY5Lmh0bWwi
IGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+Cis8L2Rpdj4KKzxpbnB1dCB0eXBlPSdi
dXR0b24nIGlkPSJhX2J1dHRvbiIgb25jbGljaz0ncmVsb2FkX2lmXzgoKSc+Cis8aW5wdXQgdHlw
ZT0nYnV0dG9uJyBpZD0iYV9idXR0b24yIiBvbmNsaWNrPSdyZWxvYWRfaWZfOSgpJz4KKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>606928</attachid>
            <date>2012-03-17 19:28:36 -0700</date>
            <delta_ts>2012-03-28 10:49:41 -0700</delta_ts>
            <desc>WIP - iframe sandbox v7</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>46677</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZDBkMTNmMDliZTQ0NjNlNGE4Y2NhZWJkODk5
MTU2ZGY3YWJiM2VjMQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtODQwLDE2ICs4NDAsMjcgQEAgcHVibGljOgogICAvKioKICAg
ICogR2V0IHRoZSBsb2NhbGl6ZWQgc3RyaW5nIG5hbWVkIHxhS2V5fCBpbiBwcm9wZXJ0aWVzIGZp
bGUgfGFGaWxlfC4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBHZXRMb2NhbGl6ZWRTdHJpbmco
UHJvcGVydGllc0ZpbGUgYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogYUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1hQSURMU3RyaW5nJiBhUmVzdWx0KTsKIAogICAvKioKKyAgICogQSBoZWxwZXIgZnVuY3Rp
b24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAg
ICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1
c2VkIGludGVybmFsbHkuCisgICAqCisgICAqIEBwYXJhbSBhQXR0cmlidXRlIAl0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisgICAqIEByZXR1cm4gCQkJdGhlIHNldCBvZiBmbGFn
cworICAgKi8KKyAgc3RhdGljIFBSVWludDMyIFBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Mo
Y29uc3QgbnNBU3RyaW5nJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNhbmRib3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBw
YXJhbWV0ZXJzIGdpdmVuKSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAg
ICogcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5z
cmVzdWx0IEZvcm1hdExvY2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQ
YXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIg
YVBhcmFtc0xlbmd0aCwKQEAgLTE5NzYsMzUgKzE5ODcsMzcgQEAgcHVibGljOgogICAgKiBmcm9t
IHRoZSBkb2N1bWVudCBpdCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVS
SUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAK
ICAgLyoqCiAgICAqIFNldCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUg
Z2l2ZW4gY2hhbm5lbCwgaWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2Yg
YUNoYW5uZWwuICBhUHJpbmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJv
dXRCbGFuayBpcyB0cnVlLCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmlu
Y2lwYWwgc2V0IHVwIG9uIGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBp
dC4gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9u
IHRoZSBjaGFubmVsLCBldmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAg
ICogZnJvbSB0aGUgY2hhbm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRo
ZSBwcmluY2lwYWwgd2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwu
CiAgICAqLwogICBzdGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFM
b2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFu
bmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBh
VVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0
QmxhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFi
b3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3du
ZXIgPSBmYWxzZSk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBh
QmluYXJ5RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNl
NjRTdHJpbmcpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFz
Y2lpU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRh
KTsKIAogICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IHBhc3Nl
ZCBpbiBwYXJhbWV0ZXIgaGFzIHRoZSBhdXRvY29tcGxldGUKLSAgICogZnVuY3Rpb25uYWxpdHkg
ZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9ybSBvd25lci4KKyAgICog
ZnVuY3Rpb25hbGl0eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3Jt
IG93bmVyLgogICAgKiBOT1RFOiB0aGUgY2FsbGVyIGhhcyB0byBtYWtlIHN1cmUgYXV0b2NvbXBs
ZXRlIG1ha2VzIHNlbnNlIGZvciB0aGUKICAgICogZWxlbWVudCdzIHR5cGUuCiAgICAqCiAgICAq
IEBwYXJhbSBhSW5wdXQgdGhlIGlucHV0IGVsZW1lbnQgdG8gY2hlY2suIE5PVEU6IGFJbnB1dCBj
YW4ndCBiZSBudWxsLgogICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgaGFz
IGF1dG9jb21wbGV0ZSBlbmFibGVkLgogICAgKi8KICAgc3RhdGljIGJvb2wgSXNBdXRvY29tcGxl
dGVFbmFibGVkKG5zSURPTUhUTUxJbnB1dEVsZW1lbnQqIGFJbnB1dCk7CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNJRG9jdW1lbnQuaAotLS0gYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysr
IGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCkBAIC0xMTksMTggKzExOSwxOCBA
QCBjbGFzcyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xhc3MgTGluazsKIGNsYXNzIEVs
ZW1lbnQ7CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNwYWNlIG1vemlsbGEKIAogI2Rl
ZmluZSBOU19JRE9DVU1FTlRfSUlEIFwKLXsgMHgyODNlYzI3ZCwgMHg1YjIzLCAweDQ5YjIsIFwN
Ci0gIHsgMHg5NCwgMHhkOSwgMHg5LCAweGI1LCAweGRiLCAweDQ1LCAweDMwLCAweDczIH0gfQ0K
K3sgMHg1N2ZlNDRhZSwgMHg2NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAw
eGE3LCAweDQzLCAweDI4LCAweGJlLCAweDg2IH0gfQogCiAKIC8vIEZsYWcgZm9yIEFkZFN0eWxl
U2hlZXQoKS4KICNkZWZpbmUgTlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFMT0cgICAgICAgICAgICAg
ICAgKDEgPDwgMCkKIAogLy8gRW51bSBmb3IgcmVxdWVzdGluZyBhIHBhcnRpY3VsYXIgdHlwZSBv
ZiBkb2N1bWVudCB3aGVuIGNyZWF0aW5nIGEgZG9jCiBlbnVtIERvY3VtZW50Rmxhdm9yIHsKICAg
RG9jdW1lbnRGbGF2b3JMZWdhY3lHdWVzcywgLy8gY29tcGF0IHdpdGggb2xkIGNvZGUgdW50aWwg
bWFkZSBIVE1MNS1jb21wbGlhbnQKQEAgLTQ1NSwxNyArNDU1LDI2IEBAIHB1YmxpYzoKICAgICog
Y2FsbGVycyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhY3Rpb24gYXMgbmVlZGVkIGlmIHRoZXkgd2Fu
dCB0aGlzCiAgICAqIGNoYW5nZSB0byBhY3R1YWxseSBjaGFuZ2UgYW55dGhpbmcgaW1tZWRpYXRl
bHkuCiAgICAqIEBzZWUgbnNCaWRpVXRpbHMuaAogICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9u
cyhQUlVpbnQzMiBhQmlkaU9wdGlvbnMpCiAgIHsKICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9w
dGlvbnM7CiAgIH0KLSAgCisKKyAgLyoqCisgICAqIEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3Ig
dGhpcyBkb2N1bWVudC4KKyAgICogQHNlZSBuc0lEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJs
ZSBmbGFncworICAgKi8KKyAgUFJVaW50MzIgU2FuZGJveEZsYWdzKCkgY29uc3QKKyAgeworICAg
IHJldHVybiBtU2FuZGJveEZsYWdzOworICB9CisKICAgLyoqCiAgICAqIEFjY2VzcyBIVFRQIGhl
YWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAgKiBzb3VyY2Vz
LCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCiAgIHZpcnR1YWwgdm9pZCBHZXRIZWFkZXJE
YXRhKG5zSUF0b20qIGFIZWFkZXJGaWVsZCwgbnNBU3RyaW5nJiBhRGF0YSkgY29uc3QgPSAwOwog
ICB2aXJ0dWFsIHZvaWQgU2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhaGVhZGVyRmllbGQsIGNvbnN0
IG5zQVN0cmluZyYgYURhdGEpID0gMDsKIAogICAvKioKQEAgLTE4MDUsMTYgKzE4MTQsMjEgQEAg
cHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1bWVudCBpcyB0cnVlLCBtT3JpZ2luYWxE
b2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAgIC8vIGRvY3VtZW50LgogICBuc0NPTVB0
cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7CiAKICAgLy8gVGhlIGJpZGkgb3B0aW9u
cyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBiaXRmaWVsZCBtZWFucyBpcwogICAvLyBk
ZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50MzIgbUJpZGlPcHRpb25zOwogCisgIC8v
IFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVudC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFs
dWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRoZQorICAvLyBhc3NvY2lhdGVkIElGUkFN
RSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3RlbnQuIFRoZXNlIGFyZSBzZXQg
YXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRhYmxlIC0gc2VlIG5zSURvY1NoZWxsLmlk
bCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICBQUlVpbnQzMiBtU2FuZGJveEZsYWdzOworCiAg
IG5zQ1N0cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnNDU3RyaW5nIG1Db250
ZW50VHlwZTsKIHByb3RlY3RlZDoKIAogICAvLyBUaGUgZG9jdW1lbnQncyBzZWN1cml0eSBpbmZv
CiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VjdXJpdHlJbmZvOwogCmRpZmYgLS1naXQgYS9j
b250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnND
b250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3Bw
CisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC05MTYsMTYgKzkx
Niw2MiBAQCBuc0NvbnRlbnRVdGlsczo6R2V0UGFyc2VyU2VydmljZSgpCiAgICAgbnNyZXN1bHQg
cnYgPSBDYWxsR2V0U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwgJnNQYXJzZXJTZXJ2aWNlKTsK
ICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNlclNlcnZpY2UgPSBuc251bGw7
CiAgICAgfQogICB9CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNlOwogfQorLyoqCisgKiBBIGhl
bHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmlidXRlIChvZiBhbiA8aWZy
YW1lPiBvcgorICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBv
ZiBmbGFncyB1c2VkIGludGVybmFsbHkuCisgKgorICogQHBhcmFtIGFBdHRyaWJ1dGUgICAgdGhl
IHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJldHVybiAgICAgICAgICAgICAg
dGhlIHNldCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRpbHM6OlBhcnNlU2Fu
ZGJveEF0dHJpYnV0ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBzYW5kYm94QXR0clZhbHVlKQor
eworICAvLyBJZiB0aGVyZSdzIGEgc2FuZGJveCBhdHRyaWJ1dGUgYXQgYWxsIChhbmQgdGhlcmUg
aXMgaWYgdGhpcyBpcyBiZWluZworICAvLyBjYWxsZWQpLCBzdGFydCBvZmYgYnkgc2V0dGluZyBh
bGwgdGhlIHJlc3RyaWN0aW9uIGZsYWdzLgorICBQUlVpbnQzMiBvdXQgPSBuc0lEb2NTaGVsbDo6
U0FOREJPWEVEX05BVklHQVRJT04gfAorICAgIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfVE9QTEVW
RUxfTkFWSUdBVElPTiB8CisgICAgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9QTFVHSU5TIHwgbnNJ
RG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4gfAorICAgIG5zSURvY1NoZWxsOjpTQU5EQk9YRURf
Rk9STVMgfCBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFMgfAorICAgIG5zSURvY1NoZWxs
OjpTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTOworCisgIGlmICghc2FuZGJveEF0dHJWYWx1
ZS5Jc0VtcHR5KCkpIHsKKyAgICAvLyBUaGUgc2VwYXJhdG9yIG9wdGlvbmFsIGZsYWcgaXMgdXNl
ZCBiZWNhdXNlIHRoZSBIVE1MNSBzcGVjIHNheXMgYW55CisgICAgLy8gd2hpdGVzcGFjZSBpcyBv
ayBhcyBhIHNlcGFyYXRvciwgd2hpY2ggaXMgd2hhdCB0aGlzIGRvZXMuCisgICAgSFRNTFNwbGl0
T25TcGFjZXNUb2tlbml6ZXIgdG9rZW5pemVyKHNhbmRib3hBdHRyVmFsdWUsICcgJywKKyAgICAg
IG5zQ2hhclNlcGFyYXRlZFRva2VuaXplclRlbXBsYXRlPG5zQ29udGVudFV0aWxzOjpJc0hUTUxX
aGl0ZXNwYWNlPjo6U0VQQVJBVE9SX09QVElPTkFMKTsKKworICAgIHdoaWxlICh0b2tlbml6ZXIu
aGFzTW9yZVRva2VucygpKSB7CisgICAgICBuc0RlcGVuZGVudFN1YnN0cmluZyB0b2tlbiA9IHRv
a2VuaXplci5uZXh0VG9rZW4oKTsKKworICAgICAgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xp
dGVyYWwoImFsbG93LXNjcmlwdHMiKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpT
QU5EQk9YRURfU0NSSVBUUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxz
TGl0ZXJhbCgiYWxsb3ctc2FtZS1vcmlnaW4iKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1No
ZWxsOjpTQU5EQk9YRURfT1JJR0lOOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VF
cXVhbHNMaXRlcmFsKCJhbGxvdy1mb3JtcyIpKSB7CisgICAgICAgIG91dCAmPSB+bnNJRG9jU2hl
bGw6OlNBTkRCT1hFRF9GT1JNUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1
YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7CisgICAgICAgIC8vIGFsbG93LXNjcmlwdHMg
cmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRTIGFuZAorICAgICAgICAvLyBTQU5EQk9YRURf
QVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9Y
RURfU0NSSVBUUzsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX0FVVE9N
QVRJQ19GRUFUVVJFUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0
ZXJhbCgiYWxsb3ctdG9wLW5hdmlnYXRpb24iKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1No
ZWxsOjpTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTjsKKyAgICAgIH0KKyAgICB9CisgIH0K
KworICByZXR1cm4gb3V0OworfQogCiAjaWZkZWYgTU9aX1hURgogbnNJWFRGU2VydmljZSoKIG5z
Q29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFzWFRGU2VydmljZSkgewog
ICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZzWFRGU2Vy
dmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKQEAgLTYzNzgsMTcgKzY0MjQsMTggQEAg
bnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJpdHlDb250ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8gc3RhdGljCiBib29sCiBuc0NvbnRlbnRV
dGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFGb3JjZU93bmVyKQogewog
ICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBjaGFubmVsLCBidXQgb25seSBmb3IgY2hh
bm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBjb250ZXh0
LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25nIHRoYXQgdGhlIG93bmVyIGlzIGlnbm9y
ZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1cHBsaWVkKSB1bmxlc3MgdGhlIFVSSSBp
cyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6YmxhbmsuCiAgIC8vIFhYWDogSWYgdGhpcyBp
cyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJzIGZvciB3aGF0IG93bmVycwpAQCAtNjM5
NiwyMyArNjQ0MywyNyBAQCBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJp
CiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVsbDo6TG9hZFVSSSB3aGVyZSB3ZSBmYWxs
IGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRoZSBvd25lciBpZiBjYWxsZWQgZnJvbSBj
aHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAgdmVyeSB3cm9uZyBpZiB0aGlzIGNvZGUg
Y2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhhdAogICAvLyAgICAgIGNhbid0IHByb3Zp
ZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAgIC8vCiAgIC8vICAgICAgKEN1cnJlbnRs
eSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4gdGhleSBhcmUgY3JlYXRlZCEKICAgLy8g
ICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3VsZCBiZSBiYWQhKQogICAvLworICAvLyBJ
ZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIgd2lsbCBiZSBzZXQsIGV2ZW4gZm9yIGEg
Y2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0cyBvd24gc2VjdXJpdHkgY29udGV4dC4g
VGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1FCisgIC8vIHNhbmRib3ggYXR0cmlidXRl
LCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFuZCBpdHMgZG9jdW1lbnQpIHRvCisgIC8v
IGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFsLgogICBib29sIGluaGVyaXQ7CiAgIC8v
IFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dCB0byByZXR1cm4gc3VjY2VzcyBm
b3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24ndCBjYWxsIE5TX0lzQWJvdXRCbGFu
aygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBjb25kaXRpb24gbmVlZHMgdG8gbWF0
Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQgd2hlcmUKICAgLy8gd2UncmUg
Y2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRoZSBvd25lci4KLSAgaWYgKE5TX1NV
Q0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYmCi0g
ICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0Qmxhbmso
YVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChOU19TVUNDRUVERUQoVVJJSW5oZXJp
dHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgorICAgICAgKGluaGVyaXQgfHwg
KGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpKSkgewogICAg
IGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7
CiAgIH0KIAogICAvLwogICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8g
SWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0
IG1heSBuZWVkCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIv
Y29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25z
RG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTIz
OTgsMTYgKzIzOTgsMjUgQEAgbnNEb2N1bWVudDo6U3RhcnREb2N1bWVudExvYWQoY29uc3QgY2hh
cgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgnOycsIHNlbWljb2xvbiwgZW5kKTsKICAgICBTZXRD
b250ZW50VHlwZUludGVybmFsKFN1YnN0cmluZyhzdGFydCwgc2VtaWNvbG9uKSk7CiAgIH0KIAog
ICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhhQ2hhbm5lbCk7CiAKICAgbUNoYW5uZWwgPSBhQ2hh
bm5lbDsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRvY3No
ZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdzCisgIC8vIHRvIHRoZSBkb2N1bWVudC4gVGhlc2Ug
YXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgaGVyZS4KKyAgbnNDT01QdHI8bnNJRG9jU2hl
bGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNvbnRhaW5lcik7CisKKyAgaWYgKGRv
Y1NoZWxsKSB7CisgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2FuZGJveEZsYWdzKCZt
U2FuZGJveEZsYWdzKTsKKyAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworICB9CisKICAg
bnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAK
ICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNEb2N1bWVudDo6SW5pdENTUCgpCmRp
ZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9i
YXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVM
b2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTEx
NSwxNiArMTE1LDE4IEBACiAjaW5jbHVkZSAibW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNs
dWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIK
ICNpbmNsdWRlICJtb3ppbGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlv
dXQvUmVuZGVyRnJhbWVQYXJlbnQuaCIKIAogI2luY2x1ZGUgImpzYXBpLmgiCiAKKyNpbmNsdWRl
ICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCisKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXll
cnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5b3V0OwogdHlwZWRlZiBGcmFtZU1ldHJp
Y3M6OlZpZXdJRCBWaWV3SUQ7CiAKIGNsYXNzIG5zQXN5bmNEb2NTaGVsbERlc3Ryb3llciA6IHB1
YmxpYyBuc1J1bm5hYmxlCiB7CkBAIC00NzEsMTYgKzQ3Myw2NCBAQCBuc0ZyYW1lTG9hZGVyOjpS
ZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3QgdG8gYmUgc2FmZSwgcmVjaGVjayB1
cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQpOwogICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsTG9hZEluZm8+IGxvYWRJbmZvOwog
ICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9BZGRSZWZzKGxvYWRJbmZvKSk7CiAg
IE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9GQUlMVVJFKTsKIAorICAvLyBJcyB0
aGlzIGFuIDxpZnJhbWU+IHdpdGggYSBzYW5kYm94IGF0dHJpYnV0ZSBvciBhIHBhcmVudCB3aGlj
aCBpcworICAvLyBzYW5kYm94ZWQgPworICBuc0hUTUxJRnJhbWVFbGVtZW50ICogaWZyYW1lID0K
KyAgICBuc0hUTUxJRnJhbWVFbGVtZW50OjpGcm9tQ29udGVudChtT3duZXJDb250ZW50KTsKKwor
ICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworCisgIGlmIChpZnJhbWUpIHsKKyAgICBzYW5k
Ym94RmxhZ3MgPSBpZnJhbWUtPkdldFNhbmRib3hGbGFncygpOworCisgICAgUFJVaW50MzIgcGFy
ZW50U2FuZGJveEZsYWdzID0gMDsKKworICAgIC8vIEdldCB0aGUgcGFyZW50J3Mgc2FuZGJveCBm
bGFncywgdGhleSdyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZQorICAgIC8vIGZyYW1lIGJl
aW5nIGxvYWRlZCBuZWVkcyB0byBiZSBzYW5kYm94ZWQuCisgICAgbnNDT01QdHI8bnNJRG9jU2hl
bGxUcmVlSXRlbT4gcGFyZW50RG9jU2hlbGxJdGVtOworICAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
VHJlZUl0ZW0+IGN1ckRvY1NoZWxsSXRlbSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG1Eb2NTaGVsbCk7
CisKKyAgICBpZiAoTlNfU1VDQ0VFREVEKGN1ckRvY1NoZWxsSXRlbS0+R2V0UGFyZW50KGdldHRl
cl9BZGRSZWZzKHBhcmVudERvY1NoZWxsSXRlbSkpKSkgeworICAgICAgbnNDT01QdHI8bnNJRG9j
dW1lbnQ+IHBhcmVudERvYyA9IGRvX0dldEludGVyZmFjZShwYXJlbnREb2NTaGVsbEl0ZW0pOwor
CisgICAgICBpZiAocGFyZW50RG9jKSB7CisgICAgICAgIHBhcmVudFNhbmRib3hGbGFncyA9IHBh
cmVudERvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHNhbmRi
b3hGbGFncyB8fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgIGlmIChwYXJlbnRTYW5kYm94
RmxhZ3MpIHsKKyAgICAgICAgLy8gVGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0cmljdGlvbnMs
IG5vdCByZW1vdmUgdGhlbS4KKyAgICAgICAgc2FuZGJveEZsYWdzIHw9IHBhcmVudFNhbmRib3hG
bGFnczsKKyAgICAgIH0KKworICAgICAgbURvY1NoZWxsLT5TZXRTYW5kYm94RmxhZ3Moc2FuZGJv
eEZsYWdzKTsKKworICAgICAgLy8gU2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGluZyBmb3Igc2Ny
aXB0cyBhbmQgcGx1Z2lucyBhcyBzcGVjaWZpZWQuCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYg
bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgICAgIG1Eb2NTaGVsbC0+U2V0
QWxsb3dKYXZhc2NyaXB0KGZhbHNlKTsKKyAgICAgIH0KKworICAgICAgaWYgKHNhbmRib3hGbGFn
cyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfUExVR0lOUykgeworICAgICAgICBtRG9jU2hlbGwt
PlNldEFsbG93UGx1Z2lucyhmYWxzZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gSWYg
dGhpcyBpcyBhbiA8aWZyYW1lPiBhbmQgaXQncyBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9y
aWdpbgorICAvLyB3ZSB3aWxsIHNldCBpdCB1cCB3aXRoIGEgbnVsbCBwcmluY2lwYWwgbGF0ZXIg
aW4gbnNEb2NTaGVsbDo6RG9VUklMb2FkLgorICAvLyBXZSBkbyBpdCB0aGVyZSB0byBjb3JyZWN0
bHkgc2FuZGJveCBjb250ZW50IHRoYXQgd2FzIGxvYWRlZCBpbnRvCisgIC8vIHRoZSBpZnJhbWUg
dmlhIG90aGVyIG1ldGhvZHMgdGhhbiB0aGUgc3JjIGF0dHJpYnV0ZS4KICAgLy8gV2UnbGwgdXNl
IG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZSBkb2N1bWVudCBsb2FkZWQgaW5zaWRlIHVz
LiAgVGhpcwogICAvLyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvIHByZXZlbnQgWFNTIGF0
dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbgogICAvLyBzdWJmcmFtZXMhCiAgIGxvYWRJbmZv
LT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOwogCiAgIG5zQ09NUHRy
PG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgp
LT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1Mo
cnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmggYi9j
b250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNH
a0F0b21MaXN0LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaApAQCAtOTMs
MTcgKzkzLDIxIEBAIEdLX0FUT00oYWN0dWF0ZSwgImFjdHVhdGUiKQogR0tfQVRPTShhZGRyZXNz
LCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVyLCAiYWZ0ZXIiKQogR0tfQVRPTShhZnRlcl9lbmQs
ICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRlcl9zdGFydCwgImFmdGVyX3N0YXJ0IikKIEdLX0FU
T00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9NKGFsaW5rLCAiYWxpbmsiKQogR0tfQVRPTShhbGws
ICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50cywgImFsbG93ZXZlbnRzIikKK0dLX0FUT00oYWxs
b3dmb3JtcywgImFsbG93LWZvcm1zIikKIEdLX0FUT00oYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMs
ICJhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucyIpCitHS19BVE9NKGFsbG93c2FtZW9yaWdpbiwgImFs
bG93LXNhbWUtb3JpZ2luIikKK0dLX0FUT00oYWxsb3dzY3JpcHRzLCAiYWxsb3ctc2NyaXB0cyIp
CitHS19BVE9NKGFsbG93dG9wbmF2aWdhdGlvbiwgImFsbG93LXRvcC1uYXZpZ2F0aW9uIikKIEdL
X0FUT00oYWxsb3d1bnRydXN0ZWQsICJhbGxvd3VudHJ1c3RlZCIpCiBHS19BVE9NKGFsdCwgImFs
dCIpCiBHS19BVE9NKGFsdGVybmF0ZSwgImFsdGVybmF0ZSIpCiBHS19BVE9NKGFsd2F5cywgImFs
d2F5cyIpCiBHS19BVE9NKGFuY2VzdG9yLCAiYW5jZXN0b3IiKQogR0tfQVRPTShhbmNlc3Rvck9y
U2VsZiwgImFuY2VzdG9yLW9yLXNlbGYiKQogR0tfQVRPTShfYW5kLCAiYW5kIikKIEdLX0FUT00o
YW55LCAiYW55IikKQEAgLTg3NywxNiArODgxLDE3IEBAIEdLX0FUT00ocm93c3BhbiwgInJvd3Nw
YW4iKQogR0tfQVRPTShycCwgInJwIikKIEdLX0FUT00ocnQsICJydCIpCiBHS19BVE9NKHJ0bCwg
InJ0bCIpCiBHS19BVE9NKHJ1YnksICJydWJ5IikKIEdLX0FUT00ocnVsZSwgInJ1bGUiKQogR0tf
QVRPTShydWxlcywgInJ1bGVzIikKIEdLX0FUT00ocywgInMiKQogR0tfQVRPTShzYW1wLCAic2Ft
cCIpCitHS19BVE9NKHNhbmRib3gsICJzYW5kYm94IikKIEdLX0FUT00oc2JhdHRyLCAic2JhdHRy
IikKIEdLX0FUT00oc2NhbGUsICJzY2FsZSIpCiBHS19BVE9NKHNjYW4sICJzY2FuIikKIEdLX0FU
T00oc2NoZW1lLCAic2NoZW1lIikKIEdLX0FUT00oc2NvcGUsICJzY29wZSIpCiBHS19BVE9NKHNj
b3BlZCwgInNjb3BlZCIpCiBHS19BVE9NKHNjcmVlbiwgInNjcmVlbiIpCiBHS19BVE9NKHNjcmVl
blgsICJzY3JlZW5YIikKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxGb3JtRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVs
ZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVu
dC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNw
cApAQCAtNjg0LDE3ICs2ODQsMjUgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNl
dChuc0V2ZQogICAgIHJldHVybiBEb1Jlc2V0KCk7CiAgIH0KIAogICBpZiAoTlNfRk9STV9TVUJN
SVQgPT0gYU1lc3NhZ2UpIHsKICAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgbm90IGluIGEg
ZG9jdW1lbnQuCiAgICAgaWYgKCFkb2MpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAgICB9Ci0g
ICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3Jl
IGluIGEgc2FuZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1Ym1pdAorICAgIC8vIGlzIGRpc2FibGVk
LgorICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisKKyAg
ICBpZiAoIShzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TKSkgewor
ICAgICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAgfQorCisgICAgcmV0dXJuIE5TX09L
OwogICB9CiAKICAgTU9aX0FTU0VSVChmYWxzZSk7CiAgIHJldHVybiBOU19PSzsKIH0KIAogbnNy
ZXN1bHQKIG5zSFRNTEZvcm1FbGVtZW50OjpEb1Jlc2V0KCkKQEAgLTE2NzYsMTYgKzE2ODQsMjgg
QEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkNoZWNrVmFsaWRGb3JtU3VibWlzcwogICAgKiBUT0RPOiB0
aGUgY2hlY2sgZm9yIG9ic2VydmVyIHNob3VsZCBiZSByZW1vdmVkIGxhdGVyIHdoZW4gSFRNTDUg
Rm9ybXMgd2lsbAogICAgKiBiZSBzcHJlYWQgZW5vdWdoIGFuZCBhdXRob3JzIHdpbGwgYXNzdW1l
IGZvcm1zIGNhbid0IGJlIHN1Ym1pdHRlZCB3aGVuCiAgICAqIGludmFsaWQuIFNlZSBidWcgNTg3
NjcxLgogICAgKi8KIAogICBOU19BU1NFUlRJT04oIUhhc0F0dHIoa05hbWVTcGFjZUlEX05vbmUs
IG5zR2tBdG9tczo6bm92YWxpZGF0ZSksCiAgICAgICAgICAgICAgICAiV2Ugc2hvdWxkbid0IGJl
IHRoZXJlIGlmIG5vdmFsaWRhdGUgaXMgc2V0ISIpOwogCisgIC8vIERvbid0IGRvIHZhbGlkYXRp
b24gZm9yIGEgZm9ybSBzdWJtaXQgZG9uZSBieSBhIHNhbmRib3hlZCBkb2N1bWVudCB0aGF0Cisg
IC8vIGRvZXNuJ3QgaGF2ZSAnYWxsb3ctZm9ybXMnLCB0aGUgc3VibWl0IHdpbGwgaGF2ZSBiZWVu
IGJsb2NrZWQgYW5kIHRoZQorICAvLyBIVE1MNSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IHZhbGlk
YXRlIGluIHRoaXMgY2FzZS4KKyAgbnNJRG9jdW1lbnQqIGRvYyA9IEdldEN1cnJlbnREb2MoKTsK
KyAgaWYgKGRvYykgeworICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZs
YWdzKCk7CisKKyAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9G
T1JNUykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisgICAgICAgICAgICAgICAK
ICAgLy8gV2hlbiAuc3VibWl0KCkgaXMgY2FsbGVkIGFFdmVudCA9IG5zbnVsbCBzbyB3ZSBjYW4g
cmVseSBvbiB0aGF0IHRvIGtub3cgaWYKICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGUgdmFsaWRp
dHkgb2YgdGhlIGZvcm0uCiAgIG5zQ09NUHRyPG5zSU9ic2VydmVyU2VydmljZT4gc2VydmljZSA9
CiAgICAgbW96aWxsYTo6c2VydmljZXM6OkdldE9ic2VydmVyU2VydmljZSgpOwogICBpZiAoIXNl
cnZpY2UpIHsKICAgICBOU19XQVJOSU5HKCJObyBvYnNlcnZlciBzZXJ2aWNlIGF2YWlsYWJsZSEi
KTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNI
VE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTMzLDgxICszMywzMyBAQAogICogdGhlIHByb3Zpc2lv
bnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlcgogICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUg
TEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVk
ZSAibW96aWxsYS9VdGlsLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5o
IgotI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0lE
T01Eb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCi0jaW5jbHVk
ZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRl
ICJuc0lEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1
ZGUgIm5zRE9NRXJyb3IuaCIKLSNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNT
dHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCi1jbGFz
cyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1l
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1l
bnQKLXsKLXB1YmxpYzoKLSAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5z
SU5vZGVJbmZvPiBhTm9kZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9t
OjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIp
OwotICB2aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7Ci0KLSAgLy8gbnNJU3VwcG9ydHMK
LSAgTlNfREVDTF9JU1VQUE9SVFNfSU5IRVJJVEVECi0KLSAgLy8gbnNJRE9NTm9kZQotICBOU19G
T1JXQVJEX05TSURPTU5PREUobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5z
SURPTUVsZW1lbnQKLSAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFt
ZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1MRWxlbWVudAotICBOU19GT1JXQVJEX05TSURP
TUhUTUxFTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01I
VE1MSUZyYW1lRWxlbWVudAotICBOU19ERUNMX05TSURPTUhUTUxJRlJBTUVFTEVNRU5UCi0KLSAg
Ly8gbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLSAgTlNfREVDTF9OU0lET01HRVRTVkdET0NVTUVOVAot
Ci0gIC8vIG5zSUNvbnRlbnQKLSAgdmlydHVhbCBib29sIFBhcnNlQXR0cmlidXRlKFBSSW50MzIg
YU5hbWVzcGFjZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBh
QXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJp
bmcmIGFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUm
IGFSZXN1bHQpOwotICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBu
c0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKLSAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0
ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OwotCi0gIHZpcnR1YWwg
bnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQp
IGNvbnN0OwotICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKLX07Ci0K
LQogTlNfSU1QTF9OU19ORVdfSFRNTF9FTEVNRU5UX0NIRUNLX1BBUlNFUihJRnJhbWUpCiAKLQog
bnNIVE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVk
PG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJzZXIpCiAgIDogbnNHZW5lcmljSFRNTEZyYW1l
RWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFyc2VyKQogewogfQogCiBuc0hUTUxJRnJhbWVFbGVt
ZW50Ojp+bnNIVE1MSUZyYW1lRWxlbWVudCgpCiB7CisgIGlmIChtU2FuZGJveFRva2VuTGlzdCkK
KyAgICBtU2FuZGJveFRva2VuTGlzdC0+RHJvcFJlZmVyZW5jZSgpOwogfQogCiAKIE5TX0lNUExf
QUREUkVGX0lOSEVSSVRFRChuc0hUTUxJRnJhbWVFbGVtZW50LG5zR2VuZXJpY0VsZW1lbnQpCiBO
U19JTVBMX1JFTEVBU0VfSU5IRVJJVEVEKG5zSFRNTElGcmFtZUVsZW1lbnQsbnNHZW5lcmljRWxl
bWVudCkKIAogRE9NQ0lfTk9ERV9EQVRBKEhUTUxJRnJhbWVFbGVtZW50LCBuc0hUTUxJRnJhbWVF
bGVtZW50KQogCkBAIC0xNTAsMTYgKzEwMiwyOCBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRD
b250ZW50V2luZG93KG5zCiB9CiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6
OkdldFNWR0RvY3VtZW50KG5zSURPTURvY3VtZW50ICoqYVJlc3VsdCkKIHsKICAgcmV0dXJuIEdl
dENvbnRlbnREb2N1bWVudChhUmVzdWx0KTsKIH0KIAorTlNfSU1FVEhPRElNUAorbnNIVE1MSUZy
YW1lRWxlbWVudDo6R2V0U2FuZGJveChuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCoqIGFTYW5k
Ym94KQoreworICBpZiAoIW1TYW5kYm94VG9rZW5MaXN0KSB7CisgICAgbVNhbmRib3hUb2tlbkxp
c3QgPSBuZXcgbnNET01TZXR0YWJsZVRva2VuTGlzdCh0aGlzLCBuc0drQXRvbXM6OnNhbmRib3gp
OworICB9CisKKyAgTlNfQUREUkVGKCphU2FuZGJveCA9IG1TYW5kYm94VG9rZW5MaXN0KTsKKwor
ICByZXR1cm4gTlNfT0s7Cit9CisKIGJvb2wKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0
cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpCiB7CiAgIGlmIChhTmFtZXNwYWNl
SUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKICAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRv
bXM6Om1hcmdpbndpZHRoKSB7CkBAIC0xNzgsMTYgKzE0MiwyMiBAQCBuc0hUTUxJRnJhbWVFbGVt
ZW50OjpQYXJzZUF0dHJpYnV0ZShQUkluCiAgICAgICByZXR1cm4gUGFyc2VGcmFtZWJvcmRlclZh
bHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQogICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tB
dG9tczo6c2Nyb2xsaW5nKSB7CiAgICAgICByZXR1cm4gUGFyc2VTY3JvbGxpbmdWYWx1ZShhVmFs
dWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OmFs
aWduKSB7CiAgICAgICByZXR1cm4gUGFyc2VBbGlnblZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAg
ICAgfQorICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6c2FuZGJveCkgeworICAgICAg
Ly8gVGhlIHNhbmRib3ggYXR0cmlidXRlIG5lZWRzIHRvIGJlIHBhcnNlZCBhcyBhbiBhdG9tIGFy
cmF5IHNvCisgICAgICAvLyBpdCBjYW4gYmUgZXhwb3NlZCBhcyBhIERPTVNldHRhYmxlVG9rZW5M
aXN0LgorICAgICAgYVJlc3VsdC5QYXJzZUF0b21BcnJheShhVmFsdWUpOworICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQogICB9CiAKICAgcmV0dXJuIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6
OlBhcnNlQXR0cmlidXRlKGFOYW1lc3BhY2VJRCwgYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZSwgYVJlc3VsdCk7CiB9
CiAKIHN0YXRpYyB2b2lkCiBNYXBBdHRyaWJ1dGVzSW50b1J1bGUoY29uc3QgbnNNYXBwZWRBdHRy
aWJ1dGVzKiBhQXR0cmlidXRlcywKQEAgLTI2OCw4ICsyMzgsMzcgQEAgbnNIVE1MSUZyYW1lRWxl
bWVudDo6SXNBdHRyaWJ1dGVNYXBwZWQoYwogCiAKIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMK
IG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0
CiB7CiAgIHJldHVybiAmTWFwQXR0cmlidXRlc0ludG9SdWxlOwogfQogCituc3Jlc3VsdAorbnNI
VE1MSUZyYW1lRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lB
dG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
QXR0clZhbHVlKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFOb3RpZnkpCit7CisgIGlmIChhTmFtZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5h
bWVTcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2
YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUsIGFuZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwK
KyAgICAvLyBzZXQgaXRzIHNhbmRib3ggZmxhZ3MgYXBwcm9wcmlhdGVseS4KKyAgICBpZiAobUZy
YW1lTG9hZGVyKSB7CisgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jc2hlbGwgPSBtRnJh
bWVMb2FkZXItPkdldEV4aXN0aW5nRG9jU2hlbGwoKTsKKworICAgICAgaWYgKGRvY3NoZWxsKSB7
CisgICAgICAgIFBSVWludDMyIG5ld0ZsYWdzID0gMDsKKyAgICAgICAgLy8gSWYgYSBOVUxMIGFW
YWx1ZSBpcyBwYXNzZWQgaW4sIHdlIHdhbnQgdG8gY2xlYXIgdGhlIHNhbmRib3ggZmxhZ3MKKyAg
ICAgICAgLy8gd2hpY2ggd2Ugd2lsbCBkbyBieSBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAg
aWYgKGFWYWx1ZSkgeworICAgICAgICAgIG5zQXV0b1N0cmluZyBzdHJWYWx1ZTsKKyAgICAgICAg
ICBhVmFsdWUtPlRvU3RyaW5nKHN0clZhbHVlKTsKKyAgICAgICAgICBuZXdGbGFncyA9IG5zQ29u
dGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKAorICAgICAgICAgICAgc3Ry
VmFsdWUpOworICAgICAgICB9CisgICAgICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3
RmxhZ3MpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1l
bnQ6OkFmdGVyU2V0QXR0cihhTmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOb3RpZnkpOworCit9CmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxJRnJhbWVFbGVtZW50LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRh
Yi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0g
Ki8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAx
LjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJl
IHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0
aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2Fy
ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5z
ZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGll
bnQgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENv
ZGUgaXMKKyAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogUG9ydGlv
bnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5
OAorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0
aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwi
KSwKKyAqIG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAy
LjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9u
cyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRo
b3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhl
IExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICog
ZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhl
bSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRo
ZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9u
cyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBM
R1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNsdWRl
ICJtb3ppbGxhL1V0aWwuaCIKKworI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50Lmgi
CisjaW5jbHVkZSAibnNHZW5lcmljSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50Lmgi
CisjaW5jbHVkZSAibnNHa0F0b21zLmgiCisjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJuc0RPTUVycm9yLmgiCisjaW5j
bHVkZSAibnNSdWxlRGF0YS5oIgorI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRl
ICJuc0RPTVNldHRhYmxlVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIK
KworY2xhc3MgbnNIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJhbWVF
bGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUhUTUxJRnJh
bWVFbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUdldFNW
R0RvY3VtZW50Cit7CitwdWJsaWM6CisgIG5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRS
ZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvLAorICAgICAgICAgICAgICAgICAgICAgIG1vemls
bGE6OmRvbTo6RnJvbVBhcnNlciBhRnJvbVBhcnNlciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZST01f
UEFSU0VSKTsKKyAgdmlydHVhbCB+bnNIVE1MSUZyYW1lRWxlbWVudCgpOworCisgIC8vIG5zSVN1
cHBvcnRzCisgIE5TX0RFQ0xfSVNVUFBPUlRTX0lOSEVSSVRFRAorCisgIC8vIG5zSURPTU5vZGUK
KyAgTlNfRk9SV0FSRF9OU0lET01OT0RFKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKKwor
ICAvLyBuc0lET01FbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NRUxFTUVOVChuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NSFRNTEVsZW1lbnQKKyAgTlNfRk9SV0FS
RF9OU0lET01IVE1MRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8g
bnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKKyAgTlNfREVDTF9OU0lET01IVE1MSUZSQU1FRUxFTUVO
VAorCisgIC8vIG5zSURPTUdldFNWR0RvY3VtZW50CisgIE5TX0RFQ0xfTlNJRE9NR0VUU1ZHRE9D
VU1FTlQKKworICAvLyBuc0lDb250ZW50CisgIHZpcnR1YWwgYm9vbCBQYXJzZUF0dHJpYnV0ZShQ
UkludDMyIGFOYW1lc3BhY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
QXRvbSogYUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNBU3RyaW5nJiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0
clZhbHVlJiBhUmVzdWx0KTsKKyAgTlNfSU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1dGVNYXBwZWQo
Y29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CisgIHZpcnR1YWwgbnNNYXBSdWxlVG9B
dHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdDsKKworICB2
aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5vZGUgKiph
UmVzdWx0KSBjb25zdDsKKyAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xhc3NJbmZvKCk7
CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQs
IG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zQXR0clZhbHVlKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhTm90aWZ5KTsKKworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKSB7CisgICAgbnNB
dXRvU3RyaW5nIHNhbmRib3hBdHRyOworCisgICAgaWYgKEdldEF0dHIoa05hbWVTcGFjZUlEX05v
bmUsIG5zR2tBdG9tczo6c2FuZGJveCwgc2FuZGJveEF0dHIpKSB7CisgICAgICByZXR1cm4gbnND
b250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2FuZGJveEF0dHIpOwor
ICAgIH0KKworICAgIC8vIE5vIHNhbmRib3ggYXR0cmlidXRlLCBubyBzYW5kYm94IGZsYWdzLgor
ICAgIHJldHVybiAwOworICB9CisKKyAgc3RhdGljIG5zSFRNTElGcmFtZUVsZW1lbnQqIEZyb21D
b250ZW50KG5zSUNvbnRlbnQgKmFDb250ZW50KQorICB7CisgICAgaWYgKGFDb250ZW50LT5Jc0hU
TUwobnNHa0F0b21zOjppZnJhbWUpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG5zSFRNTElG
cmFtZUVsZW1lbnQqPihhQ29udGVudCk7CisgICAgcmV0dXJuIG5zbnVsbDsKKyAgfQorCitwcm90
ZWN0ZWQ6CisgIG5zUmVmUHRyPG5zRE9NU2V0dGFibGVUb2tlbkxpc3Q+ICBtU2FuZGJveFRva2Vu
TGlzdDsKK307CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERv
Y3VtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3Bw
Ci0tLSBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCisrKyBi
L2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCkBAIC0xMjY0LDE2
ICsxMjY0LDIxIEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3RyaW5nJiBhQ28KIHsK
ICAgYUNvb2tpZS5UcnVuY2F0ZSgpOyAvLyBjbGVhciBjdXJyZW50IGNvb2tpZSBpbiBjYXNlIHNl
cnZpY2UgZmFpbHM7CiAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gY29va2llIGlzbid0IGFu
IGVycm9yIGNvbmRpdGlvbi4KIAogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICBy
ZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3Jp
Z2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gcmVhZCBjb29raWVzCisgIC8vIGlzIHByb2hpYml0
ZWQuCisgIGlmIChtU2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4p
CisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisKICAgLy8gbm90IGhhdmlu
ZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNl
cnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJ
RCk7CiAgIGlmIChzZXJ2aWNlKSB7CiAgICAgLy8gR2V0IGEgVVJJIGZyb20gdGhlIGRvY3VtZW50
IHByaW5jaXBhbC4gV2UgdXNlIHRoZSBvcmlnaW5hbAogICAgIC8vIGNvZGViYXNlIGluIGNhc2Ug
dGhlIGNvZGViYXNlIHdhcyBjaGFuZ2VkIGJ5IFNldERvbWFpbgogICAgIG5zQ09NUHRyPG5zSVVS
ST4gY29kZWJhc2VVUkk7CiAgICAgTm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJl
ZnMoY29kZWJhc2VVUkkpKTsKIApAQCAtMTI5NCwxNiArMTI5OSwyMSBAQCBuc0hUTUxEb2N1bWVu
dDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTERvY3Vt
ZW50OjpTZXRDb29raWUoY29uc3QgbnNBU3RyaW5nJiBhQ29va2llKQogewogICBpZiAobURpc2Fi
bGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUg
ZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gd3JpdGUg
Y29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAmIG5zSURv
Y1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKQorICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJ
VFlfRVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJv
cgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShO
U19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSAmJiBtRG9jdW1lbnRV
UkkpIHsKICAgICBuc0NPTVB0cjxuc0lQcm9tcHQ+IHByb21wdDsKICAgICBuc0NPTVB0cjxuc1BJ
RE9NV2luZG93PiB3aW5kb3cgPSBHZXRXaW5kb3coKTsKICAgICBpZiAod2luZG93KSB7CiAgICAg
ICB3aW5kb3ctPkdldFByb21wdGVyKGdldHRlcl9BZGRSZWZzKHByb21wdCkpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25z
RG9jU2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9j
c2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcApAQCAtNzI3LDE2ICs3MjcsMTcgQEAgbnNEb2NTaGVs
bDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVTWV9GTEFHU19OT05FKSwKICAgICBt
QXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9XTiksCiAgICAgbUxvYWRUeXBlKDAp
LAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdpbkhlaWdodCgtMSksCiAgICAgbUl0
ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNUcmFuc0luZGV4KC0xKSwKICAgICBt
TG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hGbGFncygwKSwKICAgICBtQ3JlYXRl
ZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUpLAogICAgIG1BbGxvd1BsdWdpbnMo
dHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwKICAgICBtQWxsb3dNZXRhUmVkaXJl
Y3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwKICAgICBtQWxsb3dETlNQcmVmZXRj
aCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRydWUpLApAQCAtMjkwNywxNiArMjkw
OCw3MyBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pCiAgICAgICAg
ICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmRJ
dGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91bmRJdGVtIGhlcmUgZXZlbiBpZiBp
dCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0ZW0gc2luY2UgYWxsIHRoZSBuYW1l
cyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2Fz
ZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3IgZnVydGhlci4KIAorICAgICAgICAg
ICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwgd2UgbmVlZCB0byBkbyBzb21lIGV4
dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisKKyAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19HZXRJbnRlcmZhY2UoYU9y
aWdpbmFsUmVxdWVzdG9yKTsKKworICAgICAgICAgICAgaWYgKGRvYykgeworICAgICAgICAgICAg
ICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzKSB7CisgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gcm9vdDsKKyAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVJv
b3RUcmVlSXRlbShnZXR0ZXJfQWRkUmVmcyhyb290KSk7CisKKyAgICAgICAgICAgICAgICAvLyBJ
cyB0aGUgZm91bmQgaXRlbSBub3QgYSB0b3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBhbmQgbm90
IG91cnNlbGYgPworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHNlbGZBc0l0ZW0gPSBzdGF0aWNfY2FzdDxuc0lEb2NTaGVsbFRyZWVJdGVtICo+KHRoaXMpOwor
ICAgICAgICAgICAgICAgIGlmIChmb3VuZEl0ZW0gIT0gcm9vdCAmJiBmb3VuZEl0ZW0gIT0gc2Vs
ZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgYW4gYW5jZXN0b3Igb2Yg
dGhlIGZvdW5kSXRlbSA/CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNBbmNlc3RvciA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0
dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVt
LT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAgJiYgdG1wID09IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc0FuY2VzdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNBbmNlc3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm8sIHdlIGFyZSBub3QgYW4gYW5jZXN0b3IgYW5kIG91ciBkb2N1bWVudCBpcworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc2FuZGJveGVkLCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAg
ICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVG9w
IGxldmVsIGJyb3dzaW5nIGNvbnRleHQgLSBpcyBpdCBhbiBhbmNlc3RvciBvZiBvdXJzID8KKyAg
ICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAg
ICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsK
KworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG1wKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodG1wICYmIHRtcCA9PSBmb3VuZEl0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIGFuIGFuY2VzdG9yLCBhbmQgd2UgYXJlIHNhbmRib3hlZC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9wLW5hdmlnYXRpb24g
aXMgc2V0LCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVMX05BVklH
QVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB0bXAtPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAgICAgICAgcmV0dXJuIE5TX09LOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29raW5nCiAgICAgICAgIAogICAgIC8v
IEZpcnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAtNDk0MywxNiArNTAwMSwzMCBAQCBuc0RvY1No
ZWxsOjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hl
bGw6OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0Fw
cFRhYjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpT
ZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgbVNhbmRib3hGbGFn
cyA9IGFTYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAor
bnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFncykKK3sK
KyAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisK
K05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHkoYm9vbCBhVmlzaWJpbGl0
eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICByZXR1cm4gTlNfT0s7CiAg
ICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmlld2VyLT5TaG93KCk7CiAg
ICAgfQogICAgIGVsc2UgewpAQCAtODEzMiwxNiArODIwNCwyOSBAQCBuc0RvY1NoZWxsOjpJbnRl
cm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVl
SXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2luZG93VGFyZ2V0
LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMo
dGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiB0YXJnZXREb2NT
aGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRhcmdldERvY1NoZWxsKSB7
CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVudCBpcyBzYW5kYm94ZWQg
YW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRlL2xvYWQgYSBmcmFtZSBp
dCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAgICAgLy8gRmluZEl0ZW1X
aXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3IgdGhlIHRhcmdldAorICAg
ICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgb3BlbiBhIG5ldyB3
aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0aG91Z2guIENoZWNrIGlmIHdlIGFy
ZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYgc28uCisgICAgICAgICAgICBOU19FTlNV
UkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1JfRkFJTFVSRSk7CisgICAgICAgICAgICBu
c0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3VtZW50KCk7CisgICAgICAg
ICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICAgICAgc2FuZGJveEZsYWdz
ID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBu
c0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgcmV0dXJu
IE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG5zQ09NUHRy
PG5zSURPTVdpbmRvdz4gd2luID0KICAgICAgICAgICAgICAgICBkb19HZXRJbnRlcmZhY2UoR2V0
QXNTdXBwb3J0cyh0aGlzKSk7CiAgICAgICAgICAgICBOU19FTlNVUkVfVFJVRSh3aW4sIE5TX0VS
Uk9SX05PVF9BVkFJTEFCTEUpOwogCiAgICAgICAgICAgICBuc0RlcGVuZGVudFN0cmluZyBuYW1l
KGFXaW5kb3dUYXJnZXQpOwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiBuZXdX
aW47CiAgICAgICAgICAgICBydiA9IHdpbi0+T3BlbihFbXB0eVN0cmluZygpLCAvLyBVUkwgdG8g
bG9hZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgICAgICAgICAgLy8gd2luZG93
IG5hbWUKQEAgLTg5MTMsMTggKzg5OTgsMzIgQEAgbnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVS
SSAqIGFVUkksCiAgICAgICAgIH0KICAgICAgICAgLy8gU2V0IHRoZSByZWZlcnJlciBleHBsaWNp
dGx5CiAgICAgICAgIGlmIChhUmVmZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJlcikgewogICAgICAg
ICAgICAgLy8gUmVmZXJyZXIgaXMgY3VycmVubHkgb25seSBzZXQgZm9yIGxpbmsgY2xpY2tzIGhl
cmUuCiAgICAgICAgICAgICBodHRwQ2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJlZmVycmVyVVJJKTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmlu
Y2lwYWwoZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKSk7Ci0gICAgbnNDb250ZW50VXRpbHM6OlNl
dFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlKTsKKyAg
ICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFsOworCisgICAgLy8gSWYgdGhl
IGNvbnRlbnQgYmVpbmcgbG9hZGVkIHNob3VsZCBiZSBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRv
IG9yaWdpbgorICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG51bGwgcHJpbmNpcGFsIGhl
cmUsIGFuZCB0aGVuIHRlbGwKKyAgICAvLyBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3du
ZXIgdG8gZm9yY2UgaXQgdG8gYmUgc2V0IGFzIHRoZQorICAgIC8vIGNoYW5uZWwgb3duZXIuCisg
ICAgaWYgKG1TYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikgewor
ICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL251
bGxwcmluY2lwYWw7MSIpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBOb3Qgc2FuZGJveGVkIC0g
d2UgYWxsb3cgdGhlIGNvbnRlbnQgdG8gYXNzdW1lIGl0cyBuYXR1cmFsIG93bmVyLgorICAgICAg
b3duZXJQcmluY2lwYWwgPSBkb19RdWVyeUludGVyZmFjZShhT3duZXIpOworICAgIH0KKworICAg
IG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5l
bCwgYVVSSSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht
U2FuZGJveEZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpOwogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0
Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAg
IGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0
IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5u
ZWwtPgogICAgICAgICAgICAgU2V0RXhlY3V0aW9uUG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVY
RUNVVEVfTk9STUFMKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NT
aGVsbC5oIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKLS0tIGEvZG9jc2hlbGwvYmFzZS9u
c0RvY1NoZWxsLmgKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKQEAgLTc4MSwxNiAr
NzgxLDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBDcmVhdGUoKSBpcyBjYWxsZWQsIHRoZSB0eXBl
IGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAg
ICAgbUl0ZW1UeXBlOwogCiAgICAgLy8gSW5kZXggaW50byB0aGUgU0hUcmFuc2FjdGlvbiBsaXN0
LCBpbmRpY2F0aW5nIHRoZSBwcmV2aW91cyBhbmQgY3VycmVudAogICAgIC8vIHRyYW5zYWN0aW9u
IGF0IHRoZSB0aW1lIHRoYXQgdGhpcyBEb2NTaGVsbCBiZWdpbnMgdG8gbG9hZAogICAgIFBSSW50
MzIgICAgICAgICAgICAgICAgICAgIG1QcmV2aW91c1RyYW5zSW5kZXg7CiAgICAgUFJJbnQzMiAg
ICAgICAgICAgICAgICAgICAgbUxvYWRlZFRyYW5zSW5kZXg7CiAKKyAgICBQUlVpbnQzMiAgICAg
ICAgICAgICAgICAgICBtU2FuZGJveEZsYWdzOworCiAgICAgYm9vbCAgICAgICAgICAgICAgICAg
ICAgICAgbUNyZWF0ZWQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93U3Vi
ZnJhbWVzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1BsdWdpbnM7CiAg
ICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93SmF2YXNjcmlwdDsKICAgICBib29s
ICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzOwogICAgIGJvb2wgICAg
ICAgICAgICAgICAgICAgICAgIG1BbGxvd0ltYWdlczsKICAgICBib29sICAgICAgICAgICAgICAg
ICAgICAgICBtQWxsb3dETlNQcmVmZXRjaDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAg
ICBtQWxsb3dXaW5kb3dDb250cm9sOwpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NT
aGVsbC5pZGwgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAotLS0gYS9kb2NzaGVsbC9i
YXNlL25zSURvY1NoZWxsLmlkbAorKysgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbApA
QCAtNjcsMTcgKzY3LDE3IEBAIGludGVyZmFjZSBuc0lSZXF1ZXN0OwogaW50ZXJmYWNlIG5zSVNI
RW50cnk7CiBpbnRlcmZhY2UgbnNJTGF5b3V0SGlzdG9yeVN0YXRlOwogaW50ZXJmYWNlIG5zSVNl
Y3VyZUJyb3dzZXJVSTsKIGludGVyZmFjZSBuc0lET01TdG9yYWdlOwogaW50ZXJmYWNlIG5zSVBy
aW5jaXBhbDsKIGludGVyZmFjZSBuc0lXZWJCcm93c2VyUHJpbnQ7CiBpbnRlcmZhY2UgbnNJVmFy
aWFudDsKIAotW3NjcmlwdGFibGUsIHV1aWQoREJEMzlDMjEtNTc4OC00QzY4LTlEOTctMEZDRUUy
ODlCQ0UxKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDliMjgzMzM3LTA5N2QtNGZhOC1hMmRhLTkxNjMx
OGVhZjgyOCldCiBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogewogICAvKioK
ICAgICogTG9hZHMgYSBnaXZlbiBVUkkuICBUaGlzIHdpbGwgZ2l2ZSBwcmlvcml0eSB0byBsb2Fk
aW5nIHRoZSByZXF1ZXN0ZWQgVVJJCiAgICAqIGluIHRoZSBvYmplY3QgaW1wbGVtZW50aW5nCXRo
aXMgaW50ZXJmYWNlLiAgSWYgaXQgY2FuJ3QgYmUgbG9hZGVkIGhlcmUKICAgICogaG93ZXZlciwg
dGhlIFVSTCBkaXNwYXRjaGVyIHdpbGwgZ28gdGhyb3VnaCBpdHMgbm9ybWFsIHByb2Nlc3Mgb2Yg
Y29udGVudAogICAgKiBsb2FkaW5nLgogICAgKgpAQCAtNjA5LDkgKzYwOSw2NyBAQCBpbnRlcmZh
Y2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogICAgKiB3aGVuIGl0IGluaXRpYWxpemVzIHRo
ZSBkb2NzaGVsbC4KICAgICoKICAgICogSWYgc28sIHRoaXMgZG9jc2hlbGwgc2hvdWxkIGFjdCBs
aWtlIGEgY2hyb21lL2NvbnRlbnQgYm91bmRhcnkgZm9yIHRoZQogICAgKiBwdXJwb3NlcyBvZiB3
aW5kb3cudG9wIGFuZCB3aW5kb3cucGFyZW50LgogICAgKgogICAgKiBTZWUgYWxzbyBuc0lNb3pC
cm93c2VyRnJhbWUuCiAgICAqLwogICBhdHRyaWJ1dGUgYm9vbCBpc0Jyb3dzZXJGcmFtZTsKKwor
ICAvKioKKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3NoZWxsLiBUaGVzZSByZWZs
ZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUgb2YgdGhlIGFzc29j
aWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZgorICAgKiBleGlzdGVu
dC4gU2VlIHRoZSBIVE1MNSBzcGVjIGZvciBtb3JlIGRldGFpbHMuCisgICAqIFRoZXNlIGZsYWdz
IG9uIHRoZSBkb2NzaGVsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzYW5kYm94
CisgICAqIGF0dHJpYnV0ZSwgd2hpY2ggaXMgbW9kaWZpYWJsZS4gVGhleSBhcmUgb25seSB1c2Vk
IHdoZW4gbG9hZGluZyBuZXcKKyAgICogY29udGVudCwgc2FuZGJveCBmbGFncyBhcmUgYWxzbyBp
bW11dGFibHkgc2V0IG9uIHRoZSBkb2N1bWVudCB3aGVuIGl0IGlzCisgICAqIGxvYWRlZC4KKyAg
ICogVGhlIHNhbmRib3ggZmxhZ3Mgb2YgYSBkb2N1bWVudCBkZXBlbmQgb24gdGhlIHNhbmRib3gg
ZmxhZ3Mgb24gaXRzCisgICAqIGRvY3NoZWxsIGFuZCBvZiBpdHMgcGFyZW50IGRvY3VtZW50LCBp
ZiBhbnkuCisgICAqLworICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzYW5kYm94RmxhZ3M7CisK
KyAgLyoqCisgICAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyBi
cm93c2luZyBjb250ZXh0cyBvdGhlciB0aGFuCisgICAqIHRoZSBzYW5kYm94ZWQgYnJvd3Npbmcg
Y29udGV4dCBpdHNlbGYgKG9yIGJyb3dzaW5nIGNvbnRleHRzIGZ1cnRoZXIKKyAgICogbmVzdGVk
IGluc2lkZSBpdCksIGFuZCB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQuCisgICAqLwor
ICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9OQVZJR0FUSU9OICA9IDB4MTsKKworICAv
KioKKyAgICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWly
IHRvcC1sZXZlbCBicm93c2luZworICAgKiBjb250ZXh0LgorICAgKi8KKyAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiA9IDB4MjsKKworICAvKioKKyAg
ICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBpbnN0YW50aWF0aW5nIHBsdWdpbnMs
IHdoZXRoZXIgdXNpbmcgdGhlCisgICAqIGVtYmVkIGVsZW1lbnQsIHRoZSBvYmplY3QgZWxlbWVu
dCwgdGhlIGFwcGxldCBlbGVtZW50LCBvciB0aHJvdWdoCisgICAqIG5hdmlnYXRpb24gb2YgYSBu
ZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgdW5sZXNzIHRob3NlIHBsdWdpbnMgY2FuIGJlCisgICAq
IHNlY3VyZWQuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5T
ID0gMHg0OworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgZm9yY2VzIGNvbnRlbnQgaW50byBhIHVu
aXF1ZSBvcmlnaW4sIHRodXMgcHJldmVudGluZyBpdCBmcm9tCisgICAqIGFjY2Vzc2luZyBvdGhl
ciBjb250ZW50IGZyb20gdGhlIHNhbWUgb3JpZ2luLgorICAgKiBUaGlzIGZsYWcgYWxzbyBwcmV2
ZW50cyBzY3JpcHQgZnJvbSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byB0aGUKKyAgICogZG9j
dW1lbnQuY29va2llIElETCBhdHRyaWJ1dGUsIGFuZCBibG9ja3MgYWNjZXNzIHRvIGxvY2FsU3Rv
cmFnZS4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX09SSUdJTiA9IDB4
ODsKKworICAvKioKKyAgICogVGhpcyBmbGFnIGJsb2NrcyBmb3JtIHN1Ym1pc3Npb24uCisgICAq
LworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9GT1JNUyA9IDB4MTA7CisKKyAgLyoq
CisgICAqIFRoaXMgZmxhZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlvbi4KKyAgICovCisgIGNvbnN0
IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1NDUklQVFMgPSAweDIwOworCisgIC8qKgorICAgKiBU
aGlzIGZsYWcgYmxvY2tzIGZlYXR1cmVzIHRoYXQgdHJpZ2dlciBhdXRvbWF0aWNhbGx5LCBzdWNo
IGFzCisgICAqIGF1dG9tYXRpY2FsbHkgcGxheWluZyBhIHZpZGVvIG9yIGF1dG9tYXRpY2FsbHkg
Zm9jdXNpbmcgYSBmb3JtIGNvbnRyb2wuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNB
TkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMgPSAweDQwOwogfTsKZGlmZiAtLWdpdCBhL2RvbS9i
YXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcAotLS0g
YS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5k
b3cuY3BwCkBAIC04Mjg1LDE2ICs4Mjg1LDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRTZXNzaW9u
U3RvcmFnZShuc0lET00KICAgaWYgKCFtU2Vzc2lvblN0b3JhZ2UpIHsKICAgICAqYVNlc3Npb25T
dG9yYWdlID0gbnNudWxsOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1E
b2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7
CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdp
biBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisg
ICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYgbnNJRG9jU2hlbGw6OlNBTkRC
T1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsK
KyAgICB9CisKICAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTZXNzaW9uU3RvcmFnZUZv
clByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRk
UmVmcyhtU2Vzc2lvblN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwog
CiAjaWZkZWYgUFJfTE9HR0lORwogICAgIGlmIChQUl9MT0dfVEVTVChnRE9NTGVha1BSTG9nLCBQ
Ul9MT0dfREVCVUcpKSB7CkBAIC04MzQ2LDE2ICs4MzUyLDIyIEBAIG5zR2xvYmFsV2luZG93OjpH
ZXRMb2NhbFN0b3JhZ2UobnNJRE9NU3QKICAgICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9y
Zy9kb20vc3RvcmFnZW1hbmFnZXI7MSIsICZydik7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYs
IHJ2KTsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsK
ICAgICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAor
ICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQK
KyAgICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9j
ICYmIChtRG9jLT5TYW5kYm94RmxhZ3MoKSAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lO
KSkgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAg
ICAgcnYgPSBzdG9yYWdlTWFuYWdlci0+R2V0TG9jYWxTdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5j
aXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogICB9CiAKICAgTlNfQUREUkVGKCphTG9jYWxTdG9yYWdlID0g
bUxvY2FsU3RvcmFnZSk7CiAgIHJldHVybiBOU19PSzsKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZh
Y2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRt
bC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9u
c0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lE
T01IVE1MSUZyYW1lRWxlbWVudC5pZGwKQEAgLTMzLDQ0ICszMyw0NiBAQAogICogZGVjaXNpb24g
YnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRo
ZSBub3RpY2UKICAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3Ig
dGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwg
YSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0
aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoK
ICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJuc0lET01I
VE1MRWxlbWVudC5pZGwiCisjaW5jbHVkZSAibnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRs
IgogCiAvKioKICAqIFRoZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2UgaXMgdGhl
IGludGVyZmFjZSB0byBhIFtYXUhUTUwKICAqIGlmcmFtZSBlbGVtZW50LgogICoKICAqIFRoaXMg
aW50ZXJmYWNlIGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lm
aWNhdGlvbjoKICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgog
ICogd2l0aCBjaGFuZ2VzIGZyb20gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgV0hBVFdHIEhUTUwgc3Bl
Y2lmaWNhdGlvbjoKICAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvCiAgKi8KIAotW3NjcmlwdGFibGUsIHV1aWQoZDRlODcwYmQtNDUyYy00ODYwLWI5
M2MtZjRlZTAwYmEzM2Y2KV0KK1tzY3JpcHRhYmxlLCB1dWlkKDUyZjYyNDRiLWIxZjUtNGY0Yy04
ZmYzLTdlMTQ2MzE2ZjQxMSldCiBpbnRlcmZhY2UgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgOiBu
c0lET01IVE1MRWxlbWVudAogewogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBhbGlnbjsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgZnJhbWVCb3Jk
ZXI7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGhlaWdodDsKICAgICAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbG9uZ0Rlc2M7CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbkhlaWdodDsKICAgICAgICAgICAgYXR0cmli
dXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luV2lkdGg7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmcgICAgICAgIG5hbWU7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIHNjcm9sbGluZzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc3Jj
OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB3aWR0aDsKICAgLy8gSW50
cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTURvY3Vt
ZW50ICAgY29udGVudERvY3VtZW50OwogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NV2luZG93
ICAgICBjb250ZW50V2luZG93OwogCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01ET01TZXR0
YWJsZVRva2VuTGlzdCBzYW5kYm94OwogCiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBp
ZnJhbWUgZWxlbWVudHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0
byBiZSBwcmVzZW50CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3Vi
IGRvY3VtZW50IHRvIGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRw
czovL3dpa2kubW96aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkK
ICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVu
OwogfTsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3Jj
L25zV2luZG93V2F0Y2hlci5jcHAgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVy
L3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRv
d3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVu
dHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcApAQCAtNjAzLDE2ICs2MDMs
MzMgQEAgbnNXaW5kb3dXYXRjaGVyOjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAg
aWYgKCFuZXdEb2NTaGVsbEl0ZW0pIHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3Bl
biB1cCBhIG5ldyB3aW5kb3cgb3Vyc2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJv
dmlkZXIgZm9yIG9uZS4gIEluIGVpdGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmln
aHQKICAgICAvLyBuYW1lIG9uIGl0LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAg
ICAvLyBJZiB0aGUgcGFyZW50IHRyeWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94
ZWQsCisgICAgLy8gdGhpcyBpcyBub3QgYWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlm
IChhUGFyZW50KSB7CisgICAgICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAg
ICAgYVBhcmVudC0+R2V0RG9jdW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBu
c0NPTVB0cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKwor
ICAgICAgaWYgKGRvYykgeworICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAg
ICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgICAgIGlmIChz
YW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAg
ICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0K
KwogICAgIC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHByb3Zp
ZGVyIGZvciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3BlbmluZyBh
IGRpYWxvZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8vIGlm
IHdlJ3JlIG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNocm9t
ZSBmbGFncyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVXaW4g
PSBkb19RdWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNocm9t
ZVdpbiAmJgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNI
Uk9NRV9NT0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93
c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>607321</attachid>
            <date>2012-03-19 14:23:26 -0700</date>
            <delta_ts>2012-04-20 15:11:17 -0700</delta_ts>
            <desc>iframe sandbox tests - inheritance v2</desc>
            <filename>iframe_sandbox_tests_inheritance</filename>
            <type>text/plain</type>
            <size>14861</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgM2ZhZmU0OWM5ZTIxMzE4ZmZhMWJjY2UzYTAz
Yzg0MTgxZjc4YWZmYwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KdGVz
dHMgZm9yIGlmcmFtZSBzYW5kYm94IC0gaW5oZXJpdGFuY2UKCmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmlu
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KQEAgLTI5MywxNiAr
MjkzLDI2IEBAIF9URVNUX0ZJTEVTID0gXAogCQlmaWxlX2Z1bGxzY3JlZW4tZXNjLWV4aXQuaHRt
bCBcCiAJCWZpbGVfZnVsbHNjcmVlbi1lc2MtZXhpdC1pbm5lci5odG1sIFwKIAkJZmlsZV9mdWxs
c2NyZWVuLXJvbGxiYWNrLmh0bWwgXAogCQl0ZXN0X2xpX2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5o
dG1sIFwKIAkJdGVzdF9vbF9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRtbCBcCiAJCXRlc3RfYnVn
NjUxOTU2Lmh0bWwgXAogCQl0ZXN0X2J1ZzY5NDUwMy5odG1sIFwKIAkJdGVzdF9vYmplY3RfcGx1
Z2luX25hdi5odG1sIFwKKwkJdGVzdF9pZnJhbWVfc2FuZGJveF9pbmhlcml0YW5jZS5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmMi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sIFwKKwkJZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lm
NS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNi5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF9hX2lmNy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5odG1s
IFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOS5odG1sIFwKIAkJJChOVUxMKQogCiBfQlJP
V1NFUl9URVNUX0ZJTEVTID0gXAogCQlicm93c2VyX2J1ZzY0OTc3OC5qcyBcCiAJCWZpbGVfYnVn
NjQ5Nzc4Lmh0bWwgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sXmhlYWRlcnNeIFwKIAkJJChOVUxM
KQogCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfYV9pZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9hX2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYxLmh0
bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRs
ZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3Rz
L1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5PgorICBJIGFtIHNhbmRib3hl
ZCB3aXRob3V0IGFueSBwZXJtaXNzaW9ucworICA8aWZyYW1lIGlkPSJpZl8yYSIgc3JjPSJmaWxl
X2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJh
bWU+CisgIDxpZnJhbWUgaWQ9ImlmXzJiIiBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBzcmM9ImZp
bGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lm
cmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfYV9pZjIuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3Qg
Zm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRl
eHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1N0dWZmKCkgeworICAv
LyBzaG91bGQgTk9UIGJlIGFibGUgdG8gZXhlY3V0ZSBzY3JpcHRzCisgIHdpbmRvdy50b3AucG9z
dE1lc3NhZ2Uoe29rOiBmYWxzZSwgZGVzYzogImEgZG9jdW1lbnQgd2l0aGluIGFuIGlmcmFtZSBz
YW5kYm94ZWQgd2l0aCBzYW5kYm94PScnIHNob3VsZCBOT1QgYmUgYWJsZSB0byBleGVjdXRlIHNj
cmlwdHMifSwgIioiKTsKK30KKzwvc2NyaXB0PgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+
CisgIEkgYW0gTk9UIHNhbmRib3hlZCBvciBhbSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0
cyIgYnV0IGFtIGNvbnRhaW5lZCB3aXRoaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoIHNhbmRi
b3ggPSAiIiAKKyAgb3IgYW0gc2FuZGJveGVkIHdpdGggc2FuZGJveD0nJyBpbnNpZGUgYW4gaWZy
YW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIgorPC9ib2R5PgorPC9odG1sPgorCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
YV9pZjMuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwKQEAg
LTAsMCArMSwyNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4gCisg
IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1w
bGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PiAgCis8L2hlYWQ+CisK
KzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgZnVuY3Rpb24gb2tfd3JhcHBlcihj
b25kaXRpb24sIG1zZykgeworICAgIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihjb25kaXRpb24s
IG1zZyk7CisgIH0KKzwvc2NyaXB0PgorCis8Ym9keT4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdp
dGggImFsbG93LXNjcmlwdHMiCisgIAorICA8aWZyYW1lIGlkPSdpZl80JyBzcmM9J2ZpbGVfaWZy
YW1lX3NhbmRib3hfYV9pZjQuaHRtbCcgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4K
KyAgPGlmcmFtZSBpZD0naWZfNycgc3JjPSdmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY3Lmh0bWwn
IGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+CisgIDxpZnJhbWUgaWQ9J2lmXzInIHNh
bmRib3g9Jycgc3JjPSdmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwnIGhlaWdodD0iMTAi
IHdpZHRoPSIxMCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY0Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjQuaHRtbApAQCAtMCwwICsxLDI4IEBA
Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04
Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPiAKKyAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5j
c3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBs
ZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+ICAKKzwvaGVhZD4KKworPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgdHJ5IHsKKyAgICB3
aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIoZmFsc2UsICJhIGRvY3VtZW50IGNvbnRhaW5lZCB3aXRo
aW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aG91dCAnYWxsb3ctc2FtZS1vcmlnaW4nIHNob3Vs
ZCBOT1QgYmUgc2FtZSBkb21haW4gd2l0aCBpdHMgcGFyZW50Iik7CisgIH0gY2F0Y2goZSkgewor
ICB9CisgIAorICB0cnkgeworICAgIHdpbmRvdy50b3Aub2tfd3JhcHBlcihmYWxzZSwgImEgZG9j
dW1lbnQgY29udGFpbmVkIHdpdGhpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB3aXRob3V0ICdhbGxv
dy1zYW1lLW9yaWdpbicgc2hvdWxkIE5PVCBiZSBzYW1lIGRvbWFpbiB3aXRoIHRoZSB0b3AgbGV2
ZWwiKTsKKyAgfSBjYXRjaChlKSB7CisgIH0KK30KKzwvc2NyaXB0PgorCis8Ym9keSBvbkxvYWQ9
ImRvU3R1ZmYoKSI+CisgIEkgYW0gbm90IHNhbmRib3hlZCBidXQgY29udGFpbmVkIHdpdGhpbiBh
IHNhbmRib3hlZCBkb2N1bWVudCB3aXRoICdhbGxvdy1zY3JpcHRzJworPC9ib2R5PgorPC9odG1s
PgorCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfYV9pZjUuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9hX2lmNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY1Lmh0
bWwKQEAgLTAsMCArMSwyMiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRs
ZT4gCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0
cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PiAgCis8L2hl
YWQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgZnVuY3Rpb24gb2tfd3Jh
cHBlcihyZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVzdWx0
LCBkZXNjKTsKKyAgfQorPC9zY3JpcHQ+CisKKzxib2R5PgorICBJIGFtIHNhbmRib3hlZCBidXQg
d2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIKKyAgCisgIDxpZnJhbWUgc2Fu
ZGJveD0nYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicgaWQ9J2lmXzYnIHNyYz0nZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmNi5odG1sJyBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZy
YW1lPgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjYuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNi5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2FfaWY2Lmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0
IGZvciBCdWcgMzQxNjA0PC90aXRsZT4gCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0i
dGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMu
anMiPjwvc2NyaXB0PiAgCis8L2hlYWQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
Ij4KK2Z1bmN0aW9uIGRvU3R1ZmYoKSB7IAorICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIodHJ1
ZSwgImEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyBhbmQgY29u
dGFpbmVkIHdpdGhpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB3aXRoICdhbGxvdy1zYW1lLW9yaWdp
bicgc2hvdWxkIGJlIHNhbWUgZG9tYWluIHdpdGggaXRzIHBhcmVudCIpOworICB3aW5kb3cudG9w
Lm9rX3dyYXBwZXIodHJ1ZSwgImEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGggJ2FsbG93LXNhbWUt
b3JpZ2luJyBjb250YWluZWQgd2l0aGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHdpdGggJ2FsbG93
LXNhbWUtb3JpZ2luJyBzaG91bGQgYmUgc2FtZSBkb21haW4gd2l0aCB0aGUgdG9wIGxldmVsIik7
Cit9Cis8L3NjcmlwdD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIHNhbmRi
b3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luJyBhbmQgY29udGFpbmVk
IHdpdGhpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB3aXRoICdhbGxvdy1zY3JpcHRzIGFsbG93LXNh
bWUtb3JpZ2luJworPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjcuaHRtbCBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2FfaWY3Lmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0
eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVh
ZD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9TdHVmZigp
IHsKKyAgLy8gc2hvdWxkIGJlIGFibGUgdG8gZXhlY3V0ZSBzY3JpcHRzCisgIHdpbmRvdy50b3Au
cG9zdE1lc3NhZ2Uoe29rOiB0cnVlLCBkZXNjOiAiYSBkb2N1bWVudCBjb250YWluZWQgd2l0aGlu
IGFuIGlmcmFtZSBjb250YWluZWQgd2l0aGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAnYWxs
b3ctc2NyaXB0cycgc2hvdWxkIGJlIGFibGUgdG8gZXhlY3V0ZSBzY3JpcHRzIn0sICIqIik7Cit9
Cis8L3NjcmlwdD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIE5PVCBzYW5k
Ym94ZWQgYnV0IGFtIGNvbnRhaW5lZCB3aXRoaW4gYW4gaWZyYW1lIGNvbnRhaW5lZCB3aXRoaW4g
YW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoIHNhbmRib3ggPSAiYWxsb3ctc2NyaXB0cyIgCis8L2Jv
ZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2FfaWY4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfYV9pZjguaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAz
NDE2MDQ8L3RpdGxlPiAKKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIg
aHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3Jp
cHQ+ICAKKzwvaGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBkb1N1YmxvYWQoKSB7CisgIHZhciBp
Zl85ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmXzknKTsKKyAgaWZfOS5zcmMgPSAnZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmOS5odG1sJzsKK30KKword2luZG93LmRvU3VibG9hZCA9IGRv
U3VibG9hZDsKKworPC9zY3JpcHQ+Cis8Ym9keT4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGgg
ImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4iLiBBZnRlciBteSBpbml0aWFsIGxvYWQs
ICJhbGxvdy1zYW1lLW9yaWdpbiIgaXMgcmVtb3ZlZAorICBhbmQgdGhlbiBJIGxvYWQgZmlsZV9p
ZnJhbWVfc2FuZGJveF9hX2lmOS5odG1sLCB3aGljaCBhdHRlbXBzIHRvIGNhbGwgYSBmdW5jdGlv
biBpbiB3aW5kb3cudG9wLiBUaGlzIHNob3VsZAorICBzdWNjZWVkIHNpbmNlIHRoZSBuZXcgc2Fu
ZGJveCBmbGFncyBzaG91bGRuJ3QgaGF2ZSB0YWtlbiBhZmZlY3Qgb24gbWUgdW50aWwgSSdtIHJl
bG9hZGVkLgorICAKKyAgPGlmcmFtZSBpZD0naWZfOScgc3JjPSdhYm91dDpibGFuaycgaGVpZ2h0
PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0
IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY5Lmh0
bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjku
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOS5odG1sCkBAIC0wLDAgKzEs
MTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+IAorICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90
ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGRvU3R1ZmYoKSB7CisgIGNv
bnNvbGUubG9nKCJIRUxMTyBJRjkiKTsKKyAgd2luZG93LnRvcC5va193cmFwcGVyKHRydWUsICJh
IHN1YmxvYWRlZCBkb2N1bWVudCBzaG91bGQgaW5oZXJpdCB0aGUgZmxhZ3Mgb2YgdGhlIGRvY3Vt
ZW50LCBub3Qgb2YgdGhlIGRvY3NoZWxsL3NhbmRib3ggYXR0cmlidXRlIik7Cit9Cis8L3Njcmlw
dD4KKzxib2R5IG9ubG9hZD0nZG9TdHVmZigpJz4KKyAgSSdtIGEgc3VibG9hZGVkIGRvY3VtZW50
IG9mIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjguaHRtbC4gSSBzaG91bGQgYmUgYWJsZSB0byBj
YWxsIGEgZnVuY3Rpb24gaW4gd2luZG93LnRvcAorICBiZWNhdXNlIEkgc2hvdWxkIGJlIHNhbWUt
b3JpZ2luIHdpdGggaXQuCis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9pbmhlcml0YW5jZS5odG1sIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2luaGVyaXRhbmNl
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfaW5oZXJpdGFuY2UuaHRtbApAQCAt
MCwwICsxLDEwNyBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPCEtLQ0KK2h0dHBzOi8v
YnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNA0KK0ltcGxlbWVudCBI
VE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAtIGluaGVyaXRhbmNlIHRlc3RzDQor
LS0+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBm
b3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+DQor
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2lt
cGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9u
L2phdmFzY3JpcHQiPg0KKy8qKiBUZXN0IGZvciBCdWcgMzQxNjA0IC0gSW1wbGVtZW50IEhUTUw1
IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzICoqLw0KKy8qKiBJbmhlcml0YW5jZSBUZXN0
cyAqKi8NCisNCisvLyBBIHBvc3RNZXNzYWdlIGhhbmRsZXIgdGhhdCBpcyB1c2VkIGJ5IHNhbmRi
b3hlZCBpZnJhbWVzIHdpdGhvdXQNCisvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIHRvIGNvbW11bmlj
YXRlIHBhc3MvZmFpbCBiYWNrIHRvIHRoaXMgbWFpbiBwYWdlLg0KKy8vIEl0IGV4cGVjdHMgdG8g
YmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNjOg0KKy8v
IDxkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0byBvaygp
Lg0KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1lc3NhZ2UsIGZh
bHNlKTsNCisNCit2YXIgY29tcGxldGVkVGVzdHMgPSAwOw0KK3ZhciBwYXNzZWRUZXN0cyA9IDA7
DQorDQorZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpICANCit7DQorICBva193cmFwcGVy
KGV2ZW50LmRhdGEub2ssIGV2ZW50LmRhdGEuZGVzYyk7DQorfQ0KKw0KK2Z1bmN0aW9uIG9rX3dy
YXBwZXIocmVzdWx0LCBkZXNjKSB7DQorICBvayhyZXN1bHQsIGRlc2MpOw0KKyAgDQorICBjb21w
bGV0ZWRUZXN0cysrOw0KKw0KKyAgaWYgKHJlc3VsdCkNCisJcGFzc2VkVGVzdHMrKzsNCisNCisg
IC8vIFJFVklFVyA6IGlmIG9uZSBvZiB0aGVzZSB0ZXN0cyBmYWlscyBhbmQgdGhlIG1lc3NhZ2Ug
aXNuJ3Qgc2VudA0KKyAgLy8gdGhpcyBtZWFucyB0aGlzIHRlc3Qgd2lsbCBoYW5nIHVudGlsIHRo
ZSB0aW1lIG91dCBoYXBwZW5zIDooDQorICAvLyBhZHZpY2Ugb24gYmV0dGVyIHdheXMgdG8gc3lu
Y2hyb25pemUgdGhpbmdzIGFwcHJlY2lhdGVkICENCisgIGlmIChjb21wbGV0ZWRUZXN0cyA9PSA0
KSB7DQorICAgIGlzKHBhc3NlZFRlc3RzLCA0LCAidGhlcmUgc2hvdWxkIGJlIDMgcGFzc2VkIGlu
aGVyaXRhbmNlIHRlc3RzIik7DQorICAgIFNpbXBsZVRlc3QuZmluaXNoKCk7DQorICB9DQorfQ0K
Kw0KK2Z1bmN0aW9uIGRvVGVzdCgpIHsNCisgIFNpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0Rmlu
aXNoKCk7DQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDEpIGFuIGlmcmFtZSB3aXRoIG5v
IHNhbmRib3ggYXR0cmlidXRlIGluc2lkZSBhbiBpZnJhbWUgdGhhdCBoYXMgc2FuZGJveCA9ICIi
DQorICAvLyBzaG91bGQgbm90IGJlIGFibGUgdG8gZXhlY3V0ZSBzY3JpcHRzIChjYW5ub3QgZXZl
ciBsb29zZW4gcGVybWlzc2lvbnMpIA0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmMi5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMS5o
dG1sKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkIA0KKyAgLy8gMikgYW4gaWZyYW1lIHdpdGggc2Fu
ZGJveCA9ICJhbGxvdy1zY3JpcHRzIiBpbnNpZGUgYW4gaWZyYW1lIHRoYXQgaGFzIHNhbmRib3gg
PSAiIg0KKyAgLy8gc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGV4ZWN1dGUgc2NyaXB0cyAoY2Fubm90
IGV2ZXIgbG9vc2VuIHBlcm1pc3Npb25zKQ0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2Fu
ZGJveF9hX2lmMi5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lm
MS5odG1sKQ0KKyAgDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDMpIGFuIGlmcmFtZSB3aXRo
IG5vIHNhbmRib3ggYXR0cmlidXRlIGluc2lkZSBhbiBpZnJhbWUgdGhhdCBoYXMgc2FuZGJveCA9
ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gc2hvdWxkIG5vdCBiZSBzYW1lIG9yaWdpbiB3aXRoIHRo
ZSB0b3Agd2luZG93DQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY0Lmh0
bWwgY29udGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwpDQorICAN
CisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gNCkgYW4gaWZyYW1lIHdpdGggbm8gc2FuZGJveCBh
dHRyaWJ1dGUgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhhcyBzYW5kYm94ID0gImFsbG93LXNjcmlw
dHMiDQorICAvLyBzaG91bGQgbm90IGJlIHNhbWUgb3JpZ2luIHdpdGggaXRzIHBhcmVudA0KKyAg
Ly8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sIGNvbnRhaW5lZCB3aXRo
aW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sKQ0KKw0KKyAgLy8gcGFzc2VzIGlmIGdv
b2QNCisgIC8vIDUpIGFuIGlmcmFtZSB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kICdhbGxv
dy1zY3JpcHRzJyBpbnNpZGUgYW4gaWZyYW1lIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJw0KKyAg
Ly8gYW5kICdhbGxvdy1zY3JpcHRzJyBzaG91bGQgYmUgc2FtZSBvcmlnaW4gd2l0aCB0aGUgdG9w
IHdpbmRvdyANCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjYuaHRtbCBj
b250YWluZWQgd2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjUuaHRtbCkNCisNCisgIC8v
IHBhc3NlcyBpZiBnb29kDQorICAvLyA2KSBhbiBpZnJhbWUgd2l0aCAnYWxsb3ctc2FtZS1vcmln
aW4nIGFuZCAnYWxsb3ctc2NyaXB0cycgaW5zaWRlIGFuIGlmcmFtZSB3aXRoICdhbGxvdy1zYW1l
LW9yaWdpbicNCisgIC8vIGFuZCAnYWxsb3ctc2NyaXB0cycgc2hvdWxkIGJlIHNhbWUgb3JpZ2lu
IHdpdGggaXRzIHBhcmVudA0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lm
Ni5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNS5odG1sKQ0K
Kw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDcpIGFuIGlmcmFtZSB3aXRoIG5vIHNhbmRi
b3ggYXR0cmlidXRlIGluc2lkZSBhbiBpZnJhbWUgdGhhdCBoYXMgc2FuZGJveCA9ICJhbGxvdy1z
Y3JpcHRzIg0KKyAgLy8gc2hvdWxkIGJlIGFibGUgdG8gZXhlY3V0ZSBzY3JpcHRzDQorICAvLyAo
ZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY3Lmh0bWwgY29udGFpbmVkIHdpdGhpbiBm
aWxlX2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisg
IC8vIDgpIGFuIGlmcmFtZSB3aXRoIHNhbmRib3g9IiIgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhh
cyBhbGxvdy1zY3JpcHRzIHNob3VsZCBub3QgYmUgYWJsZQ0KKyAgLy8gdG8gZXhlY3V0ZSBzY3Jp
cHRzDQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwgY29udGFp
bmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwpDQorDQorICAvLyBwYXNz
ZXMgaWYgZ29vZA0KKyAgLy8gOSkgbWFrZSBzdXJlIHRoYXQgY2hhbmdpbmcgdGhlIHNhbmRib3gg
ZmxhZ3Mgb24gYW4gaWZyYW1lIChpZl84KSBkb2Vzbid0IGFmZmVjdCANCisgIC8vIHRoZSBzYW5k
Ym94aW5nIG9mIHN1YmxvYWRzIG9mIGNvbnRlbnQgd2l0aGluIHRoYXQgaWZyYW1lDQorICB2YXIg
aWZfOCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl84Jyk7DQorICBpZl84LnNhbmRib3gg
PSAnYWxsb3ctc2NyaXB0cyc7DQorICBpZl84LmNvbnRlbnRXaW5kb3cuZG9TdWJsb2FkKCk7DQor
fQ0KKzwvc2NyaXB0Pg0KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPg0KKzxhIHRhcmdldD0iX2Js
YW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBh
dHRyaWJ1dGUgZm9yIElGUkFNRXMNCis8cCBpZD0iZGlzcGxheSI+PC9wPg0KKzxkaXYgaWQ9ImNv
bnRlbnQiPg0KKzxpZnJhbWUgc2FuZGJveD0iIiBpZD0iaWZfMSIgc3JjPSJmaWxlX2lmcmFtZV9z
YW5kYm94X2FfaWYxLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlm
cmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMyIgc3JjPSJmaWxlX2lmcmFtZV9z
YW5kYm94X2FfaWYzLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlm
cmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIiBpZD0iaWZfNSIg
c3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY1Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIx
MCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUt
b3JpZ2luIiBpZD0iaWZfOCIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY4Lmh0bWwiIGhl
aWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPC9kaXY+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>609874</attachid>
            <date>2012-03-27 13:55:25 -0700</date>
            <delta_ts>2012-04-20 15:49:43 -0700</delta_ts>
            <desc>iframe sandbox tests - navigation v4</desc>
            <filename>iframe_sandbox_tests_navigation</filename>
            <type>text/plain</type>
            <size>25839</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZjYyZTE3ZDBmOGMyYzI1NWZlNmRkOTY0MDFk
Zjk5NGEwNTZjYmVlMAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBuYXZpZ2F0aW9uCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFr
ZWZpbGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yOTMsMTYgKzI5Mywz
NyBAQCBfVEVTVF9GSUxFUyA9IFwKIAkJZmlsZV9mdWxsc2NyZWVuLWVzYy1leGl0Lmh0bWwgXAog
CQlmaWxlX2Z1bGxzY3JlZW4tZXNjLWV4aXQtaW5uZXIuaHRtbCBcCiAJCWZpbGVfZnVsbHNjcmVl
bi1yb2xsYmFjay5odG1sIFwKIAkJdGVzdF9saV9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRtbCBc
CiAJCXRlc3Rfb2xfYXR0cmlidXRlc19yZWZsZWN0aW9uLmh0bWwgXAogCQl0ZXN0X2J1ZzY1MTk1
Ni5odG1sIFwKIAkJdGVzdF9idWc2OTQ1MDMuaHRtbCBcCiAJCXRlc3Rfb2JqZWN0X3BsdWdpbl9u
YXYuaHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbi5odG1sIFwKKwkJZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
Mi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmNC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1s
IFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmNy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5odG1sIFwKKwkJ
ZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9u
YXZpZ2F0aW9uX3N0YXJ0Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25f
cGFzcy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCBc
CisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjEuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfZV9pZjIuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjMuaHRtbCBcCisJCWZp
bGVfaWZyYW1lX3NhbmRib3hfZV9pZjQuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9p
ZjUuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjYuaHRtbCBcCisJCWZpbGVfaWZy
YW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fcGFzcy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF90b3BfbmF2aWdhdGlvbl9mYWlsLmh0bWwgXAogCQkkKE5VTEwpCiAKIF9CUk9XU0VSX1RF
U1RfRklMRVMgPSBcCiAJCWJyb3dzZXJfYnVnNjQ5Nzc4LmpzIFwKIAkJZmlsZV9idWc2NDk3Nzgu
aHRtbCBcCiAJCWZpbGVfYnVnNjQ5Nzc4Lmh0bWxeaGVhZGVyc14gXAogCQkkKE5VTEwpCiAKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9k
X2lmMS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2RfaWYxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEuaHRtbApAQCAt
MCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8
bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxl
VGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIv
dGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxzY3Jp
cHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1Rlc3QoKSB7Cisg
IHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYW5jaG9yJyk7Cit9Cis8L3NjcmlwdD4K
Kzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1z
Y3JpcHRzJworICAKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bh
c3MuaHRtbD9pZl8xIiB0YXJnZXQ9Il9zZWxmIiBpZD0nYW5jaG9yJz4KKzwvYm9keT4KKzwvaHRt
bD4KKyAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjIuaHRtbApAQCAtMCwwICsxLDIyIEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgor
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9F
dmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRp
b24vamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIHNlbmRNb3VzZUV2ZW50KHt0
eXBlOidjbGljayd9LCAnYW5jaG9yJyk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9U
ZXN0KCkiPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworICAgIAorICA8
aWZyYW1lIG5hbWU9ImZvbyIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fc3Rh
cnQuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKyAgCisgIDxhIGhyZWY9
ImZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9wYXNzLmh0bWw/aWYyIiB0YXJnZXQ9J2Zv
bycgaWQ9J2FuY2hvcic+Cis8L2JvZHk+Cis8L2h0bWw+CisgICAKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjMuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Rf
aWYzLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFk
PgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0
PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i
L3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5PgorICBJIGFtIHNh
bmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworICAgIAorICA8aWZyYW1lIHNhbmRib3g9ImFs
bG93LXNjcmlwdHMiIGlkPSJpZl80IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjQuaHRt
bCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KKyAg
IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY0Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfZF9pZjQuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxl
PlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5
cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0
aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2
YXNjcmlwdCI+CitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidj
bGljayd9LCAnYW5jaG9yJyk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCki
PgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworICAgIAorICA8YSBocmVm
PSJmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fZmFpbC5odG1sIiB0YXJnZXQ9J19wYXJl
bnQnIGlkPSdhbmNob3InPgorPC9ib2R5PgorPC9odG1sPgorICAgClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfZF9pZjUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9u
dWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9k
X2lmNS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVh
ZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYw
NDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9
Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9u
IGRvVGVzdCgpIHsKKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsK
K30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVk
IHdpdGggJ2FsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4nCisgICAgCisgIDxhIGhyZWY9
ImZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwiIHRhcmdldD0nc2libGlu
ZycgaWQ9J2FuY2hvcic+Cis8L2JvZHk+Cis8L2h0bWw+CisgICAKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjYuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9kX2lmNi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Rf
aWY2Lmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFk
PgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0
PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i
L3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24g
ZG9UZXN0KCkgeworICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOwor
fQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQg
d2l0aCAnYWxsb3ctc2NyaXB0cycKKyAgICAKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJv
eF9kX2lmNy5odG1sIiB0YXJnZXQ9J19zZWxmJyBpZD0nYW5jaG9yJz4KKzwvYm9keT4KKzwvaHRt
bD4KKyAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNy5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjcuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgor
PC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9u
IGRvVGVzdCgpIHsKKyAgY29uc29sZS5sb2coIioqKiogZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
Ny5odG1sIik7CisgIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihmYWxzZSwgImEgc2FuZGJveGVk
IGRvY3VtZW50IHdoZW4gbmF2aWdhdGVkIHNob3VsZCBzdGlsbCBOT1QgYmUgc2FtZS1vcmlnaW4g
d2l0aCBpdHMgcGFyZW50Iik7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCki
PgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworPC9ib2R5PgorPC9odG1s
PgorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY4Lmh0bWwgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjguaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8
dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8
L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24g
ZG9UZXN0KCkgeworICBjb25zb2xlLmxvZygiSEVMTE8gSUZfOCIpOworCXdpbmRvdy5wYXJlbnQu
bW9kaWZ5X2lmXzgoKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+Cisg
IEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnIGFuZCAnYWxsb3ctc2FtZS1vcmln
aW4nIHRoZSBmaXJzdCB0aW1lIEkgYW0gbG9hZGVkLCBhbmQKKwl3aXRoICdhbGxvdy1zY3JpcHRz
JyB0aGUgc2Vjb25kIHRpbWUKKzwvYm9keT4KKzwvaHRtbD4KKyAgIApcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9kX2lmOS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2RfaWY5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYv
bnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
ZF9pZjkuaHRtbApAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhl
YWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2
MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVm
PSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJh
cHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgY29uc29sZS5s
b2coIkhFTExPIElGXzkiKTsKKwl3aW5kb3cucGFyZW50Lm1vZGlmeV9pZl85KCk7Cit9Cis8L3Nj
cmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdh
bGxvdy1zY3JpcHRzJyBhbmQgJ2FsbG93LXNhbWUtb3JpZ2luJyB0aGUgZmlyc3QgdGltZSBJIGFt
IGxvYWRlZCwgYW5kCisJd2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nIHRoZSBzZWNvbmQgdGltZQor
PC9ib2R5PgorPC9odG1sPgorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWYx
Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9p
ZjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMS5odG1sCkBAIC0wLDAg
KzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBs
ZVRlc3QvdGVzdC5jc3MiLz4NCisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlw
dCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4NCis8L2hl
YWQ+DQorPGJvZHk+DQorICA8c2NyaXB0Pg0KKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
bWVzc2FnZSIsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7ICANCisgICAgICAgICAgIA0KKyAgICBm
dW5jdGlvbiByZWNlaXZlTWVzc2FnZShldmVudCkgIA0KKyAgICB7IA0KKyAgICAgIFNpbXBsZVRl
c3QuZXhlY3V0ZVNvb24oZnVuY3Rpb24oKSB7DQorICAgICAgICB3aW5kb3cuY2xvc2UoKTsNCisg
ICAgICB9KTsNCisgICAgfSAgDQorICA8L3NjcmlwdD4NCisgIDxpZnJhbWUgc2FuZGJveD0nYWxs
b3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicgaWQ9J2lmXzYnIHNyYz0iZmlsZV9pZnJhbWVf
c2FuZGJveF9lX2lmNi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwv
Ym9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2VfaWYyLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0g
L2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9lX2lmMi5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1s
Pg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9y
IEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0
L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCisgIDxzY3JpcHQgdHlw
ZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVU
ZXN0LmpzIj48L3NjcmlwdD4NCis8L2hlYWQ+DQorPGJvZHk+DQorICA8c2NyaXB0Pg0KKyAgICB3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7
ICANCisgICAgICAgICAgIA0KKyAgICBmdW5jdGlvbiByZWNlaXZlTWVzc2FnZShldmVudCkgIA0K
KyAgICB7IA0KKyAgICAgIFNpbXBsZVRlc3QuZXhlY3V0ZVNvb24oZnVuY3Rpb24oKSB7DQorICAg
ICAgICB3aW5kb3cuY2xvc2UoKTsNCisgICAgICB9KTsNCisgICAgfSAgDQorICA8L3NjcmlwdD4N
CisgIDxpZnJhbWUgc2FuZGJveD0nYWxsb3ctc2NyaXB0cyBhbGxvdy10b3AtbmF2aWdhdGlvbiBh
bGxvdy1zYW1lLW9yaWdpbicgaWQ9J2lmXzEnIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lm
MS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvYm9keT4NCis8L2h0
bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2VfaWYzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfZV9pZjMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMy5o
dG1sCkBAIC0wLDAgKzEsMTEgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0K
KyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8
L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i
L3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPGJvZHk+DQorICA8aWZy
YW1lIHNhbmRib3g9J2FsbG93LXNjcmlwdHMgYWxsb3ctdG9wLW5hdmlnYXRpb24nIGlkPSdpZl81
JyBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjUuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9
IjEwIj48L2lmcmFtZT4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNC5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWY0Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjQuaHRtbApAQCAtMCwwICsxLDExIEBACis8IURP
Q1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4N
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3Nz
Ii8+DQorPC9oZWFkPg0KKzxib2R5Pg0KKyAgPGlmcmFtZSBzYW5kYm94PSdhbGxvdy1zY3JpcHRz
IGFsbG93LXRvcC1uYXZpZ2F0aW9uJyBpZD0naWZfMycgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94
X2VfaWYzLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPC9ib2R5Pg0K
KzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZV9pZjUuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9lX2lmNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Vf
aWY1Lmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhl
YWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3Jp
cHQ+DQorPC9oZWFkPg0KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+DQor
ZnVuY3Rpb24gZG9UZXN0KCkgew0KKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdh
bmNob3InKTsNCit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+DQorICBJ
IGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzIGFuZCBhbGxvdy10b3AtbmF2aWdhdGlv
bicNCisgICAgDQorICA8YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X3RvcF9uYXZpZ2F0aW9u
X3Bhc3MuaHRtbCIgdGFyZ2V0PSdfdG9wJyBpZD0nYW5jaG9yJz4NCis8L2JvZHk+DQorPC9odG1s
Pg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9lX2lmNi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2VfaWY2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjYuaHRt
bApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisg
IDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90
aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90
ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4NCisg
IDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxl
VGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJh
cHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICBzZW5kTW91
c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOw0KKyAgDQorICAgU2ltcGxlVGVzdC5l
eGVjdXRlU29vbihmdW5jdGlvbigpIHsNCisgICAgIHdpbmRvdy50b3AucG9zdE1lc3NhZ2UoImNs
b3NlIiwgIioiKTsNCisgICB9KTsNCit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25sb2FkPSJkb1Rl
c3QoKSI+DQorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJw0KKyAgICANCisg
IDxhIGhyZWY9ImZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fZmFpbC5odG1sIiB0
YXJnZXQ9J190b3AnIGlkPSdhbmNob3InPg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0
IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRp
b25fZmFpbC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X25hdmlnYXRpb25fZmFpbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25h
dmlnYXRpb25fZmFpbC5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0
bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3Ig
QnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9j
c3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8Ym9keSBv
bkxvYWQ9ImRvU3R1ZmYoKSI+CitGQUlMCis8L2JvZHk+Cis8c2NyaXB0PgorICBmdW5jdGlvbiBk
b1N0dWZmKCkgeworICAgIHdpbmRvdy50b3AucG9zdE1lc3NhZ2Uoe29rOiBmYWxzZSwgZGVzYzog
InRoaXMgbmF2aWdhdGlvbiBzaG91bGQgTk9UIGJlIGFsbG93ZWQgYnkgYSBzYW5kYm94ZWQgZG9j
dW1lbnQifSwgIioiKTsKKyAgfQorPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9wYXNz
Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2
aWdhdGlvbl9wYXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlv
bl9wYXNzLmh0bWwKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxo
ZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQx
NjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJl
Zj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQ+CitmdW5j
dGlvbiBkb1N0dWZmKCkgeworICB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKHtvazogdHJ1ZSwgZGVz
YzogInRoaXMgbmF2aWdhdGlvbiBzaG91bGQgYmUgYWxsb3dlZCBieSBhIHNhbmRib3hlZCBkb2N1
bWVudCJ9LCAiKiIpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CitQ
QVNTCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1sIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fc3RhcnQuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwKQEAg
LTAsMCArMSwxMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBs
ZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5PgorSSBhbSBqdXN0IGEgbm9ybWFsIEhU
TUwgZG9jdW1lbnQsIHByb2JhYmx5IGNvbnRhaW5lZCBpbiBhIHNhbmRib3hlZCBpZnJhbWUKKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9mYWlsLmh0bWwgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fZmFpbC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3RvcF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbApA
QCAtMCwwICsxLDE3IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxt
ZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRs
ZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0
cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxzY3JpcHQ+DQorZnVuY3Rpb24g
ZG9TdHVmZigpIHsNCisJd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZSh7b2s6IGZhbHNlLCBkZXNj
OiAgInRvcCBuYXZpZ2F0aW9uIHNob3VsZCBOT1QgYmUgYWxsb3dlZCBieSBhIGRvY3VtZW50IHNh
bmRib3hlZCB3aXRob3V0ICdhbGxvdy10b3AtbmF2aWdhdGlvbicifSwgIioiKTsNCisJd2luZG93
LmNsb3NlKCk7DQorfQ0KKzwvc2NyaXB0Pg0KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4NCitG
QUlMDQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fcGFzcy5odG1sIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3RvcF9uYXZpZ2F0aW9u
X3Bhc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9w
YXNzLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhl
YWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0Pg0K
K2Z1bmN0aW9uIGRvU3R1ZmYoKSB7DQorCXdpbmRvdy5vcGVuZXIucG9zdE1lc3NhZ2Uoe29rOiB0
cnVlLCBkZXNjOiAgInRvcCBuYXZpZ2F0aW9uIHNob3VsZCBiZSBhbGxvd2VkIGJ5IGEgZG9jdW1l
bnQgc2FuZGJveGVkIHdpdGggJ2FsbG93LXRvcC1uYXZpZ2F0aW9uJyJ9LCAiKiIpOw0KKwl3aW5k
b3cuY2xvc2UoKTsNCit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPg0K
K1BBU1MNCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uLmh0bWwgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb24uaHRtbApAQCAtMCwwICsxLDE5NCBA
QAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzwhLS0KK2h0dHBzOi8vYnVnemlsbGEubW96aWxs
YS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNA0KK0ltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0
dHJpYnV0ZSBmb3IgSUZSQU1FcworLS0+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNCAtIG5hdmlnYXRpb248L3RpdGxlPgorICA8
c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRl
c3QvU2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+CisgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVU
ZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQiPgorLyoqIFRlc3QgZm9yIEJ1ZyAzNDE2MDQgLSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJv
eCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMgKiovCisvKiogTmF2aWdhdGlvbiB0ZXN0cyAqKi8KKwor
Ly8gYSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRoYXQgaXMgdXNlZCBieSBzYW5kYm94ZWQgaWZyYW1l
cyB3aXRob3V0CisvLyAnYWxsb3ctc2FtZS1vcmlnaW4nL290aGVyIHdpbmRvd3MgdG8gY29tbXVu
aWNhdGUgcGFzcy9mYWlsIGJhY2sgdG8gdGhpcyBtYWluIHBhZ2UuCisvLyBpdCBleHBlY3RzIHRv
IGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCBsaWtlIHtvazogdHJ1ZS9mYWxzZSwgZGVzYzogCisv
LyA8ZGVzY3JpcHRpb24gb2YgdGhlIHRlc3Q+IHdoaWNoIGl0IHRoZW4gZm9yd2FyZHMgdG8gb2so
KQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFs
c2UpOyAgCisgICAgICAKK3ZhciB0ZXN0UGFzc2VzUmVjZWl2ZWQgPSAwOworICAgICAgCitmdW5j
dGlvbiByZWNlaXZlTWVzc2FnZShldmVudCkgIAoreyAKKyAgb2tfd3JhcHBlcihldmVudC5kYXRh
Lm9rLCBldmVudC5kYXRhLmRlc2MpOworfSAgCisKK3ZhciBjb21wbGV0ZWRUZXN0cyA9IDA7Cit2
YXIgcGFzc2VkVGVzdHMgPSAwOworCitmdW5jdGlvbiBva193cmFwcGVyKHJlc3VsdCwgZGVzYykg
eworICBvayhyZXN1bHQsIGRlc2MpOworCisgIGNvbXBsZXRlZFRlc3RzKys7CisKKyAgaWYgKHJl
c3VsdCkgeworICAgIHBhc3NlZFRlc3RzKys7CisgIH0KKyAgCisgIC8vIFJFVklFVyA6IGlmIG9u
ZSBvZiB0aGVzZSB0ZXN0cyBmYWlscyBhbmQgdGhpcyBpc24ndCBjYWxsZWQKKyAgLy8gdGhpcyBt
ZWFucyB0aGlzIHRlc3Qgd2lsbCBoYW5nIHVudGlsIHRoZSB0aW1lIG91dCBoYXBwZW5zIDooCisg
IC8vIGFkdmljZSBvbiBiZXR0ZXIgd2F5cyB0byBzeW5jaHJvbml6ZSB0aGluZ3MgYXBwcmVjaWF0
ZWQgIQorICAvLyBBbHNvLCBtYW55IG9mIHRoZSB0ZXN0cyBmb3IgbmF2aWdhdGlvbiBmYWlsIGlm
IGJhZCAoY2FsbCBvayhmYWxzZSwgLi4uKQorICAvLyBzbyBob3cgZG8gd2UgdGVsbCBpZiB0aGVz
ZSBoYXZlIGNvbXBsZXRlZCAtIGlzIHVzaW5nIG9uTG9hZCBlbm91Z2ggPworICBpZiAoY29tcGxl
dGVkVGVzdHMgPT0gNCkgeworICAgIG9rKHBhc3NlZFRlc3RzID09IDQsICJUaGVyZSBhcmUgNCBu
YXZpZ2F0aW9uIHRlc3RzIHRoYXQgc2hvdWxkIHBhc3MiKTsKKyAgCisgICAgU2ltcGxlVGVzdC5m
aW5pc2goKTsKKyAgfQorfQorCitmdW5jdGlvbiBkb1Rlc3QoKSB7IAorICBTaW1wbGVUZXN0Lndh
aXRGb3JFeHBsaWNpdEZpbmlzaCgpOworICAvLyBwYXNzZXMgaWYgZ29vZAorICAvLyAxKSBBIHNh
bmRib3hlZCBpZnJhbWUgaXMgYWxsb3dlZCB0byBuYXZpZ2F0ZSBpdHNlbGYKKyAgLy8gKGRvbmUg
YnkgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0
cycgYW5kIG5hdmlnYXRlcyB0bworICAvLyBmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25f
cGFzcy5odG1sKS4KKyAKKyAgLy8gcGFzc2VzIGlmIGdvb2QKKyAgLy8gMikgQSBzYW5kYm94ZWQg
aWZyYW1lIGlzIGFsbG93ZWQgdG8gbmF2aWdhdGUgaXRzIGNoaWxkcmVuLCBldmVuIGlmIHRoZXkg
YXJlIHNhbmRib3hlZAorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0
bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJywgaXQgbmF2aWdhdGVzIGEgY2hpbGQKKyAgLy8g
aWZyYW1lIGNvbnRhaW5pbmcgZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0
bWwgdG8gZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbCkuCisgCisgIC8v
IGZhaWxzIGlmIGJhZAorICAvLyAzKSBBIHNhbmRib3hlZCBpZnJhbWUgaXMgbm90IGFsbG93ZWQg
dG8gbmF2aWdhdGUgaXRzIGFuY2VzdG9yIAorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWY0Lmh0bWwgY29udGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYz
Lmh0bWwsCisgIC8vIGl0IGF0dGVtcHRzIHRvIG5hdmlnYXRlIGZpbGVfaWZyYW1lX3NhbmRib3hf
ZF9pZjMuaHRtbCB0byBmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fZmFpbC5odG1sKS4K
KworICAvLyBmYWlscyBpZiBiYWQKKyAgLy8gNCkgQSBzYW5kYm94ZWQgaWZyYW1lIGlzIG5vdCBh
bGxvd2VkIHRvIG5hdmlnYXRlIGl0cyBzaWJsaW5nCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1l
X3NhbmRib3hfZF9pZjUuaHRtbCB3aGljaCBoYXMgJ2FsbG93IHNjcmlwdHMgYWxsb3ctc2FtZS1v
cmlnaW4nCisgIC8vIGFuZCBhdHRlbXB0cyB0byBuYXZpZ2F0ZSBmaWxlX2lmcmFtZV9uYXZpZ2F0
aW9uX3N0YXJ0Lmh0bWwgY29udGFpbmVkIGluIGlmX3NpYmxpbmcgb24gdGhpcworICAvLyBwYWdl
IHRvIGZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwpLgorIAorICAvLyBm
YWlscyBpZiBiYWQKKyAgLy8gNSkgV2hlbiBhIGxpbmsgaXMgY2xpY2tlZCBpbiBhIHNhbmRib3hl
ZCBpZnJhbWUsIHRoZSBkb2N1bWVudCBuYXZpZ2F0ZWQgdG8gaXMgc2FuZGJveGVkCisgIC8vIHRo
ZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBkb2N1bWVudCBhbmQgaXMgbm90IHNhbWUgb3JpZ2luIHdp
dGggcGFyZW50IGRvY3VtZW50CisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfZF9p
ZjYuaHRtbCB3aGljaCBzaW11bGF0ZXMgYSBsaW5rIGNsaWNrIGFuZCBuYXZpZ2F0ZXMKKyAgLy8g
dG8gZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNy5odG1sIHdoaWNoIGF0dGVtcHRzIHRvIGNhbGwg
YmFjayBpbnRvIGl0cyBwYXJlbnQpLgorCQorICAvLyBmYWlscyBpZiBiYWQKKyAgLy8gNikgQW4g
aWZyYW1lIChpZl84KSBoYXMgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0
cyIsIHRoZSBzYW5kYm94ZWQgZG9jdW1lbnQgCisgIC8vIChmaWxlX2lmcmFtZV9zYW5kYm94X2Rf
aWZfOC5odG1sKSB0aGF0IGl0IGNvbnRhaW5zIGFjY2Vzc2VzIGl0cyBwYXJlbnQgKHRoaXMgZmls
ZSkgYW5kIHJlbW92ZXMgCisgIC8vICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kIHRoZW4gdHJpZ2dl
cnMgYSByZWxvYWQuIAorICAvLyBUaGUgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGFj
Y2VzcyBpdHMgcGFyZW50ICh0aGlzIGZpbGUpLgorICAKKyAgLy8gZmFpbHMgaWYgYmFkCisgIC8v
IDcpIEFuIGlmcmFtZSAoaWZfOSkgaGFzIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93
LXNjcmlwdHMiLCB0aGUgc2FuZGJveGVkIGRvY3VtZW50IAorICAvLyAoZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmXzkuaHRtbCkgdGhhdCBpdCBjb250YWlucyBhY2Nlc3NlcyBpdHMgcGFyZW50ICh0
aGlzIGZpbGUpIGFuZCByZW1vdmVzIAorICAvLyAnYWxsb3ctc2NyaXB0cycgYW5kIHRoZW4gdHJp
Z2dlcnMgYSByZWxvYWQuIAorICAvLyBUaGUgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhYmxlIHRv
IHJ1biBhIHNjcmlwdCBhbmQgYWNjZXNzIGl0cyBwYXJlbnQgKHRoaXMgZmlsZSkuCisKKyAgLy8g
b3BlbiB1cCB0aGUgdG9wIG5hdmlnYXRpb24gdGVzdHMKKwkKKyAgLy8gZmFpbHMgaWYgYmFkIAor
ICAvLyA4KSBpZnJhbWUgd2l0aCBzYW5kYm94PSdhbGxvdy1zY3JpcHRzJyBjYW4gTk9UIG5hdmln
YXRlIHRvcAorICAvLyBmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYxLmh0bWwgY29udGFpbnMgZmls
ZV9pZnJhbWVfc2FuZGJveF9lX2lmNi5odG1sIHdoaWNoIAorICAvLyBhdHRlbXB0cyB0byBuYXZp
Z2F0ZSB0b3AKKyAgd2luZG93Lm9wZW4oImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjEuaHRtbCIp
OworCQorICAvLyBmYWlscyBpZiBiYWQgCisgIC8vIDkpIGlmcmFtZSB3aXRoIHNhbmRib3g9J2Fs
bG93LXNjcmlwdHMnIG5lc3RlZCBpbnNpZGUgaWZyYW1lIHdpdGgKKyAgLy8gJ2FsbG93LXRvcC1u
YXZpZ2F0aW9uIGFsbG93LXNjcmlwdHMnIGNhbiBOT1QgbmF2aWdhdGUgdG9wIAorICAvLyBmaWxl
X2lmcmFtZV9zYW5kYm94X2VfaWYyLmh0bWwgY29udGFpbnMgZmlsZV9pZnJhbWVfc2FuZGJveF9l
X2lmMS5odG1sIHdoaWNoIAorICAvLyBjb250YWlucyBmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY2
Lmh0bWwgd2hpY2ggYXR0ZW1wdHMgdG8gbmF2aWdhdGUgdG9wCisgIHdpbmRvdy5vcGVuKCJmaWxl
X2lmcmFtZV9zYW5kYm94X2VfaWYyLmh0bWwiKTsKKworICAvLyBwYXNzZXMgaWYgZ29vZCAKKyAg
Ly8gMTApIGlmcmFtZSB3aXRoIHNhbmRib3g9J2FsbG93LXRvcC1uYXZpZ2F0aW9uIGFsbG93LXNj
cmlwdHMnIGNhbiBuYXZpZ2F0ZSB0b3AKKyAgLy8gZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMy5o
dG1sIGNvbnRhaW5zIGZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjUuaHRtbCB3aGljaCBuYXZpZ2F0
ZXMgdG9wCisgIHdpbmRvdy5vcGVuKCJmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwiKTsK
KworICAvLyBwYXNzZXMgaWYgZ29vZAorICAvLyAxMSkgaWZyYW1lIHdpdGggc2FuZGJveD0nYWxs
b3ctdG9wLW5hdmlnYXRpb24gYWxsb3ctc2NyaXB0cycgbmVzdGVkIGluc2lkZSBhbiBpZnJhbWUg
d2l0aAorICAvLyAnYWxsb3ctdG9wLW5hdmlnYXRpb24gYWxsb3ctc2NyaXB0cycgY2FuIG5hdmln
YXRlIHRvcCAKKyAgLy8gZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNC5odG1sIGNvbnRhaW5zIGZp
bGVfaWZyYW1lX3NhbmRib3hfZV9pZjMuaHRtbCB3aGljaCBjb250YWlucworICAvLyBmaWxlX2lm
cmFtZV9zYW5kYm94X2VfaWY1Lmh0bWwgd2hpY2ggbmF2aWdhdGVzIHRvcAorICB3aW5kb3cub3Bl
bigiZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNC5odG1sIik7Cit9CisKK3dpbmRvdy5tb2RpZmll
ZF9pZl84ID0gZmFsc2U7CisKK2Z1bmN0aW9uIHJlbG9hZF9pZl84KCkgeworICB2YXIgaWZfOCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl84Jyk7CisgIGlmXzguc3JjID0gJ2ZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjguaHRtbCc7Cit9CisKK2Z1bmN0aW9uIG1vZGlmeV9pZl84KCkgewor
ICAvLyBJZiB0aGlzIGlzIHRoZSBzZWNvbmQgdGltZSB0aGlzIGhhcyBiZWVuIGNhbGxlZAorICAv
LyB0aGF0J3MgYSBmYWlsZWQgdGVzdCAoYWxsb3ctc2FtZS1vcmlnaW4gd2FzIHJlbW92ZWQKKyAg
Ly8gdGhlIGZpcnN0IHRpbWUpLgorICBpZiAod2luZG93Lm1vZGlmaWVkX2lmXzgpIHsKKyAgICBv
a193cmFwcGVyKGZhbHNlLCAiYW4gc2FuZGJveGVkIGlmcmFtZSBmcm9tIHdoaWNoICdhbGxvdy1z
YW1lLW9yaWdpbicgd2FzIHJlbW92ZWQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyBpdHMg
cGFyZW50Iik7CisKKyAgICAvLyBuZWVkIHRvIHJldHVybiBoZXJlIHNpbmNlIHdlIGVuZCB1cCBp
biBhbiBpbmZpbml0ZSBsb29wIG90aGVyd2lzZQorICAgIHJldHVybjsKKyAgfQorCisgIHZhciBp
Zl84ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmXzgnKTsKKyAgd2luZG93Lm1vZGlmaWVk
X2lmXzggPSB0cnVlOworCisgIGlmXzguc2FuZGJveC52YWx1ZSA9ICdhbGxvdy1zY3JpcHRzJzsK
KyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhX2J1dHRvbicpOworfQorCit3aW5k
b3cubW9kaWZpZWRfaWZfOSA9IGZhbHNlOworCitmdW5jdGlvbiByZWxvYWRfaWZfOSgpIHsKKyAg
Y29uc29sZS5sb2coIk5VTUJFUiBOSU5FIik7CisgIHZhciBpZl85ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2lmXzknKTsKKyAgaWZfOS5zcmMgPSAnZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
OS5odG1sJzsKK30KKworZnVuY3Rpb24gbW9kaWZ5X2lmXzkoKSB7CisgIGNvbnNvbGUubG9nKCJt
b2RpZmllZF9pZl85IDogIiArIHdpbmRvdy5tb2RpZmllZF9pZl85KTsKKwkKKyAgLy8gSWYgdGhp
cyBpcyB0aGUgc2Vjb25kIHRpbWUgdGhpcyBoYXMgYmVlbiBjYWxsZWQKKyAgLy8gdGhhdCdzIGEg
ZmFpbGVkIHRlc3QgKGFsbG93LXNjcmlwdHMgd2FzIHJlbW92ZWQKKyAgLy8gdGhlIGZpcnN0IHRp
bWUpLgorICBpZiAod2luZG93Lm1vZGlmaWVkX2lmXzkpIHsKKyAgICBva193cmFwcGVyKGZhbHNl
LCAiYW4gc2FuZGJveGVkIGlmcmFtZSBmcm9tIHdoaWNoICdhbGxvdy1zY3JpcHRzJyBzaG91bGQg
YmUgcmVtb3ZlZCBzaG91bGQgbm90IGJlIGFibGUgdG8gYWNjZXNzIGl0cyBwYXJlbnQgdmlhIGEg
c2NyaXB0Iik7CisKKyAgICAvLyBuZWVkIHRvIHJldHVybiBoZXJlIHNpbmNlIHdlIGVuZCB1cCBp
biBhbiBpbmZpbml0ZSBsb29wIG90aGVyd2lzZQorICAgIHJldHVybjsKKyAgfQorCisgIHZhciBp
Zl85ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmXzknKTsKKyAgd2luZG93Lm1vZGlmaWVk
X2lmXzkgPSB0cnVlOworCisgIGlmXzkuc2FuZGJveC52YWx1ZSA9ICdhbGxvdy1zYW1lLW9yaWdp
bic7CisKKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhX2J1dHRvbjInKTsKK30K
Kzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+Cis8YSB0YXJnZXQ9Il9ibGFuayIg
aHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0
Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmli
dXRlIGZvciBJRlJBTUVzCis8cCBpZD0iZGlzcGxheSI+PC9wPgorPGRpdiBpZD0iY29udGVudCI+
Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIGlkPSJpZl8xIiBzcmM9ImZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4K
KzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzIiIHNyYz0iZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmMi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgor
PGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMyIgc3JjPSJmaWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWYzLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+Cis8
aWZyYW1lIHNhbmRib3g9ImFsbG93X3NjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4iIGlkPSJpZl81
IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9
IjEwIj48L2lmcmFtZT4KKzxpZnJhbWUgaWQ9ImlmX3NpYmxpbmciIHNyYz0iZmlsZV9pZnJhbWVf
c2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9p
ZnJhbWU+Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93X3NjcmlwdHMiIGlkPSJpZl82IiBzcmM9ImZp
bGVfaWZyYW1lX3NhbmRib3hfZF9pZjYuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lm
cmFtZT4KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyIg
aWQ9ImlmXzgiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5odG1sIiBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdp
biBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfOSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY5
Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+Cis8L2Rpdj4KKzxpbnB1dCB0
eXBlPSdidXR0b24nIGlkPSJhX2J1dHRvbiIgb25jbGljaz0ncmVsb2FkX2lmXzgoKSc+Cis8aW5w
dXQgdHlwZT0nYnV0dG9uJyBpZD0iYV9idXR0b24yIiBvbmNsaWNrPSdyZWxvYWRfaWZfOSgpJz4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>610203</attachid>
            <date>2012-03-28 10:49:41 -0700</date>
            <delta_ts>2012-04-04 15:34:37 -0700</delta_ts>
            <desc>WIP - iframe sandbox v8</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>46677</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYzNmZDA3NjhkNDZhYmRiNzdkMGU1MWQ0YmNi
NTJkNWFkZjRkMDQ0NQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtODQwLDE2ICs4NDAsMjcgQEAgcHVibGljOgogICAvKioKICAg
ICogR2V0IHRoZSBsb2NhbGl6ZWQgc3RyaW5nIG5hbWVkIHxhS2V5fCBpbiBwcm9wZXJ0aWVzIGZp
bGUgfGFGaWxlfC4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBHZXRMb2NhbGl6ZWRTdHJpbmco
UHJvcGVydGllc0ZpbGUgYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogYUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1hQSURMU3RyaW5nJiBhUmVzdWx0KTsKIAogICAvKioKKyAgICogQSBoZWxwZXIgZnVuY3Rp
b24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAg
ICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1
c2VkIGludGVybmFsbHkuCisgICAqCisgICAqIEBwYXJhbSBhQXR0cmlidXRlIAl0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisgICAqIEByZXR1cm4gCQkJdGhlIHNldCBvZiBmbGFn
cworICAgKi8KKyAgc3RhdGljIFBSVWludDMyIFBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Mo
Y29uc3QgbnNBU3RyaW5nJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNhbmRib3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBw
YXJhbWV0ZXJzIGdpdmVuKSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAg
ICogcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5z
cmVzdWx0IEZvcm1hdExvY2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQ
YXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIg
YVBhcmFtc0xlbmd0aCwKQEAgLTE5ODcsMzUgKzE5OTgsMzcgQEAgcHVibGljOgogICAgKiBmcm9t
IHRoZSBkb2N1bWVudCBpdCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVS
SUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAK
ICAgLyoqCiAgICAqIFNldCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUg
Z2l2ZW4gY2hhbm5lbCwgaWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2Yg
YUNoYW5uZWwuICBhUHJpbmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJv
dXRCbGFuayBpcyB0cnVlLCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmlu
Y2lwYWwgc2V0IHVwIG9uIGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBp
dC4gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9u
IHRoZSBjaGFubmVsLCBldmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAg
ICogZnJvbSB0aGUgY2hhbm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRo
ZSBwcmluY2lwYWwgd2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwu
CiAgICAqLwogICBzdGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFM
b2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFu
bmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBh
VVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0
QmxhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFi
b3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3du
ZXIgPSBmYWxzZSk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBh
QmluYXJ5RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNl
NjRTdHJpbmcpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFz
Y2lpU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRh
KTsKIAogICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IHBhc3Nl
ZCBpbiBwYXJhbWV0ZXIgaGFzIHRoZSBhdXRvY29tcGxldGUKLSAgICogZnVuY3Rpb25uYWxpdHkg
ZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9ybSBvd25lci4KKyAgICog
ZnVuY3Rpb25hbGl0eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3Jt
IG93bmVyLgogICAgKiBOT1RFOiB0aGUgY2FsbGVyIGhhcyB0byBtYWtlIHN1cmUgYXV0b2NvbXBs
ZXRlIG1ha2VzIHNlbnNlIGZvciB0aGUKICAgICogZWxlbWVudCdzIHR5cGUuCiAgICAqCiAgICAq
IEBwYXJhbSBhSW5wdXQgdGhlIGlucHV0IGVsZW1lbnQgdG8gY2hlY2suIE5PVEU6IGFJbnB1dCBj
YW4ndCBiZSBudWxsLgogICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgaGFz
IGF1dG9jb21wbGV0ZSBlbmFibGVkLgogICAgKi8KICAgc3RhdGljIGJvb2wgSXNBdXRvY29tcGxl
dGVFbmFibGVkKG5zSURPTUhUTUxJbnB1dEVsZW1lbnQqIGFJbnB1dCk7CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNJRG9jdW1lbnQuaAotLS0gYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysr
IGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCkBAIC0xMTksMTggKzExOSwxOCBA
QCBjbGFzcyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xhc3MgTGluazsKIGNsYXNzIEVs
ZW1lbnQ7CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNwYWNlIG1vemlsbGEKIAogI2Rl
ZmluZSBOU19JRE9DVU1FTlRfSUlEIFwKLXsgMHgyODNlYzI3ZCwgMHg1YjIzLCAweDQ5YjIsIFwN
Ci0gIHsgMHg5NCwgMHhkOSwgMHg5LCAweGI1LCAweGRiLCAweDQ1LCAweDMwLCAweDczIH0gfQ0K
K3sgMHg1N2ZlNDRhZSwgMHg2NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAw
eGE3LCAweDQzLCAweDI4LCAweGJlLCAweDg2IH0gfQogCiAKIC8vIEZsYWcgZm9yIEFkZFN0eWxl
U2hlZXQoKS4KICNkZWZpbmUgTlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFMT0cgICAgICAgICAgICAg
ICAgKDEgPDwgMCkKIAogLy8gRW51bSBmb3IgcmVxdWVzdGluZyBhIHBhcnRpY3VsYXIgdHlwZSBv
ZiBkb2N1bWVudCB3aGVuIGNyZWF0aW5nIGEgZG9jCiBlbnVtIERvY3VtZW50Rmxhdm9yIHsKICAg
RG9jdW1lbnRGbGF2b3JMZWdhY3lHdWVzcywgLy8gY29tcGF0IHdpdGggb2xkIGNvZGUgdW50aWwg
bWFkZSBIVE1MNS1jb21wbGlhbnQKQEAgLTQ1NSwxNyArNDU1LDI2IEBAIHB1YmxpYzoKICAgICog
Y2FsbGVycyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhY3Rpb24gYXMgbmVlZGVkIGlmIHRoZXkgd2Fu
dCB0aGlzCiAgICAqIGNoYW5nZSB0byBhY3R1YWxseSBjaGFuZ2UgYW55dGhpbmcgaW1tZWRpYXRl
bHkuCiAgICAqIEBzZWUgbnNCaWRpVXRpbHMuaAogICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9u
cyhQUlVpbnQzMiBhQmlkaU9wdGlvbnMpCiAgIHsKICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9w
dGlvbnM7CiAgIH0KLSAgCisKKyAgLyoqCisgICAqIEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3Ig
dGhpcyBkb2N1bWVudC4KKyAgICogQHNlZSBuc0lEb2NTaGVsbC5pZGwgZm9yIHRoZSBwb3NzaWJs
ZSBmbGFncworICAgKi8KKyAgUFJVaW50MzIgU2FuZGJveEZsYWdzKCkgY29uc3QKKyAgeworICAg
IHJldHVybiBtU2FuZGJveEZsYWdzOworICB9CisKICAgLyoqCiAgICAqIEFjY2VzcyBIVFRQIGhl
YWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAgKiBzb3VyY2Vz
LCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCiAgIHZpcnR1YWwgdm9pZCBHZXRIZWFkZXJE
YXRhKG5zSUF0b20qIGFIZWFkZXJGaWVsZCwgbnNBU3RyaW5nJiBhRGF0YSkgY29uc3QgPSAwOwog
ICB2aXJ0dWFsIHZvaWQgU2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhaGVhZGVyRmllbGQsIGNvbnN0
IG5zQVN0cmluZyYgYURhdGEpID0gMDsKIAogICAvKioKQEAgLTE4MTIsMTYgKzE4MjEsMjEgQEAg
cHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1bWVudCBpcyB0cnVlLCBtT3JpZ2luYWxE
b2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAgIC8vIGRvY3VtZW50LgogICBuc0NPTVB0
cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7CiAKICAgLy8gVGhlIGJpZGkgb3B0aW9u
cyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBiaXRmaWVsZCBtZWFucyBpcwogICAvLyBk
ZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50MzIgbUJpZGlPcHRpb25zOwogCisgIC8v
IFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVudC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFs
dWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRoZQorICAvLyBhc3NvY2lhdGVkIElGUkFN
RSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3RlbnQuIFRoZXNlIGFyZSBzZXQg
YXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRhYmxlIC0gc2VlIG5zSURvY1NoZWxsLmlk
bCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICBQUlVpbnQzMiBtU2FuZGJveEZsYWdzOworCiAg
IG5zQ1N0cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnNDU3RyaW5nIG1Db250
ZW50VHlwZTsKIHByb3RlY3RlZDoKIAogICAvLyBUaGUgZG9jdW1lbnQncyBzZWN1cml0eSBpbmZv
CiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VjdXJpdHlJbmZvOwogCmRpZmYgLS1naXQgYS9j
b250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnND
b250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3Bw
CisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC05MTUsMTYgKzkx
NSw2MiBAQCBuc0NvbnRlbnRVdGlsczo6R2V0UGFyc2VyU2VydmljZSgpCiAgICAgbnNyZXN1bHQg
cnYgPSBDYWxsR2V0U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwgJnNQYXJzZXJTZXJ2aWNlKTsK
ICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNlclNlcnZpY2UgPSBuc251bGw7
CiAgICAgfQogICB9CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNlOwogfQorLyoqCisgKiBBIGhl
bHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmlidXRlIChvZiBhbiA8aWZy
YW1lPiBvcgorICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBv
ZiBmbGFncyB1c2VkIGludGVybmFsbHkuCisgKgorICogQHBhcmFtIGFBdHRyaWJ1dGUgICAgdGhl
IHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJldHVybiAgICAgICAgICAgICAg
dGhlIHNldCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRpbHM6OlBhcnNlU2Fu
ZGJveEF0dHJpYnV0ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBzYW5kYm94QXR0clZhbHVlKQor
eworICAvLyBJZiB0aGVyZSdzIGEgc2FuZGJveCBhdHRyaWJ1dGUgYXQgYWxsIChhbmQgdGhlcmUg
aXMgaWYgdGhpcyBpcyBiZWluZworICAvLyBjYWxsZWQpLCBzdGFydCBvZmYgYnkgc2V0dGluZyBh
bGwgdGhlIHJlc3RyaWN0aW9uIGZsYWdzLgorICBQUlVpbnQzMiBvdXQgPSBuc0lEb2NTaGVsbDo6
U0FOREJPWEVEX05BVklHQVRJT04gfAorICAgIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfVE9QTEVW
RUxfTkFWSUdBVElPTiB8CisgICAgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9QTFVHSU5TIHwgbnNJ
RG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4gfAorICAgIG5zSURvY1NoZWxsOjpTQU5EQk9YRURf
Rk9STVMgfCBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1NDUklQVFMgfAorICAgIG5zSURvY1NoZWxs
OjpTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTOworCisgIGlmICghc2FuZGJveEF0dHJWYWx1
ZS5Jc0VtcHR5KCkpIHsKKyAgICAvLyBUaGUgc2VwYXJhdG9yIG9wdGlvbmFsIGZsYWcgaXMgdXNl
ZCBiZWNhdXNlIHRoZSBIVE1MNSBzcGVjIHNheXMgYW55CisgICAgLy8gd2hpdGVzcGFjZSBpcyBv
ayBhcyBhIHNlcGFyYXRvciwgd2hpY2ggaXMgd2hhdCB0aGlzIGRvZXMuCisgICAgSFRNTFNwbGl0
T25TcGFjZXNUb2tlbml6ZXIgdG9rZW5pemVyKHNhbmRib3hBdHRyVmFsdWUsICcgJywKKyAgICAg
IG5zQ2hhclNlcGFyYXRlZFRva2VuaXplclRlbXBsYXRlPG5zQ29udGVudFV0aWxzOjpJc0hUTUxX
aGl0ZXNwYWNlPjo6U0VQQVJBVE9SX09QVElPTkFMKTsKKworICAgIHdoaWxlICh0b2tlbml6ZXIu
aGFzTW9yZVRva2VucygpKSB7CisgICAgICBuc0RlcGVuZGVudFN1YnN0cmluZyB0b2tlbiA9IHRv
a2VuaXplci5uZXh0VG9rZW4oKTsKKworICAgICAgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xp
dGVyYWwoImFsbG93LXNjcmlwdHMiKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpT
QU5EQk9YRURfU0NSSVBUUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxz
TGl0ZXJhbCgiYWxsb3ctc2FtZS1vcmlnaW4iKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1No
ZWxsOjpTQU5EQk9YRURfT1JJR0lOOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VF
cXVhbHNMaXRlcmFsKCJhbGxvdy1mb3JtcyIpKSB7CisgICAgICAgIG91dCAmPSB+bnNJRG9jU2hl
bGw6OlNBTkRCT1hFRF9GT1JNUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1
YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7CisgICAgICAgIC8vIGFsbG93LXNjcmlwdHMg
cmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRTIGFuZAorICAgICAgICAvLyBTQU5EQk9YRURf
QVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBvdXQgJj0gfm5zSURvY1NoZWxsOjpTQU5EQk9Y
RURfU0NSSVBUUzsKKyAgICAgICAgb3V0ICY9IH5uc0lEb2NTaGVsbDo6U0FOREJPWEVEX0FVVE9N
QVRJQ19GRUFUVVJFUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0
ZXJhbCgiYWxsb3ctdG9wLW5hdmlnYXRpb24iKSkgeworICAgICAgICBvdXQgJj0gfm5zSURvY1No
ZWxsOjpTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTjsKKyAgICAgIH0KKyAgICB9CisgIH0K
KworICByZXR1cm4gb3V0OworfQogCiAjaWZkZWYgTU9aX1hURgogbnNJWFRGU2VydmljZSoKIG5z
Q29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFzWFRGU2VydmljZSkgewog
ICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZzWFRGU2Vy
dmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKQEAgLTY0NTAsMTcgKzY0OTYsMTggQEAg
bnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJpdHlDb250ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8gc3RhdGljCiBib29sCiBuc0NvbnRlbnRV
dGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFGb3JjZU93bmVyKQogewog
ICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBjaGFubmVsLCBidXQgb25seSBmb3IgY2hh
bm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBjb250ZXh0
LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25nIHRoYXQgdGhlIG93bmVyIGlzIGlnbm9y
ZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1cHBsaWVkKSB1bmxlc3MgdGhlIFVSSSBp
cyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6YmxhbmsuCiAgIC8vIFhYWDogSWYgdGhpcyBp
cyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJzIGZvciB3aGF0IG93bmVycwpAQCAtNjQ2
OCwyMyArNjUxNSwyNyBAQCBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJp
CiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVsbDo6TG9hZFVSSSB3aGVyZSB3ZSBmYWxs
IGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRoZSBvd25lciBpZiBjYWxsZWQgZnJvbSBj
aHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAgdmVyeSB3cm9uZyBpZiB0aGlzIGNvZGUg
Y2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhhdAogICAvLyAgICAgIGNhbid0IHByb3Zp
ZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAgIC8vCiAgIC8vICAgICAgKEN1cnJlbnRs
eSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4gdGhleSBhcmUgY3JlYXRlZCEKICAgLy8g
ICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3VsZCBiZSBiYWQhKQogICAvLworICAvLyBJ
ZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIgd2lsbCBiZSBzZXQsIGV2ZW4gZm9yIGEg
Y2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0cyBvd24gc2VjdXJpdHkgY29udGV4dC4g
VGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1FCisgIC8vIHNhbmRib3ggYXR0cmlidXRl
LCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFuZCBpdHMgZG9jdW1lbnQpIHRvCisgIC8v
IGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFsLgogICBib29sIGluaGVyaXQ7CiAgIC8v
IFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dCB0byByZXR1cm4gc3VjY2VzcyBm
b3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24ndCBjYWxsIE5TX0lzQWJvdXRCbGFu
aygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBjb25kaXRpb24gbmVlZHMgdG8gbWF0
Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQgd2hlcmUKICAgLy8gd2UncmUg
Y2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRoZSBvd25lci4KLSAgaWYgKE5TX1NV
Q0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYmCi0g
ICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0Qmxhbmso
YVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChOU19TVUNDRUVERUQoVVJJSW5oZXJp
dHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgorICAgICAgKGluaGVyaXQgfHwg
KGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpKSkgewogICAg
IGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7
CiAgIH0KIAogICAvLwogICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8g
SWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0
IG1heSBuZWVkCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIv
Y29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25z
RG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTIz
OTYsMTYgKzIzOTYsMjUgQEAgbnNEb2N1bWVudDo6U3RhcnREb2N1bWVudExvYWQoY29uc3QgY2hh
cgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgnOycsIHNlbWljb2xvbiwgZW5kKTsKICAgICBTZXRD
b250ZW50VHlwZUludGVybmFsKFN1YnN0cmluZyhzdGFydCwgc2VtaWNvbG9uKSk7CiAgIH0KIAog
ICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhhQ2hhbm5lbCk7CiAKICAgbUNoYW5uZWwgPSBhQ2hh
bm5lbDsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRvY3No
ZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdzCisgIC8vIHRvIHRoZSBkb2N1bWVudC4gVGhlc2Ug
YXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgaGVyZS4KKyAgbnNDT01QdHI8bnNJRG9jU2hl
bGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNvbnRhaW5lcik7CisKKyAgaWYgKGRv
Y1NoZWxsKSB7CisgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2FuZGJveEZsYWdzKCZt
U2FuZGJveEZsYWdzKTsKKyAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworICB9CisKICAg
bnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAK
ICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNEb2N1bWVudDo6SW5pdENTUCgpCmRp
ZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9i
YXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVM
b2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTEx
MiwxNiArMTEyLDE4IEBACiAjaW5jbHVkZSAibW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNs
dWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIK
ICNpbmNsdWRlICJtb3ppbGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlv
dXQvUmVuZGVyRnJhbWVQYXJlbnQuaCIKIAogI2luY2x1ZGUgImpzYXBpLmgiCiAKKyNpbmNsdWRl
ICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCisKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXll
cnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5b3V0OwogdHlwZWRlZiBGcmFtZU1ldHJp
Y3M6OlZpZXdJRCBWaWV3SUQ7CiAKIGNsYXNzIG5zQXN5bmNEb2NTaGVsbERlc3Ryb3llciA6IHB1
YmxpYyBuc1J1bm5hYmxlCiB7CkBAIC00NjgsMTYgKzQ3MCw2NCBAQCBuc0ZyYW1lTG9hZGVyOjpS
ZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3QgdG8gYmUgc2FmZSwgcmVjaGVjayB1
cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQpOwogICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsTG9hZEluZm8+IGxvYWRJbmZvOwog
ICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9BZGRSZWZzKGxvYWRJbmZvKSk7CiAg
IE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9GQUlMVVJFKTsKIAorICAvLyBJcyB0
aGlzIGFuIDxpZnJhbWU+IHdpdGggYSBzYW5kYm94IGF0dHJpYnV0ZSBvciBhIHBhcmVudCB3aGlj
aCBpcworICAvLyBzYW5kYm94ZWQgPworICBuc0hUTUxJRnJhbWVFbGVtZW50ICogaWZyYW1lID0K
KyAgICBuc0hUTUxJRnJhbWVFbGVtZW50OjpGcm9tQ29udGVudChtT3duZXJDb250ZW50KTsKKwor
ICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworCisgIGlmIChpZnJhbWUpIHsKKyAgICBzYW5k
Ym94RmxhZ3MgPSBpZnJhbWUtPkdldFNhbmRib3hGbGFncygpOworCisgICAgUFJVaW50MzIgcGFy
ZW50U2FuZGJveEZsYWdzID0gMDsKKworICAgIC8vIEdldCB0aGUgcGFyZW50J3Mgc2FuZGJveCBm
bGFncywgdGhleSdyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZQorICAgIC8vIGZyYW1lIGJl
aW5nIGxvYWRlZCBuZWVkcyB0byBiZSBzYW5kYm94ZWQuCisgICAgbnNDT01QdHI8bnNJRG9jU2hl
bGxUcmVlSXRlbT4gcGFyZW50RG9jU2hlbGxJdGVtOworICAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
VHJlZUl0ZW0+IGN1ckRvY1NoZWxsSXRlbSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG1Eb2NTaGVsbCk7
CisKKyAgICBpZiAoTlNfU1VDQ0VFREVEKGN1ckRvY1NoZWxsSXRlbS0+R2V0UGFyZW50KGdldHRl
cl9BZGRSZWZzKHBhcmVudERvY1NoZWxsSXRlbSkpKSkgeworICAgICAgbnNDT01QdHI8bnNJRG9j
dW1lbnQ+IHBhcmVudERvYyA9IGRvX0dldEludGVyZmFjZShwYXJlbnREb2NTaGVsbEl0ZW0pOwor
CisgICAgICBpZiAocGFyZW50RG9jKSB7CisgICAgICAgIHBhcmVudFNhbmRib3hGbGFncyA9IHBh
cmVudERvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHNhbmRi
b3hGbGFncyB8fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgIGlmIChwYXJlbnRTYW5kYm94
RmxhZ3MpIHsKKyAgICAgICAgLy8gVGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0cmljdGlvbnMs
IG5vdCByZW1vdmUgdGhlbS4KKyAgICAgICAgc2FuZGJveEZsYWdzIHw9IHBhcmVudFNhbmRib3hG
bGFnczsKKyAgICAgIH0KKworICAgICAgbURvY1NoZWxsLT5TZXRTYW5kYm94RmxhZ3Moc2FuZGJv
eEZsYWdzKTsKKworICAgICAgLy8gU2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGluZyBmb3Igc2Ny
aXB0cyBhbmQgcGx1Z2lucyBhcyBzcGVjaWZpZWQuCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYg
bnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgICAgIG1Eb2NTaGVsbC0+U2V0
QWxsb3dKYXZhc2NyaXB0KGZhbHNlKTsKKyAgICAgIH0KKworICAgICAgaWYgKHNhbmRib3hGbGFn
cyAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfUExVR0lOUykgeworICAgICAgICBtRG9jU2hlbGwt
PlNldEFsbG93UGx1Z2lucyhmYWxzZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gSWYg
dGhpcyBpcyBhbiA8aWZyYW1lPiBhbmQgaXQncyBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9y
aWdpbgorICAvLyB3ZSB3aWxsIHNldCBpdCB1cCB3aXRoIGEgbnVsbCBwcmluY2lwYWwgbGF0ZXIg
aW4gbnNEb2NTaGVsbDo6RG9VUklMb2FkLgorICAvLyBXZSBkbyBpdCB0aGVyZSB0byBjb3JyZWN0
bHkgc2FuZGJveCBjb250ZW50IHRoYXQgd2FzIGxvYWRlZCBpbnRvCisgIC8vIHRoZSBpZnJhbWUg
dmlhIG90aGVyIG1ldGhvZHMgdGhhbiB0aGUgc3JjIGF0dHJpYnV0ZS4KICAgLy8gV2UnbGwgdXNl
IG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZSBkb2N1bWVudCBsb2FkZWQgaW5zaWRlIHVz
LiAgVGhpcwogICAvLyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvIHByZXZlbnQgWFNTIGF0
dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbgogICAvLyBzdWJmcmFtZXMhCiAgIGxvYWRJbmZv
LT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOwogCiAgIG5zQ09NUHRy
PG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgp
LT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1Mo
cnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmggYi9j
b250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNH
a0F0b21MaXN0LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaApAQCAtOTMs
MTcgKzkzLDIxIEBAIEdLX0FUT00oYWN0dWF0ZSwgImFjdHVhdGUiKQogR0tfQVRPTShhZGRyZXNz
LCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVyLCAiYWZ0ZXIiKQogR0tfQVRPTShhZnRlcl9lbmQs
ICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRlcl9zdGFydCwgImFmdGVyX3N0YXJ0IikKIEdLX0FU
T00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9NKGFsaW5rLCAiYWxpbmsiKQogR0tfQVRPTShhbGws
ICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50cywgImFsbG93ZXZlbnRzIikKK0dLX0FUT00oYWxs
b3dmb3JtcywgImFsbG93LWZvcm1zIikKIEdLX0FUT00oYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMs
ICJhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucyIpCitHS19BVE9NKGFsbG93c2FtZW9yaWdpbiwgImFs
bG93LXNhbWUtb3JpZ2luIikKK0dLX0FUT00oYWxsb3dzY3JpcHRzLCAiYWxsb3ctc2NyaXB0cyIp
CitHS19BVE9NKGFsbG93dG9wbmF2aWdhdGlvbiwgImFsbG93LXRvcC1uYXZpZ2F0aW9uIikKIEdL
X0FUT00oYWxsb3d1bnRydXN0ZWQsICJhbGxvd3VudHJ1c3RlZCIpCiBHS19BVE9NKGFsdCwgImFs
dCIpCiBHS19BVE9NKGFsdGVybmF0ZSwgImFsdGVybmF0ZSIpCiBHS19BVE9NKGFsd2F5cywgImFs
d2F5cyIpCiBHS19BVE9NKGFuY2VzdG9yLCAiYW5jZXN0b3IiKQogR0tfQVRPTShhbmNlc3Rvck9y
U2VsZiwgImFuY2VzdG9yLW9yLXNlbGYiKQogR0tfQVRPTShfYW5kLCAiYW5kIikKIEdLX0FUT00o
YW55LCAiYW55IikKQEAgLTg3NywxNiArODgxLDE3IEBAIEdLX0FUT00ocm93c3BhbiwgInJvd3Nw
YW4iKQogR0tfQVRPTShycCwgInJwIikKIEdLX0FUT00ocnQsICJydCIpCiBHS19BVE9NKHJ0bCwg
InJ0bCIpCiBHS19BVE9NKHJ1YnksICJydWJ5IikKIEdLX0FUT00ocnVsZSwgInJ1bGUiKQogR0tf
QVRPTShydWxlcywgInJ1bGVzIikKIEdLX0FUT00ocywgInMiKQogR0tfQVRPTShzYW1wLCAic2Ft
cCIpCitHS19BVE9NKHNhbmRib3gsICJzYW5kYm94IikKIEdLX0FUT00oc2JhdHRyLCAic2JhdHRy
IikKIEdLX0FUT00oc2NhbGUsICJzY2FsZSIpCiBHS19BVE9NKHNjYW4sICJzY2FuIikKIEdLX0FU
T00oc2NoZW1lLCAic2NoZW1lIikKIEdLX0FUT00oc2NvcGUsICJzY29wZSIpCiBHS19BVE9NKHNj
b3BlZCwgInNjb3BlZCIpCiBHS19BVE9NKHNjcmVlbiwgInNjcmVlbiIpCiBHS19BVE9NKHNjcmVl
blgsICJzY3JlZW5YIikKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxGb3JtRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVs
ZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVu
dC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNw
cApAQCAtNjg0LDE3ICs2ODQsMjUgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNl
dChuc0V2ZQogICAgIHJldHVybiBEb1Jlc2V0KCk7CiAgIH0KIAogICBpZiAoTlNfRk9STV9TVUJN
SVQgPT0gYU1lc3NhZ2UpIHsKICAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgbm90IGluIGEg
ZG9jdW1lbnQuCiAgICAgaWYgKCFkb2MpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAgICB9Ci0g
ICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3Jl
IGluIGEgc2FuZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1Ym1pdAorICAgIC8vIGlzIGRpc2FibGVk
LgorICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisKKyAg
ICBpZiAoIShzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX0ZPUk1TKSkgewor
ICAgICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAgfQorCisgICAgcmV0dXJuIE5TX09L
OwogICB9CiAKICAgTU9aX0FTU0VSVChmYWxzZSk7CiAgIHJldHVybiBOU19PSzsKIH0KIAogbnNy
ZXN1bHQKIG5zSFRNTEZvcm1FbGVtZW50OjpEb1Jlc2V0KCkKQEAgLTE2ODUsMTYgKzE2OTMsMjgg
QEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkNoZWNrVmFsaWRGb3JtU3VibWlzcwogICAgKiBUT0RPOiB0
aGUgY2hlY2sgZm9yIG9ic2VydmVyIHNob3VsZCBiZSByZW1vdmVkIGxhdGVyIHdoZW4gSFRNTDUg
Rm9ybXMgd2lsbAogICAgKiBiZSBzcHJlYWQgZW5vdWdoIGFuZCBhdXRob3JzIHdpbGwgYXNzdW1l
IGZvcm1zIGNhbid0IGJlIHN1Ym1pdHRlZCB3aGVuCiAgICAqIGludmFsaWQuIFNlZSBidWcgNTg3
NjcxLgogICAgKi8KIAogICBOU19BU1NFUlRJT04oIUhhc0F0dHIoa05hbWVTcGFjZUlEX05vbmUs
IG5zR2tBdG9tczo6bm92YWxpZGF0ZSksCiAgICAgICAgICAgICAgICAiV2Ugc2hvdWxkbid0IGJl
IHRoZXJlIGlmIG5vdmFsaWRhdGUgaXMgc2V0ISIpOwogCisgIC8vIERvbid0IGRvIHZhbGlkYXRp
b24gZm9yIGEgZm9ybSBzdWJtaXQgZG9uZSBieSBhIHNhbmRib3hlZCBkb2N1bWVudCB0aGF0Cisg
IC8vIGRvZXNuJ3QgaGF2ZSAnYWxsb3ctZm9ybXMnLCB0aGUgc3VibWl0IHdpbGwgaGF2ZSBiZWVu
IGJsb2NrZWQgYW5kIHRoZQorICAvLyBIVE1MNSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IHZhbGlk
YXRlIGluIHRoaXMgY2FzZS4KKyAgbnNJRG9jdW1lbnQqIGRvYyA9IEdldEN1cnJlbnREb2MoKTsK
KyAgaWYgKGRvYykgeworICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZs
YWdzKCk7CisKKyAgICBpZiAoc2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9G
T1JNUykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisgICAgICAgICAgICAgICAK
ICAgLy8gV2hlbiAuc3VibWl0KCkgaXMgY2FsbGVkIGFFdmVudCA9IG5zbnVsbCBzbyB3ZSBjYW4g
cmVseSBvbiB0aGF0IHRvIGtub3cgaWYKICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGUgdmFsaWRp
dHkgb2YgdGhlIGZvcm0uCiAgIG5zQ09NUHRyPG5zSU9ic2VydmVyU2VydmljZT4gc2VydmljZSA9
CiAgICAgbW96aWxsYTo6c2VydmljZXM6OkdldE9ic2VydmVyU2VydmljZSgpOwogICBpZiAoIXNl
cnZpY2UpIHsKICAgICBOU19XQVJOSU5HKCJObyBvYnNlcnZlciBzZXJ2aWNlIGF2YWlsYWJsZSEi
KTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNI
VE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTMzLDgxICszMywzMyBAQAogICogdGhlIHByb3Zpc2lv
bnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlcgogICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUg
TEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVk
ZSAibW96aWxsYS9VdGlsLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5o
IgotI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0lE
T01Eb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCi0jaW5jbHVk
ZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRl
ICJuc0lEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1
ZGUgIm5zRE9NRXJyb3IuaCIKLSNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNT
dHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCi1jbGFz
cyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1l
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1l
bnQKLXsKLXB1YmxpYzoKLSAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5z
SU5vZGVJbmZvPiBhTm9kZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9t
OjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIp
OwotICB2aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7Ci0KLSAgLy8gbnNJU3VwcG9ydHMK
LSAgTlNfREVDTF9JU1VQUE9SVFNfSU5IRVJJVEVECi0KLSAgLy8gbnNJRE9NTm9kZQotICBOU19G
T1JXQVJEX05TSURPTU5PREUobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5z
SURPTUVsZW1lbnQKLSAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFt
ZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1MRWxlbWVudAotICBOU19GT1JXQVJEX05TSURP
TUhUTUxFTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01I
VE1MSUZyYW1lRWxlbWVudAotICBOU19ERUNMX05TSURPTUhUTUxJRlJBTUVFTEVNRU5UCi0KLSAg
Ly8gbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLSAgTlNfREVDTF9OU0lET01HRVRTVkdET0NVTUVOVAot
Ci0gIC8vIG5zSUNvbnRlbnQKLSAgdmlydHVhbCBib29sIFBhcnNlQXR0cmlidXRlKFBSSW50MzIg
YU5hbWVzcGFjZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBh
QXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJp
bmcmIGFWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUm
IGFSZXN1bHQpOwotICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBu
c0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKLSAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0
ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OwotCi0gIHZpcnR1YWwg
bnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQp
IGNvbnN0OwotICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKLX07Ci0K
LQogTlNfSU1QTF9OU19ORVdfSFRNTF9FTEVNRU5UX0NIRUNLX1BBUlNFUihJRnJhbWUpCiAKLQog
bnNIVE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVk
PG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJzZXIpCiAgIDogbnNHZW5lcmljSFRNTEZyYW1l
RWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFyc2VyKQogewogfQogCiBuc0hUTUxJRnJhbWVFbGVt
ZW50Ojp+bnNIVE1MSUZyYW1lRWxlbWVudCgpCiB7CisgIGlmIChtU2FuZGJveFRva2VuTGlzdCkK
KyAgICBtU2FuZGJveFRva2VuTGlzdC0+RHJvcFJlZmVyZW5jZSgpOwogfQogCiAKIE5TX0lNUExf
QUREUkVGX0lOSEVSSVRFRChuc0hUTUxJRnJhbWVFbGVtZW50LG5zR2VuZXJpY0VsZW1lbnQpCiBO
U19JTVBMX1JFTEVBU0VfSU5IRVJJVEVEKG5zSFRNTElGcmFtZUVsZW1lbnQsbnNHZW5lcmljRWxl
bWVudCkKIAogRE9NQ0lfTk9ERV9EQVRBKEhUTUxJRnJhbWVFbGVtZW50LCBuc0hUTUxJRnJhbWVF
bGVtZW50KQogCkBAIC0xNTAsMTYgKzEwMiwyOCBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRD
b250ZW50V2luZG93KG5zCiB9CiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTElGcmFtZUVsZW1lbnQ6
OkdldFNWR0RvY3VtZW50KG5zSURPTURvY3VtZW50ICoqYVJlc3VsdCkKIHsKICAgcmV0dXJuIEdl
dENvbnRlbnREb2N1bWVudChhUmVzdWx0KTsKIH0KIAorTlNfSU1FVEhPRElNUAorbnNIVE1MSUZy
YW1lRWxlbWVudDo6R2V0U2FuZGJveChuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCoqIGFTYW5k
Ym94KQoreworICBpZiAoIW1TYW5kYm94VG9rZW5MaXN0KSB7CisgICAgbVNhbmRib3hUb2tlbkxp
c3QgPSBuZXcgbnNET01TZXR0YWJsZVRva2VuTGlzdCh0aGlzLCBuc0drQXRvbXM6OnNhbmRib3gp
OworICB9CisKKyAgTlNfQUREUkVGKCphU2FuZGJveCA9IG1TYW5kYm94VG9rZW5MaXN0KTsKKwor
ICByZXR1cm4gTlNfT0s7Cit9CisKIGJvb2wKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OlBhcnNlQXR0
cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpCiB7CiAgIGlmIChhTmFtZXNwYWNl
SUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKICAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRv
bXM6Om1hcmdpbndpZHRoKSB7CkBAIC0xNzgsMTYgKzE0MiwyMiBAQCBuc0hUTUxJRnJhbWVFbGVt
ZW50OjpQYXJzZUF0dHJpYnV0ZShQUkluCiAgICAgICByZXR1cm4gUGFyc2VGcmFtZWJvcmRlclZh
bHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAgICAgfQogICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tB
dG9tczo6c2Nyb2xsaW5nKSB7CiAgICAgICByZXR1cm4gUGFyc2VTY3JvbGxpbmdWYWx1ZShhVmFs
dWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OmFs
aWduKSB7CiAgICAgICByZXR1cm4gUGFyc2VBbGlnblZhbHVlKGFWYWx1ZSwgYVJlc3VsdCk7CiAg
ICAgfQorICAgIGlmIChhQXR0cmlidXRlID09IG5zR2tBdG9tczo6c2FuZGJveCkgeworICAgICAg
Ly8gVGhlIHNhbmRib3ggYXR0cmlidXRlIG5lZWRzIHRvIGJlIHBhcnNlZCBhcyBhbiBhdG9tIGFy
cmF5IHNvCisgICAgICAvLyBpdCBjYW4gYmUgZXhwb3NlZCBhcyBhIERPTVNldHRhYmxlVG9rZW5M
aXN0LgorICAgICAgYVJlc3VsdC5QYXJzZUF0b21BcnJheShhVmFsdWUpOworICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQogICB9CiAKICAgcmV0dXJuIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6
OlBhcnNlQXR0cmlidXRlKGFOYW1lc3BhY2VJRCwgYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWx1ZSwgYVJlc3VsdCk7CiB9
CiAKIHN0YXRpYyB2b2lkCiBNYXBBdHRyaWJ1dGVzSW50b1J1bGUoY29uc3QgbnNNYXBwZWRBdHRy
aWJ1dGVzKiBhQXR0cmlidXRlcywKQEAgLTI2OCw4ICsyMzgsMzcgQEAgbnNIVE1MSUZyYW1lRWxl
bWVudDo6SXNBdHRyaWJ1dGVNYXBwZWQoYwogCiAKIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMK
IG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0
CiB7CiAgIHJldHVybiAmTWFwQXR0cmlidXRlc0ludG9SdWxlOwogfQogCituc3Jlc3VsdAorbnNI
VE1MSUZyYW1lRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lB
dG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
QXR0clZhbHVlKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFOb3RpZnkpCit7CisgIGlmIChhTmFtZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5h
bWVTcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2
YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUsIGFuZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwK
KyAgICAvLyBzZXQgaXRzIHNhbmRib3ggZmxhZ3MgYXBwcm9wcmlhdGVseS4KKyAgICBpZiAobUZy
YW1lTG9hZGVyKSB7CisgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jc2hlbGwgPSBtRnJh
bWVMb2FkZXItPkdldEV4aXN0aW5nRG9jU2hlbGwoKTsKKworICAgICAgaWYgKGRvY3NoZWxsKSB7
CisgICAgICAgIFBSVWludDMyIG5ld0ZsYWdzID0gMDsKKyAgICAgICAgLy8gSWYgYSBOVUxMIGFW
YWx1ZSBpcyBwYXNzZWQgaW4sIHdlIHdhbnQgdG8gY2xlYXIgdGhlIHNhbmRib3ggZmxhZ3MKKyAg
ICAgICAgLy8gd2hpY2ggd2Ugd2lsbCBkbyBieSBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAg
aWYgKGFWYWx1ZSkgeworICAgICAgICAgIG5zQXV0b1N0cmluZyBzdHJWYWx1ZTsKKyAgICAgICAg
ICBhVmFsdWUtPlRvU3RyaW5nKHN0clZhbHVlKTsKKyAgICAgICAgICBuZXdGbGFncyA9IG5zQ29u
dGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKAorICAgICAgICAgICAgc3Ry
VmFsdWUpOworICAgICAgICB9CisgICAgICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3
RmxhZ3MpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1l
bnQ6OkFmdGVyU2V0QXR0cihhTmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOb3RpZnkpOworCit9CmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxJRnJhbWVFbGVtZW50LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRh
Yi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0g
Ki8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAx
LjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJl
IHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0
aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2Fy
ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5z
ZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIENvbW11bmljYXRvciBjbGll
bnQgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENv
ZGUgaXMKKyAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogUG9ydGlv
bnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5
OAorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0
aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwi
KSwKKyAqIG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAy
LjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9u
cyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRo
b3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhl
IExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICog
ZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhl
bSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRo
ZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9u
cyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBM
R1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNsdWRl
ICJtb3ppbGxhL1V0aWwuaCIKKworI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50Lmgi
CisjaW5jbHVkZSAibnNHZW5lcmljSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50Lmgi
CisjaW5jbHVkZSAibnNHa0F0b21zLmgiCisjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJuc0RPTUVycm9yLmgiCisjaW5j
bHVkZSAibnNSdWxlRGF0YS5oIgorI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRl
ICJuc0RPTVNldHRhYmxlVG9rZW5MaXN0LmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIK
KworY2xhc3MgbnNIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJhbWVF
bGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUhUTUxJRnJh
bWVFbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUdldFNW
R0RvY3VtZW50Cit7CitwdWJsaWM6CisgIG5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRS
ZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvLAorICAgICAgICAgICAgICAgICAgICAgIG1vemls
bGE6OmRvbTo6RnJvbVBhcnNlciBhRnJvbVBhcnNlciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZST01f
UEFSU0VSKTsKKyAgdmlydHVhbCB+bnNIVE1MSUZyYW1lRWxlbWVudCgpOworCisgIC8vIG5zSVN1
cHBvcnRzCisgIE5TX0RFQ0xfSVNVUFBPUlRTX0lOSEVSSVRFRAorCisgIC8vIG5zSURPTU5vZGUK
KyAgTlNfRk9SV0FSRF9OU0lET01OT0RFKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKKwor
ICAvLyBuc0lET01FbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NRUxFTUVOVChuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NSFRNTEVsZW1lbnQKKyAgTlNfRk9SV0FS
RF9OU0lET01IVE1MRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8g
bnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKKyAgTlNfREVDTF9OU0lET01IVE1MSUZSQU1FRUxFTUVO
VAorCisgIC8vIG5zSURPTUdldFNWR0RvY3VtZW50CisgIE5TX0RFQ0xfTlNJRE9NR0VUU1ZHRE9D
VU1FTlQKKworICAvLyBuc0lDb250ZW50CisgIHZpcnR1YWwgYm9vbCBQYXJzZUF0dHJpYnV0ZShQ
UkludDMyIGFOYW1lc3BhY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
QXRvbSogYUF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNBU3RyaW5nJiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0
clZhbHVlJiBhUmVzdWx0KTsKKyAgTlNfSU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1dGVNYXBwZWQo
Y29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CisgIHZpcnR1YWwgbnNNYXBSdWxlVG9B
dHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdDsKKworICB2
aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5vZGUgKiph
UmVzdWx0KSBjb25zdDsKKyAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xhc3NJbmZvKCk7
CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQs
IG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zQXR0clZhbHVlKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhTm90aWZ5KTsKKworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKSB7CisgICAgbnNB
dXRvU3RyaW5nIHNhbmRib3hBdHRyOworCisgICAgaWYgKEdldEF0dHIoa05hbWVTcGFjZUlEX05v
bmUsIG5zR2tBdG9tczo6c2FuZGJveCwgc2FuZGJveEF0dHIpKSB7CisgICAgICByZXR1cm4gbnND
b250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2FuZGJveEF0dHIpOwor
ICAgIH0KKworICAgIC8vIE5vIHNhbmRib3ggYXR0cmlidXRlLCBubyBzYW5kYm94IGZsYWdzLgor
ICAgIHJldHVybiAwOworICB9CisKKyAgc3RhdGljIG5zSFRNTElGcmFtZUVsZW1lbnQqIEZyb21D
b250ZW50KG5zSUNvbnRlbnQgKmFDb250ZW50KQorICB7CisgICAgaWYgKGFDb250ZW50LT5Jc0hU
TUwobnNHa0F0b21zOjppZnJhbWUpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG5zSFRNTElG
cmFtZUVsZW1lbnQqPihhQ29udGVudCk7CisgICAgcmV0dXJuIG5zbnVsbDsKKyAgfQorCitwcm90
ZWN0ZWQ6CisgIG5zUmVmUHRyPG5zRE9NU2V0dGFibGVUb2tlbkxpc3Q+ICBtU2FuZGJveFRva2Vu
TGlzdDsKK307CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERv
Y3VtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3Bw
Ci0tLSBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCisrKyBi
L2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCkBAIC0xMjcxLDE2
ICsxMjcxLDIxIEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3RyaW5nJiBhQ28KIHsK
ICAgYUNvb2tpZS5UcnVuY2F0ZSgpOyAvLyBjbGVhciBjdXJyZW50IGNvb2tpZSBpbiBjYXNlIHNl
cnZpY2UgZmFpbHM7CiAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gY29va2llIGlzbid0IGFu
IGVycm9yIGNvbmRpdGlvbi4KIAogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICBy
ZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3Jp
Z2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gcmVhZCBjb29raWVzCisgIC8vIGlzIHByb2hpYml0
ZWQuCisgIGlmIChtU2FuZGJveEZsYWdzICYgbnNJRG9jU2hlbGw6OlNBTkRCT1hFRF9PUklHSU4p
CisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisKICAgLy8gbm90IGhhdmlu
ZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNl
cnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJ
RCk7CiAgIGlmIChzZXJ2aWNlKSB7CiAgICAgLy8gR2V0IGEgVVJJIGZyb20gdGhlIGRvY3VtZW50
IHByaW5jaXBhbC4gV2UgdXNlIHRoZSBvcmlnaW5hbAogICAgIC8vIGNvZGViYXNlIGluIGNhc2Ug
dGhlIGNvZGViYXNlIHdhcyBjaGFuZ2VkIGJ5IFNldERvbWFpbgogICAgIG5zQ09NUHRyPG5zSVVS
ST4gY29kZWJhc2VVUkk7CiAgICAgTm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJl
ZnMoY29kZWJhc2VVUkkpKTsKIApAQCAtMTMwMSwxNiArMTMwNiwyMSBAQCBuc0hUTUxEb2N1bWVu
dDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTERvY3Vt
ZW50OjpTZXRDb29raWUoY29uc3QgbnNBU3RyaW5nJiBhQ29va2llKQogewogICBpZiAobURpc2Fi
bGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUg
ZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gd3JpdGUg
Y29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAmIG5zSURv
Y1NoZWxsOjpTQU5EQk9YRURfT1JJR0lOKQorICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJ
VFlfRVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJv
cgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShO
U19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSAmJiBtRG9jdW1lbnRV
UkkpIHsKICAgICBuc0NPTVB0cjxuc0lQcm9tcHQ+IHByb21wdDsKICAgICBuc0NPTVB0cjxuc1BJ
RE9NV2luZG93PiB3aW5kb3cgPSBHZXRXaW5kb3coKTsKICAgICBpZiAod2luZG93KSB7CiAgICAg
ICB3aW5kb3ctPkdldFByb21wdGVyKGdldHRlcl9BZGRSZWZzKHByb21wdCkpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25z
RG9jU2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9j
c2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcApAQCAtNzI3LDE2ICs3MjcsMTcgQEAgbnNEb2NTaGVs
bDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVTWV9GTEFHU19OT05FKSwKICAgICBt
QXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9XTiksCiAgICAgbUxvYWRUeXBlKDAp
LAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdpbkhlaWdodCgtMSksCiAgICAgbUl0
ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNUcmFuc0luZGV4KC0xKSwKICAgICBt
TG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hGbGFncygwKSwKICAgICBtQ3JlYXRl
ZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUpLAogICAgIG1BbGxvd1BsdWdpbnMo
dHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwKICAgICBtQWxsb3dNZXRhUmVkaXJl
Y3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwKICAgICBtQWxsb3dETlNQcmVmZXRj
aCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRydWUpLApAQCAtMjkwNywxNiArMjkw
OCw3MyBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pCiAgICAgICAg
ICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmRJ
dGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91bmRJdGVtIGhlcmUgZXZlbiBpZiBp
dCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0ZW0gc2luY2UgYWxsIHRoZSBuYW1l
cyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2Fz
ZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3IgZnVydGhlci4KIAorICAgICAgICAg
ICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwgd2UgbmVlZCB0byBkbyBzb21lIGV4
dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisKKyAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19HZXRJbnRlcmZhY2UoYU9y
aWdpbmFsUmVxdWVzdG9yKTsKKworICAgICAgICAgICAgaWYgKGRvYykgeworICAgICAgICAgICAg
ICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzKSB7CisgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gcm9vdDsKKyAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVJv
b3RUcmVlSXRlbShnZXR0ZXJfQWRkUmVmcyhyb290KSk7CisKKyAgICAgICAgICAgICAgICAvLyBJ
cyB0aGUgZm91bmQgaXRlbSBub3QgYSB0b3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBhbmQgbm90
IG91cnNlbGYgPworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHNlbGZBc0l0ZW0gPSBzdGF0aWNfY2FzdDxuc0lEb2NTaGVsbFRyZWVJdGVtICo+KHRoaXMpOwor
ICAgICAgICAgICAgICAgIGlmIChmb3VuZEl0ZW0gIT0gcm9vdCAmJiBmb3VuZEl0ZW0gIT0gc2Vs
ZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgYW4gYW5jZXN0b3Igb2Yg
dGhlIGZvdW5kSXRlbSA/CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNBbmNlc3RvciA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0
dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVt
LT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAgJiYgdG1wID09IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc0FuY2VzdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNBbmNlc3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm8sIHdlIGFyZSBub3QgYW4gYW5jZXN0b3IgYW5kIG91ciBkb2N1bWVudCBpcworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc2FuZGJveGVkLCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAg
ICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVG9w
IGxldmVsIGJyb3dzaW5nIGNvbnRleHQgLSBpcyBpdCBhbiBhbmNlc3RvciBvZiBvdXJzID8KKyAg
ICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAg
ICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsK
KworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG1wKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodG1wICYmIHRtcCA9PSBmb3VuZEl0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIGFuIGFuY2VzdG9yLCBhbmQgd2UgYXJlIHNhbmRib3hlZC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9wLW5hdmlnYXRpb24g
aXMgc2V0LCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX1RPUExFVkVMX05BVklH
QVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB0bXAtPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAgICAgICAgcmV0dXJuIE5TX09LOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29raW5nCiAgICAgICAgIAogICAgIC8v
IEZpcnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAtNDk0MywxNiArNTAwMSwzMCBAQCBuc0RvY1No
ZWxsOjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hl
bGw6OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0Fw
cFRhYjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpT
ZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgbVNhbmRib3hGbGFn
cyA9IGFTYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAor
bnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFncykKK3sK
KyAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisK
K05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHkoYm9vbCBhVmlzaWJpbGl0
eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICByZXR1cm4gTlNfT0s7CiAg
ICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmlld2VyLT5TaG93KCk7CiAg
ICAgfQogICAgIGVsc2UgewpAQCAtODEzMiwxNiArODIwNCwyOSBAQCBuc0RvY1NoZWxsOjpJbnRl
cm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVl
SXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2luZG93VGFyZ2V0
LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMo
dGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiB0YXJnZXREb2NT
aGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRhcmdldERvY1NoZWxsKSB7
CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVudCBpcyBzYW5kYm94ZWQg
YW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRlL2xvYWQgYSBmcmFtZSBp
dCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAgICAgLy8gRmluZEl0ZW1X
aXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3IgdGhlIHRhcmdldAorICAg
ICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgb3BlbiBhIG5ldyB3
aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0aG91Z2guIENoZWNrIGlmIHdlIGFy
ZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYgc28uCisgICAgICAgICAgICBOU19FTlNV
UkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1JfRkFJTFVSRSk7CisgICAgICAgICAgICBu
c0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3VtZW50KCk7CisgICAgICAg
ICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICAgICAgc2FuZGJveEZsYWdz
ID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBu
c0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgcmV0dXJu
IE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG5zQ09NUHRy
PG5zSURPTVdpbmRvdz4gd2luID0KICAgICAgICAgICAgICAgICBkb19HZXRJbnRlcmZhY2UoR2V0
QXNTdXBwb3J0cyh0aGlzKSk7CiAgICAgICAgICAgICBOU19FTlNVUkVfVFJVRSh3aW4sIE5TX0VS
Uk9SX05PVF9BVkFJTEFCTEUpOwogCiAgICAgICAgICAgICBuc0RlcGVuZGVudFN0cmluZyBuYW1l
KGFXaW5kb3dUYXJnZXQpOwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiBuZXdX
aW47CiAgICAgICAgICAgICBydiA9IHdpbi0+T3BlbihFbXB0eVN0cmluZygpLCAvLyBVUkwgdG8g
bG9hZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgICAgICAgICAgLy8gd2luZG93
IG5hbWUKQEAgLTg5MTMsMTggKzg5OTgsMzIgQEAgbnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVS
SSAqIGFVUkksCiAgICAgICAgIH0KICAgICAgICAgLy8gU2V0IHRoZSByZWZlcnJlciBleHBsaWNp
dGx5CiAgICAgICAgIGlmIChhUmVmZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJlcikgewogICAgICAg
ICAgICAgLy8gUmVmZXJyZXIgaXMgY3VycmVubHkgb25seSBzZXQgZm9yIGxpbmsgY2xpY2tzIGhl
cmUuCiAgICAgICAgICAgICBodHRwQ2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJlZmVycmVyVVJJKTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmlu
Y2lwYWwoZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKSk7Ci0gICAgbnNDb250ZW50VXRpbHM6OlNl
dFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlKTsKKyAg
ICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFsOworCisgICAgLy8gSWYgdGhl
IGNvbnRlbnQgYmVpbmcgbG9hZGVkIHNob3VsZCBiZSBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRv
IG9yaWdpbgorICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG51bGwgcHJpbmNpcGFsIGhl
cmUsIGFuZCB0aGVuIHRlbGwKKyAgICAvLyBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3du
ZXIgdG8gZm9yY2UgaXQgdG8gYmUgc2V0IGFzIHRoZQorICAgIC8vIGNoYW5uZWwgb3duZXIuCisg
ICAgaWYgKG1TYW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikgewor
ICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL251
bGxwcmluY2lwYWw7MSIpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBOb3Qgc2FuZGJveGVkIC0g
d2UgYWxsb3cgdGhlIGNvbnRlbnQgdG8gYXNzdW1lIGl0cyBuYXR1cmFsIG93bmVyLgorICAgICAg
b3duZXJQcmluY2lwYWwgPSBkb19RdWVyeUludGVyZmFjZShhT3duZXIpOworICAgIH0KKworICAg
IG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5l
bCwgYVVSSSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht
U2FuZGJveEZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lEb2NTaGVsbDo6U0FOREJPWEVEX09SSUdJTikpOwogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0
Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAg
IGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0
IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5u
ZWwtPgogICAgICAgICAgICAgU2V0RXhlY3V0aW9uUG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVY
RUNVVEVfTk9STUFMKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NT
aGVsbC5oIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKLS0tIGEvZG9jc2hlbGwvYmFzZS9u
c0RvY1NoZWxsLmgKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKQEAgLTc4MSwxNiAr
NzgxLDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBDcmVhdGUoKSBpcyBjYWxsZWQsIHRoZSB0eXBl
IGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAg
ICAgbUl0ZW1UeXBlOwogCiAgICAgLy8gSW5kZXggaW50byB0aGUgU0hUcmFuc2FjdGlvbiBsaXN0
LCBpbmRpY2F0aW5nIHRoZSBwcmV2aW91cyBhbmQgY3VycmVudAogICAgIC8vIHRyYW5zYWN0aW9u
IGF0IHRoZSB0aW1lIHRoYXQgdGhpcyBEb2NTaGVsbCBiZWdpbnMgdG8gbG9hZAogICAgIFBSSW50
MzIgICAgICAgICAgICAgICAgICAgIG1QcmV2aW91c1RyYW5zSW5kZXg7CiAgICAgUFJJbnQzMiAg
ICAgICAgICAgICAgICAgICAgbUxvYWRlZFRyYW5zSW5kZXg7CiAKKyAgICBQUlVpbnQzMiAgICAg
ICAgICAgICAgICAgICBtU2FuZGJveEZsYWdzOworCiAgICAgYm9vbCAgICAgICAgICAgICAgICAg
ICAgICAgbUNyZWF0ZWQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93U3Vi
ZnJhbWVzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1BsdWdpbnM7CiAg
ICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93SmF2YXNjcmlwdDsKICAgICBib29s
ICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzOwogICAgIGJvb2wgICAg
ICAgICAgICAgICAgICAgICAgIG1BbGxvd0ltYWdlczsKICAgICBib29sICAgICAgICAgICAgICAg
ICAgICAgICBtQWxsb3dETlNQcmVmZXRjaDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAg
ICBtQWxsb3dXaW5kb3dDb250cm9sOwpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NT
aGVsbC5pZGwgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAotLS0gYS9kb2NzaGVsbC9i
YXNlL25zSURvY1NoZWxsLmlkbAorKysgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbApA
QCAtNjcsMTcgKzY3LDE3IEBAIGludGVyZmFjZSBuc0lSZXF1ZXN0OwogaW50ZXJmYWNlIG5zSVNI
RW50cnk7CiBpbnRlcmZhY2UgbnNJTGF5b3V0SGlzdG9yeVN0YXRlOwogaW50ZXJmYWNlIG5zSVNl
Y3VyZUJyb3dzZXJVSTsKIGludGVyZmFjZSBuc0lET01TdG9yYWdlOwogaW50ZXJmYWNlIG5zSVBy
aW5jaXBhbDsKIGludGVyZmFjZSBuc0lXZWJCcm93c2VyUHJpbnQ7CiBpbnRlcmZhY2UgbnNJVmFy
aWFudDsKIAotW3NjcmlwdGFibGUsIHV1aWQoREJEMzlDMjEtNTc4OC00QzY4LTlEOTctMEZDRUUy
ODlCQ0UxKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDliMjgzMzM3LTA5N2QtNGZhOC1hMmRhLTkxNjMx
OGVhZjgyOCldCiBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogewogICAvKioK
ICAgICogTG9hZHMgYSBnaXZlbiBVUkkuICBUaGlzIHdpbGwgZ2l2ZSBwcmlvcml0eSB0byBsb2Fk
aW5nIHRoZSByZXF1ZXN0ZWQgVVJJCiAgICAqIGluIHRoZSBvYmplY3QgaW1wbGVtZW50aW5nCXRo
aXMgaW50ZXJmYWNlLiAgSWYgaXQgY2FuJ3QgYmUgbG9hZGVkIGhlcmUKICAgICogaG93ZXZlciwg
dGhlIFVSTCBkaXNwYXRjaGVyIHdpbGwgZ28gdGhyb3VnaCBpdHMgbm9ybWFsIHByb2Nlc3Mgb2Yg
Y29udGVudAogICAgKiBsb2FkaW5nLgogICAgKgpAQCAtNjA5LDkgKzYwOSw2NyBAQCBpbnRlcmZh
Y2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogICAgKiB3aGVuIGl0IGluaXRpYWxpemVzIHRo
ZSBkb2NzaGVsbC4KICAgICoKICAgICogSWYgc28sIHRoaXMgZG9jc2hlbGwgc2hvdWxkIGFjdCBs
aWtlIGEgY2hyb21lL2NvbnRlbnQgYm91bmRhcnkgZm9yIHRoZQogICAgKiBwdXJwb3NlcyBvZiB3
aW5kb3cudG9wIGFuZCB3aW5kb3cucGFyZW50LgogICAgKgogICAgKiBTZWUgYWxzbyBuc0lNb3pC
cm93c2VyRnJhbWUuCiAgICAqLwogICBhdHRyaWJ1dGUgYm9vbCBpc0Jyb3dzZXJGcmFtZTsKKwor
ICAvKioKKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3NoZWxsLiBUaGVzZSByZWZs
ZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUgb2YgdGhlIGFzc29j
aWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZgorICAgKiBleGlzdGVu
dC4gU2VlIHRoZSBIVE1MNSBzcGVjIGZvciBtb3JlIGRldGFpbHMuCisgICAqIFRoZXNlIGZsYWdz
IG9uIHRoZSBkb2NzaGVsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzYW5kYm94
CisgICAqIGF0dHJpYnV0ZSwgd2hpY2ggaXMgbW9kaWZpYWJsZS4gVGhleSBhcmUgb25seSB1c2Vk
IHdoZW4gbG9hZGluZyBuZXcKKyAgICogY29udGVudCwgc2FuZGJveCBmbGFncyBhcmUgYWxzbyBp
bW11dGFibHkgc2V0IG9uIHRoZSBkb2N1bWVudCB3aGVuIGl0IGlzCisgICAqIGxvYWRlZC4KKyAg
ICogVGhlIHNhbmRib3ggZmxhZ3Mgb2YgYSBkb2N1bWVudCBkZXBlbmQgb24gdGhlIHNhbmRib3gg
ZmxhZ3Mgb24gaXRzCisgICAqIGRvY3NoZWxsIGFuZCBvZiBpdHMgcGFyZW50IGRvY3VtZW50LCBp
ZiBhbnkuCisgICAqLworICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzYW5kYm94RmxhZ3M7CisK
KyAgLyoqCisgICAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyBi
cm93c2luZyBjb250ZXh0cyBvdGhlciB0aGFuCisgICAqIHRoZSBzYW5kYm94ZWQgYnJvd3Npbmcg
Y29udGV4dCBpdHNlbGYgKG9yIGJyb3dzaW5nIGNvbnRleHRzIGZ1cnRoZXIKKyAgICogbmVzdGVk
IGluc2lkZSBpdCksIGFuZCB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQuCisgICAqLwor
ICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9OQVZJR0FUSU9OICA9IDB4MTsKKworICAv
KioKKyAgICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWly
IHRvcC1sZXZlbCBicm93c2luZworICAgKiBjb250ZXh0LgorICAgKi8KKyAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiA9IDB4MjsKKworICAvKioKKyAg
ICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBpbnN0YW50aWF0aW5nIHBsdWdpbnMs
IHdoZXRoZXIgdXNpbmcgdGhlCisgICAqIGVtYmVkIGVsZW1lbnQsIHRoZSBvYmplY3QgZWxlbWVu
dCwgdGhlIGFwcGxldCBlbGVtZW50LCBvciB0aHJvdWdoCisgICAqIG5hdmlnYXRpb24gb2YgYSBu
ZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgdW5sZXNzIHRob3NlIHBsdWdpbnMgY2FuIGJlCisgICAq
IHNlY3VyZWQuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5T
ID0gMHg0OworCisgIC8qKgorICAgKiBUaGlzIGZsYWcgZm9yY2VzIGNvbnRlbnQgaW50byBhIHVu
aXF1ZSBvcmlnaW4sIHRodXMgcHJldmVudGluZyBpdCBmcm9tCisgICAqIGFjY2Vzc2luZyBvdGhl
ciBjb250ZW50IGZyb20gdGhlIHNhbWUgb3JpZ2luLgorICAgKiBUaGlzIGZsYWcgYWxzbyBwcmV2
ZW50cyBzY3JpcHQgZnJvbSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byB0aGUKKyAgICogZG9j
dW1lbnQuY29va2llIElETCBhdHRyaWJ1dGUsIGFuZCBibG9ja3MgYWNjZXNzIHRvIGxvY2FsU3Rv
cmFnZS4KKyAgICovCisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX09SSUdJTiA9IDB4
ODsKKworICAvKioKKyAgICogVGhpcyBmbGFnIGJsb2NrcyBmb3JtIHN1Ym1pc3Npb24uCisgICAq
LworICBjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9GT1JNUyA9IDB4MTA7CisKKyAgLyoq
CisgICAqIFRoaXMgZmxhZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlvbi4KKyAgICovCisgIGNvbnN0
IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1NDUklQVFMgPSAweDIwOworCisgIC8qKgorICAgKiBU
aGlzIGZsYWcgYmxvY2tzIGZlYXR1cmVzIHRoYXQgdHJpZ2dlciBhdXRvbWF0aWNhbGx5LCBzdWNo
IGFzCisgICAqIGF1dG9tYXRpY2FsbHkgcGxheWluZyBhIHZpZGVvIG9yIGF1dG9tYXRpY2FsbHkg
Zm9jdXNpbmcgYSBmb3JtIGNvbnRyb2wuCisgICAqLworICBjb25zdCB1bnNpZ25lZCBsb25nIFNB
TkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMgPSAweDQwOwogfTsKZGlmZiAtLWdpdCBhL2RvbS9i
YXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcAotLS0g
YS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5k
b3cuY3BwCkBAIC04MzMwLDE2ICs4MzMwLDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRTZXNzaW9u
U3RvcmFnZShuc0lET00KICAgaWYgKCFtU2Vzc2lvblN0b3JhZ2UpIHsKICAgICAqYVNlc3Npb25T
dG9yYWdlID0gbnNudWxsOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1E
b2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7
CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdp
biBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisg
ICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYgbnNJRG9jU2hlbGw6OlNBTkRC
T1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsK
KyAgICB9CisKICAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTZXNzaW9uU3RvcmFnZUZv
clByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRk
UmVmcyhtU2Vzc2lvblN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwog
CiAjaWZkZWYgUFJfTE9HR0lORwogICAgIGlmIChQUl9MT0dfVEVTVChnRE9NTGVha1BSTG9nLCBQ
Ul9MT0dfREVCVUcpKSB7CkBAIC04MzkxLDE2ICs4Mzk3LDIyIEBAIG5zR2xvYmFsV2luZG93OjpH
ZXRMb2NhbFN0b3JhZ2UobnNJRE9NU3QKICAgICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9y
Zy9kb20vc3RvcmFnZW1hbmFnZXI7MSIsICZydik7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYs
IHJ2KTsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsK
ICAgICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAor
ICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQK
KyAgICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9j
ICYmIChtRG9jLT5TYW5kYm94RmxhZ3MoKSAmIG5zSURvY1NoZWxsOjpTQU5EQk9YRURfT1JJR0lO
KSkgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAg
ICAgcnYgPSBzdG9yYWdlTWFuYWdlci0+R2V0TG9jYWxTdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5j
aXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogICB9CiAKICAgTlNfQUREUkVGKCphTG9jYWxTdG9yYWdlID0g
bUxvY2FsU3RvcmFnZSk7CiAgIHJldHVybiBOU19PSzsKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZh
Y2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRt
bC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9u
c0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lE
T01IVE1MSUZyYW1lRWxlbWVudC5pZGwKQEAgLTMzLDQ0ICszMyw0NiBAQAogICogZGVjaXNpb24g
YnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRo
ZSBub3RpY2UKICAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3Ig
dGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwg
YSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0
aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoK
ICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJuc0lET01I
VE1MRWxlbWVudC5pZGwiCisjaW5jbHVkZSAibnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRs
IgogCiAvKioKICAqIFRoZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2UgaXMgdGhl
IGludGVyZmFjZSB0byBhIFtYXUhUTUwKICAqIGlmcmFtZSBlbGVtZW50LgogICoKICAqIFRoaXMg
aW50ZXJmYWNlIGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lm
aWNhdGlvbjoKICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgog
ICogd2l0aCBjaGFuZ2VzIGZyb20gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgV0hBVFdHIEhUTUwgc3Bl
Y2lmaWNhdGlvbjoKICAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvCiAgKi8KIAotW3NjcmlwdGFibGUsIHV1aWQoMGVhZDVhNWMtZTRkMy00ZTRkLTg4
YjgtN2M5ZGM5ZDI2NjVjKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDUyZjYyNDRiLWIxZjUtNGY0Yy04
ZmYzLTdlMTQ2MzE2ZjQxMSldCiBpbnRlcmZhY2UgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgOiBu
c0lET01IVE1MRWxlbWVudAogewogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBhbGlnbjsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgZnJhbWVCb3Jk
ZXI7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGhlaWdodDsKICAgICAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbG9uZ0Rlc2M7CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbkhlaWdodDsKICAgICAgICAgICAgYXR0cmli
dXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luV2lkdGg7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmcgICAgICAgIG5hbWU7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIHNjcm9sbGluZzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc3Jj
OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB3aWR0aDsKICAgLy8gSW50
cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTURvY3Vt
ZW50ICAgY29udGVudERvY3VtZW50OwogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NV2luZG93
ICAgICBjb250ZW50V2luZG93OwogCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01ET01TZXR0
YWJsZVRva2VuTGlzdCBzYW5kYm94OwogCiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBp
ZnJhbWUgZWxlbWVudHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0
byBiZSBwcmVzZW50CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3Vi
IGRvY3VtZW50IHRvIGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRw
czovL3dpa2kubW96aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkK
ICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVu
OwogfTsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3Jj
L25zV2luZG93V2F0Y2hlci5jcHAgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVy
L3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRv
d3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVu
dHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcApAQCAtNjAzLDE2ICs2MDMs
MzMgQEAgbnNXaW5kb3dXYXRjaGVyOjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAg
aWYgKCFuZXdEb2NTaGVsbEl0ZW0pIHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3Bl
biB1cCBhIG5ldyB3aW5kb3cgb3Vyc2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJv
dmlkZXIgZm9yIG9uZS4gIEluIGVpdGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmln
aHQKICAgICAvLyBuYW1lIG9uIGl0LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAg
ICAvLyBJZiB0aGUgcGFyZW50IHRyeWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94
ZWQsCisgICAgLy8gdGhpcyBpcyBub3QgYWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlm
IChhUGFyZW50KSB7CisgICAgICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAg
ICAgYVBhcmVudC0+R2V0RG9jdW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBu
c0NPTVB0cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKwor
ICAgICAgaWYgKGRvYykgeworICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAg
ICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgICAgIGlmIChz
YW5kYm94RmxhZ3MgJiBuc0lEb2NTaGVsbDo6U0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAg
ICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0K
KwogICAgIC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHByb3Zp
ZGVyIGZvciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3BlbmluZyBh
IGRpYWxvZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8vIGlm
IHdlJ3JlIG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNocm9t
ZSBmbGFncyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVXaW4g
PSBkb19RdWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNocm9t
ZVdpbiAmJgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNI
Uk9NRV9NT0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93
c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>611076</attachid>
            <date>2012-03-30 16:27:52 -0700</date>
            <delta_ts>2012-04-20 15:16:04 -0700</delta_ts>
            <desc>iframe sandbox tests - same origin v2</desc>
            <filename>iframe_sandbox_tests_same_origin</filename>
            <type>text/plain</type>
            <size>10648</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZmNiM2IzOWNjMTMwNjJkM2U1NDY1YzBiYWQw
ZWNjZjQ4M2YzZGUyYgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBzYW1lIG9yaWdpbgoKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4gYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01h
a2VmaWxlLmluCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgpAQCAtMjk0LDE2ICsyOTQs
MjAgQEAgX1RFU1RfRklMRVMgPSBcCiAJCWZpbGVfZnVsbHNjcmVlbi1lc2MtZXhpdC1pbm5lci5o
dG1sIFwKIAkJZmlsZV9mdWxsc2NyZWVuLXJvbGxiYWNrLmh0bWwgXAogCQlmaWxlX2Z1bGxzY3Jl
ZW4tc3ZnLWVsZW1lbnQuaHRtbCBcCiAJCXRlc3RfbGlfYXR0cmlidXRlc19yZWZsZWN0aW9uLmh0
bWwgXAogCQl0ZXN0X29sX2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9idWc2
NTE5NTYuaHRtbCBcCiAJCXRlc3RfYnVnNjk0NTAzLmh0bWwgXAogCQl0ZXN0X29iamVjdF9wbHVn
aW5fbmF2Lmh0bWwgXAorCQl0ZXN0X2lmcmFtZV9zYW5kYm94X3NhbWVfb3JpZ2luLmh0bWwgXAor
CQlmaWxlX2lmcmFtZV9zYW5kYm94X2JfaWYxLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94
X2JfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2JfaWYzLmh0bWwgXAogCQkkKE5V
TEwpCiAKIF9CUk9XU0VSX1RFU1RfRklMRVMgPSBcCiAJCWJyb3dzZXJfYnVnNjQ5Nzc4LmpzIFwK
IAkJZmlsZV9idWc2NDk3NzguaHRtbCBcCiAJCWZpbGVfYnVnNjQ5Nzc4Lmh0bWxeaGVhZGVyc14g
XAogCQkkKE5VTEwpCiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2JfaWYxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfYl9pZjEuaHRtbApAQCAtMCwwICsxLDExIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAz
NDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPGJvZHk+CisgIEkg
YW0gc2FuZGJveGVkIHdpdGhvdXQgYW55IHBlcm1pc3Npb25zCis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
Yl9pZjIuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9iX2lmMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2JfaWYyLmh0bWwKQEAg
LTAsMCArMSw0OSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBs
ZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIG9rKGNvbmRp
dGlvbiwgbXNnKSB7CisgICAgd2luZG93LnBhcmVudC5va193cmFwcGVyKGNvbmRpdGlvbiwgbXNn
KTsKKyAgfQorCisgIGZ1bmN0aW9uIHRlc3RYSFIoKSB7CisgICAgdmFyIHhociA9IG5ldyBYTUxI
dHRwUmVxdWVzdCgpOworCisgICAgeGhyLm9wZW4oIkdFVCIsICJmaWxlX2lmcmFtZV9zYW5kYm94
X2JfaWYxLmh0bWwiKTsKKworICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAo
b0V2ZW50KSB7CisgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CisgICAgICBpZiAoeGhyLnJlYWR5
U3RhdGUgPT0gNCkgeworICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIHsKKyAgICAgICAg
ICByZXN1bHQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIG9rKHJlc3VsdCwgIlhIUiBzaG91
bGQgd29yayBub3JtYWxseSBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggJ2FsbG93LXNhbWUt
b3JpZ2luJyIpOworICAgICAgfQorICAgIH0KKworICAgIHhoci5zZW5kKG51bGwpOworICB9CisK
KyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICBvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hl
ZCB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIHRoZWly
IHBhcmVudCIpOworCisgICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIGRvY3VtZW50LmNv
b2tpZSBzaW5jZSB3ZSBoYXZlICdhbGxvdy1zYW1lLW9yaWdpbicKKyAgICBvayhkb2N1bWVudC5j
b29raWUgPT0gIiIsICJhIGRvY3VtZW50IHNhbmRib3hlZCB3aXRoIGFsbG93LXNhbWUtb3JpZ2lu
IHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyBkb2N1bWVudC5jb29raWUiKTsKKworICAgIC8vIHNo
b3VsZCBiZSBhYmxlIHRvIGFjY2VzcyBsb2NhbFN0b3JhZ2Ugc2luY2Ugd2UgaGF2ZSAnYWxsb3ct
c2FtZS1vcmlnaW4nCisgICAgb2sod2luZG93LmxvY2FsU3RvcmFnZSwgImEgZG9jdW1lbnQgc2Fu
ZGJveGVkIHdpdGggYWxsb3ctc2FtZS1vcmlnaW4gc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIGxv
Y2FsU3RvcmFnZSIpOworCisgICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIHNlc3Npb25T
dG9yYWdlIHNpbmNlIHdlIGhhdmUgJ2FsbG93LXNhbWUtb3JpZ2luJworICAgIG9rKHdpbmRvdy5z
ZXNzaW9uU3RvcmFnZSwgImEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGggYWxsb3ctc2FtZS1vcmln
aW4gc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIHNlc3Npb25TdG9yYWdlIik7CisKKyAgICB0ZXN0
WEhSKCk7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFt
IHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2FtZS1vcmlnaW4iIGFuZCAiYWxsb3ctc2NyaXB0
cyIKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2JfaWYzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
LS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfYl9pZjMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9y
IEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQv
Y3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlw
dD4KKyAgZnVuY3Rpb24gb2socmVzdWx0LCBtZXNzYWdlKSB7CisgICAgd2luZG93LnRvcC5wb3N0
TWVzc2FnZSh7b2s6IHJlc3VsdCwgZGVzYzogbWVzc2FnZX0sICIqIik7CisgIH0KKworICBmdW5j
dGlvbiB0ZXN0WEhSKCkgeworICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAg
eGhyLm9wZW4oIkdFVCIsICJmaWxlX2lmcmFtZV9zYW5kYm94X2lmMS5odG1sIik7CisKKyAgeGhy
Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIChvRXZlbnQpIHsKKyAgICB2YXIgcmVzdWx0
ID0gZmFsc2U7CisgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHsKKyAgICAgIGlmICh4aHIu
c3RhdHVzID09IDApIHsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIG9r
KHJlc3VsdCwgIlhIUiBzaG91bGQgYmUgYmxvY2tlZCBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIFdJ
VEhPVVQgJ2FsbG93LXNhbWUtb3JpZ2luJyIpOworICAgIH0KKyAgfQorCisgIHhoci5zZW5kKG51
bGwpOworfQorCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgdHJ5IHsKKyAgICAgIHdpbmRv
dy5wYXJlbnQub2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgJ2FsbG93LXNh
bWUtb3JpZ2luJyBzaG91bGQgTk9UIGJlIGFibGUgdG8gYWNjZXNzIHRoZWlyIHBhcmVudCIpOwor
ICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICBvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hl
ZCB3aXRob3V0ICdhbGxvdy1zYW1lLW9yaWdpbicgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2Vz
cyB0aGVpciBwYXJlbnQiKTsKKyAgICB9CisKKyAgICAvLyBzaG91bGQgTk9UIGJlIGFibGUgdG8g
YWNjZXNzIGRvY3VtZW50LmNvb2tpZQorICAgIHRyeSB7CisgICAgICB2YXIgZm9vID0gZG9jdW1l
bnQuY29va2llOworICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgIG9rKHRydWUsICJhIGRvY3Vt
ZW50IHNhbmRib3hlZCB3aXRob3V0IGFsbG93LXNhbWUtb3JpZ2luIHNob3VsZCBOT1QgYmUgYWJs
ZSB0byBhY2Nlc3MgZG9jdW1lbnQuY29va2llIik7CisgICAgfQorCisgICAgLy8gc2hvdWxkIE5P
VCBiZSBhYmxlIHRvIGFjY2VzcyBsb2NhbFN0b3JhZ2UKKyAgICB0cnkgeworICAgICAgdmFyIGZv
byA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7CisgICAgfSBjYXRjaChlcnJvcikgeworICAgICAgb2so
dHJ1ZSwgImEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2FtZS1vcmlnaW4gc2hv
dWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBsb2NhbFN0b3JhZ2UiKTsKKyAgICB9CisKKyAgICAv
LyBzaG91bGQgTk9UIGJlIGFibGUgdG8gYWNjZXNzIHNlc3Npb25TdG9yYWdlCisgICAgdHJ5IHsK
KyAgICAgIHZhciBmb28gPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2U7CisgICAgfSBjYXRjaChlcnJv
cikgeworICAgICAgb2sodHJ1ZSwgImEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ct
c2FtZS1vcmlnaW4gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBzZXNzaW9uU3RvcmFnZSIp
OworICAgIH0KKworICB0ZXN0WEhSKCk7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJk
b1N0dWZmKCkiPgorICBJIGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyIKKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVz
dF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdpbi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X3NhbWVfb3JpZ2luLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3Rf
aWZyYW1lX3NhbmRib3hfc2FtZV9vcmlnaW4uaHRtbApAQCAtMCwwICsxLDExMCBAQAorPCFET0NU
WVBFIEhUTUw+DQorPGh0bWw+DQorPCEtLQ0KK2h0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcv
c2hvd19idWcuY2dpP2lkPTM0MTYwNA0KK0ltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0
ZSBmb3IgSUZSQU1FcyAtIHNhbWUgb3JpZ2luIHRlc3RzDQorLS0+DQorPGhlYWQ+DQorICA8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+
DQorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1Np
bXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+DQorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0K
KzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KKy8qKiBU
ZXN0IGZvciBCdWcgMzQxNjA0IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZv
ciBJRlJBTUVzICoqLw0KKy8qKiBTYW1lIE9yaWdpbiBUZXN0cyAqKi8NCisNCit2YXIgY29tcGxl
dGVkVGVzdHMgPSAwOw0KK3ZhciBwYXNzZWRUZXN0cyA9IDA7DQorDQorZnVuY3Rpb24gb2tfd3Jh
cHBlcihyZXN1bHQsIGRlc2MpIHsNCisgIG9rKHJlc3VsdCwgZGVzYyk7DQorDQorICBjb21wbGV0
ZWRUZXN0cysrOw0KKw0KKyAgaWYgKHJlc3VsdCkgew0KKyAgICBwYXNzZWRUZXN0cysrOw0KKyAg
fQ0KKw0KKyAgLy8gUkVWSUVXIDogaWYgb25lIG9mIHRoZXNlIHRlc3RzIGZhaWxzIGFuZCB0aGlz
IGlzbid0IGNhbGxlZA0KKyAgLy8gdGhpcyBtZWFucyB0aGlzIHRlc3Qgd2lsbCBoYW5nIHVudGls
IHRoZSB0aW1lIG91dCBoYXBwZW5zIDooDQorICAvLyBhZHZpY2Ugb24gYmV0dGVyIHdheXMgdG8g
c3luY2hyb25pemUgdGhpbmdzIGFwcHJlY2lhdGVkICENCisgIGlmIChjb21wbGV0ZWRUZXN0cyA9
PSAxMikgew0KKyAgICBvayhwYXNzZWRUZXN0cyA9PSAxMiwgIlRoZXJlIGFyZSAxMiBzYW1lLW9y
aWdpbiB0ZXN0cyB0aGF0IHNob3VsZCBwYXNzIik7DQorDQorICAgIFNpbXBsZVRlc3QuZmluaXNo
KCk7DQorICB9DQorfQ0KKw0KK2Z1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KQ0KK3sNCisg
IG9rX3dyYXBwZXIoZXZlbnQuZGF0YS5vaywgZXZlbnQuZGF0YS5kZXNjKTsNCit9DQorDQorLy8g
YSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRoYXQgaXMgdXNlZCBieSBzYW5kYm94ZWQgaWZyYW1lcyB3
aXRob3V0DQorLy8gJ2FsbG93LXNhbWUtb3JpZ2luJyB0byBjb21tdW5pY2F0ZSBwYXNzL2ZhaWwg
YmFjayB0byB0aGlzIG1haW4gcGFnZS4NCisvLyBpdCBleHBlY3RzIHRvIGJlIGNhbGxlZCB3aXRo
IGFuIG9iamVjdCBsaWtlIHtvazogdHJ1ZS9mYWxzZSwgZGVzYzoNCisvLyA8ZGVzY3JpcHRpb24g
b2YgdGhlIHRlc3Q+IHdoaWNoIGl0IHRoZW4gZm9yd2FyZHMgdG8gb2soKQ0KK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTsNCisNCitmdW5j
dGlvbiBkb1Rlc3QoKSB7DQorICBTaW1wbGVUZXN0LndhaXRGb3JFeHBsaWNpdEZpbmlzaCgpOw0K
Kw0KKyAgLy8gMSkgdGVzdCB0aGF0IHdlIGNhbid0IGFjY2VzcyBhbiBpZnJhbWUgc2FuZGJveGVk
IHdpdGhvdXQgImFsbG93LXNhbWUtb3JpZ2luIg0KKyAgdmFyIGlmXzEgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaWZfMSIpOw0KKyAgdHJ5IHsNCisgICAgdmFyIGIgPSBpZl8xLmNvbnRlbnRE
b2N1bWVudC5ib2R5Ow0KKyAgICBva193cmFwcGVyKGZhbHNlLCAiYWNjZXNzaW5nIGJvZHkgb2Yg
YSBzYW5kYm94ZWQgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIik7DQorICB9IGNhdGNo
IChlcnIpew0KKyAgICBva193cmFwcGVyKHRydWUsICJhY2Nlc3NpbmcgYm9keSBvZiBhIHNhbmRi
b3hlZCBkb2N1bWVudCBzaG91bGQgbm90IGJlIGFsbG93ZWQiKTsNCisgIH0NCisNCisgIC8vIDIp
IHRlc3QgdGhhdCB3ZSBjYW4gYWNjZXNzIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ct
c2FtZS1vcmlnaW4iDQorICB2YXIgaWZfMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZl8y
Iik7DQorDQorICB0cnkgew0KKyAgICB2YXIgYiA9IGlmXzIuY29udGVudERvY3VtZW50LmJvZHk7
DQorICAgIG9rX3dyYXBwZXIodHJ1ZSwgImFjY2Vzc2luZyBib2R5IG9mIGEgc2FuZGJveGVkIGRv
Y3VtZW50IHdpdGggYWxsb3ctc2FtZS1vcmlnaW4gc2hvdWxkIGJlIGFsbG93ZWQiKTsNCisgIH0g
Y2F0Y2ggKGVycikgew0KKyAgICBva193cmFwcGVyKGZhbHNlLCAiYWNjZXNzaW5nIGJvZHkgb2Yg
YSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aCBhbGxvdy1zYW1lLW9yaWdpbiBzaG91bGQgYmUgYWxs
b3dlZCIpOw0KKyAgfQ0KKw0KKyAgLy8gMykgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSB3
aXRob3V0ICdhbGxvdy1zYW1lLW9yaWdpbicgY2Fubm90IGFjY2VzcyBpdHMgcGFyZW50DQorICAv
LyB0aGlzIGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjMuaHRtbCB3aGljaCBoYXMgJ2FsbG93
LXNjcmlwdHMnIGJ1dCBub3QgJ2FsbG93LXNhbWUtb3JpZ2luJw0KKw0KKyAgLy8gNCkgdGVzdCB0
aGF0IGEgc2FuZGJveGVkIGlmcmFtZSB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgY2FuIGFjY2Vz
cyBpdHMgcGFyZW50DQorICAvLyB0aGlzIGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjIuaHRt
bCB3aGljaCBoYXMgJ2FsbG93LXNhbWUtb3JpZ2luJyBhbmQgJ2FsbG93LXNjcmlwdHMnDQorDQor
ICAvLyA1KSBjaGVjayB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSB3aXRoICJhbGxvdy1zYW1lLW9y
aWdpbiIgY2FuIGFjY2VzcyBkb2N1bWVudC5jb29raWUNCisgIC8vIHRoaXMgaXMgZG9uZSBieSBm
aWxlX2lmcmFtZV9iX2lmMi5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2FtZS1vcmlnaW4nIGFuZCAn
YWxsb3ctc2NyaXB0cycNCisNCisgIC8vIDYpIGNoZWNrIHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1l
IHdpdGggImFsbG93LXNhbWUtb3JpZ2luIiBjYW4gYWNjZXNzIHdpbmRvdy5sb2NhbFN0b3JhZ2UN
CisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lmMi5odG1sIHdoaWNoIGhhcyAn
YWxsb3ctc2FtZS1vcmlnaW4nIGFuZCAnYWxsb3ctc2NyaXB0cycNCisNCisgIC8vIDcpIGNoZWNr
IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGggImFsbG93LXNhbWUtb3JpZ2luIiBjYW4gYWNj
ZXNzIHdpbmRvdy5zZXNzaW9uU3RvcmFnZQ0KKyAgLy8gdGhpcyBpcyBkb25lIGJ5IGZpbGVfaWZy
YW1lX2JfaWYyLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kICdhbGxvdy1z
Y3JpcHRzJw0KKw0KKyAgLy8gOCkgY2hlY2sgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgV0lUSE9V
VCAiYWxsb3ctc2FtZS1vcmlnaW4iIGNhbiBOT1QgYWNjZXNzIGRvY3VtZW50LmNvb2tpZQ0KKyAg
Ly8gdGhpcyBpcyBkb25lIGJ5IGZpbGVfaWZyYW1lX2JfaWYzLmh0bWwgd2hpY2ggaGFzICdhbGxv
dy1zY3JpcHRzJyBidXQgbm90ICdhbGxvdy1zYW1lLW9yaWdpbicNCisNCisgIC8vIDkpIGNoZWNr
IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIFdJVEhPVVQgImFsbG93LXNhbWUtb3JpZ2luIiBjYW4g
Tk9UIGFjY2VzcyB3aW5kb3cubG9jYWxTdG9yYWdlDQorICAvLyB0aGlzIGlzIGRvbmUgYnkgZmls
ZV9pZnJhbWVfYl9pZjMuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnIGJ1dCBub3QgJ2Fs
bG93LXNhbWUtb3JpZ2luJw0KKw0KKyAgLy8gMTApIGNoZWNrIHRoYXQgYSBzYW5kYm94ZWQgaWZy
YW1lIFdJVEhPVVQgImFsbG93LXNhbWUtb3JpZ2luIiBjYW4gTk9UIGFjY2VzcyB3aW5kb3cuc2Vz
c2lvblN0b3JhZ2UNCisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lmMy5odG1s
IHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycgYnV0IG5vdCAnYWxsb3ctc2FtZS1vcmlnaW4nDQor
DQorICAvLyAxMSkgY2hlY2sgdGhhdCBYSFIgd29ya3Mgbm9ybWFsbHkgaW4gYSBzYW5kYm94ZWQg
aWZyYW1lIHdpdGggImFsbG93LXNhbWUtb3JpZ2luIiBhbmQgImFsbG93LXNjcmlwdHMiDQorICAv
LyB0aGlzIGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjIuaHRtbCB3aGljaCBoYXMgJ2FsbG93
LXNhbWUtb3JpZ2luJyBhbmQgJ2FsbG93LXNjcmlwdHMnDQorDQorICAvLyAxMikgY2hlY2sgdGhh
dCBYSFIgaXMgYmxvY2tlZCBpbiBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAiYWxsb3ctc2NyaXB0
cyIgYnV0IFdJVEhPVVQgImFsbG93LXNhbWUtb3JpZ2luIg0KKyAgLy8gdGhpcyBpcyBkb25lIGJ5
IGZpbGVfaWZyYW1lX2JfaWYzLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJyBidXQgbm90
ICdhbGxvdy1zYW1lLW9yaWdpbicNCit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25sb2FkPSJkb1Rl
c3QoKSI+DQorPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vYnVnemlsbGEubW96aWxs
YS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNCI+TW96aWxsYSBCdWcgMzQxNjA0PC9hPiAtIElt
cGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1Fcw0KKzxwIGlkPSJkaXNw
bGF5Ij48L3A+DQorPGRpdiBpZD0iY29udGVudCI+DQorPGlmcmFtZSBzYW5kYm94PSIiIGlkPSJp
Zl8xIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lk
dGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFs
bG93LXNjcmlwdHMiIGlkPSJpZl8yIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjIuaHRt
bCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFs
bG93LXNjcmlwdHMiIGlkPSJpZl8zIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjMuaHRt
bCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8L2Rpdj4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>612006</attachid>
            <date>2012-04-03 16:14:11 -0700</date>
            <delta_ts>2012-04-04 18:31:54 -0700</delta_ts>
            <desc>iframe sandbox tests - general v2</desc>
            <filename>iframe_sandbox_tests_general</filename>
            <type>text/plain</type>
            <size>15648</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNzc4OGQwMDM3MjMxNDI2NGE5ZmExOTIzZTc0
Y2FlNjA1YTAwZGQxNQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KQEAgLTI5MywxNiArMjkzLDI2IEBAIF9URVNUX0ZJTEVTID0gXAogCQlmaWxlX2Z1bGxz
Y3JlZW4tZXNjLWV4aXQuaHRtbCBcCiAJCWZpbGVfZnVsbHNjcmVlbi1lc2MtZXhpdC1pbm5lci5o
dG1sIFwKIAkJZmlsZV9mdWxsc2NyZWVuLXJvbGxiYWNrLmh0bWwgXAogCQl0ZXN0X2xpX2F0dHJp
YnV0ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9vbF9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24u
aHRtbCBcCiAJCXRlc3RfYnVnNjUxOTU2Lmh0bWwgXAogCQl0ZXN0X2J1ZzY5NDUwMy5odG1sIFwK
IAkJdGVzdF9vYmplY3RfcGx1Z2luX25hdi5odG1sIFwKKwkJdGVzdF9pZnJhbWVfc2FuZGJveF9n
ZW5lcmFsLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwgXAorCQlmaWxl
X2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYz
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwgXAorCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2Zvcm1fZmFpbC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX3Bh
c3MuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNzLmpzIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9m
YWlsLmpzIFwKIAkJJChOVUxMKQogCiBfQlJPV1NFUl9URVNUX0ZJTEVTID0gXAogCQlicm93c2Vy
X2J1ZzY0OTc3OC5qcyBcCiAJCWZpbGVfYnVnNjQ5Nzc4Lmh0bWwgXAogCQlmaWxlX2J1ZzY0OTc3
OC5odG1sXmhlYWRlcnNeIFwKIAkJJChOVUxMKQogCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwKQEAgLTAsMCArMSwzNyBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+ICAg
ICAKKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3Rz
L1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVzYykgeyAKKyAgICB3aW5kb3cu
dG9wLnBvc3RNZXNzYWdlKHtvazogcmVzdWx0LCBkZXNjOiBkZXNjfSwgIioiKTsKKyAgfQorICAK
KyAgZnVuY3Rpb24gZG9TdWJtaXQoKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ff
Zm9ybScpLnN1Ym1pdCgpOworICB9CisgIAorICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIG9r
KHRydWUsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0cyBzaG91bGQgYmUg
YWJsZSB0byBydW4gaW5saW5lIHNjcmlwdHMiKTsgCisgICAgCisgICAgLy8gc2hvdWxkIG5vdCBi
ZSBhbGxvd2VkIC0gZG9uJ3QgaGF2ZSBhbGxvdy1mb3JtcworICAgIHNlbmRNb3VzZUV2ZW50KHt0
eXBlOidjbGljayd9LCAnYV9idXR0b24nKTsKKyAgfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0n
ZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNzLmpzJz48L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0namF2
YXNjcmlwdDpvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMg
c2hvdWxkIGJlIGFibGUgdG8gcnVuIHNjcmlwdCBmcm9tIGphdmFzY3JpcHQ6IFVSTHMiKTtkb1N0
dWZmKCk7Jz4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMiCisgIAor
ICA8Zm9ybSBtZXRob2Q9ImdldCIgYWN0aW9uPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFz
cy5odG1sIiBpZD0iYV9mb3JtIj4KKyAgICBGaXJzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIg
bmFtZT0iZmlyc3RuYW1lIj4KKyAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1l
PSJsYXN0bmFtZSI+CisgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgb25jbGljaz0iZG9TdWJtaXQo
KSIgaWQ9ImFfYnV0dG9uIj4KKyAgPC9mb3JtPgorICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lm
Mi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Nf
aWYyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbApAQCAtMCww
ICsxLDIyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJz
ZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPiAgIAorICA8
bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxl
VGVzdC90ZXN0LmNzcyIvPgorICAKKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0Ij4KKyAgZnVuY3Rpb24gb2socmVzdWx0LCBkZXNjKSB7IAorICAgIHdpbmRvdy50b3AucG9z
dE1lc3NhZ2Uoe29rOiByZXN1bHQsIGRlc2M6IG1lc3NhZ2V9LCAiKiIpOworICB9CisgIAorICBm
dW5jdGlvbiBkb1N0dWZmKCkgeworICAgIG9rKGZhbHNlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCBX
SVRIT1VUIGFsbG93LXNjcmlwdHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIHJ1biBpbmxpbmUgc2Ny
aXB0cyIpOyAKKyAgfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0nZmlsZV9pZnJhbWVfc2FuZGJv
eF9mYWlsLmpzJz48L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0namF2YXNjcmlwdDpvayhmYWxzZSwg
ImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRv
IHJ1biBzY3JpcHQgZnJvbSBqYXZhc2NyaXB0OiBVUkxzIik7ZG9TdHVmZigpOyc+CisgIEkgYW0g
c2FuZGJveGVkIHdpdGggbm8gcGVybWlzc2lvbnMKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5o
dG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbApAQCAtMCwwICsx
LDI5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxz
LmpzIj48L3NjcmlwdD4gICAgIAorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQv
Y3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICAKKzwvaGVhZD4KKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgZnVuY3Rpb24gZG9TdWJtaXQoKSB7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FfZm9ybScpLnN1Ym1pdCgpOworICB9CisgIAor
ICBmdW5jdGlvbiBkb1N0dWZmKCkgeyAgICAKKyAgICAvLyB0cnkgYW5kIHN1Ym1pdCB0aGUgZm9y
bSAtIHRoaXMgc2hvdWxkIHN1Y2NlZWQKKyAgICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2sn
fSwgJ2FfYnV0dG9uJyk7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCki
PgorICBJIGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1mb3JtcyIK
KyAgCisgIDxmb3JtIG1ldGhvZD0iZ2V0IiBhY3Rpb249ImZpbGVfaWZyYW1lX3NhbmRib3hfZm9y
bV9wYXNzLmh0bWwiIGlkPSJhX2Zvcm0iPgorICAgIEZpcnN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0
ZXh0IiBuYW1lPSJmaXJzdG5hbWUiPgorICAgIExhc3QgbmFtZTogPGlucHV0IHR5cGU9InRleHQi
IG5hbWU9Imxhc3RuYW1lIj4KKyAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBvbmNsaWNrPSJkb1N1
Ym1pdCgpIiBpZD0iYV9idXR0b24iPgorICA8L2Zvcm0+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19p
ZjQuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9j
X2lmNC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwKQEAgLTAs
MCArMSw0MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRV
dGlscy5qcyI+PC9zY3JpcHQ+ICAgICAKKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0
ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgCis8L2hlYWQ+
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwg
ZGVzYykgeyAKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKTsKKyAg
fQorICAKKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICAvLyB0cnkgdG8gb3BlbiBhIG5ldyB3
aW5kb3cgdmlhIHRhcmdldD0iX2JsYW5rIiwgd2luZG93Lm9wZW4oKSwgYW5kIHNob3dNb2RhbERp
YWxvZygpCisgICAgLy8gdGhlIHdpbmRvdyB3ZSB0cnkgdG8gb3BlbiBjbG9zZXMgaXRzZWxmIG9u
Y2UgaXQgb3BlbnMKKyAgICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ3RhcmdldF9i
bGFuaycpOworCisgICAgLy8gUkVWSUVXIDogd2luZG93Lm9wZW4gaW4gYSBzYW5kYm94ZWQgZG9j
dW1lbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiA6IAorICAgIC8vIHNob3VsZCBpdCA/CisgICAgdHJ5
IHsgCisgICAgICB3aW5kb3cub3BlbigiZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19m
YWlsLmh0bWwiKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgb2sodHJ1ZSwgIndpbmRv
dy5vcGVuIHRocmV3IGEgSlMgZXhjZXB0aW9uIGFuZCB3YXMgbm90IGFsbG93ZWQiKTsKKyAgICB9
CisKKyAgICAvLyBSRVZJRVcgOiB3aW5kb3cuc2hvd01vZGFsRGlhbG9nIGluIGEgc2FuZGJveGVk
IGRvY3VtZW50IHRocm93cyBhbiBleGNlcHRpb24gOiAKKyAgICAvLyBzaG91bGQgaXQgPworICAg
IHRyeSB7CisgICAgICB3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCJmaWxlX2lmcmFtZV9zYW5kYm94
X29wZW5fd2luZG93X2ZhaWwuaHRtbCIpOyAKKyAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICBv
ayh0cnVlLCAid2luZG93LnNob3dNb2RhbERpYWxvZyB0aHJldyBhIEpTIGV4Y2VwdGlvbiBhbmQg
d2FzIG5vdCBhbGxvd2VkIik7CisgICAgfQorICB9ICAgIAorPC9zY3JpcHQ+Cis8Ym9keSBvbkxv
YWQ9ImRvU3R1ZmYoKSI+CisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zY3JpcHRz
IGFsbG93LXNhbWUtb3JpZ2luIgorICAKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9v
cGVuX3dpbmRvd19mYWlsLmh0bWwiIHRhcmdldD0iX2JsYW5rIiBpZD0idGFyZ2V0X2JsYW5rIj5v
cGVuIHdpbmRvdzwvYT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfZmFpbC5qcwpAQCAtMCwwICsxLDEgQEAKK29rKGZhbHNlLCAiZG9jdW1l
bnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIHJ1
biA8c2NyaXB0IHNyYz0uLi4+Iik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1f
ZmFpbC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2Zvcm1fZmFpbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5o
dG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0
bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMv
U2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4K
KzwvaGVhZD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIHNob3VsZCBOT1QgYmUg
bG9hZGVkIGJ5IGEgZm9ybSBzdWJtaXQgZnJvbSBhIHNhbmRib3ggd2l0aG91dCAnYWxsb3ctZm9y
bXMnCis8L2JvZHk+Cis8L2h0bWw+CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7
CisgICAgd2luZG93LnRvcC5wb3N0TWVzc2FnZSh7b2s6IGZhbHNlLCBkZXNjOiAiZG9jdW1lbnRz
IHNhbmRib3hlZCB3aXRob3V0IGFsbG93LWZvcm1zIHNob3VsZCBOT1QgYmUgYWJsZSB0byBzdWJt
aXQgZm9ybXMifSwgIioiKTsKKyAgfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2Zvcm1fcGFzcy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2Zvcm1fcGFzcy5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVn
IDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIg
c3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4KKzwvaGVhZD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIHNo
b3VsZCBiZSBsb2FkZWQgYnkgYSBmb3JtIHN1Ym1pdCBmcm9tIGEgc2FuZGJveCB3aXRoICdhbGxv
dy1mb3JtcycKKzwvYm9keT4KKzwvaHRtbD4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gZG9TdHVm
ZigpIHsKKyAgICB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKHtvazogdHJ1ZSwgZGVzYzogImRvY3Vt
ZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1mb3JtcyBzaG91bGQgYmUgYWJsZSB0byBzdWJtaXQg
Zm9ybXMifSwgIioiKTsKKyAgfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X29wZW5fd2luZG93X2ZhaWwuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8
dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGlj
YXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48
L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i
L3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKworPGJvZHkgb25Mb2FkPSJk
b1N0dWZmKCkiPgorICBJIHNob3VsZCBOT1QgYmUgb3BlbmVkIGJ5IGEgc2FuZGJveGVkIGlmcmFt
ZSB2aWEgYW55IG1ldGhvZAorPC9ib2R5PgorPC9odG1sPgorCis8c2NyaXB0PgorICBmdW5jdGlv
biBkb1N0dWZmKCkgeworICAgIGNvbnNvbGUubG9nKCJmaWxlX2lmcmFtZV9zYW5kYm94X3dpbmRv
d19vcGVuX2ZhaWwuaHRtbCIpOworICAgIHdpbmRvdy5vcGVuZXIub2soZmFsc2UsICJzYW5kYm94
ZWQgZG9jdW1lbnRzIHNob3VsZCBOT1QgYmUgYWJsZSB0byBvcGVuIHdpbmRvd3MiKTsKKyAgICBz
ZWxmLmNsb3NlKCk7CisgIH0KKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9wYXNzLmpzIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X3Bhc3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcwpAQCAtMCwwICsx
LDEgQEAKK29rKHRydWUsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0cyBz
aG91bGQgYmUgYWJsZSB0byBydW4gPHNjcmlwdCBzcmM9Li4uPiIpOwpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9p
ZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rl
c3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5k
Ym94X2dlbmVyYWwuaHRtbApAQCAtMCwwICsxLDEyNCBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0
bWw+DQorPCEtLQ0KK2h0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lk
PTM0MTYwNA0KK0ltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAt
IGdlbmVyYWwgdGVzdHMNCistLT4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4N
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxzY3JpcHQgdHlwZT0i
YXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0
LmpzIj48L3NjcmlwdD4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3Mi
IGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxzY3JpcHQg
dHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+DQorLyoqIFRlc3QgZm9yIEJ1ZyAzNDE2MDQg
LSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMgLSBnZW5lcmFs
IHRlc3RzICoqLw0KKw0KKy8vIGEgcG9zdE1lc3NhZ2UgaGFuZGxlciB0aGF0IGlzIHVzZWQgYnkg
c2FuZGJveGVkIGlmcmFtZXMgd2l0aG91dA0KKy8vICdhbGxvdy1zYW1lLW9yaWdpbicgdG8gY29t
bXVuaWNhdGUgcGFzcy9mYWlsIGJhY2sgdG8gdGhpcyBtYWluIHBhZ2UuDQorLy8gaXQgZXhwZWN0
cyB0byBiZSBjYWxsZWQgd2l0aCBhbiBvYmplY3QgbGlrZSB7b2s6IHRydWUvZmFsc2UsIGRlc2M6
IA0KKy8vIDxkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0
byBvaygpDQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2Fn
ZSwgZmFsc2UpOyAgDQorICAgICAgDQorZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpICAN
Cit7IA0KKyAgb2tfd3JhcHBlcihldmVudC5kYXRhLm9rLCBldmVudC5kYXRhLmRlc2MpOw0KK30g
IA0KKw0KK3ZhciBjb21wbGV0ZWRUZXN0cyA9IDA7DQordmFyIHBhc3NlZFRlc3RzID0gMDsNCisN
CitmdW5jdGlvbiBva193cmFwcGVyKHJlc3VsdCwgZGVzYykgew0KKyAgb2socmVzdWx0LCBkZXNj
KTsNCisgIA0KKyAgY29tcGxldGVkVGVzdHMrKzsNCisgIA0KKyAgaWYgKHJlc3VsdCkgew0KKyAg
ICBwYXNzZWRUZXN0cysrOw0KKyAgfQ0KKyAgDQorICAvLyBSRVZJRVcgOiBpZiBvbmUgb2YgdGhl
c2UgdGVzdHMgZmFpbHMgYW5kIHRoaXMgaXNuJ3QgY2FsbGVkDQorICAvLyB0aGlzIG1lYW5zIHRo
aXMgdGVzdCB3aWxsIGhhbmcgdW50aWwgdGhlIHRpbWUgb3V0IGhhcHBlbnMgOigNCisgIC8vIGFk
dmljZSBvbiBiZXR0ZXIgd2F5cyB0byBzeW5jaHJvbml6ZSB0aGluZ3MgYXBwcmVjaWF0ZWQgIQ0K
KyAgaWYgKGNvbXBsZXRlZFRlc3RzID09IDgpIHsNCisgICAgb2socGFzc2VkVGVzdHMgPT0gOCwg
IlRoZXJlIGFyZSA4IGdlbmVyYWwgdGVzdHMgdGhhdCBzaG91bGQgcGFzcyIpOw0KKyAgICBTaW1w
bGVUZXN0LmZpbmlzaCgpOw0KKyAgfQ0KK30NCisNCitmdW5jdGlvbiBkb1Rlc3QoKSB7IA0KKyAg
U2ltcGxlVGVzdC53YWl0Rm9yRXhwbGljaXRGaW5pc2goKTsNCisgIA0KKyAgLy8gcGFzc2VzIGlm
IGdvb2QNCisgIC8vIDEpIHRlc3QgdGhhdCBpbmxpbmUgc2NyaXB0cyAoPHNjcmlwdD4pIGNhbiBy
dW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRv
bmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2Ny
aXB0cycpDQorICANCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAyKSB0ZXN0IHRoYXQgPHNj
cmlwdCBzcmM9Li4uPiBjYW4gcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ct
c2NyaXB0cyINCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3
aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnKQ0KKyAgDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAg
Ly8gMykgdGVzdCB0aGF0IHNjcmlwdCBpbiBhIGphdmFzY3JpcHQ6IFVSTCBjYW4gcnVuIGluIGFu
IGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25lIGluIGZp
bGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnKQ0K
KyAgDQorICAvLyBmYWlscyBpZiBiYWQgDQorICAvLyA0KSB0ZXN0IHRoYXQgaW5saW5lIHNjcmlw
dHMgY2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFsbG93LXNjcmlw
dHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgd2hpY2gg
aGFzIHNhbmRib3g9JycpDQorICAgDQorICAvLyBmYWlscyBpZiBiYWQgDQorICAvLyA1KSB0ZXN0
IHRoYXQgPHNjcmlwdCBzcmM9Li4uPiBjYW5ub3QgcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQg
d2l0aG91dCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRi
b3hfY19pZjIuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0nJykNCisgIA0KKyAgLy8gZmFpbHMgaWYg
YmFkIA0KKyAgLy8gNikgdGVzdCB0aGF0IHNjcmlwdCBpbiBhIGphdmFzY3JpcHQ6IFVSTCBjYW5u
b3QgcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ctc2NyaXB0cyINCisg
IC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCB3aGljaCBoYXMgc2Fu
ZGJveD0nJykNCisgIA0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDcpIHRlc3QgdGhhdCBh
IG5ldyBpZnJhbWUgaGFzIHNhbmRib3ggYXR0cmlidXRlDQorICB2YXIgaWZyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiaWZyYW1lIik7DQorICBva193cmFwcGVyKCJzYW5kYm94IiBpbiBpZnIs
ICJhIG5ldyBpZnJhbWUgc2hvdWxkIGhhdmUgYSBzYW5kYm94IGF0dHJpYnV0ZSIpOw0KKw0KKyAg
Ly8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDgpIHRlc3QgdGhhdCB0aGUgc2FuZGJveCBhdHRyaWJ1
dGUgaXMgYSBET01TZXR0YWJsZVRva2VuTGlzdA0KKyAgb2tfd3JhcHBlcihpZnIuc2FuZGJveCBp
bnN0YW5jZW9mIERPTVNldHRhYmxlVG9rZW5MaXN0LCAic2FuZGJveCBhdHRyaWJ1dGUgc2hvdWxk
IGJlIGEgRE9NU2V0dGFibGUgVG9rZW4gTGlzdCIpOw0KKyAgDQorICAvLyBwYXNzZXMgaWYgZ29v
ZA0KKyAgLy8gOSkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSB3aXRoICdhbGxvdy1mb3Jt
cycgY2FuIHN1Ym1pdCBmb3Jtcw0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9j
X2lmMy5odG1sIHdoaWNoIGhhcyAnYWxsb3ctZm9ybXMnIGFuZCAnYWxsb3ctc2NyaXB0cycpDQor
ICANCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gMTApIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBp
ZnJhbWUgd2l0aG91dCAnYWxsb3ctZm9ybXMnIGNhbiBOT1Qgc3VibWl0IGZvcm1zIA0KKyAgLy8g
KGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIG9ubHkgaGFzICdh
bGxvdy1zY3JpcHRzJykNCisgDQorICAvLyBSRVZJRVcgOiBhcmUgdGhlcmUgb3RoZXIgd2F5cyBv
ZiBvcGVuaW5nIG5ldyB3aW5kb3dzIHRoYXQgdGhlIDMgYmVsb3cgdGhhdCBhcmUgbWVudGlvbmVk
IGluIHRoZSBIVE1MNQ0KKyAgLy8gc3BlYyA/IA0KKyAgDQorICAvLyBmYWlscyBpZiBiYWQNCisg
IC8vIDExKSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNhbid0IG9wZW4gYSBuZXcgd2lu
ZG93IHVzaW5nIHRoZSB0YXJnZXQuYXR0cmlidXRlDQorICAvLyB0aGlzIGlzIGRvbmUgdmlhIGZp
bGVfaWZyYW1lX2NfaWY0Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlw
dHMiIGFuZCAiYWxsb3ctc2FtZS1vcmlnaW4iDQorICAvLyB0aGUgd2luZG93IGl0IGF0dGVtcHRz
IHRvIG9wZW4gY2FsbHMgd2luZG93Lm9wZW5lci5vayhmYWxzZSwgLi4uKSBhbmQgZmlsZV9pZnJh
bWVfY19pZjQuaHRtbCBoYXMgYW4gb2soKQ0KKyAgLy8gZnVuY3Rpb24gdGhhdCBjYWxscyB3aW5k
b3cucGFyZW50Lm9rX3dyYXBwZXIgDQorICANCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAx
MikgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdpbmRvdyB1
c2luZyB3aW5kb3cub3Blbg0KKyAgLy8gdGhpcyBpcyBkb25lIHZpYSBmaWxlX2lmcmFtZV9jX2lm
NC5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIiBhbmQgImFsbG93
LXNhbWUtb3JpZ2luIg0KKyAgLy8gdGhlIHdpbmRvdyBpdCBhdHRlbXB0cyB0byBvcGVuIGNhbGxz
IHdpbmRvdy5vcGVuZXIub2soZmFsc2UsIC4uLikgYW5kIGZpbGVfaWZyYW1lX2NfaWY0Lmh0bWwg
aGFzIGFuIG9rKCkNCisgIC8vIGZ1bmN0aW9uIHRoYXQgY2FsbHMgd2luZG93LnBhcmVudC5va193
cmFwcGVyDQorICANCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAxMykgdGVzdCB0aGF0IGEg
c2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdpbmRvdyB1c2luZyB3aW5kb3cuU2hv
d01vZGFsRGlhbG9nDQorICAvLyB0aGlzIGlzIGRvbmUgdmlhIGZpbGVfaWZyYW1lX2NfaWY0Lmh0
bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlwdHMiIGFuZCAiYWxsb3ctc2Ft
ZS1vcmlnaW4iDQorICAvLyB0aGUgd2luZG93IGl0IGF0dGVtcHRzIHRvIG9wZW4gY2FsbHMgd2lu
ZG93Lm9wZW5lci5vayhmYWxzZSwgLi4uKSBhbmQgZmlsZV9pZnJhbWVfY19pZjQuaHRtbCBoYXMg
YW4gb2soKQ0KKyAgLy8gZnVuY3Rpb24gdGhhdCBjYWxscyB3aW5kb3cucGFyZW50Lm9rX3dyYXBw
ZXINCit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+DQorPGEgdGFyZ2V0
PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dp
P2lkPTM0MTYwNCI+TW96aWxsYSBCdWcgMzQxNjA0PC9hPiAtIEltcGxlbWVudCBIVE1MNSBzYW5k
Ym94IGF0dHJpYnV0ZSBmb3IgSUZSQU1Fcw0KKzxwIGlkPSJkaXNwbGF5Ij48L3A+DQorPGRpdiBp
ZD0iY29udGVudCI+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMSIg
c3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIx
MCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSIiIGlkPSJpZl8yIiBzcmM9ImZpbGVfaWZy
YW1lX3NhbmRib3hfY19pZjIuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4N
Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93LWZvcm1zIGFsbG93LXNjcmlwdHMiIGlkPSJpZl8zIiBz
cmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEw
Ij48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXNj
cmlwdHMiIGlkPSJpZl80IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbCIgaGVp
Z2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8L2Rpdj4NCis8L2JvZHk+DQorPC9odG1s
PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>612287</attachid>
            <date>2012-04-04 12:06:33 -0700</date>
            <delta_ts>2012-04-04 15:34:37 -0700</delta_ts>
            <desc>WIP - iframe sandbox v8 - more granular script disabling</desc>
            <filename>iframe_sandbox_csp_script_choke_points</filename>
            <type>text/plain</type>
            <size>55213</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYzNmZDA3NjhkNDZhYmRiNzdkMGU1MWQ0YmNi
NTJkNWFkZjRkMDQ0NQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtODQwLDE2ICs4NDAsMjcgQEAgcHVibGljOgogICAvKioKICAg
ICogR2V0IHRoZSBsb2NhbGl6ZWQgc3RyaW5nIG5hbWVkIHxhS2V5fCBpbiBwcm9wZXJ0aWVzIGZp
bGUgfGFGaWxlfC4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBHZXRMb2NhbGl6ZWRTdHJpbmco
UHJvcGVydGllc0ZpbGUgYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogYUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1hQSURMU3RyaW5nJiBhUmVzdWx0KTsKIAogICAvKioKKyAgICogQSBoZWxwZXIgZnVuY3Rp
b24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAg
ICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1
c2VkIGludGVybmFsbHkuCisgICAqCisgICAqIEBwYXJhbSBhQXR0cmlidXRlIAl0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisgICAqIEByZXR1cm4gCQkJdGhlIHNldCBvZiBmbGFn
cworICAgKi8KKyAgc3RhdGljIFBSVWludDMyIFBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Mo
Y29uc3QgbnNBU3RyaW5nJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNhbmRib3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBw
YXJhbWV0ZXJzIGdpdmVuKSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAg
ICogcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5z
cmVzdWx0IEZvcm1hdExvY2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQ
YXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIg
YVBhcmFtc0xlbmd0aCwKQEAgLTE5ODcsMzUgKzE5OTgsMzcgQEAgcHVibGljOgogICAgKiBmcm9t
IHRoZSBkb2N1bWVudCBpdCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVS
SUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAK
ICAgLyoqCiAgICAqIFNldCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUg
Z2l2ZW4gY2hhbm5lbCwgaWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2Yg
YUNoYW5uZWwuICBhUHJpbmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJv
dXRCbGFuayBpcyB0cnVlLCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmlu
Y2lwYWwgc2V0IHVwIG9uIGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBp
dC4gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9u
IHRoZSBjaGFubmVsLCBldmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAg
ICogZnJvbSB0aGUgY2hhbm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRo
ZSBwcmluY2lwYWwgd2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwu
CiAgICAqLwogICBzdGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFM
b2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFu
bmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBh
VVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0
QmxhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFi
b3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3du
ZXIgPSBmYWxzZSk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBh
QmluYXJ5RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNl
NjRTdHJpbmcpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFz
Y2lpU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRh
KTsKIAogICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IHBhc3Nl
ZCBpbiBwYXJhbWV0ZXIgaGFzIHRoZSBhdXRvY29tcGxldGUKLSAgICogZnVuY3Rpb25uYWxpdHkg
ZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9ybSBvd25lci4KKyAgICog
ZnVuY3Rpb25hbGl0eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3Jt
IG93bmVyLgogICAgKiBOT1RFOiB0aGUgY2FsbGVyIGhhcyB0byBtYWtlIHN1cmUgYXV0b2NvbXBs
ZXRlIG1ha2VzIHNlbnNlIGZvciB0aGUKICAgICogZWxlbWVudCdzIHR5cGUuCiAgICAqCiAgICAq
IEBwYXJhbSBhSW5wdXQgdGhlIGlucHV0IGVsZW1lbnQgdG8gY2hlY2suIE5PVEU6IGFJbnB1dCBj
YW4ndCBiZSBudWxsLgogICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgaGFz
IGF1dG9jb21wbGV0ZSBlbmFibGVkLgogICAgKi8KICAgc3RhdGljIGJvb2wgSXNBdXRvY29tcGxl
dGVFbmFibGVkKG5zSURPTUhUTUxJbnB1dEVsZW1lbnQqIGFJbnB1dCk7CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNJRG9jdW1lbnQuaAotLS0gYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysr
IGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCkBAIC0xMTksMTggKzExOSwxOCBA
QCBjbGFzcyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xhc3MgTGluazsKIGNsYXNzIEVs
ZW1lbnQ7CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNwYWNlIG1vemlsbGEKIAogI2Rl
ZmluZSBOU19JRE9DVU1FTlRfSUlEIFwKLXsgMHgyODNlYzI3ZCwgMHg1YjIzLCAweDQ5YjIsIFwN
Ci0gIHsgMHg5NCwgMHhkOSwgMHg5LCAweGI1LCAweGRiLCAweDQ1LCAweDMwLCAweDczIH0gfQ0K
K3sgMHg1N2ZlNDRhZSwgMHg2NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAw
eGE3LCAweDQzLCAweDI4LCAweGJlLCAweDg2IH0gfQogCiAKIC8vIEZsYWcgZm9yIEFkZFN0eWxl
U2hlZXQoKS4KICNkZWZpbmUgTlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFMT0cgICAgICAgICAgICAg
ICAgKDEgPDwgMCkKIAogLy8gRW51bSBmb3IgcmVxdWVzdGluZyBhIHBhcnRpY3VsYXIgdHlwZSBv
ZiBkb2N1bWVudCB3aGVuIGNyZWF0aW5nIGEgZG9jCiBlbnVtIERvY3VtZW50Rmxhdm9yIHsKICAg
RG9jdW1lbnRGbGF2b3JMZWdhY3lHdWVzcywgLy8gY29tcGF0IHdpdGggb2xkIGNvZGUgdW50aWwg
bWFkZSBIVE1MNS1jb21wbGlhbnQKQEAgLTQ1NSwxNyArNDU1LDI2IEBAIHB1YmxpYzoKICAgICog
Y2FsbGVycyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhY3Rpb24gYXMgbmVlZGVkIGlmIHRoZXkgd2Fu
dCB0aGlzCiAgICAqIGNoYW5nZSB0byBhY3R1YWxseSBjaGFuZ2UgYW55dGhpbmcgaW1tZWRpYXRl
bHkuCiAgICAqIEBzZWUgbnNCaWRpVXRpbHMuaAogICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9u
cyhQUlVpbnQzMiBhQmlkaU9wdGlvbnMpCiAgIHsKICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9w
dGlvbnM7CiAgIH0KLSAgCisKKyAgLyoqCisgICAqIEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3Ig
dGhpcyBkb2N1bWVudC4KKyAgICogQHNlZSBuc1NhbmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2li
bGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIFNhbmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAg
ICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAgfQorCiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBo
ZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxzbyBnZXQgc2V0IGZyb20gb3RoZXIKICAgICogc291cmNl
cywgbGlrZSBIVE1MIE1FVEEgdGFncykuCiAgICAqLwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVy
RGF0YShuc0lBdG9tKiBhSGVhZGVyRmllbGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsK
ICAgdmlydHVhbCB2b2lkIFNldEhlYWRlckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25z
dCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7CiAKICAgLyoqCkBAIC0xODEyLDE2ICsxODIxLDIxIEBA
IHByb3RlY3RlZDoKICAgLy8gSWYgbUlzU3RhdGljRG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFs
RG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBvcmlnaW5hbAogICAvLyBkb2N1bWVudC4KICAgbnNDT01Q
dHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5hbERvY3VtZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlv
bnMgZm9yIHRoaXMgZG9jdW1lbnQuICBXaGF0IHRoaXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8g
ZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5oCiAgIFBSVWludDMyIG1CaWRpT3B0aW9uczsKIAorICAv
LyBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9jdW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZh
bHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSBvZiB0aGUKKyAgLy8gYXNzb2NpYXRlZCBJRlJB
TUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNvbnRlbnQsIGlmIGV4aXN0ZW50LiBUaGVzZSBhcmUgc2V0
IGF0IGxvYWQgdGltZSBhbmQKKyAgLy8gYXJlIGltbXV0YWJsZSAtIHNlZSBuc1NhbmRib3hGbGFn
cy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MuCisgIFBSVWludDMyIG1TYW5kYm94RmxhZ3M7CisK
ICAgbnNDU3RyaW5nIG1Db250ZW50TGFuZ3VhZ2U7CiBwcml2YXRlOgogICBuc0NTdHJpbmcgbUNv
bnRlbnRUeXBlOwogcHJvdGVjdGVkOgogCiAgIC8vIFRoZSBkb2N1bWVudCdzIHNlY3VyaXR5IGlu
Zm8KICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IG1TZWN1cml0eUluZm87CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwIGIvY29udGVudC9iYXNlL3NyYy9u
c0NvbnRlbnRVdGlscy5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5j
cHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKQEAgLTIwOCwxNiAr
MjA4LDE3IEBAIHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtYVEZTZXJ2aWNlQ0lELCBOU18KICNpbmNs
dWRlICJuc0NDVW5jb2xsZWN0YWJsZU1hcmtlci5oIgogI2luY2x1ZGUgIm1vemlsbGEvQmFzZTY0
LmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNlcy5oIgogCiAjaW5jbHVkZSAibnNXcmFw
cGVyQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAibnNJRE9NRG9jdW1lbnRUeXBlLmgiCiAjaW5j
bHVkZSAibnNJRE9NV2luZG93VXRpbHMuaCIKICNpbmNsdWRlICJuc0NoYXJTZXBhcmF0ZWRUb2tl
bml6ZXIuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBleHRlcm4gIkMiIGludCBN
T1pfWE1MVHJhbnNsYXRlRW50aXR5KGNvbnN0IGNoYXIqIHB0ciwgY29uc3QgY2hhciogZW5kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogbmV4dCwg
UFJVbmljaGFyKiByZXN1bHQpOwogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmxheWVyczsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjp3
aWRnZXQ7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKQEAgLTkxNSwxNiArOTE2LDYyIEBAIG5z
Q29udGVudFV0aWxzOjpHZXRQYXJzZXJTZXJ2aWNlKCkKICAgICBuc3Jlc3VsdCBydiA9IENhbGxH
ZXRTZXJ2aWNlKGtQYXJzZXJTZXJ2aWNlQ0lELCAmc1BhcnNlclNlcnZpY2UpOwogICAgIGlmIChO
U19GQUlMRUQocnYpKSB7CiAgICAgICBzUGFyc2VyU2VydmljZSA9IG5zbnVsbDsKICAgICB9CiAg
IH0KIAogICByZXR1cm4gc1BhcnNlclNlcnZpY2U7CiB9CisvKioKKyAqIEEgaGVscGVyIGZ1bmN0
aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJveCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisg
KiBhIENTUCBkaXJlY3RpdmUpIGFuZCBjb252ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVz
ZWQgaW50ZXJuYWxseS4KKyAqCisgKiBAcGFyYW0gYUF0dHJpYnV0ZSAgICB0aGUgdmFsdWUgb2Yg
dGhlIHNhbmRib3ggYXR0cmlidXRlCisgKiBAcmV0dXJuICAgICAgICAgICAgICB0aGUgc2V0IG9m
IGZsYWdzCisgKi8KK1BSVWludDMyCituc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmli
dXRlVG9GbGFncyhjb25zdCBuc0FTdHJpbmcmIHNhbmRib3hBdHRyVmFsdWUpCit7CisgIC8vIElm
IHRoZXJlJ3MgYSBzYW5kYm94IGF0dHJpYnV0ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBpZiB0aGlz
IGlzIGJlaW5nCisgIC8vIGNhbGxlZCksIHN0YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0aGUgcmVz
dHJpY3Rpb24gZmxhZ3MuCisgIFBSVWludDMyIG91dCA9IFNBTkRCT1hFRF9OQVZJR0FUSU9OIHwK
KyAgICBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiB8CisgICAgU0FOREJPWEVEX1BMVUdJ
TlMgfCBTQU5EQk9YRURfT1JJR0lOIHwKKyAgICBTQU5EQk9YRURfRk9STVMgfCBTQU5EQk9YRURf
U0NSSVBUUyB8CisgICAgU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUzsKKworICBpZiAoIXNh
bmRib3hBdHRyVmFsdWUuSXNFbXB0eSgpKSB7CisgICAgLy8gVGhlIHNlcGFyYXRvciBvcHRpb25h
bCBmbGFnIGlzIHVzZWQgYmVjYXVzZSB0aGUgSFRNTDUgc3BlYyBzYXlzIGFueQorICAgIC8vIHdo
aXRlc3BhY2UgaXMgb2sgYXMgYSBzZXBhcmF0b3IsIHdoaWNoIGlzIHdoYXQgdGhpcyBkb2VzLgor
ICAgIEhUTUxTcGxpdE9uU3BhY2VzVG9rZW5pemVyIHRva2VuaXplcihzYW5kYm94QXR0clZhbHVl
LCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXJUZW1wbGF0ZTxuc0NvbnRlbnRV
dGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9PUFRJT05BTCk7CisKKyAgICB3aGls
ZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAgICAgbnNEZXBlbmRlbnRTdWJzdHJp
bmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKyAgICAgIGlmICh0b2tlbi5Mb3dl
ckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRzIikpIHsKKyAgICAgICAgb3V0ICY9IH5T
QU5EQk9YRURfU0NSSVBUUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxz
TGl0ZXJhbCgiYWxsb3ctc2FtZS1vcmlnaW4iKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hF
RF9PUklHSU47CisgICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwo
ImFsbG93LWZvcm1zIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfRk9STVM7CisgICAg
ICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNjcmlwdHMi
KSkgeworICAgICAgICAvLyBhbGxvdy1zY3JpcHRzIHJlbW92ZXMgYm90aCBTQU5EQk9YRURfU0NS
SVBUUyBhbmQKKyAgICAgICAgLy8gU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUy4KKyAgICAg
ICAgb3V0ICY9IH5TQU5EQk9YRURfU0NSSVBUUzsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURf
QVVUT01BVElDX0ZFQVRVUkVTOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVh
bHNMaXRlcmFsKCJhbGxvdy10b3AtbmF2aWdhdGlvbiIpKSB7CisgICAgICAgIG91dCAmPSB+U0FO
REJPWEVEX1RPUExFVkVMX05BVklHQVRJT047CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0
dXJuIG91dDsKK30KIAogI2lmZGVmIE1PWl9YVEYKIG5zSVhURlNlcnZpY2UqCiBuc0NvbnRlbnRV
dGlsczo6R2V0WFRGU2VydmljZSgpCiB7CiAgIGlmICghc1hURlNlcnZpY2UpIHsKICAgICBuc3Jl
c3VsdCBydiA9IENhbGxHZXRTZXJ2aWNlKGtYVEZTZXJ2aWNlQ0lELCAmc1hURlNlcnZpY2UpOwog
ICAgIGlmIChOU19GQUlMRUQocnYpKSB7CkBAIC02NDUwLDE3ICs2NDk3LDE4IEBAIG5zQ29udGVu
dFV0aWxzOjpVUklJbmhlcml0c1NlY3VyaXR5Q29udGUKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYVJlc3VsdCk7CiB9CiAKIC8vIHN0YXRpYwogYm9vbAogbnNDb250ZW50VXRpbHM6OlNl
dFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lcikKIHsKICAgLy8KICAg
Ly8gU2V0IHRoZSBvd25lciBvZiB0aGUgY2hhbm5lbCwgYnV0IG9ubHkgZm9yIGNoYW5uZWxzIHRo
YXQgY2FuJ3QKICAgLy8gcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dC4KICAgLy8K
ICAgLy8gWFhYOiBJdCBzZWVtcyB3cm9uZyB0aGF0IHRoZSBvd25lciBpcyBpZ25vcmVkIC0gZXZl
biBpZiBvbmUgaXMKICAgLy8gICAgICBzdXBwbGllZCkgdW5sZXNzIHRoZSBVUkkgaXMgamF2YXNj
cmlwdCBvciBkYXRhIG9yIGFib3V0OmJsYW5rLgogICAvLyBYWFg6IElmIHRoaXMgaXMgZXZlciBj
aGFuZ2VkLCBjaGVjayBhbGwgY2FsbGVycyBmb3Igd2hhdCBvd25lcnMKQEAgLTY0NjgsMjMgKzY1
MTYsMjcgQEAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaQogICAvLyAg
ICAgIGNvbW1lbnRzIGluIG5zRG9jU2hlbGw6OkxvYWRVUkkgd2hlcmUgd2UgZmFsbCBiYWNrIG9u
CiAgIC8vICAgICAgaW5oZXJpdGluZyB0aGUgb3duZXIgaWYgY2FsbGVkIGZyb20gY2hyb21lLiAg
VGhhdCB3b3VsZCBiZQogICAvLyAgICAgIHZlcnkgd3JvbmcgaWYgdGhpcyBjb2RlIGNoYW5nZWQg
YW55dGhpbmcgYnV0IGNoYW5uZWxzIHRoYXQKICAgLy8gICAgICBjYW4ndCBwcm92aWRlIHRoZWly
IG93biBzZWN1cml0eSBjb250ZXh0IQogICAvLwogICAvLyAgICAgIChDdXJyZW50bHkgY2hyb21l
IFVSSXMgc2V0IHRoZSBvd25lciB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQhCiAgIC8vICAgICAgU28g
c2V0dGluZyBhIE5VTEwgb3duZXIgd291bGQgYmUgYmFkISkKICAgLy8KKyAgLy8gSWYgYUZvcmNl
T3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyIHdpbGwgYmUgc2V0LCBldmVuIGZvciBhIGNoYW5uZWwg
dGhhdAorICAvLyBjYW4gcHJvdmlkZSBpdHMgb3duIHNlY3VyaXR5IGNvbnRleHQuIFRoaXMgaXMg
dXNlZCBmb3IgdGhlIEhUTUw1IElGUkFNRQorICAvLyBzYW5kYm94IGF0dHJpYnV0ZSwgc28gd2Ug
Y2FuIGZvcmNlIHRoZSBjaGFubmVsIChhbmQgaXRzIGRvY3VtZW50KSB0bworICAvLyBleHBsaWNp
dGx5IGhhdmUgYSBudWxsIHByaW5jaXBhbC4KICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBl
Y3QgVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAg
IC8vIGFib3V0OmJsYW5rIFVSSSwgc28gZG9uJ3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0
aGlzIGNhbGwgZmFpbHMuCiAgIC8vIFRoaXMgY29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBv
bmUgaW4gbnNEb2NTaGVsbDo6SW50ZXJuYWxMb2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5n
IGZvciB0aGluZ3MgdGhhdCB3aWxsIHVzZSB0aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQo
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGlu
aGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkp
IHsKKyAgaWYgKGFGb3JjZU93bmVyIHx8ICgoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZXh0KGFVUkksICZpbmhlcml0KSkgJiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBG
b3JBYm91dEJsYW5rICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSkpIHsKICAgICBhQ2hhbm5l
bC0+U2V0T3duZXIoYUxvYWRpbmdQcmluY2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAK
ICAgLy8KICAgLy8gZmlsZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMg
aXMgYSBmaWxlOiBsb2FkIG9wZW5lZCBmcm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVl
ZApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50
LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0yMzk2LDE2ICsy
Mzk2LDI1IEBAIG5zRG9jdW1lbnQ6OlN0YXJ0RG9jdW1lbnRMb2FkKGNvbnN0IGNoYXIKICAgICBG
aW5kQ2hhckluUmVhZGFibGUoJzsnLCBzZW1pY29sb24sIGVuZCk7CiAgICAgU2V0Q29udGVudFR5
cGVJbnRlcm5hbChTdWJzdHJpbmcoc3RhcnQsIHNlbWljb2xvbikpOwogICB9CiAKICAgUmV0cmll
dmVSZWxldmFudEhlYWRlcnMoYUNoYW5uZWwpOwogCiAgIG1DaGFubmVsID0gYUNoYW5uZWw7CiAK
KyAgLy8gSWYgdGhpcyBkb2N1bWVudCBpcyBiZWluZyBsb2FkZWQgYnkgYSBkb2NzaGVsbCwgY29w
eSBpdHMgc2FuZGJveCBmbGFncworICAvLyB0byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11
dGFibGUgYWZ0ZXIgYmVpbmcgc2V0IGhlcmUuCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NT
aGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFDb250YWluZXIpOworCisgIGlmIChkb2NTaGVsbCkg
eworICAgIG5zcmVzdWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNhbmRib3hGbGFncygmbVNhbmRib3hG
bGFncyk7CisgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKyAgfQorCiAgIG5zcmVzdWx0
IHJ2ID0gSW5pdENTUCgpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIHJldHVy
biBOU19PSzsKIH0KIAogbnNyZXN1bHQKIG5zRG9jdW1lbnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMv
bnNGcmFtZUxvYWRlci5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNw
cAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCkBAIC0xMTIsMTYgKzEx
MiwxOSBAQAogI2luY2x1ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96
aWxsYS9QcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIm1vemlsbGEvdW51c2VkLmgiCiAjaW5jbHVk
ZSAibW96aWxsYS9kb20vRWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvbGF5b3V0L1JlbmRl
ckZyYW1lUGFyZW50LmgiCiAKICNpbmNsdWRlICJqc2FwaS5oIgogCisjaW5jbHVkZSAibnNIVE1M
SUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCisKIHVzaW5nIG5h
bWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5h
bWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5b3V0
OwogdHlwZWRlZiBGcmFtZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7CiAKIGNsYXNzIG5zQXN5bmNE
b2NTaGVsbERlc3Ryb3llciA6IHB1YmxpYyBuc1J1bm5hYmxlCiB7CkBAIC00NjgsMTYgKzQ3MSw2
MCBAQCBuc0ZyYW1lTG9hZGVyOjpSZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3Qg
dG8gYmUgc2FmZSwgcmVjaGVjayB1cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQp
OwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
TG9hZEluZm8+IGxvYWRJbmZvOwogICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9B
ZGRSZWZzKGxvYWRJbmZvKSk7CiAgIE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9G
QUlMVVJFKTsKIAorICAvLyBJcyB0aGlzIGFuIDxpZnJhbWU+IHdpdGggYSBzYW5kYm94IGF0dHJp
YnV0ZSBvciBhIHBhcmVudCB3aGljaCBpcworICAvLyBzYW5kYm94ZWQgPworICBuc0hUTUxJRnJh
bWVFbGVtZW50ICogaWZyYW1lID0KKyAgICBuc0hUTUxJRnJhbWVFbGVtZW50OjpGcm9tQ29udGVu
dChtT3duZXJDb250ZW50KTsKKworICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworCisgIGlm
IChpZnJhbWUpIHsKKyAgICBzYW5kYm94RmxhZ3MgPSBpZnJhbWUtPkdldFNhbmRib3hGbGFncygp
OworCisgICAgUFJVaW50MzIgcGFyZW50U2FuZGJveEZsYWdzID0gMDsKKworICAgIC8vIEdldCB0
aGUgcGFyZW50J3Mgc2FuZGJveCBmbGFncywgdGhleSdyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlm
IHRoZQorICAgIC8vIGZyYW1lIGJlaW5nIGxvYWRlZCBuZWVkcyB0byBiZSBzYW5kYm94ZWQuCisg
ICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50RG9jU2hlbGxJdGVtOworICAg
IG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IGN1ckRvY1NoZWxsSXRlbSA9IGRvX1F1ZXJ5
SW50ZXJmYWNlKG1Eb2NTaGVsbCk7CisKKyAgICBpZiAoTlNfU1VDQ0VFREVEKGN1ckRvY1NoZWxs
SXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudERvY1NoZWxsSXRlbSkpKSkgewor
ICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IHBhcmVudERvYyA9IGRvX0dldEludGVyZmFjZShw
YXJlbnREb2NTaGVsbEl0ZW0pOworCisgICAgICBpZiAocGFyZW50RG9jKSB7CisgICAgICAgIHBh
cmVudFNhbmRib3hGbGFncyA9IHBhcmVudERvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHNhbmRib3hGbGFncyB8fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAg
ICAgIGlmIChwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgICAgLy8gVGhlIGNoaWxkIGNhbiBv
bmx5IGFkZCByZXN0cmljdGlvbnMsIG5vdCByZW1vdmUgdGhlbS4KKyAgICAgICAgc2FuZGJveEZs
YWdzIHw9IHBhcmVudFNhbmRib3hGbGFnczsKKyAgICAgIH0KKworICAgICAgbURvY1NoZWxsLT5T
ZXRTYW5kYm94RmxhZ3Moc2FuZGJveEZsYWdzKTsKKworICAgICAgLy8gU2V0IHVwIHRoZSBhY3R1
YWwgc2FuZGJveGluZyBmb3IgcGx1Z2lucyBhcyBzcGVjaWZpZWQuCisgICAgICBpZiAoc2FuZGJv
eEZsYWdzICYgU0FOREJPWEVEX1BMVUdJTlMpIHsKKyAgICAgICAgbURvY1NoZWxsLT5TZXRBbGxv
d1BsdWdpbnMoZmFsc2UpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIElmIHRoaXMgaXMg
YW4gPGlmcmFtZT4gYW5kIGl0J3Mgc2FuZGJveGVkIHdpdGggcmVzcGVjdCB0byBvcmlnaW4KKyAg
Ly8gd2Ugd2lsbCBzZXQgaXQgdXAgd2l0aCBhIG51bGwgcHJpbmNpcGFsIGxhdGVyIGluIG5zRG9j
U2hlbGw6OkRvVVJJTG9hZC4KKyAgLy8gV2UgZG8gaXQgdGhlcmUgdG8gY29ycmVjdGx5IHNhbmRi
b3ggY29udGVudCB0aGF0IHdhcyBsb2FkZWQgaW50bworICAvLyB0aGUgaWZyYW1lIHZpYSBvdGhl
ciBtZXRob2RzIHRoYW4gdGhlIHNyYyBhdHRyaWJ1dGUuCiAgIC8vIFdlJ2xsIHVzZSBvdXIgcHJp
bmNpcGFsLCBub3QgdGhhdCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRoaXMK
ICAgLy8gaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tzIG9u
IGRvY3VtZW50cyBsb2FkZWQgaW4KICAgLy8gc3ViZnJhbWVzIQogICBsb2FkSW5mby0+U2V0T3du
ZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKIAogICBuc0NPTVB0cjxuc0lVUkk+
IHJlZmVycmVyOwogICBydiA9IG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0VVJJ
KGdldHRlcl9BZGRSZWZzKHJlZmVycmVyKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7
CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oIGIvY29udGVudC9i
YXNlL3NyYy9uc0drQXRvbUxpc3QuaAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlz
dC5oCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKQEAgLTkzLDE3ICs5Mywy
MSBAQCBHS19BVE9NKGFjdHVhdGUsICJhY3R1YXRlIikKIEdLX0FUT00oYWRkcmVzcywgImFkZHJl
c3MiKQogR0tfQVRPTShhZnRlciwgImFmdGVyIikKIEdLX0FUT00oYWZ0ZXJfZW5kLCAiYWZ0ZXJf
ZW5kIikKIEdLX0FUT00oYWZ0ZXJfc3RhcnQsICJhZnRlcl9zdGFydCIpCiBHS19BVE9NKGFsaWdu
LCAiYWxpZ24iKQogR0tfQVRPTShhbGluaywgImFsaW5rIikKIEdLX0FUT00oYWxsLCAiYWxsIikK
IEdLX0FUT00oYWxsb3dldmVudHMsICJhbGxvd2V2ZW50cyIpCitHS19BVE9NKGFsbG93Zm9ybXMs
ICJhbGxvdy1mb3JtcyIpCiBHS19BVE9NKGFsbG93bmVnYXRpdmVhc3NlcnRpb25zLCAiYWxsb3du
ZWdhdGl2ZWFzc2VydGlvbnMiKQorR0tfQVRPTShhbGxvd3NhbWVvcmlnaW4sICJhbGxvdy1zYW1l
LW9yaWdpbiIpCitHS19BVE9NKGFsbG93c2NyaXB0cywgImFsbG93LXNjcmlwdHMiKQorR0tfQVRP
TShhbGxvd3RvcG5hdmlnYXRpb24sICJhbGxvdy10b3AtbmF2aWdhdGlvbiIpCiBHS19BVE9NKGFs
bG93dW50cnVzdGVkLCAiYWxsb3d1bnRydXN0ZWQiKQogR0tfQVRPTShhbHQsICJhbHQiKQogR0tf
QVRPTShhbHRlcm5hdGUsICJhbHRlcm5hdGUiKQogR0tfQVRPTShhbHdheXMsICJhbHdheXMiKQog
R0tfQVRPTShhbmNlc3RvciwgImFuY2VzdG9yIikKIEdLX0FUT00oYW5jZXN0b3JPclNlbGYsICJh
bmNlc3Rvci1vci1zZWxmIikKIEdLX0FUT00oX2FuZCwgImFuZCIpCiBHS19BVE9NKGFueSwgImFu
eSIpCkBAIC04NzcsMTYgKzg4MSwxNyBAQCBHS19BVE9NKHJvd3NwYW4sICJyb3dzcGFuIikKIEdL
X0FUT00ocnAsICJycCIpCiBHS19BVE9NKHJ0LCAicnQiKQogR0tfQVRPTShydGwsICJydGwiKQog
R0tfQVRPTShydWJ5LCAicnVieSIpCiBHS19BVE9NKHJ1bGUsICJydWxlIikKIEdLX0FUT00ocnVs
ZXMsICJydWxlcyIpCiBHS19BVE9NKHMsICJzIikKIEdLX0FUT00oc2FtcCwgInNhbXAiKQorR0tf
QVRPTShzYW5kYm94LCAic2FuZGJveCIpCiBHS19BVE9NKHNiYXR0ciwgInNiYXR0ciIpCiBHS19B
VE9NKHNjYWxlLCAic2NhbGUiKQogR0tfQVRPTShzY2FuLCAic2NhbiIpCiBHS19BVE9NKHNjaGVt
ZSwgInNjaGVtZSIpCiBHS19BVE9NKHNjb3BlLCAic2NvcGUiKQogR0tfQVRPTShzY29wZWQsICJz
Y29wZWQiKQogR0tfQVRPTShzY3JlZW4sICJzY3JlZW4iKQogR0tfQVRPTShzY3JlZW5YLCAic2Ny
ZWVuWCIpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmggYi9j
b250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmgKQEAgLTAs
MCArMSw1OCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1t
b2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLw0KKy8qIFRoaXMgU291cmNlIENvZGUg
Rm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMNCisgKiBM
aWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQg
d2l0aCB0aGlzIGZpbGUsDQorICogWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxh
Lm9yZy9NUEwvMi4wLy4gKi8NCisNCisvKg0KKyAqIENvbnN0YW50IGZsYWdzIHRoYXQgZGVzY3Jp
YmUgaG93IGEgZG9jdW1lbnQgaXMgc2FuZGJveGVkIGFjY29yZGluZyB0byB0aGUNCisgKiBIVE1M
NSBzcGVjLg0KKyAqLw0KKw0KKyNpZm5kZWYgbnNTYW5kYm94RmxhZ3NfaF9fXw0KKyNkZWZpbmUg
bnNTYW5kYm94RmxhZ3NfaF9fXw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250
ZW50IGZyb20gbmF2aWdhdGluZyBicm93c2luZyBjb250ZXh0cyBvdGhlciB0aGFuDQorICogdGhl
IHNhbmRib3hlZCBicm93c2luZyBjb250ZXh0IGl0c2VsZiAob3IgYnJvd3NpbmcgY29udGV4dHMg
ZnVydGhlcg0KKyAqIG5lc3RlZCBpbnNpZGUgaXQpLCBhbmQgdGhlIHRvcC1sZXZlbCBicm93c2lu
ZyBjb250ZXh0Lg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX05BVklHQVRJ
T04gID0gMHgxOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20g
bmF2aWdhdGluZyB0aGVpciB0b3AtbGV2ZWwgYnJvd3NpbmcNCisgKiBjb250ZXh0Lg0KKyAqLw0K
K2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gPSAweDI7
DQorDQorLyoqDQorICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBpbnN0YW50aWF0
aW5nIHBsdWdpbnMsIHdoZXRoZXIgdXNpbmcgdGhlDQorICogZW1iZWQgZWxlbWVudCwgdGhlIG9i
amVjdCBlbGVtZW50LCB0aGUgYXBwbGV0IGVsZW1lbnQsIG9yIHRocm91Z2gNCisgKiBuYXZpZ2F0
aW9uIG9mIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIHVubGVzcyB0aG9zZSBwbHVnaW5zIGNh
biBiZQ0KKyAqIHNlY3VyZWQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURf
UExVR0lOUyA9IDB4NDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgZm9yY2VzIGNvbnRlbnQgaW50
byBhIHVuaXF1ZSBvcmlnaW4sIHRodXMgcHJldmVudGluZyBpdCBmcm9tDQorICogYWNjZXNzaW5n
IG90aGVyIGNvbnRlbnQgZnJvbSB0aGUgc2FtZSBvcmlnaW4uDQorICogVGhpcyBmbGFnIGFsc28g
cHJldmVudHMgc2NyaXB0IGZyb20gcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gdGhlDQorICog
ZG9jdW1lbnQuY29va2llIElETCBhdHRyaWJ1dGUsIGFuZCBibG9ja3MgYWNjZXNzIHRvIGxvY2Fs
U3RvcmFnZS4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9PUklHSU4gPSAw
eDg7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBmb3JtIHN1Ym1pc3Npb24uDQorICov
DQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfRk9STVMgPSAweDEwOw0KKw0KKy8qKg0K
KyAqIFRoaXMgZmxhZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlvbi4NCisgKi8NCitjb25zdCB1bnNp
Z25lZCBsb25nIFNBTkRCT1hFRF9TQ1JJUFRTID0gMHgyMDsNCisNCisvKioNCisgKiBUaGlzIGZs
YWcgYmxvY2tzIGZlYXR1cmVzIHRoYXQgdHJpZ2dlciBhdXRvbWF0aWNhbGx5LCBzdWNoIGFzDQor
ICogYXV0b21hdGljYWxseSBwbGF5aW5nIGEgdmlkZW8gb3IgYXV0b21hdGljYWxseSBmb2N1c2lu
ZyBhIGZvcm0gY29udHJvbC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9B
VVRPTUFUSUNfRkVBVFVSRVMgPSAweDQwOw0KKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwIGIv
Y29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAKLS0tIGEvY29udGVudC9iYXNlL3Ny
Yy9uc1NjcmlwdExvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRl
ci5jcHAKQEAgLTcwLDE2ICs3MCwxNyBAQAogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBv
bGljeS5oIgogI2luY2x1ZGUgInBybG9nLmgiCiAjaW5jbHVkZSAibnNJQ2hhbm5lbFBvbGljeS5o
IgogI2luY2x1ZGUgIm5zQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1ZGUgIm5zQ1JULmgiCiAjaW5j
bHVkZSAibnNDb250ZW50Q3JlYXRvckZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIm5zR2VuZXJpY0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJuc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRl
ICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9GdW5jdGlvblRpbWVyLmgi
CiAjaW5jbHVkZSAibW96aWxsYS9DT1JTTW9kZS5oIgogCiAjaWZkZWYgUFJfTE9HR0lORwogc3Rh
dGljIFBSTG9nTW9kdWxlSW5mbyogZ0NzcFBSTG9nOwogI2VuZGlmCiAKQEAgLTMwNSwxNiArMzA2
LDIyIEBAIG5zU2NyaXB0TG9hZGVyOjpTdGFydExvYWQobnNTY3JpcHRMb2FkUmUKICAgaWYgKCF3
aW5kb3cpIHsKICAgICByZXR1cm4gTlNfRVJST1JfTlVMTF9QT0lOVEVSOwogICB9CiAKICAgbnNJ
RG9jU2hlbGwgKmRvY3NoZWxsID0gd2luZG93LT5HZXREb2NTaGVsbCgpOwogCiAgIG5zQ09NUHRy
PG5zSUludGVyZmFjZVJlcXVlc3Rvcj4gcHJvbXB0ZXIoZG9fUXVlcnlJbnRlcmZhY2UoZG9jc2hl
bGwpKTsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlzIHNhbmRib3hlZCB3aXRob3V0ICdhbGxv
dy1zY3JpcHRzJywgYWJvcnQuCisgIGlmIChtRG9jdW1lbnQtPlNhbmRib3hGbGFncygpICYgU0FO
REJPWEVEX1NDUklQVFMpIHsgCisgICAgLy8gUkVWSUVXIDogdGhpcyBwcm9iYWJseSBpc24ndCB0
aGUgcmlnaHQgZXJyb3IuLgorICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOwor
ICB9CisKICAgLy8gY2hlY2sgZm9yIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdG8gcGFzcyBk
b3duIHRvIHRoZSBjaGFubmVsCiAgIC8vIHRoYXQgd2lsbCBiZSBjcmVhdGVkIHRvIGxvYWQgdGhl
IHNjcmlwdAogICBuc0NPTVB0cjxuc0lDaGFubmVsUG9saWN5PiBjaGFubmVsUG9saWN5OwogICBu
c0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgcnYgPSBtRG9jdW1lbnQt
Pk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogICBpZiAoY3NwKSB7CiAgICAgY2hhbm5lbFBvbGljeSA9IGRv
X0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnNjaGFubmVscG9saWN5OzEiKTsKQEAgLTY3
NywxNiArNjg0LDIxIEBAIG5zU2NyaXB0TG9hZGVyOjpQcm9jZXNzU2NyaXB0RWxlbWVudChuc0kK
ICAgICAgICAgIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwYXJzZXItYmxvY2tpbmcgc2NyaXB0IGF0
IGEgdGltZSIpOwogICAgIE5TX0FTU0VSVElPTihtWFNMVFJlcXVlc3RzLklzRW1wdHkoKSwKICAg
ICAgICAgIlBhcnNlci1ibG9ja2luZyBzY3JpcHRzIGFuZCBYU0xUIHNjcmlwdHMgaW4gdGhlIHNh
bWUgZG9jISIpOwogICAgIG1QYXJzZXJCbG9ja2luZ1JlcXVlc3QgPSByZXF1ZXN0OwogICAgIHJl
dHVybiB0cnVlOwogICB9CiAKICAgLy8gaW5saW5lIHNjcmlwdAorICAvLyBJcyB0aGlzIGRvY3Vt
ZW50IHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJz8KKyAgaWYgKG1Eb2N1bWVudC0+
U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgIHJldHVybiBmYWxzZTsK
KyAgfQorCiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3NwOwogICBydiA9
IG1Eb2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7
CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBmYWxzZSk7CiAKICAgaWYgKGNzcCkgewogICAgIFBS
X0xPRyhnQ3NwUFJMb2csIFBSX0xPR19ERUJVRywgKCJOZXcgU2NyaXB0TG9hZGVyIGkgKioqKndp
dGggQ1NQKioqKiIpKTsKICAgICBib29sIGlubGluZU9LOwogICAgIHJ2ID0gY3NwLT5HZXRBbGxv
d3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMv
bnNIVE1MRm9ybUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxGb3JtRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtODAsMTYgKzgwLDE3IEBACiAKICNpbmNsdWRlICJtb3pBdXRvRG9j
VXBkYXRlLmgiCiAjaW5jbHVkZSAibnNJSFRNTENvbGxlY3Rpb24uaCIKIAogI2luY2x1ZGUgIm5z
SUNvbnN0cmFpbnRWYWxpZGF0aW9uLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MQnV0dG9uRWxl
bWVudC5oIgogI2luY2x1ZGUgImRvbWJpbmRpbmdzLmgiCisjaW5jbHVkZSAibnNTYW5kYm94Rmxh
Z3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIAogc3RhdGljIGNvbnN0IGlu
dCBOU19GT1JNX0NPTlRST0xfTElTVF9IQVNIVEFCTEVfU0laRSA9IDE2OwogCiBzdGF0aWMgY29u
c3QgUFJVaW50OCBOU19GT1JNX0FVVE9DT01QTEVURV9PTiAgPSAxOwogc3RhdGljIGNvbnN0IFBS
VWludDggTlNfRk9STV9BVVRPQ09NUExFVEVfT0ZGID0gMDsKIApAQCAtNjg0LDE3ICs2ODUsMjUg
QEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNldChuc0V2ZQogICAgIHJldHVybiBE
b1Jlc2V0KCk7CiAgIH0KIAogICBpZiAoTlNfRk9STV9TVUJNSVQgPT0gYU1lc3NhZ2UpIHsKICAg
ICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgbm90IGluIGEgZG9jdW1lbnQuCiAgICAgaWYgKCFk
b2MpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAgICB9Ci0gICAgcmV0dXJuIERvU3VibWl0KGFF
dmVudCk7CisgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIGluIGEgc2FuZGJveGVkIGZyYW1l
IGFuZCBmb3JtIHN1Ym1pdAorICAgIC8vIGlzIGRpc2FibGVkLgorICAgIFBSVWludDMyIHNhbmRi
b3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisKKyAgICBpZiAoIShzYW5kYm94RmxhZ3Mg
JiBTQU5EQk9YRURfRk9STVMpKSB7CisgICAgICByZXR1cm4gRG9TdWJtaXQoYUV2ZW50KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAogICBNT1pfQVNTRVJUKGZhbHNlKTsKICAg
cmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNIVE1MRm9ybUVsZW1lbnQ6OkRvUmVzZXQo
KQpAQCAtMTY4NSwxNiArMTY5NCwyOCBAQCBuc0hUTUxGb3JtRWxlbWVudDo6Q2hlY2tWYWxpZEZv
cm1TdWJtaXNzCiAgICAqIFRPRE86IHRoZSBjaGVjayBmb3Igb2JzZXJ2ZXIgc2hvdWxkIGJlIHJl
bW92ZWQgbGF0ZXIgd2hlbiBIVE1MNSBGb3JtcyB3aWxsCiAgICAqIGJlIHNwcmVhZCBlbm91Z2gg
YW5kIGF1dGhvcnMgd2lsbCBhc3N1bWUgZm9ybXMgY2FuJ3QgYmUgc3VibWl0dGVkIHdoZW4KICAg
ICogaW52YWxpZC4gU2VlIGJ1ZyA1ODc2NzEuCiAgICAqLwogCiAgIE5TX0FTU0VSVElPTighSGFz
QXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpub3ZhbGlkYXRlKSwKICAgICAgICAg
ICAgICAgICJXZSBzaG91bGRuJ3QgYmUgdGhlcmUgaWYgbm92YWxpZGF0ZSBpcyBzZXQhIik7CiAK
KyAgLy8gRG9uJ3QgZG8gdmFsaWRhdGlvbiBmb3IgYSBmb3JtIHN1Ym1pdCBkb25lIGJ5IGEgc2Fu
ZGJveGVkIGRvY3VtZW50IHRoYXQKKyAgLy8gZG9lc24ndCBoYXZlICdhbGxvdy1mb3JtcycsIHRo
ZSBzdWJtaXQgd2lsbCBoYXZlIGJlZW4gYmxvY2tlZCBhbmQgdGhlCisgIC8vIEhUTUw1IHNwZWMg
c2F5cyB3ZSBzaG91bGRuJ3QgdmFsaWRhdGUgaW4gdGhpcyBjYXNlLgorICBuc0lEb2N1bWVudCog
ZG9jID0gR2V0Q3VycmVudERvYygpOworICBpZiAoZG9jKSB7CisgICAgUFJVaW50MzIgc2FuZGJv
eEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKworICAgIGlmIChzYW5kYm94RmxhZ3MgJiBT
QU5EQk9YRURfRk9STVMpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICAgICAg
ICAgICAgICAgCiAgIC8vIFdoZW4gLnN1Ym1pdCgpIGlzIGNhbGxlZCBhRXZlbnQgPSBuc251bGwg
c28gd2UgY2FuIHJlbHkgb24gdGhhdCB0byBrbm93IGlmCiAgIC8vIHdlIGhhdmUgdG8gY2hlY2sg
dGhlIHZhbGlkaXR5IG9mIHRoZSBmb3JtLgogICBuc0NPTVB0cjxuc0lPYnNlcnZlclNlcnZpY2U+
IHNlcnZpY2UgPQogICAgIG1vemlsbGE6OnNlcnZpY2VzOjpHZXRPYnNlcnZlclNlcnZpY2UoKTsK
ICAgaWYgKCFzZXJ2aWNlKSB7CiAgICAgTlNfV0FSTklORygiTm8gb2JzZXJ2ZXIgc2VydmljZSBh
dmFpbGFibGUhIik7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29u
dGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC0zMyw4MSArMzMsMzMgQEAKICAqIHRo
ZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0
aGlzIGZpbGUgdW5kZXIKICAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBH
UEwgb3IgdGhlIExHUEwuCiAgKgogICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8K
IAogI2luY2x1ZGUgIm1vemlsbGEvVXRpbC5oIgogCiAjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFt
ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50LmgiCi0jaW5j
bHVkZSAibnNJRE9NRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01HZXRTVkdEb2N1bWVudC5o
IgotI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNHa0F0b21zLmgi
Ci0jaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc01hcHBlZEF0dHJpYnV0ZXMu
aCIKLSNpbmNsdWRlICJuc0RPTUVycm9yLmgiCi0jaW5jbHVkZSAibnNSdWxlRGF0YS5oIgotI2lu
Y2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRlICJuc0hUTUxJRnJhbWVFbGVtZW50Lmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRv
bTsKIAotY2xhc3MgbnNIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJh
bWVFbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUhUTUxJ
RnJhbWVFbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUdl
dFNWR0RvY3VtZW50Ci17Ci1wdWJsaWM6Ci0gIG5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9B
ZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvLAotICAgICAgICAgICAgICAgICAgICAgIG1v
emlsbGE6OmRvbTo6RnJvbVBhcnNlciBhRnJvbVBhcnNlciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZS
T01fUEFSU0VSKTsKLSAgdmlydHVhbCB+bnNIVE1MSUZyYW1lRWxlbWVudCgpOwotCi0gIC8vIG5z
SVN1cHBvcnRzCi0gIE5TX0RFQ0xfSVNVUFBPUlRTX0lOSEVSSVRFRAotCi0gIC8vIG5zSURPTU5v
ZGUKLSAgTlNfRk9SV0FSRF9OU0lET01OT0RFKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikK
LQotICAvLyBuc0lET01FbGVtZW50Ci0gIE5TX0ZPUldBUkRfTlNJRE9NRUxFTUVOVChuc0dlbmVy
aWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NSFRNTEVsZW1lbnQKLSAgTlNfRk9S
V0FSRF9OU0lET01IVE1MRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAg
Ly8gbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKLSAgTlNfREVDTF9OU0lET01IVE1MSUZSQU1FRUxF
TUVOVAotCi0gIC8vIG5zSURPTUdldFNWR0RvY3VtZW50Ci0gIE5TX0RFQ0xfTlNJRE9NR0VUU1ZH
RE9DVU1FTlQKLQotICAvLyBuc0lDb250ZW50Ci0gIHZpcnR1YWwgYm9vbCBQYXJzZUF0dHJpYnV0
ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJQXRvbSogYUF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNBU3RyaW5nJiBhVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
QXR0clZhbHVlJiBhUmVzdWx0KTsKLSAgTlNfSU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1dGVNYXBw
ZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7Ci0gIHZpcnR1YWwgbnNNYXBSdWxl
VG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdDsKLQot
ICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5vZGUg
KiphUmVzdWx0KSBjb25zdDsKLSAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xhc3NJbmZv
KCk7Ci19OwotCi0KIE5TX0lNUExfTlNfTkVXX0hUTUxfRUxFTUVOVF9DSEVDS19QQVJTRVIoSUZy
YW1lKQogCi0KIG5zSFRNTElGcmFtZUVsZW1lbnQ6Om5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFk
eV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGcm9tUGFyc2VyIGFGcm9tUGFyc2VyKQogICA6IG5zR2VuZXJp
Y0hUTUxGcmFtZUVsZW1lbnQoYU5vZGVJbmZvLCBhRnJvbVBhcnNlcikKIHsKIH0KIAogbnNIVE1M
SUZyYW1lRWxlbWVudDo6fm5zSFRNTElGcmFtZUVsZW1lbnQoKQogeworICBpZiAobVNhbmRib3hU
b2tlbkxpc3QpCisgICAgbVNhbmRib3hUb2tlbkxpc3QtPkRyb3BSZWZlcmVuY2UoKTsKIH0KIAog
CiBOU19JTVBMX0FERFJFRl9JTkhFUklURUQobnNIVE1MSUZyYW1lRWxlbWVudCxuc0dlbmVyaWNF
bGVtZW50KQogTlNfSU1QTF9SRUxFQVNFX0lOSEVSSVRFRChuc0hUTUxJRnJhbWVFbGVtZW50LG5z
R2VuZXJpY0VsZW1lbnQpCiAKIERPTUNJX05PREVfREFUQShIVE1MSUZyYW1lRWxlbWVudCwgbnNI
VE1MSUZyYW1lRWxlbWVudCkKIApAQCAtMTUwLDE2ICsxMDIsMjggQEAgbnNIVE1MSUZyYW1lRWxl
bWVudDo6R2V0Q29udGVudFdpbmRvdyhucwogfQogCiBOU19JTUVUSE9ESU1QCiBuc0hUTUxJRnJh
bWVFbGVtZW50OjpHZXRTVkdEb2N1bWVudChuc0lET01Eb2N1bWVudCAqKmFSZXN1bHQpCiB7CiAg
IHJldHVybiBHZXRDb250ZW50RG9jdW1lbnQoYVJlc3VsdCk7CiB9CiAKK05TX0lNRVRIT0RJTVAK
K25zSFRNTElGcmFtZUVsZW1lbnQ6OkdldFNhbmRib3gobnNJRE9NRE9NU2V0dGFibGVUb2tlbkxp
c3QqKiBhU2FuZGJveCkKK3sKKyAgaWYgKCFtU2FuZGJveFRva2VuTGlzdCkgeworICAgIG1TYW5k
Ym94VG9rZW5MaXN0ID0gbmV3IG5zRE9NU2V0dGFibGVUb2tlbkxpc3QodGhpcywgbnNHa0F0b21z
OjpzYW5kYm94KTsKKyAgfQorCisgIE5TX0FERFJFRigqYVNhbmRib3ggPSBtU2FuZGJveFRva2Vu
TGlzdCk7CisKKyAgcmV0dXJuIE5TX09LOworfQorCiBib29sCiBuc0hUTUxJRnJhbWVFbGVtZW50
OjpQYXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KQogewogICBpZiAo
YU5hbWVzcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CiAgICAgaWYgKGFBdHRyaWJ1dGUg
PT0gbnNHa0F0b21zOjptYXJnaW53aWR0aCkgewpAQCAtMTc4LDE2ICsxNDIsMjIgQEAgbnNIVE1M
SUZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJbgogICAgICAgcmV0dXJuIFBhcnNlRnJh
bWVib3JkZXJWYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBpZiAoYUF0dHJpYnV0
ZSA9PSBuc0drQXRvbXM6OnNjcm9sbGluZykgewogICAgICAgcmV0dXJuIFBhcnNlU2Nyb2xsaW5n
VmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CiAgICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNH
a0F0b21zOjphbGlnbikgewogICAgICAgcmV0dXJuIFBhcnNlQWxpZ25WYWx1ZShhVmFsdWUsIGFS
ZXN1bHQpOwogICAgIH0KKyAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OnNhbmRib3gp
IHsKKyAgICAgIC8vIFRoZSBzYW5kYm94IGF0dHJpYnV0ZSBuZWVkcyB0byBiZSBwYXJzZWQgYXMg
YW4gYXRvbSBhcnJheSBzbworICAgICAgLy8gaXQgY2FuIGJlIGV4cG9zZWQgYXMgYSBET01TZXR0
YWJsZVRva2VuTGlzdC4KKyAgICAgIGFSZXN1bHQuUGFyc2VBdG9tQXJyYXkoYVZhbHVlKTsKKyAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KICAgfQogCiAgIHJldHVybiBuc0dlbmVyaWNIVE1MRnJh
bWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShhTmFtZXNwYWNlSUQsIGFBdHRyaWJ1dGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVmFsdWUsIGFS
ZXN1bHQpOwogfQogCiBzdGF0aWMgdm9pZAogTWFwQXR0cmlidXRlc0ludG9SdWxlKGNvbnN0IG5z
TWFwcGVkQXR0cmlidXRlcyogYUF0dHJpYnV0ZXMsCkBAIC0yNjgsOCArMjM4LDM3IEBAIG5zSFRN
TElGcmFtZUVsZW1lbnQ6OklzQXR0cmlidXRlTWFwcGVkKGMKIAogCiBuc01hcFJ1bGVUb0F0dHJp
YnV0ZXNGdW5jCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rp
b24oKSBjb25zdAogewogICByZXR1cm4gJk1hcEF0dHJpYnV0ZXNJbnRvUnVsZTsKIH0KIAorbnNy
ZXN1bHQKK25zSFRNTElGcmFtZUVsZW1lbnQ6OkFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3Bh
Y2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhTm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0gbnNHa0F0b21zOjpzYW5k
Ym94ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgeworICAgIC8vIFBhcnNl
IHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBhbmQgaWYgd2UgaGF2ZSBh
IGRvY3NoZWxsCisgICAgLy8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFwcHJvcHJpYXRlbHkuCisg
ICAgaWYgKG1GcmFtZUxvYWRlcikgeworICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY3No
ZWxsID0gbUZyYW1lTG9hZGVyLT5HZXRFeGlzdGluZ0RvY1NoZWxsKCk7CisKKyAgICAgIGlmIChk
b2NzaGVsbCkgeworICAgICAgICBQUlVpbnQzMiBuZXdGbGFncyA9IDA7CisgICAgICAgIC8vIElm
IGEgTlVMTCBhVmFsdWUgaXMgcGFzc2VkIGluLCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBzYW5kYm94
IGZsYWdzCisgICAgICAgIC8vIHdoaWNoIHdlIHdpbGwgZG8gYnkgc2V0dGluZyB0aGVtIHRvIDAu
CisgICAgICAgIGlmIChhVmFsdWUpIHsKKyAgICAgICAgICBuc0F1dG9TdHJpbmcgc3RyVmFsdWU7
CisgICAgICAgICAgYVZhbHVlLT5Ub1N0cmluZyhzdHJWYWx1ZSk7CisgICAgICAgICAgbmV3Rmxh
Z3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncygKKyAgICAg
ICAgICAgIHN0clZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBkb2NzaGVsbC0+U2V0U2FuZGJv
eEZsYWdzKG5ld0ZsYWdzKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIG5zR2VuZXJp
Y0hUTUxFbGVtZW50OjpBZnRlclNldEF0dHIoYU5hbWVTcGFjZUlELCBhTmFtZSwgYVZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTm90aWZ5KTsKKwor
fQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1l
bnQuaCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVu
dC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCkBAIC0wLDAgKzEsMTE3IEBACisvKiAtKi0gTW9k
ZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZz
ZXQ6IDIgLSotICovCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJz
aW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24K
KyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgor
ICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUK
KyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxsYSBDb21tdW5p
Y2F0b3IgY2xpZW50IGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBP
cmlnaW5hbCBDb2RlIGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4K
KyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmln
aHQgKEMpIDE5OTgKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0
aGVyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIg
KHRoZSAiR1BMIiksCisgKiBvciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhl
IHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFk
CisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVy
c2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUg
R1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIg
dmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRl
IHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCBy
ZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1
aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhl
IHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQ
TCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwor
CisjaW5jbHVkZSAibW96aWxsYS9VdGlsLmgiCisKKyNpbmNsdWRlICJuc0lET01IVE1MSUZyYW1l
RWxlbWVudC5oIgorI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAi
bnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zSURPTURvY3VtZW50Lmgi
CisjaW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01TVkdE
b2N1bWVudC5oIgorI2luY2x1ZGUgIm5zR2tBdG9tcy5oIgorI2luY2x1ZGUgIm5zSURvY3VtZW50
LmgiCisjaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAibnNET01FcnJv
ci5oIgorI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIKKyNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgi
CisjaW5jbHVkZSAibnNET01TZXR0YWJsZVRva2VuTGlzdC5oIgorI2luY2x1ZGUgIm5zQ29udGVu
dFV0aWxzLmgiCisKK2NsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmlj
SFRNTEZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lE
T01IVE1MSUZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBu
c0lET01HZXRTVkdEb2N1bWVudAoreworcHVibGljOgorICBuc0hUTUxJRnJhbWVFbGVtZW50KGFs
cmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKKyAgICAgICAgICAgICAgICAg
ICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJzZXIgPSBtb3ppbGxhOjpkb206
Ok5PVF9GUk9NX1BBUlNFUik7CisgIHZpcnR1YWwgfm5zSFRNTElGcmFtZUVsZW1lbnQoKTsKKwor
ICAvLyBuc0lTdXBwb3J0cworICBOU19ERUNMX0lTVVBQT1JUU19JTkhFUklURUQKKworICAvLyBu
c0lET01Ob2RlCisgIE5TX0ZPUldBUkRfTlNJRE9NTk9ERShuc0dlbmVyaWNIVE1MRnJhbWVFbGVt
ZW50OjopCisKKyAgLy8gbnNJRE9NRWxlbWVudAorICBOU19GT1JXQVJEX05TSURPTUVMRU1FTlQo
bnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhUTUxFbGVtZW50Cisg
IE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6
KQorCisgIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50CisgIE5TX0RFQ0xfTlNJRE9NSFRNTElG
UkFNRUVMRU1FTlQKKworICAvLyBuc0lET01HZXRTVkdEb2N1bWVudAorICBOU19ERUNMX05TSURP
TUdFVFNWR0RPQ1VNRU5UCisKKyAgLy8gbnNJQ29udGVudAorICB2aXJ0dWFsIGJvb2wgUGFyc2VB
dHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CisgIE5TX0lNRVRIT0RfKGJvb2wpIElzQXR0cmli
dXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0OworICB2aXJ0dWFsIG5z
TWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29u
c3Q7CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBu
c0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7CisgIHZpcnR1YWwgbnNYUENDbGFzc0luZm8qIEdldENs
YXNzSW5mbygpOworCisgIHZpcnR1YWwgbnNyZXN1bHQgQWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5h
bWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYU5vdGlmeSk7CisKKyAgUFJVaW50MzIgR2V0U2FuZGJveEZsYWdzKCkg
eworICAgIG5zQXV0b1N0cmluZyBzYW5kYm94QXR0cjsKKworICAgIGlmIChHZXRBdHRyKGtOYW1l
U3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6OnNhbmRib3gsIHNhbmRib3hBdHRyKSkgeworICAgICAg
cmV0dXJuIG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKHNhbmRi
b3hBdHRyKTsKKyAgICB9CisKKyAgICAvLyBObyBzYW5kYm94IGF0dHJpYnV0ZSwgbm8gc2FuZGJv
eCBmbGFncy4KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHN0YXRpYyBuc0hUTUxJRnJhbWVFbGVt
ZW50KiBGcm9tQ29udGVudChuc0lDb250ZW50ICphQ29udGVudCkKKyAgeworICAgIGlmIChhQ29u
dGVudC0+SXNIVE1MKG5zR2tBdG9tczo6aWZyYW1lKSkKKyAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxuc0hUTUxJRnJhbWVFbGVtZW50Kj4oYUNvbnRlbnQpOworICAgIHJldHVybiBuc251bGw7Cisg
IH0KKworcHJvdGVjdGVkOgorICBuc1JlZlB0cjxuc0RPTVNldHRhYmxlVG9rZW5MaXN0PiAgbVNh
bmRib3hUb2tlbkxpc3Q7Cit9OwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2RvY3VtZW50L3Ny
Yy9uc0hUTUxEb2N1bWVudC5jcHAgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERv
Y3VtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50
LmNwcAorKysgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcApA
QCAtMTMwLDE2ICsxMzAsMTcgQEAKICNpbmNsdWRlICJuc0h0bWw1TW9kdWxlLmgiCiAjaW5jbHVk
ZSAicHJwcmYuaCIKICNpbmNsdWRlICJtb3ppbGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVkZSAi
bW96aWxsYS9QcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIm5zTWltZVR5cGVzLmgiCiAjaW5jbHVk
ZSAibnNJUmVxdWVzdC5oIgogI2luY2x1ZGUgIm5zSHRtbDVUcmVlT3BFeGVjdXRvci5oIgogI2lu
Y2x1ZGUgIm5zSHRtbDVQYXJzZXIuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiB1
c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAK
ICNkZWZpbmUgTlNfTUFYX0RPQ1VNRU5UX1dSSVRFX0RFUFRIIDIwCiAKICNpbmNsdWRlICJwcm1l
bS5oIgogI2luY2x1ZGUgInBydGltZS5oIgpAQCAtMTI3MSwxNiArMTI3MiwyMSBAQCBuc0hUTUxE
b2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiB7CiAgIGFDb29raWUuVHJ1bmNhdGUo
KTsgLy8gY2xlYXIgY3VycmVudCBjb29raWUgaW4gY2FzZSBzZXJ2aWNlIGZhaWxzOwogICAgICAg
ICAgICAgICAgICAgICAgIC8vIG5vIGNvb2tpZSBpc24ndCBhbiBlcnJvciBjb25kaXRpb24uCiAK
ICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAK
KyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNldCwgYWNj
ZXNzIHRvIHJlYWQgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hG
bGFncyAmIFNBTkRCT1hFRF9PUklHSU4pCisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklU
WV9FUlI7CisKICAgLy8gbm90IGhhdmluZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9y
CiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5T
X0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlmIChzZXJ2aWNlKSB7CiAgICAgLy8gR2V0
IGEgVVJJIGZyb20gdGhlIGRvY3VtZW50IHByaW5jaXBhbC4gV2UgdXNlIHRoZSBvcmlnaW5hbAog
ICAgIC8vIGNvZGViYXNlIGluIGNhc2UgdGhlIGNvZGViYXNlIHdhcyBjaGFuZ2VkIGJ5IFNldERv
bWFpbgogICAgIG5zQ09NUHRyPG5zSVVSST4gY29kZWJhc2VVUkk7CiAgICAgTm9kZVByaW5jaXBh
bCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMoY29kZWJhc2VVUkkpKTsKIApAQCAtMTMwMSwxNiAr
MTMwNywyMSBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiAKIE5T
X0lNRVRIT0RJTVAKIG5zSFRNTERvY3VtZW50OjpTZXRDb29raWUoY29uc3QgbnNBU3RyaW5nJiBh
Q29va2llKQogewogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNf
T0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcg
aXMgc2V0LCBhY2Nlc3MgdG8gd3JpdGUgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBp
ZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pCisgICAgcmV0dXJuIE5TX0VSUk9S
X0RPTV9TRUNVUklUWV9FUlI7CisKICAgLy8gbm90IGhhdmluZyBhIGNvb2tpZSBzZXJ2aWNlIGlz
bid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNlcnZpY2UgPSBkb19H
ZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlmIChzZXJ2aWNlICYm
IG1Eb2N1bWVudFVSSSkgewogICAgIG5zQ09NUHRyPG5zSVByb21wdD4gcHJvbXB0OwogICAgIG5z
Q09NUHRyPG5zUElET01XaW5kb3c+IHdpbmRvdyA9IEdldFdpbmRvdygpOwogICAgIGlmICh3aW5k
b3cpIHsKICAgICAgIHdpbmRvdy0+R2V0UHJvbXB0ZXIoZ2V0dGVyX0FkZFJlZnMocHJvbXB0KSk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbiBiL2RvY3NoZWxs
L2Jhc2UvTWFrZWZpbGUuaW4KLS0tIGEvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbgorKysgYi9k
b2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCkBAIC0xMTYsOSArMTE2LDEwIEBAIEZPUkNFX1NUQVRJ
Q19MSUIgPSAxCiAKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawogCiBMT0NB
TF9JTkNMVURFUyArPSBcCiAgIC1JJChzcmNkaXIpLy4uL3NoaXN0b3J5L3NyYyBcCiAgIC1JJCh0
b3BzcmNkaXIpL2RvbS9iYXNlIFwKICAgLUkkKHRvcHNyY2RpcikvbGF5b3V0L2Jhc2UgXAogICAt
SSQodG9wc3JjZGlyKS94cGNvbS9kcyBcCisgIC1JJCh0b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9z
cmMgXAogICAkKE5VTEwpCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3Bw
IGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9j
U2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKQEAgLTIxMywxNiAr
MjEzLDE3IEBACiAjaW5jbHVkZSAibnNJV2ViQnJvd3NlclByaW50LmgiCiAjZW5kaWYKIAogI2lu
Y2x1ZGUgIm5zUGx1Z2luRXJyb3IuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogI2lu
Y2x1ZGUgIm5zQ29udGVudEVycm9ycy5oIgogI2luY2x1ZGUgIm5zSUNoYW5uZWxQb2xpY3kuaCIK
ICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRi
b3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNYVUxBcHBBUEkuaCIKIAogI2luY2x1ZGUgIm5zRE9N
TmF2aWdhdGlvblRpbWluZy5oIgogI2luY2x1ZGUgIm5zSVRpbWVkQ2hhbm5lbC5oIgogI2luY2x1
ZGUgIm1vemlsbGEvU3RhcnR1cFRpbWVsaW5lLmgiCiAKIHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtE
T01TY3JpcHRPYmplY3RGYWN0b3J5Q0lELApAQCAtNzI3LDE2ICs3MjgsMTcgQEAgbnNEb2NTaGVs
bDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVTWV9GTEFHU19OT05FKSwKICAgICBt
QXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9XTiksCiAgICAgbUxvYWRUeXBlKDAp
LAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdpbkhlaWdodCgtMSksCiAgICAgbUl0
ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNUcmFuc0luZGV4KC0xKSwKICAgICBt
TG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hGbGFncygwKSwKICAgICBtQ3JlYXRl
ZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUpLAogICAgIG1BbGxvd1BsdWdpbnMo
dHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwKICAgICBtQWxsb3dNZXRhUmVkaXJl
Y3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwKICAgICBtQWxsb3dETlNQcmVmZXRj
aCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRydWUpLApAQCAtMjkwNywxNiArMjkw
OSw3MyBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pCiAgICAgICAg
ICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmRJ
dGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91bmRJdGVtIGhlcmUgZXZlbiBpZiBp
dCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0ZW0gc2luY2UgYWxsIHRoZSBuYW1l
cyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2Fz
ZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3IgZnVydGhlci4KIAorICAgICAgICAg
ICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwgd2UgbmVlZCB0byBkbyBzb21lIGV4
dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisKKyAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19HZXRJbnRlcmZhY2UoYU9y
aWdpbmFsUmVxdWVzdG9yKTsKKworICAgICAgICAgICAgaWYgKGRvYykgeworICAgICAgICAgICAg
ICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzKSB7CisgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gcm9vdDsKKyAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVJv
b3RUcmVlSXRlbShnZXR0ZXJfQWRkUmVmcyhyb290KSk7CisKKyAgICAgICAgICAgICAgICAvLyBJ
cyB0aGUgZm91bmQgaXRlbSBub3QgYSB0b3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBhbmQgbm90
IG91cnNlbGYgPworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHNlbGZBc0l0ZW0gPSBzdGF0aWNfY2FzdDxuc0lEb2NTaGVsbFRyZWVJdGVtICo+KHRoaXMpOwor
ICAgICAgICAgICAgICAgIGlmIChmb3VuZEl0ZW0gIT0gcm9vdCAmJiBmb3VuZEl0ZW0gIT0gc2Vs
ZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgYW4gYW5jZXN0b3Igb2Yg
dGhlIGZvdW5kSXRlbSA/CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNBbmNlc3RvciA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+
IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0
dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVt
LT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAgJiYgdG1wID09IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc0FuY2VzdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNBbmNlc3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm8sIHdlIGFyZSBub3QgYW4gYW5jZXN0b3IgYW5kIG91ciBkb2N1bWVudCBpcworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc2FuZGJveGVkLCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAg
ICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVG9w
IGxldmVsIGJyb3dzaW5nIGNvbnRleHQgLSBpcyBpdCBhbiBhbmNlc3RvciBvZiBvdXJzID8KKyAg
ICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAg
ICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsK
KworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG1wKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodG1wICYmIHRtcCA9PSBmb3VuZEl0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIGFuIGFuY2VzdG9yLCBhbmQgd2UgYXJlIHNhbmRib3hlZC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9wLW5hdmlnYXRpb24g
aXMgc2V0LCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcC0+
R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBmb3VuZEl0ZW0u
c3dhcCgqX3JldHZhbCk7CiAgICAgICAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICAvLyBLZWVwIGxvb2tpbmcKICAgICAgICAgCiAgICAgLy8gRmlyc3Qgd2UgY2hl
Y2sgb3VyIG5hbWUuCkBAIC00OTQzLDE2ICs1MDAyLDMwIEBAIG5zRG9jU2hlbGw6OlNldElzQXBw
VGFiKGJvb2wgYUlzQXBwVGFiKQogTlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6R2V0SXNBcHBU
YWIoYm9vbCAqYUlzQXBwVGFiKQogewogICAqYUlzQXBwVGFiID0gbUlzQXBwVGFiOwogICByZXR1
cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6OlNldFNhbmRib3hGbGFn
cyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQoreworICBtU2FuZGJveEZsYWdzID0gYVNhbmRib3hG
bGFnczsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpH
ZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgICphU2FuZGJveEZsYWdzKQoreworICAqYVNhbmRib3hG
bGFncyA9IG1TYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElN
UAogbnNEb2NTaGVsbDo6U2V0VmlzaWJpbGl0eShib29sIGFWaXNpYmlsaXR5KQogewogICAgIGlm
ICghbUNvbnRlbnRWaWV3ZXIpCiAgICAgICAgIHJldHVybiBOU19PSzsKICAgICBpZiAoYVZpc2li
aWxpdHkpIHsKICAgICAgICAgbUNvbnRlbnRWaWV3ZXItPlNob3coKTsKICAgICB9CiAgICAgZWxz
ZSB7CkBAIC04MTMyLDE2ICs4MjA1LDI5IEBAIG5zRG9jU2hlbGw6OkludGVybmFsTG9hZChuc0lV
UkkgKiBhVVJJLAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0YXJnZXRJ
dGVtOwogICAgICAgICBGaW5kSXRlbVdpdGhOYW1lKGFXaW5kb3dUYXJnZXQsIG5zbnVsbCwgdGhp
cywKICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyh0YXJnZXRJdGVtKSk7
CiAKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IHRhcmdldERvY1NoZWxsID0gZG9fUXVl
cnlJbnRlcmZhY2UodGFyZ2V0SXRlbSk7CiAgICAgICAgIAogICAgICAgICBib29sIGlzTmV3V2lu
ZG93ID0gZmFsc2U7CiAgICAgICAgIGlmICghdGFyZ2V0RG9jU2hlbGwpIHsKKyAgICAgICAgICAg
IC8vIElmIHRoZSBkb2NzaGVsbCdzIGRvY3VtZW50IGlzIHNhbmRib3hlZCBhbmQgd2FzIHRyeWlu
ZyB0bworICAgICAgICAgICAgLy8gbmF2aWdhdGUvbG9hZCBhIGZyYW1lIGl0IHdhc24ndCBhbGxv
d2VkIHRvIGFjY2VzcywgdGhlCisgICAgICAgICAgICAvLyBGaW5kSXRlbVdpdGhOYW1lIGFib3Zl
IHdpbGwgaGF2ZSByZXR1cm5lZCBudWxsIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAvLyBp
dGVtIC0gd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBvcGVuIGEgbmV3IHdpbmRvdyBpbiB0aGlz
IGNhc2UKKyAgICAgICAgICAgIC8vIHRob3VnaC4gQ2hlY2sgaWYgd2UgYXJlIHNhbmRib3hlZCBh
bmQgYmFpbCBvdXQgaGVyZSBpZiBzby4KKyAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKG1Db250
ZW50Vmlld2VyLCBOU19FUlJPUl9GQUlMVVJFKTsKKyAgICAgICAgICAgIG5zSURvY3VtZW50KiBk
b2MgPSBtQ29udGVudFZpZXdlci0+R2V0RG9jdW1lbnQoKTsKKyAgICAgICAgICAgIFBSVWludDMy
IHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRi
b3hGbGFncygpOworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9OQVZJ
R0FUSU9OKSB7CisgICAgICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IHdpbiA9CiAgICAg
ICAgICAgICAgICAgZG9fR2V0SW50ZXJmYWNlKEdldEFzU3VwcG9ydHModGhpcykpOwogICAgICAg
ICAgICAgTlNfRU5TVVJFX1RSVUUod2luLCBOU19FUlJPUl9OT1RfQVZBSUxBQkxFKTsKIAogICAg
ICAgICAgICAgbnNEZXBlbmRlbnRTdHJpbmcgbmFtZShhV2luZG93VGFyZ2V0KTsKICAgICAgICAg
ICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gbmV3V2luOwogICAgICAgICAgICAgcnYgPSB3aW4t
Pk9wZW4oRW1wdHlTdHJpbmcoKSwgLy8gVVJMIHRvIGxvYWQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWUsICAgICAgICAgIC8vIHdpbmRvdyBuYW1lCkBAIC04OTEzLDE4ICs4OTk5LDMx
IEBAIG5zRG9jU2hlbGw6OkRvVVJJTG9hZChuc0lVUkkgKiBhVVJJLAogICAgICAgICB9CiAgICAg
ICAgIC8vIFNldCB0aGUgcmVmZXJyZXIgZXhwbGljaXRseQogICAgICAgICBpZiAoYVJlZmVycmVy
VVJJICYmIGFTZW5kUmVmZXJyZXIpIHsKICAgICAgICAgICAgIC8vIFJlZmVycmVyIGlzIGN1cnJl
bmx5IG9ubHkgc2V0IGZvciBsaW5rIGNsaWNrcyBoZXJlLgogICAgICAgICAgICAgaHR0cENoYW5u
ZWwtPlNldFJlZmVycmVyKGFSZWZlcnJlclVSSSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBu
c0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFP
d25lcikpOwotICAgIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5j
aXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSk7CisgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBv
d25lclByaW5jaXBhbDsKKworICAgIC8vIElmIHRoZSBjb250ZW50IGJlaW5nIGxvYWRlZCBzaG91
bGQgYmUgc2FuZGJveGVkIHdpdGggcmVzcGVjdCB0byBvcmlnaW4KKyAgICAvLyB3ZSBuZWVkIHRv
IGNyZWF0ZSBhIG5ldyBudWxsIHByaW5jaXBhbCBoZXJlLCBhbmQgdGhlbiB0ZWxsCisgICAgLy8g
bnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyIHRvIGZvcmNlIGl0IHRvIGJlIHNldCBh
cyB0aGUKKyAgICAvLyBjaGFubmVsIG93bmVyLgorICAgIGlmIChtU2FuZGJveEZsYWdzICYgU0FO
REJPWEVEX09SSUdJTikgeworICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0YW5j
ZSgiQG1vemlsbGEub3JnL251bGxwcmluY2lwYWw7MSIpOworICAgIH0gZWxzZSB7CisgICAgICAv
LyBOb3Qgc2FuZGJveGVkIC0gd2UgYWxsb3cgdGhlIGNvbnRlbnQgdG8gYXNzdW1lIGl0cyBuYXR1
cmFsIG93bmVyLgorICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19RdWVyeUludGVyZmFjZShhT3du
ZXIpOworICAgIH0KKworICAgIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25l
clByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikpOwogCiAg
ICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50
ZXJmYWNlKGNoYW5uZWwpOwogICAgIGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgICAgIC8vIEFs
bG93IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNo
CiAgICAgICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAgICAgICAgU2V0RXhlY3V0aW9uUG9saWN5
KG5zSVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFMKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgK
LS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0Rv
Y1NoZWxsLmgKQEAgLTc4MSwxNiArNzgxLDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBDcmVhdGUo
KSBpcyBjYWxsZWQsIHRoZSB0eXBlIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuCiAgICAgUFJJ
bnQzMiAgICAgICAgICAgICAgICAgICAgbUl0ZW1UeXBlOwogCiAgICAgLy8gSW5kZXggaW50byB0
aGUgU0hUcmFuc2FjdGlvbiBsaXN0LCBpbmRpY2F0aW5nIHRoZSBwcmV2aW91cyBhbmQgY3VycmVu
dAogICAgIC8vIHRyYW5zYWN0aW9uIGF0IHRoZSB0aW1lIHRoYXQgdGhpcyBEb2NTaGVsbCBiZWdp
bnMgdG8gbG9hZAogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1QcmV2aW91c1RyYW5z
SW5kZXg7CiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUxvYWRlZFRyYW5zSW5kZXg7
CiAKKyAgICBQUlVpbnQzMiAgICAgICAgICAgICAgICAgICBtU2FuZGJveEZsYWdzOworCiAgICAg
Ym9vbCAgICAgICAgICAgICAgICAgICAgICAgbUNyZWF0ZWQ7CiAgICAgYm9vbCAgICAgICAgICAg
ICAgICAgICAgICAgbUFsbG93U3ViZnJhbWVzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAg
ICAgIG1BbGxvd1BsdWdpbnM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93
SmF2YXNjcmlwdDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dNZXRhUmVk
aXJlY3RzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ltYWdlczsKICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dETlNQcmVmZXRjaDsKICAgICBib29s
ICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dXaW5kb3dDb250cm9sOwpkaWZmIC0tZ2l0IGEv
ZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxs
LmlkbAotLS0gYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAorKysgYi9kb2NzaGVsbC9i
YXNlL25zSURvY1NoZWxsLmlkbApAQCAtNjcsMTcgKzY3LDE3IEBAIGludGVyZmFjZSBuc0lSZXF1
ZXN0OwogaW50ZXJmYWNlIG5zSVNIRW50cnk7CiBpbnRlcmZhY2UgbnNJTGF5b3V0SGlzdG9yeVN0
YXRlOwogaW50ZXJmYWNlIG5zSVNlY3VyZUJyb3dzZXJVSTsKIGludGVyZmFjZSBuc0lET01TdG9y
YWdlOwogaW50ZXJmYWNlIG5zSVByaW5jaXBhbDsKIGludGVyZmFjZSBuc0lXZWJCcm93c2VyUHJp
bnQ7CiBpbnRlcmZhY2UgbnNJVmFyaWFudDsKIAotW3NjcmlwdGFibGUsIHV1aWQoREJEMzlDMjEt
NTc4OC00QzY4LTlEOTctMEZDRUUyODlCQ0UxKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDliMjgzMzM3
LTA5N2QtNGZhOC1hMmRhLTkxNjMxOGVhZjgyOCldCiBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBu
c0lTdXBwb3J0cwogewogICAvKioKICAgICogTG9hZHMgYSBnaXZlbiBVUkkuICBUaGlzIHdpbGwg
Z2l2ZSBwcmlvcml0eSB0byBsb2FkaW5nIHRoZSByZXF1ZXN0ZWQgVVJJCiAgICAqIGluIHRoZSBv
YmplY3QgaW1wbGVtZW50aW5nCXRoaXMgaW50ZXJmYWNlLiAgSWYgaXQgY2FuJ3QgYmUgbG9hZGVk
IGhlcmUKICAgICogaG93ZXZlciwgdGhlIFVSTCBkaXNwYXRjaGVyIHdpbGwgZ28gdGhyb3VnaCBp
dHMgbm9ybWFsIHByb2Nlc3Mgb2YgY29udGVudAogICAgKiBsb2FkaW5nLgogICAgKgpAQCAtNjA5
LDkgKzYwOSwyMyBAQCBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogICAgKiB3
aGVuIGl0IGluaXRpYWxpemVzIHRoZSBkb2NzaGVsbC4KICAgICoKICAgICogSWYgc28sIHRoaXMg
ZG9jc2hlbGwgc2hvdWxkIGFjdCBsaWtlIGEgY2hyb21lL2NvbnRlbnQgYm91bmRhcnkgZm9yIHRo
ZQogICAgKiBwdXJwb3NlcyBvZiB3aW5kb3cudG9wIGFuZCB3aW5kb3cucGFyZW50LgogICAgKgog
ICAgKiBTZWUgYWxzbyBuc0lNb3pCcm93c2VyRnJhbWUuCiAgICAqLwogICBhdHRyaWJ1dGUgYm9v
bCBpc0Jyb3dzZXJGcmFtZTsKKworICAvKioKKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhl
IGRvY3NoZWxsLiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveAorICAgKiBh
dHRyaWJ1dGUgb2YgdGhlIGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250
ZW50LCBpZgorICAgKiBleGlzdGVudC4gU2VlIHRoZSBIVE1MNSBzcGVjIGZvciBtb3JlIGRldGFp
bHMuCisgICAqIFRoZXNlIGZsYWdzIG9uIHRoZSBkb2NzaGVsbCByZWZsZWN0IHRoZSBjdXJyZW50
IHN0YXRlIG9mIHRoZSBzYW5kYm94CisgICAqIGF0dHJpYnV0ZSwgd2hpY2ggaXMgbW9kaWZpYWJs
ZS4gVGhleSBhcmUgb25seSB1c2VkIHdoZW4gbG9hZGluZyBuZXcKKyAgICogY29udGVudCwgc2Fu
ZGJveCBmbGFncyBhcmUgYWxzbyBpbW11dGFibHkgc2V0IG9uIHRoZSBkb2N1bWVudCB3aGVuIGl0
IGlzCisgICAqIGxvYWRlZC4KKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mgb2YgYSBkb2N1bWVudCBk
ZXBlbmQgb24gdGhlIHNhbmRib3ggZmxhZ3Mgb24gaXRzCisgICAqIGRvY3NoZWxsIGFuZCBvZiBp
dHMgcGFyZW50IGRvY3VtZW50LCBpZiBhbnkuCisgICAqIFNlZSBuc1NhbmRib3hGbGFncy5oIGZv
ciB0aGUgcG9zc2libGUgZmxhZ3MuCisgICAqLworICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBz
YW5kYm94RmxhZ3M7CiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3Bw
IGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCi0tLSBhL2RvbS9iYXNlL25zR2xvYmFsV2lu
ZG93LmNwcAorKysgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKQEAgLTI1NiwxNiArMjU2
LDE3IEBACiAKICNpbmNsdWRlICJuc1JlZnJlc2hEcml2ZXIuaCIKICNpbmNsdWRlICJtb3pBdXRv
RG9jVXBkYXRlLmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL1RlbGVtZXRyeS5oIgogI2luY2x1ZGUg
Im5zTG9jYXRpb24uaCIKICNpbmNsdWRlICJuc1dyYXBwZXJDYWNoZUlubGluZXMuaCIKICNpbmNs
dWRlICJuc0RPTUV2ZW50VGFyZ2V0SGVscGVyLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3Mu
aCIKIAogI2lmZGVmIEFORFJPSUQKICNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgogI2VuZGlmCiAK
ICNpZmRlZiBQUl9MT0dHSU5HCiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnRE9NTGVha1BSTG9n
OwogI2VuZGlmCkBAIC04MzMwLDE2ICs4MzMxLDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRTZXNz
aW9uU3RvcmFnZShuc0lET00KICAgaWYgKCFtU2Vzc2lvblN0b3JhZ2UpIHsKICAgICAqYVNlc3Np
b25TdG9yYWdlID0gbnNudWxsOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYg
KG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVS
SSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9y
aWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2Uu
CisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX09SSUdJ
TikpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwog
ICAgIG5zcmVzdWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNlc3Npb25TdG9yYWdlRm9yUHJpbmNpcGFs
KHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudFVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1TZXNz
aW9uU3RvcmFnZSkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICNpZmRlZiBQ
Ul9MT0dHSU5HCiAgICAgaWYgKFBSX0xPR19URVNUKGdET01MZWFrUFJMb2csIFBSX0xPR19ERUJV
RykpIHsKQEAgLTgzOTEsMTYgKzgzOTgsMjIgQEAgbnNHbG9iYWxXaW5kb3c6OkdldExvY2FsU3Rv
cmFnZShuc0lET01TdAogICAgICAgZG9fR2V0U2VydmljZSgiQG1vemlsbGEub3JnL2RvbS9zdG9y
YWdlbWFuYWdlcjsxIiwgJnJ2KTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAg
ICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURv
Y3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYg
dGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRv
bid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYgKG1Eb2Mt
PlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVybiBOU19F
UlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIHJ2ID0gc3RvcmFnZU1hbmFnZXIt
PkdldExvY2FsU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50VVJJLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRk
UmVmcyhtTG9jYWxTdG9yYWdlKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAg
fQogCiAgIE5TX0FERFJFRigqYUxvY2FsU3RvcmFnZSA9IG1Mb2NhbFN0b3JhZ2UpOwogICByZXR1
cm4gTlNfT0s7CmRpZmYgLS1naXQgYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJh
bWVFbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1l
bnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQu
aWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRs
CkBAIC0zMyw0NCArMzMsNDYgQEAKICAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNp
b25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCiAgKiBhbmQgb3RoZXIg
cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90
IGRlbGV0ZQogICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91
ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgogICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2Yg
dGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBC
TE9DSyAqKioqKiAqLwogCiAjaW5jbHVkZSAibnNJRE9NSFRNTEVsZW1lbnQuaWRsIgorI2luY2x1
ZGUgIm5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0LmlkbCIKIAogLyoqCiAgKiBUaGUgbnNJRE9N
SFRNTElGcmFtZUVsZW1lbnQgaW50ZXJmYWNlIGlzIHRoZSBpbnRlcmZhY2UgdG8gYSBbWF1IVE1M
CiAgKiBpZnJhbWUgZWxlbWVudC4KICAqCiAgKiBUaGlzIGludGVyZmFjZSBpcyB0cnlpbmcgdG8g
Zm9sbG93IHRoZSBET00gTGV2ZWwgMiBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8vd3d3
LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1MLwogICoKICAqIHdpdGggY2hhbmdlcyBmcm9tIHRo
ZSB3b3JrLWluLXByb2dyZXNzIFdIQVRXRyBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8v
d3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLwogICovCiAKLVtzY3Jp
cHRhYmxlLCB1dWlkKDBlYWQ1YTVjLWU0ZDMtNGU0ZC04OGI4LTdjOWRjOWQyNjY1YyldCitbc2Ny
aXB0YWJsZSwgdXVpZCg1MmY2MjQ0Yi1iMWY1LTRmNGMtOGZmMy03ZTE0NjMxNmY0MTEpXQogaW50
ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDogbnNJRE9NSFRNTEVsZW1lbnQKIHsKICAg
ICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgYWxpZ247CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGZyYW1lQm9yZGVyOwogICAgICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nICAgICAgICBoZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgICAgICAgIGxvbmdEZXNjOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBtYXJnaW5IZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1h
cmdpbldpZHRoOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBuYW1lOwog
ICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzY3JvbGxpbmc7CiAgICAgICAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNyYzsKICAgICAgICAgICAgYXR0cmlidXRl
IERPTVN0cmluZyAgICAgICAgd2lkdGg7CiAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDI6
CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01Eb2N1bWVudCAgIGNvbnRlbnREb2N1bWVudDsK
ICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVdpbmRvdyAgICAgY29udGVudFdpbmRvdzsKIAor
ICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3Qgc2FuZGJveDsK
IAogICAvLyBNb3ppbGxhIGV4dGVuc2lvbnMKICAgLy8gaWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUg
dGhlIG1vekFsbG93RnVsbFNjcmVlbiBhdHRyaWJ1dGUgdG8gYmUgcHJlc2VudAogICAvLyBpZiB0
aGV5J3JlIHRvIGFsbG93IGNvbnRlbnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0byBnbyBpbnRvIERP
TSBmdWxsLXNjcmVlbgogICAvLyBtb2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL2lu
ZGV4LnBocD90aXRsZT1HZWNrbzpGdWxsU2NyZWVuQVBJCiAgICAgICAgICAgIGF0dHJpYnV0ZSBi
b29sZWFuICAgICAgICAgIG1vekFsbG93RnVsbFNjcmVlbjsKIH07CmRpZmYgLS1naXQgYS9kb20v
c3JjL2pzdXJsL01ha2VmaWxlLmluIGIvZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbgotLS0gYS9k
b20vc3JjL2pzdXJsL01ha2VmaWxlLmluCisrKyBiL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4K
QEAgLTU3LDE2ICs1NywxNyBAQCBYUElETFNSQ1MJPSBcCiBDUFBTUkNTCQk9IG5zSlNQcm90b2Nv
bEhhbmRsZXIuY3BwCiAKIEVYUE9SVFMJCT0gJChzcmNkaXIpL25zSlNQcm90b2NvbEhhbmRsZXIu
aAogCiBMT0NBTF9JTkNMVURFUyArPSBcCiAJCS1JJChzcmNkaXIpIFwKIAkJLUkkKHRvcHNyY2Rp
cikvZG9tL2Jhc2UgXAogCQktSSQodG9wc3JjZGlyKS9uZXR3ZXJrL2Jhc2Uvc3JjIFwKKwkJLUkk
KHRvcHNyY2RpcikvY29udGVudC9iYXNlL3NyYyBcCiAKIGlmZGVmIEJVSUxEX0RFQlVHX0dDCiBE
RUZJTkVTCQkrPSAtRERFQlVHX0dDCiBlbmRpZgogCiBESVJTICAgICAgICAgICAgPSAkKE5VTEwp
CiBURVNUX0RJUlMgKz0gdGVzdAogCmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL25zSlNQcm90
b2NvbEhhbmRsZXIuY3BwIGIvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcAot
LS0gYS9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwCisrKyBiL2RvbS9zcmMv
anN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAKQEAgLTc0LDE2ICs3NCwxNyBAQAogI2luY2x1
ZGUgIm5zVGhyZWFkVXRpbHMuaCIKICNpbmNsdWRlICJuc0lKU0NvbnRleHRTdGFjay5oIgogI2lu
Y2x1ZGUgIm5zSVNjcmlwdENoYW5uZWwuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIm5zSU9iamVjdElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0T3V0cHV0
U3RyZWFtLmgiCiAjaW5jbHVkZSAibnNJV3JpdGFibGVQcm9wZXJ0eUJhZzIuaCIKICNpbmNsdWRl
ICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5o
IgogCiBzdGF0aWMgTlNfREVGSU5FX0NJRChrSlNVUklDSUQsIE5TX0pTVVJJX0NJRCk7CiAKIGNs
YXNzIG5zSlNUaHVuayA6IHB1YmxpYyBuc0lJbnB1dFN0cmVhbQogewogcHVibGljOgogICAgIG5z
SlNUaHVuaygpOwogCkBAIC0yMjAsMTYgKzIyMSwyOCBAQCBuc3Jlc3VsdCBuc0pTVGh1bms6OkV2
YWx1YXRlU2NyaXB0KG5zSUNoCiAgICAgLy8gR2V0IHRoZSBnbG9iYWwgb2JqZWN0IHdlIHNob3Vs
ZCBiZSBydW5uaW5nIG9uLgogICAgIG5zSVNjcmlwdEdsb2JhbE9iamVjdCogZ2xvYmFsID0gR2V0
R2xvYmFsT2JqZWN0KGFDaGFubmVsKTsKICAgICBpZiAoIWdsb2JhbCkgewogICAgICAgICByZXR1
cm4gTlNfRVJST1JfRkFJTFVSRTsKICAgICB9CiAKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93
PiB3aW4oZG9fUXVlcnlJbnRlcmZhY2UoZ2xvYmFsKSk7CiAKKyAgICAvLyBTYW5kYm94ZWQgZG9j
dW1lbnQgY2hlY2s6IGphdmFzY3JpcHQ6IFVSSSdzIGFyZSBkaXNhYmxlZCAKKyAgICAvLyBpbiBh
IHNhbmRib3hlZCBkb2N1bWVudCB1bmxlc3MgJ2FsbG93LXNjcmlwdHMnIHdhcyBzcGVjaWZpZWQK
KworICAgIC8vIFJFVklFVyAtIGl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGlubmVyIHdpbmRv
dyB3b3VsZCBiZSB0aGUgb25lCisgICAgLy8gdGhhdCB3aWxsIGV4ZWN1dGUgdGhlIGphdmFzY3Jp
cHQgd2l0aCBpdHMgcHJpbmNpcGFsIC0gaXMgdGhpcyAKKyAgICAvLyBhc3N1bXB0aW9uIGNvcnJl
Y3QgPz8gKGFuZCBpcyBHZXRFeHRhbnREb2N1bWVudCgpIHRoZSByaWdodCB3YXkKKyAgICAvLyB0
byBnZXQgdGhlIHJpZ2h0IGRvY3VtZW50ID8/CisgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRv
YyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFPcmlnaW5hbElubmVyV2luZG93LT5HZXRFeHRhbnREb2N1
bWVudCgpKTsKKyAgICBpZiAoZG9jICYmIChkb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVE
X1NDUklQVFMpKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1JFVFZBTF9VTkRFRklORUQ7
CisgICAgfQorCiAgICAgLy8gUHVzaCBvdXIgcG9wdXAgY29udHJvbCBzdGF0ZQogICAgIG5zQXV0
b1BvcHVwU3RhdGVQdXNoZXIgcG9wdXBTdGF0ZVB1c2hlcih3aW4sIGFQb3B1cFN0YXRlKTsKIAog
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHRoZSBzYW1lIGlubmVyIHdpbmRvdyBhcyB3
ZSB1c2VkIHRvLgogICAgIG5zUElET01XaW5kb3cgKmlubmVyV2luID0gd2luLT5HZXRDdXJyZW50
SW5uZXJXaW5kb3coKTsKIAogICAgIGlmIChpbm5lcldpbiAhPSBhT3JpZ2luYWxJbm5lcldpbmRv
dykgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfVU5FWFBFQ1RFRDsKZGlmZiAtLWdpdCBhL2Vt
YmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluIGIvZW1iZWRk
aW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4KLS0tIGEvZW1iZWRk
aW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4KKysrIGIvZW1iZWRk
aW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4KQEAgLTU2LDExICs1
NiwxMiBAQCBDUFBTUkNTCQkrPSBuc0RpYWxvZ1BhcmFtQmxvY2suY3BwIFwKIAkJICAgJChOVUxM
KQogZW5kaWYKIAogIyB3ZSBkb24ndCB3YW50IHRoZSBzaGFyZWQgbGliLCBidXQgd2Ugd2FudCB0
byBmb3JjZSB0aGUgY3JlYXRpb24gb2YgYQogIyBzdGF0aWMgbGliLgogRk9SQ0VfU1RBVElDX0xJ
QiA9IDEKIAogIyBGb3IgbnNKU1V0aWxzCi1MT0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3JjZGly
KS9kb20vYmFzZQorTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UgXAor
CQkgIC1JJCh0b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9zcmMgXAogCiBpbmNsdWRlICQodG9wc3Jj
ZGlyKS9jb25maWcvcnVsZXMubWsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dp
bmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAgYi9lbWJlZGRpbmcvY29tcG9uZW50
cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCi0tLSBhL2VtYmVkZGluZy9j
b21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKKysrIGIvZW1i
ZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcApA
QCAtODYsMTYgKzg2LDE3IEBACiAjaW5jbHVkZSAibnNQSURPTVN0b3JhZ2UuaCIKICNpbmNsdWRl
ICJuc0lXaWRnZXQuaCIKICNpbmNsdWRlICJuc0ZvY3VzTWFuYWdlci5oIgogI2luY2x1ZGUgIm5z
SVByZXNTaGVsbC5oIgogI2luY2x1ZGUgIm5zUHJlc0NvbnRleHQuaCIKICNpbmNsdWRlICJuc0Nv
bnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zSVByZWZCcmFuY2guaCIKICNpbmNsdWRlICJuc0lQ
cmVmU2VydmljZS5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpZmRlZiBVU0VX
RUFLUkVGUwogI2luY2x1ZGUgIm5zSVdlYWtSZWZlcmVuY2UuaCIKICNlbmRpZgogCiB1c2luZyBu
YW1lc3BhY2UgbW96aWxsYTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNKU1N0YWNrQ29udHJhY3RJ
RD0iQG1vemlsbGEub3JnL2pzL3hwYy9Db250ZXh0U3RhY2s7MSI7CkBAIC02MDMsMTYgKzYwNCwz
MyBAQCBuc1dpbmRvd1dhdGNoZXI6Ok9wZW5XaW5kb3dKU0ludGVybmFsKG5zCiAgIH0KIAogICBp
ZiAoIW5ld0RvY1NoZWxsSXRlbSkgewogICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGVpdGhlciBvcGVu
IHVwIGEgbmV3IHdpbmRvdyBvdXJzZWx2ZXMgb3IgYXNrIGEKICAgICAvLyBuc0lXaW5kb3dQcm92
aWRlciBmb3Igb25lLiAgSW4gZWl0aGVyIGNhc2UsIHdlJ2xsIHdhbnQgdG8gc2V0IHRoZSByaWdo
dAogICAgIC8vIG5hbWUgb24gaXQuCiAgICAgd2luZG93TmVlZHNOYW1lID0gdHJ1ZTsKIAorICAg
IC8vIElmIHRoZSBwYXJlbnQgdHJ5aW5nIHRvIG9wZW4gYSBuZXcgd2luZG93IGlzIHNhbmRib3hl
ZCwKKyAgICAvLyB0aGlzIGlzIG5vdCBhbGxvd2VkIGFuZCB3ZSBmYWlsIGhlcmUuCisgICAgaWYg
KGFQYXJlbnQpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURPTURvY3VtZW50PiBkb21kb2M7CisgICAg
ICBhUGFyZW50LT5HZXREb2N1bWVudChnZXR0ZXJfQWRkUmVmcyhkb21kb2MpKTsKKyAgICAgIG5z
Q09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19RdWVyeUludGVyZmFjZShkb21kb2MpOworCisg
ICAgICBpZiAoZG9jKSB7CisgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgICAg
ICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisKKyAgICAgICAgaWYgKHNh
bmRib3hGbGFncyAmIFNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgcmV0dXJuIE5T
X0VSUk9SX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKICAgICAvLyBOb3cg
Y2hlY2sgd2hldGhlciBpdCdzIG9rIHRvIGFzayBhIHdpbmRvdyBwcm92aWRlciBmb3IgYSB3aW5k
b3cuICBEb24ndAogICAgIC8vIGRvIGl0IGlmIHdlJ3JlIG9wZW5pbmcgYSBkaWFsb2cgb3IgaWYg
b3VyIHBhcmVudCBpcyBhIGNocm9tZSB3aW5kb3cgb3IKICAgICAvLyBpZiB3ZSdyZSBvcGVuaW5n
IHNvbWV0aGluZyB0aGF0IGhhcyBtb2RhbCwgZGlhbG9nLCBvciBjaHJvbWUgZmxhZ3Mgc2V0Lgog
ICAgIG5zQ09NUHRyPG5zSURPTUNocm9tZVdpbmRvdz4gY2hyb21lV2luID0gZG9fUXVlcnlJbnRl
cmZhY2UoYVBhcmVudCk7CiAgICAgaWYgKCFhRGlhbG9nICYmICFjaHJvbWVXaW4gJiYKICAgICAg
ICAgIShjaHJvbWVGbGFncyAmIChuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfTU9EQUwgICAg
ICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hS
T01FX09QRU5BU19ESUFMT0cgfCAKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93
c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0NIUk9NRSkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>612372</attachid>
            <date>2012-04-04 15:34:37 -0700</date>
            <delta_ts>2012-04-10 17:22:10 -0700</delta_ts>
            <desc>WIP - iframe sandbox v9</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>56662</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYzNmZDA3NjhkNDZhYmRiNzdkMGU1MWQ0YmNi
NTJkNWFkZjRkMDQ0NQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtODQwLDE2ICs4NDAsMjcgQEAgcHVibGljOgogICAvKioKICAg
ICogR2V0IHRoZSBsb2NhbGl6ZWQgc3RyaW5nIG5hbWVkIHxhS2V5fCBpbiBwcm9wZXJ0aWVzIGZp
bGUgfGFGaWxlfC4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBHZXRMb2NhbGl6ZWRTdHJpbmco
UHJvcGVydGllc0ZpbGUgYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogYUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1hQSURMU3RyaW5nJiBhUmVzdWx0KTsKIAogICAvKioKKyAgICogQSBoZWxwZXIgZnVuY3Rp
b24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAg
ICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1
c2VkIGludGVybmFsbHkuCisgICAqCisgICAqIEBwYXJhbSBhQXR0cmlidXRlIAl0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisgICAqIEByZXR1cm4gCQkJdGhlIHNldCBvZiBmbGFn
cworICAgKi8KKyAgc3RhdGljIFBSVWludDMyIFBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Mo
Y29uc3QgbnNBU3RyaW5nJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNhbmRib3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBw
YXJhbWV0ZXJzIGdpdmVuKSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAg
ICogcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5z
cmVzdWx0IEZvcm1hdExvY2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQ
YXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIg
YVBhcmFtc0xlbmd0aCwKQEAgLTE5ODcsMzUgKzE5OTgsMzcgQEAgcHVibGljOgogICAgKiBmcm9t
IHRoZSBkb2N1bWVudCBpdCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVS
SUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAK
ICAgLyoqCiAgICAqIFNldCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUg
Z2l2ZW4gY2hhbm5lbCwgaWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2Yg
YUNoYW5uZWwuICBhUHJpbmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJv
dXRCbGFuayBpcyB0cnVlLCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmlu
Y2lwYWwgc2V0IHVwIG9uIGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBp
dC4gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9u
IHRoZSBjaGFubmVsLCBldmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAg
ICogZnJvbSB0aGUgY2hhbm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRo
ZSBwcmluY2lwYWwgd2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwu
CiAgICAqLwogICBzdGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFM
b2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFu
bmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBh
VVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0
QmxhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFi
b3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3du
ZXIgPSBmYWxzZSk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBh
QmluYXJ5RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNl
NjRTdHJpbmcpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFz
Y2lpU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRh
KTsKIAogICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IHBhc3Nl
ZCBpbiBwYXJhbWV0ZXIgaGFzIHRoZSBhdXRvY29tcGxldGUKLSAgICogZnVuY3Rpb25uYWxpdHkg
ZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9ybSBvd25lci4KKyAgICog
ZnVuY3Rpb25hbGl0eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3Jt
IG93bmVyLgogICAgKiBOT1RFOiB0aGUgY2FsbGVyIGhhcyB0byBtYWtlIHN1cmUgYXV0b2NvbXBs
ZXRlIG1ha2VzIHNlbnNlIGZvciB0aGUKICAgICogZWxlbWVudCdzIHR5cGUuCiAgICAqCiAgICAq
IEBwYXJhbSBhSW5wdXQgdGhlIGlucHV0IGVsZW1lbnQgdG8gY2hlY2suIE5PVEU6IGFJbnB1dCBj
YW4ndCBiZSBudWxsLgogICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgaGFz
IGF1dG9jb21wbGV0ZSBlbmFibGVkLgogICAgKi8KICAgc3RhdGljIGJvb2wgSXNBdXRvY29tcGxl
dGVFbmFibGVkKG5zSURPTUhUTUxJbnB1dEVsZW1lbnQqIGFJbnB1dCk7CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNJRG9jdW1lbnQuaAotLS0gYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysr
IGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCkBAIC0xMTksMTggKzExOSwxOCBA
QCBjbGFzcyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xhc3MgTGluazsKIGNsYXNzIEVs
ZW1lbnQ7CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNwYWNlIG1vemlsbGEKIAogI2Rl
ZmluZSBOU19JRE9DVU1FTlRfSUlEIFwKLXsgMHgyODNlYzI3ZCwgMHg1YjIzLCAweDQ5YjIsIFwN
Ci0gIHsgMHg5NCwgMHhkOSwgMHg5LCAweGI1LCAweGRiLCAweDQ1LCAweDMwLCAweDczIH0gfQ0K
K3sgMHg1N2ZlNDRhZSwgMHg2NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAw
eGE3LCAweDQzLCAweDI4LCAweGJlLCAweDg2IH0gfQogCiAKIC8vIEZsYWcgZm9yIEFkZFN0eWxl
U2hlZXQoKS4KICNkZWZpbmUgTlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFMT0cgICAgICAgICAgICAg
ICAgKDEgPDwgMCkKIAogLy8gRW51bSBmb3IgcmVxdWVzdGluZyBhIHBhcnRpY3VsYXIgdHlwZSBv
ZiBkb2N1bWVudCB3aGVuIGNyZWF0aW5nIGEgZG9jCiBlbnVtIERvY3VtZW50Rmxhdm9yIHsKICAg
RG9jdW1lbnRGbGF2b3JMZWdhY3lHdWVzcywgLy8gY29tcGF0IHdpdGggb2xkIGNvZGUgdW50aWwg
bWFkZSBIVE1MNS1jb21wbGlhbnQKQEAgLTQ1NSwxNyArNDU1LDI2IEBAIHB1YmxpYzoKICAgICog
Y2FsbGVycyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhY3Rpb24gYXMgbmVlZGVkIGlmIHRoZXkgd2Fu
dCB0aGlzCiAgICAqIGNoYW5nZSB0byBhY3R1YWxseSBjaGFuZ2UgYW55dGhpbmcgaW1tZWRpYXRl
bHkuCiAgICAqIEBzZWUgbnNCaWRpVXRpbHMuaAogICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9u
cyhQUlVpbnQzMiBhQmlkaU9wdGlvbnMpCiAgIHsKICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9w
dGlvbnM7CiAgIH0KLSAgCisKKyAgLyoqCisgICAqIEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3Ig
dGhpcyBkb2N1bWVudC4KKyAgICogQHNlZSBuc1NhbmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2li
bGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIFNhbmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAg
ICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAgfQorCiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBo
ZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxzbyBnZXQgc2V0IGZyb20gb3RoZXIKICAgICogc291cmNl
cywgbGlrZSBIVE1MIE1FVEEgdGFncykuCiAgICAqLwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVy
RGF0YShuc0lBdG9tKiBhSGVhZGVyRmllbGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsK
ICAgdmlydHVhbCB2b2lkIFNldEhlYWRlckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25z
dCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7CiAKICAgLyoqCkBAIC0xODEyLDE2ICsxODIxLDIxIEBA
IHByb3RlY3RlZDoKICAgLy8gSWYgbUlzU3RhdGljRG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFs
RG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBvcmlnaW5hbAogICAvLyBkb2N1bWVudC4KICAgbnNDT01Q
dHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5hbERvY3VtZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlv
bnMgZm9yIHRoaXMgZG9jdW1lbnQuICBXaGF0IHRoaXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8g
ZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5oCiAgIFBSVWludDMyIG1CaWRpT3B0aW9uczsKIAorICAv
LyBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9jdW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZh
bHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSBvZiB0aGUKKyAgLy8gYXNzb2NpYXRlZCBJRlJB
TUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNvbnRlbnQsIGlmIGV4aXN0ZW50LiBUaGVzZSBhcmUgc2V0
IGF0IGxvYWQgdGltZSBhbmQKKyAgLy8gYXJlIGltbXV0YWJsZSAtIHNlZSBuc1NhbmRib3hGbGFn
cy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MuCisgIFBSVWludDMyIG1TYW5kYm94RmxhZ3M7CisK
ICAgbnNDU3RyaW5nIG1Db250ZW50TGFuZ3VhZ2U7CiBwcml2YXRlOgogICBuc0NTdHJpbmcgbUNv
bnRlbnRUeXBlOwogcHJvdGVjdGVkOgogCiAgIC8vIFRoZSBkb2N1bWVudCdzIHNlY3VyaXR5IGlu
Zm8KICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IG1TZWN1cml0eUluZm87CiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwIGIvY29udGVudC9iYXNlL3NyYy9u
c0NvbnRlbnRVdGlscy5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5j
cHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKQEAgLTIwOCwxNiAr
MjA4LDE3IEBAIHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtYVEZTZXJ2aWNlQ0lELCBOU18KICNpbmNs
dWRlICJuc0NDVW5jb2xsZWN0YWJsZU1hcmtlci5oIgogI2luY2x1ZGUgIm1vemlsbGEvQmFzZTY0
LmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNlcy5oIgogCiAjaW5jbHVkZSAibnNXcmFw
cGVyQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAibnNJRE9NRG9jdW1lbnRUeXBlLmgiCiAjaW5j
bHVkZSAibnNJRE9NV2luZG93VXRpbHMuaCIKICNpbmNsdWRlICJuc0NoYXJTZXBhcmF0ZWRUb2tl
bml6ZXIuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBleHRlcm4gIkMiIGludCBN
T1pfWE1MVHJhbnNsYXRlRW50aXR5KGNvbnN0IGNoYXIqIHB0ciwgY29uc3QgY2hhciogZW5kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogbmV4dCwg
UFJVbmljaGFyKiByZXN1bHQpOwogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmxheWVyczsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjp3
aWRnZXQ7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKQEAgLTkxNSwxNiArOTE2LDYyIEBAIG5z
Q29udGVudFV0aWxzOjpHZXRQYXJzZXJTZXJ2aWNlKCkKICAgICBuc3Jlc3VsdCBydiA9IENhbGxH
ZXRTZXJ2aWNlKGtQYXJzZXJTZXJ2aWNlQ0lELCAmc1BhcnNlclNlcnZpY2UpOwogICAgIGlmIChO
U19GQUlMRUQocnYpKSB7CiAgICAgICBzUGFyc2VyU2VydmljZSA9IG5zbnVsbDsKICAgICB9CiAg
IH0KIAogICByZXR1cm4gc1BhcnNlclNlcnZpY2U7CiB9CisvKioKKyAqIEEgaGVscGVyIGZ1bmN0
aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJveCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisg
KiBhIENTUCBkaXJlY3RpdmUpIGFuZCBjb252ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVz
ZWQgaW50ZXJuYWxseS4KKyAqCisgKiBAcGFyYW0gYUF0dHJpYnV0ZSAgICB0aGUgdmFsdWUgb2Yg
dGhlIHNhbmRib3ggYXR0cmlidXRlCisgKiBAcmV0dXJuICAgICAgICAgICAgICB0aGUgc2V0IG9m
IGZsYWdzCisgKi8KK1BSVWludDMyCituc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmli
dXRlVG9GbGFncyhjb25zdCBuc0FTdHJpbmcmIHNhbmRib3hBdHRyVmFsdWUpCit7CisgIC8vIElm
IHRoZXJlJ3MgYSBzYW5kYm94IGF0dHJpYnV0ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBpZiB0aGlz
IGlzIGJlaW5nCisgIC8vIGNhbGxlZCksIHN0YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0aGUgcmVz
dHJpY3Rpb24gZmxhZ3MuCisgIFBSVWludDMyIG91dCA9IFNBTkRCT1hFRF9OQVZJR0FUSU9OIHwK
KyAgICBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiB8CisgICAgU0FOREJPWEVEX1BMVUdJ
TlMgfCBTQU5EQk9YRURfT1JJR0lOIHwKKyAgICBTQU5EQk9YRURfRk9STVMgfCBTQU5EQk9YRURf
U0NSSVBUUyB8CisgICAgU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUzsKKworICBpZiAoIXNh
bmRib3hBdHRyVmFsdWUuSXNFbXB0eSgpKSB7CisgICAgLy8gVGhlIHNlcGFyYXRvciBvcHRpb25h
bCBmbGFnIGlzIHVzZWQgYmVjYXVzZSB0aGUgSFRNTDUgc3BlYyBzYXlzIGFueQorICAgIC8vIHdo
aXRlc3BhY2UgaXMgb2sgYXMgYSBzZXBhcmF0b3IsIHdoaWNoIGlzIHdoYXQgdGhpcyBkb2VzLgor
ICAgIEhUTUxTcGxpdE9uU3BhY2VzVG9rZW5pemVyIHRva2VuaXplcihzYW5kYm94QXR0clZhbHVl
LCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXJUZW1wbGF0ZTxuc0NvbnRlbnRV
dGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9PUFRJT05BTCk7CisKKyAgICB3aGls
ZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAgICAgbnNEZXBlbmRlbnRTdWJzdHJp
bmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKyAgICAgIGlmICh0b2tlbi5Mb3dl
ckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRzIikpIHsKKyAgICAgICAgb3V0ICY9IH5T
QU5EQk9YRURfU0NSSVBUUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxz
TGl0ZXJhbCgiYWxsb3ctc2FtZS1vcmlnaW4iKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hF
RF9PUklHSU47CisgICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwo
ImFsbG93LWZvcm1zIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfRk9STVM7CisgICAg
ICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNjcmlwdHMi
KSkgeworICAgICAgICAvLyBhbGxvdy1zY3JpcHRzIHJlbW92ZXMgYm90aCBTQU5EQk9YRURfU0NS
SVBUUyBhbmQKKyAgICAgICAgLy8gU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUy4KKyAgICAg
ICAgb3V0ICY9IH5TQU5EQk9YRURfU0NSSVBUUzsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURf
QVVUT01BVElDX0ZFQVRVUkVTOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVh
bHNMaXRlcmFsKCJhbGxvdy10b3AtbmF2aWdhdGlvbiIpKSB7CisgICAgICAgIG91dCAmPSB+U0FO
REJPWEVEX1RPUExFVkVMX05BVklHQVRJT047CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0
dXJuIG91dDsKK30KIAogI2lmZGVmIE1PWl9YVEYKIG5zSVhURlNlcnZpY2UqCiBuc0NvbnRlbnRV
dGlsczo6R2V0WFRGU2VydmljZSgpCiB7CiAgIGlmICghc1hURlNlcnZpY2UpIHsKICAgICBuc3Jl
c3VsdCBydiA9IENhbGxHZXRTZXJ2aWNlKGtYVEZTZXJ2aWNlQ0lELCAmc1hURlNlcnZpY2UpOwog
ICAgIGlmIChOU19GQUlMRUQocnYpKSB7CkBAIC02NDUwLDE3ICs2NDk3LDE4IEBAIG5zQ29udGVu
dFV0aWxzOjpVUklJbmhlcml0c1NlY3VyaXR5Q29udGUKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYVJlc3VsdCk7CiB9CiAKIC8vIHN0YXRpYwogYm9vbAogbnNDb250ZW50VXRpbHM6OlNl
dFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lcikKIHsKICAgLy8KICAg
Ly8gU2V0IHRoZSBvd25lciBvZiB0aGUgY2hhbm5lbCwgYnV0IG9ubHkgZm9yIGNoYW5uZWxzIHRo
YXQgY2FuJ3QKICAgLy8gcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dC4KICAgLy8K
ICAgLy8gWFhYOiBJdCBzZWVtcyB3cm9uZyB0aGF0IHRoZSBvd25lciBpcyBpZ25vcmVkIC0gZXZl
biBpZiBvbmUgaXMKICAgLy8gICAgICBzdXBwbGllZCkgdW5sZXNzIHRoZSBVUkkgaXMgamF2YXNj
cmlwdCBvciBkYXRhIG9yIGFib3V0OmJsYW5rLgogICAvLyBYWFg6IElmIHRoaXMgaXMgZXZlciBj
aGFuZ2VkLCBjaGVjayBhbGwgY2FsbGVycyBmb3Igd2hhdCBvd25lcnMKQEAgLTY0NjgsMjMgKzY1
MTYsMjcgQEAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaQogICAvLyAg
ICAgIGNvbW1lbnRzIGluIG5zRG9jU2hlbGw6OkxvYWRVUkkgd2hlcmUgd2UgZmFsbCBiYWNrIG9u
CiAgIC8vICAgICAgaW5oZXJpdGluZyB0aGUgb3duZXIgaWYgY2FsbGVkIGZyb20gY2hyb21lLiAg
VGhhdCB3b3VsZCBiZQogICAvLyAgICAgIHZlcnkgd3JvbmcgaWYgdGhpcyBjb2RlIGNoYW5nZWQg
YW55dGhpbmcgYnV0IGNoYW5uZWxzIHRoYXQKICAgLy8gICAgICBjYW4ndCBwcm92aWRlIHRoZWly
IG93biBzZWN1cml0eSBjb250ZXh0IQogICAvLwogICAvLyAgICAgIChDdXJyZW50bHkgY2hyb21l
IFVSSXMgc2V0IHRoZSBvd25lciB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQhCiAgIC8vICAgICAgU28g
c2V0dGluZyBhIE5VTEwgb3duZXIgd291bGQgYmUgYmFkISkKICAgLy8KKyAgLy8gSWYgYUZvcmNl
T3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyIHdpbGwgYmUgc2V0LCBldmVuIGZvciBhIGNoYW5uZWwg
dGhhdAorICAvLyBjYW4gcHJvdmlkZSBpdHMgb3duIHNlY3VyaXR5IGNvbnRleHQuIFRoaXMgaXMg
dXNlZCBmb3IgdGhlIEhUTUw1IElGUkFNRQorICAvLyBzYW5kYm94IGF0dHJpYnV0ZSwgc28gd2Ug
Y2FuIGZvcmNlIHRoZSBjaGFubmVsIChhbmQgaXRzIGRvY3VtZW50KSB0bworICAvLyBleHBsaWNp
dGx5IGhhdmUgYSBudWxsIHByaW5jaXBhbC4KICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBl
Y3QgVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAg
IC8vIGFib3V0OmJsYW5rIFVSSSwgc28gZG9uJ3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0
aGlzIGNhbGwgZmFpbHMuCiAgIC8vIFRoaXMgY29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBv
bmUgaW4gbnNEb2NTaGVsbDo6SW50ZXJuYWxMb2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5n
IGZvciB0aGluZ3MgdGhhdCB3aWxsIHVzZSB0aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQo
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGlu
aGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkp
IHsKKyAgaWYgKGFGb3JjZU93bmVyIHx8ICgoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZXh0KGFVUkksICZpbmhlcml0KSkgJiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBG
b3JBYm91dEJsYW5rICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSkpIHsKICAgICBhQ2hhbm5l
bC0+U2V0T3duZXIoYUxvYWRpbmdQcmluY2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAK
ICAgLy8KICAgLy8gZmlsZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMg
aXMgYSBmaWxlOiBsb2FkIG9wZW5lZCBmcm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVl
ZApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50
LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0yMzk2LDE2ICsy
Mzk2LDI1IEBAIG5zRG9jdW1lbnQ6OlN0YXJ0RG9jdW1lbnRMb2FkKGNvbnN0IGNoYXIKICAgICBG
aW5kQ2hhckluUmVhZGFibGUoJzsnLCBzZW1pY29sb24sIGVuZCk7CiAgICAgU2V0Q29udGVudFR5
cGVJbnRlcm5hbChTdWJzdHJpbmcoc3RhcnQsIHNlbWljb2xvbikpOwogICB9CiAKICAgUmV0cmll
dmVSZWxldmFudEhlYWRlcnMoYUNoYW5uZWwpOwogCiAgIG1DaGFubmVsID0gYUNoYW5uZWw7CiAK
KyAgLy8gSWYgdGhpcyBkb2N1bWVudCBpcyBiZWluZyBsb2FkZWQgYnkgYSBkb2NzaGVsbCwgY29w
eSBpdHMgc2FuZGJveCBmbGFncworICAvLyB0byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11
dGFibGUgYWZ0ZXIgYmVpbmcgc2V0IGhlcmUuCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NT
aGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFDb250YWluZXIpOworCisgIGlmIChkb2NTaGVsbCkg
eworICAgIG5zcmVzdWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNhbmRib3hGbGFncygmbVNhbmRib3hG
bGFncyk7CisgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKyAgfQorCiAgIG5zcmVzdWx0
IHJ2ID0gSW5pdENTUCgpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIHJldHVy
biBOU19PSzsKIH0KIAogbnNyZXN1bHQKIG5zRG9jdW1lbnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMv
bnNGcmFtZUxvYWRlci5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNw
cAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCkBAIC0xMTIsMTYgKzEx
MiwxOSBAQAogI2luY2x1ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96
aWxsYS9QcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIm1vemlsbGEvdW51c2VkLmgiCiAjaW5jbHVk
ZSAibW96aWxsYS9kb20vRWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvbGF5b3V0L1JlbmRl
ckZyYW1lUGFyZW50LmgiCiAKICNpbmNsdWRlICJqc2FwaS5oIgogCisjaW5jbHVkZSAibnNIVE1M
SUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCisKIHVzaW5nIG5h
bWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5h
bWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5b3V0
OwogdHlwZWRlZiBGcmFtZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7CiAKIGNsYXNzIG5zQXN5bmNE
b2NTaGVsbERlc3Ryb3llciA6IHB1YmxpYyBuc1J1bm5hYmxlCiB7CkBAIC00NjgsMTYgKzQ3MSw2
MCBAQCBuc0ZyYW1lTG9hZGVyOjpSZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3Qg
dG8gYmUgc2FmZSwgcmVjaGVjayB1cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQp
OwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
TG9hZEluZm8+IGxvYWRJbmZvOwogICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9B
ZGRSZWZzKGxvYWRJbmZvKSk7CiAgIE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9G
QUlMVVJFKTsKIAorICAvLyBJcyB0aGlzIGFuIDxpZnJhbWU+IHdpdGggYSBzYW5kYm94IGF0dHJp
YnV0ZSBvciBhIHBhcmVudCB3aGljaCBpcworICAvLyBzYW5kYm94ZWQgPworICBuc0hUTUxJRnJh
bWVFbGVtZW50ICogaWZyYW1lID0KKyAgICBuc0hUTUxJRnJhbWVFbGVtZW50OjpGcm9tQ29udGVu
dChtT3duZXJDb250ZW50KTsKKworICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworCisgIGlm
IChpZnJhbWUpIHsKKyAgICBzYW5kYm94RmxhZ3MgPSBpZnJhbWUtPkdldFNhbmRib3hGbGFncygp
OworCisgICAgUFJVaW50MzIgcGFyZW50U2FuZGJveEZsYWdzID0gMDsKKworICAgIC8vIEdldCB0
aGUgcGFyZW50J3Mgc2FuZGJveCBmbGFncywgdGhleSdyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlm
IHRoZQorICAgIC8vIGZyYW1lIGJlaW5nIGxvYWRlZCBuZWVkcyB0byBiZSBzYW5kYm94ZWQuCisg
ICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50RG9jU2hlbGxJdGVtOworICAg
IG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IGN1ckRvY1NoZWxsSXRlbSA9IGRvX1F1ZXJ5
SW50ZXJmYWNlKG1Eb2NTaGVsbCk7CisKKyAgICBpZiAoTlNfU1VDQ0VFREVEKGN1ckRvY1NoZWxs
SXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudERvY1NoZWxsSXRlbSkpKSkgewor
ICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IHBhcmVudERvYyA9IGRvX0dldEludGVyZmFjZShw
YXJlbnREb2NTaGVsbEl0ZW0pOworCisgICAgICBpZiAocGFyZW50RG9jKSB7CisgICAgICAgIHBh
cmVudFNhbmRib3hGbGFncyA9IHBhcmVudERvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHNhbmRib3hGbGFncyB8fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAg
ICAgIGlmIChwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgICAgLy8gVGhlIGNoaWxkIGNhbiBv
bmx5IGFkZCByZXN0cmljdGlvbnMsIG5vdCByZW1vdmUgdGhlbS4KKyAgICAgICAgc2FuZGJveEZs
YWdzIHw9IHBhcmVudFNhbmRib3hGbGFnczsKKyAgICAgIH0KKworICAgICAgbURvY1NoZWxsLT5T
ZXRTYW5kYm94RmxhZ3Moc2FuZGJveEZsYWdzKTsKKworICAgICAgLy8gU2V0IHVwIHRoZSBhY3R1
YWwgc2FuZGJveGluZyBmb3IgcGx1Z2lucyBhcyBzcGVjaWZpZWQuCisgICAgICBpZiAoc2FuZGJv
eEZsYWdzICYgU0FOREJPWEVEX1BMVUdJTlMpIHsKKyAgICAgICAgbURvY1NoZWxsLT5TZXRBbGxv
d1BsdWdpbnMoZmFsc2UpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIElmIHRoaXMgaXMg
YW4gPGlmcmFtZT4gYW5kIGl0J3Mgc2FuZGJveGVkIHdpdGggcmVzcGVjdCB0byBvcmlnaW4KKyAg
Ly8gd2Ugd2lsbCBzZXQgaXQgdXAgd2l0aCBhIG51bGwgcHJpbmNpcGFsIGxhdGVyIGluIG5zRG9j
U2hlbGw6OkRvVVJJTG9hZC4KKyAgLy8gV2UgZG8gaXQgdGhlcmUgdG8gY29ycmVjdGx5IHNhbmRi
b3ggY29udGVudCB0aGF0IHdhcyBsb2FkZWQgaW50bworICAvLyB0aGUgaWZyYW1lIHZpYSBvdGhl
ciBtZXRob2RzIHRoYW4gdGhlIHNyYyBhdHRyaWJ1dGUuCiAgIC8vIFdlJ2xsIHVzZSBvdXIgcHJp
bmNpcGFsLCBub3QgdGhhdCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRoaXMK
ICAgLy8gaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tzIG9u
IGRvY3VtZW50cyBsb2FkZWQgaW4KICAgLy8gc3ViZnJhbWVzIQogICBsb2FkSW5mby0+U2V0T3du
ZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKIAogICBuc0NPTVB0cjxuc0lVUkk+
IHJlZmVycmVyOwogICBydiA9IG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0VVJJ
KGdldHRlcl9BZGRSZWZzKHJlZmVycmVyKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7
CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oIGIvY29udGVudC9i
YXNlL3NyYy9uc0drQXRvbUxpc3QuaAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlz
dC5oCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKQEAgLTkzLDE3ICs5Mywy
MSBAQCBHS19BVE9NKGFjdHVhdGUsICJhY3R1YXRlIikKIEdLX0FUT00oYWRkcmVzcywgImFkZHJl
c3MiKQogR0tfQVRPTShhZnRlciwgImFmdGVyIikKIEdLX0FUT00oYWZ0ZXJfZW5kLCAiYWZ0ZXJf
ZW5kIikKIEdLX0FUT00oYWZ0ZXJfc3RhcnQsICJhZnRlcl9zdGFydCIpCiBHS19BVE9NKGFsaWdu
LCAiYWxpZ24iKQogR0tfQVRPTShhbGluaywgImFsaW5rIikKIEdLX0FUT00oYWxsLCAiYWxsIikK
IEdLX0FUT00oYWxsb3dldmVudHMsICJhbGxvd2V2ZW50cyIpCitHS19BVE9NKGFsbG93Zm9ybXMs
ICJhbGxvdy1mb3JtcyIpCiBHS19BVE9NKGFsbG93bmVnYXRpdmVhc3NlcnRpb25zLCAiYWxsb3du
ZWdhdGl2ZWFzc2VydGlvbnMiKQorR0tfQVRPTShhbGxvd3NhbWVvcmlnaW4sICJhbGxvdy1zYW1l
LW9yaWdpbiIpCitHS19BVE9NKGFsbG93c2NyaXB0cywgImFsbG93LXNjcmlwdHMiKQorR0tfQVRP
TShhbGxvd3RvcG5hdmlnYXRpb24sICJhbGxvdy10b3AtbmF2aWdhdGlvbiIpCiBHS19BVE9NKGFs
bG93dW50cnVzdGVkLCAiYWxsb3d1bnRydXN0ZWQiKQogR0tfQVRPTShhbHQsICJhbHQiKQogR0tf
QVRPTShhbHRlcm5hdGUsICJhbHRlcm5hdGUiKQogR0tfQVRPTShhbHdheXMsICJhbHdheXMiKQog
R0tfQVRPTShhbmNlc3RvciwgImFuY2VzdG9yIikKIEdLX0FUT00oYW5jZXN0b3JPclNlbGYsICJh
bmNlc3Rvci1vci1zZWxmIikKIEdLX0FUT00oX2FuZCwgImFuZCIpCiBHS19BVE9NKGFueSwgImFu
eSIpCkBAIC04NzcsMTYgKzg4MSwxNyBAQCBHS19BVE9NKHJvd3NwYW4sICJyb3dzcGFuIikKIEdL
X0FUT00ocnAsICJycCIpCiBHS19BVE9NKHJ0LCAicnQiKQogR0tfQVRPTShydGwsICJydGwiKQog
R0tfQVRPTShydWJ5LCAicnVieSIpCiBHS19BVE9NKHJ1bGUsICJydWxlIikKIEdLX0FUT00ocnVs
ZXMsICJydWxlcyIpCiBHS19BVE9NKHMsICJzIikKIEdLX0FUT00oc2FtcCwgInNhbXAiKQorR0tf
QVRPTShzYW5kYm94LCAic2FuZGJveCIpCiBHS19BVE9NKHNiYXR0ciwgInNiYXR0ciIpCiBHS19B
VE9NKHNjYWxlLCAic2NhbGUiKQogR0tfQVRPTShzY2FuLCAic2NhbiIpCiBHS19BVE9NKHNjaGVt
ZSwgInNjaGVtZSIpCiBHS19BVE9NKHNjb3BlLCAic2NvcGUiKQogR0tfQVRPTShzY29wZWQsICJz
Y29wZWQiKQogR0tfQVRPTShzY3JlZW4sICJzY3JlZW4iKQogR0tfQVRPTShzY3JlZW5YLCAic2Ny
ZWVuWCIpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmggYi9j
b250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmgKQEAgLTAs
MCArMSw1OCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1t
b2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLw0KKy8qIFRoaXMgU291cmNlIENvZGUg
Rm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMNCisgKiBM
aWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQg
d2l0aCB0aGlzIGZpbGUsDQorICogWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxh
Lm9yZy9NUEwvMi4wLy4gKi8NCisNCisvKg0KKyAqIENvbnN0YW50IGZsYWdzIHRoYXQgZGVzY3Jp
YmUgaG93IGEgZG9jdW1lbnQgaXMgc2FuZGJveGVkIGFjY29yZGluZyB0byB0aGUNCisgKiBIVE1M
NSBzcGVjLg0KKyAqLw0KKw0KKyNpZm5kZWYgbnNTYW5kYm94RmxhZ3NfaF9fXw0KKyNkZWZpbmUg
bnNTYW5kYm94RmxhZ3NfaF9fXw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250
ZW50IGZyb20gbmF2aWdhdGluZyBicm93c2luZyBjb250ZXh0cyBvdGhlciB0aGFuDQorICogdGhl
IHNhbmRib3hlZCBicm93c2luZyBjb250ZXh0IGl0c2VsZiAob3IgYnJvd3NpbmcgY29udGV4dHMg
ZnVydGhlcg0KKyAqIG5lc3RlZCBpbnNpZGUgaXQpLCBhbmQgdGhlIHRvcC1sZXZlbCBicm93c2lu
ZyBjb250ZXh0Lg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX05BVklHQVRJ
T04gID0gMHgxOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20g
bmF2aWdhdGluZyB0aGVpciB0b3AtbGV2ZWwgYnJvd3NpbmcNCisgKiBjb250ZXh0Lg0KKyAqLw0K
K2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gPSAweDI7
DQorDQorLyoqDQorICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBpbnN0YW50aWF0
aW5nIHBsdWdpbnMsIHdoZXRoZXIgdXNpbmcgdGhlDQorICogZW1iZWQgZWxlbWVudCwgdGhlIG9i
amVjdCBlbGVtZW50LCB0aGUgYXBwbGV0IGVsZW1lbnQsIG9yIHRocm91Z2gNCisgKiBuYXZpZ2F0
aW9uIG9mIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIHVubGVzcyB0aG9zZSBwbHVnaW5zIGNh
biBiZQ0KKyAqIHNlY3VyZWQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURf
UExVR0lOUyA9IDB4NDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgZm9yY2VzIGNvbnRlbnQgaW50
byBhIHVuaXF1ZSBvcmlnaW4sIHRodXMgcHJldmVudGluZyBpdCBmcm9tDQorICogYWNjZXNzaW5n
IG90aGVyIGNvbnRlbnQgZnJvbSB0aGUgc2FtZSBvcmlnaW4uDQorICogVGhpcyBmbGFnIGFsc28g
cHJldmVudHMgc2NyaXB0IGZyb20gcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gdGhlDQorICog
ZG9jdW1lbnQuY29va2llIElETCBhdHRyaWJ1dGUsIGFuZCBibG9ja3MgYWNjZXNzIHRvIGxvY2Fs
U3RvcmFnZS4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9PUklHSU4gPSAw
eDg7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBmb3JtIHN1Ym1pc3Npb24uDQorICov
DQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfRk9STVMgPSAweDEwOw0KKw0KKy8qKg0K
KyAqIFRoaXMgZmxhZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlvbi4NCisgKi8NCitjb25zdCB1bnNp
Z25lZCBsb25nIFNBTkRCT1hFRF9TQ1JJUFRTID0gMHgyMDsNCisNCisvKioNCisgKiBUaGlzIGZs
YWcgYmxvY2tzIGZlYXR1cmVzIHRoYXQgdHJpZ2dlciBhdXRvbWF0aWNhbGx5LCBzdWNoIGFzDQor
ICogYXV0b21hdGljYWxseSBwbGF5aW5nIGEgdmlkZW8gb3IgYXV0b21hdGljYWxseSBmb2N1c2lu
ZyBhIGZvcm0gY29udHJvbC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9B
VVRPTUFUSUNfRkVBVFVSRVMgPSAweDQwOw0KKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwIGIv
Y29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAKLS0tIGEvY29udGVudC9iYXNlL3Ny
Yy9uc1NjcmlwdExvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRl
ci5jcHAKQEAgLTcwLDE2ICs3MCwxNyBAQAogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBv
bGljeS5oIgogI2luY2x1ZGUgInBybG9nLmgiCiAjaW5jbHVkZSAibnNJQ2hhbm5lbFBvbGljeS5o
IgogI2luY2x1ZGUgIm5zQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1ZGUgIm5zQ1JULmgiCiAjaW5j
bHVkZSAibnNDb250ZW50Q3JlYXRvckZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIm5zR2VuZXJpY0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJuc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRl
ICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9GdW5jdGlvblRpbWVyLmgi
CiAjaW5jbHVkZSAibW96aWxsYS9DT1JTTW9kZS5oIgogCiAjaWZkZWYgUFJfTE9HR0lORwogc3Rh
dGljIFBSTG9nTW9kdWxlSW5mbyogZ0NzcFBSTG9nOwogI2VuZGlmCiAKQEAgLTMwNSwxNiArMzA2
LDIyIEBAIG5zU2NyaXB0TG9hZGVyOjpTdGFydExvYWQobnNTY3JpcHRMb2FkUmUKICAgaWYgKCF3
aW5kb3cpIHsKICAgICByZXR1cm4gTlNfRVJST1JfTlVMTF9QT0lOVEVSOwogICB9CiAKICAgbnNJ
RG9jU2hlbGwgKmRvY3NoZWxsID0gd2luZG93LT5HZXREb2NTaGVsbCgpOwogCiAgIG5zQ09NUHRy
PG5zSUludGVyZmFjZVJlcXVlc3Rvcj4gcHJvbXB0ZXIoZG9fUXVlcnlJbnRlcmZhY2UoZG9jc2hl
bGwpKTsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlzIHNhbmRib3hlZCB3aXRob3V0ICdhbGxv
dy1zY3JpcHRzJywgYWJvcnQuCisgIGlmIChtRG9jdW1lbnQtPlNhbmRib3hGbGFncygpICYgU0FO
REJPWEVEX1NDUklQVFMpIHsgCisgICAgLy8gUkVWSUVXIDogdGhpcyBwcm9iYWJseSBpc24ndCB0
aGUgcmlnaHQgZXJyb3IuLgorICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOwor
ICB9CisKICAgLy8gY2hlY2sgZm9yIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdG8gcGFzcyBk
b3duIHRvIHRoZSBjaGFubmVsCiAgIC8vIHRoYXQgd2lsbCBiZSBjcmVhdGVkIHRvIGxvYWQgdGhl
IHNjcmlwdAogICBuc0NPTVB0cjxuc0lDaGFubmVsUG9saWN5PiBjaGFubmVsUG9saWN5OwogICBu
c0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgcnYgPSBtRG9jdW1lbnQt
Pk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogICBpZiAoY3NwKSB7CiAgICAgY2hhbm5lbFBvbGljeSA9IGRv
X0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnNjaGFubmVscG9saWN5OzEiKTsKQEAgLTY3
NywxNiArNjg0LDIxIEBAIG5zU2NyaXB0TG9hZGVyOjpQcm9jZXNzU2NyaXB0RWxlbWVudChuc0kK
ICAgICAgICAgIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwYXJzZXItYmxvY2tpbmcgc2NyaXB0IGF0
IGEgdGltZSIpOwogICAgIE5TX0FTU0VSVElPTihtWFNMVFJlcXVlc3RzLklzRW1wdHkoKSwKICAg
ICAgICAgIlBhcnNlci1ibG9ja2luZyBzY3JpcHRzIGFuZCBYU0xUIHNjcmlwdHMgaW4gdGhlIHNh
bWUgZG9jISIpOwogICAgIG1QYXJzZXJCbG9ja2luZ1JlcXVlc3QgPSByZXF1ZXN0OwogICAgIHJl
dHVybiB0cnVlOwogICB9CiAKICAgLy8gaW5saW5lIHNjcmlwdAorICAvLyBJcyB0aGlzIGRvY3Vt
ZW50IHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJz8KKyAgaWYgKG1Eb2N1bWVudC0+
U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgIHJldHVybiBmYWxzZTsK
KyAgfQorCiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3NwOwogICBydiA9
IG1Eb2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7
CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBmYWxzZSk7CiAKICAgaWYgKGNzcCkgewogICAgIFBS
X0xPRyhnQ3NwUFJMb2csIFBSX0xPR19ERUJVRywgKCJOZXcgU2NyaXB0TG9hZGVyIGkgKioqKndp
dGggQ1NQKioqKiIpKTsKICAgICBib29sIGlubGluZU9LOwogICAgIHJ2ID0gY3NwLT5HZXRBbGxv
d3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvZXZlbnRzL3Ny
Yy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcCBiL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50
TGlzdGVuZXJNYW5hZ2VyLmNwcAotLS0gYS9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3Rl
bmVyTWFuYWdlci5jcHAKKysrIGIvY29udGVudC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1h
bmFnZXIuY3BwCkBAIC04NCwxNiArODQsMTcgQEAKICNpbmNsdWRlICJuc0RPTVNjcmlwdE9iamVj
dEhvbGRlci5oIgogI2luY2x1ZGUgIm5zRGF0YUhhc2h0YWJsZS5oIgogI2luY2x1ZGUgIm5zQ09N
QXJyYXkuaCIKICNpbmNsdWRlICJuc0V2ZW50TGlzdGVuZXJTZXJ2aWNlLmgiCiAjaW5jbHVkZSAi
bnNJQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAibnNKU0Vudmlyb25tZW50Lmgi
CiAjaW5jbHVkZSAieHBjcHVibGljLmgiCiAjaW5jbHVkZSAic2FtcGxlci5oIgorI2luY2x1ZGUg
Im5zU2FuZGJveEZsYWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiB1c2lu
ZyBuYW1lc3BhY2UgbW96aWxsYTo6aGFsOwogCiAjZGVmaW5lIEVWRU5UX1RZUEVfRVFVQUxTKCBs
cywgdHlwZSwgdXNlclR5cGUgKSBcCiAgIChscy0+bUV2ZW50VHlwZSA9PSB0eXBlICYmIFwKICAg
KGxzLT5tRXZlbnRUeXBlICE9IE5TX1VTRVJfREVGSU5FRF9FVkVOVCB8fCBscy0+bVR5cGVBdG9t
ID09IHVzZXJUeXBlKSkKIApAQCAtNTExLDE2ICs1MTIsMjIgQEAgbnNFdmVudExpc3RlbmVyTWFu
YWdlcjo6QWRkU2NyaXB0RXZlbnRMaQogICAgIC8vIGxvYWRlZCBhcyBkYXRhLgogICAgIHJldHVy
biBOU19PSzsKICAgfQogCiAgIG5zcmVzdWx0IHJ2ID0gTlNfT0s7CiAgIC8vIHJldHVybiBlYXJs
eSBwcmV2ZW50aW5nIHRoZSBldmVudCBsaXN0ZW5lciBmcm9tIGJlaW5nIGFkZGVkCiAgIC8vICdk
b2MnIGlzIGZldGNoZWQgYWJvdmUKICAgaWYgKGRvYykgeworICAgIC8vIERvbid0IGFsbG93IGFk
ZGluZyBhbiBldmVudCBsaXN0ZW5lciBpZiB0aGUgZG9jdW1lbnQgaXMgc2FuZGJveGVkCisgICAg
Ly8gd2l0aG91dCAnYWxsb3ctc2NyaXB0cycuCisgICAgaWYgKGRvYy0+U2FuZGJveEZsYWdzKCkg
JiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklU
WV9FUlI7CisgICAgfQorCiAgICAgbnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5PiBj
c3A7CiAgICAgcnYgPSBkb2MtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZz
KGNzcCkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgICBpZiAoY3NwKSB7
CiAgICAgICBib29sIGlubGluZU9LOwogICAgICAgcnYgPSBjc3AtPkdldEFsbG93c0lubGluZVNj
cmlwdCgmaW5saW5lT0spOwogICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAt
LWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAgYi9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRl
bnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtODAsMTYgKzgwLDE3IEBA
CiAKICNpbmNsdWRlICJtb3pBdXRvRG9jVXBkYXRlLmgiCiAjaW5jbHVkZSAibnNJSFRNTENvbGxl
Y3Rpb24uaCIKIAogI2luY2x1ZGUgIm5zSUNvbnN0cmFpbnRWYWxpZGF0aW9uLmgiCiAKICNpbmNs
dWRlICJuc0lET01IVE1MQnV0dG9uRWxlbWVudC5oIgogI2luY2x1ZGUgImRvbWJpbmRpbmdzLmgi
CisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6
OmRvbTsKIAogc3RhdGljIGNvbnN0IGludCBOU19GT1JNX0NPTlRST0xfTElTVF9IQVNIVEFCTEVf
U0laRSA9IDE2OwogCiBzdGF0aWMgY29uc3QgUFJVaW50OCBOU19GT1JNX0FVVE9DT01QTEVURV9P
TiAgPSAxOwogc3RhdGljIGNvbnN0IFBSVWludDggTlNfRk9STV9BVVRPQ09NUExFVEVfT0ZGID0g
MDsKIApAQCAtNjg0LDE3ICs2ODUsMjUgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JS
ZXNldChuc0V2ZQogICAgIHJldHVybiBEb1Jlc2V0KCk7CiAgIH0KIAogICBpZiAoTlNfRk9STV9T
VUJNSVQgPT0gYU1lc3NhZ2UpIHsKICAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgbm90IGlu
IGEgZG9jdW1lbnQuCiAgICAgaWYgKCFkb2MpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAgICB9
Ci0gICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdl
J3JlIGluIGEgc2FuZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1Ym1pdAorICAgIC8vIGlzIGRpc2Fi
bGVkLgorICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisK
KyAgICBpZiAoIShzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfRk9STVMpKSB7CisgICAgICByZXR1
cm4gRG9TdWJtaXQoYUV2ZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAog
ICBNT1pfQVNTRVJUKGZhbHNlKTsKICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNI
VE1MRm9ybUVsZW1lbnQ6OkRvUmVzZXQoKQpAQCAtMTY4NSwxNiArMTY5NCwyOCBAQCBuc0hUTUxG
b3JtRWxlbWVudDo6Q2hlY2tWYWxpZEZvcm1TdWJtaXNzCiAgICAqIFRPRE86IHRoZSBjaGVjayBm
b3Igb2JzZXJ2ZXIgc2hvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBIVE1MNSBGb3JtcyB3aWxs
CiAgICAqIGJlIHNwcmVhZCBlbm91Z2ggYW5kIGF1dGhvcnMgd2lsbCBhc3N1bWUgZm9ybXMgY2Fu
J3QgYmUgc3VibWl0dGVkIHdoZW4KICAgICogaW52YWxpZC4gU2VlIGJ1ZyA1ODc2NzEuCiAgICAq
LwogCiAgIE5TX0FTU0VSVElPTighSGFzQXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21z
Ojpub3ZhbGlkYXRlKSwKICAgICAgICAgICAgICAgICJXZSBzaG91bGRuJ3QgYmUgdGhlcmUgaWYg
bm92YWxpZGF0ZSBpcyBzZXQhIik7CiAKKyAgLy8gRG9uJ3QgZG8gdmFsaWRhdGlvbiBmb3IgYSBm
b3JtIHN1Ym1pdCBkb25lIGJ5IGEgc2FuZGJveGVkIGRvY3VtZW50IHRoYXQKKyAgLy8gZG9lc24n
dCBoYXZlICdhbGxvdy1mb3JtcycsIHRoZSBzdWJtaXQgd2lsbCBoYXZlIGJlZW4gYmxvY2tlZCBh
bmQgdGhlCisgIC8vIEhUTUw1IHNwZWMgc2F5cyB3ZSBzaG91bGRuJ3QgdmFsaWRhdGUgaW4gdGhp
cyBjYXNlLgorICBuc0lEb2N1bWVudCogZG9jID0gR2V0Q3VycmVudERvYygpOworICBpZiAoZG9j
KSB7CisgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKwor
ICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfRk9STVMpIHsKKyAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgfQorICAgICAgICAgICAgICAgCiAgIC8vIFdoZW4gLnN1Ym1pdCgpIGlz
IGNhbGxlZCBhRXZlbnQgPSBuc251bGwgc28gd2UgY2FuIHJlbHkgb24gdGhhdCB0byBrbm93IGlm
CiAgIC8vIHdlIGhhdmUgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBmb3JtLgogICBuc0NP
TVB0cjxuc0lPYnNlcnZlclNlcnZpY2U+IHNlcnZpY2UgPQogICAgIG1vemlsbGE6OnNlcnZpY2Vz
OjpHZXRPYnNlcnZlclNlcnZpY2UoKTsKICAgaWYgKCFzZXJ2aWNlKSB7CiAgICAgTlNfV0FSTklO
RygiTm8gb2JzZXJ2ZXIgc2VydmljZSBhdmFpbGFibGUhIik7CiAgICAgcmV0dXJuIHRydWU7CiAg
IH0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVt
ZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNw
cAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAK
KysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCkBA
IC0zMyw4MSArMzMsMzMgQEAKICAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBt
YXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICAqIHRoZSB0ZXJtcyBvZiBh
bnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCiAgKgogICogKioqKiogRU5E
IExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KIAogI2luY2x1ZGUgIm1vemlsbGEvVXRpbC5oIgogCiAj
aW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAibnNHa0F0b21zLmgiCi0jaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJuc0RPTUVycm9yLmgiCi0jaW5j
bHVkZSAibnNSdWxlRGF0YS5oIgotI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRl
ICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIAotY2xhc3MgbnNIVE1MSUZyYW1lRWxlbWVudCA6
IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICwgcHVibGljIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICwgcHVibGljIG5zSURPTUdldFNWR0RvY3VtZW50Ci17Ci1wdWJsaWM6Ci0gIG5zSFRN
TElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvLAot
ICAgICAgICAgICAgICAgICAgICAgIG1vemlsbGE6OmRvbTo6RnJvbVBhcnNlciBhRnJvbVBhcnNl
ciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZST01fUEFSU0VSKTsKLSAgdmlydHVhbCB+bnNIVE1MSUZy
YW1lRWxlbWVudCgpOwotCi0gIC8vIG5zSVN1cHBvcnRzCi0gIE5TX0RFQ0xfSVNVUFBPUlRTX0lO
SEVSSVRFRAotCi0gIC8vIG5zSURPTU5vZGUKLSAgTlNfRk9SV0FSRF9OU0lET01OT0RFKG5zR2Vu
ZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01FbGVtZW50Ci0gIE5TX0ZPUldB
UkRfTlNJRE9NRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJ
RE9NSFRNTEVsZW1lbnQKLSAgTlNfRk9SV0FSRF9OU0lET01IVE1MRUxFTUVOVChuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKLSAgTlNf
REVDTF9OU0lET01IVE1MSUZSQU1FRUxFTUVOVAotCi0gIC8vIG5zSURPTUdldFNWR0RvY3VtZW50
Ci0gIE5TX0RFQ0xfTlNJRE9NR0VUU1ZHRE9DVU1FTlQKLQotICAvLyBuc0lDb250ZW50Ci0gIHZp
cnR1YWwgYm9vbCBQYXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KTsKLSAgTlNfSU1FVEhP
RF8oYm9vbCkgSXNBdHRyaWJ1dGVNYXBwZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29u
c3Q7Ci0gIHZpcnR1YWwgbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBw
aW5nRnVuY3Rpb24oKSBjb25zdDsKLQotICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJ
bmZvICphTm9kZUluZm8sIG5zSU5vZGUgKiphUmVzdWx0KSBjb25zdDsKLSAgdmlydHVhbCBuc1hQ
Q0NsYXNzSW5mbyogR2V0Q2xhc3NJbmZvKCk7Ci19OwotCi0KIE5TX0lNUExfTlNfTkVXX0hUTUxf
RUxFTUVOVF9DSEVDS19QQVJTRVIoSUZyYW1lKQogCi0KIG5zSFRNTElGcmFtZUVsZW1lbnQ6Om5z
SFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZv
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9tUGFyc2VyIGFG
cm9tUGFyc2VyKQogICA6IG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQoYU5vZGVJbmZvLCBhRnJv
bVBhcnNlcikKIHsKIH0KIAogbnNIVE1MSUZyYW1lRWxlbWVudDo6fm5zSFRNTElGcmFtZUVsZW1l
bnQoKQogeworICBpZiAobVNhbmRib3hUb2tlbkxpc3QpCisgICAgbVNhbmRib3hUb2tlbkxpc3Qt
PkRyb3BSZWZlcmVuY2UoKTsKIH0KIAogCiBOU19JTVBMX0FERFJFRl9JTkhFUklURUQobnNIVE1M
SUZyYW1lRWxlbWVudCxuc0dlbmVyaWNFbGVtZW50KQogTlNfSU1QTF9SRUxFQVNFX0lOSEVSSVRF
RChuc0hUTUxJRnJhbWVFbGVtZW50LG5zR2VuZXJpY0VsZW1lbnQpCiAKIERPTUNJX05PREVfREFU
QShIVE1MSUZyYW1lRWxlbWVudCwgbnNIVE1MSUZyYW1lRWxlbWVudCkKIApAQCAtMTUwLDE2ICsx
MDIsMjggQEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0Q29udGVudFdpbmRvdyhucwogfQogCiBO
U19JTUVUSE9ESU1QCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRTVkdEb2N1bWVudChuc0lET01E
b2N1bWVudCAqKmFSZXN1bHQpCiB7CiAgIHJldHVybiBHZXRDb250ZW50RG9jdW1lbnQoYVJlc3Vs
dCk7CiB9CiAKK05TX0lNRVRIT0RJTVAKK25zSFRNTElGcmFtZUVsZW1lbnQ6OkdldFNhbmRib3go
bnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QqKiBhU2FuZGJveCkKK3sKKyAgaWYgKCFtU2FuZGJv
eFRva2VuTGlzdCkgeworICAgIG1TYW5kYm94VG9rZW5MaXN0ID0gbmV3IG5zRE9NU2V0dGFibGVU
b2tlbkxpc3QodGhpcywgbnNHa0F0b21zOjpzYW5kYm94KTsKKyAgfQorCisgIE5TX0FERFJFRigq
YVNhbmRib3ggPSBtU2FuZGJveFRva2VuTGlzdCk7CisKKyAgcmV0dXJuIE5TX09LOworfQorCiBi
b29sCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3Bh
Y2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRy
aWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJp
bmcmIGFWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZh
bHVlJiBhUmVzdWx0KQogewogICBpZiAoYU5hbWVzcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25l
KSB7CiAgICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjptYXJnaW53aWR0aCkgewpAQCAt
MTc4LDE2ICsxNDIsMjIgQEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJ
bgogICAgICAgcmV0dXJuIFBhcnNlRnJhbWVib3JkZXJWYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwog
ICAgIH0KICAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OnNjcm9sbGluZykgewogICAg
ICAgcmV0dXJuIFBhcnNlU2Nyb2xsaW5nVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CiAg
ICAgaWYgKGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjphbGlnbikgewogICAgICAgcmV0dXJuIFBh
cnNlQWxpZ25WYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KKyAgICBpZiAoYUF0dHJpYnV0
ZSA9PSBuc0drQXRvbXM6OnNhbmRib3gpIHsKKyAgICAgIC8vIFRoZSBzYW5kYm94IGF0dHJpYnV0
ZSBuZWVkcyB0byBiZSBwYXJzZWQgYXMgYW4gYXRvbSBhcnJheSBzbworICAgICAgLy8gaXQgY2Fu
IGJlIGV4cG9zZWQgYXMgYSBET01TZXR0YWJsZVRva2VuTGlzdC4KKyAgICAgIGFSZXN1bHQuUGFy
c2VBdG9tQXJyYXkoYVZhbHVlKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgfQogCiAg
IHJldHVybiBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShhTmFtZXNw
YWNlSUQsIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhVmFsdWUsIGFSZXN1bHQpOwogfQogCiBzdGF0aWMgdm9pZAogTWFwQXR0
cmlidXRlc0ludG9SdWxlKGNvbnN0IG5zTWFwcGVkQXR0cmlidXRlcyogYUF0dHJpYnV0ZXMsCkBA
IC0yNjgsOCArMjM4LDM3IEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OklzQXR0cmlidXRlTWFwcGVk
KGMKIAogCiBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpH
ZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdAogewogICByZXR1cm4gJk1hcEF0dHJp
YnV0ZXNJbnRvUnVsZTsKIH0KIAorbnNyZXN1bHQKK25zSFRNTElGcmFtZUVsZW1lbnQ6OkFmdGVy
U2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhTm90aWZ5KQoreworICBpZiAo
YU5hbWUgPT0gbnNHa0F0b21zOjpzYW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFtZVNwYWNl
SURfTm9uZSkgeworICAgIC8vIFBhcnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0
cmlidXRlLCBhbmQgaWYgd2UgaGF2ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0IGl0cyBzYW5kYm94
IGZsYWdzIGFwcHJvcHJpYXRlbHkuCisgICAgaWYgKG1GcmFtZUxvYWRlcikgeworICAgICAgbnND
T01QdHI8bnNJRG9jU2hlbGw+IGRvY3NoZWxsID0gbUZyYW1lTG9hZGVyLT5HZXRFeGlzdGluZ0Rv
Y1NoZWxsKCk7CisKKyAgICAgIGlmIChkb2NzaGVsbCkgeworICAgICAgICBQUlVpbnQzMiBuZXdG
bGFncyA9IDA7CisgICAgICAgIC8vIElmIGEgTlVMTCBhVmFsdWUgaXMgcGFzc2VkIGluLCB3ZSB3
YW50IHRvIGNsZWFyIHRoZSBzYW5kYm94IGZsYWdzCisgICAgICAgIC8vIHdoaWNoIHdlIHdpbGwg
ZG8gYnkgc2V0dGluZyB0aGVtIHRvIDAuCisgICAgICAgIGlmIChhVmFsdWUpIHsKKyAgICAgICAg
ICBuc0F1dG9TdHJpbmcgc3RyVmFsdWU7CisgICAgICAgICAgYVZhbHVlLT5Ub1N0cmluZyhzdHJW
YWx1ZSk7CisgICAgICAgICAgbmV3RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94
QXR0cmlidXRlVG9GbGFncygKKyAgICAgICAgICAgIHN0clZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICBkb2NzaGVsbC0+U2V0U2FuZGJveEZsYWdzKG5ld0ZsYWdzKTsKKyAgICAgIH0KKyAgICB9
CisgIH0KKyAgcmV0dXJuIG5zR2VuZXJpY0hUTUxFbGVtZW50OjpBZnRlclNldEF0dHIoYU5hbWVT
cGFjZUlELCBhTmFtZSwgYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhTm90aWZ5KTsKKworfQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxJRnJhbWVFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAor
KysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCkBAIC0w
LDAgKzEsMTE3IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJz
LW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisvKiAqKioqKiBCRUdJTiBMSUNF
TlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAq
CisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxh
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vu
c2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3
dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQg
V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUg
TGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFu
ZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFs
IENvZGUgaXMgTW96aWxsYSBDb21tdW5pY2F0b3IgY2xpZW50IGNvZGUuCisgKgorICogVGhlIElu
aXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBOZXRzY2FwZSBDb21t
dW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRp
YWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgKKyAqIHRoZSBJbml0aWFsIERldmVs
b3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisg
KiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVu
ZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksCisgKiBvciB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwi
KSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQ
TCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2gg
dG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIg
dGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93
IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRo
ZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBh
bmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5
b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1h
eSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFu
eSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQg
TElDRU5TRSBCTE9DSyAqKioqKiAqLworCisjaW5jbHVkZSAibW96aWxsYS9VdGlsLmgiCisKKyNp
bmNsdWRlICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zR2VuZXJpY0hU
TUxFbGVtZW50LmgiCisjaW5jbHVkZSAibnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIm5zSURPTURvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJuc0lET01TVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zR2tBdG9tcy5o
IgorI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCisjaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVz
LmgiCisjaW5jbHVkZSAibnNET01FcnJvci5oIgorI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIKKyNp
bmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCisjaW5jbHVkZSAibnNET01TZXR0YWJsZVRva2VuTGlz
dC5oIgorI2luY2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCisKK2NsYXNzIG5zSFRNTElGcmFtZUVs
ZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAoreworcHVibGljOgor
ICBuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2Rl
SW5mbywKKyAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZy
b21QYXJzZXIgPSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7CisgIHZpcnR1YWwgfm5z
SFRNTElGcmFtZUVsZW1lbnQoKTsKKworICAvLyBuc0lTdXBwb3J0cworICBOU19ERUNMX0lTVVBQ
T1JUU19JTkhFUklURUQKKworICAvLyBuc0lET01Ob2RlCisgIE5TX0ZPUldBUkRfTlNJRE9NTk9E
RShuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NRWxlbWVudAorICBO
U19GT1JXQVJEX05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisg
IC8vIG5zSURPTUhUTUxFbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNH
ZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50
CisgIE5TX0RFQ0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKKworICAvLyBuc0lET01HZXRTVkdE
b2N1bWVudAorICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCisKKyAgLy8gbnNJQ29udGVu
dAorICB2aXJ0dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CisgIE5T
X0lNRVRIT0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1
dGUpIGNvbnN0OworICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmli
dXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3Q7CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShu
c0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7CisgIHZpcnR1
YWwgbnNYUENDbGFzc0luZm8qIEdldENsYXNzSW5mbygpOworCisgIHZpcnR1YWwgbnNyZXN1bHQg
QWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYU5vdGlmeSk7CisKKyAgUFJV
aW50MzIgR2V0U2FuZGJveEZsYWdzKCkgeworICAgIG5zQXV0b1N0cmluZyBzYW5kYm94QXR0cjsK
KworICAgIGlmIChHZXRBdHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6OnNhbmRib3gs
IHNhbmRib3hBdHRyKSkgeworICAgICAgcmV0dXJuIG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRi
b3hBdHRyaWJ1dGVUb0ZsYWdzKHNhbmRib3hBdHRyKTsKKyAgICB9CisKKyAgICAvLyBObyBzYW5k
Ym94IGF0dHJpYnV0ZSwgbm8gc2FuZGJveCBmbGFncy4KKyAgICByZXR1cm4gMDsKKyAgfQorCisg
IHN0YXRpYyBuc0hUTUxJRnJhbWVFbGVtZW50KiBGcm9tQ29udGVudChuc0lDb250ZW50ICphQ29u
dGVudCkKKyAgeworICAgIGlmIChhQ29udGVudC0+SXNIVE1MKG5zR2tBdG9tczo6aWZyYW1lKSkK
KyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxuc0hUTUxJRnJhbWVFbGVtZW50Kj4oYUNvbnRlbnQp
OworICAgIHJldHVybiBuc251bGw7CisgIH0KKworcHJvdGVjdGVkOgorICBuc1JlZlB0cjxuc0RP
TVNldHRhYmxlVG9rZW5MaXN0PiAgbVNhbmRib3hUb2tlbkxpc3Q7Cit9OwpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAgYi9jb250ZW50L2h0
bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvZG9j
dW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQv
c3JjL25zSFRNTERvY3VtZW50LmNwcApAQCAtMTMwLDE2ICsxMzAsMTcgQEAKICNpbmNsdWRlICJu
c0h0bWw1TW9kdWxlLmgiCiAjaW5jbHVkZSAicHJwcmYuaCIKICNpbmNsdWRlICJtb3ppbGxhL2Rv
bS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUg
Im5zTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAibnNJUmVxdWVzdC5oIgogI2luY2x1ZGUgIm5zSHRt
bDVUcmVlT3BFeGVjdXRvci5oIgogI2luY2x1ZGUgIm5zSHRtbDVQYXJzZXIuaCIKKyNpbmNsdWRl
ICJuc1NhbmRib3hGbGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5h
bWVzcGFjZSBtb3ppbGxhOjpkb207CiAKICNkZWZpbmUgTlNfTUFYX0RPQ1VNRU5UX1dSSVRFX0RF
UFRIIDIwCiAKICNpbmNsdWRlICJwcm1lbS5oIgogI2luY2x1ZGUgInBydGltZS5oIgpAQCAtMTI3
MSwxNiArMTI3MiwyMSBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNv
CiB7CiAgIGFDb29raWUuVHJ1bmNhdGUoKTsgLy8gY2xlYXIgY3VycmVudCBjb29raWUgaW4gY2Fz
ZSBzZXJ2aWNlIGZhaWxzOwogICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNvb2tpZSBpc24n
dCBhbiBlcnJvciBjb25kaXRpb24uCiAKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAg
ICAgcmV0dXJuIE5TX09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVk
IG9yaWdpbiBmbGFnIGlzIHNldCwgYWNjZXNzIHRvIHJlYWQgY29va2llcworICAvLyBpcyBwcm9o
aWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pCisgICAgcmV0
dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisKICAgLy8gbm90IGhhdmluZyBhIGNvb2tp
ZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNl
cnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlm
IChzZXJ2aWNlKSB7CiAgICAgLy8gR2V0IGEgVVJJIGZyb20gdGhlIGRvY3VtZW50IHByaW5jaXBh
bC4gV2UgdXNlIHRoZSBvcmlnaW5hbAogICAgIC8vIGNvZGViYXNlIGluIGNhc2UgdGhlIGNvZGVi
YXNlIHdhcyBjaGFuZ2VkIGJ5IFNldERvbWFpbgogICAgIG5zQ09NUHRyPG5zSVVSST4gY29kZWJh
c2VVUkk7CiAgICAgTm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMoY29kZWJh
c2VVUkkpKTsKIApAQCAtMTMwMSwxNiArMTMwNywyMSBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29v
a2llKG5zQVN0cmluZyYgYUNvCiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTERvY3VtZW50OjpTZXRD
b29raWUoY29uc3QgbnNBU3RyaW5nJiBhQ29va2llKQogewogICBpZiAobURpc2FibGVDb29raWVB
Y2Nlc3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQn
cyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gd3JpdGUgY29va2llcwor
ICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklH
SU4pCisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisKICAgLy8gbm90IGhh
dmluZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tp
ZVNlcnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJB
Q1RJRCk7CiAgIGlmIChzZXJ2aWNlICYmIG1Eb2N1bWVudFVSSSkgewogICAgIG5zQ09NUHRyPG5z
SVByb21wdD4gcHJvbXB0OwogICAgIG5zQ09NUHRyPG5zUElET01XaW5kb3c+IHdpbmRvdyA9IEdl
dFdpbmRvdygpOwogICAgIGlmICh3aW5kb3cpIHsKICAgICAgIHdpbmRvdy0+R2V0UHJvbXB0ZXIo
Z2V0dGVyX0FkZFJlZnMocHJvbXB0KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFz
ZS9NYWtlZmlsZS5pbiBiL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4KLS0tIGEvZG9jc2hlbGwv
YmFzZS9NYWtlZmlsZS5pbgorKysgYi9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCkBAIC0xMTYs
OSArMTE2LDEwIEBAIEZPUkNFX1NUQVRJQ19MSUIgPSAxCiAKIGluY2x1ZGUgJCh0b3BzcmNkaXIp
L2NvbmZpZy9ydWxlcy5tawogCiBMT0NBTF9JTkNMVURFUyArPSBcCiAgIC1JJChzcmNkaXIpLy4u
L3NoaXN0b3J5L3NyYyBcCiAgIC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKICAgLUkkKHRvcHNy
Y2RpcikvbGF5b3V0L2Jhc2UgXAogICAtSSQodG9wc3JjZGlyKS94cGNvbS9kcyBcCisgIC1JJCh0
b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9zcmMgXAogICAkKE5VTEwpCmRpZmYgLS1naXQgYS9kb2Nz
aGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAot
LS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNE
b2NTaGVsbC5jcHAKQEAgLTIxMywxNiArMjEzLDE3IEBACiAjaW5jbHVkZSAibnNJV2ViQnJvd3Nl
clByaW50LmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgIm5zUGx1Z2luRXJyb3IuaCIKICNpbmNsdWRl
ICJuc0NvbnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zQ29udGVudEVycm9ycy5oIgogI2luY2x1
ZGUgIm5zSUNoYW5uZWxQb2xpY3kuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNYVUxBcHBB
UEkuaCIKIAogI2luY2x1ZGUgIm5zRE9NTmF2aWdhdGlvblRpbWluZy5oIgogI2luY2x1ZGUgIm5z
SVRpbWVkQ2hhbm5lbC5oIgogI2luY2x1ZGUgIm1vemlsbGEvU3RhcnR1cFRpbWVsaW5lLmgiCiAK
IHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtET01TY3JpcHRPYmplY3RGYWN0b3J5Q0lELApAQCAtNzI3
LDE2ICs3MjgsMTcgQEAgbnNEb2NTaGVsbDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3Mo
QlVTWV9GTEFHU19OT05FKSwKICAgICBtQXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5L
Tk9XTiksCiAgICAgbUxvYWRUeXBlKDApLAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1h
cmdpbkhlaWdodCgtMSksCiAgICAgbUl0ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlv
dXNUcmFuc0luZGV4KC0xKSwKICAgICBtTG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRi
b3hGbGFncygwKSwKICAgICBtQ3JlYXRlZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRy
dWUpLAogICAgIG1BbGxvd1BsdWdpbnModHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVl
KSwKICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVl
KSwKICAgICBtQWxsb3dETlNQcmVmZXRjaCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9s
KHRydWUpLApAQCAtMjkwNywxNiArMjkwOSw3MyBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhO
YW1lKGNvbnN0IFBSVW5pCiAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoZm91bmRJdGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4g
Zm91bmRJdGVtIGhlcmUgZXZlbiBpZiBpdCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8v
IGl0ZW0gc2luY2UgYWxsIHRoZSBuYW1lcyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAg
ICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBm
b3IgZnVydGhlci4KIAorICAgICAgICAgICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hl
ZCwgd2UgbmVlZCB0byBkbyBzb21lIGV4dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMy
IHNhbmRib3hGbGFncyA9IDA7CisKKyAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBk
b2MgPSBkb19HZXRJbnRlcmZhY2UoYU9yaWdpbmFsUmVxdWVzdG9yKTsKKworICAgICAgICAgICAg
aWYgKGRvYykgeworICAgICAgICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFn
cygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzKSB7Cisg
ICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcm9vdDsKKyAgICAg
ICAgICAgICAgICBHZXRTYW1lVHlwZVJvb3RUcmVlSXRlbShnZXR0ZXJfQWRkUmVmcyhyb290KSk7
CisKKyAgICAgICAgICAgICAgICAvLyBJcyB0aGUgZm91bmQgaXRlbSBub3QgYSB0b3AgbGV2ZWwg
YnJvd3NpbmcgY29udGV4dCBhbmQgbm90IG91cnNlbGYgPworICAgICAgICAgICAgICAgIG5zQ09N
UHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHNlbGZBc0l0ZW0gPSBzdGF0aWNfY2FzdDxuc0lEb2NT
aGVsbFRyZWVJdGVtICo+KHRoaXMpOworICAgICAgICAgICAgICAgIGlmIChmb3VuZEl0ZW0gIT0g
cm9vdCAmJiBmb3VuZEl0ZW0gIT0gc2VsZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBBcmUgd2UgYW4gYW5jZXN0b3Igb2YgdGhlIGZvdW5kSXRlbSA/CisgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaXNBbmNlc3RvciA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIG5zQ09N
UHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAg
ICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50QXNJdGVtLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgdG1wID09IHNlbGZBc0l0ZW0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuY2VzdG9yID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNBbmNlc3RvcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTm8sIHdlIGFyZSBub3QgYW4gYW5jZXN0b3IgYW5kIG91
ciBkb2N1bWVudCBpcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FuZGJveGVkLCB3ZSBj
YW4ndCBhbGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNu
dWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgLSBpcyBpdCBh
biBhbmNlc3RvciBvZiBvdXJzID8KKyAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVu
dChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG1w
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBmb3VuZEl0ZW0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFuY2VzdG9yLCBh
bmQgd2UgYXJlIHNhbmRib3hlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmxl
c3MgYWxsb3ctdG9wLW5hdmlnYXRpb24gaXMgc2V0LCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfVE9Q
TEVWRUxfTkFWSUdBVElPTikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJ
dGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRtcC0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBmb3VuZEl0ZW0uc3dhcCgqX3JldHZhbCk7CiAgICAgICAgICAgICByZXR1
cm4gTlNfT0s7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBLZWVwIGxvb2tpbmcKICAgICAg
ICAgCiAgICAgLy8gRmlyc3Qgd2UgY2hlY2sgb3VyIG5hbWUuCkBAIC00OTQzLDE2ICs1MDAyLDMw
IEBAIG5zRG9jU2hlbGw6OlNldElzQXBwVGFiKGJvb2wgYUlzQXBwVGFiKQogTlNfSU1FVEhPRElN
UAogbnNEb2NTaGVsbDo6R2V0SXNBcHBUYWIoYm9vbCAqYUlzQXBwVGFiKQogewogICAqYUlzQXBw
VGFiID0gbUlzQXBwVGFiOwogICByZXR1cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKK25z
RG9jU2hlbGw6OlNldFNhbmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQoreworICBt
U2FuZGJveEZsYWdzID0gYVNhbmRib3hGbGFnczsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19J
TUVUSE9ESU1QCituc0RvY1NoZWxsOjpHZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgICphU2FuZGJv
eEZsYWdzKQoreworICAqYVNhbmRib3hGbGFncyA9IG1TYW5kYm94RmxhZ3M7CisgIHJldHVybiBO
U19PSzsKK30KKworTlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6U2V0VmlzaWJpbGl0eShib29s
IGFWaXNpYmlsaXR5KQogewogICAgIGlmICghbUNvbnRlbnRWaWV3ZXIpCiAgICAgICAgIHJldHVy
biBOU19PSzsKICAgICBpZiAoYVZpc2liaWxpdHkpIHsKICAgICAgICAgbUNvbnRlbnRWaWV3ZXIt
PlNob3coKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC04MTMyLDE2ICs4MjA1LDI5IEBAIG5zRG9j
U2hlbGw6OkludGVybmFsTG9hZChuc0lVUkkgKiBhVVJJLAogICAgICAgICBuc0NPTVB0cjxuc0lE
b2NTaGVsbFRyZWVJdGVtPiB0YXJnZXRJdGVtOwogICAgICAgICBGaW5kSXRlbVdpdGhOYW1lKGFX
aW5kb3dUYXJnZXQsIG5zbnVsbCwgdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0
ZXJfQWRkUmVmcyh0YXJnZXRJdGVtKSk7CiAKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+
IHRhcmdldERvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UodGFyZ2V0SXRlbSk7CiAgICAgICAg
IAogICAgICAgICBib29sIGlzTmV3V2luZG93ID0gZmFsc2U7CiAgICAgICAgIGlmICghdGFyZ2V0
RG9jU2hlbGwpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBkb2NzaGVsbCdzIGRvY3VtZW50IGlz
IHNhbmRib3hlZCBhbmQgd2FzIHRyeWluZyB0bworICAgICAgICAgICAgLy8gbmF2aWdhdGUvbG9h
ZCBhIGZyYW1lIGl0IHdhc24ndCBhbGxvd2VkIHRvIGFjY2VzcywgdGhlCisgICAgICAgICAgICAv
LyBGaW5kSXRlbVdpdGhOYW1lIGFib3ZlIHdpbGwgaGF2ZSByZXR1cm5lZCBudWxsIGZvciB0aGUg
dGFyZ2V0CisgICAgICAgICAgICAvLyBpdGVtIC0gd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBv
cGVuIGEgbmV3IHdpbmRvdyBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgIC8vIHRob3VnaC4gQ2hl
Y2sgaWYgd2UgYXJlIHNhbmRib3hlZCBhbmQgYmFpbCBvdXQgaGVyZSBpZiBzby4KKyAgICAgICAg
ICAgIE5TX0VOU1VSRV9UUlVFKG1Db250ZW50Vmlld2VyLCBOU19FUlJPUl9GQUlMVVJFKTsKKyAg
ICAgICAgICAgIG5zSURvY3VtZW50KiBkb2MgPSBtQ29udGVudFZpZXdlci0+R2V0RG9jdW1lbnQo
KTsKKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgICAgICBz
YW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAgICAgaWYgKHNhbmRi
b3hGbGFncyAmIFNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgICAgIHJldHVybiBO
U19FUlJPUl9GQUlMVVJFOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBuc0NPTVB0cjxu
c0lET01XaW5kb3c+IHdpbiA9CiAgICAgICAgICAgICAgICAgZG9fR2V0SW50ZXJmYWNlKEdldEFz
U3VwcG9ydHModGhpcykpOwogICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUod2luLCBOU19FUlJP
Ul9OT1RfQVZBSUxBQkxFKTsKIAogICAgICAgICAgICAgbnNEZXBlbmRlbnRTdHJpbmcgbmFtZShh
V2luZG93VGFyZ2V0KTsKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gbmV3V2lu
OwogICAgICAgICAgICAgcnYgPSB3aW4tPk9wZW4oRW1wdHlTdHJpbmcoKSwgLy8gVVJMIHRvIGxv
YWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsICAgICAgICAgIC8vIHdpbmRvdyBu
YW1lCkBAIC04OTEzLDE4ICs4OTk5LDMxIEBAIG5zRG9jU2hlbGw6OkRvVVJJTG9hZChuc0lVUkkg
KiBhVVJJLAogICAgICAgICB9CiAgICAgICAgIC8vIFNldCB0aGUgcmVmZXJyZXIgZXhwbGljaXRs
eQogICAgICAgICBpZiAoYVJlZmVycmVyVVJJICYmIGFTZW5kUmVmZXJyZXIpIHsKICAgICAgICAg
ICAgIC8vIFJlZmVycmVyIGlzIGN1cnJlbmx5IG9ubHkgc2V0IGZvciBsaW5rIGNsaWNrcyBoZXJl
LgogICAgICAgICAgICAgaHR0cENoYW5uZWwtPlNldFJlZmVycmVyKGFSZWZlcnJlclVSSSk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNp
cGFsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFPd25lcikpOwotICAgIG5zQ29udGVudFV0aWxzOjpTZXRV
cENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSk7CisgICAg
bnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbDsKKworICAgIC8vIElmIHRoZSBj
b250ZW50IGJlaW5nIGxvYWRlZCBzaG91bGQgYmUgc2FuZGJveGVkIHdpdGggcmVzcGVjdCB0byBv
cmlnaW4KKyAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBudWxsIHByaW5jaXBhbCBoZXJl
LCBhbmQgdGhlbiB0ZWxsCisgICAgLy8gbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVy
IHRvIGZvcmNlIGl0IHRvIGJlIHNldCBhcyB0aGUKKyAgICAvLyBjaGFubmVsIG93bmVyLgorICAg
IGlmIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikgeworICAgICAgb3duZXJQcmlu
Y2lwYWwgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL251bGxwcmluY2lwYWw7MSIp
OworICAgIH0gZWxzZSB7CisgICAgICAvLyBOb3Qgc2FuZGJveGVkIC0gd2UgYWxsb3cgdGhlIGNv
bnRlbnQgdG8gYXNzdW1lIGl0cyBuYXR1cmFsIG93bmVyLgorICAgICAgb3duZXJQcmluY2lwYWwg
PSBkb19RdWVyeUludGVyZmFjZShhT3duZXIpOworICAgIH0KKworICAgIG5zQ29udGVudFV0aWxz
OjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU2FuZGJveEZsYWdzICYg
U0FOREJPWEVEX09SSUdJTikpOwogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2Ny
aXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAgIGlmIChzY3JpcHRD
aGFubmVsKSB7CiAgICAgICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0
IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAg
ICAgICAgU2V0RXhlY3V0aW9uUG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFM
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oIGIvZG9j
c2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgK
KysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKQEAgLTc4MSwxNiArNzgxLDE4IEBAIHBy
b3RlY3RlZDoKICAgICAvLyBDcmVhdGUoKSBpcyBjYWxsZWQsIHRoZSB0eXBlIGlzIG5vdCBleHBl
Y3RlZCB0byBjaGFuZ2UuCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUl0ZW1UeXBl
OwogCiAgICAgLy8gSW5kZXggaW50byB0aGUgU0hUcmFuc2FjdGlvbiBsaXN0LCBpbmRpY2F0aW5n
IHRoZSBwcmV2aW91cyBhbmQgY3VycmVudAogICAgIC8vIHRyYW5zYWN0aW9uIGF0IHRoZSB0aW1l
IHRoYXQgdGhpcyBEb2NTaGVsbCBiZWdpbnMgdG8gbG9hZAogICAgIFBSSW50MzIgICAgICAgICAg
ICAgICAgICAgIG1QcmV2aW91c1RyYW5zSW5kZXg7CiAgICAgUFJJbnQzMiAgICAgICAgICAgICAg
ICAgICAgbUxvYWRlZFRyYW5zSW5kZXg7CiAKKyAgICBQUlVpbnQzMiAgICAgICAgICAgICAgICAg
ICBtU2FuZGJveEZsYWdzOworCiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUNyZWF0
ZWQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93U3ViZnJhbWVzOwogICAg
IGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1BsdWdpbnM7CiAgICAgYm9vbCAgICAg
ICAgICAgICAgICAgICAgICAgbUFsbG93SmF2YXNjcmlwdDsKICAgICBib29sICAgICAgICAgICAg
ICAgICAgICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzOwogICAgIGJvb2wgICAgICAgICAgICAgICAg
ICAgICAgIG1BbGxvd0ltYWdlczsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxs
b3dETlNQcmVmZXRjaDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dXaW5k
b3dDb250cm9sOwpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwgYi9k
b2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAotLS0gYS9kb2NzaGVsbC9iYXNlL25zSURvY1No
ZWxsLmlkbAorKysgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbApAQCAtNjcsMTcgKzY3
LDE3IEBAIGludGVyZmFjZSBuc0lSZXF1ZXN0OwogaW50ZXJmYWNlIG5zSVNIRW50cnk7CiBpbnRl
cmZhY2UgbnNJTGF5b3V0SGlzdG9yeVN0YXRlOwogaW50ZXJmYWNlIG5zSVNlY3VyZUJyb3dzZXJV
STsKIGludGVyZmFjZSBuc0lET01TdG9yYWdlOwogaW50ZXJmYWNlIG5zSVByaW5jaXBhbDsKIGlu
dGVyZmFjZSBuc0lXZWJCcm93c2VyUHJpbnQ7CiBpbnRlcmZhY2UgbnNJVmFyaWFudDsKIAotW3Nj
cmlwdGFibGUsIHV1aWQoREJEMzlDMjEtNTc4OC00QzY4LTlEOTctMEZDRUUyODlCQ0UxKV0KK1tz
Y3JpcHRhYmxlLCB1dWlkKDliMjgzMzM3LTA5N2QtNGZhOC1hMmRhLTkxNjMxOGVhZjgyOCldCiBp
bnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogewogICAvKioKICAgICogTG9hZHMg
YSBnaXZlbiBVUkkuICBUaGlzIHdpbGwgZ2l2ZSBwcmlvcml0eSB0byBsb2FkaW5nIHRoZSByZXF1
ZXN0ZWQgVVJJCiAgICAqIGluIHRoZSBvYmplY3QgaW1wbGVtZW50aW5nCXRoaXMgaW50ZXJmYWNl
LiAgSWYgaXQgY2FuJ3QgYmUgbG9hZGVkIGhlcmUKICAgICogaG93ZXZlciwgdGhlIFVSTCBkaXNw
YXRjaGVyIHdpbGwgZ28gdGhyb3VnaCBpdHMgbm9ybWFsIHByb2Nlc3Mgb2YgY29udGVudAogICAg
KiBsb2FkaW5nLgogICAgKgpAQCAtNjA5LDkgKzYwOSwyMyBAQCBpbnRlcmZhY2UgbnNJRG9jU2hl
bGwgOiBuc0lTdXBwb3J0cwogICAgKiB3aGVuIGl0IGluaXRpYWxpemVzIHRoZSBkb2NzaGVsbC4K
ICAgICoKICAgICogSWYgc28sIHRoaXMgZG9jc2hlbGwgc2hvdWxkIGFjdCBsaWtlIGEgY2hyb21l
L2NvbnRlbnQgYm91bmRhcnkgZm9yIHRoZQogICAgKiBwdXJwb3NlcyBvZiB3aW5kb3cudG9wIGFu
ZCB3aW5kb3cucGFyZW50LgogICAgKgogICAgKiBTZWUgYWxzbyBuc0lNb3pCcm93c2VyRnJhbWUu
CiAgICAqLwogICBhdHRyaWJ1dGUgYm9vbCBpc0Jyb3dzZXJGcmFtZTsKKworICAvKioKKyAgICog
VGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3NoZWxsLiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1
ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUgb2YgdGhlIGFzc29jaWF0ZWQgSUZSQU1F
IG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZgorICAgKiBleGlzdGVudC4gU2VlIHRoZSBI
VE1MNSBzcGVjIGZvciBtb3JlIGRldGFpbHMuCisgICAqIFRoZXNlIGZsYWdzIG9uIHRoZSBkb2Nz
aGVsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzYW5kYm94CisgICAqIGF0dHJp
YnV0ZSwgd2hpY2ggaXMgbW9kaWZpYWJsZS4gVGhleSBhcmUgb25seSB1c2VkIHdoZW4gbG9hZGlu
ZyBuZXcKKyAgICogY29udGVudCwgc2FuZGJveCBmbGFncyBhcmUgYWxzbyBpbW11dGFibHkgc2V0
IG9uIHRoZSBkb2N1bWVudCB3aGVuIGl0IGlzCisgICAqIGxvYWRlZC4KKyAgICogVGhlIHNhbmRi
b3ggZmxhZ3Mgb2YgYSBkb2N1bWVudCBkZXBlbmQgb24gdGhlIHNhbmRib3ggZmxhZ3Mgb24gaXRz
CisgICAqIGRvY3NoZWxsIGFuZCBvZiBpdHMgcGFyZW50IGRvY3VtZW50LCBpZiBhbnkuCisgICAq
IFNlZSBuc1NhbmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MuCisgICAqLworICBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzYW5kYm94RmxhZ3M7CiB9OwpkaWZmIC0tZ2l0IGEvZG9t
L2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCi0t
LSBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcAorKysgYi9kb20vYmFzZS9uc0dsb2JhbFdp
bmRvdy5jcHAKQEAgLTI1NiwxNiArMjU2LDE3IEBACiAKICNpbmNsdWRlICJuc1JlZnJlc2hEcml2
ZXIuaCIKICNpbmNsdWRlICJtb3pBdXRvRG9jVXBkYXRlLmgiCiAKICNpbmNsdWRlICJtb3ppbGxh
L1RlbGVtZXRyeS5oIgogI2luY2x1ZGUgIm5zTG9jYXRpb24uaCIKICNpbmNsdWRlICJuc1dyYXBw
ZXJDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJuc0RPTUV2ZW50VGFyZ2V0SGVscGVyLmgiCisj
aW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2lmZGVmIEFORFJPSUQKICNpbmNsdWRlIDxh
bmRyb2lkL2xvZy5oPgogI2VuZGlmCiAKICNpZmRlZiBQUl9MT0dHSU5HCiBzdGF0aWMgUFJMb2dN
b2R1bGVJbmZvKiBnRE9NTGVha1BSTG9nOwogI2VuZGlmCkBAIC04MzMwLDE2ICs4MzMxLDIyIEBA
IG5zR2xvYmFsV2luZG93OjpHZXRTZXNzaW9uU3RvcmFnZShuc0lET00KICAgaWYgKCFtU2Vzc2lv
blN0b3JhZ2UpIHsKICAgICAqYVNlc3Npb25TdG9yYWdlID0gbnNudWxsOwogCiAgICAgbnNTdHJp
bmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5H
ZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3Vt
ZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93
IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hG
bGFncygpICYgU0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01f
U0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zcmVzdWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNl
c3Npb25TdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFVSSSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdldHRlcl9BZGRSZWZzKG1TZXNzaW9uU3RvcmFnZSkpOwogICAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CiAKICNpZmRlZiBQUl9MT0dHSU5HCiAgICAgaWYgKFBSX0xPR19URVNUKGdE
T01MZWFrUFJMb2csIFBSX0xPR19ERUJVRykpIHsKQEAgLTgzOTEsMTYgKzgzOTgsMjIgQEAgbnNH
bG9iYWxXaW5kb3c6OkdldExvY2FsU3RvcmFnZShuc0lET01TdAogICAgICAgZG9fR2V0U2Vydmlj
ZSgiQG1vemlsbGEub3JnL2RvbS9zdG9yYWdlbWFuYWdlcjsxIiwgJnJ2KTsKICAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYg
KG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVS
SSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9y
aWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2Uu
CisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX09SSUdJ
TikpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwog
ICAgIHJ2ID0gc3RvcmFnZU1hbmFnZXItPkdldExvY2FsU3RvcmFnZUZvclByaW5jaXBhbChwcmlu
Y2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY3VtZW50VVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhtTG9jYWxTdG9yYWdlKSk7CiAgICAgTlNfRU5T
VVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgfQogCiAgIE5TX0FERFJFRigqYUxvY2FsU3RvcmFnZSA9
IG1Mb2NhbFN0b3JhZ2UpOwogICByZXR1cm4gTlNfT0s7CmRpZmYgLS1naXQgYS9kb20vaW50ZXJm
YWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0
bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwv
bnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJ
RE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCkBAIC0zMyw0NCArMzMsNDYgQEAKICAqIGRlY2lzaW9u
IGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0
aGUgbm90aWNlCiAgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9y
IHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQogICogdGhlIHByb3Zpc2lvbnMgYWJvdmUs
IGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgogICog
dGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICAq
CiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVkZSAibnNJRE9N
SFRNTEVsZW1lbnQuaWRsIgorI2luY2x1ZGUgIm5zSURPTURPTVNldHRhYmxlVG9rZW5MaXN0Lmlk
bCIKIAogLyoqCiAgKiBUaGUgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgaW50ZXJmYWNlIGlzIHRo
ZSBpbnRlcmZhY2UgdG8gYSBbWF1IVE1MCiAgKiBpZnJhbWUgZWxlbWVudC4KICAqCiAgKiBUaGlz
IGludGVyZmFjZSBpcyB0cnlpbmcgdG8gZm9sbG93IHRoZSBET00gTGV2ZWwgMiBIVE1MIHNwZWNp
ZmljYXRpb246CiAgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1MLwogICoK
ICAqIHdpdGggY2hhbmdlcyBmcm9tIHRoZSB3b3JrLWluLXByb2dyZXNzIFdIQVRXRyBIVE1MIHNw
ZWNpZmljYXRpb246CiAgKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3Vy
cmVudC13b3JrLwogICovCiAKLVtzY3JpcHRhYmxlLCB1dWlkKDBlYWQ1YTVjLWU0ZDMtNGU0ZC04
OGI4LTdjOWRjOWQyNjY1YyldCitbc2NyaXB0YWJsZSwgdXVpZCg1MmY2MjQ0Yi1iMWY1LTRmNGMt
OGZmMy03ZTE0NjMxNmY0MTEpXQogaW50ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDog
bnNJRE9NSFRNTEVsZW1lbnQKIHsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAg
ICAgYWxpZ247CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGZyYW1lQm9y
ZGVyOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBoZWlnaHQ7CiAgICAg
ICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGxvbmdEZXNjOwogICAgICAgICAgICBh
dHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5IZWlnaHQ7CiAgICAgICAgICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbldpZHRoOwogICAgICAgICAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nICAgICAgICBuYW1lOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAg
ICAgICBzY3JvbGxpbmc7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNy
YzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgd2lkdGg7CiAgIC8vIElu
dHJvZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01Eb2N1
bWVudCAgIGNvbnRlbnREb2N1bWVudDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVdpbmRv
dyAgICAgY29udGVudFdpbmRvdzsKIAorICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRE9NU2V0
dGFibGVUb2tlbkxpc3Qgc2FuZGJveDsKIAogICAvLyBNb3ppbGxhIGV4dGVuc2lvbnMKICAgLy8g
aWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1vekFsbG93RnVsbFNjcmVlbiBhdHRyaWJ1dGUg
dG8gYmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3JlIHRvIGFsbG93IGNvbnRlbnQgaW4gdGhlIHN1
YiBkb2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxsLXNjcmVlbgogICAvLyBtb2RlLiBTZWUgaHR0
cHM6Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBocD90aXRsZT1HZWNrbzpGdWxsU2NyZWVuQVBJ
CiAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgIG1vekFsbG93RnVsbFNjcmVl
bjsKIH07CmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL01ha2VmaWxlLmluIGIvZG9tL3NyYy9q
c3VybC9NYWtlZmlsZS5pbgotLS0gYS9kb20vc3JjL2pzdXJsL01ha2VmaWxlLmluCisrKyBiL2Rv
bS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KQEAgLTU3LDE2ICs1NywxNyBAQCBYUElETFNSQ1MJPSBc
CiBDUFBTUkNTCQk9IG5zSlNQcm90b2NvbEhhbmRsZXIuY3BwCiAKIEVYUE9SVFMJCT0gJChzcmNk
aXIpL25zSlNQcm90b2NvbEhhbmRsZXIuaAogCiBMT0NBTF9JTkNMVURFUyArPSBcCiAJCS1JJChz
cmNkaXIpIFwKIAkJLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UgXAogCQktSSQodG9wc3JjZGlyKS9u
ZXR3ZXJrL2Jhc2Uvc3JjIFwKKwkJLUkkKHRvcHNyY2RpcikvY29udGVudC9iYXNlL3NyYyBcCiAK
IGlmZGVmIEJVSUxEX0RFQlVHX0dDCiBERUZJTkVTCQkrPSAtRERFQlVHX0dDCiBlbmRpZgogCiBE
SVJTICAgICAgICAgICAgPSAkKE5VTEwpCiBURVNUX0RJUlMgKz0gdGVzdAogCmRpZmYgLS1naXQg
YS9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwIGIvZG9tL3NyYy9qc3VybC9u
c0pTUHJvdG9jb2xIYW5kbGVyLmNwcAotLS0gYS9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhh
bmRsZXIuY3BwCisrKyBiL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAKQEAg
LTc0LDE2ICs3NCwxNyBAQAogI2luY2x1ZGUgIm5zVGhyZWFkVXRpbHMuaCIKICNpbmNsdWRlICJu
c0lKU0NvbnRleHRTdGFjay5oIgogI2luY2x1ZGUgIm5zSVNjcmlwdENoYW5uZWwuaCIKICNpbmNs
dWRlICJuc0lEb2N1bWVudC5oIgogI2luY2x1ZGUgIm5zSU9iamVjdElucHV0U3RyZWFtLmgiCiAj
aW5jbHVkZSAibnNJT2JqZWN0T3V0cHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAibnNJV3JpdGFibGVQ
cm9wZXJ0eUJhZzIuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNp
bmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBzdGF0aWMgTlNfREVGSU5FX0NJRChrSlNVUklD
SUQsIE5TX0pTVVJJX0NJRCk7CiAKIGNsYXNzIG5zSlNUaHVuayA6IHB1YmxpYyBuc0lJbnB1dFN0
cmVhbQogewogcHVibGljOgogICAgIG5zSlNUaHVuaygpOwogCkBAIC0yMjAsMTYgKzIyMSwyOCBA
QCBuc3Jlc3VsdCBuc0pTVGh1bms6OkV2YWx1YXRlU2NyaXB0KG5zSUNoCiAgICAgLy8gR2V0IHRo
ZSBnbG9iYWwgb2JqZWN0IHdlIHNob3VsZCBiZSBydW5uaW5nIG9uLgogICAgIG5zSVNjcmlwdEds
b2JhbE9iamVjdCogZ2xvYmFsID0gR2V0R2xvYmFsT2JqZWN0KGFDaGFubmVsKTsKICAgICBpZiAo
IWdsb2JhbCkgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKICAgICB9CiAKICAg
ICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW4oZG9fUXVlcnlJbnRlcmZhY2UoZ2xvYmFsKSk7
CiAKKyAgICAvLyBTYW5kYm94ZWQgZG9jdW1lbnQgY2hlY2s6IGphdmFzY3JpcHQ6IFVSSSdzIGFy
ZSBkaXNhYmxlZCAKKyAgICAvLyBpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB1bmxlc3MgJ2FsbG93
LXNjcmlwdHMnIHdhcyBzcGVjaWZpZWQKKworICAgIC8vIFJFVklFVyAtIGl0IHNlZW1zIGxpa2Ug
dGhlIG9yaWdpbmFsIGlubmVyIHdpbmRvdyB3b3VsZCBiZSB0aGUgb25lCisgICAgLy8gdGhhdCB3
aWxsIGV4ZWN1dGUgdGhlIGphdmFzY3JpcHQgd2l0aCBpdHMgcHJpbmNpcGFsIC0gaXMgdGhpcyAK
KyAgICAvLyBhc3N1bXB0aW9uIGNvcnJlY3QgPz8gKGFuZCBpcyBHZXRFeHRhbnREb2N1bWVudCgp
IHRoZSByaWdodCB3YXkKKyAgICAvLyB0byBnZXQgdGhlIHJpZ2h0IGRvY3VtZW50ID8/CisgICAg
bnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFPcmlnaW5hbElu
bmVyV2luZG93LT5HZXRFeHRhbnREb2N1bWVudCgpKTsKKyAgICBpZiAoZG9jICYmIChkb2MtPlNh
bmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpKSB7CisgICAgICByZXR1cm4gTlNfRVJS
T1JfRE9NX1JFVFZBTF9VTkRFRklORUQ7CisgICAgfQorCiAgICAgLy8gUHVzaCBvdXIgcG9wdXAg
Y29udHJvbCBzdGF0ZQogICAgIG5zQXV0b1BvcHVwU3RhdGVQdXNoZXIgcG9wdXBTdGF0ZVB1c2hl
cih3aW4sIGFQb3B1cFN0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHRo
ZSBzYW1lIGlubmVyIHdpbmRvdyBhcyB3ZSB1c2VkIHRvLgogICAgIG5zUElET01XaW5kb3cgKmlu
bmVyV2luID0gd2luLT5HZXRDdXJyZW50SW5uZXJXaW5kb3coKTsKIAogICAgIGlmIChpbm5lcldp
biAhPSBhT3JpZ2luYWxJbm5lcldpbmRvdykgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfVU5F
WFBFQ1RFRDsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIv
c3JjL01ha2VmaWxlLmluIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMv
TWFrZWZpbGUuaW4KLS0tIGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMv
TWFrZWZpbGUuaW4KKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMv
TWFrZWZpbGUuaW4KQEAgLTU2LDExICs1NiwxMiBAQCBDUFBTUkNTCQkrPSBuc0RpYWxvZ1BhcmFt
QmxvY2suY3BwIFwKIAkJICAgJChOVUxMKQogZW5kaWYKIAogIyB3ZSBkb24ndCB3YW50IHRoZSBz
aGFyZWQgbGliLCBidXQgd2Ugd2FudCB0byBmb3JjZSB0aGUgY3JlYXRpb24gb2YgYQogIyBzdGF0
aWMgbGliLgogRk9SQ0VfU1RBVElDX0xJQiA9IDEKIAogIyBGb3IgbnNKU1V0aWxzCi1MT0NBTF9J
TkNMVURFUyArPSAtSSQodG9wc3JjZGlyKS9kb20vYmFzZQorTE9DQUxfSU5DTFVERVMgKz0gLUkk
KHRvcHNyY2RpcikvZG9tL2Jhc2UgXAorCQkgIC1JJCh0b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9z
cmMgXAogCiBpbmNsdWRlICQodG9wc3JjZGlyKS9jb25maWcvcnVsZXMubWsKZGlmZiAtLWdpdCBh
L2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5j
cHAgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNo
ZXIuY3BwCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2lu
ZG93V2F0Y2hlci5jcHAKKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9z
cmMvbnNXaW5kb3dXYXRjaGVyLmNwcApAQCAtODYsMTYgKzg2LDE3IEBACiAjaW5jbHVkZSAibnNQ
SURPTVN0b3JhZ2UuaCIKICNpbmNsdWRlICJuc0lXaWRnZXQuaCIKICNpbmNsdWRlICJuc0ZvY3Vz
TWFuYWdlci5oIgogI2luY2x1ZGUgIm5zSVByZXNTaGVsbC5oIgogI2luY2x1ZGUgIm5zUHJlc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zSVByZWZC
cmFuY2guaCIKICNpbmNsdWRlICJuc0lQcmVmU2VydmljZS5oIgorI2luY2x1ZGUgIm5zU2FuZGJv
eEZsYWdzLmgiCiAKICNpZmRlZiBVU0VXRUFLUkVGUwogI2luY2x1ZGUgIm5zSVdlYWtSZWZlcmVu
Y2UuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIAogc3RhdGljIGNvbnN0
IGNoYXIgKnNKU1N0YWNrQ29udHJhY3RJRD0iQG1vemlsbGEub3JnL2pzL3hwYy9Db250ZXh0U3Rh
Y2s7MSI7CkBAIC02MDMsMTYgKzYwNCwzMyBAQCBuc1dpbmRvd1dhdGNoZXI6Ok9wZW5XaW5kb3dK
U0ludGVybmFsKG5zCiAgIH0KIAogICBpZiAoIW5ld0RvY1NoZWxsSXRlbSkgewogICAgIC8vIFdl
J3JlIGdvaW5nIHRvIGVpdGhlciBvcGVuIHVwIGEgbmV3IHdpbmRvdyBvdXJzZWx2ZXMgb3IgYXNr
IGEKICAgICAvLyBuc0lXaW5kb3dQcm92aWRlciBmb3Igb25lLiAgSW4gZWl0aGVyIGNhc2UsIHdl
J2xsIHdhbnQgdG8gc2V0IHRoZSByaWdodAogICAgIC8vIG5hbWUgb24gaXQuCiAgICAgd2luZG93
TmVlZHNOYW1lID0gdHJ1ZTsKIAorICAgIC8vIElmIHRoZSBwYXJlbnQgdHJ5aW5nIHRvIG9wZW4g
YSBuZXcgd2luZG93IGlzIHNhbmRib3hlZCwKKyAgICAvLyB0aGlzIGlzIG5vdCBhbGxvd2VkIGFu
ZCB3ZSBmYWlsIGhlcmUuCisgICAgaWYgKGFQYXJlbnQpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURP
TURvY3VtZW50PiBkb21kb2M7CisgICAgICBhUGFyZW50LT5HZXREb2N1bWVudChnZXR0ZXJfQWRk
UmVmcyhkb21kb2MpKTsKKyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19RdWVy
eUludGVyZmFjZShkb21kb2MpOworCisgICAgICBpZiAoZG9jKSB7CisgICAgICAgIFBSVWludDMy
IHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZs
YWdzKCk7CisKKyAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9OQVZJR0FUSU9O
KSB7CisgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICB9CisKICAgICAvLyBOb3cgY2hlY2sgd2hldGhlciBpdCdzIG9rIHRvIGFzayBhIHdp
bmRvdyBwcm92aWRlciBmb3IgYSB3aW5kb3cuICBEb24ndAogICAgIC8vIGRvIGl0IGlmIHdlJ3Jl
IG9wZW5pbmcgYSBkaWFsb2cgb3IgaWYgb3VyIHBhcmVudCBpcyBhIGNocm9tZSB3aW5kb3cgb3IK
ICAgICAvLyBpZiB3ZSdyZSBvcGVuaW5nIHNvbWV0aGluZyB0aGF0IGhhcyBtb2RhbCwgZGlhbG9n
LCBvciBjaHJvbWUgZmxhZ3Mgc2V0LgogICAgIG5zQ09NUHRyPG5zSURPTUNocm9tZVdpbmRvdz4g
Y2hyb21lV2luID0gZG9fUXVlcnlJbnRlcmZhY2UoYVBhcmVudCk7CiAgICAgaWYgKCFhRGlhbG9n
ICYmICFjaHJvbWVXaW4gJiYKICAgICAgICAgIShjaHJvbWVGbGFncyAmIChuc0lXZWJCcm93c2Vy
Q2hyb21lOjpDSFJPTUVfTU9EQUwgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX09QRU5BU19ESUFMT0cgfCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0NIUk9NRSkp
KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>612425</attachid>
            <date>2012-04-04 18:31:54 -0700</date>
            <delta_ts>2012-04-17 23:12:29 -0700</delta_ts>
            <desc>iframe sandbox tests - general v3</desc>
            <filename>iframe_sandbox_tests_general</filename>
            <type>text/plain</type>
            <size>17701</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgN2ZlYjEyNzRlYmUzNGExMmY5MWQwOWU2NTJh
NzAzMjc5YTYxZGI2OQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KQEAgLTI5NCwxNiArMjk0LDI3IEBAIF9URVNUX0ZJTEVTID0gXAogCQlmaWxlX2Z1bGxz
Y3JlZW4tZXNjLWV4aXQtaW5uZXIuaHRtbCBcCiAJCWZpbGVfZnVsbHNjcmVlbi1yb2xsYmFjay5o
dG1sIFwKIAkJZmlsZV9mdWxsc2NyZWVuLXN2Zy1lbGVtZW50Lmh0bWwgXAogCQl0ZXN0X2xpX2F0
dHJpYnV0ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9vbF9hdHRyaWJ1dGVzX3JlZmxlY3Rp
b24uaHRtbCBcCiAJCXRlc3RfYnVnNjUxOTU2Lmh0bWwgXAogCQl0ZXN0X2J1ZzY5NDUwMy5odG1s
IFwKIAkJdGVzdF9vYmplY3RfcGx1Z2luX25hdi5odG1sIFwKKwkJdGVzdF9pZnJhbWVfc2FuZGJv
eF9nZW5lcmFsLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwgXAorCQlm
aWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Nf
aWYzLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwgXAorCQlmaWxlX2lm
cmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFp
bC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX3Bhc3MuaHRtbCBcCisJCWZpbGVf
aWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9wYXNzLmpzIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzIFwKIAkJJChOVUxM
KQogCiBfQlJPV1NFUl9URVNUX0ZJTEVTID0gXAogCQlicm93c2VyX2J1ZzY0OTc3OC5qcyBcCiAJ
CWZpbGVfYnVnNjQ5Nzc4Lmh0bWwgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sXmhlYWRlcnNeIFwK
IAkJJChOVUxMKQogCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2NfaWYxLmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxo
ZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQx
NjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3Rz
L1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+CisgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+
Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9r
KHJlc3VsdCwgZGVzYykgeworICAgIHdpbmRvdy50b3AucG9zdE1lc3NhZ2Uoe29rOiByZXN1bHQs
IGRlc2M6IGRlc2N9LCAiKiIpOworICB9CisKKyAgZnVuY3Rpb24gZG9TdWJtaXQoKSB7CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FfZm9ybScpLnN1Ym1pdCgpOworICB9CisKKyAgZnVu
Y3Rpb24gZG9TdHVmZigpIHsKKyAgICBvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRo
IGFsbG93LXNjcmlwdHMgc2hvdWxkIGJlIGFibGUgdG8gcnVuIGlubGluZSBzY3JpcHRzIik7CisK
KyAgICAvLyBzaG91bGQgbm90IGJlIGFsbG93ZWQgLSBkb24ndCBoYXZlIGFsbG93LWZvcm1zCisg
ICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhX2J1dHRvbicpOworCisgICAgLy8g
dHJpZ2dlciB0aGUgamF2YXNjcmlwdDogdXJsIHRlc3QKKyAgICBzZW5kTW91c2VFdmVudCh7dHlw
ZTonY2xpY2snfSwgJ2FfbGluaycpOworICB9Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSdmaWxl
X2lmcmFtZV9zYW5kYm94X3Bhc3MuanMnPjwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSdvayh0cnVl
LCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMgc2hvdWxkIGJlIGFibGUg
dG8gcnVuIHNjcmlwdCBmcm9tIGV2ZW50IGxpc3RlbmVycyIpO2RvU3R1ZmYoKTsnPgorICBJIGFt
IHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyIKKworICA8Zm9ybSBtZXRob2Q9Imdl
dCIgYWN0aW9uPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1sIiBpZD0iYV9mb3Jt
Ij4KKyAgICBGaXJzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmlyc3RuYW1lIj4K
KyAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYXN0bmFtZSI+CisgICAg
PGlucHV0IHR5cGU9InN1Ym1pdCIgb25jbGljaz0iZG9TdWJtaXQoKSIgaWQ9ImFfYnV0dG9uIj4K
KyAgPC9mb3JtPgorCisgIDxhIGhyZWYgPSAnamF2YXNjcmlwdDpvayh0cnVlLCAiZG9jdW1lbnRz
IHNhbmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMgc2hvdWxkIGJlIGFibGUgdG8gcnVuIHNjcmlw
dCBmcm9tIGphdmFzY3JpcHQ6IFVSTHMiKTsnIGlkPSdhX2xpbmsnPmNsaWNrIG1lPC9hPgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmMi5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+ICAgCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3Mi
IGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIAorPC9oZWFkPgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2MpIHsg
CisgICAgd2luZG93LnRvcC5wb3N0TWVzc2FnZSh7b2s6IHJlc3VsdCwgZGVzYzogbWVzc2FnZX0s
ICIqIik7CisgIH0KKyAgCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgb2soZmFsc2UsICJk
b2N1bWVudHMgc2FuZGJveGVkIFdJVEhPVVQgYWxsb3ctc2NyaXB0cyBzaG91bGQgTk9UIGJlIGFi
bGUgdG8gcnVuIGlubGluZSBzY3JpcHRzIik7IAorICB9Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSdmaWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMnPjwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSd3
aW5kb3cudG9wLnBvc3RtZXNzYWdlKHtvazogZmFsc2UsIGRlc2M6ICJkb2N1bWVudHMgc2FuZGJv
eGVkIHdpdGggYWxsb3ctc2NyaXB0cyBzaG91bGQgYmUgYWJsZSB0byBydW4gc2NyaXB0IGZyb20g
amF2YXNjcmlwdDogVVJMcyJ9LCAiKiIpO2RvU3R1ZmYoKTsnPgorICBJIGFtIHNhbmRib3hlZCB3
aXRoIG5vIHBlcm1pc3Npb25zCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbCBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cisg
IDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3Jp
cHQ+ICAgICAKKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i
L3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIGRvU3VibWl0KCkgeworICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdhX2Zvcm0nKS5zdWJtaXQoKTsKKyAgfQorICAKKyAgZnVuY3Rpb24g
ZG9TdHVmZigpIHsgICAgCisgICAgLy8gdHJ5IGFuZCBzdWJtaXQgdGhlIGZvcm0gLSB0aGlzIHNo
b3VsZCBzdWNjZWVkCisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhX2J1dHRv
bicpOworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBz
YW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ctZm9ybXMiCisgIAorICA8Zm9y
bSBtZXRob2Q9ImdldCIgYWN0aW9uPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1s
IiBpZD0iYV9mb3JtIj4KKyAgICBGaXJzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0i
Zmlyc3RuYW1lIj4KKyAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYXN0
bmFtZSI+CisgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgb25jbGljaz0iZG9TdWJtaXQoKSIgaWQ9
ImFfYnV0dG9uIj4KKyAgPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5odG1sCkBAIC0wLDAgKzEsNDIgQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwv
c2NyaXB0PiAgICAgCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhy
ZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIAorPC9oZWFkPgorPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2MpIHsgCisg
ICAgd2luZG93LnBhcmVudC5va193cmFwcGVyKHJlc3VsdCwgZGVzYyk7CisgIH0KKyAgCisgIGZ1
bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgLy8gdHJ5IHRvIG9wZW4gYSBuZXcgd2luZG93IHZpYSB0
YXJnZXQ9Il9ibGFuayIsIHdpbmRvdy5vcGVuKCksIGFuZCBzaG93TW9kYWxEaWFsb2coKQorICAg
IC8vIHRoZSB3aW5kb3cgd2UgdHJ5IHRvIG9wZW4gY2xvc2VzIGl0c2VsZiBvbmNlIGl0IG9wZW5z
CisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICd0YXJnZXRfYmxhbmsnKTsKKwor
ICAgIC8vIFJFVklFVyA6IHdpbmRvdy5vcGVuIGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHRocm93
cyBhbiBleGNlcHRpb24gOiAKKyAgICAvLyBzaG91bGQgaXQgPworICAgIHRyeSB7IAorICAgICAg
d2luZG93Lm9wZW4oImZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIik7
CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgIG9rKHRydWUsICJ3aW5kb3cub3BlbiB0aHJl
dyBhIEpTIGV4Y2VwdGlvbiBhbmQgd2FzIG5vdCBhbGxvd2VkIik7CisgICAgfQorCisgICAgLy8g
UkVWSUVXIDogd2luZG93LnNob3dNb2RhbERpYWxvZyBpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB0
aHJvd3MgYW4gZXhjZXB0aW9uIDogCisgICAgLy8gc2hvdWxkIGl0ID8KKyAgICB0cnkgeworICAg
ICAgd2luZG93LnNob3dNb2RhbERpYWxvZygiZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRv
d19mYWlsLmh0bWwiKTsgCisgICAgfSBjYXRjaChlcnJvcikgeworICAgICAgb2sodHJ1ZSwgIndp
bmRvdy5zaG93TW9kYWxEaWFsb2cgdGhyZXcgYSBKUyBleGNlcHRpb24gYW5kIHdhcyBub3QgYWxs
b3dlZCIpOworICAgIH0KKyAgfSAgICAKKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZm
KCkiPgorICBJIGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1l
LW9yaWdpbiIKKyAgCisgIDxhIGhyZWY9ImZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3df
ZmFpbC5odG1sIiB0YXJnZXQ9Il9ibGFuayIgaWQ9InRhcmdldF9ibGFuayI+b3BlbiB3aW5kb3c8
L2E+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjUuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2NfaWY1Lmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBFIEhUTUw+Cis8
aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZv
ciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+ICAgICAKKyAgPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRl
c3QvdGVzdC5jc3MiLz4KKyAgCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVzYykgeyAKKyAgICB3aW5kb3cucGFyZW50Lm9r
X3dyYXBwZXIocmVzdWx0LCBkZXNjKTsKKyAgfSAgCis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0i
ZG9TdHVmZigpIj4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNhbWUtb3JpZ2lu
IgorICAKKyAgPGEgaHJlZiA9ICdqYXZhc2NyaXB0Om9rKGZhbHNlLCAiZG9jdW1lbnRzIHNhbmRi
b3hlZCB3aXRob3V0IGFsbG93LXNjcmlwdHMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHJ1biBzY3Jp
cHQgd2l0aCBqYXZhc2NyaXB0OiBVUkxzIik7JyBpZD0nYV9saW5rJz5jbGljayBtZTwvYT4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2ZhaWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZmFp
bC5qcwpAQCAtMCwwICsxLDEgQEAKK29rKGZhbHNlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRo
IGFsbG93LXNjcmlwdHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIHJ1biA8c2NyaXB0IHNyYz0uLi4+
Iik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5odG1sCkBAIC0wLDAgKzEsMTkg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRm
LTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlw
ZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVU
ZXN0LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2Nz
cyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKworPGJvZHkg
b25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIHNob3VsZCBOT1QgYmUgbG9hZGVkIGJ5IGEgZm9ybSBz
dWJtaXQgZnJvbSBhIHNhbmRib3ggd2l0aG91dCAnYWxsb3ctZm9ybXMnCis8L2JvZHk+Cis8L2h0
bWw+CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgd2luZG93LnRvcC5w
b3N0TWVzc2FnZSh7b2s6IGZhbHNlLCBkZXNjOiAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRob3V0
IGFsbG93LWZvcm1zIHNob3VsZCBOT1QgYmUgYWJsZSB0byBzdWJtaXQgZm9ybXMifSwgIioiKTsK
KyAgfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5o
dG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1f
cGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1sCkBA
IC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEg
Y2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+Cisg
IDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxl
VGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0
eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVh
ZD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIHNob3VsZCBiZSBsb2FkZWQgYnkg
YSBmb3JtIHN1Ym1pdCBmcm9tIGEgc2FuZGJveCB3aXRoICdhbGxvdy1mb3JtcycKKzwvYm9keT4K
KzwvaHRtbD4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICB3aW5kb3cu
dG9wLnBvc3RNZXNzYWdlKHtvazogdHJ1ZSwgZGVzYzogImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0
aCBhbGxvdy1mb3JtcyBzaG91bGQgYmUgYWJsZSB0byBzdWJtaXQgZm9ybXMifSwgIioiKTsKKyAg
fQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93X2Zh
aWwuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9v
cGVuX3dpbmRvd19mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAor
KysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93
aW5kb3dfZmFpbC5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVn
IDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIg
c3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4KKzwvaGVhZD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIHNo
b3VsZCBOT1QgYmUgb3BlbmVkIGJ5IGEgc2FuZGJveGVkIGlmcmFtZSB2aWEgYW55IG1ldGhvZAor
PC9ib2R5PgorPC9odG1sPgorCis8c2NyaXB0PgorICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAg
IGNvbnNvbGUubG9nKCJmaWxlX2lmcmFtZV9zYW5kYm94X3dpbmRvd19vcGVuX2ZhaWwuaHRtbCIp
OworICAgIHdpbmRvdy5vcGVuZXIub2soZmFsc2UsICJzYW5kYm94ZWQgZG9jdW1lbnRzIHNob3Vs
ZCBOT1QgYmUgYWJsZSB0byBvcGVuIHdpbmRvd3MiKTsKKyAgICBzZWxmLmNsb3NlKCk7CisgIH0K
Kzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNzLmpzIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3Bhc3MuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcwpAQCAtMCwwICsxLDEgQEAKK29rKHRydWUsICJk
b2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0cyBzaG91bGQgYmUgYWJsZSB0byBy
dW4gPHNjcmlwdCBzcmM9Li4uPiIpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9nZW5l
cmFsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hf
Z2VuZXJhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbApA
QCAtMCwwICsxLDEzOSBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPCEtLQ0KK2h0dHBz
Oi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNA0KK0ltcGxlbWVu
dCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAtIGdlbmVyYWwgdGVzdHMNCist
LT4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZv
ciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNj
cmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4NCisg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2
ZW50VXRpbHMuanMiPjwvc2NyaXB0Pg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0
ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQor
PHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCisvKiogVGVzdCBmb3IgQnVn
IDM0MTYwNCAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAt
IGdlbmVyYWwgdGVzdHMgKiovDQorDQorLy8gYSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRoYXQgaXMg
dXNlZCBieSBzYW5kYm94ZWQgaWZyYW1lcyB3aXRob3V0DQorLy8gJ2FsbG93LXNhbWUtb3JpZ2lu
JyB0byBjb21tdW5pY2F0ZSBwYXNzL2ZhaWwgYmFjayB0byB0aGlzIG1haW4gcGFnZS4NCisvLyBp
dCBleHBlY3RzIHRvIGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCBsaWtlIHtvazogdHJ1ZS9mYWxz
ZSwgZGVzYzoNCisvLyA8ZGVzY3JpcHRpb24gb2YgdGhlIHRlc3Q+IHdoaWNoIGl0IHRoZW4gZm9y
d2FyZHMgdG8gb2soKQ0KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2
ZU1lc3NhZ2UsIGZhbHNlKTsNCisNCitmdW5jdGlvbiByZWNlaXZlTWVzc2FnZShldmVudCkNCit7
DQorICBva193cmFwcGVyKGV2ZW50LmRhdGEub2ssIGV2ZW50LmRhdGEuZGVzYyk7DQorfQ0KKw0K
K3ZhciBjb21wbGV0ZWRUZXN0cyA9IDA7DQordmFyIHBhc3NlZFRlc3RzID0gMDsNCisNCitmdW5j
dGlvbiBva193cmFwcGVyKHJlc3VsdCwgZGVzYykgew0KKyAgb2socmVzdWx0LCBkZXNjKTsNCisN
CisgIGNvbXBsZXRlZFRlc3RzKys7DQorDQorICBpZiAocmVzdWx0KSB7DQorICAgIHBhc3NlZFRl
c3RzKys7DQorICB9DQorDQorICAvL2NvbnNvbGUubG9nKCJDT01QTEVURUQgOiAiICsgY29tcGxl
dGVkVGVzdHMgKyAiIFBBU1NFRCA6ICIgKyBwYXNzZWRUZXN0cyk7DQorICAvL2NvbnNvbGUubG9n
KCJSRVNVTFQgOiAiICsgcmVzdWx0ICsgIiBERVNDIDogIiArIGRlc2MpOw0KKw0KKyAgLy8gUkVW
SUVXIDogaWYgb25lIG9mIHRoZXNlIHRlc3RzIGZhaWxzIGFuZCB0aGlzIGlzbid0IGNhbGxlZA0K
KyAgLy8gdGhpcyBtZWFucyB0aGlzIHRlc3Qgd2lsbCBoYW5nIHVudGlsIHRoZSB0aW1lIG91dCBo
YXBwZW5zIDooDQorICAvLyBhZHZpY2Ugb24gYmV0dGVyIHdheXMgdG8gc3luY2hyb25pemUgdGhp
bmdzIGFwcHJlY2lhdGVkICENCisgIGlmIChjb21wbGV0ZWRUZXN0cyA9PSA5KSB7DQorICAgIG9r
KHBhc3NlZFRlc3RzID09IDksICJUaGVyZSBhcmUgOSBnZW5lcmFsIHRlc3RzIHRoYXQgc2hvdWxk
IHBhc3MiKTsNCisgICAgU2ltcGxlVGVzdC5maW5pc2goKTsNCisgIH0NCit9DQorDQorZnVuY3Rp
b24gZG9UZXN0KCkgew0KKyAgU2ltcGxlVGVzdC53YWl0Rm9yRXhwbGljaXRGaW5pc2goKTsNCisN
CisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAxKSB0ZXN0IHRoYXQgaW5saW5lIHNjcmlwdHMg
KDxzY3JpcHQ+KSBjYW4gcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2Ny
aXB0cyINCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3aGlj
aCBoYXMgJ2FsbG93LXNjcmlwdHMnKQ0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDIp
IHRlc3QgdGhhdCA8c2NyaXB0IHNyYz0uLi4+IGNhbiBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hl
ZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQorDQorICAvLyBwYXNzZXMg
aWYgZ29vZA0KKyAgLy8gMykgdGVzdCB0aGF0IHNjcmlwdCBpbiBhbiBldmVudCBsaXN0ZW5lciAo
b25sb2FkKSBjYW4gcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0
cyINCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3aGljaCBo
YXMgJ2FsbG93LXNjcmlwdHMnKQ0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDQpIHRl
c3QgdGhhdCBzY3JpcHQgaW4gYW4gamF2YXNjcmlwdDp1cmwgY2FuIHJ1biBpbiBhbiBpZnJhbWUg
c2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFt
ZV9zYW5kYm94X2NfaWYxLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJykNCisNCisgIC8v
IGZhaWxzIGlmIGJhZA0KKyAgLy8gNSkgdGVzdCB0aGF0IGlubGluZSBzY3JpcHRzIGNhbm5vdCBy
dW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8g
KGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94
PScnKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA2KSB0ZXN0IHRoYXQgPHNjcmlwdCBz
cmM9Li4uPiBjYW5ub3QgcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ct
c2NyaXB0cyINCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCB3
aGljaCBoYXMgc2FuZGJveD0nJykNCisgIA0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA3KSB0
ZXN0IHRoYXQgc2NyaXB0IGluIGFuIGV2ZW50IGxpc3RlbmVyIChvbmxvYWQpIGNhbm5vdCBydW4g
aW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRv
bmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94PScn
KQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA4KSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFu
IGphdmFzY3JpcHQ6dXJsIGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0
ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lm
XzUuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0nYWxsb3ctc2FtZS1vcmlnaW4nKQ0KKyAgdmFyIGlm
X3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfNScpLmNvbnRlbnRXaW5kb3c7DQorICBz
ZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FfbGluaycsIGlmX3cpOw0KKw0KKyAgLy8g
cGFzc2VzIGlmIGdvb2QNCisgIC8vIDcpIHRlc3QgdGhhdCBhIG5ldyBpZnJhbWUgaGFzIHNhbmRi
b3ggYXR0cmlidXRlDQorICB2YXIgaWZyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1l
Iik7DQorICBva193cmFwcGVyKCJzYW5kYm94IiBpbiBpZnIsICJhIG5ldyBpZnJhbWUgc2hvdWxk
IGhhdmUgYSBzYW5kYm94IGF0dHJpYnV0ZSIpOw0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisg
IC8vIDgpIHRlc3QgdGhhdCB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgaXMgYSBET01TZXR0YWJsZVRv
a2VuTGlzdA0KKyAgb2tfd3JhcHBlcihpZnIuc2FuZGJveCBpbnN0YW5jZW9mIERPTVNldHRhYmxl
VG9rZW5MaXN0LCAic2FuZGJveCBhdHRyaWJ1dGUgc2hvdWxkIGJlIGEgRE9NU2V0dGFibGUgVG9r
ZW4gTGlzdCIpOw0KKyAgDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gOSkgdGVzdCB0aGF0
IGEgc2FuZGJveGVkIGlmcmFtZSB3aXRoICdhbGxvdy1mb3JtcycgY2FuIHN1Ym1pdCBmb3Jtcw0K
KyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIHdoaWNoIGhhcyAn
YWxsb3ctZm9ybXMnIGFuZCAnYWxsb3ctc2NyaXB0cycpDQorICANCisgIC8vIGZhaWxzIGlmIGJh
ZA0KKyAgLy8gMTApIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aG91dCAnYWxsb3ct
Zm9ybXMnIGNhbiBOT1Qgc3VibWl0IGZvcm1zIA0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIG9ubHkgaGFzICdhbGxvdy1zY3JpcHRzJykNCisgDQor
ICAvLyBSRVZJRVcgOiBhcmUgdGhlcmUgb3RoZXIgd2F5cyBvZiBvcGVuaW5nIG5ldyB3aW5kb3dz
IHRoYXQgdGhlIDMgYmVsb3cgdGhhdCBhcmUgbWVudGlvbmVkIGluIHRoZSBIVE1MNQ0KKyAgLy8g
c3BlYyA/IA0KKyAgDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDExKSB0ZXN0IHRoYXQgYSBz
YW5kYm94ZWQgaWZyYW1lIGNhbid0IG9wZW4gYSBuZXcgd2luZG93IHVzaW5nIHRoZSB0YXJnZXQu
YXR0cmlidXRlDQorICAvLyB0aGlzIGlzIGRvbmUgdmlhIGZpbGVfaWZyYW1lX2NfaWY0Lmh0bWwg
d2hpY2ggaXMgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlwdHMiIGFuZCAiYWxsb3ctc2FtZS1v
cmlnaW4iDQorICAvLyB0aGUgd2luZG93IGl0IGF0dGVtcHRzIHRvIG9wZW4gY2FsbHMgd2luZG93
Lm9wZW5lci5vayhmYWxzZSwgLi4uKSBhbmQgZmlsZV9pZnJhbWVfY19pZjQuaHRtbCBoYXMgYW4g
b2soKQ0KKyAgLy8gZnVuY3Rpb24gdGhhdCBjYWxscyB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIg
DQorICANCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAxMikgdGVzdCB0aGF0IGEgc2FuZGJv
eGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdpbmRvdyB1c2luZyB3aW5kb3cub3Blbg0KKyAg
Ly8gdGhpcyBpcyBkb25lIHZpYSBmaWxlX2lmcmFtZV9jX2lmNC5odG1sIHdoaWNoIGlzIHNhbmRi
b3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIiBhbmQgImFsbG93LXNhbWUtb3JpZ2luIg0KKyAgLy8g
dGhlIHdpbmRvdyBpdCBhdHRlbXB0cyB0byBvcGVuIGNhbGxzIHdpbmRvdy5vcGVuZXIub2soZmFs
c2UsIC4uLikgYW5kIGZpbGVfaWZyYW1lX2NfaWY0Lmh0bWwgaGFzIGFuIG9rKCkNCisgIC8vIGZ1
bmN0aW9uIHRoYXQgY2FsbHMgd2luZG93LnBhcmVudC5va193cmFwcGVyDQorICANCisgIC8vIHBh
c3NlcyBpZiBnb29kDQorICAvLyAxMykgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4n
dCBvcGVuIGEgbmV3IHdpbmRvdyB1c2luZyB3aW5kb3cuU2hvd01vZGFsRGlhbG9nDQorICAvLyB0
aGlzIGlzIGRvbmUgdmlhIGZpbGVfaWZyYW1lX2NfaWY0Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVk
IHdpdGggImFsbG93LXNjcmlwdHMiIGFuZCAiYWxsb3ctc2FtZS1vcmlnaW4iDQorICAvLyB0aGUg
d2luZG93IGl0IGF0dGVtcHRzIHRvIG9wZW4gY2FsbHMgd2luZG93Lm9wZW5lci5vayhmYWxzZSwg
Li4uKSBhbmQgZmlsZV9pZnJhbWVfY19pZjQuaHRtbCBoYXMgYW4gb2soKQ0KKyAgLy8gZnVuY3Rp
b24gdGhhdCBjYWxscyB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXINCit9DQorPC9zY3JpcHQ+DQor
PGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+DQorPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBz
Oi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNCI+TW96aWxsYSBC
dWcgMzQxNjA0PC9hPiAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZS
QU1Fcw0KKzxwIGlkPSJkaXNwbGF5Ij48L3A+DQorPGRpdiBpZD0iY29udGVudCI+DQorPGlmcmFt
ZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMSIgc3Jj
PSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+
PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSIiIGlkPSJpZl8yIiBzcmM9ImZpbGVfaWZyYW1l
X3NhbmRib3hfY19pZjIuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8
aWZyYW1lIHNhbmRib3g9ImFsbG93LWZvcm1zIGFsbG93LXNjcmlwdHMiIGlkPSJpZl8zIiBzcmM9
ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48
L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXNjcmlw
dHMiIGlkPSJpZl80IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbCIgaGVpZ2h0
PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUt
b3JpZ2luIiBpZD0iaWZfNSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwiIGhl
aWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPC9kaXY+DQorPC9ib2R5Pg0KKzwvaHRt
bD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>613831</attachid>
            <date>2012-04-10 17:22:10 -0700</date>
            <delta_ts>2012-04-17 23:11:13 -0700</delta_ts>
            <desc>WIP - iframe sandbox v10</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>57159</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNGRiMTI5MmJlNzYwYzRkZGM2MzJkYmY4ZjVk
NjlkNzM4NDBiOWNlMgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0
aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMv
bnNDb250ZW50VXRpbHMuaApAQCAtODI5LDE2ICs4MjksMjcgQEAgcHVibGljOgogICAvKioKICAg
ICogR2V0IHRoZSBsb2NhbGl6ZWQgc3RyaW5nIG5hbWVkIHxhS2V5fCBpbiBwcm9wZXJ0aWVzIGZp
bGUgfGFGaWxlfC4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBHZXRMb2NhbGl6ZWRTdHJpbmco
UHJvcGVydGllc0ZpbGUgYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogYUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc1hQSURMU3RyaW5nJiBhUmVzdWx0KTsKIAogICAvKioKKyAgICogQSBoZWxwZXIgZnVuY3Rp
b24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAg
ICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1
c2VkIGludGVybmFsbHkuCisgICAqCisgICAqIEBwYXJhbSBhQXR0cmlidXRlIAl0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisgICAqIEByZXR1cm4gCQkJdGhlIHNldCBvZiBmbGFn
cworICAgKi8KKyAgc3RhdGljIFBSVWludDMyIFBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Mo
Y29uc3QgbnNBU3RyaW5nJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNhbmRib3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBw
YXJhbWV0ZXJzIGdpdmVuKSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAg
ICogcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5z
cmVzdWx0IEZvcm1hdExvY2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQ
YXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIg
YVBhcmFtc0xlbmd0aCwKQEAgLTE5MzIsNDIgKzE5NDMsNDQgQEAgcHVibGljOgogICAgKiBmcm9t
IHRoZSBkb2N1bWVudCBpdCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVS
SUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAK
ICAgLyoqCiAgICAqIFNldCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUg
Z2l2ZW4gY2hhbm5lbCwgaWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2Yg
YUNoYW5uZWwuICBhUHJpbmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJv
dXRCbGFuayBpcyB0cnVlLCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmlu
Y2lwYWwgc2V0IHVwIG9uIGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBp
dC4gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9u
IHRoZSBjaGFubmVsLCBldmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAg
ICogZnJvbSB0aGUgY2hhbm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRo
ZSBwcmluY2lwYWwgd2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwu
CiAgICAqLwogICBzdGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFM
b2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFu
bmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBh
VVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0
QmxhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFi
b3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3du
ZXIgPSBmYWxzZSk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBh
QmluYXJ5RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNl
NjRTdHJpbmcpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFz
Y2lpU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRh
KTsKIAogICAvKiogSWYgYUpTQXJyYXkgaXMgYSBKYXZhc2NyaXB0IGFycmF5LCB0aGlzIG1ldGhv
ZCBpdGVyYXRlcyBvdmVyIGl0cwogICAgKiAgZWxlbWVudHMgYW5kIGFwcGVuZHMgdmFsdWVzIHRv
IGFSZXRWYWwgYXMgbnNJQXRvbXMuCiAgICAqICBAdGhyb3cgTlNfRVJST1JfSUxMRUdBTF9WQUxV
RSBpZiBhSlNBcnJheSBpc24ndCBhIEpTIGFycmF5LgogICAgKi8gCiAgIHN0YXRpYyBuc3Jlc3Vs
dCBKU0FycmF5VG9BdG9tQXJyYXkoSlNDb250ZXh0KiBhQ3gsIGNvbnN0IEpTOjpWYWx1ZSYgYUpT
QXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01BcnJheTxu
c0lBdG9tPiYgYVJldFZhbCk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5w
dXQgZWxlbWVudCBwYXNzZWQgaW4gcGFyYW1ldGVyIGhhcyB0aGUgYXV0b2NvbXBsZXRlCi0gICAq
IGZ1bmN0aW9ubmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZv
cm0gb3duZXIuCisgICAqIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8g
YWNjb3VudCB0aGUgZm9ybSBvd25lci4KICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFr
ZSBzdXJlIGF1dG9jb21wbGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0
eXBlLgogICAgKgogICAgKiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNr
LiBOT1RFOiBhSW5wdXQgY2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBp
bnB1dCBlbGVtZW50IGhhcyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBi
b29sIElzQXV0b2NvbXBsZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQp
OwogCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmggYi9jb250
ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9u
c0lEb2N1bWVudC5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaApAQCAt
MTIwLDE5ICsxMjAsMTggQEAgY2xhc3MgTG9hZGVyOwogCiBuYW1lc3BhY2UgZG9tIHsKIGNsYXNz
IExpbms7CiBjbGFzcyBFbGVtZW50OwogfSAvLyBuYW1lc3BhY2UgZG9tCiB9IC8vIG5hbWVzcGFj
ZSBtb3ppbGxhCiAKICNkZWZpbmUgTlNfSURPQ1VNRU5UX0lJRCBcCi17IDB4OGU1MWU2ZDksIDB4
OTE0ZCwgMHg0NmJhLCBcCi0gIHsgMHhiMywgMHgxMSwgMHgyZiwgMHgyNywgMHgzZCwgMHhlNiwg
MHgwZCwgMHgxOSB9IH0KLQoreyAweDU3ZmU0NGFlLCAweDY2NTYsIDB4NDRiOCwgXAorICB7IDB4
OGQsIDB4YzAsIDB4ZmMsIDB4YTcsIDB4NDMsIDB4MjgsIDB4YmUsIDB4ODYgfSB9CiAKIC8vIEZs
YWcgZm9yIEFkZFN0eWxlU2hlZXQoKS4KICNkZWZpbmUgTlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFM
T0cgICAgICAgICAgICAgICAgKDEgPDwgMCkKIAogLy8gRW51bSBmb3IgcmVxdWVzdGluZyBhIHBh
cnRpY3VsYXIgdHlwZSBvZiBkb2N1bWVudCB3aGVuIGNyZWF0aW5nIGEgZG9jCiBlbnVtIERvY3Vt
ZW50Rmxhdm9yIHsKICAgRG9jdW1lbnRGbGF2b3JMZWdhY3lHdWVzcywgLy8gY29tcGF0IHdpdGgg
b2xkIGNvZGUgdW50aWwgbWFkZSBIVE1MNS1jb21wbGlhbnQKICAgRG9jdW1lbnRGbGF2b3JIVE1M
LCAvLyBIVE1MRG9jdW1lbnQgd2l0aCBIVE1MbmVzcyBiaXQgc2V0IHRvIHRydWUKQEAgLTQ2MCwx
NyArNDU5LDI2IEBAIHB1YmxpYzoKICAgICogY2FsbGVycyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBh
Y3Rpb24gYXMgbmVlZGVkIGlmIHRoZXkgd2FudCB0aGlzCiAgICAqIGNoYW5nZSB0byBhY3R1YWxs
eSBjaGFuZ2UgYW55dGhpbmcgaW1tZWRpYXRlbHkuCiAgICAqIEBzZWUgbnNCaWRpVXRpbHMuaAog
ICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9ucyhQUlVpbnQzMiBhQmlkaU9wdGlvbnMpCiAgIHsK
ICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9wdGlvbnM7CiAgIH0KLSAgCisKKyAgLyoqCisgICAq
IEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4KKyAgICogQHNlZSBuc1Nh
bmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIFNh
bmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAgfQor
CiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxzbyBnZXQg
c2V0IGZyb20gb3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncykuCiAgICAq
LwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmllbGQsIG5z
QVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRlckRhdGEo
bnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7CiAKICAg
LyoqCkBAIC0xODQ4LDE2ICsxODU2LDIxIEBAIHByb3RlY3RlZDoKICAgLy8gSWYgbUlzU3RhdGlj
RG9jdW1lbnQgaXMgdHJ1ZSwgbU9yaWdpbmFsRG9jdW1lbnQgcG9pbnRzIHRvIHRoZSBvcmlnaW5h
bAogICAvLyBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IG1PcmlnaW5hbERvY3Vt
ZW50OwogCiAgIC8vIFRoZSBiaWRpIG9wdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQuICBXaGF0IHRo
aXMgYml0ZmllbGQgbWVhbnMgaXMKICAgLy8gZGVmaW5lZCBpbiBuc0JpZGlVdGlscy5oCiAgIFBS
VWludDMyIG1CaWRpT3B0aW9uczsKIAorICAvLyBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9j
dW1lbnQuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSBv
ZiB0aGUKKyAgLy8gYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNvbnRlbnQs
IGlmIGV4aXN0ZW50LiBUaGVzZSBhcmUgc2V0IGF0IGxvYWQgdGltZSBhbmQKKyAgLy8gYXJlIGlt
bXV0YWJsZSAtIHNlZSBuc1NhbmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MuCisg
IFBSVWludDMyIG1TYW5kYm94RmxhZ3M7CisKICAgbnNDU3RyaW5nIG1Db250ZW50TGFuZ3VhZ2U7
CiBwcml2YXRlOgogICBuc0NTdHJpbmcgbUNvbnRlbnRUeXBlOwogcHJvdGVjdGVkOgogCiAgIC8v
IFRoZSBkb2N1bWVudCdzIHNlY3VyaXR5IGluZm8KICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IG1T
ZWN1cml0eUluZm87CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRp
bHMuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKLS0tIGEvY29udGVu
dC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0Nv
bnRlbnRVdGlscy5jcHAKQEAgLTIwOSwxNiArMjA5LDE3IEBAIHN0YXRpYyBOU19ERUZJTkVfQ0lE
KGtYVEZTZXJ2aWNlQ0lELCBOU18KICNpbmNsdWRlICJtb3ppbGxhL0Jhc2U2NC5oIgogI2luY2x1
ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJuc0RPTU11dGF0aW9uT2JzZXJ2
ZXIuaCIKIAogI2luY2x1ZGUgIm5zV3JhcHBlckNhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIm5z
SURPTURvY3VtZW50VHlwZS5oIgogI2luY2x1ZGUgIm5zSURPTVdpbmRvd1V0aWxzLmgiCiAjaW5j
bHVkZSAibnNDaGFyU2VwYXJhdGVkVG9rZW5pemVyLmgiCisjaW5jbHVkZSAibnNTYW5kYm94Rmxh
Z3MuaCIKIAogZXh0ZXJuICJDIiBpbnQgTU9aX1hNTFRyYW5zbGF0ZUVudGl0eShjb25zdCBjaGFy
KiBwdHIsIGNvbnN0IGNoYXIqIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhcioqIG5leHQsIFBSVW5pY2hhciogcmVzdWx0KTsKIGV4dGVybiAiQyIg
aW50IE1PWl9YTUxDaGVja1FOYW1lKGNvbnN0IGNoYXIqIHB0ciwgY29uc3QgY2hhciogZW5kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5zX2F3YXJlLCBjb25zdCBjaGFy
KiogY29sb24pOwogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNpbmcgbmFtZXNw
YWNlIG1vemlsbGE6OmxheWVyczsKQEAgLTkxNywxNiArOTE4LDYyIEBAIG5zQ29udGVudFV0aWxz
OjpHZXRQYXJzZXJTZXJ2aWNlKCkKICAgICBuc3Jlc3VsdCBydiA9IENhbGxHZXRTZXJ2aWNlKGtQ
YXJzZXJTZXJ2aWNlQ0lELCAmc1BhcnNlclNlcnZpY2UpOwogICAgIGlmIChOU19GQUlMRUQocnYp
KSB7CiAgICAgICBzUGFyc2VyU2VydmljZSA9IG5zbnVsbDsKICAgICB9CiAgIH0KIAogICByZXR1
cm4gc1BhcnNlclNlcnZpY2U7CiB9CisvKioKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFy
c2VzIGEgc2FuZGJveCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgKiBhIENTUCBkaXJl
Y3RpdmUpIGFuZCBjb252ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxs
eS4KKyAqCisgKiBAcGFyYW0gYUF0dHJpYnV0ZSAgICB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3gg
YXR0cmlidXRlCisgKiBAcmV0dXJuICAgICAgICAgICAgICB0aGUgc2V0IG9mIGZsYWdzCisgKi8K
K1BSVWludDMyCituc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhj
b25zdCBuc0FTdHJpbmcmIHNhbmRib3hBdHRyVmFsdWUpCit7CisgIC8vIElmIHRoZXJlJ3MgYSBz
YW5kYm94IGF0dHJpYnV0ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBpZiB0aGlzIGlzIGJlaW5nCisg
IC8vIGNhbGxlZCksIHN0YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0aGUgcmVzdHJpY3Rpb24gZmxh
Z3MuCisgIFBSVWludDMyIG91dCA9IFNBTkRCT1hFRF9OQVZJR0FUSU9OIHwKKyAgICBTQU5EQk9Y
RURfVE9QTEVWRUxfTkFWSUdBVElPTiB8CisgICAgU0FOREJPWEVEX1BMVUdJTlMgfCBTQU5EQk9Y
RURfT1JJR0lOIHwKKyAgICBTQU5EQk9YRURfRk9STVMgfCBTQU5EQk9YRURfU0NSSVBUUyB8Cisg
ICAgU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUzsKKworICBpZiAoIXNhbmRib3hBdHRyVmFs
dWUuSXNFbXB0eSgpKSB7CisgICAgLy8gVGhlIHNlcGFyYXRvciBvcHRpb25hbCBmbGFnIGlzIHVz
ZWQgYmVjYXVzZSB0aGUgSFRNTDUgc3BlYyBzYXlzIGFueQorICAgIC8vIHdoaXRlc3BhY2UgaXMg
b2sgYXMgYSBzZXBhcmF0b3IsIHdoaWNoIGlzIHdoYXQgdGhpcyBkb2VzLgorICAgIEhUTUxTcGxp
dE9uU3BhY2VzVG9rZW5pemVyIHRva2VuaXplcihzYW5kYm94QXR0clZhbHVlLCAnICcsCisgICAg
ICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXJUZW1wbGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1M
V2hpdGVzcGFjZT46OlNFUEFSQVRPUl9PUFRJT05BTCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVy
Lmhhc01vcmVUb2tlbnMoKSkgeworICAgICAgbnNEZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0
b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKyAgICAgIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNM
aXRlcmFsKCJhbGxvdy1zY3JpcHRzIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfU0NS
SVBUUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxs
b3ctc2FtZS1vcmlnaW4iKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9PUklHSU47Cisg
ICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LWZvcm1z
IikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfRk9STVM7CisgICAgICB9IGVsc2UgaWYg
KHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNjcmlwdHMiKSkgeworICAgICAg
ICAvLyBhbGxvdy1zY3JpcHRzIHJlbW92ZXMgYm90aCBTQU5EQk9YRURfU0NSSVBUUyBhbmQKKyAg
ICAgICAgLy8gU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUy4KKyAgICAgICAgb3V0ICY9IH5T
QU5EQk9YRURfU0NSSVBUUzsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfQVVUT01BVElDX0ZF
QVRVUkVTOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJh
bGxvdy10b3AtbmF2aWdhdGlvbiIpKSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX1RPUExF
VkVMX05BVklHQVRJT047CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIG91dDsKK30K
IAogI2lmZGVmIE1PWl9YVEYKIG5zSVhURlNlcnZpY2UqCiBuc0NvbnRlbnRVdGlsczo6R2V0WFRG
U2VydmljZSgpCiB7CiAgIGlmICghc1hURlNlcnZpY2UpIHsKICAgICBuc3Jlc3VsdCBydiA9IENh
bGxHZXRTZXJ2aWNlKGtYVEZTZXJ2aWNlQ0lELCAmc1hURlNlcnZpY2UpOwogICAgIGlmIChOU19G
QUlMRUQocnYpKSB7CkBAIC02MzgxLDE3ICs2NDI4LDE4IEBAIG5zQ29udGVudFV0aWxzOjpVUklJ
bmhlcml0c1NlY3VyaXR5Q29udGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJlc3Vs
dCk7CiB9CiAKIC8vIHN0YXRpYwogYm9vbAogbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93
bmVyKG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lcikKIHsKICAgLy8KICAgLy8gU2V0IHRoZSBv
d25lciBvZiB0aGUgY2hhbm5lbCwgYnV0IG9ubHkgZm9yIGNoYW5uZWxzIHRoYXQgY2FuJ3QKICAg
Ly8gcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dC4KICAgLy8KICAgLy8gWFhYOiBJ
dCBzZWVtcyB3cm9uZyB0aGF0IHRoZSBvd25lciBpcyBpZ25vcmVkIC0gZXZlbiBpZiBvbmUgaXMK
ICAgLy8gICAgICBzdXBwbGllZCkgdW5sZXNzIHRoZSBVUkkgaXMgamF2YXNjcmlwdCBvciBkYXRh
IG9yIGFib3V0OmJsYW5rLgogICAvLyBYWFg6IElmIHRoaXMgaXMgZXZlciBjaGFuZ2VkLCBjaGVj
ayBhbGwgY2FsbGVycyBmb3Igd2hhdCBvd25lcnMKQEAgLTYzOTksMjMgKzY0NDcsMjcgQEAgbnND
b250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaQogICAvLyAgICAgIGNvbW1lbnRz
IGluIG5zRG9jU2hlbGw6OkxvYWRVUkkgd2hlcmUgd2UgZmFsbCBiYWNrIG9uCiAgIC8vICAgICAg
aW5oZXJpdGluZyB0aGUgb3duZXIgaWYgY2FsbGVkIGZyb20gY2hyb21lLiAgVGhhdCB3b3VsZCBi
ZQogICAvLyAgICAgIHZlcnkgd3JvbmcgaWYgdGhpcyBjb2RlIGNoYW5nZWQgYW55dGhpbmcgYnV0
IGNoYW5uZWxzIHRoYXQKICAgLy8gICAgICBjYW4ndCBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0
eSBjb250ZXh0IQogICAvLwogICAvLyAgICAgIChDdXJyZW50bHkgY2hyb21lIFVSSXMgc2V0IHRo
ZSBvd25lciB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQhCiAgIC8vICAgICAgU28gc2V0dGluZyBhIE5V
TEwgb3duZXIgd291bGQgYmUgYmFkISkKICAgLy8KKyAgLy8gSWYgYUZvcmNlT3duZXIgaXMgdHJ1
ZSwgdGhlIG93bmVyIHdpbGwgYmUgc2V0LCBldmVuIGZvciBhIGNoYW5uZWwgdGhhdAorICAvLyBj
YW4gcHJvdmlkZSBpdHMgb3duIHNlY3VyaXR5IGNvbnRleHQuIFRoaXMgaXMgdXNlZCBmb3IgdGhl
IEhUTUw1IElGUkFNRQorICAvLyBzYW5kYm94IGF0dHJpYnV0ZSwgc28gd2UgY2FuIGZvcmNlIHRo
ZSBjaGFubmVsIChhbmQgaXRzIGRvY3VtZW50KSB0bworICAvLyBleHBsaWNpdGx5IGhhdmUgYSBu
dWxsIHByaW5jaXBhbC4KICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBlY3QgVVJJSW5oZXJp
dHNTZWN1cml0eUNvbnRleHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAgIC8vIGFib3V0OmJs
YW5rIFVSSSwgc28gZG9uJ3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0aGlzIGNhbGwgZmFp
bHMuCiAgIC8vIFRoaXMgY29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBvbmUgaW4gbnNEb2NT
aGVsbDo6SW50ZXJuYWxMb2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5nIGZvciB0aGluZ3Mg
dGhhdCB3aWxsIHVzZSB0aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNT
ZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGluaGVyaXQgfHwgKGFT
ZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpIHsKKyAgaWYgKGFG
b3JjZU93bmVyIHx8ICgoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFV
UkksICZpbmhlcml0KSkgJiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5r
ICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSkpIHsKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIo
YUxvYWRpbmdQcmluY2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8KICAgLy8g
ZmlsZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMgaXMgYSBmaWxlOiBs
b2FkIG9wZW5lZCBmcm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVlZApkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNE
b2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAorKysgYi9j
b250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0yNDAyLDE2ICsyNDAyLDI1IEBAIG5z
RG9jdW1lbnQ6OlN0YXJ0RG9jdW1lbnRMb2FkKGNvbnN0IGNoYXIKICAgICBGaW5kQ2hhckluUmVh
ZGFibGUoJzsnLCBzZW1pY29sb24sIGVuZCk7CiAgICAgU2V0Q29udGVudFR5cGVJbnRlcm5hbChT
dWJzdHJpbmcoc3RhcnQsIHNlbWljb2xvbikpOwogICB9CiAKICAgUmV0cmlldmVSZWxldmFudEhl
YWRlcnMoYUNoYW5uZWwpOwogCiAgIG1DaGFubmVsID0gYUNoYW5uZWw7CiAKKyAgLy8gSWYgdGhp
cyBkb2N1bWVudCBpcyBiZWluZyBsb2FkZWQgYnkgYSBkb2NzaGVsbCwgY29weSBpdHMgc2FuZGJv
eCBmbGFncworICAvLyB0byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11dGFibGUgYWZ0ZXIg
YmVpbmcgc2V0IGhlcmUuCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1
ZXJ5SW50ZXJmYWNlKGFDb250YWluZXIpOworCisgIGlmIChkb2NTaGVsbCkgeworICAgIG5zcmVz
dWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNhbmRib3hGbGFncygmbVNhbmRib3hGbGFncyk7CisgICAg
TlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKyAgfQorCiAgIG5zcmVzdWx0IHJ2ID0gSW5pdENT
UCgpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIHJldHVybiBOU19PSzsKIH0K
IAogbnNyZXN1bHQKIG5zRG9jdW1lbnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0IGEvY29udGVudC9i
YXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRl
ci5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAorKysgYi9jb250
ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCkBAIC0xMTIsMTYgKzExMiwxOSBAQAogI2lu
Y2x1ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJl
bmNlcy5oIgogI2luY2x1ZGUgIm1vemlsbGEvdW51c2VkLmgiCiAjaW5jbHVkZSAibW96aWxsYS9k
b20vRWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvbGF5b3V0L1JlbmRlckZyYW1lUGFyZW50
LmgiCiAKICNpbmNsdWRlICJqc2FwaS5oIgogCisjaW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVu
dC5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCisKIHVzaW5nIG5hbWVzcGFjZSBtb3pp
bGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3pp
bGxhOjpsYXllcnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5b3V0OwogdHlwZWRlZiBG
cmFtZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7CiAKIGNsYXNzIG5zQXN5bmNEb2NTaGVsbERlc3Ry
b3llciA6IHB1YmxpYyBuc1J1bm5hYmxlCiB7CkBAIC00NjgsMTYgKzQ3MSw2MCBAQCBuc0ZyYW1l
TG9hZGVyOjpSZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3QgdG8gYmUgc2FmZSwg
cmVjaGVjayB1cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQpOwogICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsTG9hZEluZm8+IGxv
YWRJbmZvOwogICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9BZGRSZWZzKGxvYWRJ
bmZvKSk7CiAgIE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9GQUlMVVJFKTsKIAor
ICAvLyBJcyB0aGlzIGFuIDxpZnJhbWU+IHdpdGggYSBzYW5kYm94IGF0dHJpYnV0ZSBvciBhIHBh
cmVudCB3aGljaCBpcworICAvLyBzYW5kYm94ZWQgPworICBuc0hUTUxJRnJhbWVFbGVtZW50ICog
aWZyYW1lID0KKyAgICBuc0hUTUxJRnJhbWVFbGVtZW50OjpGcm9tQ29udGVudChtT3duZXJDb250
ZW50KTsKKworICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworCisgIGlmIChpZnJhbWUpIHsK
KyAgICBzYW5kYm94RmxhZ3MgPSBpZnJhbWUtPkdldFNhbmRib3hGbGFncygpOworCisgICAgUFJV
aW50MzIgcGFyZW50U2FuZGJveEZsYWdzID0gMDsKKworICAgIC8vIEdldCB0aGUgcGFyZW50J3Mg
c2FuZGJveCBmbGFncywgdGhleSdyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZQorICAgIC8v
IGZyYW1lIGJlaW5nIGxvYWRlZCBuZWVkcyB0byBiZSBzYW5kYm94ZWQuCisgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50RG9jU2hlbGxJdGVtOworICAgIG5zQ09NUHRyPG5z
SURvY1NoZWxsVHJlZUl0ZW0+IGN1ckRvY1NoZWxsSXRlbSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG1E
b2NTaGVsbCk7CisKKyAgICBpZiAoTlNfU1VDQ0VFREVEKGN1ckRvY1NoZWxsSXRlbS0+R2V0UGFy
ZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudERvY1NoZWxsSXRlbSkpKSkgeworICAgICAgbnNDT01Q
dHI8bnNJRG9jdW1lbnQ+IHBhcmVudERvYyA9IGRvX0dldEludGVyZmFjZShwYXJlbnREb2NTaGVs
bEl0ZW0pOworCisgICAgICBpZiAocGFyZW50RG9jKSB7CisgICAgICAgIHBhcmVudFNhbmRib3hG
bGFncyA9IHBhcmVudERvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICB9CisgICAgfQorCisgICAg
aWYgKHNhbmRib3hGbGFncyB8fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgIGlmIChwYXJl
bnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgICAgLy8gVGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0
cmljdGlvbnMsIG5vdCByZW1vdmUgdGhlbS4KKyAgICAgICAgc2FuZGJveEZsYWdzIHw9IHBhcmVu
dFNhbmRib3hGbGFnczsKKyAgICAgIH0KKworICAgICAgbURvY1NoZWxsLT5TZXRTYW5kYm94Rmxh
Z3Moc2FuZGJveEZsYWdzKTsKKworICAgICAgLy8gU2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGlu
ZyBmb3IgcGx1Z2lucyBhcyBzcGVjaWZpZWQuCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FO
REJPWEVEX1BMVUdJTlMpIHsKKyAgICAgICAgbURvY1NoZWxsLT5TZXRBbGxvd1BsdWdpbnMoZmFs
c2UpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIElmIHRoaXMgaXMgYW4gPGlmcmFtZT4g
YW5kIGl0J3Mgc2FuZGJveGVkIHdpdGggcmVzcGVjdCB0byBvcmlnaW4KKyAgLy8gd2Ugd2lsbCBz
ZXQgaXQgdXAgd2l0aCBhIG51bGwgcHJpbmNpcGFsIGxhdGVyIGluIG5zRG9jU2hlbGw6OkRvVVJJ
TG9hZC4KKyAgLy8gV2UgZG8gaXQgdGhlcmUgdG8gY29ycmVjdGx5IHNhbmRib3ggY29udGVudCB0
aGF0IHdhcyBsb2FkZWQgaW50bworICAvLyB0aGUgaWZyYW1lIHZpYSBvdGhlciBtZXRob2RzIHRo
YW4gdGhlIHNyYyBhdHRyaWJ1dGUuCiAgIC8vIFdlJ2xsIHVzZSBvdXIgcHJpbmNpcGFsLCBub3Qg
dGhhdCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRoaXMKICAgLy8gaXMgdmVy
eSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBs
b2FkZWQgaW4KICAgLy8gc3ViZnJhbWVzIQogICBsb2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29u
dGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKIAogICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwog
ICBydiA9IG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRS
ZWZzKHJlZmVycmVyKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0dr
QXRvbUxpc3QuaAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCisrKyBiL2Nv
bnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKQEAgLTkzLDE3ICs5MywyMSBAQCBHS19BVE9N
KGFjdHVhdGUsICJhY3R1YXRlIikKIEdLX0FUT00oYWRkcmVzcywgImFkZHJlc3MiKQogR0tfQVRP
TShhZnRlciwgImFmdGVyIikKIEdLX0FUT00oYWZ0ZXJfZW5kLCAiYWZ0ZXJfZW5kIikKIEdLX0FU
T00oYWZ0ZXJfc3RhcnQsICJhZnRlcl9zdGFydCIpCiBHS19BVE9NKGFsaWduLCAiYWxpZ24iKQog
R0tfQVRPTShhbGluaywgImFsaW5rIikKIEdLX0FUT00oYWxsLCAiYWxsIikKIEdLX0FUT00oYWxs
b3dldmVudHMsICJhbGxvd2V2ZW50cyIpCitHS19BVE9NKGFsbG93Zm9ybXMsICJhbGxvdy1mb3Jt
cyIpCiBHS19BVE9NKGFsbG93bmVnYXRpdmVhc3NlcnRpb25zLCAiYWxsb3duZWdhdGl2ZWFzc2Vy
dGlvbnMiKQorR0tfQVRPTShhbGxvd3NhbWVvcmlnaW4sICJhbGxvdy1zYW1lLW9yaWdpbiIpCitH
S19BVE9NKGFsbG93c2NyaXB0cywgImFsbG93LXNjcmlwdHMiKQorR0tfQVRPTShhbGxvd3RvcG5h
dmlnYXRpb24sICJhbGxvdy10b3AtbmF2aWdhdGlvbiIpCiBHS19BVE9NKGFsbG93dW50cnVzdGVk
LCAiYWxsb3d1bnRydXN0ZWQiKQogR0tfQVRPTShhbHQsICJhbHQiKQogR0tfQVRPTShhbHRlcm5h
dGUsICJhbHRlcm5hdGUiKQogR0tfQVRPTShhbHdheXMsICJhbHdheXMiKQogR0tfQVRPTShhbmNl
c3RvciwgImFuY2VzdG9yIikKIEdLX0FUT00oYW5jZXN0b3JPclNlbGYsICJhbmNlc3Rvci1vci1z
ZWxmIikKIEdLX0FUT00oX2FuZCwgImFuZCIpCiBHS19BVE9NKGFueSwgImFueSIpCkBAIC04Nzgs
MTYgKzg4MiwxNyBAQCBHS19BVE9NKHJvd3NwYW4sICJyb3dzcGFuIikKIEdLX0FUT00ocnAsICJy
cCIpCiBHS19BVE9NKHJ0LCAicnQiKQogR0tfQVRPTShydGwsICJydGwiKQogR0tfQVRPTShydWJ5
LCAicnVieSIpCiBHS19BVE9NKHJ1bGUsICJydWxlIikKIEdLX0FUT00ocnVsZXMsICJydWxlcyIp
CiBHS19BVE9NKHMsICJzIikKIEdLX0FUT00oc2FtcCwgInNhbXAiKQorR0tfQVRPTShzYW5kYm94
LCAic2FuZGJveCIpCiBHS19BVE9NKHNiYXR0ciwgInNiYXR0ciIpCiBHS19BVE9NKHNjYWxlLCAi
c2NhbGUiKQogR0tfQVRPTShzY2FuLCAic2NhbiIpCiBHS19BVE9NKHNjaGVtZSwgInNjaGVtZSIp
CiBHS19BVE9NKHNjb3BlLCAic2NvcGUiKQogR0tfQVRPTShzY29wZWQsICJzY29wZWQiKQogR0tf
QVRPTShzY3JlZW4sICJzY3JlZW4iKQogR0tfQVRPTShzY3JlZW5YLCAic2NyZWVuWCIpCmRpZmYg
LS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmggYi9jb250ZW50L2Jhc2Uv
c3JjL25zU2FuZGJveEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAor
KysgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmgKQEAgLTAsMCArMSw1OCBAQAor
LyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMt
YmFzaWMtb2Zmc2V0OiAyIC0qLSAqLw0KKy8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJq
ZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMNCisgKiBMaWNlbnNlLCB2LiAy
LjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIGZp
bGUsDQorICogWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4w
Ly4gKi8NCisNCisvKg0KKyAqIENvbnN0YW50IGZsYWdzIHRoYXQgZGVzY3JpYmUgaG93IGEgZG9j
dW1lbnQgaXMgc2FuZGJveGVkIGFjY29yZGluZyB0byB0aGUNCisgKiBIVE1MNSBzcGVjLg0KKyAq
Lw0KKw0KKyNpZm5kZWYgbnNTYW5kYm94RmxhZ3NfaF9fXw0KKyNkZWZpbmUgbnNTYW5kYm94Rmxh
Z3NfaF9fXw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2
aWdhdGluZyBicm93c2luZyBjb250ZXh0cyBvdGhlciB0aGFuDQorICogdGhlIHNhbmRib3hlZCBi
cm93c2luZyBjb250ZXh0IGl0c2VsZiAob3IgYnJvd3NpbmcgY29udGV4dHMgZnVydGhlcg0KKyAq
IG5lc3RlZCBpbnNpZGUgaXQpLCBhbmQgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0Lg0K
KyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX05BVklHQVRJT04gID0gMHgxOw0K
Kw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyB0
aGVpciB0b3AtbGV2ZWwgYnJvd3NpbmcNCisgKiBjb250ZXh0Lg0KKyAqLw0KK2NvbnN0IHVuc2ln
bmVkIGxvbmcgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gPSAweDI7DQorDQorLyoqDQor
ICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBpbnN0YW50aWF0aW5nIHBsdWdpbnMs
IHdoZXRoZXIgdXNpbmcgdGhlDQorICogZW1iZWQgZWxlbWVudCwgdGhlIG9iamVjdCBlbGVtZW50
LCB0aGUgYXBwbGV0IGVsZW1lbnQsIG9yIHRocm91Z2gNCisgKiBuYXZpZ2F0aW9uIG9mIGEgbmVz
dGVkIGJyb3dzaW5nIGNvbnRleHQsIHVubGVzcyB0aG9zZSBwbHVnaW5zIGNhbiBiZQ0KKyAqIHNl
Y3VyZWQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfUExVR0lOUyA9IDB4
NDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgZm9yY2VzIGNvbnRlbnQgaW50byBhIHVuaXF1ZSBv
cmlnaW4sIHRodXMgcHJldmVudGluZyBpdCBmcm9tDQorICogYWNjZXNzaW5nIG90aGVyIGNvbnRl
bnQgZnJvbSB0aGUgc2FtZSBvcmlnaW4uDQorICogVGhpcyBmbGFnIGFsc28gcHJldmVudHMgc2Ny
aXB0IGZyb20gcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gdGhlDQorICogZG9jdW1lbnQuY29v
a2llIElETCBhdHRyaWJ1dGUsIGFuZCBibG9ja3MgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4NCisg
Ki8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9PUklHSU4gPSAweDg7DQorDQorLyoq
DQorICogVGhpcyBmbGFnIGJsb2NrcyBmb3JtIHN1Ym1pc3Npb24uDQorICovDQorY29uc3QgdW5z
aWduZWQgbG9uZyBTQU5EQk9YRURfRk9STVMgPSAweDEwOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxh
ZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlvbi4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNB
TkRCT1hFRF9TQ1JJUFRTID0gMHgyMDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIGZl
YXR1cmVzIHRoYXQgdHJpZ2dlciBhdXRvbWF0aWNhbGx5LCBzdWNoIGFzDQorICogYXV0b21hdGlj
YWxseSBwbGF5aW5nIGEgdmlkZW8gb3IgYXV0b21hdGljYWxseSBmb2N1c2luZyBhIGZvcm0gY29u
dHJvbC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVB
VFVSRVMgPSAweDQwOw0KKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwIGIvY29udGVudC9iYXNl
L3NyYy9uc1NjcmlwdExvYWRlci5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExv
YWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAKQEAgLTcw
LDE2ICs3MCwxNyBAQAogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2lu
Y2x1ZGUgInBybG9nLmgiCiAjaW5jbHVkZSAibnNJQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1ZGUg
Im5zQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1ZGUgIm5zQ1JULmgiCiAjaW5jbHVkZSAibnNDb250
ZW50Q3JlYXRvckZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIm5zR2VuZXJpY0VsZW1lbnQuaCIKICNp
bmNsdWRlICJuc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hG
bGFncy5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9GdW5jdGlvblRpbWVyLmgiCiAjaW5jbHVkZSAi
bW96aWxsYS9DT1JTTW9kZS5oIgogCiAjaWZkZWYgUFJfTE9HR0lORwogc3RhdGljIFBSTG9nTW9k
dWxlSW5mbyogZ0NzcFBSTG9nOwogI2VuZGlmCiAKQEAgLTMwNSwxNiArMzA2LDIyIEBAIG5zU2Ny
aXB0TG9hZGVyOjpTdGFydExvYWQobnNTY3JpcHRMb2FkUmUKICAgaWYgKCF3aW5kb3cpIHsKICAg
ICByZXR1cm4gTlNfRVJST1JfTlVMTF9QT0lOVEVSOwogICB9CiAKICAgbnNJRG9jU2hlbGwgKmRv
Y3NoZWxsID0gd2luZG93LT5HZXREb2NTaGVsbCgpOwogCiAgIG5zQ09NUHRyPG5zSUludGVyZmFj
ZVJlcXVlc3Rvcj4gcHJvbXB0ZXIoZG9fUXVlcnlJbnRlcmZhY2UoZG9jc2hlbGwpKTsKIAorICAv
LyBJZiB0aGlzIGRvY3VtZW50IGlzIHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJywg
YWJvcnQuCisgIGlmIChtRG9jdW1lbnQtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQ
VFMpIHsgCisgICAgLy8gUkVWSUVXIDogdGhpcyBwcm9iYWJseSBpc24ndCB0aGUgcmlnaHQgZXJy
b3IuLgorICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICB9CisKICAgLy8g
Y2hlY2sgZm9yIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdG8gcGFzcyBkb3duIHRvIHRoZSBj
aGFubmVsCiAgIC8vIHRoYXQgd2lsbCBiZSBjcmVhdGVkIHRvIGxvYWQgdGhlIHNjcmlwdAogICBu
c0NPTVB0cjxuc0lDaGFubmVsUG9saWN5PiBjaGFubmVsUG9saWN5OwogICBuc0NPTVB0cjxuc0lD
b250ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQcmluY2lw
YWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhy
diwgcnYpOwogICBpZiAoY3NwKSB7CiAgICAgY2hhbm5lbFBvbGljeSA9IGRvX0NyZWF0ZUluc3Rh
bmNlKCJAbW96aWxsYS5vcmcvbnNjaGFubmVscG9saWN5OzEiKTsKQEAgLTY3NCwxNiArNjgxLDIx
IEBAIG5zU2NyaXB0TG9hZGVyOjpQcm9jZXNzU2NyaXB0RWxlbWVudChuc0kKICAgICAgICAgIlRo
ZXJlIGNhbiBiZSBvbmx5IG9uZSBwYXJzZXItYmxvY2tpbmcgc2NyaXB0IGF0IGEgdGltZSIpOwog
ICAgIE5TX0FTU0VSVElPTihtWFNMVFJlcXVlc3RzLklzRW1wdHkoKSwKICAgICAgICAgIlBhcnNl
ci1ibG9ja2luZyBzY3JpcHRzIGFuZCBYU0xUIHNjcmlwdHMgaW4gdGhlIHNhbWUgZG9jISIpOwog
ICAgIG1QYXJzZXJCbG9ja2luZ1JlcXVlc3QgPSByZXF1ZXN0OwogICAgIHJldHVybiB0cnVlOwog
ICB9CiAKICAgLy8gaW5saW5lIHNjcmlwdAorICAvLyBJcyB0aGlzIGRvY3VtZW50IHNhbmRib3hl
ZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJz8KKyAgaWYgKG1Eb2N1bWVudC0+U2FuZGJveEZsYWdz
KCkgJiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIG5z
Q09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3NwOwogICBydiA9IG1Eb2N1bWVudC0+
Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgIE5TX0VOU1VS
RV9TVUNDRVNTKHJ2LCBmYWxzZSk7CiAKICAgaWYgKGNzcCkgewogICAgIFBSX0xPRyhnQ3NwUFJM
b2csIFBSX0xPR19ERUJVRywgKCJOZXcgU2NyaXB0TG9hZGVyIGkgKioqKndpdGggQ1NQKioqKiIp
KTsKICAgICBib29sIGlubGluZU9LOwogICAgIHJ2ID0gY3NwLT5HZXRBbGxvd3NJbmxpbmVTY3Jp
cHQoJmlubGluZU9LKTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlz
dGVuZXJNYW5hZ2VyLmNwcCBiL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5h
Z2VyLmNwcAotLS0gYS9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5j
cHAKKysrIGIvY29udGVudC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCkBA
IC04NCwxNiArODQsMTcgQEAKICNpbmNsdWRlICJuc0RPTVNjcmlwdE9iamVjdEhvbGRlci5oIgog
I2luY2x1ZGUgIm5zRGF0YUhhc2h0YWJsZS5oIgogI2luY2x1ZGUgIm5zQ09NQXJyYXkuaCIKICNp
bmNsdWRlICJuc0V2ZW50TGlzdGVuZXJTZXJ2aWNlLmgiCiAjaW5jbHVkZSAibnNJQ29udGVudFNl
Y3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAibnNKU0Vudmlyb25tZW50LmgiCiAjaW5jbHVkZSAi
eHBjcHVibGljLmgiCiAjaW5jbHVkZSAic2FtcGxlci5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZs
YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2Ug
bW96aWxsYTo6aGFsOwogCiAjZGVmaW5lIEVWRU5UX1RZUEVfRVFVQUxTKCBscywgdHlwZSwgdXNl
clR5cGUgKSBcCiAgIChscy0+bUV2ZW50VHlwZSA9PSB0eXBlICYmIFwKICAgKGxzLT5tRXZlbnRU
eXBlICE9IE5TX1VTRVJfREVGSU5FRF9FVkVOVCB8fCBscy0+bVR5cGVBdG9tID09IHVzZXJUeXBl
KSkKIApAQCAtNTY5LDE2ICs1NzAsMjIgQEAgbnNFdmVudExpc3RlbmVyTWFuYWdlcjo6QWRkU2Ny
aXB0RXZlbnRMaQogICAgIC8vIGxvYWRlZCBhcyBkYXRhLgogICAgIHJldHVybiBOU19PSzsKICAg
fQogCiAgIG5zcmVzdWx0IHJ2ID0gTlNfT0s7CiAgIC8vIHJldHVybiBlYXJseSBwcmV2ZW50aW5n
IHRoZSBldmVudCBsaXN0ZW5lciBmcm9tIGJlaW5nIGFkZGVkCiAgIC8vICdkb2MnIGlzIGZldGNo
ZWQgYWJvdmUKICAgaWYgKGRvYykgeworICAgIC8vIERvbid0IGFsbG93IGFkZGluZyBhbiBldmVu
dCBsaXN0ZW5lciBpZiB0aGUgZG9jdW1lbnQgaXMgc2FuZGJveGVkCisgICAgLy8gd2l0aG91dCAn
YWxsb3ctc2NyaXB0cycuCisgICAgaWYgKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURf
U0NSSVBUUykgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAg
fQorCiAgICAgbnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5PiBjc3A7CiAgICAgcnYg
PSBkb2MtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgICBpZiAoY3NwKSB7CiAgICAgICBib29s
IGlubGluZU9LOwogICAgICAgcnYgPSBjc3AtPkdldEFsbG93c0lubGluZVNjcmlwdCgmaW5saW5l
T0spOwogICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwv
Y29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQv
c3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtODAsMTYgKzgwLDE3IEBACiAKICNpbmNsdWRl
ICJtb3pBdXRvRG9jVXBkYXRlLmgiCiAjaW5jbHVkZSAibnNJSFRNTENvbGxlY3Rpb24uaCIKIAog
I2luY2x1ZGUgIm5zSUNvbnN0cmFpbnRWYWxpZGF0aW9uLmgiCiAKICNpbmNsdWRlICJuc0lET01I
VE1MQnV0dG9uRWxlbWVudC5oIgogI2luY2x1ZGUgImRvbWJpbmRpbmdzLmgiCisjaW5jbHVkZSAi
bnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIAogc3Rh
dGljIGNvbnN0IGludCBOU19GT1JNX0NPTlRST0xfTElTVF9IQVNIVEFCTEVfU0laRSA9IDE2Owog
CiBzdGF0aWMgY29uc3QgUFJVaW50OCBOU19GT1JNX0FVVE9DT01QTEVURV9PTiAgPSAxOwogc3Rh
dGljIGNvbnN0IFBSVWludDggTlNfRk9STV9BVVRPQ09NUExFVEVfT0ZGID0gMDsKIApAQCAtNjg0
LDE3ICs2ODUsMjUgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNldChuc0V2ZQog
ICAgIHJldHVybiBEb1Jlc2V0KCk7CiAgIH0KIAogICBpZiAoTlNfRk9STV9TVUJNSVQgPT0gYU1l
c3NhZ2UpIHsKICAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgbm90IGluIGEgZG9jdW1lbnQu
CiAgICAgaWYgKCFkb2MpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAgICB9Ci0gICAgcmV0dXJu
IERvU3VibWl0KGFFdmVudCk7CisgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIGluIGEgc2Fu
ZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1Ym1pdAorICAgIC8vIGlzIGRpc2FibGVkLgorICAgIFBS
VWludDMyIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisKKyAgICBpZiAoIShz
YW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfRk9STVMpKSB7CisgICAgICByZXR1cm4gRG9TdWJtaXQo
YUV2ZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAogICBNT1pfQVNTRVJU
KGZhbHNlKTsKICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNIVE1MRm9ybUVsZW1l
bnQ6OkRvUmVzZXQoKQpAQCAtMTY4NSwxNiArMTY5NCwyOCBAQCBuc0hUTUxGb3JtRWxlbWVudDo6
Q2hlY2tWYWxpZEZvcm1TdWJtaXNzCiAgICAqIFRPRE86IHRoZSBjaGVjayBmb3Igb2JzZXJ2ZXIg
c2hvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBIVE1MNSBGb3JtcyB3aWxsCiAgICAqIGJlIHNw
cmVhZCBlbm91Z2ggYW5kIGF1dGhvcnMgd2lsbCBhc3N1bWUgZm9ybXMgY2FuJ3QgYmUgc3VibWl0
dGVkIHdoZW4KICAgICogaW52YWxpZC4gU2VlIGJ1ZyA1ODc2NzEuCiAgICAqLwogCiAgIE5TX0FT
U0VSVElPTighSGFzQXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpub3ZhbGlkYXRl
KSwKICAgICAgICAgICAgICAgICJXZSBzaG91bGRuJ3QgYmUgdGhlcmUgaWYgbm92YWxpZGF0ZSBp
cyBzZXQhIik7CiAKKyAgLy8gRG9uJ3QgZG8gdmFsaWRhdGlvbiBmb3IgYSBmb3JtIHN1Ym1pdCBk
b25lIGJ5IGEgc2FuZGJveGVkIGRvY3VtZW50IHRoYXQKKyAgLy8gZG9lc24ndCBoYXZlICdhbGxv
dy1mb3JtcycsIHRoZSBzdWJtaXQgd2lsbCBoYXZlIGJlZW4gYmxvY2tlZCBhbmQgdGhlCisgIC8v
IEhUTUw1IHNwZWMgc2F5cyB3ZSBzaG91bGRuJ3QgdmFsaWRhdGUgaW4gdGhpcyBjYXNlLgorICBu
c0lEb2N1bWVudCogZG9jID0gR2V0Q3VycmVudERvYygpOworICBpZiAoZG9jKSB7CisgICAgUFJV
aW50MzIgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKworICAgIGlmIChzYW5k
Ym94RmxhZ3MgJiBTQU5EQk9YRURfRk9STVMpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgfQorICAgICAgICAgICAgICAgCiAgIC8vIFdoZW4gLnN1Ym1pdCgpIGlzIGNhbGxlZCBhRXZl
bnQgPSBuc251bGwgc28gd2UgY2FuIHJlbHkgb24gdGhhdCB0byBrbm93IGlmCiAgIC8vIHdlIGhh
dmUgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBmb3JtLgogICBuc0NPTVB0cjxuc0lPYnNl
cnZlclNlcnZpY2U+IHNlcnZpY2UgPQogICAgIG1vemlsbGE6OnNlcnZpY2VzOjpHZXRPYnNlcnZl
clNlcnZpY2UoKTsKICAgaWYgKCFzZXJ2aWNlKSB7CiAgICAgTlNfV0FSTklORygiTm8gb2JzZXJ2
ZXIgc2VydmljZSBhdmFpbGFibGUhIik7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcCBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcAotLS0gYS9jb250
ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC0zMyw4MSArMzMs
MzMgQEAKICAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIg
dmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRo
ZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCiAgKgogICogKioqKiogRU5EIExJQ0VOU0UgQkxP
Q0sgKioqKiogKi8KIAogI2luY2x1ZGUgIm1vemlsbGEvVXRpbC5oIgogCiAjaW5jbHVkZSAibnNJ
RE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRnJhbWVFbGVt
ZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01HZXRT
VkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAi
bnNHa0F0b21zLmgiCi0jaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc01hcHBl
ZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJuc0RPTUVycm9yLmgiCi0jaW5jbHVkZSAibnNSdWxl
RGF0YS5oIgotI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRlICJuc0hUTUxJRnJh
bWVFbGVtZW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNl
IG1vemlsbGE6OmRvbTsKIAotY2xhc3MgbnNIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0dl
bmVyaWNIVE1MRnJhbWVFbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IG5zSURPTUhUTUxJRnJhbWVFbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVi
bGljIG5zSURPTUdldFNWR0RvY3VtZW50Ci17Ci1wdWJsaWM6Ci0gIG5zSFRNTElGcmFtZUVsZW1l
bnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvLAotICAgICAgICAgICAg
ICAgICAgICAgIG1vemlsbGE6OmRvbTo6RnJvbVBhcnNlciBhRnJvbVBhcnNlciA9IG1vemlsbGE6
OmRvbTo6Tk9UX0ZST01fUEFSU0VSKTsKLSAgdmlydHVhbCB+bnNIVE1MSUZyYW1lRWxlbWVudCgp
OwotCi0gIC8vIG5zSVN1cHBvcnRzCi0gIE5TX0RFQ0xfSVNVUFBPUlRTX0lOSEVSSVRFRAotCi0g
IC8vIG5zSURPTU5vZGUKLSAgTlNfRk9SV0FSRF9OU0lET01OT0RFKG5zR2VuZXJpY0hUTUxGcmFt
ZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01FbGVtZW50Ci0gIE5TX0ZPUldBUkRfTlNJRE9NRUxF
TUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NSFRNTEVsZW1l
bnQKLSAgTlNfRk9SV0FSRF9OU0lET01IVE1MRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVt
ZW50OjopCi0KLSAgLy8gbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKLSAgTlNfREVDTF9OU0lET01I
VE1MSUZSQU1FRUxFTUVOVAotCi0gIC8vIG5zSURPTUdldFNWR0RvY3VtZW50Ci0gIE5TX0RFQ0xf
TlNJRE9NR0VUU1ZHRE9DVU1FTlQKLQotICAvLyBuc0lDb250ZW50Ci0gIHZpcnR1YWwgYm9vbCBQ
YXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KTsKLSAgTlNfSU1FVEhPRF8oYm9vbCkgSXNB
dHRyaWJ1dGVNYXBwZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7Ci0gIHZpcnR1
YWwgbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24o
KSBjb25zdDsKLQotICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUlu
Zm8sIG5zSU5vZGUgKiphUmVzdWx0KSBjb25zdDsKLSAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyog
R2V0Q2xhc3NJbmZvKCk7Ci19OwotCi0KIE5TX0lNUExfTlNfTkVXX0hUTUxfRUxFTUVOVF9DSEVD
S19QQVJTRVIoSUZyYW1lKQogCi0KIG5zSFRNTElGcmFtZUVsZW1lbnQ6Om5zSFRNTElGcmFtZUVs
ZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9tUGFyc2VyIGFGcm9tUGFyc2VyKQog
ICA6IG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQoYU5vZGVJbmZvLCBhRnJvbVBhcnNlcikKIHsK
IH0KIAogbnNIVE1MSUZyYW1lRWxlbWVudDo6fm5zSFRNTElGcmFtZUVsZW1lbnQoKQogeworICBp
ZiAobVNhbmRib3hUb2tlbkxpc3QpCisgICAgbVNhbmRib3hUb2tlbkxpc3QtPkRyb3BSZWZlcmVu
Y2UoKTsKIH0KIAogCiBOU19JTVBMX0FERFJFRl9JTkhFUklURUQobnNIVE1MSUZyYW1lRWxlbWVu
dCxuc0dlbmVyaWNFbGVtZW50KQogTlNfSU1QTF9SRUxFQVNFX0lOSEVSSVRFRChuc0hUTUxJRnJh
bWVFbGVtZW50LG5zR2VuZXJpY0VsZW1lbnQpCiAKIERPTUNJX05PREVfREFUQShIVE1MSUZyYW1l
RWxlbWVudCwgbnNIVE1MSUZyYW1lRWxlbWVudCkKIApAQCAtMTUwLDE2ICsxMDIsMjggQEAgbnNI
VE1MSUZyYW1lRWxlbWVudDo6R2V0Q29udGVudFdpbmRvdyhucwogfQogCiBOU19JTUVUSE9ESU1Q
CiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRTVkdEb2N1bWVudChuc0lET01Eb2N1bWVudCAqKmFS
ZXN1bHQpCiB7CiAgIHJldHVybiBHZXRDb250ZW50RG9jdW1lbnQoYVJlc3VsdCk7CiB9CiAKK05T
X0lNRVRIT0RJTVAKK25zSFRNTElGcmFtZUVsZW1lbnQ6OkdldFNhbmRib3gobnNJRE9NRE9NU2V0
dGFibGVUb2tlbkxpc3QqKiBhU2FuZGJveCkKK3sKKyAgaWYgKCFtU2FuZGJveFRva2VuTGlzdCkg
eworICAgIG1TYW5kYm94VG9rZW5MaXN0ID0gbmV3IG5zRE9NU2V0dGFibGVUb2tlbkxpc3QodGhp
cywgbnNHa0F0b21zOjpzYW5kYm94KTsKKyAgfQorCisgIE5TX0FERFJFRigqYVNhbmRib3ggPSBt
U2FuZGJveFRva2VuTGlzdCk7CisKKyAgcmV0dXJuIE5TX09LOworfQorCiBib29sCiBuc0hUTUxJ
RnJhbWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0
KQogewogICBpZiAoYU5hbWVzcGFjZUlEID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CiAgICAgaWYg
KGFBdHRyaWJ1dGUgPT0gbnNHa0F0b21zOjptYXJnaW53aWR0aCkgewpAQCAtMTc4LDE2ICsxNDIs
MjIgQEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6UGFyc2VBdHRyaWJ1dGUoUFJJbgogICAgICAgcmV0
dXJuIFBhcnNlRnJhbWVib3JkZXJWYWx1ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KICAgICBp
ZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRvbXM6OnNjcm9sbGluZykgewogICAgICAgcmV0dXJuIFBh
cnNlU2Nyb2xsaW5nVmFsdWUoYVZhbHVlLCBhUmVzdWx0KTsKICAgICB9CiAgICAgaWYgKGFBdHRy
aWJ1dGUgPT0gbnNHa0F0b21zOjphbGlnbikgewogICAgICAgcmV0dXJuIFBhcnNlQWxpZ25WYWx1
ZShhVmFsdWUsIGFSZXN1bHQpOwogICAgIH0KKyAgICBpZiAoYUF0dHJpYnV0ZSA9PSBuc0drQXRv
bXM6OnNhbmRib3gpIHsKKyAgICAgIC8vIFRoZSBzYW5kYm94IGF0dHJpYnV0ZSBuZWVkcyB0byBi
ZSBwYXJzZWQgYXMgYW4gYXRvbSBhcnJheSBzbworICAgICAgLy8gaXQgY2FuIGJlIGV4cG9zZWQg
YXMgYSBET01TZXR0YWJsZVRva2VuTGlzdC4KKyAgICAgIGFSZXN1bHQuUGFyc2VBdG9tQXJyYXko
YVZhbHVlKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgfQogCiAgIHJldHVybiBuc0dl
bmVyaWNIVE1MRnJhbWVFbGVtZW50OjpQYXJzZUF0dHJpYnV0ZShhTmFtZXNwYWNlSUQsIGFBdHRy
aWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhVmFsdWUsIGFSZXN1bHQpOwogfQogCiBzdGF0aWMgdm9pZAogTWFwQXR0cmlidXRlc0ludG9S
dWxlKGNvbnN0IG5zTWFwcGVkQXR0cmlidXRlcyogYUF0dHJpYnV0ZXMsCkBAIC0yNjgsOCArMjM4
LDM3IEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OklzQXR0cmlidXRlTWFwcGVkKGMKIAogCiBuc01h
cFJ1bGVUb0F0dHJpYnV0ZXNGdW5jCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRBdHRyaWJ1dGVN
YXBwaW5nRnVuY3Rpb24oKSBjb25zdAogewogICByZXR1cm4gJk1hcEF0dHJpYnV0ZXNJbnRvUnVs
ZTsKIH0KIAorbnNyZXN1bHQKK25zSFRNTElGcmFtZUVsZW1lbnQ6OkFmdGVyU2V0QXR0cihQUklu
dDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhTm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0gbnNH
a0F0b21zOjpzYW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgewor
ICAgIC8vIFBhcnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBhbmQg
aWYgd2UgaGF2ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFwcHJv
cHJpYXRlbHkuCisgICAgaWYgKG1GcmFtZUxvYWRlcikgeworICAgICAgbnNDT01QdHI8bnNJRG9j
U2hlbGw+IGRvY3NoZWxsID0gbUZyYW1lTG9hZGVyLT5HZXRFeGlzdGluZ0RvY1NoZWxsKCk7CisK
KyAgICAgIGlmIChkb2NzaGVsbCkgeworICAgICAgICBQUlVpbnQzMiBuZXdGbGFncyA9IDA7Cisg
ICAgICAgIC8vIElmIGEgTlVMTCBhVmFsdWUgaXMgcGFzc2VkIGluLCB3ZSB3YW50IHRvIGNsZWFy
IHRoZSBzYW5kYm94IGZsYWdzCisgICAgICAgIC8vIHdoaWNoIHdlIHdpbGwgZG8gYnkgc2V0dGlu
ZyB0aGVtIHRvIDAuCisgICAgICAgIGlmIChhVmFsdWUpIHsKKyAgICAgICAgICBuc0F1dG9TdHJp
bmcgc3RyVmFsdWU7CisgICAgICAgICAgYVZhbHVlLT5Ub1N0cmluZyhzdHJWYWx1ZSk7CisgICAg
ICAgICAgbmV3RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9G
bGFncygKKyAgICAgICAgICAgIHN0clZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBkb2NzaGVs
bC0+U2V0U2FuZGJveEZsYWdzKG5ld0ZsYWdzKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0
dXJuIG5zR2VuZXJpY0hUTUxFbGVtZW50OjpBZnRlclNldEF0dHIoYU5hbWVTcGFjZUlELCBhTmFt
ZSwgYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
Tm90aWZ5KTsKKworfQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRN
TElGcmFtZUVsZW1lbnQuaCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVF
bGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCkBAIC0wLDAgKzEsMTE3IEBA
CisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsg
Yy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoq
KioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICog
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9u
cyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96
aWxsYSBDb21tdW5pY2F0b3IgY2xpZW50IGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxv
cGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBD
b3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVy
IGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2
ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJt
cyBvZgorICogZWl0aGVyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksCisgKiBvciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdo
aWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGlj
YWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNl
IG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9m
IGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwor
ICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBN
UEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25z
IGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJv
dmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRl
bGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhl
IE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9D
SyAqKioqKiAqLworCisjaW5jbHVkZSAibW96aWxsYS9VdGlsLmgiCisKKyNpbmNsdWRlICJuc0lE
T01IVE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxFbGVtZW50Lmgi
CisjaW5jbHVkZSAibnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zSURP
TURvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJuc0lET01TVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zR2tBdG9tcy5oIgorI2luY2x1ZGUg
Im5zSURvY3VtZW50LmgiCisjaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCisjaW5jbHVk
ZSAibnNET01FcnJvci5oIgorI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIKKyNpbmNsdWRlICJuc1N0
eWxlQ29uc3RzLmgiCisjaW5jbHVkZSAibnNET01TZXR0YWJsZVRva2VuTGlzdC5oIgorI2luY2x1
ZGUgIm5zQ29udGVudFV0aWxzLmgiCisKK2NsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJs
aWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAs
IHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAoreworcHVibGljOgorICBuc0hUTUxJRnJh
bWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKKyAgICAg
ICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJzZXIgPSBt
b3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7CisgIHZpcnR1YWwgfm5zSFRNTElGcmFtZUVs
ZW1lbnQoKTsKKworICAvLyBuc0lTdXBwb3J0cworICBOU19ERUNMX0lTVVBQT1JUU19JTkhFUklU
RUQKKworICAvLyBuc0lET01Ob2RlCisgIE5TX0ZPUldBUkRfTlNJRE9NTk9ERShuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NRWxlbWVudAorICBOU19GT1JXQVJEX05T
SURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhU
TUxFbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNHZW5lcmljSFRNTEZy
YW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50CisgIE5TX0RFQ0xf
TlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKKworICAvLyBuc0lET01HZXRTVkdEb2N1bWVudAorICBO
U19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCisKKyAgLy8gbnNJQ29udGVudAorICB2aXJ0dWFs
IGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CisgIE5TX0lNRVRIT0RfKGJv
b2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0Owor
ICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGluZ0Z1
bmN0aW9uKCkgY29uc3Q7CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7CisgIHZpcnR1YWwgbnNYUENDbGFz
c0luZm8qIEdldENsYXNzSW5mbygpOworCisgIHZpcnR1YWwgbnNyZXN1bHQgQWZ0ZXJTZXRBdHRy
KFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYU5vdGlmeSk7CisKKyAgUFJVaW50MzIgR2V0U2Fu
ZGJveEZsYWdzKCkgeworICAgIG5zQXV0b1N0cmluZyBzYW5kYm94QXR0cjsKKworICAgIGlmIChH
ZXRBdHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6OnNhbmRib3gsIHNhbmRib3hBdHRy
KSkgeworICAgICAgcmV0dXJuIG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVU
b0ZsYWdzKHNhbmRib3hBdHRyKTsKKyAgICB9CisKKyAgICAvLyBObyBzYW5kYm94IGF0dHJpYnV0
ZSwgbm8gc2FuZGJveCBmbGFncy4KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHN0YXRpYyBuc0hU
TUxJRnJhbWVFbGVtZW50KiBGcm9tQ29udGVudChuc0lDb250ZW50ICphQ29udGVudCkKKyAgewor
ICAgIGlmIChhQ29udGVudC0+SXNIVE1MKG5zR2tBdG9tczo6aWZyYW1lKSkKKyAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxuc0hUTUxJRnJhbWVFbGVtZW50Kj4oYUNvbnRlbnQpOworICAgIHJldHVy
biBuc251bGw7CisgIH0KKworcHJvdGVjdGVkOgorICBuc1JlZlB0cjxuc0RPTVNldHRhYmxlVG9r
ZW5MaXN0PiAgbVNhbmRib3hUb2tlbkxpc3Q7Cit9OwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQv
c3JjL25zSFRNTERvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25z
SFRNTERvY3VtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERv
Y3VtZW50LmNwcApAQCAtMTMxLDE2ICsxMzEsMTcgQEAKICNpbmNsdWRlICJwcnByZi5oIgogI2lu
Y2x1ZGUgIm1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVu
Y2VzLmgiCiAjaW5jbHVkZSAibnNNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJuc0lSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAibnNIdG1sNVRyZWVPcEV4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibnNIdG1sNVBh
cnNlci5oIgogI2luY2x1ZGUgIm5zSURPTUpTV2luZG93LmgiCisjaW5jbHVkZSAibnNTYW5kYm94
RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96
aWxsYTo6ZG9tOwogCiAjZGVmaW5lIE5TX01BWF9ET0NVTUVOVF9XUklURV9ERVBUSCAyMAogCiAj
aW5jbHVkZSAicHJtZW0uaCIKICNpbmNsdWRlICJwcnRpbWUuaCIKQEAgLTEyNDksMTYgKzEyNTAs
MjEgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwogewogICBhQ29v
a2llLlRydW5jYXRlKCk7IC8vIGNsZWFyIGN1cnJlbnQgY29va2llIGluIGNhc2Ugc2VydmljZSBm
YWlsczsKICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBjb29raWUgaXNuJ3QgYW4gZXJyb3Ig
Y29uZGl0aW9uLgogCiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2VzcykgewogICAgIHJldHVybiBO
U19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRib3hlZCBvcmlnaW4gZmxh
ZyBpcyBzZXQsIGFjY2VzcyB0byByZWFkIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4KKyAg
aWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKQorICAgIHJldHVybiBOU19FUlJP
Ul9ET01fU0VDVVJJVFlfRVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBp
c24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9f
R2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSkg
ewogICAgIC8vIEdldCBhIFVSSSBmcm9tIHRoZSBkb2N1bWVudCBwcmluY2lwYWwuIFdlIHVzZSB0
aGUgb3JpZ2luYWwKICAgICAvLyBjb2RlYmFzZSBpbiBjYXNlIHRoZSBjb2RlYmFzZSB3YXMgY2hh
bmdlZCBieSBTZXREb21haW4KICAgICBuc0NPTVB0cjxuc0lVUkk+IGNvZGViYXNlVVJJOwogICAg
IE5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKGNvZGViYXNlVVJJKSk7CiAK
QEAgLTEyNzksMTYgKzEyODUsMjEgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJp
bmcmIGFDbwogCiBOU19JTUVUSE9ESU1QCiBuc0hUTUxEb2N1bWVudDo6U2V0Q29va2llKGNvbnN0
IG5zQVN0cmluZyYgYUNvb2tpZSkKIHsKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAg
ICAgcmV0dXJuIE5TX09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVk
IG9yaWdpbiBmbGFnIGlzIHNldCwgYWNjZXNzIHRvIHdyaXRlIGNvb2tpZXMKKyAgLy8gaXMgcHJv
aGliaXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKQorICAgIHJl
dHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29r
aWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBz
ZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBp
ZiAoc2VydmljZSAmJiBtRG9jdW1lbnRVUkkpIHsKICAgICBuc0NPTVB0cjxuc0lQcm9tcHQ+IHBy
b21wdDsKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW5kb3cgPSBHZXRXaW5kb3coKTsK
ICAgICBpZiAod2luZG93KSB7CiAgICAgICB3aW5kb3ctPkdldFByb21wdGVyKGdldHRlcl9BZGRS
ZWZzKHByb21wdCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUu
aW4gYi9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCi0tLSBhL2RvY3NoZWxsL2Jhc2UvTWFrZWZp
bGUuaW4KKysrIGIvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbgpAQCAtMTE2LDkgKzExNiwxMCBA
QCBGT1JDRV9TVEFUSUNfTElCID0gMQogCiBpbmNsdWRlICQodG9wc3JjZGlyKS9jb25maWcvcnVs
ZXMubWsKIAogTE9DQUxfSU5DTFVERVMgKz0gXAogICAtSSQoc3JjZGlyKS8uLi9zaGlzdG9yeS9z
cmMgXAogICAtSSQodG9wc3JjZGlyKS9kb20vYmFzZSBcCiAgIC1JJCh0b3BzcmNkaXIpL2xheW91
dC9iYXNlIFwKICAgLUkkKHRvcHNyY2RpcikveHBjb20vZHMgXAorICAtSSQodG9wc3JjZGlyKS9j
b250ZW50L2Jhc2Uvc3JjIFwKICAgJChOVUxMKQpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9u
c0RvY1NoZWxsLmNwcCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKLS0tIGEvZG9jc2hl
bGwvYmFzZS9uc0RvY1NoZWxsLmNwcAorKysgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3Bw
CkBAIC0yMTMsMTYgKzIxMywxNyBAQAogI2luY2x1ZGUgIm5zSVdlYkJyb3dzZXJQcmludC5oIgog
I2VuZGlmCiAKICNpbmNsdWRlICJuc1BsdWdpbkVycm9yLmgiCiAjaW5jbHVkZSAibnNDb250ZW50
VXRpbHMuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRFcnJvcnMuaCIKICNpbmNsdWRlICJuc0lDaGFu
bmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCisjaW5j
bHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2luY2x1ZGUgIm5zWFVMQXBwQVBJLmgiCiAKICNp
bmNsdWRlICJuc0RPTU5hdmlnYXRpb25UaW1pbmcuaCIKICNpbmNsdWRlICJuc0lUaW1lZENoYW5u
ZWwuaCIKICNpbmNsdWRlICJtb3ppbGxhL1N0YXJ0dXBUaW1lbGluZS5oIgogCiBzdGF0aWMgTlNf
REVGSU5FX0NJRChrRE9NU2NyaXB0T2JqZWN0RmFjdG9yeUNJRCwKQEAgLTc0MywxNiArNzQ0LDE3
IEBAIG5zRG9jU2hlbGw6Om5zRG9jU2hlbGwoKToKICAgICBtQnVzeUZsYWdzKEJVU1lfRkxBR1Nf
Tk9ORSksCiAgICAgbUFwcFR5cGUobnNJRG9jU2hlbGw6OkFQUF9UWVBFX1VOS05PV04pLAogICAg
IG1Mb2FkVHlwZSgwKSwKICAgICBtTWFyZ2luV2lkdGgoLTEpLAogICAgIG1NYXJnaW5IZWlnaHQo
LTEpLAogICAgIG1JdGVtVHlwZSh0eXBlQ29udGVudCksCiAgICAgbVByZXZpb3VzVHJhbnNJbmRl
eCgtMSksCiAgICAgbUxvYWRlZFRyYW5zSW5kZXgoLTEpLAorICAgIG1TYW5kYm94RmxhZ3MoMCks
CiAgICAgbUNyZWF0ZWQoZmFsc2UpLAogICAgIG1BbGxvd1N1YmZyYW1lcyh0cnVlKSwKICAgICBt
QWxsb3dQbHVnaW5zKHRydWUpLAogICAgIG1BbGxvd0phdmFzY3JpcHQodHJ1ZSksCiAgICAgbUFs
bG93TWV0YVJlZGlyZWN0cyh0cnVlKSwKICAgICBtQWxsb3dJbWFnZXModHJ1ZSksCiAgICAgbUFs
bG93RE5TUHJlZmV0Y2godHJ1ZSksCiAgICAgbUFsbG93V2luZG93Q29udHJvbCh0cnVlKSwKQEAg
LTI5MzQsMTYgKzI5MzYsNzMgQEAgbnNEb2NTaGVsbDo6RmluZEl0ZW1XaXRoTmFtZShjb25zdCBQ
UlVuaQogICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKGZvdW5kSXRlbSkgewogICAgICAgICAgICAgLy8gV2UgcmV0dXJuIGZvdW5kSXRlbSBo
ZXJlIGV2ZW4gaWYgaXQncyBub3QgYW4gYWN0aXZlCiAgICAgICAgICAgICAvLyBpdGVtIHNpbmNl
IGFsbCB0aGUgbmFtZXMgd2UndmUgZGVhbHQgd2l0aCBzbyBmYXIgYXJlCiAgICAgICAgICAgICAv
LyBzcGVjaWFsIGNhc2VzIHRoYXQgd2Ugd29uJ3QgYm90aGVyIGxvb2tpbmcgZm9yIGZ1cnRoZXIu
CiAKKyAgICAgICAgICAgIC8vIElmIG91ciBkb2N1bWVudCBpcyBzYW5kYm94ZWQsIHdlIG5lZWQg
dG8gZG8gc29tZSBleHRyYSBjaGVja3MuCisgICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94Rmxh
Z3MgPSAwOworCisgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fR2V0
SW50ZXJmYWNlKGFPcmlnaW5hbFJlcXVlc3Rvcik7CisKKyAgICAgICAgICAgIGlmIChkb2MpIHsK
KyAgICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncykgeworICAgICAgICAgICAg
ICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHJvb3Q7CisgICAgICAgICAgICAgICAg
R2V0U2FtZVR5cGVSb290VHJlZUl0ZW0oZ2V0dGVyX0FkZFJlZnMocm9vdCkpOworCisgICAgICAg
ICAgICAgICAgLy8gSXMgdGhlIGZvdW5kIGl0ZW0gbm90IGEgdG9wIGxldmVsIGJyb3dzaW5nIGNv
bnRleHQgYW5kIG5vdCBvdXJzZWxmID8KKyAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NT
aGVsbFRyZWVJdGVtPiBzZWxmQXNJdGVtID0gc3RhdGljX2Nhc3Q8bnNJRG9jU2hlbGxUcmVlSXRl
bSAqPih0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRJdGVtICE9IHJvb3QgJiYgZm91
bmRJdGVtICE9IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXJlIHdlIGFu
IGFuY2VzdG9yIG9mIHRoZSBmb3VuZEl0ZW0gPworICAgICAgICAgICAgICAgICAgICBib29sIGlz
QW5jZXN0b3IgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NT
aGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0ZW07CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVU
eXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudEFzSXRlbSkpOworCisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5z
Q09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBzZWxmQXNJdGVtKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNBbmNlc3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE5vLCB3ZSBhcmUgbm90IGFuIGFuY2VzdG9yIGFuZCBvdXIgZG9jdW1lbnQg
aXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbmRib3hlZCwgd2UgY2FuJ3QgYWxsb3cg
dGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0IC0gaXMgaXQgYW4gYW5jZXN0b3Ig
b2Ygb3VycyA/CisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0
ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0dGVyX0Fk
ZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRtcCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gZm91bmRJdGVtKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhbmNlc3RvciwgYW5kIHdlIGFyZSBz
YW5kYm94ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIGFsbG93LXRv
cC1uYXZpZ2F0aW9uIGlzIHNldCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX1RPUExFVkVMX05BVklH
QVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB0bXAtPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAgICAgICAgcmV0dXJuIE5TX09LOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29raW5nCiAgICAgICAgIAogICAgIC8v
IEZpcnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAtNDk3MCwxNiArNTAyOSwzMCBAQCBuc0RvY1No
ZWxsOjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hl
bGw6OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0Fw
cFRhYjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpT
ZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgbVNhbmRib3hGbGFn
cyA9IGFTYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAor
bnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFncykKK3sK
KyAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisK
K05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHkoYm9vbCBhVmlzaWJpbGl0
eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICByZXR1cm4gTlNfT0s7CiAg
ICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmlld2VyLT5TaG93KCk7CiAg
ICAgfQogICAgIGVsc2UgewpAQCAtODE2NywxNiArODI0MCwyOSBAQCBuc0RvY1NoZWxsOjpJbnRl
cm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVl
SXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2luZG93VGFyZ2V0
LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMo
dGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiB0YXJnZXREb2NT
aGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRhcmdldERvY1NoZWxsKSB7
CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVudCBpcyBzYW5kYm94ZWQg
YW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRlL2xvYWQgYSBmcmFtZSBp
dCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAgICAgLy8gRmluZEl0ZW1X
aXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3IgdGhlIHRhcmdldAorICAg
ICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgb3BlbiBhIG5ldyB3
aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0aG91Z2guIENoZWNrIGlmIHdlIGFy
ZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYgc28uCisgICAgICAgICAgICBOU19FTlNV
UkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1JfRkFJTFVSRSk7CisgICAgICAgICAgICBu
c0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3VtZW50KCk7CisgICAgICAg
ICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICAgICAgc2FuZGJveEZsYWdz
ID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBT
QU5EQk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJ
TFVSRTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93
PiB3aW4gPQogICAgICAgICAgICAgICAgIGRvX0dldEludGVyZmFjZShHZXRBc1N1cHBvcnRzKHRo
aXMpKTsKICAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKHdpbiwgTlNfRVJST1JfTk9UX0FWQUlM
QUJMRSk7CiAKICAgICAgICAgICAgIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUoYVdpbmRvd1Rhcmdl
dCk7CiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IG5ld1dpbjsKICAgICAgICAg
ICAgIHJ2ID0gd2luLT5PcGVuKEVtcHR5U3RyaW5nKCksIC8vIFVSTCB0byBsb2FkCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAvLyB3aW5kb3cgbmFtZQpAQCAtODk1
NCwxOCArOTA0MCwzMSBAQCBuc0RvY1NoZWxsOjpEb1VSSUxvYWQobnNJVVJJICogYVVSSSwKICAg
ICAgICAgfQogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkKICAgICAgICAg
aWYgKGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAgICAvLyBSZWZl
cnJlciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4KICAgICAgICAg
ICAgIGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChkb19RdWVy
eUludGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3du
ZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUpOworICAgIG5zQ09NUHRyPG5z
SVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWw7CisKKyAgICAvLyBJZiB0aGUgY29udGVudCBiZWlu
ZyBsb2FkZWQgc2hvdWxkIGJlIHNhbmRib3hlZCB3aXRoIHJlc3BlY3QgdG8gb3JpZ2luCisgICAg
Ly8gd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lwYWwgaGVyZSwgYW5kIHRoZW4g
dGVsbAorICAgIC8vIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lciB0byBmb3JjZSBp
dCB0byBiZSBzZXQgYXMgdGhlCisgICAgLy8gY2hhbm5lbCBvd25lci4KKyAgICBpZiAobVNhbmRi
b3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICAgIG93bmVyUHJpbmNpcGFsID0gZG9f
Q3JlYXRlSW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9udWxscHJpbmNpcGFsOzEiKTsKKyAgICB9IGVs
c2UgeworICAgICAgLy8gTm90IHNhbmRib3hlZCAtIHdlIGFsbG93IHRoZSBjb250ZW50IHRvIGFz
c3VtZSBpdHMgbmF0dXJhbCBvd25lci4KKyAgICAgIG93bmVyUHJpbmNpcGFsID0gZG9fUXVlcnlJ
bnRlcmZhY2UoYU93bmVyKTsKKyAgICB9CisKKyAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFu
bmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9P
UklHSU4pKTsKIAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENoYW5uZWw+IHNjcmlwdENoYW5uZWwg
PSBkb19RdWVyeUludGVyZmFjZShjaGFubmVsKTsKICAgICBpZiAoc2NyaXB0Q2hhbm5lbCkgewog
ICAgICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBvdXIgY29udGV4dCBpZiB0aGUgcHJp
bmNpcGFscyBtYXRjaAogICAgICAgICBzY3JpcHRDaGFubmVsLT4KICAgICAgICAgICAgIFNldEV4
ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05PUk1BTCk7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaCBiL2RvY3NoZWxsL2Jhc2Uv
bnNEb2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCisrKyBiL2RvY3No
ZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03ODQsMTYgKzc4NCwxOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgLy8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBpcyBub3QgZXhwZWN0ZWQgdG8gY2hh
bmdlLgogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1JdGVtVHlwZTsKIAogICAgIC8v
IEluZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwgaW5kaWNhdGluZyB0aGUgcHJldmlv
dXMgYW5kIGN1cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBhdCB0aGUgdGltZSB0aGF0IHRoaXMg
RG9jU2hlbGwgYmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBt
UHJldmlvdXNUcmFuc0luZGV4OwogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1Mb2Fk
ZWRUcmFuc0luZGV4OwogCisgICAgUFJVaW50MzIgICAgICAgICAgICAgICAgICAgbVNhbmRib3hG
bGFnczsKKwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1DcmVhdGVkOwogICAgIGJv
b2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1N1YmZyYW1lczsKICAgICBib29sICAgICAg
ICAgICAgICAgICAgICAgICBtQWxsb3dQbHVnaW5zOwogICAgIGJvb2wgICAgICAgICAgICAgICAg
ICAgICAgIG1BbGxvd0phdmFzY3JpcHQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAg
bUFsbG93TWV0YVJlZGlyZWN0czsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxs
b3dJbWFnZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93RE5TUHJlZmV0
Y2g7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93V2luZG93Q29udHJvbDsK
ZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsIGIvZG9jc2hlbGwvYmFz
ZS9uc0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKKysr
IGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAgLTY3LDE3ICs2NywxNyBAQCBpbnRl
cmZhY2UgbnNJUmVxdWVzdDsKIGludGVyZmFjZSBuc0lTSEVudHJ5OwogaW50ZXJmYWNlIG5zSUxh
eW91dEhpc3RvcnlTdGF0ZTsKIGludGVyZmFjZSBuc0lTZWN1cmVCcm93c2VyVUk7CiBpbnRlcmZh
Y2UgbnNJRE9NU3RvcmFnZTsKIGludGVyZmFjZSBuc0lQcmluY2lwYWw7CiBpbnRlcmZhY2UgbnNJ
V2ViQnJvd3NlclByaW50OwogaW50ZXJmYWNlIG5zSVZhcmlhbnQ7CiAKLVtzY3JpcHRhYmxlLCB1
dWlkKGM3MzI1NDIyLTgxN2UtNDMyMS05NTdhLWMwYmRkNzY0OTQxZCldCitbc2NyaXB0YWJsZSwg
dXVpZCg5YjI4MzMzNy0wOTdkLTRmYTgtYTJkYS05MTYzMThlYWY4MjgpXQogaW50ZXJmYWNlIG5z
SURvY1NoZWxsIDogbnNJU3VwcG9ydHMKIHsKICAgLyoqCiAgICAqIExvYWRzIGEgZ2l2ZW4gVVJJ
LiAgVGhpcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gbG9hZGluZyB0aGUgcmVxdWVzdGVkIFVSSQog
ICAgKiBpbiB0aGUgb2JqZWN0IGltcGxlbWVudGluZwl0aGlzIGludGVyZmFjZS4gIElmIGl0IGNh
bid0IGJlIGxvYWRlZCBoZXJlCiAgICAqIGhvd2V2ZXIsIHRoZSBVUkwgZGlzcGF0Y2hlciB3aWxs
IGdvIHRocm91Z2ggaXRzIG5vcm1hbCBwcm9jZXNzIG9mIGNvbnRlbnQKICAgICogbG9hZGluZy4K
ICAgICoKQEAgLTYxNSw5ICs2MTUsMjMgQEAgaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3Vw
cG9ydHMKICAgICovCiAgIGF0dHJpYnV0ZSBib29sIGlzQnJvd3NlckZyYW1lOwogCiAgIC8qCiAg
ICAqIElzIHRoaXMgZG9jc2hlbGwgY29udGFpbmVkIGluIGFuIDxpZnJhbWUgbW96YnJvd3Nlcj4s
IGVpdGhlciBkaXJlY3RseSBvcgogICAgKiBpbmRpcmVjdGx5PwogICAgKi8KICAgcmVhZG9ubHkg
YXR0cmlidXRlIGJvb2wgY29udGFpbmVkSW5Ccm93c2VyRnJhbWU7CisKKyAgLyoqCisgICAqIFRo
ZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2NzaGVsbC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlIG9mIHRoZSBhc3NvY2lhdGVkIElGUkFNRSBv
ciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYKKyAgICogZXhpc3RlbnQuIFNlZSB0aGUgSFRN
TDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBUaGVzZSBmbGFncyBvbiB0aGUgZG9jc2hl
bGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1
dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuIFRoZXkgYXJlIG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcg
bmV3CisgICAqIGNvbnRlbnQsIHNhbmRib3ggZmxhZ3MgYXJlIGFsc28gaW1tdXRhYmx5IHNldCBv
biB0aGUgZG9jdW1lbnQgd2hlbiBpdCBpcworICAgKiBsb2FkZWQuCisgICAqIFRoZSBzYW5kYm94
IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94IGZsYWdzIG9uIGl0cwor
ICAgKiBkb2NzaGVsbCBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVudCwgaWYgYW55LgorICAgKiBT
ZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICAgKi8KKyAgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdzOwogfTsKZGlmZiAtLWdpdCBhL2RvbS9i
YXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcAotLS0g
YS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5k
b3cuY3BwCkBAIC0yNTUsMTYgKzI1NSwxNyBAQAogCiAjaW5jbHVkZSAibnNSZWZyZXNoRHJpdmVy
LmgiCiAjaW5jbHVkZSAibW96QXV0b0RvY1VwZGF0ZS5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9U
ZWxlbWV0cnkuaCIKICNpbmNsdWRlICJuc0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAibnNXcmFwcGVy
Q2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAibnNET01FdmVudFRhcmdldEhlbHBlci5oIgorI2lu
Y2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpZmRlZiBBTkRST0lECiAjaW5jbHVkZSA8YW5k
cm9pZC9sb2cuaD4KICNlbmRpZgogCiAjaWZkZWYgUFJfTE9HR0lORwogc3RhdGljIFBSTG9nTW9k
dWxlSW5mbyogZ0RPTUxlYWtQUkxvZzsKICNlbmRpZgpAQCAtODI0MywxNiArODI0NCwyMiBAQCBu
c0dsb2JhbFdpbmRvdzo6R2V0U2Vzc2lvblN0b3JhZ2UobnNJRE9NCiAgIGlmICghbVNlc3Npb25T
dG9yYWdlKSB7CiAgICAgKmFTZXNzaW9uU3RvcmFnZSA9IG5zbnVsbDsKIAogICAgIG5zU3RyaW5n
IGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAgICAgIG1Eb2N1bWVudC0+R2V0
RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAorICAgIC8vIElmIHRoZSBkb2N1bWVu
dCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAgICAvLyBkb24ndCBhbGxvdyBh
Y2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9jICYmIChtRG9jLT5TYW5kYm94Rmxh
Z3MoKSAmIFNBTkRCT1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NF
Q1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTZXNz
aW9uU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZXR0ZXJfQWRkUmVmcyhtU2Vzc2lvblN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwogCiAjaWZkZWYgUFJfTE9HR0lORwogICAgIGlmIChQUl9MT0dfVEVTVChnRE9N
TGVha1BSTG9nLCBQUl9MT0dfREVCVUcpKSB7CkBAIC04MzA0LDE2ICs4MzExLDIyIEBAIG5zR2xv
YmFsV2luZG93OjpHZXRMb2NhbFN0b3JhZ2UobnNJRE9NU3QKICAgICAgIGRvX0dldFNlcnZpY2Uo
IkBtb3ppbGxhLm9yZy9kb20vc3RvcmFnZW1hbmFnZXI7MSIsICZydik7CiAgICAgTlNfRU5TVVJF
X1NVQ0NFU1MocnYsIHJ2KTsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmICht
RG9jdW1lbnQpIHsKICAgICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkp
OwogICAgIH0KIAorICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmln
aW4gZmxhZyBzZXQKKyAgICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgor
ICAgIGlmIChtRG9jICYmIChtRG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9PUklHSU4p
KSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAg
ICBydiA9IHN0b3JhZ2VNYW5hZ2VyLT5HZXRMb2NhbFN0b3JhZ2VGb3JQcmluY2lwYWwocHJpbmNp
cGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb2N1bWVudFVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobUxvY2FsU3RvcmFnZSkpOwogICAgIE5TX0VOU1VS
RV9TVUNDRVNTKHJ2LCBydik7CiAgIH0KIAogICBOU19BRERSRUYoKmFMb2NhbFN0b3JhZ2UgPSBt
TG9jYWxTdG9yYWdlKTsKICAgcmV0dXJuIE5TX09LOwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFj
ZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1s
L25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1sL25z
SURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAorKysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURP
TUhUTUxJRnJhbWVFbGVtZW50LmlkbApAQCAtMzMsNDQgKzMzLDQ3IEBACiAgKiBkZWNpc2lvbiBi
eSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhl
IG5vdGljZQogICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0
aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKICAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBh
IHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICAqIHRo
ZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCiAgKgog
ICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KIAogI2luY2x1ZGUgIm5zSURPTUhU
TUxFbGVtZW50LmlkbCIKKyNpbmNsdWRlICJuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdC5pZGwi
CisjaW5jbHVkZSAibnNJRE9NRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRsIgogCiAvKioKICAqIFRo
ZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2UgaXMgdGhlIGludGVyZmFjZSB0byBh
IFtYXUhUTUwKICAqIGlmcmFtZSBlbGVtZW50LgogICoKICAqIFRoaXMgaW50ZXJmYWNlIGlzIHRy
eWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lmaWNhdGlvbjoKICAqIGh0
dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgogICogd2l0aCBjaGFuZ2Vz
IGZyb20gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgV0hBVFdHIEhUTUwgc3BlY2lmaWNhdGlvbjoKICAq
IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvCiAgKi8K
IAotW3NjcmlwdGFibGUsIHV1aWQoMGVhZDVhNWMtZTRkMy00ZTRkLTg4YjgtN2M5ZGM5ZDI2NjVj
KV0KK1tzY3JpcHRhYmxlLCB1dWlkKDUyZjYyNDRiLWIxZjUtNGY0Yy04ZmYzLTdlMTQ2MzE2ZjQx
MSldCiBpbnRlcmZhY2UgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgOiBuc0lET01IVE1MRWxlbWVu
dAogewogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBhbGlnbjsKICAgICAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgZnJhbWVCb3JkZXI7CiAgICAgICAgICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGhlaWdodDsKICAgICAgICAgICAgYXR0cmlidXRl
IERPTVN0cmluZyAgICAgICAgbG9uZ0Rlc2M7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgICAgICAgIG1hcmdpbkhlaWdodDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAg
ICAgICAgbWFyZ2luV2lkdGg7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAg
IG5hbWU7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNjcm9sbGluZzsK
ICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc3JjOwogICAgICAgICAgICBh
dHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB3aWR0aDsKICAgLy8gSW50cm9kdWNlZCBpbiBET00g
TGV2ZWwgMjoKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTURvY3VtZW50ICAgY29udGVudERv
Y3VtZW50OwogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NV2luZG93ICAgICBjb250ZW50V2lu
ZG93OwogCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01ET01TZXR0YWJsZVRva2VuTGlzdCBz
YW5kYm94OwogCiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBpZnJhbWUgZWxlbWVudHMg
cmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0byBiZSBwcmVzZW50CiAg
IC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3ViIGRvY3VtZW50IHRvIGdv
IGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRwczovL3dpa2kubW96aWxs
YS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkKICAgICAgICAgICAgYXR0
cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVuOwogfTsKZGlmZiAtLWdp
dCBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4gYi9kb20vc3JjL2pzdXJsL01ha2VmaWxlLmlu
Ci0tLSBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KKysrIGIvZG9tL3NyYy9qc3VybC9NYWtl
ZmlsZS5pbgpAQCAtNTcsMTYgKzU3LDE3IEBAIFhQSURMU1JDUwk9IFwKIENQUFNSQ1MJCT0gbnNK
U1Byb3RvY29sSGFuZGxlci5jcHAKIAogRVhQT1JUUwkJPSAkKHNyY2RpcikvbnNKU1Byb3RvY29s
SGFuZGxlci5oCiAKIExPQ0FMX0lOQ0xVREVTICs9IFwKIAkJLUkkKHNyY2RpcikgXAogCQktSSQo
dG9wc3JjZGlyKS9kb20vYmFzZSBcCiAJCS1JJCh0b3BzcmNkaXIpL25ldHdlcmsvYmFzZS9zcmMg
XAorCQktSSQodG9wc3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKIAogaWZkZWYgQlVJTERfREVC
VUdfR0MKIERFRklORVMJCSs9IC1EREVCVUdfR0MKIGVuZGlmCiAKIERJUlMgICAgICAgICAgICA9
ICQoTlVMTCkKIFRFU1RfRElSUyArPSB0ZXN0CiAKZGlmZiAtLWdpdCBhL2RvbS9zcmMvanN1cmwv
bnNKU1Byb3RvY29sSGFuZGxlci5jcHAgYi9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRs
ZXIuY3BwCi0tLSBhL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAKKysrIGIv
ZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcApAQCAtNzQsMTYgKzc0LDE3IEBA
CiAjaW5jbHVkZSAibnNUaHJlYWRVdGlscy5oIgogI2luY2x1ZGUgIm5zSUpTQ29udGV4dFN0YWNr
LmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIm5zSURvY3VtZW50
LmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0SW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lPYmpl
Y3RPdXRwdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lXcml0YWJsZVByb3BlcnR5QmFnMi5oIgog
I2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIm5zU2FuZGJv
eEZsYWdzLmgiCiAKIHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtKU1VSSUNJRCwgTlNfSlNVUklfQ0lE
KTsKIAogY2xhc3MgbnNKU1RodW5rIDogcHVibGljIG5zSUlucHV0U3RyZWFtCiB7CiBwdWJsaWM6
CiAgICAgbnNKU1RodW5rKCk7CiAKQEAgLTIyMCwxNiArMjIxLDI4IEBAIG5zcmVzdWx0IG5zSlNU
aHVuazo6RXZhbHVhdGVTY3JpcHQobnNJQ2gKICAgICAvLyBHZXQgdGhlIGdsb2JhbCBvYmplY3Qg
d2Ugc2hvdWxkIGJlIHJ1bm5pbmcgb24uCiAgICAgbnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBnbG9i
YWwgPSBHZXRHbG9iYWxPYmplY3QoYUNoYW5uZWwpOwogICAgIGlmICghZ2xvYmFsKSB7CiAgICAg
ICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAogICAgIG5zQ09NUHRyPG5zUElE
T01XaW5kb3c+IHdpbihkb19RdWVyeUludGVyZmFjZShnbG9iYWwpKTsKIAorICAgIC8vIFNhbmRi
b3hlZCBkb2N1bWVudCBjaGVjazogamF2YXNjcmlwdDogVVJJJ3MgYXJlIGRpc2FibGVkIAorICAg
IC8vIGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHVubGVzcyAnYWxsb3ctc2NyaXB0cycgd2FzIHNw
ZWNpZmllZAorCisgICAgLy8gUkVWSUVXIC0gaXQgc2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgaW5u
ZXIgd2luZG93IHdvdWxkIGJlIHRoZSBvbmUKKyAgICAvLyB0aGF0IHdpbGwgZXhlY3V0ZSB0aGUg
amF2YXNjcmlwdCB3aXRoIGl0cyBwcmluY2lwYWwgLSBpcyB0aGlzIAorICAgIC8vIGFzc3VtcHRp
b24gY29ycmVjdCA/PyAoYW5kIGlzIEdldEV4dGFudERvY3VtZW50KCkgdGhlIHJpZ2h0IHdheQor
ICAgIC8vIHRvIGdldCB0aGUgcmlnaHQgZG9jdW1lbnQgPz8KKyAgICBuc0NPTVB0cjxuc0lEb2N1
bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoYU9yaWdpbmFsSW5uZXJXaW5kb3ctPkdldEV4
dGFudERvY3VtZW50KCkpOworICAgIGlmIChkb2MgJiYgKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBT
QU5EQk9YRURfU0NSSVBUUykpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fUkVUVkFMX1VO
REVGSU5FRDsKKyAgICB9CisKICAgICAvLyBQdXNoIG91ciBwb3B1cCBjb250cm9sIHN0YXRlCiAg
ICAgbnNBdXRvUG9wdXBTdGF0ZVB1c2hlciBwb3B1cFN0YXRlUHVzaGVyKHdpbiwgYVBvcHVwU3Rh
dGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgdGhlIHNhbWUgaW5uZXIgd2lu
ZG93IGFzIHdlIHVzZWQgdG8uCiAgICAgbnNQSURPTVdpbmRvdyAqaW5uZXJXaW4gPSB3aW4tPkdl
dEN1cnJlbnRJbm5lcldpbmRvdygpOwogCiAgICAgaWYgKGlubmVyV2luICE9IGFPcmlnaW5hbElu
bmVyV2luZG93KSB7CiAgICAgICAgIHJldHVybiBOU19FUlJPUl9VTkVYUEVDVEVEOwpkaWZmIC0t
Z2l0IGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4g
Yi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbgotLS0g
YS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbgorKysg
Yi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbgpAQCAt
NTYsMTEgKzU2LDEyIEBAIENQUFNSQ1MJCSs9IG5zRGlhbG9nUGFyYW1CbG9jay5jcHAgXAogCQkg
ICAkKE5VTEwpCiBlbmRpZgogCiAjIHdlIGRvbid0IHdhbnQgdGhlIHNoYXJlZCBsaWIsIGJ1dCB3
ZSB3YW50IHRvIGZvcmNlIHRoZSBjcmVhdGlvbiBvZiBhCiAjIHN0YXRpYyBsaWIuCiBGT1JDRV9T
VEFUSUNfTElCID0gMQogCiAjIEZvciBuc0pTVXRpbHMKLUxPQ0FMX0lOQ0xVREVTICs9IC1JJCh0
b3BzcmNkaXIpL2RvbS9iYXNlCitMT0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3JjZGlyKS9kb20v
YmFzZSBcCisJCSAgLUkkKHRvcHNyY2RpcikvY29udGVudC9iYXNlL3NyYyBcCiAKIGluY2x1ZGUg
JCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawpkaWZmIC0tZ2l0IGEvZW1iZWRkaW5nL2NvbXBv
bmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcCBiL2VtYmVkZGluZy9j
b21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKLS0tIGEvZW1i
ZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcAor
KysgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNo
ZXIuY3BwCkBAIC04NiwxNiArODYsMTcgQEAKICNpbmNsdWRlICJuc1BJRE9NU3RvcmFnZS5oIgog
I2luY2x1ZGUgIm5zSVdpZGdldC5oIgogI2luY2x1ZGUgIm5zRm9jdXNNYW5hZ2VyLmgiCiAjaW5j
bHVkZSAibnNJUHJlc1NoZWxsLmgiCiAjaW5jbHVkZSAibnNQcmVzQ29udGV4dC5oIgogI2luY2x1
ZGUgIm5zQ29udGVudFV0aWxzLmgiCiAjaW5jbHVkZSAibnNJUHJlZkJyYW5jaC5oIgogI2luY2x1
ZGUgIm5zSVByZWZTZXJ2aWNlLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2lm
ZGVmIFVTRVdFQUtSRUZTCiAjaW5jbHVkZSAibnNJV2Vha1JlZmVyZW5jZS5oIgogI2VuZGlmCiAK
IHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogCiBzdGF0aWMgY29uc3QgY2hhciAqc0pTU3RhY2tD
b250cmFjdElEPSJAbW96aWxsYS5vcmcvanMveHBjL0NvbnRleHRTdGFjazsxIjsKQEAgLTYwMywx
NiArNjA0LDMzIEBAIG5zV2luZG93V2F0Y2hlcjo6T3BlbldpbmRvd0pTSW50ZXJuYWwobnMKICAg
fQogCiAgIGlmICghbmV3RG9jU2hlbGxJdGVtKSB7CiAgICAgLy8gV2UncmUgZ29pbmcgdG8gZWl0
aGVyIG9wZW4gdXAgYSBuZXcgd2luZG93IG91cnNlbHZlcyBvciBhc2sgYQogICAgIC8vIG5zSVdp
bmRvd1Byb3ZpZGVyIGZvciBvbmUuICBJbiBlaXRoZXIgY2FzZSwgd2UnbGwgd2FudCB0byBzZXQg
dGhlIHJpZ2h0CiAgICAgLy8gbmFtZSBvbiBpdC4KICAgICB3aW5kb3dOZWVkc05hbWUgPSB0cnVl
OwogCisgICAgLy8gSWYgdGhlIHBhcmVudCB0cnlpbmcgdG8gb3BlbiBhIG5ldyB3aW5kb3cgaXMg
c2FuZGJveGVkLAorICAgIC8vIHRoaXMgaXMgbm90IGFsbG93ZWQgYW5kIHdlIGZhaWwgaGVyZS4K
KyAgICBpZiAoYVBhcmVudCkgeworICAgICAgbnNDT01QdHI8bnNJRE9NRG9jdW1lbnQ+IGRvbWRv
YzsKKyAgICAgIGFQYXJlbnQtPkdldERvY3VtZW50KGdldHRlcl9BZGRSZWZzKGRvbWRvYykpOwor
ICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGRvbWRv
Yyk7CisKKyAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0g
MDsKKyAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKworICAgICAg
ICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAgICAgICBy
ZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKwogICAg
IC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHByb3ZpZGVyIGZv
ciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3BlbmluZyBhIGRpYWxv
ZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8vIGlmIHdlJ3Jl
IG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNocm9tZSBmbGFn
cyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVXaW4gPSBkb19R
dWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNocm9tZVdpbiAm
JgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9N
T0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hy
b21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>615917</attachid>
            <date>2012-04-17 15:46:17 -0700</date>
            <delta_ts>2012-06-19 15:22:30 -0700</delta_ts>
            <desc>workaround for workers needing a string origin</desc>
            <filename>iframe_sandbox_worker_string_origin_workaround</filename>
            <type>text/plain</type>
            <size>2117</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgODg3OGEzZmVlZmI2MjM1YTcyOTAwZTc0MDU5
NzFiZTAwM2U4MmZiYgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KYWxs
b3cgd29ya2VycyB0byBoYXZlIGEgbnVsbCBwcmluY2lwYWwKCmRpZmYgLS1naXQgYS9kb20vd29y
a2Vycy9Xb3JrZXJQcml2YXRlLmNwcCBiL2RvbS93b3JrZXJzL1dvcmtlclByaXZhdGUuY3BwCi0t
LSBhL2RvbS93b3JrZXJzL1dvcmtlclByaXZhdGUuY3BwCisrKyBiL2RvbS93b3JrZXJzL1dvcmtl
clByaXZhdGUuY3BwCkBAIC0zOSwxNiArMzksMTcgQEAKIAogI2luY2x1ZGUgIldvcmtlclByaXZh
dGUuaCIKIAogI2luY2x1ZGUgIm1veklUaGlyZFBhcnR5VXRpbC5oIgogI2luY2x1ZGUgIm5zSUNs
YXNzSW5mby5oIgogI2luY2x1ZGUgIm5zSUNvbnNvbGVTZXJ2aWNlLmgiCiAjaW5jbHVkZSAibnNJ
RE9NRmlsZS5oIgogI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJRG9jU2hl
bGwuaCIKICNpbmNsdWRlICJuc0lKU0NvbnRleHRTdGFjay5oIgogI2luY2x1ZGUgIm5zSU1lbW9y
eVJlcG9ydGVyLmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0RXJyb3IuaCIKICNpbmNsdWRlICJuc0lT
Y3JpcHRHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJuc0lTY3JpcHRTZWN1cml0eU1hbmFnZXIu
aCIKICNpbmNsdWRlICJuc1BJRE9NV2luZG93LmgiCiAjaW5jbHVkZSAibnNJVGV4dFRvU3ViVVJJ
LmgiCiAjaW5jbHVkZSAibnNJVGltZXIuaCIKQEAgLTY0LDE2ICs2NSwxNyBAQAogI2luY2x1ZGUg
Im5zQWxnb3JpdGhtLmgiCiAjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKICNpbmNsdWRlICJu
c0RPTUNsYXNzSW5mby5oIgogI2luY2x1ZGUgIm5zRE9NSlNVdGlscy5oIgogI2luY2x1ZGUgIm5z
R1VJRXZlbnQuaCIKICNpbmNsdWRlICJuc0pTRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJuc0pT
VXRpbHMuaCIKICNpbmNsdWRlICJuc05ldFV0aWwuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFn
cy5oIgogI2luY2x1ZGUgIm5zVGhyZWFkVXRpbHMuaCIKICNpbmNsdWRlICJ4cGNwdWJsaWMuaCIK
IAogI2lmZGVmIEFORFJPSUQKICNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgogI2VuZGlmCiAKICNp
bmNsdWRlICJFdmVudHMuaCIKQEAgLTI1MzQsMTYgKzI1MzYsMjQgQEAgV29ya2VyUHJpdmF0ZTo6
Q3JlYXRlKEpTQ29udGV4dCogYUN4LCBKUwogICAgICAgICAgIEpTX1JlcG9ydEVycm9yKGFDeCwg
IkNvdWxkIG5vdCBkZXRlcm1pbmUgaWYgY29kZWJhc2UgaXMgZmlsZSEiKTsKICAgICAgICAgICBy
ZXR1cm4gbnNudWxsOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzRmlsZSkgewogICAgICAg
ICAgIC8vIFhYWCBGaXggdGhpcywgbmVlZCBhIHJlYWwgZG9tYWluIGhlcmUuCiAgICAgICAgICAg
ZG9tYWluID0gZmlsZTsKICAgICAgICAgfQorICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciB3b3Jr
ZXJzIG5lZWRpbmcgYSBzdHJpbmcgZG9tYWluIC0gd2lsbCBiZSBmaXhlZAorICAgICAgICAvLyBp
biBhIGZvbGxvd3VwIGFmdGVyIHRoaXMgbGFuZHMuCisgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50
LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICAgICAgICBpZiAoTlNf
RkFJTEVEKGNvZGViYXNlLT5HZXRBc2NpaVNwZWMoZG9tYWluKSkpIHsKKyAgICAgICAgICAgIEpT
X1JlcG9ydEVycm9yKGFDeCwgIkNvdWxkIG5vdCBnZXQgVVJJJ3Mgc3BlYyBmb3Igc2FuZGJveGVk
IGRvY3VtZW50ISIpOworICAgICAgICAgICAgcmV0dXJuIG5zbnVsbDsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgbnNDT01QdHI8bW96SVRoaXJkUGFy
dHlVdGlsPiB0aGlyZFBhcnR5VXRpbCA9CiAgICAgICAgICAgICBkb19HZXRTZXJ2aWNlKFRISVJE
UEFSVFlVVElMX0NPTlRSQUNUSUQpOwogICAgICAgICAgIGlmICghdGhpcmRQYXJ0eVV0aWwpIHsK
ICAgICAgICAgICAgIEpTX1JlcG9ydEVycm9yKGFDeCwgIkNvdWxkIG5vdCBnZXQgdGhpcmQgcGFy
dHkgaGVscGVyIHNlcnZpY2UhIik7CiAgICAgICAgICAgICByZXR1cm4gbnNudWxsOwogICAgICAg
ICAgIH0KIAo=
</data>
<flag name="review"
          id="513233"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>615924</attachid>
            <date>2012-04-17 15:55:50 -0700</date>
            <delta_ts>2012-05-04 15:51:53 -0700</delta_ts>
            <desc>CheckMayLoad changes to allow sandboxed workers to load blob and data URIs</desc>
            <filename>iframe_sandbox_check_may_load</filename>
            <type>text/plain</type>
            <size>24733</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMjA2N2VhMTRlOWM5MzI3MjM0MzFiY2Y0ZWZk
NjUyMzk4MGIzMDNkMgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KbW9k
aWZ5IG5zSVByaW5jaXBhbDo6Y2hlY2tNYXlMb2FkIHRvIGFsbG93IGluaGVyaXRlZC9pbmhlcml0
aW5nIGxvYWRzCgpkaWZmIC0tZ2l0IGEvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbCBiL2NhcHMv
aWRsL25zSVByaW5jaXBhbC5pZGwKLS0tIGEvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbAorKysg
Yi9jYXBzL2lkbC9uc0lQcmluY2lwYWwuaWRsCkBAIC0yMDYsMzMgKzIwNiw0MyBAQCBpbnRlcmZh
Y2UgbnNJUHJpbmNpcGFsIDogbnNJU2VyaWFsaXphYmxlCiAgICAgICovCiAgICAgYm9vbGVhbiBz
dWJzdW1lc0lnbm9yaW5nRG9tYWluKGluIG5zSVByaW5jaXBhbCBvdGhlcik7CiAKICAgICAvKioK
ICAgICAgKiBDaGVja3Mgd2hldGhlciB0aGlzIHByaW5jaXBhbCBpcyBhbGxvd2VkIHRvIGxvYWQg
dGhlIG5ldHdvcmsgcmVzb3VyY2UKICAgICAgKiBsb2NhdGVkIGF0IHRoZSBnaXZlbiBVUkkgdW5k
ZXIgdGhlIHNhbWUtb3JpZ2luIHBvbGljeS4gVGhpcyBtZWFucyB0aGF0CiAgICAgICogY29kZWJh
c2UgcHJpbmNpcGFscyBhcmUgb25seSBhbGxvd2VkIHRvIGxvYWQgcmVzb3VyY2VzIGZyb20gdGhl
IHNhbWUKICAgICAgKiBkb21haW4sIHRoZSBzeXN0ZW0gcHJpbmNpcGFsIGlzIGFsbG93ZWQgdG8g
bG9hZCBhbnl0aGluZywgYW5kIG51bGwKLSAgICAgKiBwcmluY2lwYWxzIGFyZSBub3QgYWxsb3dl
ZCB0byBsb2FkIGFueXRoaW5nLgorICAgICAqIHByaW5jaXBhbHMgYXJlIG5vdCBhbGxvd2VkIHRv
IGxvYWQgYW55dGhpbmcuIFRoaXMgaXMgY2hhbmdlZCBzbGlnaHRseQorICAgICAqIGJ5IHRoZSBv
cHRpb25hbCBmbGFnIGFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCAod2hpY2ggZGVmYXVsdHMgdG8g
ZmFsc2UpCisgICAgICogd2hpY2ggYWxsb3dzIHRoZSBsb2FkIG9mIGEgZGF0YTogVVJJICh3aGlj
aCBpbmhlcml0cyB0aGUgcHJpbmNpcGFsIG9mCisgICAgICogaXRzIGxvYWRlcikgb3IgYSBVUkkg
d2l0aCB0aGUgc2FtZSBwcmluY2lwYWwgYXMgaXRzIGxvYWRlciAoZWcuIGEgCisgICAgICogQmxv
YiBVUkkpLgorICAgICAqIEluIHRoZXNlIGNhc2VzLCB3aXRoIGFsbG93SWZJbmhlcml0c1ByaW5j
aXBhbCBzZXQgdG8gdHJ1ZSwgdGhlIFVSSSBjYW4KKyAgICAgKiBiZSBsb2FkZWQgYnkgYSBudWxs
IHByaW5jaXBhbC4KICAgICAgKgogICAgICAqIElmIHRoZSBsb2FkIGlzIGFsbG93ZWQgdGhpcyBm
dW5jdGlvbiBkb2VzIG5vdGhpbmcuIElmIHRoZSBsb2FkIGlzIG5vdAogICAgICAqIGFsbG93ZWQg
dGhlIGZ1bmN0aW9uIHRocm93cyBOU19FUlJPUl9ET01fQkFEX1VSSS4KICAgICAgKgogICAgICAq
IE5PVEU6IE90aGVyIHBvbGljaWVzIG1pZ2h0IG92ZXJyaWRlIHRoaXMsIHN1Y2ggYXMgdGhlIEFj
Y2Vzcy1Db250cm9sCiAgICAgICogICAgICAgc3BlY2lmaWNhdGlvbi4KICAgICAgKiBOT1RFOiBU
aGUgJ2RvbWFpbicgYXR0cmlidXRlIGhhcyBubyBlZmZlY3Qgb24gdGhlIGJlaGF2aW91ciBvZiB0
aGlzCiAgICAgICogICAgICAgZnVuY3Rpb24uCiAgICAgICoKICAgICAgKgogICAgICAqIEBwYXJh
bSB1cmkgICAgVGhlIFVSSSBhYm91dCB0byBiZSBsb2FkZWQuCiAgICAgICogQHBhcmFtIHJlcG9y
dCBJZiB0cnVlLCB3aWxsIHJlcG9ydCBhIHdhcm5pbmcgdG8gdGhlIGNvbnNvbGUgc2VydmljZQog
ICAgICAqICAgICAgICAgICAgICAgaWYgdGhlIGxvYWQgaXMgbm90IGFsbG93ZWQuCisgICAgICog
QHBhcmFtIGFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCAgIElmIHRydWUsIHRoZSBsb2FkIGlzIGFs
bG93ZWQgaWYgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
YWRlZSBpbmhlcml0cyB0aGUgcHJpbmNpcGFsIG9mIHRoZQorICAgICAqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2FkZXIuCiAgICAgICogQHRocm93cyBOU19FUlJPUl9ET01f
QkFEX1VSSSBpZiB0aGUgbG9hZCBpcyBub3QgYWxsb3dlZC4KICAgICAgKi8KLSAgICB2b2lkIGNo
ZWNrTWF5TG9hZChpbiBuc0lVUkkgdXJpLCBpbiBib29sZWFuIHJlcG9ydCk7CisgICAgdm9pZCBj
aGVja01heUxvYWQoaW4gbnNJVVJJIHVyaSwgaW4gYm9vbGVhbiByZXBvcnQsCisgICAgICAgICAg
ICAgICAgICAgICAgaW4gYm9vbGVhbiBhbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpOwogCiAgICAg
LyoqCiAgICAgICogVGhlIHN1YmplY3QgbmFtZSBmb3IgdGhlIGNlcnRpZmljYXRlLiAgVGhpcyBh
Y3R1YWxseSBpZGVudGlmaWVzIHRoZQogICAgICAqIHN1YmplY3Qgb2YgdGhlIGNlcnRpZmljYXRl
LiAgVGhpcyBtYXkgd2VsbCBub3QgYmUgYSBzdHJpbmcgdGhhdCB3b3VsZAogICAgICAqIG1lYW4g
bXVjaCB0byBhIHR5cGljYWwgdXNlciBvbiBpdHMgb3duIChlLmcuIGl0IG1heSBoYXZlIGEgbnVt
YmVyIG9mCiAgICAgICogZGlmZmVyZW50IG5hbWVzIGFsbCBjb25jYXRlbmF0ZWQgdG9nZXRoZXIg
d2l0aCBzb21lIGluZm9ybWF0aW9uIG9uIHdoYXQKICAgICAgKiB0aGV5IG1lYW4gaW4gYmV0d2Vl
bikuCiAgICAgICoKZGlmZiAtLWdpdCBhL2NhcHMvc3JjL25zTnVsbFByaW5jaXBhbC5jcHAgYi9j
YXBzL3NyYy9uc051bGxQcmluY2lwYWwuY3BwCi0tLSBhL2NhcHMvc3JjL25zTnVsbFByaW5jaXBh
bC5jcHAKKysrIGIvY2Fwcy9zcmMvbnNOdWxsUHJpbmNpcGFsLmNwcApAQCAtMzQyLDE4ICszNDIs
NDUgQEAgbnNOdWxsUHJpbmNpcGFsOjpTdWJzdW1lcyhuc0lQcmluY2lwYWwgKgogCiBOU19JTUVU
SE9ESU1QCiBuc051bGxQcmluY2lwYWw6OlN1YnN1bWVzSWdub3JpbmdEb21haW4obnNJUHJpbmNp
cGFsICphT3RoZXIsIGJvb2wgKmFSZXN1bHQpCiB7CiAgIHJldHVybiBTdWJzdW1lcyhhT3RoZXIs
IGFSZXN1bHQpOwogfQogCiBOU19JTUVUSE9ESU1QCi1uc051bGxQcmluY2lwYWw6OkNoZWNrTWF5
TG9hZChuc0lVUkkqIGFVUkksIGJvb2wgYVJlcG9ydCkKK25zTnVsbFByaW5jaXBhbDo6Q2hlY2tN
YXlMb2FkKG5zSVVSSSogYVVSSSwgYm9vbCBhUmVwb3J0LCBib29sIGFBbGxvd0lmSW5oZXJpdHNQ
cmluY2lwYWwpCiB7CisgIGlmIChhQWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsKSB7CisgICAgLy8g
SWYgdGhlIGNhbGxlciBzcGVjaWZpZWQgdG8gYWxsb3cgbG9hZHMgb2YgVVJJcyB0aGF0IGluaGVy
aXQKKyAgICAvLyBvdXIgKG51bGwpIHByaW5jaXBhbCwgYWxsb3cgdGhlIGxvYWQgaWYgdGhlIGxv
YWRlZSBVUkkgaGFzCisgICAgLy8gdGhlIFVSSV9JTkhFUklUU19TRUNVUklUWV9DT05URVhUIGZs
YWcgc2V0LgorICAgIGJvb2wgZG9lc0luaGVyaXRTZWN1cml0eUNvbnRleHQ7CisgICAgbnNyZXN1
bHQgcnYgPQorICAgIE5TX1VSSUNoYWluSGFzRmxhZ3MoYVVSSSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSVByb3RvY29sSGFuZGxlcjo6VVJJX0lOSEVSSVRTX1NFQ1VSSVRZX0NPTlRFWFQs
CisgICAgICAgICAgICAgICAgICAgICAgICAmZG9lc0luaGVyaXRTZWN1cml0eUNvbnRleHQpOwor
CisgICAgaWYgKE5TX1NVQ0NFRURFRChydikgJiYgZG9lc0luaGVyaXRTZWN1cml0eUNvbnRleHQp
IHsKKyAgICAgIHJldHVybiBOU19PSzsKKyAgICB9CisKKyAgICAvLyBBbHNvIGFsbG93IHRoZSBs
b2FkIGlmIHRoZSBwcmluY2lwYWwgb2YgdGhlIFVSSSBiZWluZyBjaGVja2VkIGlzIGV4YWN0bHkK
KyAgICAvLyB1cyBpZSB0aGlzLgorICAgIG5zQ09NUHRyPG5zSVVSSVdpdGhQcmluY2lwYWw+IHVy
aVByaW5jID0gZG9fUXVlcnlJbnRlcmZhY2UoYVVSSSk7CisgICAgaWYgKHVyaVByaW5jKSB7Cisg
ICAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IHByaW5jaXBhbDsKKyAgICAgIHVyaVByaW5jLT5H
ZXRQcmluY2lwYWwoZ2V0dGVyX0FkZFJlZnMocHJpbmNpcGFsKSk7CisKKyAgICAgIGlmIChwcmlu
Y2lwYWwgJiYgcHJpbmNpcGFsID09IHRoaXMpIHsKKyAgICAgICAgcmV0dXJuIE5TX09LOworICAg
ICAgfQorICAgIH0KKyAgfQorCiAgIGlmIChhUmVwb3J0KSB7CiAgICAgbnNTY3JpcHRTZWN1cml0
eU1hbmFnZXI6OlJlcG9ydEVycm9yKAogICAgICAgbnNudWxsLCBOU19MSVRFUkFMX1NUUklORygi
Q2hlY2tTYW1lT3JpZ2luRXJyb3IiKSwgbVVSSSwgYVVSSSk7CiAgIH0KIAogICByZXR1cm4gTlNf
RVJST1JfRE9NX0JBRF9VUkk7CiB9CiAKZGlmZiAtLWdpdCBhL2NhcHMvc3JjL25zUHJpbmNpcGFs
LmNwcCBiL2NhcHMvc3JjL25zUHJpbmNpcGFsLmNwcAotLS0gYS9jYXBzL3NyYy9uc1ByaW5jaXBh
bC5jcHAKKysrIGIvY2Fwcy9zcmMvbnNQcmluY2lwYWwuY3BwCkBAIC0zODcsMTggKzM4Nyw0NSBA
QCBVUklJc0xvY2FsRmlsZShuc0lVUkkgKmFVUkkpCiAKICAgcmV0dXJuIHV0aWwgJiYgTlNfU1VD
Q0VFREVEKHV0aWwtPlByb3RvY29sSGFzRmxhZ3MoYVVSSSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJUHJvdG9jb2xIYW5kbGVyOjpVUklfSVNfTE9DQUxfRklMRSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlzRmlsZSkpICYmCiAgICAgICAgICBpc0ZpbGU7
CiB9CiAKIE5TX0lNRVRIT0RJTVAKLW5zUHJpbmNpcGFsOjpDaGVja01heUxvYWQobnNJVVJJKiBh
VVJJLCBib29sIGFSZXBvcnQpCituc1ByaW5jaXBhbDo6Q2hlY2tNYXlMb2FkKG5zSVVSSSogYVVS
SSwgYm9vbCBhUmVwb3J0LCBib29sIGFBbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpCiB7CisgICBp
ZiAoYUFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCkgeworICAgIC8vIElmIHRoZSBjYWxsZXIgc3Bl
Y2lmaWVkIHRvIGFsbG93IGxvYWRzIG9mIFVSSXMgdGhhdCBpbmhlcml0CisgICAgLy8gb3VyIHBy
aW5jaXBhbCwgYWxsb3cgdGhlIGxvYWQgaWYgdGhlIGxvYWRlZSBVUkkgaGFzCisgICAgLy8gdGhl
IFVSSV9JTkhFUklUU19TRUNVUklUWV9DT05URVhUIGZsYWcgc2V0LgorICAgIGJvb2wgZG9lc0lu
aGVyaXRTZWN1cml0eUNvbnRleHQ7CisgICAgbnNyZXN1bHQgcnYgPQorICAgIE5TX1VSSUNoYWlu
SGFzRmxhZ3MoYVVSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByb3RvY29sSGFuZGxl
cjo6VVJJX0lOSEVSSVRTX1NFQ1VSSVRZX0NPTlRFWFQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAmZG9lc0luaGVyaXRTZWN1cml0eUNvbnRleHQpOworCisgICAgaWYgKE5TX1NVQ0NFRURFRChy
dikgJiYgZG9lc0luaGVyaXRTZWN1cml0eUNvbnRleHQpIHsKKyAgICAgIHJldHVybiBOU19PSzsK
KyAgICB9CisKKyAgICAvLyBBbHNvIGFsbG93IHRoZSBsb2FkIGlmIHRoZSBwcmluY2lwYWwgb2Yg
dGhlIFVSSSBiZWluZyBjaGVja2VkIGlzIGV4YWN0bHkKKyAgICAvLyB1cyBpZSB0aGlzLgorICAg
IG5zQ09NUHRyPG5zSVVSSVdpdGhQcmluY2lwYWw+IHVyaVByaW5jID0gZG9fUXVlcnlJbnRlcmZh
Y2UoYVVSSSk7CisgICAgaWYgKHVyaVByaW5jKSB7CisgICAgICBuc0NPTVB0cjxuc0lQcmluY2lw
YWw+IHByaW5jaXBhbDsKKyAgICAgIHVyaVByaW5jLT5HZXRQcmluY2lwYWwoZ2V0dGVyX0FkZFJl
ZnMocHJpbmNpcGFsKSk7CisKKyAgICAgIGlmIChwcmluY2lwYWwgJiYgcHJpbmNpcGFsID09IHRo
aXMpIHsKKyAgICAgICAgcmV0dXJuIE5TX09LOworICAgICAgfQorICAgIH0KKyAgfQorCiAgIGlm
ICghbnNTY3JpcHRTZWN1cml0eU1hbmFnZXI6OlNlY3VyaXR5Q29tcGFyZVVSSXMobUNvZGViYXNl
LCBhVVJJKSkgewogICAgIGlmIChuc1NjcmlwdFNlY3VyaXR5TWFuYWdlcjo6R2V0U3RyaWN0Rmls
ZU9yaWdpblBvbGljeSgpICYmCiAgICAgICAgIFVSSUlzTG9jYWxGaWxlKGFVUkkpKSB7CiAgICAg
ICBuc0NPTVB0cjxuc0lGaWxlVVJMPiBmaWxlVVJMKGRvX1F1ZXJ5SW50ZXJmYWNlKGFVUkkpKTsK
IAogICAgICAgaWYgKCFVUklJc0xvY2FsRmlsZShtQ29kZWJhc2UpKSB7CiAgICAgICAgIC8vIElm
IHRoZSBjb2RlYmFzZSBpcyBub3QgYWxzbyBhIGZpbGU6IHVyaSB0aGVuIGZvcmdldCBpdAogICAg
ICAgICAvLyAoZG9uJ3Qgd2FudCByZXNvdXJjZTogcHJpbmNpcGFscyBpbiBhIGZpbGU6IGRvYykK
ZGlmZiAtLWdpdCBhL2NhcHMvc3JjL25zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmNwcCBiL2NhcHMv
c3JjL25zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmNwcAotLS0gYS9jYXBzL3NyYy9uc1NjcmlwdFNl
Y3VyaXR5TWFuYWdlci5jcHAKKysrIGIvY2Fwcy9zcmMvbnNTY3JpcHRTZWN1cml0eU1hbmFnZXIu
Y3BwCkBAIC0xNDkyLDE3ICsxNDkyLDE3IEBAIG5zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOjpDaGVj
a0xvYWRVUklXaXQKICAgICAvLyBDaGVjayBmb3IgdXJpcyB0aGF0IGFyZSBvbmx5IGxvYWRhYmxl
IGJ5IHByaW5jaXBhbHMgdGhhdCBzdWJzdW1lIHRoZW0KICAgICBib29sIGhhc0ZsYWdzOwogICAg
IHJ2ID0gTlNfVVJJQ2hhaW5IYXNGbGFncyh0YXJnZXRCYXNlVVJJLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lQcm90b2NvbEhhbmRsZXI6OlVSSV9MT0FEQUJMRV9CWV9TVUJTVU1F
UlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXNGbGFncyk7CiAgICAgTlNfRU5T
VVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICAgIGlmIChoYXNGbGFncykgewotICAgICAgICByZXR1
cm4gYVByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHRhcmdldEJhc2VVUkksIHRydWUpOworICAgICAg
ICByZXR1cm4gYVByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHRhcmdldEJhc2VVUkksIHRydWUsIGZh
bHNlKTsKICAgICB9CiAKICAgICAvLy0tIGdldCB0aGUgc291cmNlIHNjaGVtZQogICAgIG5zQ0F1
dG9TdHJpbmcgc291cmNlU2NoZW1lOwogICAgIHJ2ID0gc291cmNlQmFzZVVSSS0+R2V0U2NoZW1l
KHNvdXJjZVNjaGVtZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHJldHVybiBydjsKIAogICAg
IGlmIChzb3VyY2VTY2hlbWUuTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbChOU19OVUxMUFJJTkNJUEFM
X1NDSEVNRSkpIHsKZGlmZiAtLWdpdCBhL2NhcHMvc3JjL25zU3lzdGVtUHJpbmNpcGFsLmNwcCBi
L2NhcHMvc3JjL25zU3lzdGVtUHJpbmNpcGFsLmNwcAotLS0gYS9jYXBzL3NyYy9uc1N5c3RlbVBy
aW5jaXBhbC5jcHAKKysrIGIvY2Fwcy9zcmMvbnNTeXN0ZW1QcmluY2lwYWwuY3BwCkBAIC0xNDEs
MTcgKzE0MSwxNyBAQCBuc1N5c3RlbVByaW5jaXBhbDo6U3Vic3VtZXMobnNJUHJpbmNpcGFsCiBO
U19JTUVUSE9ESU1QCiBuc1N5c3RlbVByaW5jaXBhbDo6U3Vic3VtZXNJZ25vcmluZ0RvbWFpbihu
c0lQcmluY2lwYWwgKm90aGVyLCBib29sICpyZXN1bHQpCiB7CiAgICAgKnJlc3VsdCA9IHRydWU7
CiAgICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCi1uc1N5c3RlbVByaW5jaXBh
bDo6Q2hlY2tNYXlMb2FkKG5zSVVSSSogdXJpLCBib29sIGFSZXBvcnQpCituc1N5c3RlbVByaW5j
aXBhbDo6Q2hlY2tNYXlMb2FkKG5zSVVSSSogdXJpLCBib29sIGFSZXBvcnQsIGJvb2wgYUFsbG93
SWZJbmhlcml0c1ByaW5jaXBhbCkKIHsKICAgICByZXR1cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRI
T0RJTVAKIG5zU3lzdGVtUHJpbmNpcGFsOjpHZXRIYXNoVmFsdWUoUFJVaW50MzIgKnJlc3VsdCkK
IHsKICAgICAqcmVzdWx0ID0gTlNfUFRSX1RPX0lOVDMyKHRoaXMpOwpkaWZmIC0tZ2l0IGEvY29u
dGVudC9iYXNlL3NyYy9uc0NvbnRlbnRTaW5rLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250
ZW50U2luay5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRTaW5rLmNwcAorKysg
Yi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFNpbmsuY3BwCkBAIC0xMDQyLDE3ICsxMDQyLDE3
IEBAIG5zQ29udGVudFNpbms6OlByb2Nlc3NPZmZsaW5lTWFuaWZlc3QoY28KICAgICBuc0NvbnRl
bnRVdGlsczo6TmV3VVJJV2l0aERvY3VtZW50Q2hhcnNldChnZXR0ZXJfQWRkUmVmcyhtYW5pZmVz
dFVSSSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU1h
bmlmZXN0U3BlYywgbURvY3VtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Eb2N1bWVudFVSSSk7CiAgICAgaWYgKCFtYW5pZmVzdFVSSSkgewogICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIERvY3VtZW50cyBtdXN0IGxpc3QgYSBtYW5pZmVz
dCBmcm9tIHRoZSBzYW1lIG9yaWdpbgotICAgIHJ2ID0gbURvY3VtZW50LT5Ob2RlUHJpbmNpcGFs
KCktPkNoZWNrTWF5TG9hZChtYW5pZmVzdFVSSSwgdHJ1ZSk7CisgICAgcnYgPSBtRG9jdW1lbnQt
Pk5vZGVQcmluY2lwYWwoKS0+Q2hlY2tNYXlMb2FkKG1hbmlmZXN0VVJJLCB0cnVlLCBmYWxzZSk7
CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIGFjdGlvbiA9IENBQ0hFX1NFTEVDVElP
Tl9SRVNFTEVDVF9XSVRIT1VUX01BTklGRVNUOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgIC8v
IE9ubHkgY29udGludWUgaWYgdGhlIGRvY3VtZW50IGhhcyBwZXJtaXNzaW9uIHRvIHVzZSBvZmZs
aW5lIEFQSXMuCiAgICAgICBpZiAoIW5zQ29udGVudFV0aWxzOjpPZmZsaW5lQXBwQWxsb3dlZCht
RG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKSkpIHsKICAgICAgICAgcmV0dXJuOwogICAgICAgfQpk
aWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAgYi9jb250ZW50
L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29u
dGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcApA
QCAtNDQ0MSwxNyArNDQ0MSwxNyBAQCBuc0NvbnRlbnRVdGlsczo6Q2hlY2tTZWN1cml0eUJlZm9y
ZUxvYWQoCiAKICAgLy8gU2FtZSBPcmlnaW4KICAgaWYgKChhQWxsb3dEYXRhICYmIFNjaGVtZUlz
KGFVUklUb0xvYWQsICJkYXRhIikpIHx8CiAgICAgICAoKGFDaGVja0xvYWRGbGFncyAmIG5zSVNj
cmlwdFNlY3VyaXR5TWFuYWdlcjo6QUxMT1dfQ0hST01FKSAmJgogICAgICAgIFNjaGVtZUlzKGFV
UklUb0xvYWQsICJjaHJvbWUiKSkpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAotICByZXR1
cm4gYUxvYWRpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJVG9Mb2FkLCB0cnVlKTsKKyAg
cmV0dXJuIGFMb2FkaW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQoYVVSSVRvTG9hZCwgdHJ1ZSwg
ZmFsc2UpOwogfQogCiBib29sCiBuc0NvbnRlbnRVdGlsczo6SXNTeXN0ZW1QcmluY2lwYWwobnNJ
UHJpbmNpcGFsKiBhUHJpbmNpcGFsKQogewogICBib29sIGlzU3lzdGVtOwogICBuc3Jlc3VsdCBy
diA9IHNTZWN1cml0eU1hbmFnZXItPklzU3lzdGVtUHJpbmNpcGFsKGFQcmluY2lwYWwsICZpc1N5
c3RlbSk7CiAgIHJldHVybiBOU19TVUNDRUVERUQocnYpICYmIGlzU3lzdGVtOwpAQCAtNTU0Mywx
OSArNTU0MywxOSBAQCBuc0NvbnRlbnRVdGlsczo6Q2hlY2tTYW1lT3JpZ2luKG5zSUNoYW5uCiAK
ICAgbnNDT01QdHI8bnNJVVJJPiBuZXdVUkk7CiAgIGFOZXdDaGFubmVsLT5HZXRVUkkoZ2V0dGVy
X0FkZFJlZnMobmV3VVJJKSk7CiAgIG5zQ09NUHRyPG5zSVVSST4gbmV3T3JpZ2luYWxVUkk7CiAg
IGFOZXdDaGFubmVsLT5HZXRPcmlnaW5hbFVSSShnZXR0ZXJfQWRkUmVmcyhuZXdPcmlnaW5hbFVS
SSkpOwogCiAgIE5TX0VOU1VSRV9TVEFURShvbGRQcmluY2lwYWwgJiYgbmV3VVJJICYmIG5ld09y
aWdpbmFsVVJJKTsKIAotICBuc3Jlc3VsdCBydiA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlMb2Fk
KG5ld1VSSSwgZmFsc2UpOworICBuc3Jlc3VsdCBydiA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlM
b2FkKG5ld1VSSSwgZmFsc2UsIGZhbHNlKTsKICAgaWYgKE5TX1NVQ0NFRURFRChydikgJiYgbmV3
T3JpZ2luYWxVUkkgIT0gbmV3VVJJKSB7Ci0gICAgcnYgPSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5
TG9hZChuZXdPcmlnaW5hbFVSSSwgZmFsc2UpOworICAgIHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVj
a01heUxvYWQobmV3T3JpZ2luYWxVUkksIGZhbHNlLCBmYWxzZSk7CiAgIH0KIAogICByZXR1cm4g
cnY7CiB9CiAKIE5TX0lNUExfSVNVUFBPUlRTMihuc1NhbWVPcmlnaW5DaGVja2VyLAogICAgICAg
ICAgICAgICAgICAgIG5zSUNoYW5uZWxFdmVudFNpbmssCiAgICAgICAgICAgICAgICAgICAgbnNJ
SW50ZXJmYWNlUmVxdWVzdG9yKQpAQCAtNTcyMiwxNyArNTcyMiwxNyBAQCBuc0NvbnRlbnRVdGls
czo6R2V0RG9jdW1lbnRGcm9tU2NyaXB0Q29uCiAvKiBzdGF0aWMgKi8KIGJvb2wKIG5zQ29udGVu
dFV0aWxzOjpDaGVja01heUxvYWQobnNJUHJpbmNpcGFsKiBhUHJpbmNpcGFsLCBuc0lDaGFubmVs
KiBhQ2hhbm5lbCkKIHsKICAgbnNDT01QdHI8bnNJVVJJPiBjaGFubmVsVVJJOwogICBuc3Jlc3Vs
dCBydiA9IE5TX0dldEZpbmFsQ2hhbm5lbFVSSShhQ2hhbm5lbCwgZ2V0dGVyX0FkZFJlZnMoY2hh
bm5lbFVSSSkpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgZmFsc2UpOwogCi0gIHJldHVybiBO
U19TVUNDRUVERUQoYVByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGNoYW5uZWxVUkksIGZhbHNlKSk7
CisgIHJldHVybiBOU19TVUNDRUVERUQoYVByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGNoYW5uZWxV
UkksIGZhbHNlLCBmYWxzZSkpOwogfQogCiBuc0NvbnRlbnRUeXBlUGFyc2VyOjpuc0NvbnRlbnRU
eXBlUGFyc2VyKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZykKICAgOiBtU3RyaW5nKGFTdHJpbmcp
LCBtU2VydmljZShuc251bGwpCiB7CiAgIENhbGxHZXRTZXJ2aWNlKCJAbW96aWxsYS5vcmcvbmV0
d29yay9taW1lLWhkcnBhcmFtOzEiLCAmbVNlcnZpY2UpOwogfQogCkBAIC02NDcxLDE3ICs2NDcx
LDE3IEBAIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmkKICAgLy8gZmls
ZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMgaXMgYSBmaWxlOiBsb2Fk
IG9wZW5lZCBmcm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVlZAogICAvLyB0byBpbmhl
cml0IHRoZSBvd25lciBmcm9tIHRoZSByZWZlcnJlciBzbyB0aGV5IGNhbiBzY3JpcHQgZWFjaCBv
dGhlci4KICAgLy8gSWYgd2UgZG9uJ3Qgc2V0IHRoZSBvd25lciBleHBsaWNpdGx5IHRoZW4gZWFj
aCBmaWxlOiBnZXRzIGFuIG93bmVyCiAgIC8vIGJhc2VkIG9uIGl0cyBvd24gY29kZWJhc2UgbGF0
ZXIuCiAgIC8vCiAgIGlmIChVUklJc0xvY2FsRmlsZShhVVJJKSAmJiBhTG9hZGluZ1ByaW5jaXBh
bCAmJgotICAgICAgTlNfU1VDQ0VFREVEKGFMb2FkaW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQo
YVVSSSwgZmFsc2UpKSAmJgorICAgICAgTlNfU1VDQ0VFREVEKGFMb2FkaW5nUHJpbmNpcGFsLT5D
aGVja01heUxvYWQoYVVSSSwgZmFsc2UsIGZhbHNlKSkgJiYKICAgICAgIC8vIE9uZSBtb3JlIGNo
ZWNrIGhlcmUuICBDaGVja01heUxvYWQgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUgZm9yIHRoZQog
ICAgICAgLy8gc3lzdGVtIHByaW5jaXBhbCwgYnV0IHdlIGRvIE5PVCB3YW50IHRvIGluaGVyaXQg
aW4gdGhhdCBjYXNlLgogICAgICAgIUlzU3lzdGVtUHJpbmNpcGFsKGFMb2FkaW5nUHJpbmNpcGFs
KSkgewogICAgIGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0
dXJuIHRydWU7CiAgIH0KIAogICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jh
c2Uvc3JjL25zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25z
Q3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0Nyb3Nz
U2l0ZUxpc3RlbmVyUHJveHkuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDcm9zc1NpdGVM
aXN0ZW5lclByb3h5LmNwcApAQCAtNzcwLDIwICs3NzAsMjAgQEAgbnNDT1JTTGlzdGVuZXJQcm94
eTo6VXBkYXRlQ2hhbm5lbChuc0lDaAogICBpZiAob3JpZ2luYWxVUkkgIT0gdXJpKSB7CiAgICAg
cnYgPSBuc0NvbnRlbnRVdGlsczo6R2V0U2VjdXJpdHlNYW5hZ2VyKCktPgogICAgICAgQ2hlY2tM
b2FkVVJJV2l0aFByaW5jaXBhbChtUmVxdWVzdGluZ1ByaW5jaXBhbCwgb3JpZ2luYWxVUkksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVNjcmlwdFNlY3VyaXR5TWFuYWdlcjo6
U1RBTkRBUkQpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgIH0KIAogICBpZiAo
IW1IYXNCZWVuQ3Jvc3NTaXRlICYmCi0gICAgICBOU19TVUNDRUVERUQobVJlcXVlc3RpbmdQcmlu
Y2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIGZhbHNlKSkgJiYKKyAgICAgIE5TX1NVQ0NFRURFRCht
UmVxdWVzdGluZ1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UsIGZhbHNlKSkgJiYK
ICAgICAgIChvcmlnaW5hbFVSSSA9PSB1cmkgfHwKICAgICAgICBOU19TVUNDRUVERUQobVJlcXVl
c3RpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChvcmlnaW5hbFVSSSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSkpKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl
LCBmYWxzZSkpKSkgewogICAgIHJldHVybiBOU19PSzsKICAgfQogCiAgIC8vIEl0J3MgYSBjcm9z
cyBzaXRlIGxvYWQKICAgbUhhc0JlZW5Dcm9zc1NpdGUgPSB0cnVlOwogCiAgIG5zQ1N0cmluZyB1
c2VycGFzczsKICAgdXJpLT5HZXRVc2VyUGFzcyh1c2VycGFzcyk7CmRpZmYgLS1naXQgYS9jb250
ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50
LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTExMDAsMjggKzExMDAsMjUgQEAgbnNFeHRlcm5h
bFJlc291cmNlTWFwOjpQZW5kaW5nTG9hZDo6U3RhcgogCiAgIG5zSVByaW5jaXBhbCogcmVxdWVz
dGluZ1ByaW5jaXBhbCA9IGFSZXF1ZXN0aW5nTm9kZS0+Tm9kZVByaW5jaXBhbCgpOwogCiAgIG5z
cmVzdWx0IHJ2ID0gbnNDb250ZW50VXRpbHM6OkdldFNlY3VyaXR5TWFuYWdlcigpLT4KICAgICBD
aGVja0xvYWRVUklXaXRoUHJpbmNpcGFsKHJlcXVlc3RpbmdQcmluY2lwYWwsIGFVUkksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTY3JpcHRTZWN1cml0eU1hbmFnZXI6OlNUQU5E
QVJEKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgCi0gIC8vIEFsbG93IGRhdGEg
VVJJcyAobGV0IHRoZW0gc2tpcCB0aGUgQ2hlY2tNYXlMb2FkIGNhbGwpLCBzaW5jZSB3ZSB3YW50
CisgIC8vIEFsbG93IGRhdGEgVVJJcyBhbmQgb3RoZXIgVVJJJ3MgdGhhdCBpbmhlcml0IHRoZWly
IHByaW5jaXBhbCBieSBwYXNzaW5nCisgIC8vIHRydWUgYXMgdGhlIDNyZCBhcmd1bWVudCBvZiBD
aGVja01heUxvYWQsIHNpbmNlIHdlIHdhbnQKICAgLy8gdG8gYWxsb3cgZXh0ZXJuYWwgcmVzb3Vy
Y2VzIGZyb20gZGF0YSBVUklzIHJlZ2FyZGxlc3Mgb2YgdGhlIGRpZmZlcmVuY2UKICAgLy8gaW4g
VVJJIHNjaGVtZS4KLSAgYm9vbCBkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dDsKLSAgcnYgPQot
ICAgIE5TX1VSSUNoYWluSGFzRmxhZ3MoYVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVByb3RvY29sSGFuZGxlcjo6VVJJX0lOSEVSSVRTX1NFQ1VSSVRZX0NPTlRFWFQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAmZG9lc0luaGVyaXRTZWN1cml0eUNvbnRleHQpOwotICBpZiAoTlNf
RkFJTEVEKHJ2KSB8fCAhZG9lc0luaGVyaXRTZWN1cml0eUNvbnRleHQpIHsKLSAgICBydiA9IHJl
cXVlc3RpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJLCB0cnVlKTsKLSAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwotICB9CisKKyAgLy8gUkVWSUVXIDogaXMgaXQgcmVhbGx5IG9r
IHRvIGFsbG93IGphdmFzY3JpcHQ6IFVSSSdzIGhlcmUgPz8KKworICBydiA9IHJlcXVlc3RpbmdQ
cmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJLCB0cnVlLCB0cnVlKTsKKyAgTlNfRU5TVVJFX1NV
Q0NFU1MocnYsIHJ2KTsKIAogICBQUkludDE2IHNob3VsZExvYWQgPSBuc0lDb250ZW50UG9saWN5
OjpBQ0NFUFQ7CiAgIHJ2ID0gTlNfQ2hlY2tDb250ZW50TG9hZFBvbGljeShuc0lDb250ZW50UG9s
aWN5OjpUWVBFX09USEVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVVSSSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RpbmdQcmluY2lwYWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVxdWVzdGluZ05vZGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFbXB0eUNTdHJpbmcoKSwgLy9taW1lIGd1ZXNzCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc251bGwsICAgICAgICAgLy9leHRyYQpk
aWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc1hNTEh0dHBSZXF1ZXN0LmNwcCBiL2NvbnRl
bnQvYmFzZS9zcmMvbnNYTUxIdHRwUmVxdWVzdC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9u
c1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zWE1MSHR0cFJlcXVl
c3QuY3BwCkBAIC0xNzQ0LDE2ICsxNzQ0LDI0IEBAIG5zWE1MSHR0cFJlcXVlc3Q6OkNoZWNrQ2hh
bm5lbEZvckNyb3NzU2kKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAogICAvLyAuLi5vciBpZiB0
aGlzIGlzIGEgc2FtZS1vcmlnaW4gcmVxdWVzdC4KICAgaWYgKG5zQ29udGVudFV0aWxzOjpDaGVj
a01heUxvYWQobVByaW5jaXBhbCwgYUNoYW5uZWwpKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9
CiAKKyAgLy8gUkVWSUVXOiBzaW5jZSB0aGUgY2hlY2sgYWJvdmUgaXMgb24gdGhlIGNoYW5uZWwg
YW5kIHRoZSBvbmUKKyAgLy8gYmVsb3cgaXMgb24gdGhlIGZpbmFsIGNoYW5uZWwgVVJJLCBJJ20g
bm90IHN1cmUgd2Ugd2FudCB0bworICAvLyBwYXNzIHRydWUgZm9yIGFBbGxvd0lmSW5oZXJpdHNQ
cmluY2lwYWwgdG8gQ2hlY2tNYXlMb2FkIGFib3ZlCisgIC8vIHRoZSBiZWxvdyBjb3VsZCBiZSBy
ZXBsYWNlZCB3aXRoIGEgY2FsbCB0byBDaGVja01heUxvYWQgZm9yCisgIC8vIGNoYW5uZWxVUkkg
cGFzc2luZyB0cnVlIGZvciBhQWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsIHRob3VnaCwKKyAgLy8g
aWYgd2Ugd2FudGVkIHRvIGFsbG93IG90aGVyIFVSSSdzIHRoYXQgaW5oZXJpdCB0aGUgcHJpbmNp
cGFsIG9mCisgIC8vIHRoZWlyIGNyZWF0b3IgYXMgd2VsbCBhcyBkYXRhIFVSSXMuCisKICAgLy8g
ZXhlbXB0IGRhdGEgVVJJcyBmcm9tIHRoZSBzYW1lIG9yaWdpbiBjaGVjay4KICAgbnNDT01QdHI8
bnNJVVJJPiBjaGFubmVsVVJJOwogICBib29sIGRhdGFTY2hlbWUgPSBmYWxzZTsKICAgaWYgKE5T
X1NVQ0NFRURFRChOU19HZXRGaW5hbENoYW5uZWxVUkkoYUNoYW5uZWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKGNoYW5uZWxVUkkpKSkg
JiYKICAgICAgIE5TX1NVQ0NFRURFRChjaGFubmVsVVJJLT5TY2hlbWVJcygiZGF0YSIsICZkYXRh
U2NoZW1lKSkgJiYKICAgICAgIGRhdGFTY2hlbWUpIHsKICAgICByZXR1cm4gTlNfT0s7CmRpZmYg
LS1naXQgYS9jb250ZW50L3hibC9zcmMvbnNYQkxTZXJ2aWNlLmNwcCBiL2NvbnRlbnQveGJsL3Ny
Yy9uc1hCTFNlcnZpY2UuY3BwCi0tLSBhL2NvbnRlbnQveGJsL3NyYy9uc1hCTFNlcnZpY2UuY3Bw
CisrKyBiL2NvbnRlbnQveGJsL3NyYy9uc1hCTFNlcnZpY2UuY3BwCkBAIC05NzcsMTcgKzk3Nywx
NyBAQCBuc1hCTFNlcnZpY2U6OkxvYWRCaW5kaW5nRG9jdW1lbnRJbmZvKG5zCiAgICAgTlNfRU5T
VVJFX1NVQ0NFU1MocnYsIE5TX0VSUk9SX1hCTF9CTE9DS0VEKTsKIAogICAgIGlmICghSXNTeXN0
ZW1PckNocm9tZVVSTFByaW5jaXBhbChhT3JpZ2luUHJpbmNpcGFsKSkgewogICAgICAgLy8gQWxz
byBtYWtlIHN1cmUgdGhhdCB3ZSdyZSBzYW1lLW9yaWdpbiB3aXRoIHRoZSBib3VuZCBkb2N1bWVu
dAogICAgICAgLy8gZXhjZXB0IGlmIHRoZSBzdHlsZXNoZWV0IGhhcyB0aGUgc3lzdGVtIHByaW5j
aXBhbC4KICAgICAgIGlmICghKGdBbGxvd0RhdGFVUklzICYmIFNjaGVtZUlzKGFCaW5kaW5nVVJJ
LCAiZGF0YSIpKSAmJgogICAgICAgICAgICFTY2hlbWVJcyhhQmluZGluZ1VSSSwgImNocm9tZSIp
KSB7CiAgICAgICAgIHJ2ID0gYUJvdW5kRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+Q2hlY2tN
YXlMb2FkKGFCaW5kaW5nVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgZmFsc2UpOwogICAgICAgICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgTlNfRVJST1JfWEJMX0JMT0NLRUQpOwogICAgICAgfQogCiAg
ICAgICAvLyBGaW5hbGx5IGNoZWNrIGlmIHRoaXMgZG9jdW1lbnQgaXMgYWxsb3dlZCB0byB1c2Ug
WEJMIGF0IGFsbC4KICAgICAgIE5TX0VOU1VSRV9UUlVFKGFCb3VuZERvY3VtZW50LT5BbGxvd1hV
TFhCTCgpLAogICAgICAgICAgICAgICAgICAgICAgTlNfRVJST1JfWEJMX0JMT0NLRUQpOwogICAg
IH0KICAgfQpkaWZmIC0tZ2l0IGEvY29udGVudC94bWwvZG9jdW1lbnQvc3JjL25zWE1MRG9jdW1l
bnQuY3BwIGIvY29udGVudC94bWwvZG9jdW1lbnQvc3JjL25zWE1MRG9jdW1lbnQuY3BwCi0tLSBh
L2NvbnRlbnQveG1sL2RvY3VtZW50L3NyYy9uc1hNTERvY3VtZW50LmNwcAorKysgYi9jb250ZW50
L3htbC9kb2N1bWVudC9zcmMvbnNYTUxEb2N1bWVudC5jcHAKQEAgLTM2MiwxNyArMzYyLDIxIEBA
IG5zWE1MRG9jdW1lbnQ6OkxvYWQoY29uc3QgbnNBU3RyaW5nJiBhVXIKICAgLy8gdGhhdCB3ZSBk
b24ndCBlbmQgdXAgaW4gYSBjYXNlIHdoZXJlIGNvZGUgd2l0aCBlbGV2YXRlZCBwcml2aWxlZ2Vz
IGlzCiAgIC8vIGNhbGxpbmcgdXMgYW5kIGNoYW5naW5nIHRoZSBwcmluY2lwYWwgb2YgdGhpcyBk
b2N1bWVudC4KIAogICAvLyBFbmZvcmNlIHNhbWUtb3JpZ2luIGV2ZW4gZm9yIGNocm9tZSBsb2Fk
ZXJzIHRvIGF2b2lkIHNvbWVvbmUgYWNjaWRlbnRhbGx5CiAgIC8vIHVzaW5nIGEgZG9jdW1lbnQg
dGhhdCBjb250ZW50IGhhcyBhIHJlZmVyZW5jZSB0byBhbmQgdHVybiB0aGF0IGludG8gYQogICAv
LyBjaHJvbWUgZG9jdW1lbnQuCiAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gcHJpbmNpcGFsID0g
Tm9kZVByaW5jaXBhbCgpOwogICBpZiAoIW5zQ29udGVudFV0aWxzOjpJc1N5c3RlbVByaW5jaXBh
bChwcmluY2lwYWwpKSB7Ci0gICAgcnYgPSBwcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIGZh
bHNlKTsKKyAgICAvLyBSRVZJRVcgOiBpdCBtaWdodCBiZSBkZXNpcmFibGUgdG8gcGFzcyB0cnVl
IGFzIHRoZQorICAgIC8vIDNyZCBwYXJhbSBoZXJlIGFuZCBhbGxvdyBsb2FkaW5nIG9mIFVSSXMg
dGhhdCBpbmhlcml0CisgICAgLy8gdGhlIHByaW5jaXBhbCBvZiB0aGVpciBjcmVhdG9yLiBOb3Qg
c3VyZSBhYm91dCBqYXZhc2NyaXB0OgorICAgIC8vIHRob3VnaC4KKyAgICBydiA9IHByaW5jaXBh
bC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UsIGZhbHNlKTsKICAgICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwogCiAgICAgUFJJbnQxNiBzaG91bGRMb2FkID0gbnNJQ29udGVudFBvbGljeTo6
QUNDRVBUOwogICAgIHJ2ID0gTlNfQ2hlY2tDb250ZW50TG9hZFBvbGljeShuc0lDb250ZW50UG9s
aWN5OjpUWVBFX1hNTEhUVFBSRVFVRVNULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW5jaXBhbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGluZ0RvYyA/IGNhbGxpbmdE
b2MuZ2V0KCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PG5zSURvY3VtZW50Kj4odGhpcyksCmRpZmYgLS1naXQgYS9jb250ZW50L3h1bC9kb2N1bWVu
dC9zcmMvbnNYVUxEb2N1bWVudC5jcHAgYi9jb250ZW50L3h1bC9kb2N1bWVudC9zcmMvbnNYVUxE
b2N1bWVudC5jcHAKLS0tIGEvY29udGVudC94dWwvZG9jdW1lbnQvc3JjL25zWFVMRG9jdW1lbnQu
Y3BwCisrKyBiL2NvbnRlbnQveHVsL2RvY3VtZW50L3NyYy9uc1hVTERvY3VtZW50LmNwcApAQCAt
MjcwMCwxNyArMjcwMCwxNyBAQCBuc1hVTERvY3VtZW50OjpMb2FkT3ZlcmxheUludGVybmFsKG5z
SVVSCiAKICAgICAvLyBDaHJvbWUgZG9jdW1lbnRzIGFyZSBhbGxvd2VkIHRvIGxvYWQgb3Zlcmxh
eXMgZnJvbSBhbnl3aGVyZS4KICAgICAvLyBJbiBhbGwgb3RoZXIgY2FzZXMsIHRoZSBvdmVybGF5
IGlzIG9ubHkgYWxsb3dlZCB0byBsb2FkIGlmCiAgICAgLy8gdGhlIG1hc3RlciBkb2N1bWVudCBh
bmQgcHJvdG90eXBlIGRvY3VtZW50IGhhdmUgdGhlIHNhbWUgb3JpZ2luLgogCiAgICAgYm9vbCBk
b2N1bWVudElzQ2hyb21lID0gSXNDaHJvbWVVUkkobURvY3VtZW50VVJJKTsKICAgICBpZiAoIWRv
Y3VtZW50SXNDaHJvbWUpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIGFsbG93ZWQgdG8g
bG9hZCB0aGlzIG92ZXJsYXkuCi0gICAgICAgIHJ2ID0gTm9kZVByaW5jaXBhbCgpLT5DaGVja01h
eUxvYWQoYVVSSSwgdHJ1ZSk7CisgICAgICAgIHJ2ID0gTm9kZVByaW5jaXBhbCgpLT5DaGVja01h
eUxvYWQoYVVSSSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewog
ICAgICAgICAgICAgKmFGYWlsdXJlRnJvbUNvbnRlbnQgPSB0cnVlOwogICAgICAgICAgICAgcmV0
dXJuIHJ2OwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTG9vayBpbiB0aGUgcHJvdG90eXBl
IGNhY2hlIGZvciB0aGUgcHJvdG90eXBlIGRvY3VtZW50IHdpdGgKICAgICAvLyB0aGUgc3BlY2lm
aWVkIG92ZXJsYXkgVVJJLiBPbmx5IHVzZSB0aGUgY2FjaGUgaWYgdGhlIGNvbnRhaW5pbmcKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQveHVsL3RlbXBsYXRlcy9zcmMvbnNYVUxUZW1wbGF0ZUJ1aWxkZXIu
Y3BwIGIvY29udGVudC94dWwvdGVtcGxhdGVzL3NyYy9uc1hVTFRlbXBsYXRlQnVpbGRlci5jcHAK
LS0tIGEvY29udGVudC94dWwvdGVtcGxhdGVzL3NyYy9uc1hVTFRlbXBsYXRlQnVpbGRlci5jcHAK
KysrIGIvY29udGVudC94dWwvdGVtcGxhdGVzL3NyYy9uc1hVTFRlbXBsYXRlQnVpbGRlci5jcHAK
QEAgLTEzNzIsMTcgKzEzNzIsMTcgQEAgbnNYVUxUZW1wbGF0ZUJ1aWxkZXI6OkxvYWREYXRhU291
cmNlVXJscwogCiAgICAgICAgIG5zQ09NUHRyPG5zSVVSST4gdXJpOwogICAgICAgICBydiA9IE5T
X05ld1VSSShnZXR0ZXJfQWRkUmVmcyh1cmkpLCB1cmlTdHIpOwogICAgICAgICBpZiAoTlNfRkFJ
TEVEKHJ2KSB8fCAhdXJpKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5lY2tvIHdpbGwgYmFy
ZiBpZiBvdXIgVVJJIGlzIHdlaXJkCiAKICAgICAgICAgLy8gZG9uJ3QgYWRkIHRoZSB1cmkgdG8g
dGhlIGxpc3QgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCBhbGxvd2VkIHRvCiAgICAgICAgIC8vIGxv
YWQgaXQKLSAgICAgICAgaWYgKCFpc1RydXN0ZWQgJiYgTlNfRkFJTEVEKGRvY1ByaW5jaXBhbC0+
Q2hlY2tNYXlMb2FkKHVyaSwgdHJ1ZSkpKQorICAgICAgICBpZiAoIWlzVHJ1c3RlZCAmJiBOU19G
QUlMRUQoZG9jUHJpbmNpcGFsLT5DaGVja01heUxvYWQodXJpLCB0cnVlLCBmYWxzZSkpKQogICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHVyaUxpc3QtPkFwcGVuZEVsZW1lbnQodXJpLCBm
YWxzZSk7CiAgICAgfQogCiAgICAgbnNDT01QdHI8bnNJRE9NTm9kZT4gcm9vdE5vZGUgPSBkb19R
dWVyeUludGVyZmFjZShtUm9vdCk7CiAgICAgcnYgPSBtUXVlcnlQcm9jZXNzb3ItPkdldERhdGFz
b3VyY2UodXJpTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
b290Tm9kZSwKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAgYi9kb2Nz
aGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5j
cHAKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcApAQCAtOTgwOSwxNyArOTgwOSwx
NyBAQCBuc0RvY1NoZWxsOjpBZGRTdGF0ZShuc0lWYXJpYW50ICphRGF0YSwgCiAKICAgICAgICAg
ICAgIGlmICghZG9jU2NyaXB0T2JqKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9S
X0RPTV9TRUNVUklUWV9FUlI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5zQ09NUHRy
PG5zSVByaW5jaXBhbD4gcHJpbmNpcGFsID0gZG9jU2NyaXB0T2JqLT5HZXRQcmluY2lwYWwoKTsK
IAogICAgICAgICAgICAgaWYgKCFwcmluY2lwYWwgfHwKLSAgICAgICAgICAgICAgICBOU19GQUlM
RUQocHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJLCB0cnVlKSkpIHsKKyAgICAgICAgICAg
ICAgICBOU19GQUlMRUQocHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJLCB0cnVlLCBmYWxz
ZSkpKSB7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VS
UjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIG1DdXJyZW50VVJJLT5FcXVh
bHMobmV3VVJJLCAmZXF1YWxVUklzKTsKIAogICAgIH0gLy8gZW5kIG9mIHNhbWUtb3JpZ2luIGNo
ZWNrCmRpZmYgLS1naXQgYS9kb20vd29ya2Vycy9TY3JpcHRMb2FkZXIuY3BwIGIvZG9tL3dvcmtl
cnMvU2NyaXB0TG9hZGVyLmNwcAotLS0gYS9kb20vd29ya2Vycy9TY3JpcHRMb2FkZXIuY3BwCisr
KyBiL2RvbS93b3JrZXJzL1NjcmlwdExvYWRlci5jcHAKQEAgLTMyOSwyMSArMzI5LDIyIEBAIHB1
YmxpYzoKICAgICAgIC8vIElmIHRoaXMgc2NyaXB0IGxvYWRlciBpcyBiZWluZyB1c2VkIHRvIG1h
a2UgYSBuZXcgd29ya2VyIHRoZW4gd2UgbmVlZAogICAgICAgLy8gdG8gZG8gYSBzYW1lLW9yaWdp
biBjaGVjay4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGxvYWQgd2l0aCB0aGUKICAg
ICAgIC8vIHNlY3VyaXR5IG1hbmFnZXIuCiAgICAgICBpZiAobUlzV29ya2VyU2NyaXB0KSB7CiAg
ICAgICAgIG5zQ1N0cmluZyBzY2hlbWU7CiAgICAgICAgIHJ2ID0gdXJpLT5HZXRTY2hlbWUoc2No
ZW1lKTsKICAgICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAotICAgICAgICAvLyBX
ZSBleGVtcHQgZGF0YSBVUkxzIGZyb20gdGhlIHNhbWUgb3JpZ2luIGNoZWNrLgotICAgICAgICBp
ZiAoIXNjaGVtZS5FcXVhbHNMaXRlcmFsKCJkYXRhIikpIHsKLSAgICAgICAgICBydiA9IHByaW5j
aXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UpOwotICAgICAgICAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gV2UgcGFzcyB0cnVlIGFzIHRoZSAz
cmQgYXJndW1lbnQgdG8gY2hlY2tNYXlMb2FkIGhlcmUuCisgICAgICAgIC8vIFRoaXMgYWxsb3dz
IHdvcmtlcnMgaW4gc2FuZGJveGVkIGRvY3VtZW50cyB0byBsb2FkIGRhdGEgVVJMcworICAgICAg
ICAvLyAoYW5kIG90aGVyIFVSTHMgdGhhdCBpbmhlcml0IHRoZWlyIHByaW5jaXBhbCBmcm9tIHRo
ZWlyCisgICAgICAgIC8vIGNyZWF0b3IuKQorICAgICAgICBydiA9IHByaW5jaXBhbC0+Q2hlY2tN
YXlMb2FkKHVyaSwgZmFsc2UsIHRydWUpOworICAgICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwg
cnYpOwogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIHJ2ID0gc2VjTWFuLT5DaGVja0xv
YWRVUklXaXRoUHJpbmNpcGFsKHByaW5jaXBhbCwgdXJpLCAwKTsKICAgICAgICAgTlNfRU5TVVJF
X1NVQ0NFU1MocnYsIHJ2KTsKICAgICAgIH0KIAogICAgICAgLy8gV2UgbmVlZCB0byBrbm93IHdo
aWNoIGluZGV4IHdlJ3JlIG9uIGluIE9uU3RyZWFtQ29tcGxldGUgc28gd2Uga25vdwogICAgICAg
Ly8gd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQuCkBAIC01MTYsMTkgKzUxNywxOSBAQCBwdWJsaWM6
CiAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9CQURfVVJJOwogICAgICAgICB9CiAgICAg
ICB9CiAgICAgICBlbHNlICB7CiAgICAgICAgIG5zQ1N0cmluZyBzY2hlbWU7CiAgICAgICAgIHJ2
ID0gZmluYWxVUkktPkdldFNjaGVtZShzY2hlbWUpOwogICAgICAgICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwogCi0gICAgICAgIC8vIFdlIGV4ZW1wdCBkYXRhIHVybHMgYWdhaW4uCi0gICAg
ICAgIGlmICghc2NoZW1lLkVxdWFsc0xpdGVyYWwoImRhdGEiKSAmJgotICAgICAgICAgICAgTlNf
RkFJTEVEKGxvYWRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChmaW5hbFVSSSwgZmFsc2UpKSkgewor
ICAgICAgICAvLyBXZSBleGVtcHQgZGF0YSB1cmxzIGFuZCBvdGhlciBVUkkncyB0aGF0IGluaGVy
aXQgdGhlaXIKKyAgICAgICAgLy8gcHJpbmNpcGFsIGFnYWluLgorICAgICAgICBpZiAoTlNfRkFJ
TEVEKGxvYWRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChmaW5hbFVSSSwgZmFsc2UsIHRydWUpKSkg
ewogICAgICAgICAgIHJldHVybiBOU19FUlJPUl9ET01fQkFEX1VSSTsKICAgICAgICAgfQogICAg
ICAgfQogCiAgICAgICBtV29ya2VyUHJpdmF0ZS0+U2V0UHJpbmNpcGFsKGNoYW5uZWxQcmluY2lw
YWwpOwogICAgIH0KIAogICAgIHJldHVybiBOU19PSzsKZGlmZiAtLWdpdCBhL2xheW91dC9zdHls
ZS9Mb2FkZXIuY3BwIGIvbGF5b3V0L3N0eWxlL0xvYWRlci5jcHAKLS0tIGEvbGF5b3V0L3N0eWxl
L0xvYWRlci5jcHAKKysrIGIvbGF5b3V0L3N0eWxlL0xvYWRlci5jcHAKQEAgLTE1NjgsMTcgKzE1
NjgsMTcgQEAgTG9hZGVyOjpMb2FkU2hlZXQoU2hlZXRMb2FkRGF0YSogYUxvYWREYQogICBpZiAo
YUxvYWREYXRhLT5tTG9hZGVyUHJpbmNpcGFsKSB7CiAgICAgYm9vbCBpbmhlcml0OwogICAgIHJ2
ID0gTlNfVVJJQ2hhaW5IYXNGbGFncyhhTG9hZERhdGEtPm1VUkksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVByb3RvY29sSGFuZGxlcjo6VVJJX0lOSEVSSVRTX1NFQ1VSSVRZX0NP
TlRFWFQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmhlcml0KTsKICAgICBpZiAo
KE5TX1NVQ0NFRURFRChydikgJiYgaW5oZXJpdCkgfHwKICAgICAgICAgKG5zQ29udGVudFV0aWxz
OjpVUklJc0xvY2FsRmlsZShhTG9hZERhdGEtPm1VUkkpICYmCiAgICAgICAgICBOU19TVUNDRUVE
RUQoYUxvYWREYXRhLT5tTG9hZGVyUHJpbmNpcGFsLT4KLSAgICAgICAgICAgICAgICAgICAgICBD
aGVja01heUxvYWQoYUxvYWREYXRhLT5tVVJJLCBmYWxzZSkpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgIENoZWNrTWF5TG9hZChhTG9hZERhdGEtPm1VUkksIGZhbHNlLCBmYWxzZSkpKSkgewog
ICAgICAgY2hhbm5lbC0+U2V0T3duZXIoYUxvYWREYXRhLT5tTG9hZGVyUHJpbmNpcGFsKTsKICAg
ICB9CiAgIH0KIAogICAvLyBXZSBkb24ndCBoYXZlIHRvIGhvbGQgb24gdG8gdGhlIHN0cmVhbSBs
b2FkZXIuICBUaGUgb3duZXJzaGlwCiAgIC8vIG1vZGVsIGlzOiBOZWNrbyBvd25zIHRoZSBzdHJl
YW0gbG9hZGVyLCB3aGljaCBvd25zIHRoZSBsb2FkIGRhdGEsCiAgIC8vIHdoaWNoIG93bnMgdXMK
ICAgbnNDT01QdHI8bnNJVW5pY2hhclN0cmVhbUxvYWRlcj4gc3RyZWFtTG9hZGVyOwpkaWZmIC0t
Z2l0IGEvcmRmL2Jhc2Uvc3JjL25zUkRGWE1MRGF0YVNvdXJjZS5jcHAgYi9yZGYvYmFzZS9zcmMv
bnNSREZYTUxEYXRhU291cmNlLmNwcAotLS0gYS9yZGYvYmFzZS9zcmMvbnNSREZYTUxEYXRhU291
cmNlLmNwcAorKysgYi9yZGYvYmFzZS9zcmMvbnNSREZYTUxEYXRhU291cmNlLmNwcApAQCAtOTE1
LDE5ICs5MTUsMTkgQEAgUkRGWE1MRGF0YVNvdXJjZUltcGw6OkFzeW5jT25DaGFubmVsUmVkaQog
CiAgICAgbnNDT01QdHI8bnNJVVJJPiBuZXdVUkk7CiAgICAgYU5ld0NoYW5uZWwtPkdldFVSSShn
ZXR0ZXJfQWRkUmVmcyhuZXdVUkkpKTsKICAgICBuc0NPTVB0cjxuc0lVUkk+IG5ld09yaWdpbmFs
VVJJOwogICAgIGFOZXdDaGFubmVsLT5HZXRPcmlnaW5hbFVSSShnZXR0ZXJfQWRkUmVmcyhuZXdP
cmlnaW5hbFVSSSkpOwogCiAgICAgTlNfRU5TVVJFX1NUQVRFKG9sZFByaW5jaXBhbCAmJiBuZXdV
UkkgJiYgbmV3T3JpZ2luYWxVUkkpOwogCi0gICAgcnYgPSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5
TG9hZChuZXdVUkksIGZhbHNlKTsKKyAgICBydiA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlMb2Fk
KG5ld1VSSSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSAmJiBuZXdP
cmlnaW5hbFVSSSAhPSBuZXdVUkkpIHsKLSAgICAgICAgcnYgPSBvbGRQcmluY2lwYWwtPkNoZWNr
TWF5TG9hZChuZXdPcmlnaW5hbFVSSSwgZmFsc2UpOworICAgICAgICBydiA9IG9sZFByaW5jaXBh
bC0+Q2hlY2tNYXlMb2FkKG5ld09yaWdpbmFsVVJJLCBmYWxzZSwgZmFsc2UpOwogICAgIH0KIAog
ICAgIGlmIChOU19GQUlMRUQocnYpKQogICAgICAgICByZXR1cm4gcnY7CiAKICAgICBjYi0+T25S
ZWRpcmVjdFZlcmlmeUNhbGxiYWNrKE5TX09LKTsKICAgICByZXR1cm4gTlNfT0s7CiB9Cg==
</data>
<flag name="feedback"
          id="513219"
          type_id="607"
          status="-"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>616023</attachid>
            <date>2012-04-17 23:11:13 -0700</date>
            <delta_ts>2012-04-18 18:23:18 -0700</delta_ts>
            <desc>WIP - iframe sandbox v11</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>55444</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNGRiMTI5MmJlNzYwYzRkZGM2MzJkYmY4ZjVk
NjlkNzM4NDBiOWNlMgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgy
OSwxNiArODI5LDI3IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5kYm94QXR0cik7
CisKKworICAvKioKICAgICogRmlsbCAod2l0aCB0aGUgcGFyYW1ldGVycyBnaXZlbikgdGhlIGxv
Y2FsaXplZCBzdHJpbmcgbmFtZWQgfGFLZXl8IGluCiAgICAqIHByb3BlcnRpZXMgZmlsZSB8YUZp
bGV8LgogICAgKi8KIHByaXZhdGU6CiAgIHN0YXRpYyBuc3Jlc3VsdCBGb3JtYXRMb2NhbGl6ZWRT
dHJpbmcoUHJvcGVydGllc0ZpbGUgYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogYUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqKiBhUGFyYW1zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFQYXJhbXNMZW5ndGgsCkBAIC0xOTMy
LDQyICsxOTQzLDQ0IEBAIHB1YmxpYzoKICAgICogZnJvbSB0aGUgZG9jdW1lbnQgaXQgY29tZXMg
ZnJvbS4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4
dChuc0lVUkkgKmFVUkksIGJvb2wgKmFSZXN1bHQpOwogCiAgIC8qKgogICAgKiBTZXQgdGhlIGdp
dmVuIHByaW5jaXBhbCBhcyB0aGUgb3duZXIgb2YgdGhlIGdpdmVuIGNoYW5uZWwsIGlmCiAgICAq
IG5lZWRlZC4gIGFVUkkgbXVzdCBiZSB0aGUgVVJJIG9mIGFDaGFubmVsLiAgYVByaW5jaXBhbCBt
YXkgYmUKICAgICogbnVsbC4gIElmIGFTZXRVcEZvckFib3V0QmxhbmsgaXMgdHJ1ZSwgdGhlbiBh
Ym91dDpibGFuayB3aWxsIGdldAotICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBpdC4KLSAg
ICoKKyAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAgb24gaXQuIElmIGFGb3JjZU93bmVyIGlzIHRy
dWUsIHRoZSBvd25lcgorICAgKiB3aWxsIGJlIHNldCBvbiB0aGUgY2hhbm5lbCwgZXZlbiBpZiB0
aGUgcHJpbmNpcGFsIGNhbiBiZSBkZXRlcm1pbmVkCisgICAqIGZyb20gdGhlIGNoYW5uZWwuCiAg
ICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgd2hldGhlciB0aGUgcHJpbmNpcGFsIHdhcyBzZXQgdXAg
YXMgdGhlIG93bmVyCiAgICAqIG9mIHRoZSBjaGFubmVsLgogICAgKi8KICAgc3RhdGljIGJvb2wg
U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFGb3JjZU93bmVyID0gZmFsc2UpOwogCiAgIHN0YXRp
YyBuc3Jlc3VsdCBCdG9hKGNvbnN0IG5zQVN0cmluZyYgYUJpbmFyeURhdGEsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG5zQVN0cmluZyYgYUFzY2lpQmFzZTY0U3RyaW5nKTsKIAogICBzdGF0aWMg
bnNyZXN1bHQgQXRvYihjb25zdCBuc0FTdHJpbmcmIGFBc2NpaVN0cmluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSk7CiAKICAgLyoqIElmIGFKU0FycmF5
IGlzIGEgSmF2YXNjcmlwdCBhcnJheSwgdGhpcyBtZXRob2QgaXRlcmF0ZXMgb3ZlciBpdHMKICAg
ICogIGVsZW1lbnRzIGFuZCBhcHBlbmRzIHZhbHVlcyB0byBhUmV0VmFsIGFzIG5zSUF0b21zLgog
ICAgKiAgQHRocm93IE5TX0VSUk9SX0lMTEVHQUxfVkFMVUUgaWYgYUpTQXJyYXkgaXNuJ3QgYSBK
UyBhcnJheS4KICAgICovIAogICBzdGF0aWMgbnNyZXN1bHQgSlNBcnJheVRvQXRvbUFycmF5KEpT
Q29udGV4dCogYUN4LCBjb25zdCBKUzo6VmFsdWUmIGFKU0FycmF5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQ09NQXJyYXk8bnNJQXRvbT4mIGFSZXRWYWwpOwogCiAg
IC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFzc2VkIGluIHBh
cmFtZXRlciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0eSBlbmFibGVk
LiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAgKiBmdW5jdGlv
bmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIu
CiAgICAqIE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29tcGxldGUgbWFr
ZXMgc2Vuc2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAgICogQHBhcmFt
IGFJbnB1dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0IGNhbid0IGJl
IG51bGwuCiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBoYXMgYXV0b2Nv
bXBsZXRlIGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21wbGV0ZUVuYWJs
ZWQobnNJRE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIApkaWZmIC0tZ2l0IGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oIGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1
bWVudC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaAorKysgYi9jb250
ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKQEAgLTEyMCwxOSArMTIwLDE4IEBAIGNsYXNz
IExvYWRlcjsKIAogbmFtZXNwYWNlIGRvbSB7CiBjbGFzcyBMaW5rOwogY2xhc3MgRWxlbWVudDsK
IH0gLy8gbmFtZXNwYWNlIGRvbQogfSAvLyBuYW1lc3BhY2UgbW96aWxsYQogCiAjZGVmaW5lIE5T
X0lET0NVTUVOVF9JSUQgXAoteyAweDhlNTFlNmQ5LCAweDkxNGQsIDB4NDZiYSwgXAotICB7IDB4
YjMsIDB4MTEsIDB4MmYsIDB4MjcsIDB4M2QsIDB4ZTYsIDB4MGQsIDB4MTkgfSB9Ci0KK3sgMHg1
N2ZlNDRhZSwgMHg2NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAweGE3LCAw
eDQzLCAweDI4LCAweGJlLCAweDg2IH0gfQogCiAvLyBGbGFnIGZvciBBZGRTdHlsZVNoZWV0KCku
CiAjZGVmaW5lIE5TX1NUWUxFU0hFRVRfRlJPTV9DQVRBTE9HICAgICAgICAgICAgICAgICgxIDw8
IDApCiAKIC8vIEVudW0gZm9yIHJlcXVlc3RpbmcgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZG9jdW1l
bnQgd2hlbiBjcmVhdGluZyBhIGRvYwogZW51bSBEb2N1bWVudEZsYXZvciB7CiAgIERvY3VtZW50
Rmxhdm9yTGVnYWN5R3Vlc3MsIC8vIGNvbXBhdCB3aXRoIG9sZCBjb2RlIHVudGlsIG1hZGUgSFRN
TDUtY29tcGxpYW50CiAgIERvY3VtZW50Rmxhdm9ySFRNTCwgLy8gSFRNTERvY3VtZW50IHdpdGgg
SFRNTG5lc3MgYml0IHNldCB0byB0cnVlCkBAIC00NjAsMTcgKzQ1OSwyNiBAQCBwdWJsaWM6CiAg
ICAqIGNhbGxlcnMgYXJlIGV4cGVjdGVkIHRvIHRha2UgYWN0aW9uIGFzIG5lZWRlZCBpZiB0aGV5
IHdhbnQgdGhpcwogICAgKiBjaGFuZ2UgdG8gYWN0dWFsbHkgY2hhbmdlIGFueXRoaW5nIGltbWVk
aWF0ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9w
dGlvbnMoUFJVaW50MzIgYUJpZGlPcHRpb25zKQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJp
ZGlPcHRpb25zOwogICB9Ci0gIAorCisgIC8qKgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3Mg
Zm9yIHRoaXMgZG9jdW1lbnQuCisgICAqIEBzZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBv
c3NpYmxlIGZsYWdzCisgICAqLworICBQUlVpbnQzMiBTYW5kYm94RmxhZ3MoKSBjb25zdAorICB7
CisgICAgcmV0dXJuIG1TYW5kYm94RmxhZ3M7CisgIH0KKwogICAvKioKICAgICogQWNjZXNzIEhU
VFAgaGVhZGVyIGRhdGEgKHRoaXMgbWF5IGFsc28gZ2V0IHNldCBmcm9tIG90aGVyCiAgICAqIHNv
dXJjZXMsIGxpa2UgSFRNTCBNRVRBIHRhZ3MpLgogICAgKi8KICAgdmlydHVhbCB2b2lkIEdldEhl
YWRlckRhdGEobnNJQXRvbSogYUhlYWRlckZpZWxkLCBuc0FTdHJpbmcmIGFEYXRhKSBjb25zdCA9
IDA7CiAgIHZpcnR1YWwgdm9pZCBTZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFoZWFkZXJGaWVsZCwg
Y29uc3QgbnNBU3RyaW5nJiBhRGF0YSkgPSAwOwogCiAgIC8qKgpAQCAtMTg0OCwxNiArMTg1Niwy
MSBAQCBwcm90ZWN0ZWQ6CiAgIC8vIElmIG1Jc1N0YXRpY0RvY3VtZW50IGlzIHRydWUsIG1Pcmln
aW5hbERvY3VtZW50IHBvaW50cyB0byB0aGUgb3JpZ2luYWwKICAgLy8gZG9jdW1lbnQuCiAgIG5z
Q09NUHRyPG5zSURvY3VtZW50PiBtT3JpZ2luYWxEb2N1bWVudDsKIAogICAvLyBUaGUgYmlkaSBv
cHRpb25zIGZvciB0aGlzIGRvY3VtZW50LiAgV2hhdCB0aGlzIGJpdGZpZWxkIG1lYW5zIGlzCiAg
IC8vIGRlZmluZWQgaW4gbnNCaWRpVXRpbHMuaAogICBQUlVpbnQzMiBtQmlkaU9wdGlvbnM7CiAK
KyAgLy8gVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3VtZW50LiBUaGVzZSByZWZsZWN0IHRo
ZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2YgdGhlCisgIC8vIGFzc29jaWF0ZWQg
SUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZiBleGlzdGVudC4gVGhlc2UgYXJl
IHNldCBhdCBsb2FkIHRpbWUgYW5kCisgIC8vIGFyZSBpbW11dGFibGUgLSBzZWUgbnNTYW5kYm94
RmxhZ3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICBQUlVpbnQzMiBtU2FuZGJveEZsYWdz
OworCiAgIG5zQ1N0cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnNDU3RyaW5n
IG1Db250ZW50VHlwZTsKIHByb3RlY3RlZDoKIAogICAvLyBUaGUgZG9jdW1lbnQncyBzZWN1cml0
eSBpbmZvCiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VjdXJpdHlJbmZvOwogCmRpZmYgLS1n
aXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9z
cmMvbnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRp
bHMuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC0yMDks
MTYgKzIwOSwxNyBAQCBzdGF0aWMgTlNfREVGSU5FX0NJRChrWFRGU2VydmljZUNJRCwgTlNfCiAj
aW5jbHVkZSAibW96aWxsYS9CYXNlNjQuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2Vz
LmgiCiAjaW5jbHVkZSAibnNET01NdXRhdGlvbk9ic2VydmVyLmgiCiAKICNpbmNsdWRlICJuc1dy
YXBwZXJDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJuc0lET01Eb2N1bWVudFR5cGUuaCIKICNp
bmNsdWRlICJuc0lET01XaW5kb3dVdGlscy5oIgogI2luY2x1ZGUgIm5zQ2hhclNlcGFyYXRlZFRv
a2VuaXplci5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIGV4dGVybiAiQyIgaW50
IE1PWl9YTUxUcmFuc2xhdGVFbnRpdHkoY29uc3QgY2hhciogcHRyLCBjb25zdCBjaGFyKiBlbmQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBuZXh0
LCBQUlVuaWNoYXIqIHJlc3VsdCk7CiBleHRlcm4gIkMiIGludCBNT1pfWE1MQ2hlY2tRTmFtZShj
b25zdCBjaGFyKiBwdHIsIGNvbnN0IGNoYXIqIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBuc19hd2FyZSwgY29uc3QgY2hhcioqIGNvbG9uKTsKIAogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CkBA
IC05MTcsMTYgKzkxOCw2MiBAQCBuc0NvbnRlbnRVdGlsczo6R2V0UGFyc2VyU2VydmljZSgpCiAg
ICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwgJnNQYXJz
ZXJTZXJ2aWNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNlclNlcnZp
Y2UgPSBuc251bGw7CiAgICAgfQogICB9CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNlOwogfQor
LyoqCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmlidXRl
IChvZiBhbiA8aWZyYW1lPiBvcgorICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQg
dG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFsbHkuCisgKgorICogQHBhcmFtIGFBdHRy
aWJ1dGUgICAgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJldHVybiAg
ICAgICAgICAgICAgdGhlIHNldCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRp
bHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBzYW5kYm94
QXR0clZhbHVlKQoreworICAvLyBJZiB0aGVyZSdzIGEgc2FuZGJveCBhdHRyaWJ1dGUgYXQgYWxs
IChhbmQgdGhlcmUgaXMgaWYgdGhpcyBpcyBiZWluZworICAvLyBjYWxsZWQpLCBzdGFydCBvZmYg
Ynkgc2V0dGluZyBhbGwgdGhlIHJlc3RyaWN0aW9uIGZsYWdzLgorICBQUlVpbnQzMiBvdXQgPSBT
QU5EQk9YRURfTkFWSUdBVElPTiB8CisgICAgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04g
fAorICAgIFNBTkRCT1hFRF9QTFVHSU5TIHwgU0FOREJPWEVEX09SSUdJTiB8CisgICAgU0FOREJP
WEVEX0ZPUk1TIHwgU0FOREJPWEVEX1NDUklQVFMgfAorICAgIFNBTkRCT1hFRF9BVVRPTUFUSUNf
RkVBVFVSRVM7CisKKyAgaWYgKCFzYW5kYm94QXR0clZhbHVlLklzRW1wdHkoKSkgeworICAgIC8v
IFRoZSBzZXBhcmF0b3Igb3B0aW9uYWwgZmxhZyBpcyB1c2VkIGJlY2F1c2UgdGhlIEhUTUw1IHNw
ZWMgc2F5cyBhbnkKKyAgICAvLyB3aGl0ZXNwYWNlIGlzIG9rIGFzIGEgc2VwYXJhdG9yLCB3aGlj
aCBpcyB3aGF0IHRoaXMgZG9lcy4KKyAgICBIVE1MU3BsaXRPblNwYWNlc1Rva2VuaXplciB0b2tl
bml6ZXIoc2FuZGJveEF0dHJWYWx1ZSwgJyAnLAorICAgICAgbnNDaGFyU2VwYXJhdGVkVG9rZW5p
emVyVGVtcGxhdGU8bnNDb250ZW50VXRpbHM6OklzSFRNTFdoaXRlc3BhY2U+OjpTRVBBUkFUT1Jf
T1BUSU9OQUwpOworCisgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKKyAg
ICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nIHRva2VuID0gdG9rZW5pemVyLm5leHRUb2tlbigpOwor
CisgICAgICBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIp
KSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX1NDUklQVFM7CisgICAgICB9IGVsc2UgaWYg
KHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNhbWUtb3JpZ2luIikpIHsKKyAg
ICAgICAgb3V0ICY9IH5TQU5EQk9YRURfT1JJR0lOOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5M
b3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1mb3JtcyIpKSB7CisgICAgICAgIG91dCAmPSB+
U0FOREJPWEVEX0ZPUk1TOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNM
aXRlcmFsKCJhbGxvdy1zY3JpcHRzIikpIHsKKyAgICAgICAgLy8gYWxsb3ctc2NyaXB0cyByZW1v
dmVzIGJvdGggU0FOREJPWEVEX1NDUklQVFMgYW5kCisgICAgICAgIC8vIFNBTkRCT1hFRF9BVVRP
TUFUSUNfRkVBVFVSRVMuCisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX1NDUklQVFM7CisgICAg
ICAgIG91dCAmPSB+U0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUzsKKyAgICAgIH0gZWxzZSBp
ZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctdG9wLW5hdmlnYXRpb24iKSkg
eworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FUSU9OOworICAgICAg
fQorICAgIH0KKyAgfQorCisgIHJldHVybiBvdXQ7Cit9CiAKICNpZmRlZiBNT1pfWFRGCiBuc0lY
VEZTZXJ2aWNlKgogbnNDb250ZW50VXRpbHM6OkdldFhURlNlcnZpY2UoKQogewogICBpZiAoIXNY
VEZTZXJ2aWNlKSB7CiAgICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0U2VydmljZShrWFRGU2Vydmlj
ZUNJRCwgJnNYVEZTZXJ2aWNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewpAQCAtNjM4MSwx
NyArNjQyOCwxOCBAQCBuc0NvbnRlbnRVdGlsczo6VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXN1bHQpOwogfQogCiAvLyBzdGF0aWMKIGJv
b2wKIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2Fk
aW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5u
ZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSog
YVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFi
b3V0QmxhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBG
b3JBYm91dEJsYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZv
cmNlT3duZXIpCiB7CiAgIC8vCiAgIC8vIFNldCB0aGUgb3duZXIgb2YgdGhlIGNoYW5uZWwsIGJ1
dCBvbmx5IGZvciBjaGFubmVscyB0aGF0IGNhbid0CiAgIC8vIHByb3ZpZGUgdGhlaXIgb3duIHNl
Y3VyaXR5IGNvbnRleHQuCiAgIC8vCiAgIC8vIFhYWDogSXQgc2VlbXMgd3JvbmcgdGhhdCB0aGUg
b3duZXIgaXMgaWdub3JlZCAtIGV2ZW4gaWYgb25lIGlzCiAgIC8vICAgICAgc3VwcGxpZWQpIHVu
bGVzcyB0aGUgVVJJIGlzIGphdmFzY3JpcHQgb3IgZGF0YSBvciBhYm91dDpibGFuay4KICAgLy8g
WFhYOiBJZiB0aGlzIGlzIGV2ZXIgY2hhbmdlZCwgY2hlY2sgYWxsIGNhbGxlcnMgZm9yIHdoYXQg
b3duZXJzCkBAIC02Mzk5LDIzICs2NDQ3LDI3IEBAIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5u
ZWxPd25lcihuc0lQcmkKICAgLy8gICAgICBjb21tZW50cyBpbiBuc0RvY1NoZWxsOjpMb2FkVVJJ
IHdoZXJlIHdlIGZhbGwgYmFjayBvbgogICAvLyAgICAgIGluaGVyaXRpbmcgdGhlIG93bmVyIGlm
IGNhbGxlZCBmcm9tIGNocm9tZS4gIFRoYXQgd291bGQgYmUKICAgLy8gICAgICB2ZXJ5IHdyb25n
IGlmIHRoaXMgY29kZSBjaGFuZ2VkIGFueXRoaW5nIGJ1dCBjaGFubmVscyB0aGF0CiAgIC8vICAg
ICAgY2FuJ3QgcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dCEKICAgLy8KICAgLy8g
ICAgICAoQ3VycmVudGx5IGNocm9tZSBVUklzIHNldCB0aGUgb3duZXIgd2hlbiB0aGV5IGFyZSBj
cmVhdGVkIQogICAvLyAgICAgIFNvIHNldHRpbmcgYSBOVUxMIG93bmVyIHdvdWxkIGJlIGJhZCEp
CiAgIC8vCisgIC8vIElmIGFGb3JjZU93bmVyIGlzIHRydWUsIHRoZSBvd25lciB3aWxsIGJlIHNl
dCwgZXZlbiBmb3IgYSBjaGFubmVsIHRoYXQKKyAgLy8gY2FuIHByb3ZpZGUgaXRzIG93biBzZWN1
cml0eSBjb250ZXh0LiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBIVE1MNSBJRlJBTUUKKyAgLy8gc2Fu
ZGJveCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiBmb3JjZSB0aGUgY2hhbm5lbCAoYW5kIGl0cyBkb2N1
bWVudCkgdG8KKyAgLy8gZXhwbGljaXRseSBoYXZlIGEgbnVsbCBwcmluY2lwYWwuCiAgIGJvb2wg
aW5oZXJpdDsKICAgLy8gV2UgZXhwZWN0IFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0IHRvIHJl
dHVybiBzdWNjZXNzIGZvciBhbgogICAvLyBhYm91dDpibGFuayBVUkksIHNvIGRvbid0IGNhbGwg
TlNfSXNBYm91dEJsYW5rKCkgaWYgdGhpcyBjYWxsIGZhaWxzLgogICAvLyBUaGlzIGNvbmRpdGlv
biBuZWVkcyB0byBtYXRjaCB0aGUgb25lIGluIG5zRG9jU2hlbGw6OkludGVybmFsTG9hZCB3aGVy
ZQogICAvLyB3ZSdyZSBjaGVja2luZyBmb3IgdGhpbmdzIHRoYXQgd2lsbCB1c2UgdGhlIG93bmVy
LgotICBpZiAoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkksICZp
bmhlcml0KSkgJiYKLSAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYmIE5T
X0lzQWJvdXRCbGFuayhhVVJJKSkpKSB7CisgIGlmIChhRm9yY2VPd25lciB8fCAoKE5TX1NVQ0NF
RURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYmCisgICAg
ICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVS
SSkpKSkpKSB7CiAgICAgYUNoYW5uZWwtPlNldE93bmVyKGFMb2FkaW5nUHJpbmNpcGFsKTsKICAg
ICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8vCiAgIC8vIGZpbGU6IHVyaSBzcGVjaWFsLWNhc2lu
ZwogICAvLwogICAvLyBJZiB0aGlzIGlzIGEgZmlsZTogbG9hZCBvcGVuZWQgZnJvbSBhbm90aGVy
IGZpbGU6IHRoZW4gaXQgbWF5IG5lZWQKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNE
b2N1bWVudC5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRl
bnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3Vt
ZW50LmNwcApAQCAtMjQwMiwxNiArMjQwMiwyNSBAQCBuc0RvY3VtZW50OjpTdGFydERvY3VtZW50
TG9hZChjb25zdCBjaGFyCiAgICAgRmluZENoYXJJblJlYWRhYmxlKCc7Jywgc2VtaWNvbG9uLCBl
bmQpOwogICAgIFNldENvbnRlbnRUeXBlSW50ZXJuYWwoU3Vic3RyaW5nKHN0YXJ0LCBzZW1pY29s
b24pKTsKICAgfQogCiAgIFJldHJpZXZlUmVsZXZhbnRIZWFkZXJzKGFDaGFubmVsKTsKIAogICBt
Q2hhbm5lbCA9IGFDaGFubmVsOwogCisgIC8vIElmIHRoaXMgZG9jdW1lbnQgaXMgYmVpbmcgbG9h
ZGVkIGJ5IGEgZG9jc2hlbGwsIGNvcHkgaXRzIHNhbmRib3ggZmxhZ3MKKyAgLy8gdG8gdGhlIGRv
Y3VtZW50LiBUaGVzZSBhcmUgaW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBoZXJlLgorICBuc0NP
TVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFjZShhQ29udGFpbmVy
KTsKKworICBpZiAoZG9jU2hlbGwpIHsKKyAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRT
YW5kYm94RmxhZ3MoJm1TYW5kYm94RmxhZ3MpOworICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBy
dik7CisgIH0KKwogICBuc3Jlc3VsdCBydiA9IEluaXRDU1AoKTsKICAgTlNfRU5TVVJFX1NVQ0NF
U1MocnYsIHJ2KTsKIAogICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0RvY3VtZW50
OjpJbml0Q1NQKCkKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5j
cHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCi0tLSBhL2NvbnRlbnQvYmFz
ZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9h
ZGVyLmNwcApAQCAtMTEyLDE2ICsxMTIsMTkgQEAKICNpbmNsdWRlICJtb3ppbGxhL0d1YXJkT2Jq
ZWN0cy5oIgogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJtb3pp
bGxhL3VudXNlZC5oIgogI2luY2x1ZGUgIm1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJtb3ppbGxhL2xheW91dC9SZW5kZXJGcmFtZVBhcmVudC5oIgogCiAjaW5jbHVkZSAianNhcGku
aCIKIAorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc1NhbmRi
b3hGbGFncy5oIgorCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBt
b3ppbGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE6OmxheW91dDsKIHR5cGVkZWYgRnJhbWVNZXRyaWNzOjpWaWV3SUQgVmll
d0lEOwogCiBjbGFzcyBuc0FzeW5jRG9jU2hlbGxEZXN0cm95ZXIgOiBwdWJsaWMgbnNSdW5uYWJs
ZQogewpAQCAtNDY4LDE2ICs0NzEsNjAgQEAgbnNGcmFtZUxvYWRlcjo6UmVhbGx5U3RhcnRMb2Fk
aW5nSW50ZXJuYQogICAvLyBKdXN0IHRvIGJlIHNhZmUsIHJlY2hlY2sgdXJpLgogICBydiA9IENo
ZWNrVVJJTG9hZChtVVJJVG9Mb2FkKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAog
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbExvYWRJbmZvPiBsb2FkSW5mbzsKICAgbURvY1NoZWxsLT5D
cmVhdGVMb2FkSW5mbyhnZXR0ZXJfQWRkUmVmcyhsb2FkSW5mbykpOwogICBOU19FTlNVUkVfVFJV
RShsb2FkSW5mbywgTlNfRVJST1JfRkFJTFVSRSk7CiAKKyAgLy8gSXMgdGhpcyBhbiA8aWZyYW1l
PiB3aXRoIGEgc2FuZGJveCBhdHRyaWJ1dGUgb3IgYSBwYXJlbnQgd2hpY2ggaXMKKyAgLy8gc2Fu
ZGJveGVkID8KKyAgbnNIVE1MSUZyYW1lRWxlbWVudCAqIGlmcmFtZSA9CisgICAgbnNIVE1MSUZy
YW1lRWxlbWVudDo6RnJvbUNvbnRlbnQobU93bmVyQ29udGVudCk7CisKKyAgUFJVaW50MzIgc2Fu
ZGJveEZsYWdzID0gMDsKKworICBpZiAoaWZyYW1lKSB7CisgICAgc2FuZGJveEZsYWdzID0gaWZy
YW1lLT5HZXRTYW5kYm94RmxhZ3MoKTsKKworICAgIFBSVWludDMyIHBhcmVudFNhbmRib3hGbGFn
cyA9IDA7CisKKyAgICAvLyBHZXQgdGhlIHBhcmVudCdzIHNhbmRib3ggZmxhZ3MsIHRoZXkncmUg
bmVlZGVkIHRvIGRldGVybWluZSBpZiB0aGUKKyAgICAvLyBmcmFtZSBiZWluZyBsb2FkZWQgbmVl
ZHMgdG8gYmUgc2FuZGJveGVkLgorICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHBh
cmVudERvY1NoZWxsSXRlbTsKKyAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBjdXJE
b2NTaGVsbEl0ZW0gPSBkb19RdWVyeUludGVyZmFjZShtRG9jU2hlbGwpOworCisgICAgaWYgKE5T
X1NVQ0NFRURFRChjdXJEb2NTaGVsbEl0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJl
bnREb2NTaGVsbEl0ZW0pKSkpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBwYXJlbnRE
b2MgPSBkb19HZXRJbnRlcmZhY2UocGFyZW50RG9jU2hlbGxJdGVtKTsKKworICAgICAgaWYgKHBh
cmVudERvYykgeworICAgICAgICBwYXJlbnRTYW5kYm94RmxhZ3MgPSBwYXJlbnREb2MtPlNhbmRi
b3hGbGFncygpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChzYW5kYm94RmxhZ3MgfHwgcGFy
ZW50U2FuZGJveEZsYWdzKSB7CisgICAgICBpZiAocGFyZW50U2FuZGJveEZsYWdzKSB7CisgICAg
ICAgIC8vIFRoZSBjaGlsZCBjYW4gb25seSBhZGQgcmVzdHJpY3Rpb25zLCBub3QgcmVtb3ZlIHRo
ZW0uCisgICAgICAgIHNhbmRib3hGbGFncyB8PSBwYXJlbnRTYW5kYm94RmxhZ3M7CisgICAgICB9
CisKKyAgICAgIG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFncyk7CisKKyAg
ICAgIC8vIFNldCB1cCB0aGUgYWN0dWFsIHNhbmRib3hpbmcgZm9yIHBsdWdpbnMgYXMgc3BlY2lm
aWVkLgorICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9QTFVHSU5TKSB7CisgICAg
ICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dQbHVnaW5zKGZhbHNlKTsKKyAgICAgIH0KKyAgICB9Cisg
IH0KKworICAvLyBJZiB0aGlzIGlzIGFuIDxpZnJhbWU+IGFuZCBpdCdzIHNhbmRib3hlZCB3aXRo
IHJlc3BlY3QgdG8gb3JpZ2luCisgIC8vIHdlIHdpbGwgc2V0IGl0IHVwIHdpdGggYSBudWxsIHBy
aW5jaXBhbCBsYXRlciBpbiBuc0RvY1NoZWxsOjpEb1VSSUxvYWQuCisgIC8vIFdlIGRvIGl0IHRo
ZXJlIHRvIGNvcnJlY3RseSBzYW5kYm94IGNvbnRlbnQgdGhhdCB3YXMgbG9hZGVkIGludG8KKyAg
Ly8gdGhlIGlmcmFtZSB2aWEgb3RoZXIgbWV0aG9kcyB0aGFuIHRoZSBzcmMgYXR0cmlidXRlLgog
ICAvLyBXZSdsbCB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3VtZW50IGxv
YWRlZCBpbnNpZGUgdXMuICBUaGlzCiAgIC8vIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVkZWQgdG8g
cHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluCiAgIC8vIHN1YmZyYW1l
cyEKICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7
CiAKICAgbnNDT01QdHI8bnNJVVJJPiByZWZlcnJlcjsKICAgcnYgPSBtT3duZXJDb250ZW50LT5O
b2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhyZWZlcnJlcikpOwogICBOU19F
TlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0dr
QXRvbUxpc3QuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKLS0tIGEvY29udGVu
dC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9t
TGlzdC5oCkBAIC05MywxNyArOTMsMjEgQEAgR0tfQVRPTShhY3R1YXRlLCAiYWN0dWF0ZSIpCiBH
S19BVE9NKGFkZHJlc3MsICJhZGRyZXNzIikKIEdLX0FUT00oYWZ0ZXIsICJhZnRlciIpCiBHS19B
VE9NKGFmdGVyX2VuZCwgImFmdGVyX2VuZCIpCiBHS19BVE9NKGFmdGVyX3N0YXJ0LCAiYWZ0ZXJf
c3RhcnQiKQogR0tfQVRPTShhbGlnbiwgImFsaWduIikKIEdLX0FUT00oYWxpbmssICJhbGluayIp
CiBHS19BVE9NKGFsbCwgImFsbCIpCiBHS19BVE9NKGFsbG93ZXZlbnRzLCAiYWxsb3dldmVudHMi
KQorR0tfQVRPTShhbGxvd2Zvcm1zLCAiYWxsb3ctZm9ybXMiKQogR0tfQVRPTShhbGxvd25lZ2F0
aXZlYXNzZXJ0aW9ucywgImFsbG93bmVnYXRpdmVhc3NlcnRpb25zIikKK0dLX0FUT00oYWxsb3dz
YW1lb3JpZ2luLCAiYWxsb3ctc2FtZS1vcmlnaW4iKQorR0tfQVRPTShhbGxvd3NjcmlwdHMsICJh
bGxvdy1zY3JpcHRzIikKK0dLX0FUT00oYWxsb3d0b3BuYXZpZ2F0aW9uLCAiYWxsb3ctdG9wLW5h
dmlnYXRpb24iKQogR0tfQVRPTShhbGxvd3VudHJ1c3RlZCwgImFsbG93dW50cnVzdGVkIikKIEdL
X0FUT00oYWx0LCAiYWx0IikKIEdLX0FUT00oYWx0ZXJuYXRlLCAiYWx0ZXJuYXRlIikKIEdLX0FU
T00oYWx3YXlzLCAiYWx3YXlzIikKIEdLX0FUT00oYW5jZXN0b3IsICJhbmNlc3RvciIpCiBHS19B
VE9NKGFuY2VzdG9yT3JTZWxmLCAiYW5jZXN0b3Itb3Itc2VsZiIpCiBHS19BVE9NKF9hbmQsICJh
bmQiKQogR0tfQVRPTShhbnksICJhbnkiKQpAQCAtODc4LDE2ICs4ODIsMTcgQEAgR0tfQVRPTShy
b3dzcGFuLCAicm93c3BhbiIpCiBHS19BVE9NKHJwLCAicnAiKQogR0tfQVRPTShydCwgInJ0IikK
IEdLX0FUT00ocnRsLCAicnRsIikKIEdLX0FUT00ocnVieSwgInJ1YnkiKQogR0tfQVRPTShydWxl
LCAicnVsZSIpCiBHS19BVE9NKHJ1bGVzLCAicnVsZXMiKQogR0tfQVRPTShzLCAicyIpCiBHS19B
VE9NKHNhbXAsICJzYW1wIikKK0dLX0FUT00oc2FuZGJveCwgInNhbmRib3giKQogR0tfQVRPTShz
YmF0dHIsICJzYmF0dHIiKQogR0tfQVRPTShzY2FsZSwgInNjYWxlIikKIEdLX0FUT00oc2Nhbiwg
InNjYW4iKQogR0tfQVRPTShzY2hlbWUsICJzY2hlbWUiKQogR0tfQVRPTShzY29wZSwgInNjb3Bl
IikKIEdLX0FUT00oc2NvcGVkLCAic2NvcGVkIikKIEdLX0FUT00oc2NyZWVuLCAic2NyZWVuIikK
IEdLX0FUT00oc2NyZWVuWCwgInNjcmVlblgiKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3Ny
Yy9uc1NhbmRib3hGbGFncy5oIGIvY29udGVudC9iYXNlL3NyYy9uc1NhbmRib3hGbGFncy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9iYXNlL3NyYy9u
c1NhbmRib3hGbGFncy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13
aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8N
CisvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhl
IE1vemlsbGEgUHVibGljDQorICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1Q
TCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLA0KKyAqIFlvdSBjYW4gb2J0YWlu
IG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovDQorDQorLyoNCisgKiBDb25z
dGFudCBmbGFncyB0aGF0IGRlc2NyaWJlIGhvdyBhIGRvY3VtZW50IGlzIHNhbmRib3hlZCBhY2Nv
cmRpbmcgdG8gdGhlDQorICogSFRNTDUgc3BlYy4NCisgKi8NCisNCisjaWZuZGVmIG5zU2FuZGJv
eEZsYWdzX2hfX18NCisjZGVmaW5lIG5zU2FuZGJveEZsYWdzX2hfX18NCisNCisvKioNCisgKiBU
aGlzIGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgYnJvd3NpbmcgY29udGV4
dHMgb3RoZXIgdGhhbg0KKyAqIHRoZSBzYW5kYm94ZWQgYnJvd3NpbmcgY29udGV4dCBpdHNlbGYg
KG9yIGJyb3dzaW5nIGNvbnRleHRzIGZ1cnRoZXINCisgKiBuZXN0ZWQgaW5zaWRlIGl0KSwgYW5k
IHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBs
b25nIFNBTkRCT1hFRF9OQVZJR0FUSU9OICA9IDB4MTsNCisNCisvKioNCisgKiBUaGlzIGZsYWcg
cHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgdGhlaXIgdG9wLWxldmVsIGJyb3dzaW5n
DQorICogY29udGV4dC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9UT1BM
RVZFTF9OQVZJR0FUSU9OID0gMHgyOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBj
b250ZW50IGZyb20gaW5zdGFudGlhdGluZyBwbHVnaW5zLCB3aGV0aGVyIHVzaW5nIHRoZQ0KKyAq
IGVtYmVkIGVsZW1lbnQsIHRoZSBvYmplY3QgZWxlbWVudCwgdGhlIGFwcGxldCBlbGVtZW50LCBv
ciB0aHJvdWdoDQorICogbmF2aWdhdGlvbiBvZiBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCB1
bmxlc3MgdGhvc2UgcGx1Z2lucyBjYW4gYmUNCisgKiBzZWN1cmVkLg0KKyAqLw0KK2NvbnN0IHVu
c2lnbmVkIGxvbmcgU0FOREJPWEVEX1BMVUdJTlMgPSAweDQ7DQorDQorLyoqDQorICogVGhpcyBm
bGFnIGZvcmNlcyBjb250ZW50IGludG8gYSB1bmlxdWUgb3JpZ2luLCB0aHVzIHByZXZlbnRpbmcg
aXQgZnJvbQ0KKyAqIGFjY2Vzc2luZyBvdGhlciBjb250ZW50IGZyb20gdGhlIHNhbWUgb3JpZ2lu
Lg0KKyAqIFRoaXMgZmxhZyBhbHNvIHByZXZlbnRzIHNjcmlwdCBmcm9tIHJlYWRpbmcgZnJvbSBv
ciB3cml0aW5nIHRvIHRoZQ0KKyAqIGRvY3VtZW50LmNvb2tpZSBJREwgYXR0cmlidXRlLCBhbmQg
YmxvY2tzIGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9u
ZyBTQU5EQk9YRURfT1JJR0lOID0gMHg4Ow0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3Mg
Zm9ybSBzdWJtaXNzaW9uLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX0ZP
Uk1TID0gMHgxMDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIHNjcmlwdCBleGVjdXRp
b24uDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfU0NSSVBUUyA9IDB4MjA7
DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBmZWF0dXJlcyB0aGF0IHRyaWdnZXIgYXV0
b21hdGljYWxseSwgc3VjaCBhcw0KKyAqIGF1dG9tYXRpY2FsbHkgcGxheWluZyBhIHZpZGVvIG9y
IGF1dG9tYXRpY2FsbHkgZm9jdXNpbmcgYSBmb3JtIGNvbnRyb2wuDQorICovDQorY29uc3QgdW5z
aWduZWQgbG9uZyBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTID0gMHg0MDsNCisjZW5kaWYK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3Jj
L25zU2NyaXB0TG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3Bw
Ci0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwCkBAIC03MCwxNiArNzAsMTcgQEAKICNpbmNsdWRl
ICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJwcmxvZy5oIgogI2luY2x1
ZGUgIm5zSUNoYW5uZWxQb2xpY3kuaCIKICNpbmNsdWRlICJuc0NoYW5uZWxQb2xpY3kuaCIKICNp
bmNsdWRlICJuc0NSVC5oIgogI2luY2x1ZGUgIm5zQ29udGVudENyZWF0b3JGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJuc0dlbmVyaWNFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNDcm9zc1NpdGVMaXN0
ZW5lclByb3h5LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2luY2x1ZGUgIm1v
emlsbGEvRnVuY3Rpb25UaW1lci5oIgogI2luY2x1ZGUgIm1vemlsbGEvQ09SU01vZGUuaCIKIAog
I2lmZGVmIFBSX0xPR0dJTkcKIHN0YXRpYyBQUkxvZ01vZHVsZUluZm8qIGdDc3BQUkxvZzsKICNl
bmRpZgogCkBAIC0zMDUsMTYgKzMwNiwyMiBAQCBuc1NjcmlwdExvYWRlcjo6U3RhcnRMb2FkKG5z
U2NyaXB0TG9hZFJlCiAgIGlmICghd2luZG93KSB7CiAgICAgcmV0dXJuIE5TX0VSUk9SX05VTExf
UE9JTlRFUjsKICAgfQogCiAgIG5zSURvY1NoZWxsICpkb2NzaGVsbCA9IHdpbmRvdy0+R2V0RG9j
U2hlbGwoKTsKIAogICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VSZXF1ZXN0b3I+IHByb21wdGVyKGRv
X1F1ZXJ5SW50ZXJmYWNlKGRvY3NoZWxsKSk7CiAKKyAgLy8gSWYgdGhpcyBkb2N1bWVudCBpcyBz
YW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctc2NyaXB0cycsIGFib3J0LgorICBpZiAobURvY3VtZW50
LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgLy8gUkVWSUVXIDog
dGhpcyBwcm9iYWJseSBpc24ndCB0aGUgcmlnaHQgZXJyb3IuLgorICAgIHJldHVybiBOU19FUlJP
Ul9ET01fU0VDVVJJVFlfRVJSOworICB9CisKICAgLy8gY2hlY2sgZm9yIGEgQ29udGVudCBTZWN1
cml0eSBQb2xpY3kgdG8gcGFzcyBkb3duIHRvIHRoZSBjaGFubmVsCiAgIC8vIHRoYXQgd2lsbCBi
ZSBjcmVhdGVkIHRvIGxvYWQgdGhlIHNjcmlwdAogICBuc0NPTVB0cjxuc0lDaGFubmVsUG9saWN5
PiBjaGFubmVsUG9saWN5OwogICBuc0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNz
cDsKICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRS
ZWZzKGNzcCkpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICBpZiAoY3NwKSB7CiAg
ICAgY2hhbm5lbFBvbGljeSA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnNjaGFu
bmVscG9saWN5OzEiKTsKQEAgLTY3NCwxNiArNjgxLDIxIEBAIG5zU2NyaXB0TG9hZGVyOjpQcm9j
ZXNzU2NyaXB0RWxlbWVudChuc0kKICAgICAgICAgIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwYXJz
ZXItYmxvY2tpbmcgc2NyaXB0IGF0IGEgdGltZSIpOwogICAgIE5TX0FTU0VSVElPTihtWFNMVFJl
cXVlc3RzLklzRW1wdHkoKSwKICAgICAgICAgIlBhcnNlci1ibG9ja2luZyBzY3JpcHRzIGFuZCBY
U0xUIHNjcmlwdHMgaW4gdGhlIHNhbWUgZG9jISIpOwogICAgIG1QYXJzZXJCbG9ja2luZ1JlcXVl
c3QgPSByZXF1ZXN0OwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8gaW5saW5lIHNjcmlw
dAorICAvLyBJcyB0aGlzIGRvY3VtZW50IHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRz
Jz8KKyAgaWYgKG1Eb2N1bWVudC0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykg
eworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0
eVBvbGljeT4gY3NwOwogICBydiA9IG1Eb2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3Ao
Z2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBmYWxzZSk7CiAK
ICAgaWYgKGNzcCkgewogICAgIFBSX0xPRyhnQ3NwUFJMb2csIFBSX0xPR19ERUJVRywgKCJOZXcg
U2NyaXB0TG9hZGVyIGkgKioqKndpdGggQ1NQKioqKiIpKTsKICAgICBib29sIGlubGluZU9LOwog
ICAgIHJ2ID0gY3NwLT5HZXRBbGxvd3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsKZGlmZiAtLWdp
dCBhL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcCBiL2NvbnRl
bnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcAotLS0gYS9jb250ZW50L2V2
ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAKKysrIGIvY29udGVudC9ldmVudHMv
c3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCkBAIC04NCwxNiArODQsMTcgQEAKICNpbmNs
dWRlICJuc0RPTVNjcmlwdE9iamVjdEhvbGRlci5oIgogI2luY2x1ZGUgIm5zRGF0YUhhc2h0YWJs
ZS5oIgogI2luY2x1ZGUgIm5zQ09NQXJyYXkuaCIKICNpbmNsdWRlICJuc0V2ZW50TGlzdGVuZXJT
ZXJ2aWNlLmgiCiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVk
ZSAibnNKU0Vudmlyb25tZW50LmgiCiAjaW5jbHVkZSAieHBjcHVibGljLmgiCiAjaW5jbHVkZSAi
c2FtcGxlci5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBtb3ppbGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6aGFsOwogCiAjZGVmaW5l
IEVWRU5UX1RZUEVfRVFVQUxTKCBscywgdHlwZSwgdXNlclR5cGUgKSBcCiAgIChscy0+bUV2ZW50
VHlwZSA9PSB0eXBlICYmIFwKICAgKGxzLT5tRXZlbnRUeXBlICE9IE5TX1VTRVJfREVGSU5FRF9F
VkVOVCB8fCBscy0+bVR5cGVBdG9tID09IHVzZXJUeXBlKSkKIApAQCAtNTY5LDE2ICs1NzAsMjIg
QEAgbnNFdmVudExpc3RlbmVyTWFuYWdlcjo6QWRkU2NyaXB0RXZlbnRMaQogICAgIC8vIGxvYWRl
ZCBhcyBkYXRhLgogICAgIHJldHVybiBOU19PSzsKICAgfQogCiAgIG5zcmVzdWx0IHJ2ID0gTlNf
T0s7CiAgIC8vIHJldHVybiBlYXJseSBwcmV2ZW50aW5nIHRoZSBldmVudCBsaXN0ZW5lciBmcm9t
IGJlaW5nIGFkZGVkCiAgIC8vICdkb2MnIGlzIGZldGNoZWQgYWJvdmUKICAgaWYgKGRvYykgewor
ICAgIC8vIERvbid0IGFsbG93IGFkZGluZyBhbiBldmVudCBsaXN0ZW5lciBpZiB0aGUgZG9jdW1l
bnQgaXMgc2FuZGJveGVkCisgICAgLy8gd2l0aG91dCAnYWxsb3ctc2NyaXB0cycuCisgICAgaWYg
KGRvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgICAgcmV0dXJu
IE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAgbnNDT01QdHI8bnNJQ29u
dGVudFNlY3VyaXR5UG9saWN5PiBjc3A7CiAgICAgcnYgPSBkb2MtPk5vZGVQcmluY2lwYWwoKS0+
R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBy
dik7CiAKICAgICBpZiAoY3NwKSB7CiAgICAgICBib29sIGlubGluZU9LOwogICAgICAgcnYgPSBj
c3AtPkdldEFsbG93c0lubGluZVNjcmlwdCgmaW5saW5lT0spOwogICAgICAgTlNfRU5TVVJFX1NV
Q0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxGb3JtRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVs
ZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVu
dC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNw
cApAQCAtODAsMTYgKzgwLDE3IEBACiAKICNpbmNsdWRlICJtb3pBdXRvRG9jVXBkYXRlLmgiCiAj
aW5jbHVkZSAibnNJSFRNTENvbGxlY3Rpb24uaCIKIAogI2luY2x1ZGUgIm5zSUNvbnN0cmFpbnRW
YWxpZGF0aW9uLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MQnV0dG9uRWxlbWVudC5oIgogI2lu
Y2x1ZGUgImRvbWJpbmRpbmdzLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIAogc3RhdGljIGNvbnN0IGludCBOU19GT1JNX0NP
TlRST0xfTElTVF9IQVNIVEFCTEVfU0laRSA9IDE2OwogCiBzdGF0aWMgY29uc3QgUFJVaW50OCBO
U19GT1JNX0FVVE9DT01QTEVURV9PTiAgPSAxOwogc3RhdGljIGNvbnN0IFBSVWludDggTlNfRk9S
TV9BVVRPQ09NUExFVEVfT0ZGID0gMDsKIApAQCAtNjg0LDE3ICs2ODUsMjUgQEAgbnNIVE1MRm9y
bUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNldChuc0V2ZQogICAgIHJldHVybiBEb1Jlc2V0KCk7CiAg
IH0KIAogICBpZiAoTlNfRk9STV9TVUJNSVQgPT0gYU1lc3NhZ2UpIHsKICAgICAvLyBEb24ndCBz
dWJtaXQgaWYgd2UncmUgbm90IGluIGEgZG9jdW1lbnQuCiAgICAgaWYgKCFkb2MpIHsKICAgICAg
IHJldHVybiBOU19PSzsKICAgICB9Ci0gICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAg
Ly8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIGluIGEgc2FuZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1
Ym1pdAorICAgIC8vIGlzIGRpc2FibGVkLgorICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IGRv
Yy0+U2FuZGJveEZsYWdzKCk7CisKKyAgICBpZiAoIShzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURf
Rk9STVMpKSB7CisgICAgICByZXR1cm4gRG9TdWJtaXQoYUV2ZW50KTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gTlNfT0s7CiAgIH0KIAogICBNT1pfQVNTRVJUKGZhbHNlKTsKICAgcmV0dXJuIE5TX09L
OwogfQogCiBuc3Jlc3VsdAogbnNIVE1MRm9ybUVsZW1lbnQ6OkRvUmVzZXQoKQpAQCAtMTY4NSwx
NiArMTY5NCwyOCBAQCBuc0hUTUxGb3JtRWxlbWVudDo6Q2hlY2tWYWxpZEZvcm1TdWJtaXNzCiAg
ICAqIFRPRE86IHRoZSBjaGVjayBmb3Igb2JzZXJ2ZXIgc2hvdWxkIGJlIHJlbW92ZWQgbGF0ZXIg
d2hlbiBIVE1MNSBGb3JtcyB3aWxsCiAgICAqIGJlIHNwcmVhZCBlbm91Z2ggYW5kIGF1dGhvcnMg
d2lsbCBhc3N1bWUgZm9ybXMgY2FuJ3QgYmUgc3VibWl0dGVkIHdoZW4KICAgICogaW52YWxpZC4g
U2VlIGJ1ZyA1ODc2NzEuCiAgICAqLwogCiAgIE5TX0FTU0VSVElPTighSGFzQXR0cihrTmFtZVNw
YWNlSURfTm9uZSwgbnNHa0F0b21zOjpub3ZhbGlkYXRlKSwKICAgICAgICAgICAgICAgICJXZSBz
aG91bGRuJ3QgYmUgdGhlcmUgaWYgbm92YWxpZGF0ZSBpcyBzZXQhIik7CiAKKyAgLy8gRG9uJ3Qg
ZG8gdmFsaWRhdGlvbiBmb3IgYSBmb3JtIHN1Ym1pdCBkb25lIGJ5IGEgc2FuZGJveGVkIGRvY3Vt
ZW50IHRoYXQKKyAgLy8gZG9lc24ndCBoYXZlICdhbGxvdy1mb3JtcycsIHRoZSBzdWJtaXQgd2ls
bCBoYXZlIGJlZW4gYmxvY2tlZCBhbmQgdGhlCisgIC8vIEhUTUw1IHNwZWMgc2F5cyB3ZSBzaG91
bGRuJ3QgdmFsaWRhdGUgaW4gdGhpcyBjYXNlLgorICBuc0lEb2N1bWVudCogZG9jID0gR2V0Q3Vy
cmVudERvYygpOworICBpZiAoZG9jKSB7CisgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gZG9j
LT5TYW5kYm94RmxhZ3MoKTsKKworICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfRk9S
TVMpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorCiAgIC8vIFdoZW4gLnN1Ym1p
dCgpIGlzIGNhbGxlZCBhRXZlbnQgPSBuc251bGwgc28gd2UgY2FuIHJlbHkgb24gdGhhdCB0byBr
bm93IGlmCiAgIC8vIHdlIGhhdmUgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBmb3JtLgog
ICBuc0NPTVB0cjxuc0lPYnNlcnZlclNlcnZpY2U+IHNlcnZpY2UgPQogICAgIG1vemlsbGE6OnNl
cnZpY2VzOjpHZXRPYnNlcnZlclNlcnZpY2UoKTsKICAgaWYgKCFzZXJ2aWNlKSB7CiAgICAgTlNf
V0FSTklORygiTm8gb2JzZXJ2ZXIgc2VydmljZSBhdmFpbGFibGUhIik7CiAgICAgcmV0dXJuIHRy
dWU7CiAgIH0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJh
bWVFbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVt
ZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVu
dC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQu
Y3BwCkBAIC0zMyw3MyArMzMsMjMgQEAKICAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lw
aWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICAqIHRoZSB0ZXJt
cyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCiAgKgogICogKioq
KiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KIAogI2luY2x1ZGUgIm1vemlsbGEvVXRpbC5o
IgogCiAjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0dl
bmVyaWNIVE1MRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zSURPTVNWR0RvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAibnNHa0F0b21zLmgiCi0jaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJuc0RPTUVycm9yLmgi
Ci0jaW5jbHVkZSAibnNSdWxlRGF0YS5oIgotI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNp
bmNsdWRlICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxh
OwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIAotY2xhc3MgbnNIVE1MSUZyYW1lRWxl
bWVudCA6IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICwgcHVibGljIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUdldFNWR0RvY3VtZW50Ci17Ci1wdWJsaWM6Ci0g
IG5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJ
bmZvLAotICAgICAgICAgICAgICAgICAgICAgIG1vemlsbGE6OmRvbTo6RnJvbVBhcnNlciBhRnJv
bVBhcnNlciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZST01fUEFSU0VSKTsKLSAgdmlydHVhbCB+bnNI
VE1MSUZyYW1lRWxlbWVudCgpOwotCi0gIC8vIG5zSVN1cHBvcnRzCi0gIE5TX0RFQ0xfSVNVUFBP
UlRTX0lOSEVSSVRFRAotCi0gIC8vIG5zSURPTU5vZGUKLSAgTlNfRk9SV0FSRF9OU0lET01OT0RF
KG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01FbGVtZW50Ci0gIE5T
X0ZPUldBUkRfTlNJRE9NRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAg
Ly8gbnNJRE9NSFRNTEVsZW1lbnQKLSAgTlNfRk9SV0FSRF9OU0lET01IVE1MRUxFTUVOVChuc0dl
bmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQK
LSAgTlNfREVDTF9OU0lET01IVE1MSUZSQU1FRUxFTUVOVAotCi0gIC8vIG5zSURPTUdldFNWR0Rv
Y3VtZW50Ci0gIE5TX0RFQ0xfTlNJRE9NR0VUU1ZHRE9DVU1FTlQKLQotICAvLyBuc0lDb250ZW50
Ci0gIHZpcnR1YWwgYm9vbCBQYXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KTsKLSAgTlNf
SU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1dGVNYXBwZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0
ZSkgY29uc3Q7Ci0gIHZpcnR1YWwgbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1
dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdDsKLQotICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5z
SU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5vZGUgKiphUmVzdWx0KSBjb25zdDsKLSAgdmlydHVh
bCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xhc3NJbmZvKCk7Ci19OwotCi0KIE5TX0lNUExfTlNfTkVX
X0hUTUxfRUxFTUVOVF9DSEVDS19QQVJTRVIoSUZyYW1lKQogCi0KIG5zSFRNTElGcmFtZUVsZW1l
bnQ6Om5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5v
ZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9tUGFy
c2VyIGFGcm9tUGFyc2VyKQogICA6IG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQoYU5vZGVJbmZv
LCBhRnJvbVBhcnNlcikKIHsKIH0KIAogbnNIVE1MSUZyYW1lRWxlbWVudDo6fm5zSFRNTElGcmFt
ZUVsZW1lbnQoKQogewpAQCAtMTMxLDE2ICs4MSwxNyBAQCBOU19JTVBMX1NUUklOR19BVFRSKG5z
SFRNTElGcmFtZUVsZW1lbnQsCiBOU19JTVBMX1VSSV9BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQs
IExvbmdEZXNjLCBsb25nZGVzYykKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxl
bWVudCwgTWFyZ2luSGVpZ2h0LCBtYXJnaW5oZWlnaHQpCiBOU19JTVBMX1NUUklOR19BVFRSKG5z
SFRNTElGcmFtZUVsZW1lbnQsIE1hcmdpbldpZHRoLCBtYXJnaW53aWR0aCkKIE5TX0lNUExfU1RS
SU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTmFtZSwgbmFtZSkKIE5TX0lNUExfU1RSSU5H
X0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU2Nyb2xsaW5nLCBzY3JvbGxpbmcpCiBOU19JTVBM
X1VSSV9BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNyYywgc3JjKQogTlNfSU1QTF9TVFJJTkdf
QVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBXaWR0aCwgd2lkdGgpCiBOU19JTVBMX0JPT0xfQVRU
Uihuc0hUTUxJRnJhbWVFbGVtZW50LCBNb3pBbGxvd0Z1bGxTY3JlZW4sIG1vemFsbG93ZnVsbHNj
cmVlbikKK05TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU2FuZGJveCwg
c2FuZGJveCkKIAogTlNfSU1FVEhPRElNUAogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0Q29udGVu
dERvY3VtZW50KG5zSURPTURvY3VtZW50KiogYUNvbnRlbnREb2N1bWVudCkKIHsKICAgcmV0dXJu
IG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OkdldENvbnRlbnREb2N1bWVudChhQ29udGVudERv
Y3VtZW50KTsKIH0KIAogTlNfSU1FVEhPRElNUApAQCAtMjY4LDggKzIxOSwzNyBAQCBuc0hUTUxJ
RnJhbWVFbGVtZW50OjpJc0F0dHJpYnV0ZU1hcHBlZChjCiAKIAogbnNNYXBSdWxlVG9BdHRyaWJ1
dGVzRnVuYwogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9u
KCkgY29uc3QKIHsKICAgcmV0dXJuICZNYXBBdHRyaWJ1dGVzSW50b1J1bGU7CiB9CiAKK25zcmVz
dWx0Cituc0hUTUxJRnJhbWVFbGVtZW50OjpBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNl
SUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNBdHRyVmFsdWUqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYU5vdGlmeSkKK3sKKyAgaWYgKGFOYW1lID09IG5zR2tBdG9tczo6c2FuZGJv
eCAmJiBhTmFtZVNwYWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKKyAgICAvLyBQYXJzZSB0
aGUgbmV3IHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSwgYW5kIGlmIHdlIGhhdmUgYSBk
b2NzaGVsbAorICAgIC8vIHNldCBpdHMgc2FuZGJveCBmbGFncyBhcHByb3ByaWF0ZWx5LgorICAg
IGlmIChtRnJhbWVMb2FkZXIpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NzaGVs
bCA9IG1GcmFtZUxvYWRlci0+R2V0RXhpc3RpbmdEb2NTaGVsbCgpOworCisgICAgICBpZiAoZG9j
c2hlbGwpIHsKKyAgICAgICAgUFJVaW50MzIgbmV3RmxhZ3MgPSAwOworICAgICAgICAvLyBJZiBh
IE5VTEwgYVZhbHVlIGlzIHBhc3NlZCBpbiwgd2Ugd2FudCB0byBjbGVhciB0aGUgc2FuZGJveCBm
bGFncworICAgICAgICAvLyB3aGljaCB3ZSB3aWxsIGRvIGJ5IHNldHRpbmcgdGhlbSB0byAwLgor
ICAgICAgICBpZiAoYVZhbHVlKSB7CisgICAgICAgICAgbnNBdXRvU3RyaW5nIHN0clZhbHVlOwor
ICAgICAgICAgIGFWYWx1ZS0+VG9TdHJpbmcoc3RyVmFsdWUpOworICAgICAgICAgIG5ld0ZsYWdz
ID0gbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3MoCisgICAgICAg
ICAgICBzdHJWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZG9jc2hlbGwtPlNldFNhbmRib3hG
bGFncyhuZXdGbGFncyk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBuc0dlbmVyaWNI
VE1MRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKGFOYW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5vdGlmeSk7CisKK30K
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50
LmggYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQv
c3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApAQCAtMCwwICsxLDExMyBAQAorLyogLSotIE1vZGU6
IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0
OiAyIC0qLSAqLworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lv
bjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisg
KiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAq
IFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lm
aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisg
KiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNh
dG9yIGNsaWVudCBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3Jp
Z2luYWwgQ29kZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisg
KiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0
IChDKSAxOTk4CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRl
bnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhl
ciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0
aGUgIkdQTCIpLAorICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBw
cm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAor
ICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQ
TCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZl
cnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5
b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVw
bGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWly
ZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBw
cm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwg
b3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKwor
I2luY2x1ZGUgIm1vemlsbGEvVXRpbC5oIgorCisjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIm5z
R2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01Eb2N1bWVudC5oIgor
I2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJRE9NU1ZHRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJuc0drQXRvbXMuaCIKKyNpbmNsdWRlICJuc0lEb2N1bWVudC5o
IgorI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIm5zRE9NRXJyb3Iu
aCIKKyNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCisjaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgor
I2luY2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCisKK2NsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQg
OiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAoreworcHVibGljOgorICBuc0hU
TUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywK
KyAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJz
ZXIgPSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7CisgIHZpcnR1YWwgfm5zSFRNTElG
cmFtZUVsZW1lbnQoKTsKKworICAvLyBuc0lTdXBwb3J0cworICBOU19ERUNMX0lTVVBQT1JUU19J
TkhFUklURUQKKworICAvLyBuc0lET01Ob2RlCisgIE5TX0ZPUldBUkRfTlNJRE9NTk9ERShuc0dl
bmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NRWxlbWVudAorICBOU19GT1JX
QVJEX05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5z
SURPTUhUTUxFbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNHZW5lcmlj
SFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50CisgIE5T
X0RFQ0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKKworICAvLyBuc0lET01HZXRTVkdEb2N1bWVu
dAorICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCisKKyAgLy8gbnNJQ29udGVudAorICB2
aXJ0dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CisgIE5TX0lNRVRI
T0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNv
bnN0OworICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFw
cGluZ0Z1bmN0aW9uKCkgY29uc3Q7CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2Rl
SW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7CisgIHZpcnR1YWwgbnNY
UENDbGFzc0luZm8qIEdldENsYXNzSW5mbygpOworCisgIHZpcnR1YWwgbnNyZXN1bHQgQWZ0ZXJT
ZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYU5vdGlmeSk7CisKKyAgUFJVaW50MzIg
R2V0U2FuZGJveEZsYWdzKCkgeworICAgIG5zQXV0b1N0cmluZyBzYW5kYm94QXR0cjsKKworICAg
IGlmIChHZXRBdHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6OnNhbmRib3gsIHNhbmRi
b3hBdHRyKSkgeworICAgICAgcmV0dXJuIG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRy
aWJ1dGVUb0ZsYWdzKHNhbmRib3hBdHRyKTsKKyAgICB9CisKKyAgICAvLyBObyBzYW5kYm94IGF0
dHJpYnV0ZSwgbm8gc2FuZGJveCBmbGFncy4KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHN0YXRp
YyBuc0hUTUxJRnJhbWVFbGVtZW50KiBGcm9tQ29udGVudChuc0lDb250ZW50ICphQ29udGVudCkK
KyAgeworICAgIGlmIChhQ29udGVudC0+SXNIVE1MKG5zR2tBdG9tczo6aWZyYW1lKSkKKyAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxuc0hUTUxJRnJhbWVFbGVtZW50Kj4oYUNvbnRlbnQpOworICAg
IHJldHVybiBuc251bGw7CisgIH0KK307CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvZG9jdW1l
bnQvc3JjL25zSFRNTERvY3VtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNI
VE1MRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9j
dW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQu
Y3BwCkBAIC0xMzEsMTYgKzEzMSwxNyBAQAogI2luY2x1ZGUgInBycHJmLmgiCiAjaW5jbHVkZSAi
bW96aWxsYS9kb20vRWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMuaCIK
ICNpbmNsdWRlICJuc01pbWVUeXBlcy5oIgogI2luY2x1ZGUgIm5zSVJlcXVlc3QuaCIKICNpbmNs
dWRlICJuc0h0bWw1VHJlZU9wRXhlY3V0b3IuaCIKICNpbmNsdWRlICJuc0h0bWw1UGFyc2VyLmgi
CiAjaW5jbHVkZSAibnNJRE9NSlNXaW5kb3cuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5o
IgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpk
b207CiAKICNkZWZpbmUgTlNfTUFYX0RPQ1VNRU5UX1dSSVRFX0RFUFRIIDIwCiAKICNpbmNsdWRl
ICJwcm1lbS5oIgogI2luY2x1ZGUgInBydGltZS5oIgpAQCAtMTI0OSwxNiArMTI1MCwyMSBAQCBu
c0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiB7CiAgIGFDb29raWUuVHJ1
bmNhdGUoKTsgLy8gY2xlYXIgY3VycmVudCBjb29raWUgaW4gY2FzZSBzZXJ2aWNlIGZhaWxzOwog
ICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNvb2tpZSBpc24ndCBhbiBlcnJvciBjb25kaXRp
b24uCiAKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09LOwog
ICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNl
dCwgYWNjZXNzIHRvIHJlYWQgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNh
bmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pCisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9T
RUNVUklUWV9FUlI7CisKICAgLy8gbm90IGhhdmluZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFu
IGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2
aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlmIChzZXJ2aWNlKSB7CiAgICAg
Ly8gR2V0IGEgVVJJIGZyb20gdGhlIGRvY3VtZW50IHByaW5jaXBhbC4gV2UgdXNlIHRoZSBvcmln
aW5hbAogICAgIC8vIGNvZGViYXNlIGluIGNhc2UgdGhlIGNvZGViYXNlIHdhcyBjaGFuZ2VkIGJ5
IFNldERvbWFpbgogICAgIG5zQ09NUHRyPG5zSVVSST4gY29kZWJhc2VVUkk7CiAgICAgTm9kZVBy
aW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMoY29kZWJhc2VVUkkpKTsKIApAQCAtMTI3
OSwxNiArMTI4NSwyMSBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNv
CiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTERvY3VtZW50OjpTZXRDb29raWUoY29uc3QgbnNBU3Ry
aW5nJiBhQ29va2llKQogewogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1
cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2lu
IGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gd3JpdGUgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVk
LgorICBpZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pCisgICAgcmV0dXJuIE5T
X0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisKICAgLy8gbm90IGhhdmluZyBhIGNvb2tpZSBzZXJ2
aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNlcnZpY2Ug
PSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlmIChzZXJ2
aWNlICYmIG1Eb2N1bWVudFVSSSkgewogICAgIG5zQ09NUHRyPG5zSVByb21wdD4gcHJvbXB0Owog
ICAgIG5zQ09NUHRyPG5zUElET01XaW5kb3c+IHdpbmRvdyA9IEdldFdpbmRvdygpOwogICAgIGlm
ICh3aW5kb3cpIHsKICAgICAgIHdpbmRvdy0+R2V0UHJvbXB0ZXIoZ2V0dGVyX0FkZFJlZnMocHJv
bXB0KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbiBiL2Rv
Y3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4KLS0tIGEvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbgor
KysgYi9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCkBAIC0xMTYsOSArMTE2LDEwIEBAIEZPUkNF
X1NUQVRJQ19MSUIgPSAxCiAKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawog
CiBMT0NBTF9JTkNMVURFUyArPSBcCiAgIC1JJChzcmNkaXIpLy4uL3NoaXN0b3J5L3NyYyBcCiAg
IC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKICAgLUkkKHRvcHNyY2RpcikvbGF5b3V0L2Jhc2Ug
XAogICAtSSQodG9wc3JjZGlyKS94cGNvbS9kcyBcCisgIC1JJCh0b3BzcmNkaXIpL2NvbnRlbnQv
YmFzZS9zcmMgXAogICAkKE5VTEwpCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hl
bGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9kb2NzaGVsbC9iYXNl
L25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKQEAgLTIx
MywxNiArMjEzLDE3IEBACiAjaW5jbHVkZSAibnNJV2ViQnJvd3NlclByaW50LmgiCiAjZW5kaWYK
IAogI2luY2x1ZGUgIm5zUGx1Z2luRXJyb3IuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5o
IgogI2luY2x1ZGUgIm5zQ29udGVudEVycm9ycy5oIgogI2luY2x1ZGUgIm5zSUNoYW5uZWxQb2xp
Y3kuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJu
c1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNYVUxBcHBBUEkuaCIKIAogI2luY2x1ZGUg
Im5zRE9NTmF2aWdhdGlvblRpbWluZy5oIgogI2luY2x1ZGUgIm5zSVRpbWVkQ2hhbm5lbC5oIgog
I2luY2x1ZGUgIm1vemlsbGEvU3RhcnR1cFRpbWVsaW5lLmgiCiAKIHN0YXRpYyBOU19ERUZJTkVf
Q0lEKGtET01TY3JpcHRPYmplY3RGYWN0b3J5Q0lELApAQCAtNzQzLDE2ICs3NDQsMTcgQEAgbnNE
b2NTaGVsbDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVTWV9GTEFHU19OT05FKSwK
ICAgICBtQXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9XTiksCiAgICAgbUxvYWRU
eXBlKDApLAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdpbkhlaWdodCgtMSksCiAg
ICAgbUl0ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNUcmFuc0luZGV4KC0xKSwK
ICAgICBtTG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hGbGFncygwKSwKICAgICBt
Q3JlYXRlZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUpLAogICAgIG1BbGxvd1Bs
dWdpbnModHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwKICAgICBtQWxsb3dNZXRh
UmVkaXJlY3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwKICAgICBtQWxsb3dETlNQ
cmVmZXRjaCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRydWUpLApAQCAtMjkzNCwx
NiArMjkzNiw3MyBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pCiAg
ICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
Zm91bmRJdGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91bmRJdGVtIGhlcmUgZXZl
biBpZiBpdCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0ZW0gc2luY2UgYWxsIHRo
ZSBuYW1lcyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAgICAgICAgIC8vIHNwZWNp
YWwgY2FzZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3IgZnVydGhlci4KIAorICAg
ICAgICAgICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwgd2UgbmVlZCB0byBkbyBz
b21lIGV4dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7
CisKKyAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19HZXRJbnRlcmZh
Y2UoYU9yaWdpbmFsUmVxdWVzdG9yKTsKKworICAgICAgICAgICAgaWYgKGRvYykgeworICAgICAg
ICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzKSB7CisgICAgICAgICAgICAgICAgbnND
T01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcm9vdDsKKyAgICAgICAgICAgICAgICBHZXRTYW1l
VHlwZVJvb3RUcmVlSXRlbShnZXR0ZXJfQWRkUmVmcyhyb290KSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBJcyB0aGUgZm91bmQgaXRlbSBub3QgYSB0b3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBh
bmQgbm90IG91cnNlbGYgPworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJl
ZUl0ZW0+IHNlbGZBc0l0ZW0gPSBzdGF0aWNfY2FzdDxuc0lEb2NTaGVsbFRyZWVJdGVtICo+KHRo
aXMpOworICAgICAgICAgICAgICAgIGlmIChmb3VuZEl0ZW0gIT0gcm9vdCAmJiBmb3VuZEl0ZW0g
IT0gc2VsZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgYW4gYW5jZXN0
b3Igb2YgdGhlIGZvdW5kSXRlbSA/CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNBbmNlc3Rv
ciA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJl
ZUl0ZW0+IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJl
bnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
QXNJdGVtLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0bXAgJiYgdG1wID09IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc0FuY2VzdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNBbmNlc3RvcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTm8sIHdlIGFyZSBub3QgYW4gYW5jZXN0b3IgYW5kIG91ciBkb2N1bWVudCBpcworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2FuZGJveGVkLCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgor
ICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgLSBpcyBpdCBhbiBhbmNlc3RvciBvZiBvdXJz
ID8KKyAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1w
OworICAgICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyh0
bXApKTsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG1wKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBmb3VuZEl0ZW0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFuY2VzdG9yLCBhbmQgd2UgYXJlIHNhbmRib3hl
ZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9wLW5hdmln
YXRpb24gaXMgc2V0LCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHRtcC0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBmb3Vu
ZEl0ZW0uc3dhcCgqX3JldHZhbCk7CiAgICAgICAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICAvLyBLZWVwIGxvb2tpbmcKICAgICAgICAgCiAgICAgLy8gRmlyc3Qg
d2UgY2hlY2sgb3VyIG5hbWUuCkBAIC00OTcwLDE2ICs1MDI5LDMwIEBAIG5zRG9jU2hlbGw6OlNl
dElzQXBwVGFiKGJvb2wgYUlzQXBwVGFiKQogTlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6R2V0
SXNBcHBUYWIoYm9vbCAqYUlzQXBwVGFiKQogewogICAqYUlzQXBwVGFiID0gbUlzQXBwVGFiOwog
ICByZXR1cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6OlNldFNhbmRi
b3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQoreworICBtU2FuZGJveEZsYWdzID0gYVNh
bmRib3hGbGFnczsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCituc0RvY1No
ZWxsOjpHZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgICphU2FuZGJveEZsYWdzKQoreworICAqYVNh
bmRib3hGbGFncyA9IG1TYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1F
VEhPRElNUAogbnNEb2NTaGVsbDo6U2V0VmlzaWJpbGl0eShib29sIGFWaXNpYmlsaXR5KQogewog
ICAgIGlmICghbUNvbnRlbnRWaWV3ZXIpCiAgICAgICAgIHJldHVybiBOU19PSzsKICAgICBpZiAo
YVZpc2liaWxpdHkpIHsKICAgICAgICAgbUNvbnRlbnRWaWV3ZXItPlNob3coKTsKICAgICB9CiAg
ICAgZWxzZSB7CkBAIC04MTY3LDE2ICs4MjQwLDI5IEBAIG5zRG9jU2hlbGw6OkludGVybmFsTG9h
ZChuc0lVUkkgKiBhVVJJLAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0
YXJnZXRJdGVtOwogICAgICAgICBGaW5kSXRlbVdpdGhOYW1lKGFXaW5kb3dUYXJnZXQsIG5zbnVs
bCwgdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyh0YXJnZXRJ
dGVtKSk7CiAKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IHRhcmdldERvY1NoZWxsID0g
ZG9fUXVlcnlJbnRlcmZhY2UodGFyZ2V0SXRlbSk7CiAgICAgICAgIAogICAgICAgICBib29sIGlz
TmV3V2luZG93ID0gZmFsc2U7CiAgICAgICAgIGlmICghdGFyZ2V0RG9jU2hlbGwpIHsKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBkb2NzaGVsbCdzIGRvY3VtZW50IGlzIHNhbmRib3hlZCBhbmQgd2Fz
IHRyeWluZyB0bworICAgICAgICAgICAgLy8gbmF2aWdhdGUvbG9hZCBhIGZyYW1lIGl0IHdhc24n
dCBhbGxvd2VkIHRvIGFjY2VzcywgdGhlCisgICAgICAgICAgICAvLyBGaW5kSXRlbVdpdGhOYW1l
IGFib3ZlIHdpbGwgaGF2ZSByZXR1cm5lZCBudWxsIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAg
ICAvLyBpdGVtIC0gd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBvcGVuIGEgbmV3IHdpbmRvdyBp
biB0aGlzIGNhc2UKKyAgICAgICAgICAgIC8vIHRob3VnaC4gQ2hlY2sgaWYgd2UgYXJlIHNhbmRi
b3hlZCBhbmQgYmFpbCBvdXQgaGVyZSBpZiBzby4KKyAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVF
KG1Db250ZW50Vmlld2VyLCBOU19FUlJPUl9GQUlMVVJFKTsKKyAgICAgICAgICAgIG5zSURvY3Vt
ZW50KiBkb2MgPSBtQ29udGVudFZpZXdlci0+R2V0RG9jdW1lbnQoKTsKKyAgICAgICAgICAgIFBS
VWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2Mt
PlNhbmRib3hGbGFncygpOworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hF
RF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwor
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IHdpbiA9
CiAgICAgICAgICAgICAgICAgZG9fR2V0SW50ZXJmYWNlKEdldEFzU3VwcG9ydHModGhpcykpOwog
ICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUod2luLCBOU19FUlJPUl9OT1RfQVZBSUxBQkxFKTsK
IAogICAgICAgICAgICAgbnNEZXBlbmRlbnRTdHJpbmcgbmFtZShhV2luZG93VGFyZ2V0KTsKICAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gbmV3V2luOwogICAgICAgICAgICAgcnYg
PSB3aW4tPk9wZW4oRW1wdHlTdHJpbmcoKSwgLy8gVVJMIHRvIGxvYWQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUsICAgICAgICAgIC8vIHdpbmRvdyBuYW1lCkBAIC04OTU0LDE4ICs5
MDQwLDMxIEBAIG5zRG9jU2hlbGw6OkRvVVJJTG9hZChuc0lVUkkgKiBhVVJJLAogICAgICAgICB9
CiAgICAgICAgIC8vIFNldCB0aGUgcmVmZXJyZXIgZXhwbGljaXRseQogICAgICAgICBpZiAoYVJl
ZmVycmVyVVJJICYmIGFTZW5kUmVmZXJyZXIpIHsKICAgICAgICAgICAgIC8vIFJlZmVycmVyIGlz
IGN1cnJlbmx5IG9ubHkgc2V0IGZvciBsaW5rIGNsaWNrcyBoZXJlLgogICAgICAgICAgICAgaHR0
cENoYW5uZWwtPlNldFJlZmVycmVyKGFSZWZlcnJlclVSSSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFsKGRvX1F1ZXJ5SW50ZXJm
YWNlKGFPd25lcikpOwotICAgIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25l
clByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSk7CisgICAgbnNDT01QdHI8bnNJUHJpbmNp
cGFsPiBvd25lclByaW5jaXBhbDsKKworICAgIC8vIElmIHRoZSBjb250ZW50IGJlaW5nIGxvYWRl
ZCBzaG91bGQgYmUgc2FuZGJveGVkIHdpdGggcmVzcGVjdCB0byBvcmlnaW4KKyAgICAvLyB3ZSBu
ZWVkIHRvIGNyZWF0ZSBhIG5ldyBudWxsIHByaW5jaXBhbCBoZXJlLCBhbmQgdGhlbiB0ZWxsCisg
ICAgLy8gbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyIHRvIGZvcmNlIGl0IHRvIGJl
IHNldCBhcyB0aGUKKyAgICAvLyBjaGFubmVsIG93bmVyLgorICAgIGlmIChtU2FuZGJveEZsYWdz
ICYgU0FOREJPWEVEX09SSUdJTikgeworICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19DcmVhdGVJ
bnN0YW5jZSgiQG1vemlsbGEub3JnL251bGxwcmluY2lwYWw7MSIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAvLyBOb3Qgc2FuZGJveGVkIC0gd2UgYWxsb3cgdGhlIGNvbnRlbnQgdG8gYXNzdW1lIGl0
cyBuYXR1cmFsIG93bmVyLgorICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19RdWVyeUludGVyZmFj
ZShhT3duZXIpOworICAgIH0KKworICAgIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25l
cihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikp
OwogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1
ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAgIGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgICAg
IC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxz
IG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAgICAgICAgU2V0RXhlY3V0aW9u
UG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFMKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1No
ZWxsLmgKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKKysrIGIvZG9jc2hlbGwvYmFz
ZS9uc0RvY1NoZWxsLmgKQEAgLTc4NCwxNiArNzg0LDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBD
cmVhdGUoKSBpcyBjYWxsZWQsIHRoZSB0eXBlIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuCiAg
ICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUl0ZW1UeXBlOwogCiAgICAgLy8gSW5kZXgg
aW50byB0aGUgU0hUcmFuc2FjdGlvbiBsaXN0LCBpbmRpY2F0aW5nIHRoZSBwcmV2aW91cyBhbmQg
Y3VycmVudAogICAgIC8vIHRyYW5zYWN0aW9uIGF0IHRoZSB0aW1lIHRoYXQgdGhpcyBEb2NTaGVs
bCBiZWdpbnMgdG8gbG9hZAogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1QcmV2aW91
c1RyYW5zSW5kZXg7CiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUxvYWRlZFRyYW5z
SW5kZXg7CiAKKyAgICBQUlVpbnQzMiAgICAgICAgICAgICAgICAgICBtU2FuZGJveEZsYWdzOwor
CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUNyZWF0ZWQ7CiAgICAgYm9vbCAgICAg
ICAgICAgICAgICAgICAgICAgbUFsbG93U3ViZnJhbWVzOwogICAgIGJvb2wgICAgICAgICAgICAg
ICAgICAgICAgIG1BbGxvd1BsdWdpbnM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAg
bUFsbG93SmF2YXNjcmlwdDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dN
ZXRhUmVkaXJlY3RzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ltYWdl
czsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dETlNQcmVmZXRjaDsKICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dXaW5kb3dDb250cm9sOwpkaWZmIC0t
Z2l0IGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwgYi9kb2NzaGVsbC9iYXNlL25zSURv
Y1NoZWxsLmlkbAotLS0gYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAorKysgYi9kb2Nz
aGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbApAQCAtNjcsMTcgKzY3LDE3IEBAIGludGVyZmFjZSBu
c0lSZXF1ZXN0OwogaW50ZXJmYWNlIG5zSVNIRW50cnk7CiBpbnRlcmZhY2UgbnNJTGF5b3V0SGlz
dG9yeVN0YXRlOwogaW50ZXJmYWNlIG5zSVNlY3VyZUJyb3dzZXJVSTsKIGludGVyZmFjZSBuc0lE
T01TdG9yYWdlOwogaW50ZXJmYWNlIG5zSVByaW5jaXBhbDsKIGludGVyZmFjZSBuc0lXZWJCcm93
c2VyUHJpbnQ7CiBpbnRlcmZhY2UgbnNJVmFyaWFudDsKIAotW3NjcmlwdGFibGUsIHV1aWQoYzcz
MjU0MjItODE3ZS00MzIxLTk1N2EtYzBiZGQ3NjQ5NDFkKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDli
MjgzMzM3LTA5N2QtNGZhOC1hMmRhLTkxNjMxOGVhZjgyOCldCiBpbnRlcmZhY2UgbnNJRG9jU2hl
bGwgOiBuc0lTdXBwb3J0cwogewogICAvKioKICAgICogTG9hZHMgYSBnaXZlbiBVUkkuICBUaGlz
IHdpbGwgZ2l2ZSBwcmlvcml0eSB0byBsb2FkaW5nIHRoZSByZXF1ZXN0ZWQgVVJJCiAgICAqIGlu
IHRoZSBvYmplY3QgaW1wbGVtZW50aW5nCXRoaXMgaW50ZXJmYWNlLiAgSWYgaXQgY2FuJ3QgYmUg
bG9hZGVkIGhlcmUKICAgICogaG93ZXZlciwgdGhlIFVSTCBkaXNwYXRjaGVyIHdpbGwgZ28gdGhy
b3VnaCBpdHMgbm9ybWFsIHByb2Nlc3Mgb2YgY29udGVudAogICAgKiBsb2FkaW5nLgogICAgKgpA
QCAtNjE1LDkgKzYxNSwyMyBAQCBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwog
ICAgKi8KICAgYXR0cmlidXRlIGJvb2wgaXNCcm93c2VyRnJhbWU7CiAKICAgLyoKICAgICogSXMg
dGhpcyBkb2NzaGVsbCBjb250YWluZWQgaW4gYW4gPGlmcmFtZSBtb3picm93c2VyPiwgZWl0aGVy
IGRpcmVjdGx5IG9yCiAgICAqIGluZGlyZWN0bHk/CiAgICAqLwogICByZWFkb25seSBhdHRyaWJ1
dGUgYm9vbCBjb250YWluZWRJbkJyb3dzZXJGcmFtZTsKKworICAvKioKKyAgICogVGhlIHNhbmRi
b3ggZmxhZ3Mgb24gdGhlIGRvY3NoZWxsLiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1ZSBvZiB0aGUg
c2FuZGJveAorICAgKiBhdHRyaWJ1dGUgb2YgdGhlIGFzc29jaWF0ZWQgSUZSQU1FIG9yIENTUC1w
cm90ZWN0YWJsZSBjb250ZW50LCBpZgorICAgKiBleGlzdGVudC4gU2VlIHRoZSBIVE1MNSBzcGVj
IGZvciBtb3JlIGRldGFpbHMuCisgICAqIFRoZXNlIGZsYWdzIG9uIHRoZSBkb2NzaGVsbCByZWZs
ZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzYW5kYm94CisgICAqIGF0dHJpYnV0ZSwgd2hp
Y2ggaXMgbW9kaWZpYWJsZS4gVGhleSBhcmUgb25seSB1c2VkIHdoZW4gbG9hZGluZyBuZXcKKyAg
ICogY29udGVudCwgc2FuZGJveCBmbGFncyBhcmUgYWxzbyBpbW11dGFibHkgc2V0IG9uIHRoZSBk
b2N1bWVudCB3aGVuIGl0IGlzCisgICAqIGxvYWRlZC4KKyAgICogVGhlIHNhbmRib3ggZmxhZ3Mg
b2YgYSBkb2N1bWVudCBkZXBlbmQgb24gdGhlIHNhbmRib3ggZmxhZ3Mgb24gaXRzCisgICAqIGRv
Y3NoZWxsIGFuZCBvZiBpdHMgcGFyZW50IGRvY3VtZW50LCBpZiBhbnkuCisgICAqIFNlZSBuc1Nh
bmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MuCisgICAqLworICBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyBzYW5kYm94RmxhZ3M7CiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2Jhc2UvbnNH
bG9iYWxXaW5kb3cuY3BwIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCi0tLSBhL2RvbS9i
YXNlL25zR2xvYmFsV2luZG93LmNwcAorKysgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAK
QEAgLTI1NSwxNiArMjU1LDE3IEBACiAKICNpbmNsdWRlICJuc1JlZnJlc2hEcml2ZXIuaCIKICNp
bmNsdWRlICJtb3pBdXRvRG9jVXBkYXRlLmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL1RlbGVtZXRy
eS5oIgogI2luY2x1ZGUgIm5zTG9jYXRpb24uaCIKICNpbmNsdWRlICJuc1dyYXBwZXJDYWNoZUlu
bGluZXMuaCIKICNpbmNsdWRlICJuc0RPTUV2ZW50VGFyZ2V0SGVscGVyLmgiCisjaW5jbHVkZSAi
bnNTYW5kYm94RmxhZ3MuaCIKIAogI2lmZGVmIEFORFJPSUQKICNpbmNsdWRlIDxhbmRyb2lkL2xv
Zy5oPgogI2VuZGlmCiAKICNpZmRlZiBQUl9MT0dHSU5HCiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZv
KiBnRE9NTGVha1BSTG9nOwogI2VuZGlmCkBAIC04MjQzLDE2ICs4MjQ0LDIyIEBAIG5zR2xvYmFs
V2luZG93OjpHZXRTZXNzaW9uU3RvcmFnZShuc0lET00KICAgaWYgKCFtU2Vzc2lvblN0b3JhZ2Up
IHsKICAgICAqYVNlc3Npb25TdG9yYWdlID0gbnNudWxsOwogCiAgICAgbnNTdHJpbmcgZG9jdW1l
bnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVu
dFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0
aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0
byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYg
U0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlf
RVJSOworICAgIH0KKwogICAgIG5zcmVzdWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNlc3Npb25TdG9y
YWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFVSSSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRl
cl9BZGRSZWZzKG1TZXNzaW9uU3RvcmFnZSkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBy
dik7CiAKICNpZmRlZiBQUl9MT0dHSU5HCiAgICAgaWYgKFBSX0xPR19URVNUKGdET01MZWFrUFJM
b2csIFBSX0xPR19ERUJVRykpIHsKQEAgLTgzMDQsMTYgKzgzMTEsMjIgQEAgbnNHbG9iYWxXaW5k
b3c6OkdldExvY2FsU3RvcmFnZShuc0lET01TdAogICAgICAgZG9fR2V0U2VydmljZSgiQG1vemls
bGEub3JnL2RvbS9zdG9yYWdlbWFuYWdlcjsxIiwgJnJ2KTsKICAgICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVu
dCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAgICAg
fQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFn
IHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAgaWYg
KG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX09SSUdJTikpIHsKKyAg
ICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIHJ2ID0g
c3RvcmFnZU1hbmFnZXItPkdldExvY2FsU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3Vt
ZW50VVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZXR0ZXJfQWRkUmVmcyhtTG9jYWxTdG9yYWdlKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NF
U1MocnYsIHJ2KTsKICAgfQogCiAgIE5TX0FERFJFRigqYUxvY2FsU3RvcmFnZSA9IG1Mb2NhbFN0
b3JhZ2UpOwogICByZXR1cm4gTlNfT0s7CmRpZmYgLS1naXQgYS9kb20vaW50ZXJmYWNlcy9odG1s
L25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9N
SFRNTElGcmFtZUVsZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRN
TElGcmFtZUVsZW1lbnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElG
cmFtZUVsZW1lbnQuaWRsCkBAIC00NSwzMiArNDUsMzMgQEAKICAqCiAgKiBUaGlzIGludGVyZmFj
ZSBpcyB0cnlpbmcgdG8gZm9sbG93IHRoZSBET00gTGV2ZWwgMiBIVE1MIHNwZWNpZmljYXRpb246
CiAgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1MLwogICoKICAqIHdpdGgg
Y2hhbmdlcyBmcm9tIHRoZSB3b3JrLWluLXByb2dyZXNzIFdIQVRXRyBIVE1MIHNwZWNpZmljYXRp
b246CiAgKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3Jr
LwogICovCiAKLVtzY3JpcHRhYmxlLCB1dWlkKDBlYWQ1YTVjLWU0ZDMtNGU0ZC04OGI4LTdjOWRj
OWQyNjY1YyldCitbc2NyaXB0YWJsZSwgdXVpZCg1MmY2MjQ0Yi1iMWY1LTRmNGMtOGZmMy03ZTE0
NjMxNmY0MTEpXQogaW50ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDogbnNJRE9NSFRN
TEVsZW1lbnQKIHsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgYWxpZ247
CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGZyYW1lQm9yZGVyOwogICAg
ICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBoZWlnaHQ7CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGxvbmdEZXNjOwogICAgICAgICAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nICAgICAgICBtYXJnaW5IZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgICAgICAgIG1hcmdpbldpZHRoOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5n
ICAgICAgICBuYW1lOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzY3Jv
bGxpbmc7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNyYzsKICAgICAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgd2lkdGg7CiAgIC8vIEludHJvZHVjZWQg
aW4gRE9NIExldmVsIDI6CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01Eb2N1bWVudCAgIGNv
bnRlbnREb2N1bWVudDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVdpbmRvdyAgICAgY29u
dGVudFdpbmRvdzsKIAorICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzYW5k
Ym94OwogCiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBpZnJhbWUgZWxlbWVudHMgcmVx
dWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0byBiZSBwcmVzZW50CiAgIC8v
IGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3ViIGRvY3VtZW50IHRvIGdvIGlu
dG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRwczovL3dpa2kubW96aWxsYS5v
cmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkKICAgICAgICAgICAgYXR0cmli
dXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVuOwogfTsKZGlmZiAtLWdpdCBh
L2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4gYi9kb20vc3JjL2pzdXJsL01ha2VmaWxlLmluCi0t
LSBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KKysrIGIvZG9tL3NyYy9qc3VybC9NYWtlZmls
ZS5pbgpAQCAtNTcsMTYgKzU3LDE3IEBAIFhQSURMU1JDUwk9IFwKIENQUFNSQ1MJCT0gbnNKU1By
b3RvY29sSGFuZGxlci5jcHAKIAogRVhQT1JUUwkJPSAkKHNyY2RpcikvbnNKU1Byb3RvY29sSGFu
ZGxlci5oCiAKIExPQ0FMX0lOQ0xVREVTICs9IFwKIAkJLUkkKHNyY2RpcikgXAogCQktSSQodG9w
c3JjZGlyKS9kb20vYmFzZSBcCiAJCS1JJCh0b3BzcmNkaXIpL25ldHdlcmsvYmFzZS9zcmMgXAor
CQktSSQodG9wc3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKIAogaWZkZWYgQlVJTERfREVCVUdf
R0MKIERFRklORVMJCSs9IC1EREVCVUdfR0MKIGVuZGlmCiAKIERJUlMgICAgICAgICAgICA9ICQo
TlVMTCkKIFRFU1RfRElSUyArPSB0ZXN0CiAKZGlmZiAtLWdpdCBhL2RvbS9zcmMvanN1cmwvbnNK
U1Byb3RvY29sSGFuZGxlci5jcHAgYi9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIu
Y3BwCi0tLSBhL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAKKysrIGIvZG9t
L3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcApAQCAtNzQsMTYgKzc0LDE3IEBACiAj
aW5jbHVkZSAibnNUaHJlYWRVdGlscy5oIgogI2luY2x1ZGUgIm5zSUpTQ29udGV4dFN0YWNrLmgi
CiAjaW5jbHVkZSAibnNJU2NyaXB0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIm5zSURvY3VtZW50Lmgi
CiAjaW5jbHVkZSAibnNJT2JqZWN0SW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lPYmplY3RP
dXRwdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lXcml0YWJsZVByb3BlcnR5QmFnMi5oIgogI2lu
Y2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZs
YWdzLmgiCiAKIHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtKU1VSSUNJRCwgTlNfSlNVUklfQ0lEKTsK
IAogY2xhc3MgbnNKU1RodW5rIDogcHVibGljIG5zSUlucHV0U3RyZWFtCiB7CiBwdWJsaWM6CiAg
ICAgbnNKU1RodW5rKCk7CiAKQEAgLTIyMCwxNiArMjIxLDI4IEBAIG5zcmVzdWx0IG5zSlNUaHVu
azo6RXZhbHVhdGVTY3JpcHQobnNJQ2gKICAgICAvLyBHZXQgdGhlIGdsb2JhbCBvYmplY3Qgd2Ug
c2hvdWxkIGJlIHJ1bm5pbmcgb24uCiAgICAgbnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBnbG9iYWwg
PSBHZXRHbG9iYWxPYmplY3QoYUNoYW5uZWwpOwogICAgIGlmICghZ2xvYmFsKSB7CiAgICAgICAg
IHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAogICAgIG5zQ09NUHRyPG5zUElET01X
aW5kb3c+IHdpbihkb19RdWVyeUludGVyZmFjZShnbG9iYWwpKTsKIAorICAgIC8vIFNhbmRib3hl
ZCBkb2N1bWVudCBjaGVjazogamF2YXNjcmlwdDogVVJJJ3MgYXJlIGRpc2FibGVkCisgICAgLy8g
aW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgdW5sZXNzICdhbGxvdy1zY3JpcHRzJyB3YXMgc3BlY2lm
aWVkCisKKyAgICAvLyBSRVZJRVcgLSBpdCBzZWVtcyBsaWtlIHRoZSBvcmlnaW5hbCBpbm5lciB3
aW5kb3cgd291bGQgYmUgdGhlIG9uZQorICAgIC8vIHRoYXQgd2lsbCBleGVjdXRlIHRoZSBqYXZh
c2NyaXB0IHdpdGggaXRzIHByaW5jaXBhbCAtIGlzIHRoaXMKKyAgICAvLyBhc3N1bXB0aW9uIGNv
cnJlY3QgPz8gKGFuZCBpcyBHZXRFeHRhbnREb2N1bWVudCgpIHRoZSByaWdodCB3YXkKKyAgICAv
LyB0byBnZXQgdGhlIHJpZ2h0IGRvY3VtZW50ID8/CisgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+
IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFPcmlnaW5hbElubmVyV2luZG93LT5HZXRFeHRhbnRE
b2N1bWVudCgpKTsKKyAgICBpZiAoZG9jICYmIChkb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJP
WEVEX1NDUklQVFMpKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1JFVFZBTF9VTkRFRklO
RUQ7CisgICAgfQorCiAgICAgLy8gUHVzaCBvdXIgcG9wdXAgY29udHJvbCBzdGF0ZQogICAgIG5z
QXV0b1BvcHVwU3RhdGVQdXNoZXIgcG9wdXBTdGF0ZVB1c2hlcih3aW4sIGFQb3B1cFN0YXRlKTsK
IAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHRoZSBzYW1lIGlubmVyIHdpbmRvdyBh
cyB3ZSB1c2VkIHRvLgogICAgIG5zUElET01XaW5kb3cgKmlubmVyV2luID0gd2luLT5HZXRDdXJy
ZW50SW5uZXJXaW5kb3coKTsKIAogICAgIGlmIChpbm5lcldpbiAhPSBhT3JpZ2luYWxJbm5lcldp
bmRvdykgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfVU5FWFBFQ1RFRDsKZGlmZiAtLWdpdCBh
L2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluIGIvZW1i
ZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4KLS0tIGEvZW1i
ZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4KKysrIGIvZW1i
ZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4KQEAgLTU2LDEx
ICs1NiwxMiBAQCBDUFBTUkNTCQkrPSBuc0RpYWxvZ1BhcmFtQmxvY2suY3BwIFwKIAkJICAgJChO
VUxMKQogZW5kaWYKIAogIyB3ZSBkb24ndCB3YW50IHRoZSBzaGFyZWQgbGliLCBidXQgd2Ugd2Fu
dCB0byBmb3JjZSB0aGUgY3JlYXRpb24gb2YgYQogIyBzdGF0aWMgbGliLgogRk9SQ0VfU1RBVElD
X0xJQiA9IDEKIAogIyBGb3IgbnNKU1V0aWxzCi1MT0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3Jj
ZGlyKS9kb20vYmFzZQorTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2Ug
XAorCQkgIC1JJCh0b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9zcmMgXAogCiBpbmNsdWRlICQodG9w
c3JjZGlyKS9jb25maWcvcnVsZXMubWsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRz
L3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAgYi9lbWJlZGRpbmcvY29tcG9u
ZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCi0tLSBhL2VtYmVkZGlu
Zy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKKysrIGIv
ZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNw
cApAQCAtODYsMTYgKzg2LDE3IEBACiAjaW5jbHVkZSAibnNQSURPTVN0b3JhZ2UuaCIKICNpbmNs
dWRlICJuc0lXaWRnZXQuaCIKICNpbmNsdWRlICJuc0ZvY3VzTWFuYWdlci5oIgogI2luY2x1ZGUg
Im5zSVByZXNTaGVsbC5oIgogI2luY2x1ZGUgIm5zUHJlc0NvbnRleHQuaCIKICNpbmNsdWRlICJu
c0NvbnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zSVByZWZCcmFuY2guaCIKICNpbmNsdWRlICJu
c0lQcmVmU2VydmljZS5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpZmRlZiBV
U0VXRUFLUkVGUwogI2luY2x1ZGUgIm5zSVdlYWtSZWZlcmVuY2UuaCIKICNlbmRpZgogCiB1c2lu
ZyBuYW1lc3BhY2UgbW96aWxsYTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNKU1N0YWNrQ29udHJh
Y3RJRD0iQG1vemlsbGEub3JnL2pzL3hwYy9Db250ZXh0U3RhY2s7MSI7CkBAIC02MDMsMTYgKzYw
NCwzMyBAQCBuc1dpbmRvd1dhdGNoZXI6Ok9wZW5XaW5kb3dKU0ludGVybmFsKG5zCiAgIH0KIAog
ICBpZiAoIW5ld0RvY1NoZWxsSXRlbSkgewogICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGVpdGhlciBv
cGVuIHVwIGEgbmV3IHdpbmRvdyBvdXJzZWx2ZXMgb3IgYXNrIGEKICAgICAvLyBuc0lXaW5kb3dQ
cm92aWRlciBmb3Igb25lLiAgSW4gZWl0aGVyIGNhc2UsIHdlJ2xsIHdhbnQgdG8gc2V0IHRoZSBy
aWdodAogICAgIC8vIG5hbWUgb24gaXQuCiAgICAgd2luZG93TmVlZHNOYW1lID0gdHJ1ZTsKIAor
ICAgIC8vIElmIHRoZSBwYXJlbnQgdHJ5aW5nIHRvIG9wZW4gYSBuZXcgd2luZG93IGlzIHNhbmRi
b3hlZCwKKyAgICAvLyB0aGlzIGlzIG5vdCBhbGxvd2VkIGFuZCB3ZSBmYWlsIGhlcmUuCisgICAg
aWYgKGFQYXJlbnQpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURPTURvY3VtZW50PiBkb21kb2M7Cisg
ICAgICBhUGFyZW50LT5HZXREb2N1bWVudChnZXR0ZXJfQWRkUmVmcyhkb21kb2MpKTsKKyAgICAg
IG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19RdWVyeUludGVyZmFjZShkb21kb2MpOwor
CisgICAgICBpZiAoZG9jKSB7CisgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7Cisg
ICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisKKyAgICAgICAgaWYg
KHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgcmV0dXJu
IE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKICAgICAvLyBO
b3cgY2hlY2sgd2hldGhlciBpdCdzIG9rIHRvIGFzayBhIHdpbmRvdyBwcm92aWRlciBmb3IgYSB3
aW5kb3cuICBEb24ndAogICAgIC8vIGRvIGl0IGlmIHdlJ3JlIG9wZW5pbmcgYSBkaWFsb2cgb3Ig
aWYgb3VyIHBhcmVudCBpcyBhIGNocm9tZSB3aW5kb3cgb3IKICAgICAvLyBpZiB3ZSdyZSBvcGVu
aW5nIHNvbWV0aGluZyB0aGF0IGhhcyBtb2RhbCwgZGlhbG9nLCBvciBjaHJvbWUgZmxhZ3Mgc2V0
LgogICAgIG5zQ09NUHRyPG5zSURPTUNocm9tZVdpbmRvdz4gY2hyb21lV2luID0gZG9fUXVlcnlJ
bnRlcmZhY2UoYVBhcmVudCk7CiAgICAgaWYgKCFhRGlhbG9nICYmICFjaHJvbWVXaW4gJiYKICAg
ICAgICAgIShjaHJvbWVGbGFncyAmIChuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfTU9EQUwg
ICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6
Q0hST01FX09QRU5BU19ESUFMT0cgfCAKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJC
cm93c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0NIUk9NRSkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>616024</attachid>
            <date>2012-04-17 23:12:29 -0700</date>
            <delta_ts>2012-04-19 10:38:34 -0700</delta_ts>
            <desc>iframe sandbox tests - general v4</desc>
            <filename>iframe_sandbox_tests_general</filename>
            <type>text/plain</type>
            <size>17559</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOWI4NWE5YjE1NTA3NDFiYmQyMjRmZTdkZDU3
ZDQ5N2Y5YjQzZGM2YQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KQEAgLTI5NiwxNiArMjk2LDI3IEBAIF9URVNUX0ZJTEVTID0gXAogCQlmaWxlX2Z1bGxz
Y3JlZW4tc3ZnLWVsZW1lbnQuaHRtbCBcCiAJCXRlc3RfbGlfYXR0cmlidXRlc19yZWZsZWN0aW9u
Lmh0bWwgXAogCQl0ZXN0X29sX2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9i
dWc2NTE5NTYuaHRtbCBcCiAJCXRlc3RfYnVnNjk0NTAzLmh0bWwgXAogCQl0ZXN0X29iamVjdF9w
bHVnaW5fbmF2Lmh0bWwgXAogCQl0ZXN0X2J1Zzc0MjAzMC5odG1sIFwKIAkJdGVzdF9idWc3NDI1
NDkuaHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sIFwKKwkJZmlsZV9p
ZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5o
dG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIFwKKwkJZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmNC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX2ZhaWwuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3Nh
bmRib3hfZm9ybV9wYXNzLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93
X2ZhaWwuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcyBcCisJCWZpbGVfaWZy
YW1lX3NhbmRib3hfZmFpbC5qcyBcCiAJCSQoTlVMTCkKIAogX0JST1dTRVJfVEVTVF9GSUxFUyA9
IFwKIAkJYnJvd3Nlcl9idWc2NDk3NzguanMgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sIFwKIAkJ
ZmlsZV9idWc2NDk3NzguaHRtbF5oZWFkZXJzXiBcCiAJCSQoTlVMTCkKIApkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sCkBAIC0wLDAgKzEsNDAg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRm
LTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMi
Pjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVm
PSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5k
b3cudG9wLnBvc3RNZXNzYWdlKHtvazogcmVzdWx0LCBkZXNjOiBkZXNjfSwgIioiKTsKKyAgfQor
CisgIGZ1bmN0aW9uIGRvU3VibWl0KCkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdh
X2Zvcm0nKS5zdWJtaXQoKTsKKyAgfQorCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgb2so
dHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBh
YmxlIHRvIHJ1biBpbmxpbmUgc2NyaXB0cyIpOworCisgICAgLy8gc2hvdWxkIG5vdCBiZSBhbGxv
d2VkIC0gZG9uJ3QgaGF2ZSBhbGxvdy1mb3JtcworICAgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidj
bGljayd9LCAnYV9idXR0b24nKTsKKworICAgIC8vIHRyaWdnZXIgdGhlIGphdmFzY3JpcHQ6IHVy
bCB0ZXN0CisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhX2xpbmsnKTsKKyAg
fQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0nZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNzLmpzJz48
L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0nb2sodHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0
aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1biBzY3JpcHQgZnJvbSBldmVudCBs
aXN0ZW5lcnMiKTtkb1N0dWZmKCk7Jz4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93
LXNjcmlwdHMiCisKKyAgPGZvcm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iZmlsZV9pZnJhbWVfc2Fu
ZGJveF9mb3JtX3Bhc3MuaHRtbCIgaWQ9ImFfZm9ybSI+CisgICAgRmlyc3QgbmFtZTogPGlucHV0
IHR5cGU9InRleHQiIG5hbWU9ImZpcnN0bmFtZSI+CisgICAgTGFzdCBuYW1lOiA8aW5wdXQgdHlw
ZT0idGV4dCIgbmFtZT0ibGFzdG5hbWUiPgorICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG9uY2xp
Y2s9ImRvU3VibWl0KCkiIGlkPSJhX2J1dHRvbiI+CisgIDwvZm9ybT4KKworICA8YSBocmVmID0g
J2phdmFzY3JpcHQ6b2sodHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3Jp
cHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1biBzY3JpcHQgZnJvbSBqYXZhc2NyaXB0OiBVUkxzIik7
JyBpZD0nYV9saW5rJz5jbGljayBtZTwvYT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1s
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbApAQCAtMCwwICsxLDIy
IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0
Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9
InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0
LmNzcyIvPgorCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1
bmN0aW9uIG9rKHJlc3VsdCwgZGVzYykgeworICAgIHdpbmRvdy50b3AucG9zdE1lc3NhZ2Uoe29r
OiByZXN1bHQsIGRlc2M6IG1lc3NhZ2V9LCAiKiIpOworICB9CisKKyAgZnVuY3Rpb24gZG9TdHVm
ZigpIHsKKyAgICBvayhmYWxzZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgV0lUSE9VVCBhbGxvdy1z
Y3JpcHRzIHNob3VsZCBOT1QgYmUgYWJsZSB0byBydW4gaW5saW5lIHNjcmlwdHMiKTsKKyAgfQor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0nZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzJz48L3Nj
cmlwdD4KKzxib2R5IG9uTG9hZD0nd2luZG93LnRvcC5wb3N0bWVzc2FnZSh7b2s6IGZhbHNlLCBk
ZXNjOiAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMgc2hvdWxkIGJlIGFi
bGUgdG8gcnVuIHNjcmlwdCBmcm9tIGphdmFzY3JpcHQ6IFVSTHMifSwgIioiKTtkb1N0dWZmKCk7
Jz4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCBubyBwZXJtaXNzaW9ucworPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2NfaWYzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfY19pZjMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1s
CkBAIC0wLDAgKzEsMjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+
CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0
L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9
InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorCis8L2hlYWQ+
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIGRvU3VibWl0KCkg
eworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhX2Zvcm0nKS5zdWJtaXQoKTsKKyAgfQor
CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgLy8gdHJ5IGFuZCBzdWJtaXQgdGhlIGZvcm0g
LSB0aGlzIHNob3VsZCBzdWNjZWVkCisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30s
ICdhX2J1dHRvbicpOworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4K
KyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ctZm9ybXMiCisK
KyAgPGZvcm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX3Bh
c3MuaHRtbCIgaWQ9ImFfZm9ybSI+CisgICAgRmlyc3QgbmFtZTogPGlucHV0IHR5cGU9InRleHQi
IG5hbWU9ImZpcnN0bmFtZSI+CisgICAgTGFzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFt
ZT0ibGFzdG5hbWUiPgorICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG9uY2xpY2s9ImRvU3VibWl0
KCkiIGlkPSJhX2J1dHRvbiI+CisgIDwvZm9ybT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5o
dG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbApAQCAtMCwwICsx
LDQyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxz
LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIg
aHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKworPC9oZWFkPgorPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2MpIHsKKyAg
ICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKTsKKyAgfQorCisgIGZ1bmN0
aW9uIGRvU3R1ZmYoKSB7CisgICAgLy8gdHJ5IHRvIG9wZW4gYSBuZXcgd2luZG93IHZpYSB0YXJn
ZXQ9Il9ibGFuayIsIHdpbmRvdy5vcGVuKCksIGFuZCBzaG93TW9kYWxEaWFsb2coKQorICAgIC8v
IHRoZSB3aW5kb3cgd2UgdHJ5IHRvIG9wZW4gY2xvc2VzIGl0c2VsZiBvbmNlIGl0IG9wZW5zCisg
ICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICd0YXJnZXRfYmxhbmsnKTsKKworICAg
IC8vIFJFVklFVyA6IHdpbmRvdy5vcGVuIGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHRocm93cyBh
biBleGNlcHRpb24gOgorICAgIC8vIHNob3VsZCBpdCA/CisgICAgdHJ5IHsKKyAgICAgIHdpbmRv
dy5vcGVuKCJmaWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93X2ZhaWwuaHRtbCIpOworICAg
IH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICBvayh0cnVlLCAid2luZG93Lm9wZW4gdGhyZXcgYSBK
UyBleGNlcHRpb24gYW5kIHdhcyBub3QgYWxsb3dlZCIpOworICAgIH0KKworICAgIC8vIFJFVklF
VyA6IHdpbmRvdy5zaG93TW9kYWxEaWFsb2cgaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgdGhyb3dz
IGFuIGV4Y2VwdGlvbiA6CisgICAgLy8gc2hvdWxkIGl0ID8KKyAgICB0cnkgeworICAgICAgd2lu
ZG93LnNob3dNb2RhbERpYWxvZygiZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWls
Lmh0bWwiKTsKKyAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICBvayh0cnVlLCAid2luZG93LnNo
b3dNb2RhbERpYWxvZyB0aHJldyBhIEpTIGV4Y2VwdGlvbiBhbmQgd2FzIG5vdCBhbGxvd2VkIik7
CisgICAgfQorICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBh
bSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4iCisK
KyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWlsLmh0bWwiIHRh
cmdldD0iX2JsYW5rIiBpZD0idGFyZ2V0X2JsYW5rIj5vcGVuIHdpbmRvdzwvYT4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9jX2lmNS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19p
ZjUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8
L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2lt
cGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKwor
PC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhy
ZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVzdWx0LCBkZXNj
KTsKKyAgfQorPC9zY3JpcHQ+Cis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgYW0gc2Fu
ZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zYW1lLW9yaWdpbiIKKworICA8YSBocmVmID0gJ2phdmFz
Y3JpcHQ6b2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2NyaXB0
cyBzaG91bGQgbm90IGJlIGFibGUgdG8gcnVuIHNjcmlwdCB3aXRoIGphdmFzY3JpcHQ6IFVSTHMi
KTsnIGlkPSdhX2xpbmsnPmNsaWNrIG1lPC9hPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZmFpbC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzCkBAIC0wLDAgKzEsMSBAQAorb2so
ZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0cyBzaG91bGQgTk9U
IGJlIGFibGUgdG8gcnVuIDxzY3JpcHQgc3JjPS4uLj4iKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfZm9ybV9mYWlsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZm9ybV9mYWlsLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBC
dWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0
IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0PgorICA8bGlu
ayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVz
dC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkg
c2hvdWxkIE5PVCBiZSBsb2FkZWQgYnkgYSBmb3JtIHN1Ym1pdCBmcm9tIGEgc2FuZGJveCB3aXRo
b3V0ICdhbGxvdy1mb3JtcycKKzwvYm9keT4KKzwvaHRtbD4KKworPHNjcmlwdD4KKyAgZnVuY3Rp
b24gZG9TdHVmZigpIHsKKyAgICB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKHtvazogZmFsc2UsIGRl
c2M6ICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctZm9ybXMgc2hvdWxkIE5PVCBi
ZSBhYmxlIHRvIHN1Ym1pdCBmb3JtcyJ9LCAiKiIpOworICB9Cis8L3NjcmlwdD4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlv
bi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2Ny
aXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVz
dHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1
ZmYoKSI+CisgIEkgc2hvdWxkIGJlIGxvYWRlZCBieSBhIGZvcm0gc3VibWl0IGZyb20gYSBzYW5k
Ym94IHdpdGggJ2FsbG93LWZvcm1zJworPC9ib2R5PgorPC9odG1sPgorCis8c2NyaXB0PgorICBm
dW5jdGlvbiBkb1N0dWZmKCkgeworICAgIHdpbmRvdy50b3AucG9zdE1lc3NhZ2Uoe29rOiB0cnVl
LCBkZXNjOiAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LWZvcm1zIHNob3VsZCBiZSBh
YmxlIHRvIHN1Ym1pdCBmb3JtcyJ9LCAiKiIpOworICB9Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93X2ZhaWwuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWlsLmh0bWwKQEAgLTAsMCAr
MSwyMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0
PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlw
dCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1Np
bXBsZVRlc3QuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRl
eHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8
Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgc2hvdWxkIE5PVCBiZSBvcGVuZWQgYnkgYSBz
YW5kYm94ZWQgaWZyYW1lIHZpYSBhbnkgbWV0aG9kCis8L2JvZHk+Cis8L2h0bWw+CisKKzxzY3Jp
cHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgY29uc29sZS5sb2coImZpbGVfaWZyYW1l
X3NhbmRib3hfd2luZG93X29wZW5fZmFpbC5odG1sIik7CisgICAgd2luZG93Lm9wZW5lci5vayhm
YWxzZSwgInNhbmRib3hlZCBkb2N1bWVudHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIG9wZW4gd2lu
ZG93cyIpOworICAgIHNlbGYuY2xvc2UoKTsKKyAgfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X3Bhc3MuanMgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfcGFzcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxs
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNz
LmpzCkBAIC0wLDAgKzEsMSBAQAorb2sodHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aCBh
bGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1biA8c2NyaXB0IHNyYz0uLi4+Iik7Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rl
c3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sCkBAIC0wLDAgKzEsMTM5IEBACis8IURPQ1RZ
UEUgSFRNTD4NCis8aHRtbD4NCis8IS0tDQoraHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRl
IGZvciBJRlJBTUVzIC0gZ2VuZXJhbCB0ZXN0cw0KKy0tPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAg
PHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVU
ZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0Pg0KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+DQor
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2lt
cGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9u
L2phdmFzY3JpcHQiPg0KKy8qKiBUZXN0IGZvciBCdWcgMzQxNjA0IC0gSW1wbGVtZW50IEhUTUw1
IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzIC0gZ2VuZXJhbCB0ZXN0cyAqKi8NCisNCisv
LyBhIHBvc3RNZXNzYWdlIGhhbmRsZXIgdGhhdCBpcyB1c2VkIGJ5IHNhbmRib3hlZCBpZnJhbWVz
IHdpdGhvdXQNCisvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIHRvIGNvbW11bmljYXRlIHBhc3MvZmFp
bCBiYWNrIHRvIHRoaXMgbWFpbiBwYWdlLg0KKy8vIGl0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdp
dGggYW4gb2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNjOg0KKy8vIDxkZXNjcmlwdGlv
biBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0byBvaygpDQord2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOw0KKw0KK2Z1
bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KQ0KK3sNCisgIG9rX3dyYXBwZXIoZXZlbnQuZGF0
YS5vaywgZXZlbnQuZGF0YS5kZXNjKTsNCit9DQorDQordmFyIGNvbXBsZXRlZFRlc3RzID0gMDsN
Cit2YXIgcGFzc2VkVGVzdHMgPSAwOw0KKw0KK2Z1bmN0aW9uIG9rX3dyYXBwZXIocmVzdWx0LCBk
ZXNjKSB7DQorICBvayhyZXN1bHQsIGRlc2MpOw0KKw0KKyAgY29tcGxldGVkVGVzdHMrKzsNCisN
CisgIGlmIChyZXN1bHQpIHsNCisgICAgcGFzc2VkVGVzdHMrKzsNCisgIH0NCisNCisgIC8vY29u
c29sZS5sb2coIkNPTVBMRVRFRCA6ICIgKyBjb21wbGV0ZWRUZXN0cyArICIgUEFTU0VEIDogIiAr
IHBhc3NlZFRlc3RzKTsNCisgIC8vY29uc29sZS5sb2coIlJFU1VMVCA6ICIgKyByZXN1bHQgKyAi
IERFU0MgOiAiICsgZGVzYyk7DQorDQorICAvLyBSRVZJRVcgOiBpZiBvbmUgb2YgdGhlc2UgdGVz
dHMgZmFpbHMgYW5kIHRoaXMgaXNuJ3QgY2FsbGVkDQorICAvLyB0aGlzIG1lYW5zIHRoaXMgdGVz
dCB3aWxsIGhhbmcgdW50aWwgdGhlIHRpbWUgb3V0IGhhcHBlbnMgOigNCisgIC8vIGFkdmljZSBv
biBiZXR0ZXIgd2F5cyB0byBzeW5jaHJvbml6ZSB0aGluZ3MgYXBwcmVjaWF0ZWQgIQ0KKyAgaWYg
KGNvbXBsZXRlZFRlc3RzID09IDkpIHsNCisgICAgb2socGFzc2VkVGVzdHMgPT0gOSwgIlRoZXJl
IGFyZSA5IGdlbmVyYWwgdGVzdHMgdGhhdCBzaG91bGQgcGFzcyIpOw0KKyAgICBTaW1wbGVUZXN0
LmZpbmlzaCgpOw0KKyAgfQ0KK30NCisNCitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICBTaW1wbGVU
ZXN0LndhaXRGb3JFeHBsaWNpdEZpbmlzaCgpOw0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisg
IC8vIDEpIHRlc3QgdGhhdCBpbmxpbmUgc2NyaXB0cyAoPHNjcmlwdD4pIGNhbiBydW4gaW4gYW4g
aWZyYW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmls
ZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQor
DQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMikgdGVzdCB0aGF0IDxzY3JpcHQgc3JjPS4u
Lj4gY2FuIHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlwdHMiDQor
ICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwgd2hpY2ggaGFzICdh
bGxvdy1zY3JpcHRzJykNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAzKSB0ZXN0IHRo
YXQgc2NyaXB0IGluIGFuIGV2ZW50IGxpc3RlbmVyIChvbmxvYWQpIGNhbiBydW4gaW4gYW4gaWZy
YW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9p
ZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQorDQor
ICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gNCkgdGVzdCB0aGF0IHNjcmlwdCBpbiBhbiBqYXZh
c2NyaXB0OnVybCBjYW4gcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2Ny
aXB0cyINCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3aGlj
aCBoYXMgJ2FsbG93LXNjcmlwdHMnKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA1KSB0
ZXN0IHRoYXQgaW5saW5lIHNjcmlwdHMgY2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVk
IHdpdGhvdXQgImFsbG93LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5k
Ym94X2NfaWYyLmh0bWwgd2hpY2ggaGFzIHNhbmRib3g9JycpDQorDQorICAvLyBmYWlscyBpZiBi
YWQNCisgIC8vIDYpIHRlc3QgdGhhdCA8c2NyaXB0IHNyYz0uLi4+IGNhbm5vdCBydW4gaW4gYW4g
aWZyYW1lIHNhbmRib3hlZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4g
ZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94PScnKQ0KKw0K
KyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA3KSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFuIGV2ZW50
IGxpc3RlbmVyIChvbmxvYWQpIGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRo
b3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9j
X2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94PScnKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQor
ICAvLyA4KSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFuIGphdmFzY3JpcHQ6dXJsIGNhbm5vdCBydW4g
aW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRv
bmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmXzUuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0n
YWxsb3ctc2FtZS1vcmlnaW4nKQ0KKyAgdmFyIGlmX3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnaWZfNScpLmNvbnRlbnRXaW5kb3c7DQorICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2sn
fSwgJ2FfbGluaycsIGlmX3cpOw0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDcpIHRl
c3QgdGhhdCBhIG5ldyBpZnJhbWUgaGFzIHNhbmRib3ggYXR0cmlidXRlDQorICB2YXIgaWZyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7DQorICBva193cmFwcGVyKCJzYW5kYm94
IiBpbiBpZnIsICJhIG5ldyBpZnJhbWUgc2hvdWxkIGhhdmUgYSBzYW5kYm94IGF0dHJpYnV0ZSIp
Ow0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDgpIHRlc3QgdGhhdCB0aGUgc2FuZGJv
eCBhdHRyaWJ1dGUncyBkZWZhdWx0IHZhbHVlIGlzIGFuIGVtcHR5IHN0cmluZw0KKyAgb2tfd3Jh
cHBlcihpZnIuc2FuZGJveCA9PT0gIiIsICJkZWZhdWx0IHNhbmRib3ggYXR0cmlidXRlIHNob3Vs
ZCBiZSBhbiBlbXB0eSBzdHJpbmciKTsNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyA5
KSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGggJ2FsbG93LWZvcm1zJyBjYW4gc3Vi
bWl0IGZvcm1zDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwg
d2hpY2ggaGFzICdhbGxvdy1mb3JtcycgYW5kICdhbGxvdy1zY3JpcHRzJykNCisNCisgIC8vIGZh
aWxzIGlmIGJhZA0KKyAgLy8gMTApIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aG91
dCAnYWxsb3ctZm9ybXMnIGNhbiBOT1Qgc3VibWl0IGZvcm1zDQorICAvLyAoZG9uZSBpbiBmaWxl
X2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwgd2hpY2ggb25seSBoYXMgJ2FsbG93LXNjcmlwdHMn
KQ0KKw0KKyAgLy8gUkVWSUVXIDogYXJlIHRoZXJlIG90aGVyIHdheXMgb2Ygb3BlbmluZyBuZXcg
d2luZG93cyB0aGFuIHRoZSAzIGJlbG93IHRoYXQgYXJlIG1lbnRpb25lZCBpbiB0aGUgSFRNTDUN
CisgIC8vIHNwZWMgPw0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyAxMSkgdGVzdCB0aGF0
IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdpbmRvdyB1c2luZyB0aGUgdGFy
Z2V0LmF0dHJpYnV0ZQ0KKyAgLy8gdGhpcyBpcyBkb25lIHZpYSBmaWxlX2lmcmFtZV9jX2lmNC5o
dG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIiBhbmQgImFsbG93LXNh
bWUtb3JpZ2luIg0KKyAgLy8gdGhlIHdpbmRvdyBpdCBhdHRlbXB0cyB0byBvcGVuIGNhbGxzIHdp
bmRvdy5vcGVuZXIub2soZmFsc2UsIC4uLikgYW5kIGZpbGVfaWZyYW1lX2NfaWY0Lmh0bWwgaGFz
IGFuIG9rKCkNCisgIC8vIGZ1bmN0aW9uIHRoYXQgY2FsbHMgd2luZG93LnBhcmVudC5va193cmFw
cGVyDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMTIpIHRlc3QgdGhhdCBhIHNhbmRi
b3hlZCBpZnJhbWUgY2FuJ3Qgb3BlbiBhIG5ldyB3aW5kb3cgdXNpbmcgd2luZG93Lm9wZW4NCisg
IC8vIHRoaXMgaXMgZG9uZSB2aWEgZmlsZV9pZnJhbWVfY19pZjQuaHRtbCB3aGljaCBpcyBzYW5k
Ym94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYW5kICJhbGxvdy1zYW1lLW9yaWdpbiINCisgIC8v
IHRoZSB3aW5kb3cgaXQgYXR0ZW1wdHMgdG8gb3BlbiBjYWxscyB3aW5kb3cub3BlbmVyLm9rKGZh
bHNlLCAuLi4pIGFuZCBmaWxlX2lmcmFtZV9jX2lmNC5odG1sIGhhcyBhbiBvaygpDQorICAvLyBm
dW5jdGlvbiB0aGF0IGNhbGxzIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcg0KKw0KKyAgLy8gcGFz
c2VzIGlmIGdvb2QNCisgIC8vIDEzKSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNhbid0
IG9wZW4gYSBuZXcgd2luZG93IHVzaW5nIHdpbmRvdy5TaG93TW9kYWxEaWFsb2cNCisgIC8vIHRo
aXMgaXMgZG9uZSB2aWEgZmlsZV9pZnJhbWVfY19pZjQuaHRtbCB3aGljaCBpcyBzYW5kYm94ZWQg
d2l0aCAiYWxsb3ctc2NyaXB0cyIgYW5kICJhbGxvdy1zYW1lLW9yaWdpbiINCisgIC8vIHRoZSB3
aW5kb3cgaXQgYXR0ZW1wdHMgdG8gb3BlbiBjYWxscyB3aW5kb3cub3BlbmVyLm9rKGZhbHNlLCAu
Li4pIGFuZCBmaWxlX2lmcmFtZV9jX2lmNC5odG1sIGhhcyBhbiBvaygpDQorICAvLyBmdW5jdGlv
biB0aGF0IGNhbGxzIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcg0KK30NCis8L3NjcmlwdD4NCis8
Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4NCis8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6
Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0Ij5Nb3ppbGxhIEJ1
ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJB
TUVzDQorPHAgaWQ9ImRpc3BsYXkiPjwvcD4NCis8ZGl2IGlkPSJjb250ZW50Ij4NCis8aWZyYW1l
IHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXNjcmlwdHMiIGlkPSJpZl8xIiBzcmM9
ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48
L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9IiIgaWQ9ImlmXzIiIHNyYz0iZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxp
ZnJhbWUgc2FuZGJveD0iYWxsb3ctZm9ybXMgYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzMiIHNyYz0i
ZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwv
aWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0
cyIgaWQ9ImlmXzQiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5odG1sIiBoZWlnaHQ9
IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1v
cmlnaW4iIGlkPSJpZl81IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjUuaHRtbCIgaGVp
Z2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8L2Rpdj4NCis8L2JvZHk+DQorPC9odG1s
Pg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>616395</attachid>
            <date>2012-04-18 18:11:10 -0700</date>
            <delta_ts>2012-05-04 15:46:29 -0700</delta_ts>
            <desc>iframe sandbox test - workers</desc>
            <filename>iframe_sandbox_tests_workers</filename>
            <type>text/plain</type>
            <size>6748</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZDAwOGU1NTdjMWMyNDc4Yzc3ZDk3NjU4ZDI5
NTNlN2JiNGUzYmEyMwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSB3b3JrZXJzCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yOTYsMTYgKzI5NiwxOSBA
QCBfVEVTVF9GSUxFUyA9IFwKIAkJZmlsZV9mdWxsc2NyZWVuLXN2Zy1lbGVtZW50Lmh0bWwgXAog
CQl0ZXN0X2xpX2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9vbF9hdHRyaWJ1
dGVzX3JlZmxlY3Rpb24uaHRtbCBcCiAJCXRlc3RfYnVnNjUxOTU2Lmh0bWwgXAogCQl0ZXN0X2J1
ZzY5NDUwMy5odG1sIFwKIAkJdGVzdF9vYmplY3RfcGx1Z2luX25hdi5odG1sIFwKIAkJdGVzdF9i
dWc3NDIwMzAuaHRtbCBcCiAJCXRlc3RfYnVnNzQyNTQ5Lmh0bWwgXAorCQl0ZXN0X2lmcmFtZV9z
YW5kYm94X3dvcmtlcnMuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZ19pZjEuaHRtbCBc
CisJCWZpbGVfaWZyYW1lX3NhbmRib3hfd29ya2VyLmpzIFwKIAkJJChOVUxMKQogCiBfQlJPV1NF
Ul9URVNUX0ZJTEVTID0gXAogCQlicm93c2VyX2J1ZzY0OTc3OC5qcyBcCiAJCWZpbGVfYnVnNjQ5
Nzc4Lmh0bWwgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sXmhlYWRlcnNeIFwKIAkJJChOVUxMKQog
CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZ19pZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9nX2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2dfaWYxLmh0bWwK
QEAgLTAsMCArMSw2MSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4K
KyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3Qv
RXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0i
dGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVz
YykgeworICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiByZXN1bHQsIGRlc2M6IGRl
c2N9LCAiKiIpOworICB9CisKKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICAvLyB0ZXN0IGRh
dGEgVVJJCisKKyAgICAvLyBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
Ly8gICBzZWxmLnBvc3RNZXNzYWdlKCdtYWtlIGl0IHNvJyk7CisgICAgLy8gfTsKKyAgICB2YXIg
ZGF0YV91cmwgPSAiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGMyVnNaaTV2
Ym0xbGMzTmhaMlVnUFNCbWRXNWpkR2x2YmlobGRtVnVkQ2tnZXlBZ0RRb2dJQ0FnYzJWc1ppNXdi
M04wVFdWemMyRm5aU2duYldGclpTQnBkQ0J6YnljcE95QWdEUXA5T3c9PSI7CisgICAgdmFyIHdv
cmtlcl9kYXRhID0gbmV3IFdvcmtlcihkYXRhX3VybCk7CisgICAgd29ya2VyX2RhdGEuYWRkRXZl
bnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICBvayh0cnVlLCAi
YSB3b3JrZXIgaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgc2hvdWxkIGJlIGFibGUgdG8gYmUgbG9h
ZGVkIGZyb20gYSBkYXRhOiBVUkkiKTsKKyAgICB9LCBmYWxzZSk7CisKKyAgICB3b3JrZXJfZGF0
YS5wb3N0TWVzc2FnZSgiZW5nYWdlISIpOworCisgICAgLy8gdGVzdCBhIGJsb2IgVVJJIHdlIGNy
ZWF0ZWQgKHdpbGwgaGF2ZSB0aGUgc2FtZSBudWxsIHByaW5jaXBhbAorICAgIC8vIGFzIHVzCisg
ICAgdmFyIGIgPSBuZXcgQmxvYihbIm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7IHNlbGYu
cG9zdE1lc3NhZ2UoJ21ha2UgaXQgc28nKTt9OyJdKTsKKworICAgIHZhciBibG9iVVJMID0gVVJM
LmNyZWF0ZU9iamVjdFVSTChiKTsKKworICAgIHZhciB3b3JrZXJfYmxvYiA9IG5ldyBXb3JrZXIo
YmxvYlVSTCk7CisKKyAgICB3b3JrZXJfYmxvYi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywg
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIG9rKHRydWUsICJhIHdvcmtlciBpbiBhIHNhbmRib3hl
ZCBkb2N1bWVudCBzaG91bGQgYmUgYWJsZSB0byBiZSBsb2FkZWQgZnJvbSBhIGJsb2IgVVJJICIg
KworICAgICAgICAgImNyZWF0ZWQgYnkgdGhhdCBzYW5kYm94ZWQgZG9jdW1lbnQiKTsKKyAgICB9
LCBmYWxzZSk7CisKKyAgICB3b3JrZXJfYmxvYi5wb3N0TWVzc2FnZSgiZW5nYWdlISIpOworCisg
ICAgLy8gdGVzdCBsb2FkaW5nIHdpdGggcmVsYXRpdmUgdXJsIC0gdGhpcyBzaG91bGQgZmFpbCBz
aW5jZSB3ZSBhcmUKKyAgICAvLyBzYW5kYm94ZWQgYW5kIGhhdmUgYSBudWxsIHByaW5jaXBhbAor
ICAgIHZhciB3b3JrZXJfanMgPSBuZXcgV29ya2VyKCdmaWxlX2lmcmFtZV9zYW5kYm94X3dvcmtl
ci5qcycpOworCisgICAgd29ya2VyX2pzLm9uZXJyb3IgPSBmdW5jdGlvbihlcnJvcikgeworICAg
ICAgb2sodHJ1ZSwgImEgd29ya2VyIGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHNob3VsZCBub3Qg
YmUgYWJsZSB0byBsb2FkIGZyb20gYSByZWxhdGl2ZSBVUkkiKTsKKyAgICB9CisKKyAgICB3b3Jr
ZXJfanMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICBvayhmYWxzZSwgImEgd29ya2VyIGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHNob3VsZCBub3Qg
YmUgYWJsZSB0byBsb2FkIGZyb20gYSByZWxhdGl2ZSBVUkkiKTsKKyAgICB9LCBmYWxzZSk7CisK
KyAgICB3b3JrZXJfanMucG9zdE1lc3NhZ2UoJ2VuZ2FnZScpOworICB9Cis8L3NjcmlwdD4KKzxi
b2R5IG9ubG9hZD0nZG9TdHVmZigpOyc+CisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxv
dy1zY3JpcHRzIgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3dvcmtlci5qcyBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF93b3JrZXIuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfd29ya2VyLmpzCkBAIC0wLDAgKzEsMyBAQAorc2VsZi5vbm1lc3NhZ2Ug
PSBmdW5jdGlvbihldmVudCkgew0KKyAgc2VsZi5wb3N0TWVzc2FnZSgnbWFrZSBpdCBzbycpOw0K
K307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X3dvcmtlcnMuaHRtbCBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF93b3JrZXJzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfd29ya2Vycy5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8IS0tCitodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQKK0ltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0
ZSBmb3IgSUZSQU1FcyAtIHRlc3RzIGZvciB3b3JrZXJzCistLT4KKzxoZWFkPgorICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAg
PHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVU
ZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKyAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBs
ZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2
YXNjcmlwdCI+CisvKiogVGVzdCBmb3IgQnVnIDM0MTYwNCAtIEltcGxlbWVudCBIVE1MNSBzYW5k
Ym94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAtIHRlc3QgZm9yIHdvcmtlcnMgKiovCisKKy8vIGEg
cG9zdE1lc3NhZ2UgaGFuZGxlciB0aGF0IGlzIHVzZWQgYnkgc2FuZGJveGVkIGlmcmFtZXMgd2l0
aG91dAorLy8gJ2FsbG93LXNhbWUtb3JpZ2luJyB0byBjb21tdW5pY2F0ZSBwYXNzL2ZhaWwgYmFj
ayB0byB0aGlzIG1haW4gcGFnZS4KKy8vIGl0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggYW4g
b2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNjOgorLy8gPGRlc2NyaXB0aW9uIG9mIHRo
ZSB0ZXN0PiB3aGljaCBpdCB0aGVuIGZvcndhcmRzIHRvIG9rKCkKK3dpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTsKKworZnVuY3Rpb24gcmVj
ZWl2ZU1lc3NhZ2UoZXZlbnQpCit7CisgIG9rX3dyYXBwZXIoZXZlbnQuZGF0YS5vaywgZXZlbnQu
ZGF0YS5kZXNjKTsKK30KKwordmFyIGNvbXBsZXRlZFRlc3RzID0gMDsKK3ZhciBwYXNzZWRUZXN0
cyA9IDA7CisKK2Z1bmN0aW9uIG9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKSB7CisgIG9rKHJlc3Vs
dCwgZGVzYyk7CisKKyAgY29tcGxldGVkVGVzdHMrKzsKKworICBpZiAocmVzdWx0KSB7CisgICAg
cGFzc2VkVGVzdHMrKzsKKyAgfQorCisgIC8vIFJFVklFVyA6IGlmIG9uZSBvZiB0aGVzZSB0ZXN0
cyBmYWlscyBhbmQgdGhpcyBpc24ndCBjYWxsZWQKKyAgLy8gdGhpcyBtZWFucyB0aGlzIHRlc3Qg
d2lsbCBoYW5nIHVudGlsIHRoZSB0aW1lIG91dCBoYXBwZW5zIDooCisgIC8vIGFkdmljZSBvbiBi
ZXR0ZXIgd2F5cyB0byBzeW5jaHJvbml6ZSB0aGluZ3MgYXBwcmVjaWF0ZWQgIQorICBpZiAoY29t
cGxldGVkVGVzdHMgPT0gMykgeworICAgIG9rKHBhc3NlZFRlc3RzID09IDMsICJUaGVyZSBhcmUg
MiB3b3JrZXIgdGVzdHMgdGhhdCBzaG91bGQgcGFzcyIpOworICAgIFNpbXBsZVRlc3QuZmluaXNo
KCk7CisgIH0KK30KKworZnVuY3Rpb24gZG9UZXN0KCkgeworICBTaW1wbGVUZXN0LndhaXRGb3JF
eHBsaWNpdEZpbmlzaCgpOworCisgIC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDEpIHRlc3QgdGhh
dCBhIHdvcmtlciBpbiBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAnYWxsb3ctc2NyaXB0cycgY2Fu
IGJlIGxvYWRlZAorICAvLyBmcm9tIGEgZGF0YTogVVJJCisgIC8vIChkb25lIGJ5IGZpbGVfaWZy
YW1lX3NhbmRib3hfZ19pZjEuaHRtbCkKKworICAvLyBwYXNzZXMgaWYgZ29vZAorICAvLyAyKSB0
ZXN0IHRoYXQgYSB3b3JrZXIgaW4gYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGggJ2FsbG93LXNjcmlw
dHMnIGNhbiBiZSBsb2FkZWQKKyAgLy8gZnJvbSBhIGJsb2IgVVJJIGNyZWF0ZWQgYnkgdGhlIHNh
bmRib3hlZCBkb2N1bWVudCBpdHNlbGYKKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJv
eF9nX2lmMS5odG1sKQorCisgIC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDMpIHRlc3QgdGhhdCBh
IHdvcmtlciBpbiBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAnYWxsb3ctc2NyaXB0cycgd2l0aG91
dAorICAvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIGNhbm5vdCBsb2FkIGEgc2NyaXB0IHZpYSBhIHJl
bGF0aXZlIFVSSQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2dfaWYxLmh0bWwp
CisKKyAgLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgdGVzdCB3aGVuIGJ1ZyA3MjIxMjYgIkNhbid0
IHRyYW5zZmVyIEZpbGUgb2JqZWN0cworICAvLyB3aXRoIHBvc3RNZXNzYWdlIGNyb3NzIGRvbWFp
biIgaXMgZml4ZWQKKyAgLy8gdGVzdCB0aGF0IGEgd29ya2VyIGluIGEgc2FuZGJveGVkIGlmcmFt
ZSB3aXRoICdhbGxvdy1zY3JpcHRzJyBjYW5ub3QgYmUgbG9hZGVkCisgIC8vIGZyb20gYSBibG9i
IFVSSSBub3QgY3JlYXRlZCBieSB0aGUgc2FuZGJveGVkIGRvY3VtZW50IGl0c2VsZgorfQorPC9z
Y3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKzxhIHRhcmdldD0iX2JsYW5rIiBocmVm
PSJodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1v
emlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUg
Zm9yIElGUkFNRXMKKzxwIGlkPSJkaXNwbGF5Ij48L3A+Cis8ZGl2IGlkPSJjb250ZW50Ij4KKzxp
ZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzEiIHNyYz0iZmlsZV9pZnJhbWVf
c2FuZGJveF9nX2lmMS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPC9k
aXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>616405</attachid>
            <date>2012-04-18 18:23:18 -0700</date>
            <delta_ts>2012-05-04 15:47:26 -0700</delta_ts>
            <desc>iframe sandbox v12</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>55449</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZGE1M2JlNjg0Nzk0MWVlNWE3MDE3ZThlYWE3
OWVlYTAyOTU0N2EwZgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgy
NiwxNiArODI2LDI3IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5kYm94QXR0cik7
CisKKworICAvKioKICAgICogRmlsbCAod2l0aCB0aGUgcGFyYW1ldGVycyBnaXZlbikgdGhlIGxv
Y2FsaXplZCBzdHJpbmcgbmFtZWQgfGFLZXl8IGluCiAgICAqIHByb3BlcnRpZXMgZmlsZSB8YUZp
bGV8LgogICAgKi8KIHByaXZhdGU6CiAgIHN0YXRpYyBuc3Jlc3VsdCBGb3JtYXRMb2NhbGl6ZWRT
dHJpbmcoUHJvcGVydGllc0ZpbGUgYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogYUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqKiBhUGFyYW1zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFQYXJhbXNMZW5ndGgsCkBAIC0xOTI5
LDQyICsxOTQwLDQ0IEBAIHB1YmxpYzoKICAgICogZnJvbSB0aGUgZG9jdW1lbnQgaXQgY29tZXMg
ZnJvbS4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4
dChuc0lVUkkgKmFVUkksIGJvb2wgKmFSZXN1bHQpOwogCiAgIC8qKgogICAgKiBTZXQgdGhlIGdp
dmVuIHByaW5jaXBhbCBhcyB0aGUgb3duZXIgb2YgdGhlIGdpdmVuIGNoYW5uZWwsIGlmCiAgICAq
IG5lZWRlZC4gIGFVUkkgbXVzdCBiZSB0aGUgVVJJIG9mIGFDaGFubmVsLiAgYVByaW5jaXBhbCBt
YXkgYmUKICAgICogbnVsbC4gIElmIGFTZXRVcEZvckFib3V0QmxhbmsgaXMgdHJ1ZSwgdGhlbiBh
Ym91dDpibGFuayB3aWxsIGdldAotICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBpdC4KLSAg
ICoKKyAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAgb24gaXQuIElmIGFGb3JjZU93bmVyIGlzIHRy
dWUsIHRoZSBvd25lcgorICAgKiB3aWxsIGJlIHNldCBvbiB0aGUgY2hhbm5lbCwgZXZlbiBpZiB0
aGUgcHJpbmNpcGFsIGNhbiBiZSBkZXRlcm1pbmVkCisgICAqIGZyb20gdGhlIGNoYW5uZWwuCiAg
ICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgd2hldGhlciB0aGUgcHJpbmNpcGFsIHdhcyBzZXQgdXAg
YXMgdGhlIG93bmVyCiAgICAqIG9mIHRoZSBjaGFubmVsLgogICAgKi8KICAgc3RhdGljIGJvb2wg
U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFGb3JjZU93bmVyID0gZmFsc2UpOwogCiAgIHN0YXRp
YyBuc3Jlc3VsdCBCdG9hKGNvbnN0IG5zQVN0cmluZyYgYUJpbmFyeURhdGEsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG5zQVN0cmluZyYgYUFzY2lpQmFzZTY0U3RyaW5nKTsKIAogICBzdGF0aWMg
bnNyZXN1bHQgQXRvYihjb25zdCBuc0FTdHJpbmcmIGFBc2NpaVN0cmluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSk7CiAKICAgLyoqIElmIGFKU0FycmF5
IGlzIGEgSmF2YXNjcmlwdCBhcnJheSwgdGhpcyBtZXRob2QgaXRlcmF0ZXMgb3ZlciBpdHMKICAg
ICogIGVsZW1lbnRzIGFuZCBhcHBlbmRzIHZhbHVlcyB0byBhUmV0VmFsIGFzIG5zSUF0b21zLgog
ICAgKiAgQHRocm93IE5TX0VSUk9SX0lMTEVHQUxfVkFMVUUgaWYgYUpTQXJyYXkgaXNuJ3QgYSBK
UyBhcnJheS4KICAgICovIAogICBzdGF0aWMgbnNyZXN1bHQgSlNBcnJheVRvQXRvbUFycmF5KEpT
Q29udGV4dCogYUN4LCBjb25zdCBKUzo6VmFsdWUmIGFKU0FycmF5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQ09NQXJyYXk8bnNJQXRvbT4mIGFSZXRWYWwpOwogCiAg
IC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFzc2VkIGluIHBh
cmFtZXRlciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0eSBlbmFibGVk
LiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAgKiBmdW5jdGlv
bmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIu
CiAgICAqIE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29tcGxldGUgbWFr
ZXMgc2Vuc2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAgICogQHBhcmFt
IGFJbnB1dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0IGNhbid0IGJl
IG51bGwuCiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBoYXMgYXV0b2Nv
bXBsZXRlIGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21wbGV0ZUVuYWJs
ZWQobnNJRE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIApkaWZmIC0tZ2l0IGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oIGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1
bWVudC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaAorKysgYi9jb250
ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKQEAgLTEyMCwxOSArMTIwLDE4IEBAIGNsYXNz
IExvYWRlcjsKIAogbmFtZXNwYWNlIGRvbSB7CiBjbGFzcyBMaW5rOwogY2xhc3MgRWxlbWVudDsK
IH0gLy8gbmFtZXNwYWNlIGRvbQogfSAvLyBuYW1lc3BhY2UgbW96aWxsYQogCiAjZGVmaW5lIE5T
X0lET0NVTUVOVF9JSUQgXAoteyAweDhlNTFlNmQ5LCAweDkxNGQsIDB4NDZiYSwgXAotICB7IDB4
YjMsIDB4MTEsIDB4MmYsIDB4MjcsIDB4M2QsIDB4ZTYsIDB4MGQsIDB4MTkgfSB9Ci0KK3sgMHg1
N2ZlNDRhZSwgMHg2NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAweGE3LCAw
eDQzLCAweDI4LCAweGJlLCAweDg2IH0gfQogCiAvLyBGbGFnIGZvciBBZGRTdHlsZVNoZWV0KCku
CiAjZGVmaW5lIE5TX1NUWUxFU0hFRVRfRlJPTV9DQVRBTE9HICAgICAgICAgICAgICAgICgxIDw8
IDApCiAKIC8vIEVudW0gZm9yIHJlcXVlc3RpbmcgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZG9jdW1l
bnQgd2hlbiBjcmVhdGluZyBhIGRvYwogZW51bSBEb2N1bWVudEZsYXZvciB7CiAgIERvY3VtZW50
Rmxhdm9yTGVnYWN5R3Vlc3MsIC8vIGNvbXBhdCB3aXRoIG9sZCBjb2RlIHVudGlsIG1hZGUgSFRN
TDUtY29tcGxpYW50CiAgIERvY3VtZW50Rmxhdm9ySFRNTCwgLy8gSFRNTERvY3VtZW50IHdpdGgg
SFRNTG5lc3MgYml0IHNldCB0byB0cnVlCkBAIC00NjAsMTcgKzQ1OSwyNiBAQCBwdWJsaWM6CiAg
ICAqIGNhbGxlcnMgYXJlIGV4cGVjdGVkIHRvIHRha2UgYWN0aW9uIGFzIG5lZWRlZCBpZiB0aGV5
IHdhbnQgdGhpcwogICAgKiBjaGFuZ2UgdG8gYWN0dWFsbHkgY2hhbmdlIGFueXRoaW5nIGltbWVk
aWF0ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9w
dGlvbnMoUFJVaW50MzIgYUJpZGlPcHRpb25zKQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJp
ZGlPcHRpb25zOwogICB9Ci0gIAorCisgIC8qKgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3Mg
Zm9yIHRoaXMgZG9jdW1lbnQuCisgICAqIEBzZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBv
c3NpYmxlIGZsYWdzCisgICAqLworICBQUlVpbnQzMiBTYW5kYm94RmxhZ3MoKSBjb25zdAorICB7
CisgICAgcmV0dXJuIG1TYW5kYm94RmxhZ3M7CisgIH0KKwogICAvKioKICAgICogQWNjZXNzIEhU
VFAgaGVhZGVyIGRhdGEgKHRoaXMgbWF5IGFsc28gZ2V0IHNldCBmcm9tIG90aGVyCiAgICAqIHNv
dXJjZXMsIGxpa2UgSFRNTCBNRVRBIHRhZ3MpLgogICAgKi8KICAgdmlydHVhbCB2b2lkIEdldEhl
YWRlckRhdGEobnNJQXRvbSogYUhlYWRlckZpZWxkLCBuc0FTdHJpbmcmIGFEYXRhKSBjb25zdCA9
IDA7CiAgIHZpcnR1YWwgdm9pZCBTZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFoZWFkZXJGaWVsZCwg
Y29uc3QgbnNBU3RyaW5nJiBhRGF0YSkgPSAwOwogCiAgIC8qKgpAQCAtMTg1NCwxNiArMTg2Miwy
MSBAQCBwcm90ZWN0ZWQ6CiAgIC8vIElmIG1Jc1N0YXRpY0RvY3VtZW50IGlzIHRydWUsIG1Pcmln
aW5hbERvY3VtZW50IHBvaW50cyB0byB0aGUgb3JpZ2luYWwKICAgLy8gZG9jdW1lbnQuCiAgIG5z
Q09NUHRyPG5zSURvY3VtZW50PiBtT3JpZ2luYWxEb2N1bWVudDsKIAogICAvLyBUaGUgYmlkaSBv
cHRpb25zIGZvciB0aGlzIGRvY3VtZW50LiAgV2hhdCB0aGlzIGJpdGZpZWxkIG1lYW5zIGlzCiAg
IC8vIGRlZmluZWQgaW4gbnNCaWRpVXRpbHMuaAogICBQUlVpbnQzMiBtQmlkaU9wdGlvbnM7CiAK
KyAgLy8gVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3VtZW50LiBUaGVzZSByZWZsZWN0IHRo
ZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2YgdGhlCisgIC8vIGFzc29jaWF0ZWQg
SUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZiBleGlzdGVudC4gVGhlc2UgYXJl
IHNldCBhdCBsb2FkIHRpbWUgYW5kCisgIC8vIGFyZSBpbW11dGFibGUgLSBzZWUgbnNTYW5kYm94
RmxhZ3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICBQUlVpbnQzMiBtU2FuZGJveEZsYWdz
OworCiAgIG5zQ1N0cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnNDU3RyaW5n
IG1Db250ZW50VHlwZTsKIHByb3RlY3RlZDoKIAogICAvLyBUaGUgZG9jdW1lbnQncyBzZWN1cml0
eSBpbmZvCiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VjdXJpdHlJbmZvOwogCmRpZmYgLS1n
aXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9z
cmMvbnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRp
bHMuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC0yMDks
MTYgKzIwOSwxNyBAQCBzdGF0aWMgTlNfREVGSU5FX0NJRChrWFRGU2VydmljZUNJRCwgTlNfCiAj
aW5jbHVkZSAibW96aWxsYS9CYXNlNjQuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2Vz
LmgiCiAjaW5jbHVkZSAibnNET01NdXRhdGlvbk9ic2VydmVyLmgiCiAKICNpbmNsdWRlICJuc1dy
YXBwZXJDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJuc0lET01Eb2N1bWVudFR5cGUuaCIKICNp
bmNsdWRlICJuc0lET01XaW5kb3dVdGlscy5oIgogI2luY2x1ZGUgIm5zQ2hhclNlcGFyYXRlZFRv
a2VuaXplci5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIGV4dGVybiAiQyIgaW50
IE1PWl9YTUxUcmFuc2xhdGVFbnRpdHkoY29uc3QgY2hhciogcHRyLCBjb25zdCBjaGFyKiBlbmQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBuZXh0
LCBQUlVuaWNoYXIqIHJlc3VsdCk7CiBleHRlcm4gIkMiIGludCBNT1pfWE1MQ2hlY2tRTmFtZShj
b25zdCBjaGFyKiBwdHIsIGNvbnN0IGNoYXIqIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBuc19hd2FyZSwgY29uc3QgY2hhcioqIGNvbG9uKTsKIAogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CkBA
IC05MTcsMTYgKzkxOCw2MiBAQCBuc0NvbnRlbnRVdGlsczo6R2V0UGFyc2VyU2VydmljZSgpCiAg
ICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwgJnNQYXJz
ZXJTZXJ2aWNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNlclNlcnZp
Y2UgPSBuc251bGw7CiAgICAgfQogICB9CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNlOwogfQor
LyoqCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmlidXRl
IChvZiBhbiA8aWZyYW1lPiBvcgorICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQg
dG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFsbHkuCisgKgorICogQHBhcmFtIGFBdHRy
aWJ1dGUgICAgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJldHVybiAg
ICAgICAgICAgICAgdGhlIHNldCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRp
bHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBzYW5kYm94
QXR0clZhbHVlKQoreworICAvLyBJZiB0aGVyZSdzIGEgc2FuZGJveCBhdHRyaWJ1dGUgYXQgYWxs
IChhbmQgdGhlcmUgaXMgaWYgdGhpcyBpcyBiZWluZworICAvLyBjYWxsZWQpLCBzdGFydCBvZmYg
Ynkgc2V0dGluZyBhbGwgdGhlIHJlc3RyaWN0aW9uIGZsYWdzLgorICBQUlVpbnQzMiBvdXQgPSBT
QU5EQk9YRURfTkFWSUdBVElPTiB8CisgICAgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04g
fAorICAgIFNBTkRCT1hFRF9QTFVHSU5TIHwgU0FOREJPWEVEX09SSUdJTiB8CisgICAgU0FOREJP
WEVEX0ZPUk1TIHwgU0FOREJPWEVEX1NDUklQVFMgfAorICAgIFNBTkRCT1hFRF9BVVRPTUFUSUNf
RkVBVFVSRVM7CisKKyAgaWYgKCFzYW5kYm94QXR0clZhbHVlLklzRW1wdHkoKSkgeworICAgIC8v
IFRoZSBzZXBhcmF0b3Igb3B0aW9uYWwgZmxhZyBpcyB1c2VkIGJlY2F1c2UgdGhlIEhUTUw1IHNw
ZWMgc2F5cyBhbnkKKyAgICAvLyB3aGl0ZXNwYWNlIGlzIG9rIGFzIGEgc2VwYXJhdG9yLCB3aGlj
aCBpcyB3aGF0IHRoaXMgZG9lcy4KKyAgICBIVE1MU3BsaXRPblNwYWNlc1Rva2VuaXplciB0b2tl
bml6ZXIoc2FuZGJveEF0dHJWYWx1ZSwgJyAnLAorICAgICAgbnNDaGFyU2VwYXJhdGVkVG9rZW5p
emVyVGVtcGxhdGU8bnNDb250ZW50VXRpbHM6OklzSFRNTFdoaXRlc3BhY2U+OjpTRVBBUkFUT1Jf
T1BUSU9OQUwpOworCisgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKKyAg
ICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nIHRva2VuID0gdG9rZW5pemVyLm5leHRUb2tlbigpOwor
CisgICAgICBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIp
KSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX1NDUklQVFM7CisgICAgICB9IGVsc2UgaWYg
KHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNhbWUtb3JpZ2luIikpIHsKKyAg
ICAgICAgb3V0ICY9IH5TQU5EQk9YRURfT1JJR0lOOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5M
b3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1mb3JtcyIpKSB7CisgICAgICAgIG91dCAmPSB+
U0FOREJPWEVEX0ZPUk1TOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNM
aXRlcmFsKCJhbGxvdy1zY3JpcHRzIikpIHsKKyAgICAgICAgLy8gYWxsb3ctc2NyaXB0cyByZW1v
dmVzIGJvdGggU0FOREJPWEVEX1NDUklQVFMgYW5kCisgICAgICAgIC8vIFNBTkRCT1hFRF9BVVRP
TUFUSUNfRkVBVFVSRVMuCisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX1NDUklQVFM7CisgICAg
ICAgIG91dCAmPSB+U0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUzsKKyAgICAgIH0gZWxzZSBp
ZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctdG9wLW5hdmlnYXRpb24iKSkg
eworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FUSU9OOworICAgICAg
fQorICAgIH0KKyAgfQorCisgIHJldHVybiBvdXQ7Cit9CiAKICNpZmRlZiBNT1pfWFRGCiBuc0lY
VEZTZXJ2aWNlKgogbnNDb250ZW50VXRpbHM6OkdldFhURlNlcnZpY2UoKQogewogICBpZiAoIXNY
VEZTZXJ2aWNlKSB7CiAgICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0U2VydmljZShrWFRGU2Vydmlj
ZUNJRCwgJnNYVEZTZXJ2aWNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewpAQCAtNjM4Mywx
NyArNjQzMCwxOCBAQCBuc0NvbnRlbnRVdGlsczo6VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXN1bHQpOwogfQogCiAvLyBzdGF0aWMKIGJv
b2wKIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2Fk
aW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5u
ZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSog
YVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFi
b3V0QmxhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBG
b3JBYm91dEJsYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZv
cmNlT3duZXIpCiB7CiAgIC8vCiAgIC8vIFNldCB0aGUgb3duZXIgb2YgdGhlIGNoYW5uZWwsIGJ1
dCBvbmx5IGZvciBjaGFubmVscyB0aGF0IGNhbid0CiAgIC8vIHByb3ZpZGUgdGhlaXIgb3duIHNl
Y3VyaXR5IGNvbnRleHQuCiAgIC8vCiAgIC8vIFhYWDogSXQgc2VlbXMgd3JvbmcgdGhhdCB0aGUg
b3duZXIgaXMgaWdub3JlZCAtIGV2ZW4gaWYgb25lIGlzCiAgIC8vICAgICAgc3VwcGxpZWQpIHVu
bGVzcyB0aGUgVVJJIGlzIGphdmFzY3JpcHQgb3IgZGF0YSBvciBhYm91dDpibGFuay4KICAgLy8g
WFhYOiBJZiB0aGlzIGlzIGV2ZXIgY2hhbmdlZCwgY2hlY2sgYWxsIGNhbGxlcnMgZm9yIHdoYXQg
b3duZXJzCkBAIC02NDAxLDIzICs2NDQ5LDI3IEBAIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5u
ZWxPd25lcihuc0lQcmkKICAgLy8gICAgICBjb21tZW50cyBpbiBuc0RvY1NoZWxsOjpMb2FkVVJJ
IHdoZXJlIHdlIGZhbGwgYmFjayBvbgogICAvLyAgICAgIGluaGVyaXRpbmcgdGhlIG93bmVyIGlm
IGNhbGxlZCBmcm9tIGNocm9tZS4gIFRoYXQgd291bGQgYmUKICAgLy8gICAgICB2ZXJ5IHdyb25n
IGlmIHRoaXMgY29kZSBjaGFuZ2VkIGFueXRoaW5nIGJ1dCBjaGFubmVscyB0aGF0CiAgIC8vICAg
ICAgY2FuJ3QgcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dCEKICAgLy8KICAgLy8g
ICAgICAoQ3VycmVudGx5IGNocm9tZSBVUklzIHNldCB0aGUgb3duZXIgd2hlbiB0aGV5IGFyZSBj
cmVhdGVkIQogICAvLyAgICAgIFNvIHNldHRpbmcgYSBOVUxMIG93bmVyIHdvdWxkIGJlIGJhZCEp
CiAgIC8vCisgIC8vIElmIGFGb3JjZU93bmVyIGlzIHRydWUsIHRoZSBvd25lciB3aWxsIGJlIHNl
dCwgZXZlbiBmb3IgYSBjaGFubmVsIHRoYXQKKyAgLy8gY2FuIHByb3ZpZGUgaXRzIG93biBzZWN1
cml0eSBjb250ZXh0LiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBIVE1MNSBJRlJBTUUKKyAgLy8gc2Fu
ZGJveCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiBmb3JjZSB0aGUgY2hhbm5lbCAoYW5kIGl0cyBkb2N1
bWVudCkgdG8KKyAgLy8gZXhwbGljaXRseSBoYXZlIGEgbnVsbCBwcmluY2lwYWwuCiAgIGJvb2wg
aW5oZXJpdDsKICAgLy8gV2UgZXhwZWN0IFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0IHRvIHJl
dHVybiBzdWNjZXNzIGZvciBhbgogICAvLyBhYm91dDpibGFuayBVUkksIHNvIGRvbid0IGNhbGwg
TlNfSXNBYm91dEJsYW5rKCkgaWYgdGhpcyBjYWxsIGZhaWxzLgogICAvLyBUaGlzIGNvbmRpdGlv
biBuZWVkcyB0byBtYXRjaCB0aGUgb25lIGluIG5zRG9jU2hlbGw6OkludGVybmFsTG9hZCB3aGVy
ZQogICAvLyB3ZSdyZSBjaGVja2luZyBmb3IgdGhpbmdzIHRoYXQgd2lsbCB1c2UgdGhlIG93bmVy
LgotICBpZiAoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkksICZp
bmhlcml0KSkgJiYKLSAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYmIE5T
X0lzQWJvdXRCbGFuayhhVVJJKSkpKSB7CisgIGlmIChhRm9yY2VPd25lciB8fCAoKE5TX1NVQ0NF
RURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYmCisgICAg
ICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVS
SSkpKSkpKSB7CiAgICAgYUNoYW5uZWwtPlNldE93bmVyKGFMb2FkaW5nUHJpbmNpcGFsKTsKICAg
ICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8vCiAgIC8vIGZpbGU6IHVyaSBzcGVjaWFsLWNhc2lu
ZwogICAvLwogICAvLyBJZiB0aGlzIGlzIGEgZmlsZTogbG9hZCBvcGVuZWQgZnJvbSBhbm90aGVy
IGZpbGU6IHRoZW4gaXQgbWF5IG5lZWQKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNE
b2N1bWVudC5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRl
bnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3Vt
ZW50LmNwcApAQCAtMjQxNSwxNiArMjQxNSwyNSBAQCBuc0RvY3VtZW50OjpTdGFydERvY3VtZW50
TG9hZChjb25zdCBjaGFyCiAgICAgRmluZENoYXJJblJlYWRhYmxlKCc7Jywgc2VtaWNvbG9uLCBl
bmQpOwogICAgIFNldENvbnRlbnRUeXBlSW50ZXJuYWwoU3Vic3RyaW5nKHN0YXJ0LCBzZW1pY29s
b24pKTsKICAgfQogCiAgIFJldHJpZXZlUmVsZXZhbnRIZWFkZXJzKGFDaGFubmVsKTsKIAogICBt
Q2hhbm5lbCA9IGFDaGFubmVsOwogCisgIC8vIElmIHRoaXMgZG9jdW1lbnQgaXMgYmVpbmcgbG9h
ZGVkIGJ5IGEgZG9jc2hlbGwsIGNvcHkgaXRzIHNhbmRib3ggZmxhZ3MKKyAgLy8gdG8gdGhlIGRv
Y3VtZW50LiBUaGVzZSBhcmUgaW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBoZXJlLgorICBuc0NP
TVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFjZShhQ29udGFpbmVy
KTsKKworICBpZiAoZG9jU2hlbGwpIHsKKyAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRT
YW5kYm94RmxhZ3MoJm1TYW5kYm94RmxhZ3MpOworICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBy
dik7CisgIH0KKwogICBuc3Jlc3VsdCBydiA9IEluaXRDU1AoKTsKICAgTlNfRU5TVVJFX1NVQ0NF
U1MocnYsIHJ2KTsKIAogICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0RvY3VtZW50
OjpJbml0Q1NQKCkKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5j
cHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCi0tLSBhL2NvbnRlbnQvYmFz
ZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9h
ZGVyLmNwcApAQCAtMTEyLDE2ICsxMTIsMTkgQEAKICNpbmNsdWRlICJtb3ppbGxhL0d1YXJkT2Jq
ZWN0cy5oIgogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJtb3pp
bGxhL3VudXNlZC5oIgogI2luY2x1ZGUgIm1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJtb3ppbGxhL2xheW91dC9SZW5kZXJGcmFtZVBhcmVudC5oIgogCiAjaW5jbHVkZSAianNhcGku
aCIKIAorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc1NhbmRi
b3hGbGFncy5oIgorCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBt
b3ppbGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE6OmxheW91dDsKIHR5cGVkZWYgRnJhbWVNZXRyaWNzOjpWaWV3SUQgVmll
d0lEOwogCiBjbGFzcyBuc0FzeW5jRG9jU2hlbGxEZXN0cm95ZXIgOiBwdWJsaWMgbnNSdW5uYWJs
ZQogewpAQCAtNDY4LDE2ICs0NzEsNjAgQEAgbnNGcmFtZUxvYWRlcjo6UmVhbGx5U3RhcnRMb2Fk
aW5nSW50ZXJuYQogICAvLyBKdXN0IHRvIGJlIHNhZmUsIHJlY2hlY2sgdXJpLgogICBydiA9IENo
ZWNrVVJJTG9hZChtVVJJVG9Mb2FkKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAog
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbExvYWRJbmZvPiBsb2FkSW5mbzsKICAgbURvY1NoZWxsLT5D
cmVhdGVMb2FkSW5mbyhnZXR0ZXJfQWRkUmVmcyhsb2FkSW5mbykpOwogICBOU19FTlNVUkVfVFJV
RShsb2FkSW5mbywgTlNfRVJST1JfRkFJTFVSRSk7CiAKKyAgLy8gSXMgdGhpcyBhbiA8aWZyYW1l
PiB3aXRoIGEgc2FuZGJveCBhdHRyaWJ1dGUgb3IgYSBwYXJlbnQgd2hpY2ggaXMKKyAgLy8gc2Fu
ZGJveGVkID8KKyAgbnNIVE1MSUZyYW1lRWxlbWVudCAqIGlmcmFtZSA9CisgICAgbnNIVE1MSUZy
YW1lRWxlbWVudDo6RnJvbUNvbnRlbnQobU93bmVyQ29udGVudCk7CisKKyAgUFJVaW50MzIgc2Fu
ZGJveEZsYWdzID0gMDsKKworICBpZiAoaWZyYW1lKSB7CisgICAgc2FuZGJveEZsYWdzID0gaWZy
YW1lLT5HZXRTYW5kYm94RmxhZ3MoKTsKKworICAgIFBSVWludDMyIHBhcmVudFNhbmRib3hGbGFn
cyA9IDA7CisKKyAgICAvLyBHZXQgdGhlIHBhcmVudCdzIHNhbmRib3ggZmxhZ3MsIHRoZXkncmUg
bmVlZGVkIHRvIGRldGVybWluZSBpZiB0aGUKKyAgICAvLyBmcmFtZSBiZWluZyBsb2FkZWQgbmVl
ZHMgdG8gYmUgc2FuZGJveGVkLgorICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHBh
cmVudERvY1NoZWxsSXRlbTsKKyAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBjdXJE
b2NTaGVsbEl0ZW0gPSBkb19RdWVyeUludGVyZmFjZShtRG9jU2hlbGwpOworCisgICAgaWYgKE5T
X1NVQ0NFRURFRChjdXJEb2NTaGVsbEl0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJl
bnREb2NTaGVsbEl0ZW0pKSkpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBwYXJlbnRE
b2MgPSBkb19HZXRJbnRlcmZhY2UocGFyZW50RG9jU2hlbGxJdGVtKTsKKworICAgICAgaWYgKHBh
cmVudERvYykgeworICAgICAgICBwYXJlbnRTYW5kYm94RmxhZ3MgPSBwYXJlbnREb2MtPlNhbmRi
b3hGbGFncygpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChzYW5kYm94RmxhZ3MgfHwgcGFy
ZW50U2FuZGJveEZsYWdzKSB7CisgICAgICBpZiAocGFyZW50U2FuZGJveEZsYWdzKSB7CisgICAg
ICAgIC8vIFRoZSBjaGlsZCBjYW4gb25seSBhZGQgcmVzdHJpY3Rpb25zLCBub3QgcmVtb3ZlIHRo
ZW0uCisgICAgICAgIHNhbmRib3hGbGFncyB8PSBwYXJlbnRTYW5kYm94RmxhZ3M7CisgICAgICB9
CisKKyAgICAgIG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFncyk7CisKKyAg
ICAgIC8vIFNldCB1cCB0aGUgYWN0dWFsIHNhbmRib3hpbmcgZm9yIHBsdWdpbnMgYXMgc3BlY2lm
aWVkLgorICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9QTFVHSU5TKSB7CisgICAg
ICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dQbHVnaW5zKGZhbHNlKTsKKyAgICAgIH0KKyAgICB9Cisg
IH0KKworICAvLyBJZiB0aGlzIGlzIGFuIDxpZnJhbWU+IGFuZCBpdCdzIHNhbmRib3hlZCB3aXRo
IHJlc3BlY3QgdG8gb3JpZ2luCisgIC8vIHdlIHdpbGwgc2V0IGl0IHVwIHdpdGggYSBudWxsIHBy
aW5jaXBhbCBsYXRlciBpbiBuc0RvY1NoZWxsOjpEb1VSSUxvYWQuCisgIC8vIFdlIGRvIGl0IHRo
ZXJlIHRvIGNvcnJlY3RseSBzYW5kYm94IGNvbnRlbnQgdGhhdCB3YXMgbG9hZGVkIGludG8KKyAg
Ly8gdGhlIGlmcmFtZSB2aWEgb3RoZXIgbWV0aG9kcyB0aGFuIHRoZSBzcmMgYXR0cmlidXRlLgog
ICAvLyBXZSdsbCB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3VtZW50IGxv
YWRlZCBpbnNpZGUgdXMuICBUaGlzCiAgIC8vIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVkZWQgdG8g
cHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluCiAgIC8vIHN1YmZyYW1l
cyEKICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7
CiAKICAgbnNDT01QdHI8bnNJVVJJPiByZWZlcnJlcjsKICAgcnYgPSBtT3duZXJDb250ZW50LT5O
b2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhyZWZlcnJlcikpOwogICBOU19F
TlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0dr
QXRvbUxpc3QuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKLS0tIGEvY29udGVu
dC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9t
TGlzdC5oCkBAIC05MywxNyArOTMsMjEgQEAgR0tfQVRPTShhY3R1YXRlLCAiYWN0dWF0ZSIpCiBH
S19BVE9NKGFkZHJlc3MsICJhZGRyZXNzIikKIEdLX0FUT00oYWZ0ZXIsICJhZnRlciIpCiBHS19B
VE9NKGFmdGVyX2VuZCwgImFmdGVyX2VuZCIpCiBHS19BVE9NKGFmdGVyX3N0YXJ0LCAiYWZ0ZXJf
c3RhcnQiKQogR0tfQVRPTShhbGlnbiwgImFsaWduIikKIEdLX0FUT00oYWxpbmssICJhbGluayIp
CiBHS19BVE9NKGFsbCwgImFsbCIpCiBHS19BVE9NKGFsbG93ZXZlbnRzLCAiYWxsb3dldmVudHMi
KQorR0tfQVRPTShhbGxvd2Zvcm1zLCAiYWxsb3ctZm9ybXMiKQogR0tfQVRPTShhbGxvd25lZ2F0
aXZlYXNzZXJ0aW9ucywgImFsbG93bmVnYXRpdmVhc3NlcnRpb25zIikKK0dLX0FUT00oYWxsb3dz
YW1lb3JpZ2luLCAiYWxsb3ctc2FtZS1vcmlnaW4iKQorR0tfQVRPTShhbGxvd3NjcmlwdHMsICJh
bGxvdy1zY3JpcHRzIikKK0dLX0FUT00oYWxsb3d0b3BuYXZpZ2F0aW9uLCAiYWxsb3ctdG9wLW5h
dmlnYXRpb24iKQogR0tfQVRPTShhbGxvd3VudHJ1c3RlZCwgImFsbG93dW50cnVzdGVkIikKIEdL
X0FUT00oYWx0LCAiYWx0IikKIEdLX0FUT00oYWx0ZXJuYXRlLCAiYWx0ZXJuYXRlIikKIEdLX0FU
T00oYWx3YXlzLCAiYWx3YXlzIikKIEdLX0FUT00oYW5jZXN0b3IsICJhbmNlc3RvciIpCiBHS19B
VE9NKGFuY2VzdG9yT3JTZWxmLCAiYW5jZXN0b3Itb3Itc2VsZiIpCiBHS19BVE9NKF9hbmQsICJh
bmQiKQogR0tfQVRPTShhbnksICJhbnkiKQpAQCAtODgyLDE2ICs4ODYsMTcgQEAgR0tfQVRPTShy
b3dzcGFuLCAicm93c3BhbiIpCiBHS19BVE9NKHJwLCAicnAiKQogR0tfQVRPTShydCwgInJ0IikK
IEdLX0FUT00ocnRsLCAicnRsIikKIEdLX0FUT00ocnVieSwgInJ1YnkiKQogR0tfQVRPTShydWxl
LCAicnVsZSIpCiBHS19BVE9NKHJ1bGVzLCAicnVsZXMiKQogR0tfQVRPTShzLCAicyIpCiBHS19B
VE9NKHNhbXAsICJzYW1wIikKK0dLX0FUT00oc2FuZGJveCwgInNhbmRib3giKQogR0tfQVRPTShz
YmF0dHIsICJzYmF0dHIiKQogR0tfQVRPTShzY2FsZSwgInNjYWxlIikKIEdLX0FUT00oc2Nhbiwg
InNjYW4iKQogR0tfQVRPTShzY2hlbWUsICJzY2hlbWUiKQogR0tfQVRPTShzY29wZSwgInNjb3Bl
IikKIEdLX0FUT00oc2NvcGVkLCAic2NvcGVkIikKIEdLX0FUT00oc2NyZWVuLCAic2NyZWVuIikK
IEdLX0FUT00oc2NyZWVuWCwgInNjcmVlblgiKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3Ny
Yy9uc1NhbmRib3hGbGFncy5oIGIvY29udGVudC9iYXNlL3NyYy9uc1NhbmRib3hGbGFncy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9iYXNlL3NyYy9u
c1NhbmRib3hGbGFncy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13
aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8N
CisvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhl
IE1vemlsbGEgUHVibGljDQorICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1Q
TCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLA0KKyAqIFlvdSBjYW4gb2J0YWlu
IG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovDQorDQorLyoNCisgKiBDb25z
dGFudCBmbGFncyB0aGF0IGRlc2NyaWJlIGhvdyBhIGRvY3VtZW50IGlzIHNhbmRib3hlZCBhY2Nv
cmRpbmcgdG8gdGhlDQorICogSFRNTDUgc3BlYy4NCisgKi8NCisNCisjaWZuZGVmIG5zU2FuZGJv
eEZsYWdzX2hfX18NCisjZGVmaW5lIG5zU2FuZGJveEZsYWdzX2hfX18NCisNCisvKioNCisgKiBU
aGlzIGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgYnJvd3NpbmcgY29udGV4
dHMgb3RoZXIgdGhhbg0KKyAqIHRoZSBzYW5kYm94ZWQgYnJvd3NpbmcgY29udGV4dCBpdHNlbGYg
KG9yIGJyb3dzaW5nIGNvbnRleHRzIGZ1cnRoZXINCisgKiBuZXN0ZWQgaW5zaWRlIGl0KSwgYW5k
IHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBs
b25nIFNBTkRCT1hFRF9OQVZJR0FUSU9OICA9IDB4MTsNCisNCisvKioNCisgKiBUaGlzIGZsYWcg
cHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgdGhlaXIgdG9wLWxldmVsIGJyb3dzaW5n
DQorICogY29udGV4dC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9UT1BM
RVZFTF9OQVZJR0FUSU9OID0gMHgyOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBj
b250ZW50IGZyb20gaW5zdGFudGlhdGluZyBwbHVnaW5zLCB3aGV0aGVyIHVzaW5nIHRoZQ0KKyAq
IGVtYmVkIGVsZW1lbnQsIHRoZSBvYmplY3QgZWxlbWVudCwgdGhlIGFwcGxldCBlbGVtZW50LCBv
ciB0aHJvdWdoDQorICogbmF2aWdhdGlvbiBvZiBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCB1
bmxlc3MgdGhvc2UgcGx1Z2lucyBjYW4gYmUNCisgKiBzZWN1cmVkLg0KKyAqLw0KK2NvbnN0IHVu
c2lnbmVkIGxvbmcgU0FOREJPWEVEX1BMVUdJTlMgPSAweDQ7DQorDQorLyoqDQorICogVGhpcyBm
bGFnIGZvcmNlcyBjb250ZW50IGludG8gYSB1bmlxdWUgb3JpZ2luLCB0aHVzIHByZXZlbnRpbmcg
aXQgZnJvbQ0KKyAqIGFjY2Vzc2luZyBvdGhlciBjb250ZW50IGZyb20gdGhlIHNhbWUgb3JpZ2lu
Lg0KKyAqIFRoaXMgZmxhZyBhbHNvIHByZXZlbnRzIHNjcmlwdCBmcm9tIHJlYWRpbmcgZnJvbSBv
ciB3cml0aW5nIHRvIHRoZQ0KKyAqIGRvY3VtZW50LmNvb2tpZSBJREwgYXR0cmlidXRlLCBhbmQg
YmxvY2tzIGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9u
ZyBTQU5EQk9YRURfT1JJR0lOID0gMHg4Ow0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3Mg
Zm9ybSBzdWJtaXNzaW9uLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX0ZP
Uk1TID0gMHgxMDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIHNjcmlwdCBleGVjdXRp
b24uDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfU0NSSVBUUyA9IDB4MjA7
DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBmZWF0dXJlcyB0aGF0IHRyaWdnZXIgYXV0
b21hdGljYWxseSwgc3VjaCBhcw0KKyAqIGF1dG9tYXRpY2FsbHkgcGxheWluZyBhIHZpZGVvIG9y
IGF1dG9tYXRpY2FsbHkgZm9jdXNpbmcgYSBmb3JtIGNvbnRyb2wuDQorICovDQorY29uc3QgdW5z
aWduZWQgbG9uZyBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTID0gMHg0MDsNCisjZW5kaWYK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3Jj
L25zU2NyaXB0TG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3Bw
Ci0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwCkBAIC03MCwxNiArNzAsMTcgQEAKICNpbmNsdWRl
ICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJwcmxvZy5oIgogI2luY2x1
ZGUgIm5zSUNoYW5uZWxQb2xpY3kuaCIKICNpbmNsdWRlICJuc0NoYW5uZWxQb2xpY3kuaCIKICNp
bmNsdWRlICJuc0NSVC5oIgogI2luY2x1ZGUgIm5zQ29udGVudENyZWF0b3JGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJuc0dlbmVyaWNFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNDcm9zc1NpdGVMaXN0
ZW5lclByb3h5LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2luY2x1ZGUgIm1v
emlsbGEvRnVuY3Rpb25UaW1lci5oIgogI2luY2x1ZGUgIm1vemlsbGEvQ09SU01vZGUuaCIKIAog
I2lmZGVmIFBSX0xPR0dJTkcKIHN0YXRpYyBQUkxvZ01vZHVsZUluZm8qIGdDc3BQUkxvZzsKICNl
bmRpZgogCkBAIC0zMDUsMTYgKzMwNiwyMiBAQCBuc1NjcmlwdExvYWRlcjo6U3RhcnRMb2FkKG5z
U2NyaXB0TG9hZFJlCiAgIGlmICghd2luZG93KSB7CiAgICAgcmV0dXJuIE5TX0VSUk9SX05VTExf
UE9JTlRFUjsKICAgfQogCiAgIG5zSURvY1NoZWxsICpkb2NzaGVsbCA9IHdpbmRvdy0+R2V0RG9j
U2hlbGwoKTsKIAogICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VSZXF1ZXN0b3I+IHByb21wdGVyKGRv
X1F1ZXJ5SW50ZXJmYWNlKGRvY3NoZWxsKSk7CiAKKyAgLy8gSWYgdGhpcyBkb2N1bWVudCBpcyBz
YW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctc2NyaXB0cycsIGFib3J0LgorICBpZiAobURvY3VtZW50
LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgLy8gUkVWSUVXIDog
dGhpcyBwcm9iYWJseSBpc24ndCB0aGUgcmlnaHQgZXJyb3IuLgorICAgIHJldHVybiBOU19FUlJP
Ul9ET01fU0VDVVJJVFlfRVJSOworICB9CisKICAgLy8gY2hlY2sgZm9yIGEgQ29udGVudCBTZWN1
cml0eSBQb2xpY3kgdG8gcGFzcyBkb3duIHRvIHRoZSBjaGFubmVsCiAgIC8vIHRoYXQgd2lsbCBi
ZSBjcmVhdGVkIHRvIGxvYWQgdGhlIHNjcmlwdAogICBuc0NPTVB0cjxuc0lDaGFubmVsUG9saWN5
PiBjaGFubmVsUG9saWN5OwogICBuc0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNz
cDsKICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRS
ZWZzKGNzcCkpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICBpZiAoY3NwKSB7CiAg
ICAgY2hhbm5lbFBvbGljeSA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnNjaGFu
bmVscG9saWN5OzEiKTsKQEAgLTY3NCwxNiArNjgxLDIxIEBAIG5zU2NyaXB0TG9hZGVyOjpQcm9j
ZXNzU2NyaXB0RWxlbWVudChuc0kKICAgICAgICAgIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwYXJz
ZXItYmxvY2tpbmcgc2NyaXB0IGF0IGEgdGltZSIpOwogICAgIE5TX0FTU0VSVElPTihtWFNMVFJl
cXVlc3RzLklzRW1wdHkoKSwKICAgICAgICAgIlBhcnNlci1ibG9ja2luZyBzY3JpcHRzIGFuZCBY
U0xUIHNjcmlwdHMgaW4gdGhlIHNhbWUgZG9jISIpOwogICAgIG1QYXJzZXJCbG9ja2luZ1JlcXVl
c3QgPSByZXF1ZXN0OwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8gaW5saW5lIHNjcmlw
dAorICAvLyBJcyB0aGlzIGRvY3VtZW50IHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRz
Jz8KKyAgaWYgKG1Eb2N1bWVudC0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykg
eworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0
eVBvbGljeT4gY3NwOwogICBydiA9IG1Eb2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3Ao
Z2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBmYWxzZSk7CiAK
ICAgaWYgKGNzcCkgewogICAgIFBSX0xPRyhnQ3NwUFJMb2csIFBSX0xPR19ERUJVRywgKCJOZXcg
U2NyaXB0TG9hZGVyIGkgKioqKndpdGggQ1NQKioqKiIpKTsKICAgICBib29sIGlubGluZU9LOwog
ICAgIHJ2ID0gY3NwLT5HZXRBbGxvd3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsKZGlmZiAtLWdp
dCBhL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcCBiL2NvbnRl
bnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcAotLS0gYS9jb250ZW50L2V2
ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAKKysrIGIvY29udGVudC9ldmVudHMv
c3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCkBAIC04MywxNiArODMsMTcgQEAKICNpbmNs
dWRlICJuc0RPTUpTVXRpbHMuaCIKICNpbmNsdWRlICJuc0RPTVNjcmlwdE9iamVjdEhvbGRlci5o
IgogI2luY2x1ZGUgIm5zRGF0YUhhc2h0YWJsZS5oIgogI2luY2x1ZGUgIm5zQ09NQXJyYXkuaCIK
ICNpbmNsdWRlICJuc0V2ZW50TGlzdGVuZXJTZXJ2aWNlLmgiCiAjaW5jbHVkZSAibnNJQ29udGVu
dFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAibnNKU0Vudmlyb25tZW50LmgiCiAjaW5jbHVk
ZSAieHBjcHVibGljLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpoYWw7CiAKICNk
ZWZpbmUgRVZFTlRfVFlQRV9FUVVBTFMoIGxzLCB0eXBlLCB1c2VyVHlwZSApIFwKICAgKGxzLT5t
RXZlbnRUeXBlID09IHR5cGUgJiYgXAogICAobHMtPm1FdmVudFR5cGUgIT0gTlNfVVNFUl9ERUZJ
TkVEX0VWRU5UIHx8IGxzLT5tVHlwZUF0b20gPT0gdXNlclR5cGUpKQogCkBAIC01NjgsMTYgKzU2
OSwyMiBAQCBuc0V2ZW50TGlzdGVuZXJNYW5hZ2VyOjpBZGRTY3JpcHRFdmVudExpCiAgICAgLy8g
bG9hZGVkIGFzIGRhdGEuCiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKICAgbnNyZXN1bHQgcnYg
PSBOU19PSzsKICAgLy8gcmV0dXJuIGVhcmx5IHByZXZlbnRpbmcgdGhlIGV2ZW50IGxpc3RlbmVy
IGZyb20gYmVpbmcgYWRkZWQKICAgLy8gJ2RvYycgaXMgZmV0Y2hlZCBhYm92ZQogICBpZiAoZG9j
KSB7CisgICAgLy8gRG9uJ3QgYWxsb3cgYWRkaW5nIGFuIGV2ZW50IGxpc3RlbmVyIGlmIHRoZSBk
b2N1bWVudCBpcyBzYW5kYm94ZWQKKyAgICAvLyB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJy4KKyAg
ICBpZiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgICBy
ZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBuc0NPTVB0cjxu
c0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgICBydiA9IGRvYy0+Tm9kZVByaW5jaXBh
bCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1Mo
cnYsIHJ2KTsKIAogICAgIGlmIChjc3ApIHsKICAgICAgIGJvb2wgaW5saW5lT0s7CiAgICAgICBy
diA9IGNzcC0+R2V0QWxsb3dzSW5saW5lU2NyaXB0KCZpbmxpbmVPSyk7CiAgICAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTEZvcm1FbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxG
b3JtRWxlbWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1F
bGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1l
bnQuY3BwCkBAIC04MCwxNiArODAsMTcgQEAKIAogI2luY2x1ZGUgIm1vekF1dG9Eb2NVcGRhdGUu
aCIKICNpbmNsdWRlICJuc0lIVE1MQ29sbGVjdGlvbi5oIgogCiAjaW5jbHVkZSAibnNJQ29uc3Ry
YWludFZhbGlkYXRpb24uaCIKIAogI2luY2x1ZGUgIm5zSURPTUhUTUxCdXR0b25FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiZG9tYmluZGluZ3MuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgog
CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiBzdGF0aWMgY29uc3QgaW50IE5TX0ZP
Uk1fQ09OVFJPTF9MSVNUX0hBU0hUQUJMRV9TSVpFID0gMTY7CiAKIHN0YXRpYyBjb25zdCBQUlVp
bnQ4IE5TX0ZPUk1fQVVUT0NPTVBMRVRFX09OICA9IDE7CiBzdGF0aWMgY29uc3QgUFJVaW50OCBO
U19GT1JNX0FVVE9DT01QTEVURV9PRkYgPSAwOwogCkBAIC02ODQsMTcgKzY4NSwyNSBAQCBuc0hU
TUxGb3JtRWxlbWVudDo6RG9TdWJtaXRPclJlc2V0KG5zRXZlCiAgICAgcmV0dXJuIERvUmVzZXQo
KTsKICAgfQogCiAgIGlmIChOU19GT1JNX1NVQk1JVCA9PSBhTWVzc2FnZSkgewogICAgIC8vIERv
bid0IHN1Ym1pdCBpZiB3ZSdyZSBub3QgaW4gYSBkb2N1bWVudC4KICAgICBpZiAoIWRvYykgewog
ICAgICAgcmV0dXJuIE5TX09LOwogICAgIH0KLSAgICByZXR1cm4gRG9TdWJtaXQoYUV2ZW50KTsK
KyAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgaW4gYSBzYW5kYm94ZWQgZnJhbWUgYW5kIGZv
cm0gc3VibWl0CisgICAgLy8gaXMgZGlzYWJsZWQuCisgICAgUFJVaW50MzIgc2FuZGJveEZsYWdz
ID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKworICAgIGlmICghKHNhbmRib3hGbGFncyAmIFNBTkRC
T1hFRF9GT1JNUykpIHsKKyAgICAgIHJldHVybiBEb1N1Ym1pdChhRXZlbnQpOworICAgIH0KKwor
ICAgIHJldHVybiBOU19PSzsKICAgfQogCiAgIE1PWl9BU1NFUlQoZmFsc2UpOwogICByZXR1cm4g
TlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0hUTUxGb3JtRWxlbWVudDo6RG9SZXNldCgpCkBAIC0x
Njg1LDE2ICsxNjk0LDI4IEBAIG5zSFRNTEZvcm1FbGVtZW50OjpDaGVja1ZhbGlkRm9ybVN1Ym1p
c3MKICAgICogVE9ETzogdGhlIGNoZWNrIGZvciBvYnNlcnZlciBzaG91bGQgYmUgcmVtb3ZlZCBs
YXRlciB3aGVuIEhUTUw1IEZvcm1zIHdpbGwKICAgICogYmUgc3ByZWFkIGVub3VnaCBhbmQgYXV0
aG9ycyB3aWxsIGFzc3VtZSBmb3JtcyBjYW4ndCBiZSBzdWJtaXR0ZWQgd2hlbgogICAgKiBpbnZh
bGlkLiBTZWUgYnVnIDU4NzY3MS4KICAgICovCiAKICAgTlNfQVNTRVJUSU9OKCFIYXNBdHRyKGtO
YW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6Om5vdmFsaWRhdGUpLAogICAgICAgICAgICAgICAg
IldlIHNob3VsZG4ndCBiZSB0aGVyZSBpZiBub3ZhbGlkYXRlIGlzIHNldCEiKTsKIAorICAvLyBE
b24ndCBkbyB2YWxpZGF0aW9uIGZvciBhIGZvcm0gc3VibWl0IGRvbmUgYnkgYSBzYW5kYm94ZWQg
ZG9jdW1lbnQgdGhhdAorICAvLyBkb2Vzbid0IGhhdmUgJ2FsbG93LWZvcm1zJywgdGhlIHN1Ym1p
dCB3aWxsIGhhdmUgYmVlbiBibG9ja2VkIGFuZCB0aGUKKyAgLy8gSFRNTDUgc3BlYyBzYXlzIHdl
IHNob3VsZG4ndCB2YWxpZGF0ZSBpbiB0aGlzIGNhc2UuCisgIG5zSURvY3VtZW50KiBkb2MgPSBH
ZXRDdXJyZW50RG9jKCk7CisgIGlmIChkb2MpIHsKKyAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3Mg
PSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hF
RF9GT1JNUykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisKICAgLy8gV2hlbiAu
c3VibWl0KCkgaXMgY2FsbGVkIGFFdmVudCA9IG5zbnVsbCBzbyB3ZSBjYW4gcmVseSBvbiB0aGF0
IHRvIGtub3cgaWYKICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGZv
cm0uCiAgIG5zQ09NUHRyPG5zSU9ic2VydmVyU2VydmljZT4gc2VydmljZSA9CiAgICAgbW96aWxs
YTo6c2VydmljZXM6OkdldE9ic2VydmVyU2VydmljZSgpOwogICBpZiAoIXNlcnZpY2UpIHsKICAg
ICBOU19XQVJOSU5HKCJObyBvYnNlcnZlciBzZXJ2aWNlIGF2YWlsYWJsZSEiKTsKICAgICByZXR1
cm4gdHJ1ZTsKICAgfQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRN
TElGcmFtZUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFt
ZUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVF
bGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxl
bWVudC5jcHAKQEAgLTMzLDczICszMywyMyBAQAogICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEg
cmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgogICogdGhl
IHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICAqCiAg
KiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVkZSAibW96aWxsYS9V
dGlsLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUg
Im5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01Eb2N1bWVudC5o
IgotI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NU1ZH
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRlICJuc0lEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIm5zRE9NRXJy
b3IuaCIKLSNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5o
IgorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1v
emlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCi1jbGFzcyBuc0hUTUxJRnJh
bWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLXsKLXB1Ymxp
YzoKLSAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBh
Tm9kZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFyc2Vy
IGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOwotICB2aXJ0dWFs
IH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7Ci0KLSAgLy8gbnNJU3VwcG9ydHMKLSAgTlNfREVDTF9J
U1VQUE9SVFNfSU5IRVJJVEVECi0KLSAgLy8gbnNJRE9NTm9kZQotICBOU19GT1JXQVJEX05TSURP
TU5PREUobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUVsZW1lbnQK
LSAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikK
LQotICAvLyBuc0lET01IVE1MRWxlbWVudAotICBOU19GT1JXQVJEX05TSURPTUhUTUxFTEVNRU5U
KG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1MSUZyYW1lRWxl
bWVudAotICBOU19ERUNMX05TSURPTUhUTUxJRlJBTUVFTEVNRU5UCi0KLSAgLy8gbnNJRE9NR2V0
U1ZHRG9jdW1lbnQKLSAgTlNfREVDTF9OU0lET01HRVRTVkdET0NVTUVOVAotCi0gIC8vIG5zSUNv
bnRlbnQKLSAgdmlydHVhbCBib29sIFBhcnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVzcGFjZUlE
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpOwot
ICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBhQXR0
cmlidXRlKSBjb25zdDsKLSAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdldEF0
dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OwotCi0gIHZpcnR1YWwgbnNyZXN1bHQgQ2xv
bmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0OwotICB2
aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKLX07Ci0KLQogTlNfSU1QTF9O
U19ORVdfSFRNTF9FTEVNRU5UX0NIRUNLX1BBUlNFUihJRnJhbWUpCiAKLQogbnNIVE1MSUZyYW1l
RWxlbWVudDo6bnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZv
PiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZy
b21QYXJzZXIgYUZyb21QYXJzZXIpCiAgIDogbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudChhTm9k
ZUluZm8sIGFGcm9tUGFyc2VyKQogewogfQogCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojp+bnNIVE1M
SUZyYW1lRWxlbWVudCgpCiB7CkBAIC0xMzEsMTYgKzgxLDE3IEBAIE5TX0lNUExfU1RSSU5HX0FU
VFIobnNIVE1MSUZyYW1lRWxlbWVudCwKIE5TX0lNUExfVVJJX0FUVFIobnNIVE1MSUZyYW1lRWxl
bWVudCwgTG9uZ0Rlc2MsIGxvbmdkZXNjKQogTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJh
bWVFbGVtZW50LCBNYXJnaW5IZWlnaHQsIG1hcmdpbmhlaWdodCkKIE5TX0lNUExfU1RSSU5HX0FU
VFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTWFyZ2luV2lkdGgsIG1hcmdpbndpZHRoKQogTlNfSU1Q
TF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBOYW1lLCBuYW1lKQogTlNfSU1QTF9T
VFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBTY3JvbGxpbmcsIHNjcm9sbGluZykKIE5T
X0lNUExfVVJJX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU3JjLCBzcmMpCiBOU19JTVBMX1NU
UklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFdpZHRoLCB3aWR0aCkKIE5TX0lNUExfQk9P
TF9BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE1vekFsbG93RnVsbFNjcmVlbiwgbW96YWxsb3dm
dWxsc2NyZWVuKQorTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBTYW5k
Ym94LCBzYW5kYm94KQogCiBOU19JTUVUSE9ESU1QCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRD
b250ZW50RG9jdW1lbnQobnNJRE9NRG9jdW1lbnQqKiBhQ29udGVudERvY3VtZW50KQogewogICBy
ZXR1cm4gbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6R2V0Q29udGVudERvY3VtZW50KGFDb250
ZW50RG9jdW1lbnQpOwogfQogCiBOU19JTUVUSE9ESU1QCkBAIC0yNjgsOCArMjE5LDM3IEBAIG5z
SFRNTElGcmFtZUVsZW1lbnQ6OklzQXR0cmlidXRlTWFwcGVkKGMKIAogCiBuc01hcFJ1bGVUb0F0
dHJpYnV0ZXNGdW5jCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRBdHRyaWJ1dGVNYXBwaW5nRnVu
Y3Rpb24oKSBjb25zdAogewogICByZXR1cm4gJk1hcEF0dHJpYnV0ZXNJbnRvUnVsZTsKIH0KIAor
bnNyZXN1bHQKK25zSFRNTElGcmFtZUVsZW1lbnQ6OkFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1l
U3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhTm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0gbnNHa0F0b21zOjpz
YW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgeworICAgIC8vIFBh
cnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBhbmQgaWYgd2UgaGF2
ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFwcHJvcHJpYXRlbHku
CisgICAgaWYgKG1GcmFtZUxvYWRlcikgeworICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRv
Y3NoZWxsID0gbUZyYW1lTG9hZGVyLT5HZXRFeGlzdGluZ0RvY1NoZWxsKCk7CisKKyAgICAgIGlm
IChkb2NzaGVsbCkgeworICAgICAgICBQUlVpbnQzMiBuZXdGbGFncyA9IDA7CisgICAgICAgIC8v
IElmIGEgTlVMTCBhVmFsdWUgaXMgcGFzc2VkIGluLCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBzYW5k
Ym94IGZsYWdzCisgICAgICAgIC8vIHdoaWNoIHdlIHdpbGwgZG8gYnkgc2V0dGluZyB0aGVtIHRv
IDAuCisgICAgICAgIGlmIChhVmFsdWUpIHsKKyAgICAgICAgICBuc0F1dG9TdHJpbmcgc3RyVmFs
dWU7CisgICAgICAgICAgYVZhbHVlLT5Ub1N0cmluZyhzdHJWYWx1ZSk7CisgICAgICAgICAgbmV3
RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncygKKyAg
ICAgICAgICAgIHN0clZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBkb2NzaGVsbC0+U2V0U2Fu
ZGJveEZsYWdzKG5ld0ZsYWdzKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIG5zR2Vu
ZXJpY0hUTUxFbGVtZW50OjpBZnRlclNldEF0dHIoYU5hbWVTcGFjZUlELCBhTmFtZSwgYVZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTm90aWZ5KTsK
KworfQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVs
ZW1lbnQuaCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29u
dGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKiAtKi0g
TW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1v
ZmZzZXQ6IDIgLSotICovCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBW
ZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2Yg
dGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNp
b24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisg
KgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0
aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxsYSBDb21t
dW5pY2F0b3IgY2xpZW50IGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRo
ZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlv
bi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5
cmlnaHQgKEMpIDE5OTgKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUg
Y29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICog
ZWl0aGVyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0
ZXIgKHRoZSAiR1BMIiksCisgKiBvciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2Ug
dGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0
ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIg
dmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0
aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGlj
YXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyBy
ZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICog
dGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhl
IEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAq
LworCisjaW5jbHVkZSAibW96aWxsYS9VdGlsLmgiCisKKyNpbmNsdWRlICJuc0lET01IVE1MSUZy
YW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxFbGVtZW50LmgiCisjaW5jbHVk
ZSAibnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zSURPTURvY3VtZW50
LmgiCisjaW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01T
VkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zR2tBdG9tcy5oIgorI2luY2x1ZGUgIm5zSURvY3Vt
ZW50LmgiCisjaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAibnNET01F
cnJvci5oIgorI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIKKyNpbmNsdWRlICJuc1N0eWxlQ29uc3Rz
LmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKKworY2xhc3MgbnNIVE1MSUZyYW1lRWxl
bWVudCA6IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgcHVibGljIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUdldFNWR0RvY3VtZW50Cit7CitwdWJsaWM6Cisg
IG5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJ
bmZvLAorICAgICAgICAgICAgICAgICAgICAgIG1vemlsbGE6OmRvbTo6RnJvbVBhcnNlciBhRnJv
bVBhcnNlciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZST01fUEFSU0VSKTsKKyAgdmlydHVhbCB+bnNI
VE1MSUZyYW1lRWxlbWVudCgpOworCisgIC8vIG5zSVN1cHBvcnRzCisgIE5TX0RFQ0xfSVNVUFBP
UlRTX0lOSEVSSVRFRAorCisgIC8vIG5zSURPTU5vZGUKKyAgTlNfRk9SV0FSRF9OU0lET01OT0RF
KG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKKworICAvLyBuc0lET01FbGVtZW50CisgIE5T
X0ZPUldBUkRfTlNJRE9NRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAg
Ly8gbnNJRE9NSFRNTEVsZW1lbnQKKyAgTlNfRk9SV0FSRF9OU0lET01IVE1MRUxFTUVOVChuc0dl
bmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQK
KyAgTlNfREVDTF9OU0lET01IVE1MSUZSQU1FRUxFTUVOVAorCisgIC8vIG5zSURPTUdldFNWR0Rv
Y3VtZW50CisgIE5TX0RFQ0xfTlNJRE9NR0VUU1ZHRE9DVU1FTlQKKworICAvLyBuc0lDb250ZW50
CisgIHZpcnR1YWwgYm9vbCBQYXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KTsKKyAgTlNf
SU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1dGVNYXBwZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0
ZSkgY29uc3Q7CisgIHZpcnR1YWwgbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1
dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdDsKKworICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5z
SU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5vZGUgKiphUmVzdWx0KSBjb25zdDsKKyAgdmlydHVh
bCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xhc3NJbmZvKCk7CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBB
ZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQXR0clZhbHVlKiBhVmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhTm90aWZ5KTsKKworICBQUlVp
bnQzMiBHZXRTYW5kYm94RmxhZ3MoKSB7CisgICAgbnNBdXRvU3RyaW5nIHNhbmRib3hBdHRyOwor
CisgICAgaWYgKEdldEF0dHIoa05hbWVTcGFjZUlEX05vbmUsIG5zR2tBdG9tczo6c2FuZGJveCwg
c2FuZGJveEF0dHIpKSB7CisgICAgICByZXR1cm4gbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJv
eEF0dHJpYnV0ZVRvRmxhZ3Moc2FuZGJveEF0dHIpOworICAgIH0KKworICAgIC8vIE5vIHNhbmRi
b3ggYXR0cmlidXRlLCBubyBzYW5kYm94IGZsYWdzLgorICAgIHJldHVybiAwOworICB9CisKKyAg
c3RhdGljIG5zSFRNTElGcmFtZUVsZW1lbnQqIEZyb21Db250ZW50KG5zSUNvbnRlbnQgKmFDb250
ZW50KQorICB7CisgICAgaWYgKGFDb250ZW50LT5Jc0hUTUwobnNHa0F0b21zOjppZnJhbWUpKQor
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG5zSFRNTElGcmFtZUVsZW1lbnQqPihhQ29udGVudCk7
CisgICAgcmV0dXJuIG5zbnVsbDsKKyAgfQorfTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9k
b2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwIGIvY29udGVudC9odG1sL2RvY3VtZW50L3Ny
Yy9uc0hUTUxEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hU
TUxEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1
bWVudC5jcHAKQEAgLTEzMSwxNiArMTMxLDE3IEBACiAjaW5jbHVkZSAicHJwcmYuaCIKICNpbmNs
dWRlICJtb3ppbGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNl
cy5oIgogI2luY2x1ZGUgIm5zTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAibnNJUmVxdWVzdC5oIgog
I2luY2x1ZGUgIm5zSHRtbDVUcmVlT3BFeGVjdXRvci5oIgogI2luY2x1ZGUgIm5zSHRtbDVQYXJz
ZXIuaCIKICNpbmNsdWRlICJuc0lET01KU1dpbmRvdy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZs
YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemls
bGE6OmRvbTsKIAogI2RlZmluZSBOU19NQVhfRE9DVU1FTlRfV1JJVEVfREVQVEggMjAKIAogI2lu
Y2x1ZGUgInBybWVtLmgiCiAjaW5jbHVkZSAicHJ0aW1lLmgiCkBAIC0xMjQ5LDE2ICsxMjUwLDIx
IEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3RyaW5nJiBhQ28KIHsKICAgYUNvb2tp
ZS5UcnVuY2F0ZSgpOyAvLyBjbGVhciBjdXJyZW50IGNvb2tpZSBpbiBjYXNlIHNlcnZpY2UgZmFp
bHM7CiAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gY29va2llIGlzbid0IGFuIGVycm9yIGNv
bmRpdGlvbi4KIAogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNf
T0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcg
aXMgc2V0LCBhY2Nlc3MgdG8gcmVhZCBjb29raWVzCisgIC8vIGlzIHByb2hpYml0ZWQuCisgIGlm
IChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikKKyAgICByZXR1cm4gTlNfRVJST1Jf
RE9NX1NFQ1VSSVRZX0VSUjsKKwogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZpY2UgaXNu
J3QgYW4gZXJyb3IKICAgbnNDT01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9IGRvX0dl
dFNlcnZpY2UoTlNfQ09PS0lFU0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZpY2UpIHsK
ICAgICAvLyBHZXQgYSBVUkkgZnJvbSB0aGUgZG9jdW1lbnQgcHJpbmNpcGFsLiBXZSB1c2UgdGhl
IG9yaWdpbmFsCiAgICAgLy8gY29kZWJhc2UgaW4gY2FzZSB0aGUgY29kZWJhc2Ugd2FzIGNoYW5n
ZWQgYnkgU2V0RG9tYWluCiAgICAgbnNDT01QdHI8bnNJVVJJPiBjb2RlYmFzZVVSSTsKICAgICBO
b2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhjb2RlYmFzZVVSSSkpOwogCkBA
IC0xMjc5LDE2ICsxMjg1LDIxIEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3RyaW5n
JiBhQ28KIAogTlNfSU1FVEhPRElNUAogbnNIVE1MRG9jdW1lbnQ6OlNldENvb2tpZShjb25zdCBu
c0FTdHJpbmcmIGFDb29raWUpCiB7CiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2VzcykgewogICAg
IHJldHVybiBOU19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRib3hlZCBv
cmlnaW4gZmxhZyBpcyBzZXQsIGFjY2VzcyB0byB3cml0ZSBjb29raWVzCisgIC8vIGlzIHByb2hp
Yml0ZWQuCisgIGlmIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikKKyAgICByZXR1
cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKwogICAvLyBub3QgaGF2aW5nIGEgY29va2ll
IHNlcnZpY2UgaXNuJ3QgYW4gZXJyb3IKICAgbnNDT01QdHI8bnNJQ29va2llU2VydmljZT4gc2Vy
dmljZSA9IGRvX0dldFNlcnZpY2UoTlNfQ09PS0lFU0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYg
KHNlcnZpY2UgJiYgbURvY3VtZW50VVJJKSB7CiAgICAgbnNDT01QdHI8bnNJUHJvbXB0PiBwcm9t
cHQ7CiAgICAgbnNDT01QdHI8bnNQSURPTVdpbmRvdz4gd2luZG93ID0gR2V0V2luZG93KCk7CiAg
ICAgaWYgKHdpbmRvdykgewogICAgICAgd2luZG93LT5HZXRQcm9tcHRlcihnZXR0ZXJfQWRkUmVm
cyhwcm9tcHQpKTsKICAgICB9CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmlu
IGIvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbgotLS0gYS9kb2NzaGVsbC9iYXNlL01ha2VmaWxl
LmluCisrKyBiL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4KQEAgLTExNiw5ICsxMTYsMTAgQEAg
Rk9SQ0VfU1RBVElDX0xJQiA9IDEKIAogaW5jbHVkZSAkKHRvcHNyY2RpcikvY29uZmlnL3J1bGVz
Lm1rCiAKIExPQ0FMX0lOQ0xVREVTICs9IFwKICAgLUkkKHNyY2RpcikvLi4vc2hpc3Rvcnkvc3Jj
IFwKICAgLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UgXAogICAtSSQodG9wc3JjZGlyKS9sYXlvdXQv
YmFzZSBcCiAgIC1JJCh0b3BzcmNkaXIpL3hwY29tL2RzIFwKKyAgLUkkKHRvcHNyY2RpcikvY29u
dGVudC9iYXNlL3NyYyBcCiAgICQoTlVMTCkKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNE
b2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxs
L2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcApA
QCAtMjE0LDE2ICsyMTQsMTcgQEAKICNpbmNsdWRlICJuc0lXZWJCcm93c2VyUHJpbnQuaCIKICNl
bmRpZgogCiAjaW5jbHVkZSAibnNQbHVnaW5FcnJvci5oIgogI2luY2x1ZGUgIm5zQ29udGVudFV0
aWxzLmgiCiAjaW5jbHVkZSAibnNDb250ZW50RXJyb3JzLmgiCiAjaW5jbHVkZSAibnNJQ2hhbm5l
bFBvbGljeS5oIgogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1
ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpbmNsdWRlICJuc1hVTEFwcEFQSS5oIgogCiAjaW5j
bHVkZSAibnNET01OYXZpZ2F0aW9uVGltaW5nLmgiCiAjaW5jbHVkZSAibnNJVGltZWRDaGFubmVs
LmgiCiAjaW5jbHVkZSAibW96aWxsYS9TdGFydHVwVGltZWxpbmUuaCIKIAogc3RhdGljIE5TX0RF
RklORV9DSUQoa0RPTVNjcmlwdE9iamVjdEZhY3RvcnlDSUQsCkBAIC03NDQsMTYgKzc0NSwxNyBA
QCBuc0RvY1NoZWxsOjpuc0RvY1NoZWxsKCk6CiAgICAgbUJ1c3lGbGFncyhCVVNZX0ZMQUdTX05P
TkUpLAogICAgIG1BcHBUeXBlKG5zSURvY1NoZWxsOjpBUFBfVFlQRV9VTktOT1dOKSwKICAgICBt
TG9hZFR5cGUoMCksCiAgICAgbU1hcmdpbldpZHRoKC0xKSwKICAgICBtTWFyZ2luSGVpZ2h0KC0x
KSwKICAgICBtSXRlbVR5cGUodHlwZUNvbnRlbnQpLAogICAgIG1QcmV2aW91c1RyYW5zSW5kZXgo
LTEpLAogICAgIG1Mb2FkZWRUcmFuc0luZGV4KC0xKSwKKyAgICBtU2FuZGJveEZsYWdzKDApLAog
ICAgIG1DcmVhdGVkKGZhbHNlKSwKICAgICBtQWxsb3dTdWJmcmFtZXModHJ1ZSksCiAgICAgbUFs
bG93UGx1Z2lucyh0cnVlKSwKICAgICBtQWxsb3dKYXZhc2NyaXB0KHRydWUpLAogICAgIG1BbGxv
d01ldGFSZWRpcmVjdHModHJ1ZSksCiAgICAgbUFsbG93SW1hZ2VzKHRydWUpLAogICAgIG1BbGxv
d0ROU1ByZWZldGNoKHRydWUpLAogICAgIG1BbGxvd1dpbmRvd0NvbnRyb2wodHJ1ZSksCkBAIC0y
OTM1LDE2ICsyOTM3LDczIEBAIG5zRG9jU2hlbGw6OkZpbmRJdGVtV2l0aE5hbWUoY29uc3QgUFJV
bmkKICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChmb3VuZEl0ZW0pIHsKICAgICAgICAgICAgIC8vIFdlIHJldHVybiBmb3VuZEl0ZW0gaGVy
ZSBldmVuIGlmIGl0J3Mgbm90IGFuIGFjdGl2ZQogICAgICAgICAgICAgLy8gaXRlbSBzaW5jZSBh
bGwgdGhlIG5hbWVzIHdlJ3ZlIGRlYWx0IHdpdGggc28gZmFyIGFyZQogICAgICAgICAgICAgLy8g
c3BlY2lhbCBjYXNlcyB0aGF0IHdlIHdvbid0IGJvdGhlciBsb29raW5nIGZvciBmdXJ0aGVyLgog
CisgICAgICAgICAgICAvLyBJZiBvdXIgZG9jdW1lbnQgaXMgc2FuZGJveGVkLCB3ZSBuZWVkIHRv
IGRvIHNvbWUgZXh0cmEgY2hlY2tzLgorICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdz
ID0gMDsKKworICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX0dldElu
dGVyZmFjZShhT3JpZ2luYWxSZXF1ZXN0b3IpOworCisgICAgICAgICAgICBpZiAoZG9jKSB7Cisg
ICAgICAgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MpIHsKKyAgICAgICAgICAgICAg
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiByb290OworICAgICAgICAgICAgICAgIEdl
dFNhbWVUeXBlUm9vdFRyZWVJdGVtKGdldHRlcl9BZGRSZWZzKHJvb3QpKTsKKworICAgICAgICAg
ICAgICAgIC8vIElzIHRoZSBmb3VuZCBpdGVtIG5vdCBhIHRvcCBsZXZlbCBicm93c2luZyBjb250
ZXh0IGFuZCBub3Qgb3Vyc2VsZiA/CisgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hl
bGxUcmVlSXRlbT4gc2VsZkFzSXRlbSA9IHN0YXRpY19jYXN0PG5zSURvY1NoZWxsVHJlZUl0ZW0g
Kj4odGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kSXRlbSAhPSByb290ICYmIGZvdW5k
SXRlbSAhPSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFyZSB3ZSBhbiBh
bmNlc3RvciBvZiB0aGUgZm91bmRJdGVtID8KKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0Fu
Y2VzdG9yID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hl
bGxUcmVlSXRlbT4gcGFyZW50QXNJdGVtOworICAgICAgICAgICAgICAgICAgICBHZXRTYW1lVHlw
ZVBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJlbnRBc0l0ZW0pKTsKKworICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAocGFyZW50QXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuc0NP
TVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0bXA7CisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJlbnRBc0l0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gc2VsZkFzSXRlbSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzQW5jZXN0b3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50QXNJdGVtID0gdG1wOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FuY2VzdG9yKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBObywgd2UgYXJlIG5vdCBhbiBhbmNlc3RvciBhbmQgb3VyIGRvY3VtZW50IGlz
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW5kYm94ZWQsIHdlIGNhbid0IGFsbG93IHRo
aXMuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAvLyBUb3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAtIGlzIGl0IGFuIGFuY2VzdG9yIG9m
IG91cnMgPworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVt
PiB0bXA7CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRS
ZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0bXApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgdG1wID09IGZvdW5kSXRlbSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYW5jZXN0b3IsIGFuZCB3ZSBhcmUgc2Fu
ZGJveGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBhbGxvdy10b3At
bmF2aWdhdGlvbiBpcyBzZXQsIHdlIGNhbid0IGFsbG93IHRoaXMuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FU
SU9OKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgdG1wLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IGZvdW5kSXRlbS5zd2FwKCpfcmV0dmFsKTsKICAgICAgICAgICAgIHJldHVybiBOU19PSzsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIEtlZXAgbG9va2luZwogICAgICAgICAKICAgICAvLyBG
aXJzdCB3ZSBjaGVjayBvdXIgbmFtZS4KQEAgLTQ5NzEsMTYgKzUwMzAsMzAgQEAgbnNEb2NTaGVs
bDo6U2V0SXNBcHBUYWIoYm9vbCBhSXNBcHBUYWIpCiBOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxs
OjpHZXRJc0FwcFRhYihib29sICphSXNBcHBUYWIpCiB7CiAgICphSXNBcHBUYWIgPSBtSXNBcHBU
YWI7CiAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6U2V0
U2FuZGJveEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCit7CisgIG1TYW5kYm94RmxhZ3Mg
PSBhU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25z
RG9jU2hlbGw6OkdldFNhbmRib3hGbGFncyhQUlVpbnQzMiAgKmFTYW5kYm94RmxhZ3MpCit7Cisg
ICphU2FuZGJveEZsYWdzID0gbVNhbmRib3hGbGFnczsKKyAgcmV0dXJuIE5TX09LOworfQorCitO
U19JTUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpTZXRWaXNpYmlsaXR5KGJvb2wgYVZpc2liaWxpdHkp
CiB7CiAgICAgaWYgKCFtQ29udGVudFZpZXdlcikKICAgICAgICAgcmV0dXJuIE5TX09LOwogICAg
IGlmIChhVmlzaWJpbGl0eSkgewogICAgICAgICBtQ29udGVudFZpZXdlci0+U2hvdygpOwogICAg
IH0KICAgICBlbHNlIHsKQEAgLTgxNzIsMTYgKzgyNDUsMjkgQEAgbnNEb2NTaGVsbDo6SW50ZXJu
YWxMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0
ZW0+IHRhcmdldEl0ZW07CiAgICAgICAgIEZpbmRJdGVtV2l0aE5hbWUoYVdpbmRvd1RhcmdldCwg
bnNudWxsLCB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKHRh
cmdldEl0ZW0pKTsKIAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gdGFyZ2V0RG9jU2hl
bGwgPSBkb19RdWVyeUludGVyZmFjZSh0YXJnZXRJdGVtKTsKICAgICAgICAgCiAgICAgICAgIGJv
b2wgaXNOZXdXaW5kb3cgPSBmYWxzZTsKICAgICAgICAgaWYgKCF0YXJnZXREb2NTaGVsbCkgewor
ICAgICAgICAgICAgLy8gSWYgdGhlIGRvY3NoZWxsJ3MgZG9jdW1lbnQgaXMgc2FuZGJveGVkIGFu
ZCB3YXMgdHJ5aW5nIHRvCisgICAgICAgICAgICAvLyBuYXZpZ2F0ZS9sb2FkIGEgZnJhbWUgaXQg
d2Fzbid0IGFsbG93ZWQgdG8gYWNjZXNzLCB0aGUKKyAgICAgICAgICAgIC8vIEZpbmRJdGVtV2l0
aE5hbWUgYWJvdmUgd2lsbCBoYXZlIHJldHVybmVkIG51bGwgZm9yIHRoZSB0YXJnZXQKKyAgICAg
ICAgICAgIC8vIGl0ZW0gLSB3ZSBkb24ndCB3YW50IHRvIGFjdHVhbGx5IG9wZW4gYSBuZXcgd2lu
ZG93IGluIHRoaXMgY2FzZQorICAgICAgICAgICAgLy8gdGhvdWdoLiBDaGVjayBpZiB3ZSBhcmUg
c2FuZGJveGVkIGFuZCBiYWlsIG91dCBoZXJlIGlmIHNvLgorICAgICAgICAgICAgTlNfRU5TVVJF
X1RSVUUobUNvbnRlbnRWaWV3ZXIsIE5TX0VSUk9SX0ZBSUxVUkUpOworICAgICAgICAgICAgbnNJ
RG9jdW1lbnQqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICAgICAgICAg
ICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKyAgICAgICAgICAgIHNhbmRib3hGbGFncyA9
IGRvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FO
REJPWEVEX05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxV
UkU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4g
d2luID0KICAgICAgICAgICAgICAgICBkb19HZXRJbnRlcmZhY2UoR2V0QXNTdXBwb3J0cyh0aGlz
KSk7CiAgICAgICAgICAgICBOU19FTlNVUkVfVFJVRSh3aW4sIE5TX0VSUk9SX05PVF9BVkFJTEFC
TEUpOwogCiAgICAgICAgICAgICBuc0RlcGVuZGVudFN0cmluZyBuYW1lKGFXaW5kb3dUYXJnZXQp
OwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiBuZXdXaW47CiAgICAgICAgICAg
ICBydiA9IHdpbi0+T3BlbihFbXB0eVN0cmluZygpLCAvLyBVUkwgdG8gbG9hZAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZSwgICAgICAgICAgLy8gd2luZG93IG5hbWUKQEAgLTg5NTks
MTggKzkwNDUsMzEgQEAgbnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAg
ICAgIH0KICAgICAgICAgLy8gU2V0IHRoZSByZWZlcnJlciBleHBsaWNpdGx5CiAgICAgICAgIGlm
IChhUmVmZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJlcikgewogICAgICAgICAgICAgLy8gUmVmZXJy
ZXIgaXMgY3VycmVubHkgb25seSBzZXQgZm9yIGxpbmsgY2xpY2tzIGhlcmUuCiAgICAgICAgICAg
ICBodHRwQ2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJlZmVycmVyVVJJKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWwoZG9fUXVlcnlJ
bnRlcmZhY2UoYU93bmVyKSk7Ci0gICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVy
KG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlKTsKKyAgICBuc0NPTVB0cjxuc0lQ
cmluY2lwYWw+IG93bmVyUHJpbmNpcGFsOworCisgICAgLy8gSWYgdGhlIGNvbnRlbnQgYmVpbmcg
bG9hZGVkIHNob3VsZCBiZSBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9yaWdpbgorICAgIC8v
IHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG51bGwgcHJpbmNpcGFsIGhlcmUsIGFuZCB0aGVuIHRl
bGwKKyAgICAvLyBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIgdG8gZm9yY2UgaXQg
dG8gYmUgc2V0IGFzIHRoZQorICAgIC8vIGNoYW5uZWwgb3duZXIuCisgICAgaWYgKG1TYW5kYm94
RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSB7CisgICAgICBvd25lclByaW5jaXBhbCA9IGRvX0Ny
ZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnVsbHByaW5jaXBhbDsxIik7CisgICAgfSBlbHNl
IHsKKyAgICAgIC8vIE5vdCBzYW5kYm94ZWQgLSB3ZSBhbGxvdyB0aGUgY29udGVudCB0byBhc3N1
bWUgaXRzIG5hdHVyYWwgb3duZXIuCisgICAgICBvd25lclByaW5jaXBhbCA9IGRvX1F1ZXJ5SW50
ZXJmYWNlKGFPd25lcik7CisgICAgfQorCisgICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5l
bE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJ
R0lOKSk7CiAKICAgICBuc0NPTVB0cjxuc0lTY3JpcHRDaGFubmVsPiBzY3JpcHRDaGFubmVsID0g
ZG9fUXVlcnlJbnRlcmZhY2UoY2hhbm5lbCk7CiAgICAgaWYgKHNjcmlwdENoYW5uZWwpIHsKICAg
ICAgICAgLy8gQWxsb3cgZXhlY3V0aW9uIGFnYWluc3Qgb3VyIGNvbnRleHQgaWYgdGhlIHByaW5j
aXBhbHMgbWF0Y2gKICAgICAgICAgc2NyaXB0Q2hhbm5lbC0+CiAgICAgICAgICAgICBTZXRFeGVj
dXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhFQ1VURV9OT1JNQUwpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmggYi9kb2NzaGVsbC9iYXNlL25z
RG9jU2hlbGwuaAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAorKysgYi9kb2NzaGVs
bC9iYXNlL25zRG9jU2hlbGwuaApAQCAtNzg0LDE2ICs3ODQsMTggQEAgcHJvdGVjdGVkOgogICAg
IC8vIENyZWF0ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUgaXMgbm90IGV4cGVjdGVkIHRvIGNoYW5n
ZS4KICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtSXRlbVR5cGU7CiAKICAgICAvLyBJ
bmRleCBpbnRvIHRoZSBTSFRyYW5zYWN0aW9uIGxpc3QsIGluZGljYXRpbmcgdGhlIHByZXZpb3Vz
IGFuZCBjdXJyZW50CiAgICAgLy8gdHJhbnNhY3Rpb24gYXQgdGhlIHRpbWUgdGhhdCB0aGlzIERv
Y1NoZWxsIGJlZ2lucyB0byBsb2FkCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbVBy
ZXZpb3VzVHJhbnNJbmRleDsKICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtTG9hZGVk
VHJhbnNJbmRleDsKIAorICAgIFBSVWludDMyICAgICAgICAgICAgICAgICAgIG1TYW5kYm94Rmxh
Z3M7CisKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQ3JlYXRlZDsKICAgICBib29s
ICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJmcmFtZXM7CiAgICAgYm9vbCAgICAgICAg
ICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAgICBib29sICAgICAgICAgICAgICAgICAg
ICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1B
bGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93
SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ROU1ByZWZldGNo
OwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1dpbmRvd0NvbnRyb2w7CmRp
ZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbCBiL2RvY3NoZWxsL2Jhc2Uv
bnNJRG9jU2hlbGwuaWRsCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCisrKyBi
L2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCkBAIC02NywxNyArNjcsMTcgQEAgaW50ZXJm
YWNlIG5zSVJlcXVlc3Q7CiBpbnRlcmZhY2UgbnNJU0hFbnRyeTsKIGludGVyZmFjZSBuc0lMYXlv
dXRIaXN0b3J5U3RhdGU7CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJvd3NlclVJOwogaW50ZXJmYWNl
IG5zSURPTVN0b3JhZ2U7CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsOwogaW50ZXJmYWNlIG5zSVdl
YkJyb3dzZXJQcmludDsKIGludGVyZmFjZSBuc0lWYXJpYW50OwogCi1bc2NyaXB0YWJsZSwgdXVp
ZChjNzMyNTQyMi04MTdlLTQzMjEtOTU3YS1jMGJkZDc2NDk0MWQpXQorW3NjcmlwdGFibGUsIHV1
aWQoOWIyODMzMzctMDk3ZC00ZmE4LWEyZGEtOTE2MzE4ZWFmODI4KV0KIGludGVyZmFjZSBuc0lE
b2NTaGVsbCA6IG5zSVN1cHBvcnRzCiB7CiAgIC8qKgogICAgKiBMb2FkcyBhIGdpdmVuIFVSSS4g
IFRoaXMgd2lsbCBnaXZlIHByaW9yaXR5IHRvIGxvYWRpbmcgdGhlIHJlcXVlc3RlZCBVUkkKICAg
ICogaW4gdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcJdGhpcyBpbnRlcmZhY2UuICBJZiBpdCBjYW4n
dCBiZSBsb2FkZWQgaGVyZQogICAgKiBob3dldmVyLCB0aGUgVVJMIGRpc3BhdGNoZXIgd2lsbCBn
byB0aHJvdWdoIGl0cyBub3JtYWwgcHJvY2VzcyBvZiBjb250ZW50CiAgICAqIGxvYWRpbmcuCiAg
ICAqCkBAIC02MTUsOSArNjE1LDIzIEBAIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBv
cnRzCiAgICAqLwogICBhdHRyaWJ1dGUgYm9vbCBpc0Jyb3dzZXJGcmFtZTsKIAogICAvKgogICAg
KiBJcyB0aGlzIGRvY3NoZWxsIGNvbnRhaW5lZCBpbiBhbiA8aWZyYW1lIG1vemJyb3dzZXI+LCBl
aXRoZXIgZGlyZWN0bHkgb3IKICAgICogaW5kaXJlY3RseT8KICAgICovCiAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBib29sIGNvbnRhaW5lZEluQnJvd3NlckZyYW1lOworCisgIC8qKgorICAgKiBUaGUg
c2FuZGJveCBmbGFncyBvbiB0aGUgZG9jc2hlbGwuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9m
IHRoZSBzYW5kYm94CisgICAqIGF0dHJpYnV0ZSBvZiB0aGUgYXNzb2NpYXRlZCBJRlJBTUUgb3Ig
Q1NQLXByb3RlY3RhYmxlIGNvbnRlbnQsIGlmCisgICAqIGV4aXN0ZW50LiBTZWUgdGhlIEhUTUw1
IHNwZWMgZm9yIG1vcmUgZGV0YWlscy4KKyAgICogVGhlc2UgZmxhZ3Mgb24gdGhlIGRvY3NoZWxs
IHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRl
LCB3aGljaCBpcyBtb2RpZmlhYmxlLiBUaGV5IGFyZSBvbmx5IHVzZWQgd2hlbiBsb2FkaW5nIG5l
dworICAgKiBjb250ZW50LCBzYW5kYm94IGZsYWdzIGFyZSBhbHNvIGltbXV0YWJseSBzZXQgb24g
dGhlIGRvY3VtZW50IHdoZW4gaXQgaXMKKyAgICogbG9hZGVkLgorICAgKiBUaGUgc2FuZGJveCBm
bGFncyBvZiBhIGRvY3VtZW50IGRlcGVuZCBvbiB0aGUgc2FuZGJveCBmbGFncyBvbiBpdHMKKyAg
ICogZG9jc2hlbGwgYW5kIG9mIGl0cyBwYXJlbnQgZG9jdW1lbnQsIGlmIGFueS4KKyAgICogU2Vl
IG5zU2FuZGJveEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgICovCisgIGF0dHJp
YnV0ZSB1bnNpZ25lZCBsb25nIHNhbmRib3hGbGFnczsKIH07CmRpZmYgLS1naXQgYS9kb20vYmFz
ZS9uc0dsb2JhbFdpbmRvdy5jcHAgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKLS0tIGEv
ZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCisrKyBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93
LmNwcApAQCAtMjU1LDE2ICsyNTUsMTcgQEAKIAogI2luY2x1ZGUgIm5zUmVmcmVzaERyaXZlci5o
IgogI2luY2x1ZGUgIm1vekF1dG9Eb2NVcGRhdGUuaCIKIAogI2luY2x1ZGUgIm1vemlsbGEvVGVs
ZW1ldHJ5LmgiCiAjaW5jbHVkZSAibnNMb2NhdGlvbi5oIgogI2luY2x1ZGUgIm5zV3JhcHBlckNh
Y2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIm5zRE9NRXZlbnRUYXJnZXRIZWxwZXIuaCIKKyNpbmNs
dWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZkZWYgQU5EUk9JRAogI2luY2x1ZGUgPGFuZHJv
aWQvbG9nLmg+CiAjZW5kaWYKIAogI2lmZGVmIFBSX0xPR0dJTkcKIHN0YXRpYyBQUkxvZ01vZHVs
ZUluZm8qIGdET01MZWFrUFJMb2c7CiAjZW5kaWYKQEAgLTgyMzEsMTYgKzgyMzIsMjIgQEAgbnNH
bG9iYWxXaW5kb3c6OkdldFNlc3Npb25TdG9yYWdlKG5zSURPTQogICBpZiAoIW1TZXNzaW9uU3Rv
cmFnZSkgewogICAgICphU2Vzc2lvblN0b3JhZ2UgPSBuc251bGw7CiAKICAgICBuc1N0cmluZyBk
b2N1bWVudFVSSTsKICAgICBpZiAobURvY3VtZW50KSB7CiAgICAgICBtRG9jdW1lbnQtPkdldERv
Y3VtZW50VVJJKGRvY3VtZW50VVJJKTsKICAgICB9CiAKKyAgICAvLyBJZiB0aGUgZG9jdW1lbnQg
aGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgLy8gZG9uJ3QgYWxsb3cgYWNj
ZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAgICBpZiAobURvYyAmJiAobURvYy0+U2FuZGJveEZsYWdz
KCkgJiBTQU5EQk9YRURfT1JJR0lOKSkgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNV
UklUWV9FUlI7CisgICAgfQorCiAgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2Vzc2lv
blN0b3JhZ2VGb3JQcmluY2lwYWwocHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50VVJJLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0dGVyX0FkZFJlZnMobVNlc3Npb25TdG9yYWdlKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1Mo
cnYsIHJ2KTsKIAogI2lmZGVmIFBSX0xPR0dJTkcKICAgICBpZiAoUFJfTE9HX1RFU1QoZ0RPTUxl
YWtQUkxvZywgUFJfTE9HX0RFQlVHKSkgewpAQCAtODI5MiwxNiArODI5OSwyMiBAQCBuc0dsb2Jh
bFdpbmRvdzo6R2V0TG9jYWxTdG9yYWdlKG5zSURPTVN0CiAgICAgICBkb19HZXRTZXJ2aWNlKCJA
bW96aWxsYS5vcmcvZG9tL3N0b3JhZ2VtYW5hZ2VyOzEiLCAmcnYpOwogICAgIE5TX0VOU1VSRV9T
VUNDRVNTKHJ2LCBydik7CiAKICAgICBuc1N0cmluZyBkb2N1bWVudFVSSTsKICAgICBpZiAobURv
Y3VtZW50KSB7CiAgICAgICBtRG9jdW1lbnQtPkdldERvY3VtZW50VVJJKGRvY3VtZW50VVJJKTsK
ICAgICB9CiAKKyAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2lu
IGZsYWcgc2V0CisgICAgLy8gZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAg
ICBpZiAobURvYyAmJiAobURvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfT1JJR0lOKSkg
eworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAg
cnYgPSBzdG9yYWdlTWFuYWdlci0+R2V0TG9jYWxTdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBh
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVf
U1VDQ0VTUyhydiwgcnYpOwogICB9CiAKICAgTlNfQUREUkVGKCphTG9jYWxTdG9yYWdlID0gbUxv
Y2FsU3RvcmFnZSk7CiAgIHJldHVybiBOU19PSzsKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZhY2Vz
L2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9u
c0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lE
T01IVE1MSUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01I
VE1MSUZyYW1lRWxlbWVudC5pZGwKQEAgLTQ1LDMyICs0NSwzMiBAQAogICoKICAqIFRoaXMgaW50
ZXJmYWNlIGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lmaWNh
dGlvbjoKICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgogICog
d2l0aCBjaGFuZ2VzIGZyb20gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgV0hBVFdHIEhUTUwgc3BlY2lm
aWNhdGlvbjoKICAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50
LXdvcmsvCiAgKi8KIAotW3NjcmlwdGFibGUsIHV1aWQoOTdFNEYwRTEtQkQyNy00MEVDLTkyODct
NTYzNERBRjE1QjczKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDUyZjYyNDRiLWIxZjUtNGY0Yy04ZmYz
LTdlMTQ2MzE2ZjQxMSldCiBpbnRlcmZhY2UgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgOiBuc0lE
T01IVE1MRWxlbWVudAogewogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBh
bGlnbjsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgZnJhbWVCb3JkZXI7
CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGhlaWdodDsKICAgICAgICAg
ICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbG9uZ0Rlc2M7CiAgICAgICAgICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbkhlaWdodDsKICAgICAgICAgICAgYXR0cmlidXRl
IERPTVN0cmluZyAgICAgICAgbWFyZ2luV2lkdGg7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgICAgICAgIG5hbWU7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAg
IHNjcm9sbGluZzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc3JjOwog
ICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB3aWR0aDsKICAgLy8gSW50cm9k
dWNlZCBpbiBET00gTGV2ZWwgMjoKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTURvY3VtZW50
ICAgY29udGVudERvY3VtZW50OwogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NV2luZG93ICAg
ICBjb250ZW50V2luZG93OwogCi0KKyAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAg
ICAgc2FuZGJveDsKICAgLy8gTW96aWxsYSBleHRlbnNpb25zCiAgIC8vIGlmcmFtZSBlbGVtZW50
cyByZXF1aXJlIHRoZSBtb3pBbGxvd0Z1bGxTY3JlZW4gYXR0cmlidXRlIHRvIGJlIHByZXNlbnQK
ICAgLy8gaWYgdGhleSdyZSB0byBhbGxvdyBjb250ZW50IGluIHRoZSBzdWIgZG9jdW1lbnQgdG8g
Z28gaW50byBET00gZnVsbC1zY3JlZW4KICAgLy8gbW9kZS4gU2VlIGh0dHBzOi8vd2lraS5tb3pp
bGxhLm9yZy9pbmRleC5waHA/dGl0bGU9R2Vja286RnVsbFNjcmVlbkFQSQogICAgICAgICAgICBh
dHRyaWJ1dGUgYm9vbGVhbiAgICAgICAgICBtb3pBbGxvd0Z1bGxTY3JlZW47CiB9OwpkaWZmIC0t
Z2l0IGEvZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbiBiL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUu
aW4KLS0tIGEvZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbgorKysgYi9kb20vc3JjL2pzdXJsL01h
a2VmaWxlLmluCkBAIC01NywxNiArNTcsMTcgQEAgWFBJRExTUkNTCT0gXAogQ1BQU1JDUwkJPSBu
c0pTUHJvdG9jb2xIYW5kbGVyLmNwcAogCiBFWFBPUlRTCQk9ICQoc3JjZGlyKS9uc0pTUHJvdG9j
b2xIYW5kbGVyLmgKIAogTE9DQUxfSU5DTFVERVMgKz0gXAogCQktSSQoc3JjZGlyKSBcCiAJCS1J
JCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKIAkJLUkkKHRvcHNyY2RpcikvbmV0d2Vyay9iYXNlL3Ny
YyBcCisJCS1JJCh0b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9zcmMgXAogCiBpZmRlZiBCVUlMRF9E
RUJVR19HQwogREVGSU5FUwkJKz0gLURERUJVR19HQwogZW5kaWYKIAogRElSUyAgICAgICAgICAg
ID0gJChOVUxMKQogVEVTVF9ESVJTICs9IHRlc3QKIApkaWZmIC0tZ2l0IGEvZG9tL3NyYy9qc3Vy
bC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcCBiL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFu
ZGxlci5jcHAKLS0tIGEvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcAorKysg
Yi9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwCkBAIC03NCwxNiArNzQsMTcg
QEAKICNpbmNsdWRlICJuc1RocmVhZFV0aWxzLmgiCiAjaW5jbHVkZSAibnNJSlNDb250ZXh0U3Rh
Y2suaCIKICNpbmNsdWRlICJuc0lTY3JpcHRDaGFubmVsLmgiCiAjaW5jbHVkZSAibnNJRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJuc0lPYmplY3RJbnB1dFN0cmVhbS5oIgogI2luY2x1ZGUgIm5zSU9i
amVjdE91dHB1dFN0cmVhbS5oIgogI2luY2x1ZGUgIm5zSVdyaXRhYmxlUHJvcGVydHlCYWcyLmgi
CiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSAibnNTYW5k
Ym94RmxhZ3MuaCIKIAogc3RhdGljIE5TX0RFRklORV9DSUQoa0pTVVJJQ0lELCBOU19KU1VSSV9D
SUQpOwogCiBjbGFzcyBuc0pTVGh1bmsgOiBwdWJsaWMgbnNJSW5wdXRTdHJlYW0KIHsKIHB1Ymxp
YzoKICAgICBuc0pTVGh1bmsoKTsKIApAQCAtMjIwLDE2ICsyMjEsMjggQEAgbnNyZXN1bHQgbnNK
U1RodW5rOjpFdmFsdWF0ZVNjcmlwdChuc0lDaAogICAgIC8vIEdldCB0aGUgZ2xvYmFsIG9iamVj
dCB3ZSBzaG91bGQgYmUgcnVubmluZyBvbi4KICAgICBuc0lTY3JpcHRHbG9iYWxPYmplY3QqIGds
b2JhbCA9IEdldEdsb2JhbE9iamVjdChhQ2hhbm5lbCk7CiAgICAgaWYgKCFnbG9iYWwpIHsKICAg
ICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAgICAgfQogCiAgICAgbnNDT01QdHI8bnNQ
SURPTVdpbmRvdz4gd2luKGRvX1F1ZXJ5SW50ZXJmYWNlKGdsb2JhbCkpOwogCisgICAgLy8gU2Fu
ZGJveGVkIGRvY3VtZW50IGNoZWNrOiBqYXZhc2NyaXB0OiBVUkkncyBhcmUgZGlzYWJsZWQKKyAg
ICAvLyBpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB1bmxlc3MgJ2FsbG93LXNjcmlwdHMnIHdhcyBz
cGVjaWZpZWQKKworICAgIC8vIFJFVklFVyAtIGl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGlu
bmVyIHdpbmRvdyB3b3VsZCBiZSB0aGUgb25lCisgICAgLy8gdGhhdCB3aWxsIGV4ZWN1dGUgdGhl
IGphdmFzY3JpcHQgd2l0aCBpdHMgcHJpbmNpcGFsIC0gaXMgdGhpcworICAgIC8vIGFzc3VtcHRp
b24gY29ycmVjdCA/PyAoYW5kIGlzIEdldEV4dGFudERvY3VtZW50KCkgdGhlIHJpZ2h0IHdheQor
ICAgIC8vIHRvIGdldCB0aGUgcmlnaHQgZG9jdW1lbnQgPz8KKyAgICBuc0NPTVB0cjxuc0lEb2N1
bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoYU9yaWdpbmFsSW5uZXJXaW5kb3ctPkdldEV4
dGFudERvY3VtZW50KCkpOworICAgIGlmIChkb2MgJiYgKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBT
QU5EQk9YRURfU0NSSVBUUykpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fUkVUVkFMX1VO
REVGSU5FRDsKKyAgICB9CisKICAgICAvLyBQdXNoIG91ciBwb3B1cCBjb250cm9sIHN0YXRlCiAg
ICAgbnNBdXRvUG9wdXBTdGF0ZVB1c2hlciBwb3B1cFN0YXRlUHVzaGVyKHdpbiwgYVBvcHVwU3Rh
dGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgdGhlIHNhbWUgaW5uZXIgd2lu
ZG93IGFzIHdlIHVzZWQgdG8uCiAgICAgbnNQSURPTVdpbmRvdyAqaW5uZXJXaW4gPSB3aW4tPkdl
dEN1cnJlbnRJbm5lcldpbmRvdygpOwogCiAgICAgaWYgKGlubmVyV2luICE9IGFPcmlnaW5hbElu
bmVyV2luZG93KSB7CiAgICAgICAgIHJldHVybiBOU19FUlJPUl9VTkVYUEVDVEVEOwpkaWZmIC0t
Z2l0IGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4g
Yi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbgotLS0g
YS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbgorKysg
Yi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbgpAQCAt
NTYsMTEgKzU2LDEyIEBAIENQUFNSQ1MJCSs9IG5zRGlhbG9nUGFyYW1CbG9jay5jcHAgXAogCQkg
ICAkKE5VTEwpCiBlbmRpZgogCiAjIHdlIGRvbid0IHdhbnQgdGhlIHNoYXJlZCBsaWIsIGJ1dCB3
ZSB3YW50IHRvIGZvcmNlIHRoZSBjcmVhdGlvbiBvZiBhCiAjIHN0YXRpYyBsaWIuCiBGT1JDRV9T
VEFUSUNfTElCID0gMQogCiAjIEZvciBuc0pTVXRpbHMKLUxPQ0FMX0lOQ0xVREVTICs9IC1JJCh0
b3BzcmNkaXIpL2RvbS9iYXNlCitMT0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3JjZGlyKS9kb20v
YmFzZSBcCisJCSAgLUkkKHRvcHNyY2RpcikvY29udGVudC9iYXNlL3NyYyBcCiAKIGluY2x1ZGUg
JCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawpkaWZmIC0tZ2l0IGEvZW1iZWRkaW5nL2NvbXBv
bmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcCBiL2VtYmVkZGluZy9j
b21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKLS0tIGEvZW1i
ZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcAor
KysgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNo
ZXIuY3BwCkBAIC04NiwxNiArODYsMTcgQEAKICNpbmNsdWRlICJuc1BJRE9NU3RvcmFnZS5oIgog
I2luY2x1ZGUgIm5zSVdpZGdldC5oIgogI2luY2x1ZGUgIm5zRm9jdXNNYW5hZ2VyLmgiCiAjaW5j
bHVkZSAibnNJUHJlc1NoZWxsLmgiCiAjaW5jbHVkZSAibnNQcmVzQ29udGV4dC5oIgogI2luY2x1
ZGUgIm5zQ29udGVudFV0aWxzLmgiCiAjaW5jbHVkZSAibnNJUHJlZkJyYW5jaC5oIgogI2luY2x1
ZGUgIm5zSVByZWZTZXJ2aWNlLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2lm
ZGVmIFVTRVdFQUtSRUZTCiAjaW5jbHVkZSAibnNJV2Vha1JlZmVyZW5jZS5oIgogI2VuZGlmCiAK
IHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogCiBzdGF0aWMgY29uc3QgY2hhciAqc0pTU3RhY2tD
b250cmFjdElEPSJAbW96aWxsYS5vcmcvanMveHBjL0NvbnRleHRTdGFjazsxIjsKQEAgLTYwMywx
NiArNjA0LDMzIEBAIG5zV2luZG93V2F0Y2hlcjo6T3BlbldpbmRvd0pTSW50ZXJuYWwobnMKICAg
fQogCiAgIGlmICghbmV3RG9jU2hlbGxJdGVtKSB7CiAgICAgLy8gV2UncmUgZ29pbmcgdG8gZWl0
aGVyIG9wZW4gdXAgYSBuZXcgd2luZG93IG91cnNlbHZlcyBvciBhc2sgYQogICAgIC8vIG5zSVdp
bmRvd1Byb3ZpZGVyIGZvciBvbmUuICBJbiBlaXRoZXIgY2FzZSwgd2UnbGwgd2FudCB0byBzZXQg
dGhlIHJpZ2h0CiAgICAgLy8gbmFtZSBvbiBpdC4KICAgICB3aW5kb3dOZWVkc05hbWUgPSB0cnVl
OwogCisgICAgLy8gSWYgdGhlIHBhcmVudCB0cnlpbmcgdG8gb3BlbiBhIG5ldyB3aW5kb3cgaXMg
c2FuZGJveGVkLAorICAgIC8vIHRoaXMgaXMgbm90IGFsbG93ZWQgYW5kIHdlIGZhaWwgaGVyZS4K
KyAgICBpZiAoYVBhcmVudCkgeworICAgICAgbnNDT01QdHI8bnNJRE9NRG9jdW1lbnQ+IGRvbWRv
YzsKKyAgICAgIGFQYXJlbnQtPkdldERvY3VtZW50KGdldHRlcl9BZGRSZWZzKGRvbWRvYykpOwor
ICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGRvbWRv
Yyk7CisKKyAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0g
MDsKKyAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKworICAgICAg
ICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAgICAgICBy
ZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKwogICAg
IC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHByb3ZpZGVyIGZv
ciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3BlbmluZyBhIGRpYWxv
ZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8vIGlmIHdlJ3Jl
IG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNocm9tZSBmbGFn
cyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVXaW4gPSBkb19R
dWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNocm9tZVdpbiAm
JgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9N
T0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hy
b21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>616649</attachid>
            <date>2012-04-19 10:38:34 -0700</date>
            <delta_ts>2012-05-04 16:49:03 -0700</delta_ts>
            <desc>iframe sandbox tests - general v5</desc>
            <filename>iframe_sandbox_tests_general</filename>
            <type>text/plain</type>
            <size>17574</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMDg4Nzg0OTRjNjBlZDNjNGI4OTBmMzc2Njc2
YzRmZDI2OGRkOTk5NAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KQEAgLTI5NiwxNiArMjk2LDI3IEBAIF9URVNUX0ZJTEVTID0gXAogCQlmaWxlX2Z1bGxz
Y3JlZW4tc3ZnLWVsZW1lbnQuaHRtbCBcCiAJCXRlc3RfbGlfYXR0cmlidXRlc19yZWZsZWN0aW9u
Lmh0bWwgXAogCQl0ZXN0X29sX2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9i
dWc2NTE5NTYuaHRtbCBcCiAJCXRlc3RfYnVnNjk0NTAzLmh0bWwgXAogCQl0ZXN0X29iamVjdF9w
bHVnaW5fbmF2Lmh0bWwgXAogCQl0ZXN0X2J1Zzc0MjAzMC5odG1sIFwKIAkJdGVzdF9idWc3NDI1
NDkuaHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sIFwKKwkJZmlsZV9p
ZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5o
dG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIFwKKwkJZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmNC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX2ZhaWwuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3Nh
bmRib3hfZm9ybV9wYXNzLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93
X2ZhaWwuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcyBcCisJCWZpbGVfaWZy
YW1lX3NhbmRib3hfZmFpbC5qcyBcCiAJCSQoTlVMTCkKIAogX0JST1dTRVJfVEVTVF9GSUxFUyA9
IFwKIAkJYnJvd3Nlcl9idWc2NDk3NzguanMgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sIFwKIAkJ
ZmlsZV9idWc2NDk3NzguaHRtbF5oZWFkZXJzXiBcCiAJCSQoTlVMTCkKIApkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sCkBAIC0wLDAgKzEsNDAg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRm
LTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMi
Pjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVm
PSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5k
b3cucGFyZW50LnBvc3RNZXNzYWdlKHtvazogcmVzdWx0LCBkZXNjOiBkZXNjfSwgIioiKTsKKyAg
fQorCisgIGZ1bmN0aW9uIGRvU3VibWl0KCkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdhX2Zvcm0nKS5zdWJtaXQoKTsKKyAgfQorCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAg
b2sodHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBi
ZSBhYmxlIHRvIHJ1biBpbmxpbmUgc2NyaXB0cyIpOworCisgICAgLy8gc2hvdWxkIG5vdCBiZSBh
bGxvd2VkIC0gZG9uJ3QgaGF2ZSBhbGxvdy1mb3JtcworICAgIHNlbmRNb3VzZUV2ZW50KHt0eXBl
OidjbGljayd9LCAnYV9idXR0b24nKTsKKworICAgIC8vIHRyaWdnZXIgdGhlIGphdmFzY3JpcHQ6
IHVybCB0ZXN0CisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhX2xpbmsnKTsK
KyAgfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0nZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNzLmpz
Jz48L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0nb2sodHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94ZWQg
d2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1biBzY3JpcHQgZnJvbSBldmVu
dCBsaXN0ZW5lcnMiKTtkb1N0dWZmKCk7Jz4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFs
bG93LXNjcmlwdHMiCisKKyAgPGZvcm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iZmlsZV9pZnJhbWVf
c2FuZGJveF9mb3JtX3Bhc3MuaHRtbCIgaWQ9ImFfZm9ybSI+CisgICAgRmlyc3QgbmFtZTogPGlu
cHV0IHR5cGU9InRleHQiIG5hbWU9ImZpcnN0bmFtZSI+CisgICAgTGFzdCBuYW1lOiA8aW5wdXQg
dHlwZT0idGV4dCIgbmFtZT0ibGFzdG5hbWUiPgorICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG9u
Y2xpY2s9ImRvU3VibWl0KCkiIGlkPSJhX2J1dHRvbiI+CisgIDwvZm9ybT4KKworICA8YSBocmVm
ID0gJ2phdmFzY3JpcHQ6b2sodHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1z
Y3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1biBzY3JpcHQgZnJvbSBqYXZhc2NyaXB0OiBVUkxz
Iik7JyBpZD0nYV9saW5rJz5jbGljayBtZTwvYT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5o
dG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYy
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbApAQCAtMCwwICsx
LDIyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90
ZXN0LmNzcyIvPgorCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cisg
IGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVzYykgeworICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3Nh
Z2Uoe29rOiByZXN1bHQsIGRlc2M6IG1lc3NhZ2V9LCAiKiIpOworICB9CisKKyAgZnVuY3Rpb24g
ZG9TdHVmZigpIHsKKyAgICBvayhmYWxzZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgV0lUSE9VVCBh
bGxvdy1zY3JpcHRzIHNob3VsZCBOT1QgYmUgYWJsZSB0byBydW4gaW5saW5lIHNjcmlwdHMiKTsK
KyAgfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0nZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpz
Jz48L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0nd2luZG93LnBhcmVudC5wb3N0bWVzc2FnZSh7b2s6
IGZhbHNlLCBkZXNjOiAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMgc2hv
dWxkIGJlIGFibGUgdG8gcnVuIHNjcmlwdCBmcm9tIGphdmFzY3JpcHQ6IFVSTHMifSwgIioiKTtk
b1N0dWZmKCk7Jz4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCBubyBwZXJtaXNzaW9ucworPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2NfaWYzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9u
dWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9j
X2lmMy5odG1sCkBAIC0wLDAgKzEsMjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVh
ZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYw
NDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9T
aW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgor
Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIGRv
U3VibWl0KCkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhX2Zvcm0nKS5zdWJtaXQo
KTsKKyAgfQorCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgLy8gdHJ5IGFuZCBzdWJtaXQg
dGhlIGZvcm0gLSB0aGlzIHNob3VsZCBzdWNjZWVkCisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6
J2NsaWNrJ30sICdhX2J1dHRvbicpOworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9T
dHVmZigpIj4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ct
Zm9ybXMiCisKKyAgPGZvcm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iZmlsZV9pZnJhbWVfc2FuZGJv
eF9mb3JtX3Bhc3MuaHRtbCIgaWQ9ImFfZm9ybSI+CisgICAgRmlyc3QgbmFtZTogPGlucHV0IHR5
cGU9InRleHQiIG5hbWU9ImZpcnN0bmFtZSI+CisgICAgTGFzdCBuYW1lOiA8aW5wdXQgdHlwZT0i
dGV4dCIgbmFtZT0ibGFzdG5hbWUiPgorICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG9uY2xpY2s9
ImRvU3VibWl0KCkiIGlkPSJhX2J1dHRvbiI+CisgIDwvZm9ybT4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmNC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2NfaWY0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbApA
QCAtMCwwICsxLDQyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgor
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9F
dmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0
ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKworPC9oZWFkPgor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRl
c2MpIHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKTsKKyAgfQor
CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgLy8gdHJ5IHRvIG9wZW4gYSBuZXcgd2luZG93
IHZpYSB0YXJnZXQ9Il9ibGFuayIsIHdpbmRvdy5vcGVuKCksIGFuZCBzaG93TW9kYWxEaWFsb2co
KQorICAgIC8vIHRoZSB3aW5kb3cgd2UgdHJ5IHRvIG9wZW4gY2xvc2VzIGl0c2VsZiBvbmNlIGl0
IG9wZW5zCisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICd0YXJnZXRfYmxhbmsn
KTsKKworICAgIC8vIFJFVklFVyA6IHdpbmRvdy5vcGVuIGluIGEgc2FuZGJveGVkIGRvY3VtZW50
IHRocm93cyBhbiBleGNlcHRpb24gOgorICAgIC8vIHNob3VsZCBpdCA/CisgICAgdHJ5IHsKKyAg
ICAgIHdpbmRvdy5vcGVuKCJmaWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93X2ZhaWwuaHRt
bCIpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICBvayh0cnVlLCAid2luZG93Lm9wZW4g
dGhyZXcgYSBKUyBleGNlcHRpb24gYW5kIHdhcyBub3QgYWxsb3dlZCIpOworICAgIH0KKworICAg
IC8vIFJFVklFVyA6IHdpbmRvdy5zaG93TW9kYWxEaWFsb2cgaW4gYSBzYW5kYm94ZWQgZG9jdW1l
bnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiA6CisgICAgLy8gc2hvdWxkIGl0ID8KKyAgICB0cnkgewor
ICAgICAgd2luZG93LnNob3dNb2RhbERpYWxvZygiZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dp
bmRvd19mYWlsLmh0bWwiKTsKKyAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICBvayh0cnVlLCAi
d2luZG93LnNob3dNb2RhbERpYWxvZyB0aHJldyBhIEpTIGV4Y2VwdGlvbiBhbmQgd2FzIG5vdCBh
bGxvd2VkIik7CisgICAgfQorICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigp
Ij4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1v
cmlnaW4iCisKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWls
Lmh0bWwiIHRhcmdldD0iX2JsYW5rIiBpZD0idGFyZ2V0X2JsYW5rIj5vcGVuIHdpbmRvdzwvYT4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfY19pZjUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1
ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIv
dGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5j
c3MiLz4KKworPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5j
dGlvbiBvayhyZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVz
dWx0LCBkZXNjKTsKKyAgfQorPC9zY3JpcHQ+Cis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+Cisg
IEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zYW1lLW9yaWdpbiIKKworICA8YSBocmVm
ID0gJ2phdmFzY3JpcHQ6b2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxs
b3ctc2NyaXB0cyBzaG91bGQgbm90IGJlIGFibGUgdG8gcnVuIHNjcmlwdCB3aXRoIGphdmFzY3Jp
cHQ6IFVSTHMiKTsnIGlkPSdhX2xpbmsnPmNsaWNrIG1lPC9hPgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2ZhaWwuanMgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
ZmFpbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzCkBAIC0wLDAgKzEs
MSBAQAorb2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0cyBz
aG91bGQgTk9UIGJlIGFibGUgdG8gcnVuIDxzY3JpcHQgc3JjPS4uLj4iKTsKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5U
ZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9q
YXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0
PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMv
U2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYo
KSI+CisgIEkgc2hvdWxkIE5PVCBiZSBsb2FkZWQgYnkgYSBmb3JtIHN1Ym1pdCBmcm9tIGEgc2Fu
ZGJveCB3aXRob3V0ICdhbGxvdy1mb3JtcycKKzwvYm9keT4KKzwvaHRtbD4KKworPHNjcmlwdD4K
KyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHtv
azogZmFsc2UsIGRlc2M6ICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctZm9ybXMg
c2hvdWxkIE5PVCBiZSBhYmxlIHRvIHN1Ym1pdCBmb3JtcyJ9LCAiKiIpOworICB9Cis8L3Njcmlw
dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwKQEAgLTAsMCArMSwxOSBA
QAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBl
PSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRl
c3QuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3Nz
IiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8Ym9keSBv
bkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgc2hvdWxkIGJlIGxvYWRlZCBieSBhIGZvcm0gc3VibWl0
IGZyb20gYSBzYW5kYm94IHdpdGggJ2FsbG93LWZvcm1zJworPC9ib2R5PgorPC9odG1sPgorCis8
c2NyaXB0PgorICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIHdpbmRvdy5wYXJlbnQucG9zdE1l
c3NhZ2Uoe29rOiB0cnVlLCBkZXNjOiAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LWZv
cm1zIHNob3VsZCBiZSBhYmxlIHRvIHN1Ym1pdCBmb3JtcyJ9LCAiKiIpOworICB9Cis8L3Njcmlw
dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93
X2ZhaWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWls
Lmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
ICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90
aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0
cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxl
c2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIv
PgorPC9oZWFkPgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgc2hvdWxkIE5PVCBi
ZSBvcGVuZWQgYnkgYSBzYW5kYm94ZWQgaWZyYW1lIHZpYSBhbnkgbWV0aG9kCis8L2JvZHk+Cis8
L2h0bWw+CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgY29uc29sZS5s
b2coImZpbGVfaWZyYW1lX3NhbmRib3hfd2luZG93X29wZW5fZmFpbC5odG1sIik7CisgICAgd2lu
ZG93Lm9wZW5lci5vayhmYWxzZSwgInNhbmRib3hlZCBkb2N1bWVudHMgc2hvdWxkIE5PVCBiZSBh
YmxlIHRvIG9wZW4gd2luZG93cyIpOworICAgIHNlbGYuY2xvc2UoKTsKKyAgfQorPC9zY3JpcHQ+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3Bhc3MuanMgYi9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9wYXNzLmpzCkBAIC0wLDAgKzEsMSBAQAorb2sodHJ1ZSwgImRvY3VtZW50cyBz
YW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1biA8c2NyaXB0
IHNyYz0uLi4+Iik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbCBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sCkBAIC0wLDAgKzEs
MTM5IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8IS0tDQoraHR0cHM6Ly9idWd6aWxs
YS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1IHNh
bmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzIC0gZ2VuZXJhbCB0ZXN0cw0KKy0tPg0KKzxoZWFk
Pg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2
MDQ8L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9
Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0Pg0KKyAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5q
cyI+PC9zY3JpcHQ+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5
cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KKy8qKiBUZXN0IGZvciBCdWcgMzQxNjA0IC0g
SW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzIC0gZ2VuZXJhbCB0
ZXN0cyAqKi8NCisNCisvLyBhIHBvc3RNZXNzYWdlIGhhbmRsZXIgdGhhdCBpcyB1c2VkIGJ5IHNh
bmRib3hlZCBpZnJhbWVzIHdpdGhvdXQNCisvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIHRvIGNvbW11
bmljYXRlIHBhc3MvZmFpbCBiYWNrIHRvIHRoaXMgbWFpbiBwYWdlLg0KKy8vIGl0IGV4cGVjdHMg
dG8gYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNjOg0K
Ky8vIDxkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0byBv
aygpDQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwg
ZmFsc2UpOw0KKw0KK2Z1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KQ0KK3sNCisgIG9rX3dy
YXBwZXIoZXZlbnQuZGF0YS5vaywgZXZlbnQuZGF0YS5kZXNjKTsNCit9DQorDQordmFyIGNvbXBs
ZXRlZFRlc3RzID0gMDsNCit2YXIgcGFzc2VkVGVzdHMgPSAwOw0KKw0KK2Z1bmN0aW9uIG9rX3dy
YXBwZXIocmVzdWx0LCBkZXNjKSB7DQorICBvayhyZXN1bHQsIGRlc2MpOw0KKw0KKyAgY29tcGxl
dGVkVGVzdHMrKzsNCisNCisgIGlmIChyZXN1bHQpIHsNCisgICAgcGFzc2VkVGVzdHMrKzsNCisg
IH0NCisNCisgIC8vY29uc29sZS5sb2coIkNPTVBMRVRFRCA6ICIgKyBjb21wbGV0ZWRUZXN0cyAr
ICIgUEFTU0VEIDogIiArIHBhc3NlZFRlc3RzKTsNCisgIC8vY29uc29sZS5sb2coIlJFU1VMVCA6
ICIgKyByZXN1bHQgKyAiIERFU0MgOiAiICsgZGVzYyk7DQorDQorICAvLyBSRVZJRVcgOiBpZiBv
bmUgb2YgdGhlc2UgdGVzdHMgZmFpbHMgYW5kIHRoaXMgaXNuJ3QgY2FsbGVkDQorICAvLyB0aGlz
IG1lYW5zIHRoaXMgdGVzdCB3aWxsIGhhbmcgdW50aWwgdGhlIHRpbWUgb3V0IGhhcHBlbnMgOigN
CisgIC8vIGFkdmljZSBvbiBiZXR0ZXIgd2F5cyB0byBzeW5jaHJvbml6ZSB0aGluZ3MgYXBwcmVj
aWF0ZWQgIQ0KKyAgaWYgKGNvbXBsZXRlZFRlc3RzID09IDkpIHsNCisgICAgb2socGFzc2VkVGVz
dHMgPT0gOSwgIlRoZXJlIGFyZSA5IGdlbmVyYWwgdGVzdHMgdGhhdCBzaG91bGQgcGFzcyIpOw0K
KyAgICBTaW1wbGVUZXN0LmZpbmlzaCgpOw0KKyAgfQ0KK30NCisNCitmdW5jdGlvbiBkb1Rlc3Qo
KSB7DQorICBTaW1wbGVUZXN0LndhaXRGb3JFeHBsaWNpdEZpbmlzaCgpOw0KKw0KKyAgLy8gcGFz
c2VzIGlmIGdvb2QNCisgIC8vIDEpIHRlc3QgdGhhdCBpbmxpbmUgc2NyaXB0cyAoPHNjcmlwdD4p
IGNhbiBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAg
Ly8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxs
b3ctc2NyaXB0cycpDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMikgdGVzdCB0aGF0
IDxzY3JpcHQgc3JjPS4uLj4gY2FuIHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggImFs
bG93LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0
bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJykNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQor
ICAvLyAzKSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFuIGV2ZW50IGxpc3RlbmVyIChvbmxvYWQpIGNh
biBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8g
KGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ct
c2NyaXB0cycpDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gNCkgdGVzdCB0aGF0IHNj
cmlwdCBpbiBhbiBqYXZhc2NyaXB0OnVybCBjYW4gcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQg
d2l0aCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hf
Y19pZjEuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnKQ0KKw0KKyAgLy8gZmFpbHMgaWYg
YmFkDQorICAvLyA1KSB0ZXN0IHRoYXQgaW5saW5lIHNjcmlwdHMgY2Fubm90IHJ1biBpbiBhbiBp
ZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFsbG93LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBm
aWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgd2hpY2ggaGFzIHNhbmRib3g9JycpDQorDQor
ICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDYpIHRlc3QgdGhhdCA8c2NyaXB0IHNyYz0uLi4+IGNh
bm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0K
KyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sIHdoaWNoIGhhcyBz
YW5kYm94PScnKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA3KSB0ZXN0IHRoYXQgc2Ny
aXB0IGluIGFuIGV2ZW50IGxpc3RlbmVyIChvbmxvYWQpIGNhbm5vdCBydW4gaW4gYW4gaWZyYW1l
IHNhbmRib3hlZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9p
ZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94PScnKQ0KKw0KKyAgLy8g
ZmFpbHMgaWYgYmFkDQorICAvLyA4KSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFuIGphdmFzY3JpcHQ6
dXJsIGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0ICJhbGxvdy1zY3Jp
cHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmXzUuaHRtbCB3aGlj
aCBoYXMgc2FuZGJveD0nYWxsb3ctc2FtZS1vcmlnaW4nKQ0KKyAgdmFyIGlmX3cgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnaWZfNScpLmNvbnRlbnRXaW5kb3c7DQorICBzZW5kTW91c2VFdmVu
dCh7dHlwZTonY2xpY2snfSwgJ2FfbGluaycsIGlmX3cpOw0KKw0KKyAgLy8gcGFzc2VzIGlmIGdv
b2QNCisgIC8vIDcpIHRlc3QgdGhhdCBhIG5ldyBpZnJhbWUgaGFzIHNhbmRib3ggYXR0cmlidXRl
DQorICB2YXIgaWZyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7DQorICBva193
cmFwcGVyKCJzYW5kYm94IiBpbiBpZnIsICJhIG5ldyBpZnJhbWUgc2hvdWxkIGhhdmUgYSBzYW5k
Ym94IGF0dHJpYnV0ZSIpOw0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDgpIHRlc3Qg
dGhhdCB0aGUgc2FuZGJveCBhdHRyaWJ1dGUncyBkZWZhdWx0IHZhbHVlIGlzIGFuIGVtcHR5IHN0
cmluZw0KKyAgb2tfd3JhcHBlcihpZnIuc2FuZGJveCA9PT0gIiIsICJkZWZhdWx0IHNhbmRib3gg
YXR0cmlidXRlIHNob3VsZCBiZSBhbiBlbXB0eSBzdHJpbmciKTsNCisNCisgIC8vIHBhc3NlcyBp
ZiBnb29kDQorICAvLyA5KSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGggJ2FsbG93
LWZvcm1zJyBjYW4gc3VibWl0IGZvcm1zDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5k
Ym94X2NfaWYzLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1mb3JtcycgYW5kICdhbGxvdy1zY3JpcHRz
JykNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gMTApIHRlc3QgdGhhdCBhIHNhbmRib3hl
ZCBpZnJhbWUgd2l0aG91dCAnYWxsb3ctZm9ybXMnIGNhbiBOT1Qgc3VibWl0IGZvcm1zDQorICAv
LyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwgd2hpY2ggb25seSBoYXMg
J2FsbG93LXNjcmlwdHMnKQ0KKw0KKyAgLy8gUkVWSUVXIDogYXJlIHRoZXJlIG90aGVyIHdheXMg
b2Ygb3BlbmluZyBuZXcgd2luZG93cyB0aGFuIHRoZSAzIGJlbG93IHRoYXQgYXJlIG1lbnRpb25l
ZCBpbiB0aGUgSFRNTDUNCisgIC8vIHNwZWMgPw0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAv
LyAxMSkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdpbmRv
dyB1c2luZyB0aGUgdGFyZ2V0LmF0dHJpYnV0ZQ0KKyAgLy8gdGhpcyBpcyBkb25lIHZpYSBmaWxl
X2lmcmFtZV9jX2lmNC5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRz
IiBhbmQgImFsbG93LXNhbWUtb3JpZ2luIg0KKyAgLy8gdGhlIHdpbmRvdyBpdCBhdHRlbXB0cyB0
byBvcGVuIGNhbGxzIHdpbmRvdy5vcGVuZXIub2soZmFsc2UsIC4uLikgYW5kIGZpbGVfaWZyYW1l
X2NfaWY0Lmh0bWwgaGFzIGFuIG9rKCkNCisgIC8vIGZ1bmN0aW9uIHRoYXQgY2FsbHMgd2luZG93
LnBhcmVudC5va193cmFwcGVyDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMTIpIHRl
c3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgY2FuJ3Qgb3BlbiBhIG5ldyB3aW5kb3cgdXNpbmcg
d2luZG93Lm9wZW4NCisgIC8vIHRoaXMgaXMgZG9uZSB2aWEgZmlsZV9pZnJhbWVfY19pZjQuaHRt
bCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYW5kICJhbGxvdy1zYW1l
LW9yaWdpbiINCisgIC8vIHRoZSB3aW5kb3cgaXQgYXR0ZW1wdHMgdG8gb3BlbiBjYWxscyB3aW5k
b3cub3BlbmVyLm9rKGZhbHNlLCAuLi4pIGFuZCBmaWxlX2lmcmFtZV9jX2lmNC5odG1sIGhhcyBh
biBvaygpDQorICAvLyBmdW5jdGlvbiB0aGF0IGNhbGxzIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBl
cg0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDEzKSB0ZXN0IHRoYXQgYSBzYW5kYm94
ZWQgaWZyYW1lIGNhbid0IG9wZW4gYSBuZXcgd2luZG93IHVzaW5nIHdpbmRvdy5TaG93TW9kYWxE
aWFsb2cNCisgIC8vIHRoaXMgaXMgZG9uZSB2aWEgZmlsZV9pZnJhbWVfY19pZjQuaHRtbCB3aGlj
aCBpcyBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYW5kICJhbGxvdy1zYW1lLW9yaWdp
biINCisgIC8vIHRoZSB3aW5kb3cgaXQgYXR0ZW1wdHMgdG8gb3BlbiBjYWxscyB3aW5kb3cub3Bl
bmVyLm9rKGZhbHNlLCAuLi4pIGFuZCBmaWxlX2lmcmFtZV9jX2lmNC5odG1sIGhhcyBhbiBvaygp
DQorICAvLyBmdW5jdGlvbiB0aGF0IGNhbGxzIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcg0KK30N
Cis8L3NjcmlwdD4NCis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4NCis8YSB0YXJnZXQ9Il9ibGFu
ayIgaHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQx
NjA0Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0
cmlidXRlIGZvciBJRlJBTUVzDQorPHAgaWQ9ImRpc3BsYXkiPjwvcD4NCis8ZGl2IGlkPSJjb250
ZW50Ij4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXNjcmlwdHMi
IGlkPSJpZl8xIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCIgaGVpZ2h0PSIx
MCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9IiIgaWQ9ImlmXzIiIHNy
Yz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAi
PjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctZm9ybXMgYWxsb3ctc2NyaXB0cyIg
aWQ9ImlmXzMiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIiBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmln
aW4gYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzQiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lm
NC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJv
eD0iYWxsb3ctc2FtZS1vcmlnaW4iIGlkPSJpZl81IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hf
Y19pZjUuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8L2Rpdj4NCis8
L2JvZHk+DQorPC9odG1sPg0K
</data>
<flag name="feedback"
          id="511775"
          type_id="607"
          status="+"
          setter="mounir"
    />
    <flag name="feedback"
          id="511779"
          type_id="607"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>617117</attachid>
            <date>2012-04-20 15:11:17 -0700</date>
            <delta_ts>2012-05-18 17:38:21 -0700</delta_ts>
            <desc>iframe sandbox tests - inheritance v3</desc>
            <filename>iframe_sandbox_tests_inheritance</filename>
            <type>text/plain</type>
            <size>14982</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNTU3OTdkY2Q3MzFhZTEyZWMwOTRhZDkzODVi
YjljOTMyNGU1ZTczZAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KdGVz
dHMgZm9yIGlmcmFtZSBzYW5kYm94IC0gaW5oZXJpdGFuY2UKCmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmlu
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KQEAgLTI5NiwxNiAr
Mjk2LDI2IEBAIF9URVNUX0ZJTEVTID0gXAogCQlmaWxlX2Z1bGxzY3JlZW4tc3ZnLWVsZW1lbnQu
aHRtbCBcCiAJCXRlc3RfbGlfYXR0cmlidXRlc19yZWZsZWN0aW9uLmh0bWwgXAogCQl0ZXN0X29s
X2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9idWc2NTE5NTYuaHRtbCBcCiAJ
CXRlc3RfYnVnNjk0NTAzLmh0bWwgXAogCQl0ZXN0X29iamVjdF9wbHVnaW5fbmF2Lmh0bWwgXAog
CQl0ZXN0X2J1Zzc0MjAzMC5odG1sIFwKIAkJdGVzdF9idWc3NDI1NDkuaHRtbCBcCisJCXRlc3Rf
aWZyYW1lX3NhbmRib3hfaW5oZXJpdGFuY2UuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hf
YV9pZjEuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCBcCisJCWZpbGVf
aWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjQu
aHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjUuaHRtbCBcCisJCWZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjYuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjcuaHRtbCBc
CisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjguaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfYV9pZjkuaHRtbCBcCiAJCXRlc3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sIFwKIAkJ
ZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9j
X2lmMi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIFwKIAkJZmlsZV9p
ZnJhbWVfc2FuZGJveF9jX2lmNC5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5o
dG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX2ZhaWwuaHRtbCBcCiAJCWZpbGVfaWZy
YW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwgXApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYxLmh0bWwgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjEuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmMS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBI
VE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+
VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlw
ZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+
Cis8Ym9keT4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aG91dCBhbnkgcGVybWlzc2lvbnMKKyAgPGlm
cmFtZSBpZD0iaWZfMmEiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sIiBoZWln
aHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorICA8aWZyYW1lIGlkPSJpZl8yYiIgc2FuZGJv
eD0iYWxsb3ctc2NyaXB0cyIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwiIGhl
aWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIu
aHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lm
Mi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwKQEAgLTAsMCAr
MSwyMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0
PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4KKzwvaGVhZD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
ZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgLy8gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGV4ZWN1dGUg
c2NyaXB0cworICB3aW5kb3cucGFyZW50LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IGZhbHNlLCBk
ZXNjOiAiYSBkb2N1bWVudCB3aXRoaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoIHNhbmRib3g9
Jycgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGV4ZWN1dGUgc2NyaXB0cyJ9LCAiKiIpOworfQorPC9z
Y3JpcHQ+CisKKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBOT1Qgc2FuZGJveGVk
IG9yIGFtIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIiBidXQgYW0gY29udGFpbmVkIHdp
dGhpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggc2FuZGJveCA9ICIiCisgIG9yIGFtIHNhbmRi
b3hlZCB3aXRoIHNhbmRib3g9JycgaW5zaWRlIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxs
b3ctc2NyaXB0cyIKKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0
bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
dHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50
VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCI+CisgIGZ1bmN0aW9uIG9rX3dyYXBwZXIoY29uZGl0aW9uLCBtc2cpIHsKKyAgICB3aW5k
b3cucGFyZW50Lm9rX3dyYXBwZXIoY29uZGl0aW9uLCBtc2cpOworICB9Cis8L3NjcmlwdD4KKwor
PGJvZHk+CisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zY3JpcHRzIgorCisgIDxp
ZnJhbWUgaWQ9J2lmXzQnIHNyYz0nZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sJyBoZWln
aHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorICA8aWZyYW1lIGlkPSdpZl83JyBzcmM9J2Zp
bGVfaWZyYW1lX3NhbmRib3hfYV9pZjcuaHRtbCcgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lm
cmFtZT4KKyAgPGlmcmFtZSBpZD0naWZfMicgc2FuZGJveD0nJyBzcmM9J2ZpbGVfaWZyYW1lX3Nh
bmRib3hfYV9pZjIuaHRtbCcgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwvYm9k
eT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2FfaWY0Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfYV9pZjQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmNC5odG1sCkBAIC0wLDAgKzEsMjggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhy
ZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBk
b1N0dWZmKCkgeworICB0cnkgeworICAgIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihmYWxzZSwg
ImEgZG9jdW1lbnQgY29udGFpbmVkIHdpdGhpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB3aXRob3V0
ICdhbGxvdy1zYW1lLW9yaWdpbicgc2hvdWxkIE5PVCBiZSBzYW1lIGRvbWFpbiB3aXRoIGl0cyBw
YXJlbnQiKTsKKyAgfSBjYXRjaChlKSB7CisgIH0KKworICB0cnkgeworICAgIHdpbmRvdy5wYXJl
bnQucGFyZW50Lm9rX3dyYXBwZXIoZmFsc2UsICJhIGRvY3VtZW50IGNvbnRhaW5lZCB3aXRoaW4g
YSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aG91dCAnYWxsb3ctc2FtZS1vcmlnaW4nIHNob3VsZCBO
T1QgYmUgc2FtZSBkb21haW4gd2l0aCB0aGUgdG9wIGxldmVsIik7CisgIH0gY2F0Y2goZSkgewor
ICB9Cit9Cis8L3NjcmlwdD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIG5v
dCBzYW5kYm94ZWQgYnV0IGNvbnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0
aCAnYWxsb3ctc2NyaXB0cycKKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY1Lmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNS5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
ICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+
CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0
L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKSB7CisgICAg
d2luZG93LnBhcmVudC5va193cmFwcGVyKHJlc3VsdCwgZGVzYyk7CisgIH0KKzwvc2NyaXB0Pgor
Cis8Ym9keT4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ct
c2FtZS1vcmlnaW4iCisKKyAgPGlmcmFtZSBzYW5kYm94PSdhbGxvdy1zY3JpcHRzIGFsbG93LXNh
bWUtb3JpZ2luJyBpZD0naWZfNicgc3JjPSdmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY2Lmh0bWwn
IGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9h
X2lmNi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2FfaWY2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjYuaHRtbApAQCAt
MCwwICsxLDIxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8
bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxl
VGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIv
dGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgd2lu
ZG93LnBhcmVudC5va193cmFwcGVyKHRydWUsICJhIGRvY3VtZW50IHNhbmRib3hlZCB3aXRoICdh
bGxvdy1zYW1lLW9yaWdpbicgYW5kIGNvbnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1l
bnQgd2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nIHNob3VsZCBiZSBzYW1lIGRvbWFpbiB3aXRoIGl0
cyBwYXJlbnQiKTsKKyAgd2luZG93LnBhcmVudC5wYXJlbnQub2tfd3JhcHBlcih0cnVlLCAiYSBk
b2N1bWVudCBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nIGNvbnRhaW5lZCB3aXRo
aW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nIHNob3VsZCBi
ZSBzYW1lIGRvbWFpbiB3aXRoIHRoZSB0b3AgbGV2ZWwiKTsKK30KKzwvc2NyaXB0PgorCis8Ym9k
eSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlw
dHMgYWxsb3ctc2FtZS1vcmlnaW4nIGFuZCBjb250YWluZWQgd2l0aGluIGEgc2FuZGJveGVkIGRv
Y3VtZW50IHdpdGggJ2FsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4nCis8L2JvZHk+Cis8
L2h0bWw+CisKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9hX2lmNy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2FfaWY3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9p
ZjcuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8
L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIv
dGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1N0dWZmKCkgeworICAvLyBzaG91bGQgYmUgYWJs
ZSB0byBleGVjdXRlIHNjcmlwdHMKKyAgd2luZG93LnBhcmVudC5wYXJlbnQucG9zdE1lc3NhZ2Uo
e29rOiB0cnVlLCBkZXNjOiAiYSBkb2N1bWVudCBjb250YWluZWQgd2l0aGluIGFuIGlmcmFtZSBj
b250YWluZWQgd2l0aGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycg
c2hvdWxkIGJlIGFibGUgdG8gZXhlY3V0ZSBzY3JpcHRzIn0sICIqIik7Cit9Cis8L3NjcmlwdD4K
KworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIE5PVCBzYW5kYm94ZWQgYnV0IGFt
IGNvbnRhaW5lZCB3aXRoaW4gYW4gaWZyYW1lIGNvbnRhaW5lZCB3aXRoaW4gYW4gaWZyYW1lIHNh
bmRib3hlZCB3aXRoIHNhbmRib3ggPSAiYWxsb3ctc2NyaXB0cyIKKzwvYm9keT4KKzwvaHRtbD4K
KwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2FfaWY4Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfYV9pZjguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5odG1s
CkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+
CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9T
aW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PHNjcmlwdD4KK2Z1bmN0aW9uIGRvU3VibG9hZCgpIHsKKyAgdmFyIGlmXzkgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnaWZfOScpOworICBpZl85LnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5kYm94
X2FfaWY5Lmh0bWwnOworfQorCit3aW5kb3cuZG9TdWJsb2FkID0gZG9TdWJsb2FkOworCis8L3Nj
cmlwdD4KKzxib2R5PgorICBJIGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBh
bGxvdy1zYW1lLW9yaWdpbiIuIEFmdGVyIG15IGluaXRpYWwgbG9hZCwgImFsbG93LXNhbWUtb3Jp
Z2luIiBpcyByZW1vdmVkCisgIGFuZCB0aGVuIEkgbG9hZCBmaWxlX2lmcmFtZV9zYW5kYm94X2Ff
aWY5Lmh0bWwsIHdoaWNoIGF0dGVtcHMgdG8gY2FsbCBhIGZ1bmN0aW9uIGluIHdpbmRvdy50b3Au
IFRoaXMgc2hvdWxkCisgIHN1Y2NlZWQgc2luY2UgdGhlIG5ldyBzYW5kYm94IGZsYWdzIHNob3Vs
ZG4ndCBoYXZlIHRha2VuIGFmZmVjdCBvbiBtZSB1bnRpbCBJJ20gcmVsb2FkZWQuCisKKyAgPGlm
cmFtZSBpZD0naWZfOScgc3JjPSdhYm91dDpibGFuaycgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48
L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY5Lmh0bWwgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjkuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmOS5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhRE9DVFlQRSBI
VE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+
VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlw
ZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+
Cis8c2NyaXB0PgorZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgd2luZG93LnBhcmVudC5wYXJlbnQu
b2tfd3JhcHBlcih0cnVlLCAiYSBzdWJsb2FkZWQgZG9jdW1lbnQgc2hvdWxkIGluaGVyaXQgdGhl
IGZsYWdzIG9mIHRoZSBkb2N1bWVudCwgbm90IG9mIHRoZSBkb2NzaGVsbC9zYW5kYm94IGF0dHJp
YnV0ZSIpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9J2RvU3R1ZmYoKSc+CisgIEknbSBh
IHN1YmxvYWRlZCBkb2N1bWVudCBvZiBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY4Lmh0bWwuIEkg
c2hvdWxkIGJlIGFibGUgdG8gY2FsbCBhIGZ1bmN0aW9uIGluIHdpbmRvdy50b3AKKyAgYmVjYXVz
ZSBJIHNob3VsZCBiZSBzYW1lLW9yaWdpbiB3aXRoIGl0LgorPC9ib2R5PgorPC9odG1sPgorCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hf
aW5oZXJpdGFuY2UuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVf
c2FuZGJveF9pbmhlcml0YW5jZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2lu
aGVyaXRhbmNlLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1s
Pg0KKzwhLS0NCitodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NDE2MDQNCitJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMgLSBp
bmhlcml0YW5jZSB0ZXN0cw0KKy0tPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
Pg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBl
PSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRl
c3QuanMiPjwvc2NyaXB0Pg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2Nz
cyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPHNjcmlw
dCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCisvKiogVGVzdCBmb3IgQnVnIDM0MTYw
NCAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAqKi8NCisv
KiogSW5oZXJpdGFuY2UgVGVzdHMgKiovDQorDQorLy8gQSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRo
YXQgaXMgdXNlZCBieSBzYW5kYm94ZWQgaWZyYW1lcyB3aXRob3V0DQorLy8gJ2FsbG93LXNhbWUt
b3JpZ2luJyB0byBjb21tdW5pY2F0ZSBwYXNzL2ZhaWwgYmFjayB0byB0aGlzIG1haW4gcGFnZS4N
CisvLyBJdCBleHBlY3RzIHRvIGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCBsaWtlIHtvazogdHJ1
ZS9mYWxzZSwgZGVzYzoNCisvLyA8ZGVzY3JpcHRpb24gb2YgdGhlIHRlc3Q+IHdoaWNoIGl0IHRo
ZW4gZm9yd2FyZHMgdG8gb2soKS4NCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIs
IHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7DQorDQordmFyIGNvbXBsZXRlZFRlc3RzID0gMDsNCit2
YXIgcGFzc2VkVGVzdHMgPSAwOw0KKw0KK2Z1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KQ0K
K3sNCisgIG9rX3dyYXBwZXIoZXZlbnQuZGF0YS5vaywgZXZlbnQuZGF0YS5kZXNjKTsNCit9DQor
DQorZnVuY3Rpb24gb2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpIHsNCisgIG9rKHJlc3VsdCwgZGVz
Yyk7DQorDQorICBjb21wbGV0ZWRUZXN0cysrOw0KKw0KKyAgaWYgKHJlc3VsdCkNCisJcGFzc2Vk
VGVzdHMrKzsNCisNCisgIC8vIFJFVklFVyA6IGlmIG9uZSBvZiB0aGVzZSB0ZXN0cyBmYWlscyBh
bmQgdGhlIG1lc3NhZ2UgaXNuJ3Qgc2VudA0KKyAgLy8gdGhpcyBtZWFucyB0aGlzIHRlc3Qgd2ls
bCBoYW5nIHVudGlsIHRoZSB0aW1lIG91dCBoYXBwZW5zIDooDQorICAvLyBhZHZpY2Ugb24gYmV0
dGVyIHdheXMgdG8gc3luY2hyb25pemUgdGhpbmdzIGFwcHJlY2lhdGVkICENCisgIGlmIChjb21w
bGV0ZWRUZXN0cyA9PSA0KSB7DQorICAgIGlzKHBhc3NlZFRlc3RzLCA0LCAidGhlcmUgc2hvdWxk
IGJlIDMgcGFzc2VkIGluaGVyaXRhbmNlIHRlc3RzIik7DQorICAgIFNpbXBsZVRlc3QuZmluaXNo
KCk7DQorICB9DQorfQ0KKw0KK2Z1bmN0aW9uIGRvVGVzdCgpIHsNCisgIFNpbXBsZVRlc3Qud2Fp
dEZvckV4cGxpY2l0RmluaXNoKCk7DQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDEpIGFu
IGlmcmFtZSB3aXRoIG5vIHNhbmRib3ggYXR0cmlidXRlIGluc2lkZSBhbiBpZnJhbWUgdGhhdCBo
YXMgc2FuZGJveCA9ICIiDQorICAvLyBzaG91bGQgbm90IGJlIGFibGUgdG8gZXhlY3V0ZSBzY3Jp
cHRzIChjYW5ub3QgZXZlciBsb29zZW4gcGVybWlzc2lvbnMpDQorICAvLyAoZG9uZSBieSBmaWxl
X2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwgY29udGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9z
YW5kYm94X2FfaWYxLmh0bWwpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDIpIGFuIGlm
cmFtZSB3aXRoIHNhbmRib3ggPSAiYWxsb3ctc2NyaXB0cyIgaW5zaWRlIGFuIGlmcmFtZSB0aGF0
IGhhcyBzYW5kYm94ID0gIiINCisgIC8vIHNob3VsZCBub3QgYmUgYWJsZSB0byBleGVjdXRlIHNj
cmlwdHMgKGNhbm5vdCBldmVyIGxvb3NlbiBwZXJtaXNzaW9ucykNCisgIC8vIChkb25lIGJ5IGZp
bGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCBjb250YWluZWQgd2l0aGluIGZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjEuaHRtbCkNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gMykgYW4g
aWZyYW1lIHdpdGggbm8gc2FuZGJveCBhdHRyaWJ1dGUgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhh
cyBzYW5kYm94ID0gImFsbG93LXNjcmlwdHMiDQorICAvLyBzaG91bGQgbm90IGJlIHNhbWUgb3Jp
Z2luIHdpdGggdGhlIHRvcCB3aW5kb3cNCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRi
b3hfYV9pZjQuaHRtbCBjb250YWluZWQgd2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMu
aHRtbCkNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gNCkgYW4gaWZyYW1lIHdpdGggbm8g
c2FuZGJveCBhdHRyaWJ1dGUgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhhcyBzYW5kYm94ID0gImFs
bG93LXNjcmlwdHMiDQorICAvLyBzaG91bGQgbm90IGJlIHNhbWUgb3JpZ2luIHdpdGggaXRzIHBh
cmVudA0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sIGNvbnRh
aW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sKQ0KKw0KKyAgLy8gcGFz
c2VzIGlmIGdvb2QNCisgIC8vIDUpIGFuIGlmcmFtZSB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicg
YW5kICdhbGxvdy1zY3JpcHRzJyBpbnNpZGUgYW4gaWZyYW1lIHdpdGggJ2FsbG93LXNhbWUtb3Jp
Z2luJw0KKyAgLy8gYW5kICdhbGxvdy1zY3JpcHRzJyBzaG91bGQgYmUgc2FtZSBvcmlnaW4gd2l0
aCB0aGUgdG9wIHdpbmRvdw0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lm
Ni5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNS5odG1sKQ0K
Kw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDYpIGFuIGlmcmFtZSB3aXRoICdhbGxvdy1z
YW1lLW9yaWdpbicgYW5kICdhbGxvdy1zY3JpcHRzJyBpbnNpZGUgYW4gaWZyYW1lIHdpdGggJ2Fs
bG93LXNhbWUtb3JpZ2luJw0KKyAgLy8gYW5kICdhbGxvdy1zY3JpcHRzJyBzaG91bGQgYmUgc2Ft
ZSBvcmlnaW4gd2l0aCBpdHMgcGFyZW50DQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5k
Ym94X2FfaWY2Lmh0bWwgY29udGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY1
Lmh0bWwpDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gNykgYW4gaWZyYW1lIHdpdGgg
bm8gc2FuZGJveCBhdHRyaWJ1dGUgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhhcyBzYW5kYm94ID0g
ImFsbG93LXNjcmlwdHMiDQorICAvLyBzaG91bGQgYmUgYWJsZSB0byBleGVjdXRlIHNjcmlwdHMN
CisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjcuaHRtbCBjb250YWluZWQg
d2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbCkNCisNCisgIC8vIGZhaWxzIGlm
IGJhZA0KKyAgLy8gOCkgYW4gaWZyYW1lIHdpdGggc2FuZGJveD0iIiBpbnNpZGUgYW4gaWZyYW1l
IHRoYXQgaGFzIGFsbG93LXNjcmlwdHMgc2hvdWxkIG5vdCBiZSBhYmxlDQorICAvLyB0byBleGVj
dXRlIHNjcmlwdHMNCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRt
bCBjb250YWluZWQgd2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbCkNCisNCisg
IC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyA5KSBtYWtlIHN1cmUgdGhhdCBjaGFuZ2luZyB0aGUg
c2FuZGJveCBmbGFncyBvbiBhbiBpZnJhbWUgKGlmXzgpIGRvZXNuJ3QgYWZmZWN0DQorICAvLyB0
aGUgc2FuZGJveGluZyBvZiBzdWJsb2FkcyBvZiBjb250ZW50IHdpdGhpbiB0aGF0IGlmcmFtZQ0K
KyAgdmFyIGlmXzggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfOCcpOw0KKyAgaWZfOC5z
YW5kYm94ID0gJ2FsbG93LXNjcmlwdHMnOw0KKyAgaWZfOC5jb250ZW50V2luZG93LmRvU3VibG9h
ZCgpOw0KK30NCis8L3NjcmlwdD4NCis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4NCis8YSB0YXJn
ZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzQxNjA0Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNh
bmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzDQorPHAgaWQ9ImRpc3BsYXkiPjwvcD4NCis8ZGl2
IGlkPSJjb250ZW50Ij4NCis8aWZyYW1lIHNhbmRib3g9IiIgaWQ9ImlmXzEiIHNyYz0iZmlsZV9p
ZnJhbWVfc2FuZGJveF9hX2lmMS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1l
Pg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzMiIHNyYz0iZmlsZV9p
ZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1l
Pg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIgaWQ9
ImlmXzUiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNS5odG1sIiBoZWlnaHQ9IjEwIiB3
aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyBhbGxv
dy1zYW1lLW9yaWdpbiIgaWQ9ImlmXzgiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5o
dG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvZGl2Pg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>617118</attachid>
            <date>2012-04-20 15:16:04 -0700</date>
            <delta_ts>2012-05-16 12:11:01 -0700</delta_ts>
            <desc>iframe sandbox tests - same origin v3</desc>
            <filename>iframe_sandbox_tests_same_origin</filename>
            <type>text/plain</type>
            <size>10824</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgN2YyM2VjNDFiNWIwNGI5ZmVmZTgxZjQ1MWRi
MWRmZGI0OWZjZWJjMQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBzYW1lIG9yaWdpbgoKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4gYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01h
a2VmaWxlLmluCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgpAQCAtMzA2LDE2ICszMDYs
MjAgQEAgX1RFU1RfRklMRVMgPSBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCBc
CiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfYV9pZjQuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjUuaHRtbCBcCiAJCWZp
bGVfaWZyYW1lX3NhbmRib3hfYV9pZjYuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9p
ZjcuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjguaHRtbCBcCiAJCWZpbGVfaWZy
YW1lX3NhbmRib3hfYV9pZjkuaHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRib3hfc2FtZV9vcmln
aW4uaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjEuaHRtbCBcCisJCWZpbGVfaWZy
YW1lX3NhbmRib3hfYl9pZjIuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjMuaHRt
bCBcCiAJCXRlc3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sIFwKIAkJZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMS5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sIFwK
IAkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmNC5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5odG1sIFwKIAkJZmls
ZV9pZnJhbWVfc2FuZGJveF9mb3JtX2ZhaWwuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hf
Zm9ybV9wYXNzLmh0bWwgXApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2JfaWYxLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0g
L2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9iX2lmMS5odG1sCkBAIC0wLDAgKzEsMTEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVn
IDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3Mi
IGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8Ym9keT4KKyAg
SSBhbSBzYW5kYm94ZWQgd2l0aG91dCBhbnkgcGVybWlzc2lvbnMKKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9iX2lmMi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2JfaWYyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjIuaHRtbApA
QCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgor
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2lt
cGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdD4KKyAgZnVuY3Rpb24gb2soY29u
ZGl0aW9uLCBtc2cpIHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIoY29uZGl0aW9uLCBt
c2cpOworICB9CisKKyAgZnVuY3Rpb24gdGVzdFhIUigpIHsKKyAgICB2YXIgeGhyID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisKKyAgICB4aHIub3BlbigiR0VUIiwgImZpbGVfaWZyYW1lX3NhbmRi
b3hfYl9pZjEuaHRtbCIpOworCisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9u
IChvRXZlbnQpIHsKKyAgICAgIHZhciByZXN1bHQgPSBmYWxzZTsKKyAgICAgIGlmICh4aHIucmVh
ZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkgeworICAgICAg
ICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgb2socmVzdWx0LCAiWEhSIHNo
b3VsZCB3b3JrIG5vcm1hbGx5IGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2Ft
ZS1vcmlnaW4nIik7CisgICAgICB9CisgICAgfQorCisgICAgeGhyLnNlbmQobnVsbCk7CisgIH0K
KworICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIG9rKHRydWUsICJkb2N1bWVudHMgc2FuZGJv
eGVkIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyBzaG91bGQgYmUgYWJsZSB0byBhY2Nlc3MgdGhl
aXIgcGFyZW50Iik7CisKKyAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBhY2Nlc3MgZG9jdW1lbnQu
Y29va2llIHNpbmNlIHdlIGhhdmUgJ2FsbG93LXNhbWUtb3JpZ2luJworICAgIG9rKGRvY3VtZW50
LmNvb2tpZSA9PSAiIiwgImEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGggYWxsb3ctc2FtZS1vcmln
aW4gc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIGRvY3VtZW50LmNvb2tpZSIpOworCisgICAgLy8g
c2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIGxvY2FsU3RvcmFnZSBzaW5jZSB3ZSBoYXZlICdhbGxv
dy1zYW1lLW9yaWdpbicKKyAgICBvayh3aW5kb3cubG9jYWxTdG9yYWdlLCAiYSBkb2N1bWVudCBz
YW5kYm94ZWQgd2l0aCBhbGxvdy1zYW1lLW9yaWdpbiBzaG91bGQgYmUgYWJsZSB0byBhY2Nlc3Mg
bG9jYWxTdG9yYWdlIik7CisKKyAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBhY2Nlc3Mgc2Vzc2lv
blN0b3JhZ2Ugc2luY2Ugd2UgaGF2ZSAnYWxsb3ctc2FtZS1vcmlnaW4nCisgICAgb2sod2luZG93
LnNlc3Npb25TdG9yYWdlLCAiYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zYW1lLW9y
aWdpbiBzaG91bGQgYmUgYWJsZSB0byBhY2Nlc3Mgc2Vzc2lvblN0b3JhZ2UiKTsKKworICAgIHRl
c3RYSFIoKTsKKyAgfQorPC9zY3JpcHQ+Cis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkg
YW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zYW1lLW9yaWdpbiIgYW5kICJhbGxvdy1zY3Jp
cHRzIgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2JfaWYzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9iX2lmMy5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBIVE1MPgor
PGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBm
b3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4
dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8c2Ny
aXB0PgorICBmdW5jdGlvbiBvayhyZXN1bHQsIG1lc3NhZ2UpIHsKKyAgICB3aW5kb3cucGFyZW50
LnBvc3RNZXNzYWdlKHtvazogcmVzdWx0LCBkZXNjOiBtZXNzYWdlfSwgIioiKTsKKyAgfQorCisg
IGZ1bmN0aW9uIHRlc3RYSFIoKSB7CisgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KworICB4aHIub3BlbigiR0VUIiwgImZpbGVfaWZyYW1lX3NhbmRib3hfaWYxLmh0bWwiKTsKKwor
ICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKG9FdmVudCkgeworICAgIHZhciBy
ZXN1bHQgPSBmYWxzZTsKKyAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAgaWYg
KHhoci5zdGF0dXMgPT0gMCkgeworICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgfQorICAg
ICAgb2socmVzdWx0LCAiWEhSIHNob3VsZCBiZSBibG9ja2VkIGluIGFuIGlmcmFtZSBzYW5kYm94
ZWQgV0lUSE9VVCAnYWxsb3ctc2FtZS1vcmlnaW4nIik7CisgICAgfQorICB9CisKKyAgeGhyLnNl
bmQobnVsbCk7Cit9CisKKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICB0cnkgeworICAgICAg
d2luZG93LnBhcmVudC5vayhmYWxzZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aG91dCAnYWxs
b3ctc2FtZS1vcmlnaW4nIHNob3VsZCBOT1QgYmUgYWJsZSB0byBhY2Nlc3MgdGhlaXIgcGFyZW50
Iik7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgIG9rKHRydWUsICJkb2N1bWVudHMgc2Fu
ZGJveGVkIHdpdGhvdXQgJ2FsbG93LXNhbWUtb3JpZ2luJyBzaG91bGQgTk9UIGJlIGFibGUgdG8g
YWNjZXNzIHRoZWlyIHBhcmVudCIpOworICAgIH0KKworICAgIC8vIHNob3VsZCBOT1QgYmUgYWJs
ZSB0byBhY2Nlc3MgZG9jdW1lbnQuY29va2llCisgICAgdHJ5IHsKKyAgICAgIHZhciBmb28gPSBk
b2N1bWVudC5jb29raWU7CisgICAgfSBjYXRjaChlcnJvcikgeworICAgICAgb2sodHJ1ZSwgImEg
ZG9jdW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2FtZS1vcmlnaW4gc2hvdWxkIE5PVCBi
ZSBhYmxlIHRvIGFjY2VzcyBkb2N1bWVudC5jb29raWUiKTsKKyAgICB9CisKKyAgICAvLyBzaG91
bGQgTk9UIGJlIGFibGUgdG8gYWNjZXNzIGxvY2FsU3RvcmFnZQorICAgIHRyeSB7CisgICAgICB2
YXIgZm9vID0gd2luZG93LmxvY2FsU3RvcmFnZTsKKyAgICB9IGNhdGNoKGVycm9yKSB7CisgICAg
ICBvayh0cnVlLCAiYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aG91dCBhbGxvdy1zYW1lLW9yaWdp
biBzaG91bGQgTk9UIGJlIGFibGUgdG8gYWNjZXNzIGxvY2FsU3RvcmFnZSIpOworICAgIH0KKwor
ICAgIC8vIHNob3VsZCBOT1QgYmUgYWJsZSB0byBhY2Nlc3Mgc2Vzc2lvblN0b3JhZ2UKKyAgICB0
cnkgeworICAgICAgdmFyIGZvbyA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZTsKKyAgICB9IGNhdGNo
KGVycm9yKSB7CisgICAgICBvayh0cnVlLCAiYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aG91dCBh
bGxvdy1zYW1lLW9yaWdpbiBzaG91bGQgTk9UIGJlIGFibGUgdG8gYWNjZXNzIHNlc3Npb25TdG9y
YWdlIik7CisgICAgfQorCisgIHRlc3RYSFIoKTsKKyAgfQorPC9zY3JpcHQ+Cis8Ym9keSBvbkxv
YWQ9ImRvU3R1ZmYoKSI+CisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zY3JpcHRz
IgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC90ZXN0X2lmcmFtZV9zYW5kYm94X3NhbWVfb3JpZ2luLmh0bWwgYi9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfc2FtZV9vcmlnaW4uaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
dGVzdF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdpbi5odG1sCkBAIC0wLDAgKzEsMTEwIEBACis8
IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8IS0tDQoraHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxh
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0
cmlidXRlIGZvciBJRlJBTUVzIC0gc2FtZSBvcmlnaW4gdGVzdHMNCistLT4NCis8aGVhZD4NCisg
IDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90
aXRsZT4NCisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVz
dHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4NCisgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3Nz
Ii8+DQorPC9oZWFkPg0KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+DQor
LyoqIFRlc3QgZm9yIEJ1ZyAzNDE2MDQgLSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1
dGUgZm9yIElGUkFNRXMgKiovDQorLyoqIFNhbWUgT3JpZ2luIFRlc3RzICoqLw0KKw0KK3ZhciBj
b21wbGV0ZWRUZXN0cyA9IDA7DQordmFyIHBhc3NlZFRlc3RzID0gMDsNCisNCitmdW5jdGlvbiBv
a193cmFwcGVyKHJlc3VsdCwgZGVzYykgew0KKyAgb2socmVzdWx0LCBkZXNjKTsNCisNCisgIGNv
bXBsZXRlZFRlc3RzKys7DQorDQorICBpZiAocmVzdWx0KSB7DQorICAgIHBhc3NlZFRlc3RzKys7
DQorICB9DQorDQorICAvLyBSRVZJRVcgOiBpZiBvbmUgb2YgdGhlc2UgdGVzdHMgZmFpbHMgYW5k
IHRoaXMgaXNuJ3QgY2FsbGVkDQorICAvLyB0aGlzIG1lYW5zIHRoaXMgdGVzdCB3aWxsIGhhbmcg
dW50aWwgdGhlIHRpbWUgb3V0IGhhcHBlbnMgOigNCisgIC8vIGFkdmljZSBvbiBiZXR0ZXIgd2F5
cyB0byBzeW5jaHJvbml6ZSB0aGluZ3MgYXBwcmVjaWF0ZWQgIQ0KKyAgaWYgKGNvbXBsZXRlZFRl
c3RzID09IDEyKSB7DQorICAgIG9rKHBhc3NlZFRlc3RzID09IDEyLCAiVGhlcmUgYXJlIDEyIHNh
bWUtb3JpZ2luIHRlc3RzIHRoYXQgc2hvdWxkIHBhc3MiKTsNCisNCisgICAgU2ltcGxlVGVzdC5m
aW5pc2goKTsNCisgIH0NCit9DQorDQorZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpDQor
ew0KKyAgb2tfd3JhcHBlcihldmVudC5kYXRhLm9rLCBldmVudC5kYXRhLmRlc2MpOw0KK30NCisN
CisvLyBhIHBvc3RNZXNzYWdlIGhhbmRsZXIgdGhhdCBpcyB1c2VkIGJ5IHNhbmRib3hlZCBpZnJh
bWVzIHdpdGhvdXQNCisvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIHRvIGNvbW11bmljYXRlIHBhc3Mv
ZmFpbCBiYWNrIHRvIHRoaXMgbWFpbiBwYWdlLg0KKy8vIGl0IGV4cGVjdHMgdG8gYmUgY2FsbGVk
IHdpdGggYW4gb2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNjOg0KKy8vIDxkZXNjcmlw
dGlvbiBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0byBvaygpDQord2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOw0KKw0K
K2Z1bmN0aW9uIGRvVGVzdCgpIHsNCisgIFNpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0RmluaXNo
KCk7DQorDQorICAvLyAxKSB0ZXN0IHRoYXQgd2UgY2FuJ3QgYWNjZXNzIGFuIGlmcmFtZSBzYW5k
Ym94ZWQgd2l0aG91dCAiYWxsb3ctc2FtZS1vcmlnaW4iDQorICB2YXIgaWZfMSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJpZl8xIik7DQorICB0cnkgew0KKyAgICB2YXIgYiA9IGlmXzEuY29u
dGVudERvY3VtZW50LmJvZHk7DQorICAgIG9rX3dyYXBwZXIoZmFsc2UsICJhY2Nlc3NpbmcgYm9k
eSBvZiBhIHNhbmRib3hlZCBkb2N1bWVudCBzaG91bGQgbm90IGJlIGFsbG93ZWQiKTsNCisgIH0g
Y2F0Y2ggKGVycil7DQorICAgIG9rX3dyYXBwZXIodHJ1ZSwgImFjY2Vzc2luZyBib2R5IG9mIGEg
c2FuZGJveGVkIGRvY3VtZW50IHNob3VsZCBub3QgYmUgYWxsb3dlZCIpOw0KKyAgfQ0KKw0KKyAg
Ly8gMikgdGVzdCB0aGF0IHdlIGNhbiBhY2Nlc3MgYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoICJh
bGxvdy1zYW1lLW9yaWdpbiINCisgIHZhciBpZl8yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImlmXzIiKTsNCisNCisgIHRyeSB7DQorICAgIHZhciBiID0gaWZfMi5jb250ZW50RG9jdW1lbnQu
Ym9keTsNCisgICAgb2tfd3JhcHBlcih0cnVlLCAiYWNjZXNzaW5nIGJvZHkgb2YgYSBzYW5kYm94
ZWQgZG9jdW1lbnQgd2l0aCBhbGxvdy1zYW1lLW9yaWdpbiBzaG91bGQgYmUgYWxsb3dlZCIpOw0K
KyAgfSBjYXRjaCAoZXJyKSB7DQorICAgIG9rX3dyYXBwZXIoZmFsc2UsICJhY2Nlc3NpbmcgYm9k
eSBvZiBhIHNhbmRib3hlZCBkb2N1bWVudCB3aXRoIGFsbG93LXNhbWUtb3JpZ2luIHNob3VsZCBi
ZSBhbGxvd2VkIik7DQorICB9DQorDQorICAvLyAzKSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZy
YW1lIHdpdGhvdXQgJ2FsbG93LXNhbWUtb3JpZ2luJyBjYW5ub3QgYWNjZXNzIGl0cyBwYXJlbnQN
CisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lmMy5odG1sIHdoaWNoIGhhcyAn
YWxsb3ctc2NyaXB0cycgYnV0IG5vdCAnYWxsb3ctc2FtZS1vcmlnaW4nDQorDQorICAvLyA0KSB0
ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyBjYW4g
YWNjZXNzIGl0cyBwYXJlbnQNCisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lm
Mi5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2FtZS1vcmlnaW4nIGFuZCAnYWxsb3ctc2NyaXB0cycN
CisNCisgIC8vIDUpIGNoZWNrIHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGggImFsbG93LXNh
bWUtb3JpZ2luIiBjYW4gYWNjZXNzIGRvY3VtZW50LmNvb2tpZQ0KKyAgLy8gdGhpcyBpcyBkb25l
IGJ5IGZpbGVfaWZyYW1lX2JfaWYyLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zYW1lLW9yaWdpbicg
YW5kICdhbGxvdy1zY3JpcHRzJw0KKw0KKyAgLy8gNikgY2hlY2sgdGhhdCBhIHNhbmRib3hlZCBp
ZnJhbWUgd2l0aCAiYWxsb3ctc2FtZS1vcmlnaW4iIGNhbiBhY2Nlc3Mgd2luZG93LmxvY2FsU3Rv
cmFnZQ0KKyAgLy8gdGhpcyBpcyBkb25lIGJ5IGZpbGVfaWZyYW1lX2JfaWYyLmh0bWwgd2hpY2gg
aGFzICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kICdhbGxvdy1zY3JpcHRzJw0KKw0KKyAgLy8gNykg
Y2hlY2sgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAiYWxsb3ctc2FtZS1vcmlnaW4iIGNh
biBhY2Nlc3Mgd2luZG93LnNlc3Npb25TdG9yYWdlDQorICAvLyB0aGlzIGlzIGRvbmUgYnkgZmls
ZV9pZnJhbWVfYl9pZjIuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNhbWUtb3JpZ2luJyBhbmQgJ2Fs
bG93LXNjcmlwdHMnDQorDQorICAvLyA4KSBjaGVjayB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBX
SVRIT1VUICJhbGxvdy1zYW1lLW9yaWdpbiIgY2FuIE5PVCBhY2Nlc3MgZG9jdW1lbnQuY29va2ll
DQorICAvLyB0aGlzIGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjMuaHRtbCB3aGljaCBoYXMg
J2FsbG93LXNjcmlwdHMnIGJ1dCBub3QgJ2FsbG93LXNhbWUtb3JpZ2luJw0KKw0KKyAgLy8gOSkg
Y2hlY2sgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgV0lUSE9VVCAiYWxsb3ctc2FtZS1vcmlnaW4i
IGNhbiBOT1QgYWNjZXNzIHdpbmRvdy5sb2NhbFN0b3JhZ2UNCisgIC8vIHRoaXMgaXMgZG9uZSBi
eSBmaWxlX2lmcmFtZV9iX2lmMy5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycgYnV0IG5v
dCAnYWxsb3ctc2FtZS1vcmlnaW4nDQorDQorICAvLyAxMCkgY2hlY2sgdGhhdCBhIHNhbmRib3hl
ZCBpZnJhbWUgV0lUSE9VVCAiYWxsb3ctc2FtZS1vcmlnaW4iIGNhbiBOT1QgYWNjZXNzIHdpbmRv
dy5zZXNzaW9uU3RvcmFnZQ0KKyAgLy8gdGhpcyBpcyBkb25lIGJ5IGZpbGVfaWZyYW1lX2JfaWYz
Lmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJyBidXQgbm90ICdhbGxvdy1zYW1lLW9yaWdp
bicNCisNCisgIC8vIDExKSBjaGVjayB0aGF0IFhIUiB3b3JrcyBub3JtYWxseSBpbiBhIHNhbmRi
b3hlZCBpZnJhbWUgd2l0aCAiYWxsb3ctc2FtZS1vcmlnaW4iIGFuZCAiYWxsb3ctc2NyaXB0cyIN
CisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lmMi5odG1sIHdoaWNoIGhhcyAn
YWxsb3ctc2FtZS1vcmlnaW4nIGFuZCAnYWxsb3ctc2NyaXB0cycNCisNCisgIC8vIDEyKSBjaGVj
ayB0aGF0IFhIUiBpcyBibG9ja2VkIGluIGEgc2FuZGJveGVkIGlmcmFtZSB3aXRoICJhbGxvdy1z
Y3JpcHRzIiBidXQgV0lUSE9VVCAiYWxsb3ctc2FtZS1vcmlnaW4iDQorICAvLyB0aGlzIGlzIGRv
bmUgYnkgZmlsZV9pZnJhbWVfYl9pZjMuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnIGJ1
dCBub3QgJ2FsbG93LXNhbWUtb3JpZ2luJw0KK30NCis8L3NjcmlwdD4NCis8Ym9keSBvbmxvYWQ9
ImRvVGVzdCgpIj4NCis8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5t
b3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+
IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzDQorPHAgaWQ9
ImRpc3BsYXkiPjwvcD4NCis8ZGl2IGlkPSJjb250ZW50Ij4NCis8aWZyYW1lIHNhbmRib3g9IiIg
aWQ9ImlmXzEiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIiBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmln
aW4gYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzIiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lm
Mi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJv
eD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzMiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lm
My5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvZGl2Pg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>617129</attachid>
            <date>2012-04-20 15:49:43 -0700</date>
            <delta_ts>2012-06-05 14:38:29 -0700</delta_ts>
            <desc>iframe sandbox tests - navigation v5</desc>
            <filename>iframe_sandbox_tests_navigation</filename>
            <type>text/plain</type>
            <size>25729</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNjIxMGU4ODRjYzVkZDczYWEwNzkxMDI4ODM5
ZTEzOTZjMGE1MDFlNgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBuYXZpZ2F0aW9uCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFr
ZWZpbGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0zMTcsMTYgKzMxNywz
NyBAQCBfVEVTVF9GSUxFUyA9IFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIFwK
IAkJZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmNS5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX2ZhaWwuaHRtbCBcCiAJ
CWZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5k
Ym94X29wZW5fd2luZG93X2ZhaWwuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5q
cyBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZmFpbC5qcyBcCisJCXRlc3RfaWZyYW1lX3NhbmRi
b3hfbmF2aWdhdGlvbi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJv
eF9kX2lmMy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sIFwKKwkJZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
Ni5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNy5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmOC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOS5odG1s
IFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwgXAorCQlmaWxl
X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjEu
aHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjIuaHRtbCBcCisJCWZpbGVfaWZyYW1l
X3NhbmRib3hfZV9pZjMuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjQuaHRtbCBc
CisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjUuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfZV9pZjYuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fcGFz
cy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9mYWlsLmh0bWwg
XAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X3BsdWdpbnMuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3Nh
bmRib3hfZl9pZjEuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbCBcCiAJ
CWZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbF5oZWFkZXJzXiBcCiAJCXRlc3RfaWZyYW1l
X3NhbmRib3hfd29ya2Vycy5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9nX2lmMS5odG1s
IFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF93b3JrZXIuanMgXAogCQkkKE5VTEwpCmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEu
aHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
MS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxLmh0bWwKQEAgLTAsMCAr
MSwxOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0
PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3Rz
L1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5
cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBzZW5k
TW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOworfQorPC9zY3JpcHQ+Cis8Ym9k
eSBvbmxvYWQ9ImRvVGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0
cycKKworICA8YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1s
P2lmXzEiIHRhcmdldD0iX3NlbGYiIGlkPSdhbmNob3InPgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Rf
aWYyLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
ZF9pZjIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sCkBAIC0w
LDAgKzEsMjggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVU
ZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90
ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlw
dCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KKy8vIG5lZWRlZCB0byBmb3J3YXJkIHRo
ZSBtZXNzYWdlIHRvIHRoZSBtYWluIHRlc3QgcGFnZQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
Im1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOworCitmdW5jdGlvbiByZWNlaXZlTWVz
c2FnZShldmVudCkgeyAKKyAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IGV2ZW50LmRh
dGEub2ssIGRlc2M6IGV2ZW50LmRhdGEuZGVzY30sICIqIik7Cit9CisKK2Z1bmN0aW9uIGRvVGVz
dCgpIHsKKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsKK30KKzwv
c2NyaXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGgg
J2FsbG93LXNjcmlwdHMnCisKKyAgPGlmcmFtZSBuYW1lPSJmb28iIHNyYz0iZmlsZV9pZnJhbWVf
c2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9p
ZnJhbWU+CisKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3Mu
aHRtbD9pZjIiIHRhcmdldD0nZm9vJyBpZD0nYW5jaG9yJz4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9k
X2lmMy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2RfaWYzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjMuaHRtbApAQCAt
MCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8
bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxl
VGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPGJvZHk+CisgIEkgYW0gc2FuZGJveGVkIHdpdGgg
J2FsbG93LXNjcmlwdHMnCisKKyAgPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBpZD0i
aWZfNCIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY0Lmh0bWwiIGhlaWdodD0iMTAiIHdp
ZHRoPSIxMCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjQuaHRtbCBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY0Lmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cisg
IDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4K
KyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3Qv
RXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0
aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBzZW5kTW91c2VFdmVudCh7
dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRv
VGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycKKworICA8YSBo
cmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fZmFpbC5odG1sIiB0YXJnZXQ9J19w
YXJlbnQnIGlkPSdhbmNob3InPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
ICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+
CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0
L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgc2VuZE1vdXNlRXZlbnQo
e3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJk
b1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMgYWxsb3ctc2Ft
ZS1vcmlnaW4nCisKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX2Zh
aWwuaHRtbCIgdGFyZ2V0PSdzaWJsaW5nJyBpZD0nYW5jaG9yJz4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9kX2lmNi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWY2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjYuaHRtbApA
QCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgor
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2lt
cGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxz
Y3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1Rlc3QoKSB7
CisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYW5jaG9yJyk7Cit9Cis8L3Njcmlw
dD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxv
dy1zY3JpcHRzJworCisgIDxhIGhyZWY9ImZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjcuaHRtbCIg
dGFyZ2V0PSdfc2VsZicgaWQ9J2FuY2hvcic+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjcuaHRt
bCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwKQEAgLTAsMCArMSwx
NyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVz
dC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+
CitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIGNvbnNvbGUubG9nKCIqKioqIGZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjcuaHRtbCIpOworICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIoZmFsc2UsICJh
IHNhbmRib3hlZCBkb2N1bWVudCB3aGVuIG5hdmlnYXRlZCBzaG91bGQgc3RpbGwgTk9UIGJlIHNh
bWUtb3JpZ2luIHdpdGggaXRzIHBhcmVudCIpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9
ImRvVGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycKKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9kX2lmOC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2RfaWY4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYv
bnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
ZF9pZjguaHRtbApAQCAtMCwwICsxLDE3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhl
YWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2
MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVm
PSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJh
cHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKwl3aW5kb3cucGFy
ZW50Lm1vZGlmeV9pZl84KCk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCki
PgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJyBhbmQgJ2FsbG93LXNhbWUt
b3JpZ2luJyB0aGUgZmlyc3QgdGltZSBJIGFtIGxvYWRlZCwgYW5kCisJd2l0aCAnYWxsb3ctc2Ny
aXB0cycgdGhlIHNlY29uZCB0aW1lCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjkuaHRtbCBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY5Lmh0bWwKQEAgLTAsMCArMSwxNyBAQAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3Mi
Lz4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CitmdW5j
dGlvbiBkb1Rlc3QoKSB7CisJd2luZG93LnBhcmVudC5tb2RpZnlfaWZfOSgpOworfQorPC9zY3Jp
cHQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxs
b3ctc2NyaXB0cycgYW5kICdhbGxvdy1zYW1lLW9yaWdpbicgdGhlIGZpcnN0IHRpbWUgSSBhbSBs
b2FkZWQsIGFuZAorCXdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyB0aGUgc2Vjb25kIHRpbWUKKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9lX2lmMS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2VfaWYxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZV9pZjEuaHRtbApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4N
Cis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBC
dWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9j
c3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorICA8c2NyaXB0IHR5cGU9
ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVz
dC5qcyI+PC9zY3JpcHQ+DQorPC9oZWFkPg0KKzxib2R5Pg0KKyAgPHNjcmlwdD4NCisgICAgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOw0K
Kw0KKyAgICBmdW5jdGlvbiByZWNlaXZlTWVzc2FnZShldmVudCkNCisgICAgew0KKyAgICAgIHdp
bmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoImNsb3NlIiwgIioiKTsNCisNCisgICAgICBTaW1wbGVU
ZXN0LmV4ZWN1dGVTb29uKGZ1bmN0aW9uKCkgew0KKyAgICAgICAgd2luZG93LmNsb3NlKCk7DQor
ICAgICAgfSk7IA0KKyAgICB9DQorICA8L3NjcmlwdD4NCisgIDxpZnJhbWUgc2FuZGJveD0nYWxs
b3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicgaWQ9J2lmXzYnIHNyYz0iZmlsZV9pZnJhbWVf
c2FuZGJveF9lX2lmNi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwv
Ym9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2VfaWYyLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0g
L2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9lX2lmMi5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1s
Pg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9y
IEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0
L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCisgIDxzY3JpcHQgdHlw
ZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVU
ZXN0LmpzIj48L3NjcmlwdD4NCis8L2hlYWQ+DQorPGJvZHk+DQorICA8c2NyaXB0Pg0KKyAgICB3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7
DQorDQorICAgIGZ1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KQ0KKyAgICB7DQorICAgICAg
U2ltcGxlVGVzdC5leGVjdXRlU29vbihmdW5jdGlvbigpIHsNCisgICAgICAgIHdpbmRvdy5jbG9z
ZSgpOw0KKyAgICAgIH0pOw0KKyAgICB9DQorICA8L3NjcmlwdD4NCisgIDxpZnJhbWUgc2FuZGJv
eD0nYWxsb3ctc2NyaXB0cyBhbGxvdy10b3AtbmF2aWdhdGlvbiBhbGxvdy1zYW1lLW9yaWdpbicg
aWQ9J2lmXzEnIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMS5odG1sIiBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMy5odG1sCkBAIC0wLDAgKzEsMTEg
QEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPGJvZHk+DQorICA8aWZyYW1lIHNhbmRib3g9J2FsbG93
LXNjcmlwdHMgYWxsb3ctdG9wLW5hdmlnYXRpb24nIGlkPSdpZl81JyBzcmM9ImZpbGVfaWZyYW1l
X3NhbmRib3hfZV9pZjUuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8
L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWY0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfZV9pZjQuaHRtbApAQCAtMCwwICsxLDExIEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRt
bD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZv
ciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4
dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxi
b2R5Pg0KKyAgPGlmcmFtZSBzYW5kYm94PSdhbGxvdy1zY3JpcHRzIGFsbG93LXRvcC1uYXZpZ2F0
aW9uJyBpZD0naWZfMycgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwiIGhlaWdo
dD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjUu
aHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lm
NS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWY1Lmh0bWwKQEAgLTAsMCAr
MSwxOSBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8
bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxl
VGVzdC90ZXN0LmNzcyIvPg0KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
L3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+DQorPC9oZWFkPg0KKzxz
Y3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+DQorZnVuY3Rpb24gZG9UZXN0KCkg
ew0KKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsNCit9DQorPC9z
Y3JpcHQ+DQorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+DQorICBJIGFtIHNhbmRib3hlZCB3aXRo
ICdhbGxvdy1zY3JpcHRzIGFuZCBhbGxvdy10b3AtbmF2aWdhdGlvbicNCisNCisgIDxhIGhyZWY9
ImZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fcGFzcy5odG1sIiB0YXJnZXQ9J190
b3AnIGlkPSdhbmNob3InPg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWY2Lmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjYuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNi5odG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwh
RE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
Pg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5j
c3MiLz4NCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1w
bGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0Pg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwv
c2NyaXB0Pg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQi
Pg0KK2Z1bmN0aW9uIGRvVGVzdCgpIHsNCisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9
LCAnYW5jaG9yJyk7DQorDQorICAgU2ltcGxlVGVzdC5leGVjdXRlU29vbihmdW5jdGlvbigpIHsN
CisgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoImNsb3NlIiwgIioiKTsNCisgICB9KTsN
Cit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+DQorICBJIGFtIHNhbmRi
b3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJw0KKw0KKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2Fu
ZGJveF90b3BfbmF2aWdhdGlvbl9mYWlsLmh0bWwiIHRhcmdldD0nX3RvcCcgaWQ9J2FuY2hvcic+
DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwKQEAgLTAs
MCArMSwxNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRl
c3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KK0ZBSUwK
KzwvYm9keT4KKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgd2luZG93LnBh
cmVudC5wb3N0TWVzc2FnZSh7b2s6IGZhbHNlLCBkZXNjOiAidGhpcyBuYXZpZ2F0aW9uIHNob3Vs
ZCBOT1QgYmUgYWxsb3dlZCBieSBhIHNhbmRib3hlZCBkb2N1bWVudCJ9LCAiKiIpOworICB9Cis8
L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbApAQCAtMCwwICsx
LDE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90
ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGRvU3R1ZmYoKSB7CisgIHdp
bmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiB0cnVlLCBkZXNjOiAidGhpcyBuYXZpZ2F0aW9u
IHNob3VsZCBiZSBhbGxvd2VkIGJ5IGEgc2FuZGJveGVkIGRvY3VtZW50In0sICIqIik7Cit9Cis8
L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KK1BBU1MKKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X25hdmlnYXRpb25fc3RhcnQuaHRtbApAQCAtMCwwICsxLDExIEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgor
PC9oZWFkPgorPGJvZHk+CitJIGFtIGp1c3QgYSBub3JtYWwgSFRNTCBkb2N1bWVudCwgcHJvYmFi
bHkgY29udGFpbmVkIGluIGEgc2FuZGJveGVkIGlmcmFtZQorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3Rv
cF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fZmFpbC5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzwh
RE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
Pg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5j
c3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdD4NCitmdW5jdGlvbiBkb1N0dWZmKCkgew0KKwl3aW5k
b3cub3BlbmVyLnBvc3RNZXNzYWdlKHtvazogZmFsc2UsIGRlc2M6ICAidG9wIG5hdmlnYXRpb24g
c2hvdWxkIE5PVCBiZSBhbGxvd2VkIGJ5IGEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgJ2Fs
bG93LXRvcC1uYXZpZ2F0aW9uJyJ9LCAiKiIpOw0KKwl3aW5kb3cuY2xvc2UoKTsNCit9DQorPC9z
Y3JpcHQ+DQorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPg0KK0ZBSUwNCis8L2JvZHk+DQorPC9o
dG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF90b3BfbmF2aWdhdGlvbl9wYXNzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fcGFzcy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X3RvcF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbApAQCAtMCwwICsx
LDE3IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJz
ZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVU
ZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxzY3JpcHQ+DQorZnVuY3Rpb24gZG9TdHVmZigp
IHsNCisJd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZSh7b2s6IHRydWUsIGRlc2M6ICAidG9wIG5h
dmlnYXRpb24gc2hvdWxkIGJlIGFsbG93ZWQgYnkgYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aCAn
YWxsb3ctdG9wLW5hdmlnYXRpb24nIn0sICIqIik7DQorCXdpbmRvdy5jbG9zZSgpOw0KK30NCis8
L3NjcmlwdD4NCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+DQorUEFTUw0KKzwvYm9keT4NCis8
L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFt
ZV9zYW5kYm94X25hdmlnYXRpb24uaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVz
dF9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3Nh
bmRib3hfbmF2aWdhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTkwIEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPCEtLQoraHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVz
CistLT4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZv
ciBCdWcgMzQxNjA0IC0gbmF2aWdhdGlvbjwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGlj
YXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48
L3NjcmlwdD4KKwk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2lt
cGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwv
aGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CisvKiogVGVzdCBm
b3IgQnVnIDM0MTYwNCAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZS
QU1FcyAqKi8KKy8qKiBOYXZpZ2F0aW9uIHRlc3RzICoqLworCisvLyBhIHBvc3RNZXNzYWdlIGhh
bmRsZXIgdGhhdCBpcyB1c2VkIGJ5IHNhbmRib3hlZCBpZnJhbWVzIHdpdGhvdXQKKy8vICdhbGxv
dy1zYW1lLW9yaWdpbicvb3RoZXIgd2luZG93cyB0byBjb21tdW5pY2F0ZSBwYXNzL2ZhaWwgYmFj
ayB0byB0aGlzIG1haW4gcGFnZS4KKy8vIGl0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggYW4g
b2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNjOgorLy8gPGRlc2NyaXB0aW9uIG9mIHRo
ZSB0ZXN0PiB3aGljaCBpdCB0aGVuIGZvcndhcmRzIHRvIG9rKCkKK3dpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTsKKwordmFyIHRlc3RQYXNz
ZXNSZWNlaXZlZCA9IDA7CisKK2Z1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KSB7IAorICBv
a193cmFwcGVyKGV2ZW50LmRhdGEub2ssIGV2ZW50LmRhdGEuZGVzYyk7Cit9CisKK3ZhciBjb21w
bGV0ZWRUZXN0cyA9IDA7Cit2YXIgcGFzc2VkVGVzdHMgPSAwOworCitmdW5jdGlvbiBva193cmFw
cGVyKHJlc3VsdCwgZGVzYykgeworICBvayhyZXN1bHQsIGRlc2MpOworCisgIGNvbXBsZXRlZFRl
c3RzKys7CisKKyAgaWYgKHJlc3VsdCkgeworICAgIHBhc3NlZFRlc3RzKys7CisgIH0KKworICAv
LyBSRVZJRVcgOiBpZiBvbmUgb2YgdGhlc2UgdGVzdHMgZmFpbHMgYW5kIHRoaXMgaXNuJ3QgY2Fs
bGVkCisgIC8vIHRoaXMgbWVhbnMgdGhpcyB0ZXN0IHdpbGwgaGFuZyB1bnRpbCB0aGUgdGltZSBv
dXQgaGFwcGVucyA6KAorICAvLyBhZHZpY2Ugb24gYmV0dGVyIHdheXMgdG8gc3luY2hyb25pemUg
dGhpbmdzIGFwcHJlY2lhdGVkICEKKyAgLy8gQWxzbywgbWFueSBvZiB0aGUgdGVzdHMgZm9yIG5h
dmlnYXRpb24gZmFpbCBpZiBiYWQgKGNhbGwgb2soZmFsc2UsIC4uLikKKyAgLy8gc28gaG93IGRv
IHdlIHRlbGwgaWYgdGhlc2UgaGF2ZSBjb21wbGV0ZWQgLSBpcyB1c2luZyBvbkxvYWQgZW5vdWdo
ID8KKyAgaWYgKGNvbXBsZXRlZFRlc3RzID09IDQpIHsKKyAgICBvayhwYXNzZWRUZXN0cyA9PSA0
LCAiVGhlcmUgYXJlIDQgbmF2aWdhdGlvbiB0ZXN0cyB0aGF0IHNob3VsZCBwYXNzIik7CisKKyAg
ICBTaW1wbGVUZXN0LmZpbmlzaCgpOworICB9Cit9CisKK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAg
U2ltcGxlVGVzdC53YWl0Rm9yRXhwbGljaXRGaW5pc2goKTsKKyAgLy8gcGFzc2VzIGlmIGdvb2QK
KyAgLy8gMSkgQSBzYW5kYm94ZWQgaWZyYW1lIGlzIGFsbG93ZWQgdG8gbmF2aWdhdGUgaXRzZWxm
CisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEuaHRtbCB3aGljaCBoYXMg
J2FsbG93LXNjcmlwdHMnIGFuZCBuYXZpZ2F0ZXMgdG8KKyAgLy8gZmlsZV9pZnJhbWVfc2FuZGJv
eF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbCkuCisKKyAgLy8gcGFzc2VzIGlmIGdvb2QKKyAgLy8gMikg
QSBzYW5kYm94ZWQgaWZyYW1lIGlzIGFsbG93ZWQgdG8gbmF2aWdhdGUgaXRzIGNoaWxkcmVuLCBl
dmVuIGlmIHRoZXkgYXJlIHNhbmRib3hlZAorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWYyLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJywgaXQgbmF2aWdhdGVzIGEg
Y2hpbGQKKyAgLy8gaWZyYW1lIGNvbnRhaW5pbmcgZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0
aW9uX3N0YXJ0Lmh0bWwgdG8gZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRt
bCkuCisKKyAgLy8gZmFpbHMgaWYgYmFkCisgIC8vIDMpIEEgc2FuZGJveGVkIGlmcmFtZSBpcyBu
b3QgYWxsb3dlZCB0byBuYXZpZ2F0ZSBpdHMgYW5jZXN0b3IKKyAgLy8gKGRvbmUgYnkgZmlsZV9p
ZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmMy5odG1sLAorICAvLyBpdCBhdHRlbXB0cyB0byBuYXZpZ2F0ZSBmaWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWYzLmh0bWwgdG8gZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX2Zh
aWwuaHRtbCkuCisKKyAgLy8gZmFpbHMgaWYgYmFkCisgIC8vIDQpIEEgc2FuZGJveGVkIGlmcmFt
ZSBpcyBub3QgYWxsb3dlZCB0byBuYXZpZ2F0ZSBpdHMgc2libGluZworICAvLyAoZG9uZSBieSBm
aWxlX2lmcmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwgd2hpY2ggaGFzICdhbGxvdyBzY3JpcHRzIGFs
bG93LXNhbWUtb3JpZ2luJworICAvLyBhbmQgYXR0ZW1wdHMgdG8gbmF2aWdhdGUgZmlsZV9pZnJh
bWVfbmF2aWdhdGlvbl9zdGFydC5odG1sIGNvbnRhaW5lZCBpbiBpZl9zaWJsaW5nIG9uIHRoaXMK
KyAgLy8gcGFnZSB0byBmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fZmFpbC5odG1sKS4K
KworICAvLyBmYWlscyBpZiBiYWQKKyAgLy8gNSkgV2hlbiBhIGxpbmsgaXMgY2xpY2tlZCBpbiBh
IHNhbmRib3hlZCBpZnJhbWUsIHRoZSBkb2N1bWVudCBuYXZpZ2F0ZWQgdG8gaXMgc2FuZGJveGVk
CisgIC8vIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBkb2N1bWVudCBhbmQgaXMgbm90IHNhbWUg
b3JpZ2luIHdpdGggcGFyZW50IGRvY3VtZW50CisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjYuaHRtbCB3aGljaCBzaW11bGF0ZXMgYSBsaW5rIGNsaWNrIGFuZCBuYXZpZ2F0
ZXMKKyAgLy8gdG8gZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNy5odG1sIHdoaWNoIGF0dGVtcHRz
IHRvIGNhbGwgYmFjayBpbnRvIGl0cyBwYXJlbnQpLgorCisgIC8vIGZhaWxzIGlmIGJhZAorICAv
LyA2KSBBbiBpZnJhbWUgKGlmXzgpIGhhcyBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxv
dy1zY3JpcHRzIiwgdGhlIHNhbmRib3hlZCBkb2N1bWVudAorICAvLyAoZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmXzguaHRtbCkgdGhhdCBpdCBjb250YWlucyBhY2Nlc3NlcyBpdHMgcGFyZW50ICh0
aGlzIGZpbGUpIGFuZCByZW1vdmVzCisgIC8vICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kIHRoZW4g
dHJpZ2dlcnMgYSByZWxvYWQuCisgIC8vIFRoZSBkb2N1bWVudCBzaG91bGQgbm90IGJlIGFibGUg
dG8gYWNjZXNzIGl0cyBwYXJlbnQgKHRoaXMgZmlsZSkuCisKKyAgLy8gZmFpbHMgaWYgYmFkCisg
IC8vIDcpIEFuIGlmcmFtZSAoaWZfOSkgaGFzIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFs
bG93LXNjcmlwdHMiLCB0aGUgc2FuZGJveGVkIGRvY3VtZW50CisgIC8vIChmaWxlX2lmcmFtZV9z
YW5kYm94X2RfaWZfOS5odG1sKSB0aGF0IGl0IGNvbnRhaW5zIGFjY2Vzc2VzIGl0cyBwYXJlbnQg
KHRoaXMgZmlsZSkgYW5kIHJlbW92ZXMKKyAgLy8gJ2FsbG93LXNjcmlwdHMnIGFuZCB0aGVuIHRy
aWdnZXJzIGEgcmVsb2FkLgorICAvLyBUaGUgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhYmxlIHRv
IHJ1biBhIHNjcmlwdCBhbmQgYWNjZXNzIGl0cyBwYXJlbnQgKHRoaXMgZmlsZSkuCisKKyAgLy8g
b3BlbiB1cCB0aGUgdG9wIG5hdmlnYXRpb24gdGVzdHMKKworICAvLyBmYWlscyBpZiBiYWQKKyAg
Ly8gOCkgaWZyYW1lIHdpdGggc2FuZGJveD0nYWxsb3ctc2NyaXB0cycgY2FuIE5PVCBuYXZpZ2F0
ZSB0b3AKKyAgLy8gZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMS5odG1sIGNvbnRhaW5zIGZpbGVf
aWZyYW1lX3NhbmRib3hfZV9pZjYuaHRtbCB3aGljaAorICAvLyBhdHRlbXB0cyB0byBuYXZpZ2F0
ZSB0b3AKKyAgd2luZG93Lm9wZW4oImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjEuaHRtbCIpOwor
CQorICAvLyBmYWlscyBpZiBiYWQgCisgIC8vIDkpIGlmcmFtZSB3aXRoIHNhbmRib3g9J2FsbG93
LXNjcmlwdHMnIG5lc3RlZCBpbnNpZGUgaWZyYW1lIHdpdGgKKyAgLy8gJ2FsbG93LXRvcC1uYXZp
Z2F0aW9uIGFsbG93LXNjcmlwdHMnIGNhbiBOT1QgbmF2aWdhdGUgdG9wIAorICAvLyBmaWxlX2lm
cmFtZV9zYW5kYm94X2VfaWYyLmh0bWwgY29udGFpbnMgZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lm
MS5odG1sIHdoaWNoIAorICAvLyBjb250YWlucyBmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY2Lmh0
bWwgd2hpY2ggYXR0ZW1wdHMgdG8gbmF2aWdhdGUgdG9wCisgIHdpbmRvdy5vcGVuKCJmaWxlX2lm
cmFtZV9zYW5kYm94X2VfaWYyLmh0bWwiKTsKKworICAvLyBwYXNzZXMgaWYgZ29vZAorICAvLyAx
MCkgaWZyYW1lIHdpdGggc2FuZGJveD0nYWxsb3ctdG9wLW5hdmlnYXRpb24gYWxsb3ctc2NyaXB0
cycgY2FuIG5hdmlnYXRlIHRvcAorICAvLyBmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwg
Y29udGFpbnMgZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNS5odG1sIHdoaWNoIG5hdmlnYXRlcyB0
b3AKKyAgd2luZG93Lm9wZW4oImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjMuaHRtbCIpOworCisg
IC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDExKSBpZnJhbWUgd2l0aCBzYW5kYm94PSdhbGxvdy10
b3AtbmF2aWdhdGlvbiBhbGxvdy1zY3JpcHRzJyBuZXN0ZWQgaW5zaWRlIGFuIGlmcmFtZSB3aXRo
CisgIC8vICdhbGxvdy10b3AtbmF2aWdhdGlvbiBhbGxvdy1zY3JpcHRzJyBjYW4gbmF2aWdhdGUg
dG9wCisgIC8vIGZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjQuaHRtbCBjb250YWlucyBmaWxlX2lm
cmFtZV9zYW5kYm94X2VfaWYzLmh0bWwgd2hpY2ggY29udGFpbnMKKyAgLy8gZmlsZV9pZnJhbWVf
c2FuZGJveF9lX2lmNS5odG1sIHdoaWNoIG5hdmlnYXRlcyB0b3AKKyAgd2luZG93Lm9wZW4oImZp
bGVfaWZyYW1lX3NhbmRib3hfZV9pZjQuaHRtbCIpOworfQorCit3aW5kb3cubW9kaWZpZWRfaWZf
OCA9IGZhbHNlOworCitmdW5jdGlvbiByZWxvYWRfaWZfOCgpIHsKKyAgdmFyIGlmXzggPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfOCcpOworICBpZl84LnNyYyA9ICdmaWxlX2lmcmFtZV9z
YW5kYm94X2RfaWY4Lmh0bWwnOworfQorCitmdW5jdGlvbiBtb2RpZnlfaWZfOCgpIHsKKyAgLy8g
SWYgdGhpcyBpcyB0aGUgc2Vjb25kIHRpbWUgdGhpcyBoYXMgYmVlbiBjYWxsZWQKKyAgLy8gdGhh
dCdzIGEgZmFpbGVkIHRlc3QgKGFsbG93LXNhbWUtb3JpZ2luIHdhcyByZW1vdmVkCisgIC8vIHRo
ZSBmaXJzdCB0aW1lKS4KKyAgaWYgKHdpbmRvdy5tb2RpZmllZF9pZl84KSB7CisgICAgb2tfd3Jh
cHBlcihmYWxzZSwgImFuIHNhbmRib3hlZCBpZnJhbWUgZnJvbSB3aGljaCAnYWxsb3ctc2FtZS1v
cmlnaW4nIHdhcyByZW1vdmVkIHNob3VsZCBub3QgYmUgYWJsZSB0byBhY2Nlc3MgaXRzIHBhcmVu
dCIpOworCisgICAgLy8gbmVlZCB0byByZXR1cm4gaGVyZSBzaW5jZSB3ZSBlbmQgdXAgaW4gYW4g
aW5maW5pdGUgbG9vcCBvdGhlcndpc2UKKyAgICByZXR1cm47CisgIH0KKworICB2YXIgaWZfOCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl84Jyk7CisgIHdpbmRvdy5tb2RpZmllZF9pZl84
ID0gdHJ1ZTsKKworICBpZl84LnNhbmRib3ggPSAnYWxsb3ctc2NyaXB0cyc7CisgIHNlbmRNb3Vz
ZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYV9idXR0b24nKTsKK30KKword2luZG93Lm1vZGlmaWVk
X2lmXzkgPSBmYWxzZTsKKworZnVuY3Rpb24gcmVsb2FkX2lmXzkoKSB7CisgIHZhciBpZl85ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmXzknKTsKKyAgaWZfOS5zcmMgPSAnZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmOS5odG1sJzsKK30KKworZnVuY3Rpb24gbW9kaWZ5X2lmXzkoKSB7Cisg
IC8vIElmIHRoaXMgaXMgdGhlIHNlY29uZCB0aW1lIHRoaXMgaGFzIGJlZW4gY2FsbGVkCisgIC8v
IHRoYXQncyBhIGZhaWxlZCB0ZXN0IChhbGxvdy1zY3JpcHRzIHdhcyByZW1vdmVkCisgIC8vIHRo
ZSBmaXJzdCB0aW1lKS4KKyAgaWYgKHdpbmRvdy5tb2RpZmllZF9pZl85KSB7CisgICAgb2tfd3Jh
cHBlcihmYWxzZSwgImFuIHNhbmRib3hlZCBpZnJhbWUgZnJvbSB3aGljaCAnYWxsb3ctc2NyaXB0
cycgc2hvdWxkIGJlIHJlbW92ZWQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyBpdHMgcGFy
ZW50IHZpYSBhIHNjcmlwdCIpOworCisgICAgLy8gbmVlZCB0byByZXR1cm4gaGVyZSBzaW5jZSB3
ZSBlbmQgdXAgaW4gYW4gaW5maW5pdGUgbG9vcCBvdGhlcndpc2UKKyAgICByZXR1cm47CisgIH0K
KworICB2YXIgaWZfOSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl85Jyk7CisgIHdpbmRv
dy5tb2RpZmllZF9pZl85ID0gdHJ1ZTsKKworICBpZl85LnNhbmRib3ggPSAnYWxsb3ctc2FtZS1v
cmlnaW4nOworCisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYV9idXR0b24yJyk7
Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPgorPGEgdGFyZ2V0PSJfYmxh
bmsiIGhyZWY9Imh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM0
MTYwNCI+TW96aWxsYSBCdWcgMzQxNjA0PC9hPiAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0
dHJpYnV0ZSBmb3IgSUZSQU1FcworPHAgaWQ9ImRpc3BsYXkiPjwvcD4KKzxkaXYgaWQ9ImNvbnRl
bnQiPgorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMSIgc3JjPSJmaWxl
X2lmcmFtZV9zYW5kYm94X2RfaWYxLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJh
bWU+Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIGlkPSJpZl8yIiBzcmM9ImZpbGVf
aWZyYW1lX3NhbmRib3hfZF9pZjIuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFt
ZT4KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzMiIHNyYz0iZmlsZV9p
ZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1l
PgorPGlmcmFtZSBzYW5kYm94PSJhbGxvd19zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIiBpZD0i
aWZfNSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwiIGhlaWdodD0iMTAiIHdp
ZHRoPSIxMCI+PC9pZnJhbWU+Cis8aWZyYW1lIGlkPSJpZl9zaWJsaW5nIiBzcmM9ImZpbGVfaWZy
YW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAi
PjwvaWZyYW1lPgorPGlmcmFtZSBzYW5kYm94PSJhbGxvd19zY3JpcHRzIiBpZD0iaWZfNiIgc3Jj
PSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+
PC9pZnJhbWU+Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXNjcmlw
dHMiIGlkPSJpZl84IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjguaHRtbCIgaGVpZ2h0
PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1v
cmlnaW4gYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzkiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9k
X2lmOS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPC9kaXY+Cis8aW5w
dXQgdHlwZT0nYnV0dG9uJyBpZD0iYV9idXR0b24iIG9uY2xpY2s9J3JlbG9hZF9pZl84KCknPgor
PGlucHV0IHR5cGU9J2J1dHRvbicgaWQ9ImFfYnV0dG9uMiIgb25jbGljaz0ncmVsb2FkX2lmXzko
KSc+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>621201</attachid>
            <date>2012-05-04 15:46:29 -0700</date>
            <delta_ts>2012-08-08 17:15:21 -0700</delta_ts>
            <desc>iframe sandbox tests - workers v2</desc>
            <filename>iframe_sandbox_tests_workers</filename>
            <type>text/plain</type>
            <size>6265</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZDU5NGI0N2FlZWY5OTk5ODFjZTc1YjBkNzJi
MGQ3ZWQwOGE4MzQyMgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSB3b3JrZXJzCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yOTEsMTYgKzI5MSwxOSBA
QCBfVEVTVF9GSUxFUyA9IFwKIAkJdGVzdF9saV9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRtbCBc
CiAJCXRlc3Rfb2xfYXR0cmlidXRlc19yZWZsZWN0aW9uLmh0bWwgXAogCQl0ZXN0X2J1ZzY1MTk1
Ni5odG1sIFwKIAkJdGVzdF9idWc2OTQ1MDMuaHRtbCBcCiAJCXRlc3Rfb2JqZWN0X3BsdWdpbl9u
YXYuaHRtbCBcCiAJCXRlc3RfYnVnNzQyMDMwLmh0bWwgXAogCQl0ZXN0X2J1Zzc0MjU0OS5odG1s
IFwKIAkJdGVzdF9idWc3NDU2ODUuaHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRib3hfd29ya2Vy
cy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9nX2lmMS5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF93b3JrZXIuanMgXAogCQkkKE5VTEwpCiAKIF9CUk9XU0VSX1RFU1RfRklMRVMg
PSBcCiAJCWJyb3dzZXJfYnVnNjQ5Nzc4LmpzIFwKIAkJZmlsZV9idWc2NDk3NzguaHRtbCBcCiAJ
CWZpbGVfYnVnNjQ5Nzc4Lmh0bWxeaGVhZGVyc14gXAogCQkkKE5VTEwpCiAKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9nX2lmMS5odG1s
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2dfaWYxLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZ19pZjEuaHRtbApAQCAtMCwwICsxLDYx
IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0
Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpz
Ij48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJl
Zj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KKyAgZnVuY3Rpb24gb2socmVzdWx0LCBkZXNjKSB7CisgICAgd2lu
ZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHJlc3VsdCwgZGVzYzogZGVzY30sICIqIik7Cisg
IH0KKworICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIC8vIHRlc3QgZGF0YSBVUkkKKworICAg
IC8vIHNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAvLyAgIHNlbGYucG9z
dE1lc3NhZ2UoJ21ha2UgaXQgc28nKTsKKyAgICAvLyB9OworICAgIHZhciBkYXRhX3VybCA9ICJk
YXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtODtiYXNlNjQsYzJWc1ppNXZibTFsYzNOaFoyVWdQ
U0JtZFc1amRHbHZiaWhsZG1WdWRDa2dleUFnRFFvZ0lDQWdjMlZzWmk1d2IzTjBUV1Z6YzJGblpT
Z25iV0ZyWlNCcGRDQnpieWNwT3lBZ0RRcDlPdz09IjsKKyAgICB2YXIgd29ya2VyX2RhdGEgPSBu
ZXcgV29ya2VyKGRhdGFfdXJsKTsKKyAgICB3b3JrZXJfZGF0YS5hZGRFdmVudExpc3RlbmVyKCdt
ZXNzYWdlJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIG9rKHRydWUsICJhIHdvcmtlciBpbiBh
IHNhbmRib3hlZCBkb2N1bWVudCBzaG91bGQgYmUgYWJsZSB0byBiZSBsb2FkZWQgZnJvbSBhIGRh
dGE6IFVSSSIpOworICAgIH0sIGZhbHNlKTsKKworICAgIHdvcmtlcl9kYXRhLnBvc3RNZXNzYWdl
KCJlbmdhZ2UhIik7CisKKyAgICAvLyB0ZXN0IGEgYmxvYiBVUkkgd2UgY3JlYXRlZCAod2lsbCBo
YXZlIHRoZSBzYW1lIG51bGwgcHJpbmNpcGFsCisgICAgLy8gYXMgdXMKKyAgICB2YXIgYiA9IG5l
dyBCbG9iKFsib25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsgc2VsZi5wb3N0TWVzc2FnZSgn
bWFrZSBpdCBzbycpO307Il0pOworCisgICAgdmFyIGJsb2JVUkwgPSBVUkwuY3JlYXRlT2JqZWN0
VVJMKGIpOworCisgICAgdmFyIHdvcmtlcl9ibG9iID0gbmV3IFdvcmtlcihibG9iVVJMKTsKKwor
ICAgIHdvcmtlcl9ibG9iLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihldmVu
dCkgeworICAgICAgb2sodHJ1ZSwgImEgd29ya2VyIGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHNo
b3VsZCBiZSBhYmxlIHRvIGJlIGxvYWRlZCBmcm9tIGEgYmxvYiBVUkkgIiArCisgICAgICAgICAi
Y3JlYXRlZCBieSB0aGF0IHNhbmRib3hlZCBkb2N1bWVudCIpOworICAgIH0sIGZhbHNlKTsKKwor
ICAgIHdvcmtlcl9ibG9iLnBvc3RNZXNzYWdlKCJlbmdhZ2UhIik7CisKKyAgICAvLyB0ZXN0IGxv
YWRpbmcgd2l0aCByZWxhdGl2ZSB1cmwgLSB0aGlzIHNob3VsZCBmYWlsIHNpbmNlIHdlIGFyZQor
ICAgIC8vIHNhbmRib3hlZCBhbmQgaGF2ZSBhIG51bGwgcHJpbmNpcGFsCisgICAgdmFyIHdvcmtl
cl9qcyA9IG5ldyBXb3JrZXIoJ2ZpbGVfaWZyYW1lX3NhbmRib3hfd29ya2VyLmpzJyk7CisKKyAg
ICB3b3JrZXJfanMub25lcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICBvayh0cnVlLCAi
YSB3b3JrZXIgaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGxv
YWQgZnJvbSBhIHJlbGF0aXZlIFVSSSIpOworICAgIH0KKworICAgIHdvcmtlcl9qcy5hZGRFdmVu
dExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIG9rKGZhbHNlLCAi
YSB3b3JrZXIgaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGxv
YWQgZnJvbSBhIHJlbGF0aXZlIFVSSSIpOworICAgIH0sIGZhbHNlKTsKKworICAgIHdvcmtlcl9q
cy5wb3N0TWVzc2FnZSgnZW5nYWdlJyk7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSdk
b1N0dWZmKCk7Jz4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMiCis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfd29ya2VyLmpzIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X3dvcmtlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF93b3JrZXIuanMKQEAgLTAsMCArMSwzIEBACitzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2
ZW50KSB7DQorICBzZWxmLnBvc3RNZXNzYWdlKCdtYWtlIGl0IHNvJyk7DQorfTsKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L3Rlc3RfaWZyYW1lX3NhbmRib3hfd29ya2Vycy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X3dvcmtlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJh
bWVfc2FuZGJveF93b3JrZXJzLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzwhLS0KK2h0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dp
P2lkPTM0MTYwNAorSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVz
IC0gdGVzdHMgZm9yIHdvcmtlcnMKKy0tPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04
Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9
ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVz
dC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90
ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0
eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNz
cyIvPgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KKy8q
KiBUZXN0IGZvciBCdWcgMzQxNjA0IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRl
IGZvciBJRlJBTUVzIC0gdGVzdCBmb3Igd29ya2VycyAqKi8KKworU2ltcGxlVGVzdC53YWl0Rm9y
RXhwbGljaXRGaW5pc2goKTsKKworLy8gYSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRoYXQgaXMgdXNl
ZCBieSBzYW5kYm94ZWQgaWZyYW1lcyB3aXRob3V0CisvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIHRv
IGNvbW11bmljYXRlIHBhc3MvZmFpbCBiYWNrIHRvIHRoaXMgbWFpbiBwYWdlLgorLy8gaXQgZXhw
ZWN0cyB0byBiZSBjYWxsZWQgd2l0aCBhbiBvYmplY3QgbGlrZSB7b2s6IHRydWUvZmFsc2UsIGRl
c2M6CisvLyA8ZGVzY3JpcHRpb24gb2YgdGhlIHRlc3Q+IHdoaWNoIGl0IHRoZW4gZm9yd2FyZHMg
dG8gb2soKQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2Fn
ZSwgZmFsc2UpOworCitmdW5jdGlvbiByZWNlaXZlTWVzc2FnZShldmVudCkKK3sKKyAgb2tfd3Jh
cHBlcihldmVudC5kYXRhLm9rLCBldmVudC5kYXRhLmRlc2MpOworfQorCit2YXIgY29tcGxldGVk
VGVzdHMgPSAwOwordmFyIHBhc3NlZFRlc3RzID0gMDsKKworZnVuY3Rpb24gb2tfd3JhcHBlcihy
ZXN1bHQsIGRlc2MpIHsKKyAgb2socmVzdWx0LCBkZXNjKTsKKworICBjb21wbGV0ZWRUZXN0cysr
OworCisgIGlmIChyZXN1bHQpIHsKKyAgICBwYXNzZWRUZXN0cysrOworICB9CisKKyAgaWYgKGNv
bXBsZXRlZFRlc3RzID09IDMpIHsKKyAgICBpcyhwYXNzZWRUZXN0cywgMywgIlRoZXJlIGFyZSAz
IHdvcmtlciB0ZXN0cyB0aGF0IHNob3VsZCBwYXNzIik7CisgICAgU2ltcGxlVGVzdC5maW5pc2go
KTsKKyAgfQorfQorCitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIC8vIHBhc3NlcyBpZiBnb29kCisg
IC8vIDEpIHRlc3QgdGhhdCBhIHdvcmtlciBpbiBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAnYWxs
b3ctc2NyaXB0cycgY2FuIGJlIGxvYWRlZAorICAvLyBmcm9tIGEgZGF0YTogVVJJCisgIC8vIChk
b25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfZ19pZjEuaHRtbCkKKworICAvLyBwYXNzZXMgaWYg
Z29vZAorICAvLyAyKSB0ZXN0IHRoYXQgYSB3b3JrZXIgaW4gYSBzYW5kYm94ZWQgaWZyYW1lIHdp
dGggJ2FsbG93LXNjcmlwdHMnIGNhbiBiZSBsb2FkZWQKKyAgLy8gZnJvbSBhIGJsb2IgVVJJIGNy
ZWF0ZWQgYnkgdGhlIHNhbmRib3hlZCBkb2N1bWVudCBpdHNlbGYKKyAgLy8gKGRvbmUgYnkgZmls
ZV9pZnJhbWVfc2FuZGJveF9nX2lmMS5odG1sKQorCisgIC8vIHBhc3NlcyBpZiBnb29kCisgIC8v
IDMpIHRlc3QgdGhhdCBhIHdvcmtlciBpbiBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAnYWxsb3ct
c2NyaXB0cycgd2l0aG91dAorICAvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIGNhbm5vdCBsb2FkIGEg
c2NyaXB0IHZpYSBhIHJlbGF0aXZlIFVSSQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5k
Ym94X2dfaWYxLmh0bWwpCit9CisKK2FkZExvYWRFdmVudChkb1Rlc3QpOworPC9zY3JpcHQ+Cis8
Ym9keT4KKzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxhLm1vemlsbGEu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJbXBs
ZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMKKzxwIGlkPSJkaXNwbGF5
Ij48L3A+Cis8ZGl2IGlkPSJjb250ZW50Ij4KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0
cyIgaWQ9ImlmXzEiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9nX2lmMS5odG1sIiBoZWlnaHQ9
IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="515230"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>621203</attachid>
            <date>2012-05-04 15:47:26 -0700</date>
            <delta_ts>2012-05-15 15:44:18 -0700</delta_ts>
            <desc>iframe sandbox v13</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>55646</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMDMyZDQzYjE3NzBmMGZmZTBjMDExMmQyYjQy
NjUyN2Y1N2YyNzQ5NAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgz
NSwxNiArODM1LDI3IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5kYm94QXR0cik7
CisKKworICAvKioKICAgICogRmlsbCAod2l0aCB0aGUgcGFyYW1ldGVycyBnaXZlbikgdGhlIGxv
Y2FsaXplZCBzdHJpbmcgbmFtZWQgfGFLZXl8IGluCiAgICAqIHByb3BlcnRpZXMgZmlsZSB8YUZp
bGV8LgogICAgKi8KIHByaXZhdGU6CiAgIHN0YXRpYyBuc3Jlc3VsdCBGb3JtYXRMb2NhbGl6ZWRT
dHJpbmcoUHJvcGVydGllc0ZpbGUgYUZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogYUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqKiBhUGFyYW1zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFQYXJhbXNMZW5ndGgsCkBAIC0xOTU1
LDQyICsxOTY2LDQ0IEBAIHB1YmxpYzoKICAgICogZnJvbSB0aGUgZG9jdW1lbnQgaXQgY29tZXMg
ZnJvbS4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4
dChuc0lVUkkgKmFVUkksIGJvb2wgKmFSZXN1bHQpOwogCiAgIC8qKgogICAgKiBTZXQgdGhlIGdp
dmVuIHByaW5jaXBhbCBhcyB0aGUgb3duZXIgb2YgdGhlIGdpdmVuIGNoYW5uZWwsIGlmCiAgICAq
IG5lZWRlZC4gIGFVUkkgbXVzdCBiZSB0aGUgVVJJIG9mIGFDaGFubmVsLiAgYVByaW5jaXBhbCBt
YXkgYmUKICAgICogbnVsbC4gIElmIGFTZXRVcEZvckFib3V0QmxhbmsgaXMgdHJ1ZSwgdGhlbiBh
Ym91dDpibGFuayB3aWxsIGdldAotICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBpdC4KLSAg
ICoKKyAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAgb24gaXQuIElmIGFGb3JjZU93bmVyIGlzIHRy
dWUsIHRoZSBvd25lcgorICAgKiB3aWxsIGJlIHNldCBvbiB0aGUgY2hhbm5lbCwgZXZlbiBpZiB0
aGUgcHJpbmNpcGFsIGNhbiBiZSBkZXRlcm1pbmVkCisgICAqIGZyb20gdGhlIGNoYW5uZWwuCiAg
ICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgd2hldGhlciB0aGUgcHJpbmNpcGFsIHdhcyBzZXQgdXAg
YXMgdGhlIG93bmVyCiAgICAqIG9mIHRoZSBjaGFubmVsLgogICAgKi8KICAgc3RhdGljIGJvb2wg
U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFGb3JjZU93bmVyID0gZmFsc2UpOwogCiAgIHN0YXRp
YyBuc3Jlc3VsdCBCdG9hKGNvbnN0IG5zQVN0cmluZyYgYUJpbmFyeURhdGEsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG5zQVN0cmluZyYgYUFzY2lpQmFzZTY0U3RyaW5nKTsKIAogICBzdGF0aWMg
bnNyZXN1bHQgQXRvYihjb25zdCBuc0FTdHJpbmcmIGFBc2NpaVN0cmluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSk7CiAKICAgLyoqIElmIGFKU0FycmF5
IGlzIGEgSmF2YXNjcmlwdCBhcnJheSwgdGhpcyBtZXRob2QgaXRlcmF0ZXMgb3ZlciBpdHMKICAg
ICogIGVsZW1lbnRzIGFuZCBhcHBlbmRzIHZhbHVlcyB0byBhUmV0VmFsIGFzIG5zSUF0b21zLgog
ICAgKiAgQHRocm93IE5TX0VSUk9SX0lMTEVHQUxfVkFMVUUgaWYgYUpTQXJyYXkgaXNuJ3QgYSBK
UyBhcnJheS4KICAgICovIAogICBzdGF0aWMgbnNyZXN1bHQgSlNBcnJheVRvQXRvbUFycmF5KEpT
Q29udGV4dCogYUN4LCBjb25zdCBKUzo6VmFsdWUmIGFKU0FycmF5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQ09NQXJyYXk8bnNJQXRvbT4mIGFSZXRWYWwpOwogCiAg
IC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgcGFzc2VkIGluIHBh
cmFtZXRlciBoYXMgdGhlIGF1dG9jb21wbGV0ZQotICAgKiBmdW5jdGlvbm5hbGl0eSBlbmFibGVk
LiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVyLgorICAgKiBmdW5jdGlv
bmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIu
CiAgICAqIE5PVEU6IHRoZSBjYWxsZXIgaGFzIHRvIG1ha2Ugc3VyZSBhdXRvY29tcGxldGUgbWFr
ZXMgc2Vuc2UgZm9yIHRoZQogICAgKiBlbGVtZW50J3MgdHlwZS4KICAgICoKICAgICogQHBhcmFt
IGFJbnB1dCB0aGUgaW5wdXQgZWxlbWVudCB0byBjaGVjay4gTk9URTogYUlucHV0IGNhbid0IGJl
IG51bGwuCiAgICAqIEByZXR1cm4gd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBoYXMgYXV0b2Nv
bXBsZXRlIGVuYWJsZWQuCiAgICAqLwogICBzdGF0aWMgYm9vbCBJc0F1dG9jb21wbGV0ZUVuYWJs
ZWQobnNJRE9NSFRNTElucHV0RWxlbWVudCogYUlucHV0KTsKIApkaWZmIC0tZ2l0IGEvY29udGVu
dC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oIGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1
bWVudC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaAorKysgYi9jb250
ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKQEAgLTEyMCwxOSArMTIwLDE4IEBAIGNsYXNz
IExvYWRlcjsKIAogbmFtZXNwYWNlIGRvbSB7CiBjbGFzcyBMaW5rOwogY2xhc3MgRWxlbWVudDsK
IH0gLy8gbmFtZXNwYWNlIGRvbQogfSAvLyBuYW1lc3BhY2UgbW96aWxsYQogCiAjZGVmaW5lIE5T
X0lET0NVTUVOVF9JSUQgXAoteyAweDhlNTFlNmQ5LCAweDkxNGQsIDB4NDZiYSwgXAotICB7IDB4
YjMsIDB4MTEsIDB4MmYsIDB4MjcsIDB4M2QsIDB4ZTYsIDB4MGQsIDB4MTkgfSB9Ci0KK3sgMHg1
N2ZlNDRhZSwgMHg2NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAweGE3LCAw
eDQzLCAweDI4LCAweGJlLCAweDg2IH0gfQogCiAvLyBGbGFnIGZvciBBZGRTdHlsZVNoZWV0KCku
CiAjZGVmaW5lIE5TX1NUWUxFU0hFRVRfRlJPTV9DQVRBTE9HICAgICAgICAgICAgICAgICgxIDw8
IDApCiAKIC8vIEVudW0gZm9yIHJlcXVlc3RpbmcgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZG9jdW1l
bnQgd2hlbiBjcmVhdGluZyBhIGRvYwogZW51bSBEb2N1bWVudEZsYXZvciB7CiAgIERvY3VtZW50
Rmxhdm9yTGVnYWN5R3Vlc3MsIC8vIGNvbXBhdCB3aXRoIG9sZCBjb2RlIHVudGlsIG1hZGUgSFRN
TDUtY29tcGxpYW50CiAgIERvY3VtZW50Rmxhdm9ySFRNTCwgLy8gSFRNTERvY3VtZW50IHdpdGgg
SFRNTG5lc3MgYml0IHNldCB0byB0cnVlCkBAIC00NjAsMTcgKzQ1OSwyNiBAQCBwdWJsaWM6CiAg
ICAqIGNhbGxlcnMgYXJlIGV4cGVjdGVkIHRvIHRha2UgYWN0aW9uIGFzIG5lZWRlZCBpZiB0aGV5
IHdhbnQgdGhpcwogICAgKiBjaGFuZ2UgdG8gYWN0dWFsbHkgY2hhbmdlIGFueXRoaW5nIGltbWVk
aWF0ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9w
dGlvbnMoUFJVaW50MzIgYUJpZGlPcHRpb25zKQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJp
ZGlPcHRpb25zOwogICB9Ci0gIAorCisgIC8qKgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3Mg
Zm9yIHRoaXMgZG9jdW1lbnQuCisgICAqIEBzZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBv
c3NpYmxlIGZsYWdzCisgICAqLworICBQUlVpbnQzMiBTYW5kYm94RmxhZ3MoKSBjb25zdAorICB7
CisgICAgcmV0dXJuIG1TYW5kYm94RmxhZ3M7CisgIH0KKwogICAvKioKICAgICogQWNjZXNzIEhU
VFAgaGVhZGVyIGRhdGEgKHRoaXMgbWF5IGFsc28gZ2V0IHNldCBmcm9tIG90aGVyCiAgICAqIHNv
dXJjZXMsIGxpa2UgSFRNTCBNRVRBIHRhZ3MpLgogICAgKi8KICAgdmlydHVhbCB2b2lkIEdldEhl
YWRlckRhdGEobnNJQXRvbSogYUhlYWRlckZpZWxkLCBuc0FTdHJpbmcmIGFEYXRhKSBjb25zdCA9
IDA7CiAgIHZpcnR1YWwgdm9pZCBTZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFoZWFkZXJGaWVsZCwg
Y29uc3QgbnNBU3RyaW5nJiBhRGF0YSkgPSAwOwogCiAgIC8qKgpAQCAtMTg1NCwxNiArMTg2Miwy
MSBAQCBwcm90ZWN0ZWQ6CiAgIC8vIElmIG1Jc1N0YXRpY0RvY3VtZW50IGlzIHRydWUsIG1Pcmln
aW5hbERvY3VtZW50IHBvaW50cyB0byB0aGUgb3JpZ2luYWwKICAgLy8gZG9jdW1lbnQuCiAgIG5z
Q09NUHRyPG5zSURvY3VtZW50PiBtT3JpZ2luYWxEb2N1bWVudDsKIAogICAvLyBUaGUgYmlkaSBv
cHRpb25zIGZvciB0aGlzIGRvY3VtZW50LiAgV2hhdCB0aGlzIGJpdGZpZWxkIG1lYW5zIGlzCiAg
IC8vIGRlZmluZWQgaW4gbnNCaWRpVXRpbHMuaAogICBQUlVpbnQzMiBtQmlkaU9wdGlvbnM7CiAK
KyAgLy8gVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3VtZW50LiBUaGVzZSByZWZsZWN0IHRo
ZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2YgdGhlCisgIC8vIGFzc29jaWF0ZWQg
SUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZiBleGlzdGVudC4gVGhlc2UgYXJl
IHNldCBhdCBsb2FkIHRpbWUgYW5kCisgIC8vIGFyZSBpbW11dGFibGUgLSBzZWUgbnNTYW5kYm94
RmxhZ3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICBQUlVpbnQzMiBtU2FuZGJveEZsYWdz
OworCiAgIG5zQ1N0cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnNDU3RyaW5n
IG1Db250ZW50VHlwZTsKIHByb3RlY3RlZDoKIAogICAvLyBUaGUgZG9jdW1lbnQncyBzZWN1cml0
eSBpbmZvCiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VjdXJpdHlJbmZvOwogCmRpZmYgLS1n
aXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9z
cmMvbnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRp
bHMuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC0yMDgs
MTYgKzIwOCwxNyBAQCBzdGF0aWMgTlNfREVGSU5FX0NJRChrWFRGU2VydmljZUNJRCwgTlNfCiAj
aW5jbHVkZSAibnNDQ1VuY29sbGVjdGFibGVNYXJrZXIuaCIKICNpbmNsdWRlICJtb3ppbGxhL0Jh
c2U2NC5oIgogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJuc0RP
TU11dGF0aW9uT2JzZXJ2ZXIuaCIKIAogI2luY2x1ZGUgIm5zV3JhcHBlckNhY2hlSW5saW5lcy5o
IgogI2luY2x1ZGUgIm5zSURPTURvY3VtZW50VHlwZS5oIgogI2luY2x1ZGUgIm5zQ2hhclNlcGFy
YXRlZFRva2VuaXplci5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIGV4dGVybiAi
QyIgaW50IE1PWl9YTUxUcmFuc2xhdGVFbnRpdHkoY29uc3QgY2hhciogcHRyLCBjb25zdCBjaGFy
KiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
KiBuZXh0LCBQUlVuaWNoYXIqIHJlc3VsdCk7CiBleHRlcm4gIkMiIGludCBNT1pfWE1MQ2hlY2tR
TmFtZShjb25zdCBjaGFyKiBwdHIsIGNvbnN0IGNoYXIqIGVuZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBuc19hd2FyZSwgY29uc3QgY2hhcioqIGNvbG9uKTsKIAogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXll
cnM7CkBAIC05MTYsMTYgKzkxNyw2MiBAQCBuc0NvbnRlbnRVdGlsczo6R2V0UGFyc2VyU2Vydmlj
ZSgpCiAgICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwg
JnNQYXJzZXJTZXJ2aWNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNl
clNlcnZpY2UgPSBuc251bGw7CiAgICAgfQogICB9CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNl
OwogfQorLyoqCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0
cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVy
dHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1c2VkIGludGVybmFsbHkuCisgKgorICogQHBhcmFt
IGFBdHRyaWJ1dGUgICAgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJl
dHVybiAgICAgICAgICAgICAgdGhlIHNldCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250
ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBz
YW5kYm94QXR0clZhbHVlKQoreworICAvLyBJZiB0aGVyZSdzIGEgc2FuZGJveCBhdHRyaWJ1dGUg
YXQgYWxsIChhbmQgdGhlcmUgaXMgaWYgdGhpcyBpcyBiZWluZworICAvLyBjYWxsZWQpLCBzdGFy
dCBvZmYgYnkgc2V0dGluZyBhbGwgdGhlIHJlc3RyaWN0aW9uIGZsYWdzLgorICBQUlVpbnQzMiBv
dXQgPSBTQU5EQk9YRURfTkFWSUdBVElPTiB8CisgICAgU0FOREJPWEVEX1RPUExFVkVMX05BVklH
QVRJT04gfAorICAgIFNBTkRCT1hFRF9QTFVHSU5TIHwgU0FOREJPWEVEX09SSUdJTiB8CisgICAg
U0FOREJPWEVEX0ZPUk1TIHwgU0FOREJPWEVEX1NDUklQVFMgfAorICAgIFNBTkRCT1hFRF9BVVRP
TUFUSUNfRkVBVFVSRVM7CisKKyAgaWYgKCFzYW5kYm94QXR0clZhbHVlLklzRW1wdHkoKSkgewor
ICAgIC8vIFRoZSBzZXBhcmF0b3Igb3B0aW9uYWwgZmxhZyBpcyB1c2VkIGJlY2F1c2UgdGhlIEhU
TUw1IHNwZWMgc2F5cyBhbnkKKyAgICAvLyB3aGl0ZXNwYWNlIGlzIG9rIGFzIGEgc2VwYXJhdG9y
LCB3aGljaCBpcyB3aGF0IHRoaXMgZG9lcy4KKyAgICBIVE1MU3BsaXRPblNwYWNlc1Rva2VuaXpl
ciB0b2tlbml6ZXIoc2FuZGJveEF0dHJWYWx1ZSwgJyAnLAorICAgICAgbnNDaGFyU2VwYXJhdGVk
VG9rZW5pemVyVGVtcGxhdGU8bnNDb250ZW50VXRpbHM6OklzSFRNTFdoaXRlc3BhY2U+OjpTRVBB
UkFUT1JfT1BUSU9OQUwpOworCisgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkp
IHsKKyAgICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nIHRva2VuID0gdG9rZW5pemVyLm5leHRUb2tl
bigpOworCisgICAgICBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2Ny
aXB0cyIpKSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX1NDUklQVFM7CisgICAgICB9IGVs
c2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNhbWUtb3JpZ2luIikp
IHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfT1JJR0lOOworICAgICAgfSBlbHNlIGlmICh0
b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1mb3JtcyIpKSB7CisgICAgICAgIG91
dCAmPSB+U0FOREJPWEVEX0ZPUk1TOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VF
cXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRzIikpIHsKKyAgICAgICAgLy8gYWxsb3ctc2NyaXB0
cyByZW1vdmVzIGJvdGggU0FOREJPWEVEX1NDUklQVFMgYW5kCisgICAgICAgIC8vIFNBTkRCT1hF
RF9BVVRPTUFUSUNfRkVBVFVSRVMuCisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX1NDUklQVFM7
CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUzsKKyAgICAgIH0g
ZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctdG9wLW5hdmlnYXRp
b24iKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FUSU9OOwor
ICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBvdXQ7Cit9CiAKICNpZmRlZiBNT1pfWFRG
CiBuc0lYVEZTZXJ2aWNlKgogbnNDb250ZW50VXRpbHM6OkdldFhURlNlcnZpY2UoKQogewogICBp
ZiAoIXNYVEZTZXJ2aWNlKSB7CiAgICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0U2VydmljZShrWFRG
U2VydmljZUNJRCwgJnNYVEZTZXJ2aWNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewpAQCAt
NjQ1MywxNyArNjUwMCwxOCBAQCBuc0NvbnRlbnRVdGlsczo6VVJJSW5oZXJpdHNTZWN1cml0eUNv
bnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXN1bHQpOwogfQogCiAvLyBzdGF0
aWMKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwq
IGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRV
cEZvckFib3V0QmxhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBh
U2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYUZvcmNlT3duZXIpCiB7CiAgIC8vCiAgIC8vIFNldCB0aGUgb3duZXIgb2YgdGhlIGNoYW5u
ZWwsIGJ1dCBvbmx5IGZvciBjaGFubmVscyB0aGF0IGNhbid0CiAgIC8vIHByb3ZpZGUgdGhlaXIg
b3duIHNlY3VyaXR5IGNvbnRleHQuCiAgIC8vCiAgIC8vIFhYWDogSXQgc2VlbXMgd3JvbmcgdGhh
dCB0aGUgb3duZXIgaXMgaWdub3JlZCAtIGV2ZW4gaWYgb25lIGlzCiAgIC8vICAgICAgc3VwcGxp
ZWQpIHVubGVzcyB0aGUgVVJJIGlzIGphdmFzY3JpcHQgb3IgZGF0YSBvciBhYm91dDpibGFuay4K
ICAgLy8gWFhYOiBJZiB0aGlzIGlzIGV2ZXIgY2hhbmdlZCwgY2hlY2sgYWxsIGNhbGxlcnMgZm9y
IHdoYXQgb3duZXJzCkBAIC02NDcxLDIzICs2NTE5LDI3IEBAIG5zQ29udGVudFV0aWxzOjpTZXRV
cENoYW5uZWxPd25lcihuc0lQcmkKICAgLy8gICAgICBjb21tZW50cyBpbiBuc0RvY1NoZWxsOjpM
b2FkVVJJIHdoZXJlIHdlIGZhbGwgYmFjayBvbgogICAvLyAgICAgIGluaGVyaXRpbmcgdGhlIG93
bmVyIGlmIGNhbGxlZCBmcm9tIGNocm9tZS4gIFRoYXQgd291bGQgYmUKICAgLy8gICAgICB2ZXJ5
IHdyb25nIGlmIHRoaXMgY29kZSBjaGFuZ2VkIGFueXRoaW5nIGJ1dCBjaGFubmVscyB0aGF0CiAg
IC8vICAgICAgY2FuJ3QgcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dCEKICAgLy8K
ICAgLy8gICAgICAoQ3VycmVudGx5IGNocm9tZSBVUklzIHNldCB0aGUgb3duZXIgd2hlbiB0aGV5
IGFyZSBjcmVhdGVkIQogICAvLyAgICAgIFNvIHNldHRpbmcgYSBOVUxMIG93bmVyIHdvdWxkIGJl
IGJhZCEpCiAgIC8vCisgIC8vIElmIGFGb3JjZU93bmVyIGlzIHRydWUsIHRoZSBvd25lciB3aWxs
IGJlIHNldCwgZXZlbiBmb3IgYSBjaGFubmVsIHRoYXQKKyAgLy8gY2FuIHByb3ZpZGUgaXRzIG93
biBzZWN1cml0eSBjb250ZXh0LiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBIVE1MNSBJRlJBTUUKKyAg
Ly8gc2FuZGJveCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiBmb3JjZSB0aGUgY2hhbm5lbCAoYW5kIGl0
cyBkb2N1bWVudCkgdG8KKyAgLy8gZXhwbGljaXRseSBoYXZlIGEgbnVsbCBwcmluY2lwYWwuCiAg
IGJvb2wgaW5oZXJpdDsKICAgLy8gV2UgZXhwZWN0IFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0
IHRvIHJldHVybiBzdWNjZXNzIGZvciBhbgogICAvLyBhYm91dDpibGFuayBVUkksIHNvIGRvbid0
IGNhbGwgTlNfSXNBYm91dEJsYW5rKCkgaWYgdGhpcyBjYWxsIGZhaWxzLgogICAvLyBUaGlzIGNv
bmRpdGlvbiBuZWVkcyB0byBtYXRjaCB0aGUgb25lIGluIG5zRG9jU2hlbGw6OkludGVybmFsTG9h
ZCB3aGVyZQogICAvLyB3ZSdyZSBjaGVja2luZyBmb3IgdGhpbmdzIHRoYXQgd2lsbCB1c2UgdGhl
IG93bmVyLgotICBpZiAoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFV
UkksICZpbmhlcml0KSkgJiYKLSAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5r
ICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSB7CisgIGlmIChhRm9yY2VPd25lciB8fCAoKE5T
X1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYm
CisgICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0Qmxh
bmsoYVVSSSkpKSkpKSB7CiAgICAgYUNoYW5uZWwtPlNldE93bmVyKGFMb2FkaW5nUHJpbmNpcGFs
KTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8vCiAgIC8vIGZpbGU6IHVyaSBzcGVjaWFs
LWNhc2luZwogICAvLwogICAvLyBJZiB0aGlzIGlzIGEgZmlsZTogbG9hZCBvcGVuZWQgZnJvbSBh
bm90aGVyIGZpbGU6IHRoZW4gaXQgbWF5IG5lZWQKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9z
cmMvbnNEb2N1bWVudC5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCi0tLSBh
L2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9u
c0RvY3VtZW50LmNwcApAQCAtMjQxNSwxNiArMjQxNSwyNSBAQCBuc0RvY3VtZW50OjpTdGFydERv
Y3VtZW50TG9hZChjb25zdCBjaGFyCiAgICAgRmluZENoYXJJblJlYWRhYmxlKCc7Jywgc2VtaWNv
bG9uLCBlbmQpOwogICAgIFNldENvbnRlbnRUeXBlSW50ZXJuYWwoU3Vic3RyaW5nKHN0YXJ0LCBz
ZW1pY29sb24pKTsKICAgfQogCiAgIFJldHJpZXZlUmVsZXZhbnRIZWFkZXJzKGFDaGFubmVsKTsK
IAogICBtQ2hhbm5lbCA9IGFDaGFubmVsOwogCisgIC8vIElmIHRoaXMgZG9jdW1lbnQgaXMgYmVp
bmcgbG9hZGVkIGJ5IGEgZG9jc2hlbGwsIGNvcHkgaXRzIHNhbmRib3ggZmxhZ3MKKyAgLy8gdG8g
dGhlIGRvY3VtZW50LiBUaGVzZSBhcmUgaW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBoZXJlLgor
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFjZShhQ29u
dGFpbmVyKTsKKworICBpZiAoZG9jU2hlbGwpIHsKKyAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxs
LT5HZXRTYW5kYm94RmxhZ3MoJm1TYW5kYm94RmxhZ3MpOworICAgIE5TX0VOU1VSRV9TVUNDRVNT
KHJ2LCBydik7CisgIH0KKwogICBuc3Jlc3VsdCBydiA9IEluaXRDU1AoKTsKICAgTlNfRU5TVVJF
X1NVQ0NFU1MocnYsIHJ2KTsKIAogICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0Rv
Y3VtZW50OjpJbml0Q1NQKCkKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxv
YWRlci5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCi0tLSBhL2NvbnRl
bnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0Zy
YW1lTG9hZGVyLmNwcApAQCAtMTEyLDE2ICsxMTIsMTkgQEAKICNpbmNsdWRlICJtb3ppbGxhL0d1
YXJkT2JqZWN0cy5oIgogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRl
ICJtb3ppbGxhL3VudXNlZC5oIgogI2luY2x1ZGUgIm1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNp
bmNsdWRlICJtb3ppbGxhL2xheW91dC9SZW5kZXJGcmFtZVBhcmVudC5oIgogCiAjaW5jbHVkZSAi
anNhcGkuaCIKIAorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJu
c1NhbmRib3hGbGFncy5oIgorCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVz
cGFjZSBtb3ppbGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmxheW91dDsKIHR5cGVkZWYgRnJhbWVNZXRyaWNzOjpWaWV3
SUQgVmlld0lEOwogCiBjbGFzcyBuc0FzeW5jRG9jU2hlbGxEZXN0cm95ZXIgOiBwdWJsaWMgbnNS
dW5uYWJsZQogewpAQCAtNDczLDE2ICs0NzYsNjAgQEAgbnNGcmFtZUxvYWRlcjo6UmVhbGx5U3Rh
cnRMb2FkaW5nSW50ZXJuYQogICAvLyBKdXN0IHRvIGJlIHNhZmUsIHJlY2hlY2sgdXJpLgogICBy
diA9IENoZWNrVVJJTG9hZChtVVJJVG9Mb2FkKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2
KTsKIAogICBuc0NPTVB0cjxuc0lEb2NTaGVsbExvYWRJbmZvPiBsb2FkSW5mbzsKICAgbURvY1No
ZWxsLT5DcmVhdGVMb2FkSW5mbyhnZXR0ZXJfQWRkUmVmcyhsb2FkSW5mbykpOwogICBOU19FTlNV
UkVfVFJVRShsb2FkSW5mbywgTlNfRVJST1JfRkFJTFVSRSk7CiAKKyAgLy8gSXMgdGhpcyBhbiA8
aWZyYW1lPiB3aXRoIGEgc2FuZGJveCBhdHRyaWJ1dGUgb3IgYSBwYXJlbnQgd2hpY2ggaXMKKyAg
Ly8gc2FuZGJveGVkID8KKyAgbnNIVE1MSUZyYW1lRWxlbWVudCAqIGlmcmFtZSA9CisgICAgbnNI
VE1MSUZyYW1lRWxlbWVudDo6RnJvbUNvbnRlbnQobU93bmVyQ29udGVudCk7CisKKyAgUFJVaW50
MzIgc2FuZGJveEZsYWdzID0gMDsKKworICBpZiAoaWZyYW1lKSB7CisgICAgc2FuZGJveEZsYWdz
ID0gaWZyYW1lLT5HZXRTYW5kYm94RmxhZ3MoKTsKKworICAgIFBSVWludDMyIHBhcmVudFNhbmRi
b3hGbGFncyA9IDA7CisKKyAgICAvLyBHZXQgdGhlIHBhcmVudCdzIHNhbmRib3ggZmxhZ3MsIHRo
ZXkncmUgbmVlZGVkIHRvIGRldGVybWluZSBpZiB0aGUKKyAgICAvLyBmcmFtZSBiZWluZyBsb2Fk
ZWQgbmVlZHMgdG8gYmUgc2FuZGJveGVkLgorICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0
ZW0+IHBhcmVudERvY1NoZWxsSXRlbTsKKyAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVt
PiBjdXJEb2NTaGVsbEl0ZW0gPSBkb19RdWVyeUludGVyZmFjZShtRG9jU2hlbGwpOworCisgICAg
aWYgKE5TX1NVQ0NFRURFRChjdXJEb2NTaGVsbEl0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVm
cyhwYXJlbnREb2NTaGVsbEl0ZW0pKSkpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBw
YXJlbnREb2MgPSBkb19HZXRJbnRlcmZhY2UocGFyZW50RG9jU2hlbGxJdGVtKTsKKworICAgICAg
aWYgKHBhcmVudERvYykgeworICAgICAgICBwYXJlbnRTYW5kYm94RmxhZ3MgPSBwYXJlbnREb2Mt
PlNhbmRib3hGbGFncygpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChzYW5kYm94RmxhZ3Mg
fHwgcGFyZW50U2FuZGJveEZsYWdzKSB7CisgICAgICBpZiAocGFyZW50U2FuZGJveEZsYWdzKSB7
CisgICAgICAgIC8vIFRoZSBjaGlsZCBjYW4gb25seSBhZGQgcmVzdHJpY3Rpb25zLCBub3QgcmVt
b3ZlIHRoZW0uCisgICAgICAgIHNhbmRib3hGbGFncyB8PSBwYXJlbnRTYW5kYm94RmxhZ3M7Cisg
ICAgICB9CisKKyAgICAgIG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFncyk7
CisKKyAgICAgIC8vIFNldCB1cCB0aGUgYWN0dWFsIHNhbmRib3hpbmcgZm9yIHBsdWdpbnMgYXMg
c3BlY2lmaWVkLgorICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9QTFVHSU5TKSB7
CisgICAgICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dQbHVnaW5zKGZhbHNlKTsKKyAgICAgIH0KKyAg
ICB9CisgIH0KKworICAvLyBJZiB0aGlzIGlzIGFuIDxpZnJhbWU+IGFuZCBpdCdzIHNhbmRib3hl
ZCB3aXRoIHJlc3BlY3QgdG8gb3JpZ2luCisgIC8vIHdlIHdpbGwgc2V0IGl0IHVwIHdpdGggYSBu
dWxsIHByaW5jaXBhbCBsYXRlciBpbiBuc0RvY1NoZWxsOjpEb1VSSUxvYWQuCisgIC8vIFdlIGRv
IGl0IHRoZXJlIHRvIGNvcnJlY3RseSBzYW5kYm94IGNvbnRlbnQgdGhhdCB3YXMgbG9hZGVkIGlu
dG8KKyAgLy8gdGhlIGlmcmFtZSB2aWEgb3RoZXIgbWV0aG9kcyB0aGFuIHRoZSBzcmMgYXR0cmli
dXRlLgogICAvLyBXZSdsbCB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3Vt
ZW50IGxvYWRlZCBpbnNpZGUgdXMuICBUaGlzCiAgIC8vIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVk
ZWQgdG8gcHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluCiAgIC8vIHN1
YmZyYW1lcyEKICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lw
YWwoKSk7CiAKICAgbnNDT01QdHI8bnNJVVJJPiByZWZlcnJlcjsKICAgcnYgPSBtT3duZXJDb250
ZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhyZWZlcnJlcikpOwog
ICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3Ny
Yy9uc0drQXRvbUxpc3QuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKLS0tIGEv
Y29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25z
R2tBdG9tTGlzdC5oCkBAIC05MywxNyArOTMsMjEgQEAgR0tfQVRPTShhY3R1YXRlLCAiYWN0dWF0
ZSIpCiBHS19BVE9NKGFkZHJlc3MsICJhZGRyZXNzIikKIEdLX0FUT00oYWZ0ZXIsICJhZnRlciIp
CiBHS19BVE9NKGFmdGVyX2VuZCwgImFmdGVyX2VuZCIpCiBHS19BVE9NKGFmdGVyX3N0YXJ0LCAi
YWZ0ZXJfc3RhcnQiKQogR0tfQVRPTShhbGlnbiwgImFsaWduIikKIEdLX0FUT00oYWxpbmssICJh
bGluayIpCiBHS19BVE9NKGFsbCwgImFsbCIpCiBHS19BVE9NKGFsbG93ZXZlbnRzLCAiYWxsb3dl
dmVudHMiKQorR0tfQVRPTShhbGxvd2Zvcm1zLCAiYWxsb3ctZm9ybXMiKQogR0tfQVRPTShhbGxv
d25lZ2F0aXZlYXNzZXJ0aW9ucywgImFsbG93bmVnYXRpdmVhc3NlcnRpb25zIikKK0dLX0FUT00o
YWxsb3dzYW1lb3JpZ2luLCAiYWxsb3ctc2FtZS1vcmlnaW4iKQorR0tfQVRPTShhbGxvd3Njcmlw
dHMsICJhbGxvdy1zY3JpcHRzIikKK0dLX0FUT00oYWxsb3d0b3BuYXZpZ2F0aW9uLCAiYWxsb3ct
dG9wLW5hdmlnYXRpb24iKQogR0tfQVRPTShhbGxvd3VudHJ1c3RlZCwgImFsbG93dW50cnVzdGVk
IikKIEdLX0FUT00oYWx0LCAiYWx0IikKIEdLX0FUT00oYWx0ZXJuYXRlLCAiYWx0ZXJuYXRlIikK
IEdLX0FUT00oYWx3YXlzLCAiYWx3YXlzIikKIEdLX0FUT00oYW5jZXN0b3IsICJhbmNlc3RvciIp
CiBHS19BVE9NKGFuY2VzdG9yT3JTZWxmLCAiYW5jZXN0b3Itb3Itc2VsZiIpCiBHS19BVE9NKF9h
bmQsICJhbmQiKQogR0tfQVRPTShhbnksICJhbnkiKQpAQCAtODgyLDE2ICs4ODYsMTcgQEAgR0tf
QVRPTShyb3dzcGFuLCAicm93c3BhbiIpCiBHS19BVE9NKHJwLCAicnAiKQogR0tfQVRPTShydCwg
InJ0IikKIEdLX0FUT00ocnRsLCAicnRsIikKIEdLX0FUT00ocnVieSwgInJ1YnkiKQogR0tfQVRP
TShydWxlLCAicnVsZSIpCiBHS19BVE9NKHJ1bGVzLCAicnVsZXMiKQogR0tfQVRPTShzLCAicyIp
CiBHS19BVE9NKHNhbXAsICJzYW1wIikKK0dLX0FUT00oc2FuZGJveCwgInNhbmRib3giKQogR0tf
QVRPTShzYmF0dHIsICJzYmF0dHIiKQogR0tfQVRPTShzY2FsZSwgInNjYWxlIikKIEdLX0FUT00o
c2NhbiwgInNjYW4iKQogR0tfQVRPTShzY2hlbWUsICJzY2hlbWUiKQogR0tfQVRPTShzY29wZSwg
InNjb3BlIikKIEdLX0FUT00oc2NvcGVkLCAic2NvcGVkIikKIEdLX0FUT00oc2NyZWVuLCAic2Ny
ZWVuIikKIEdLX0FUT00oc2NyZWVuWCwgInNjcmVlblgiKQpkaWZmIC0tZ2l0IGEvY29udGVudC9i
YXNlL3NyYy9uc1NhbmRib3hGbGFncy5oIGIvY29udGVudC9iYXNlL3NyYy9uc1NhbmRib3hGbGFn
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9iYXNl
L3NyYy9uc1NhbmRib3hGbGFncy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIC0qLSBNb2RlOiBDKys7
IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAt
Ki0gKi8NCisvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMg
b2YgdGhlIE1vemlsbGEgUHVibGljDQorICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2Yg
dGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLA0KKyAqIFlvdSBjYW4g
b2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovDQorDQorLyoNCisg
KiBDb25zdGFudCBmbGFncyB0aGF0IGRlc2NyaWJlIGhvdyBhIGRvY3VtZW50IGlzIHNhbmRib3hl
ZCBhY2NvcmRpbmcgdG8gdGhlDQorICogSFRNTDUgc3BlYy4NCisgKi8NCisNCisjaWZuZGVmIG5z
U2FuZGJveEZsYWdzX2hfX18NCisjZGVmaW5lIG5zU2FuZGJveEZsYWdzX2hfX18NCisNCisvKioN
CisgKiBUaGlzIGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgYnJvd3Npbmcg
Y29udGV4dHMgb3RoZXIgdGhhbg0KKyAqIHRoZSBzYW5kYm94ZWQgYnJvd3NpbmcgY29udGV4dCBp
dHNlbGYgKG9yIGJyb3dzaW5nIGNvbnRleHRzIGZ1cnRoZXINCisgKiBuZXN0ZWQgaW5zaWRlIGl0
KSwgYW5kIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dC4NCisgKi8NCitjb25zdCB1bnNp
Z25lZCBsb25nIFNBTkRCT1hFRF9OQVZJR0FUSU9OICA9IDB4MTsNCisNCisvKioNCisgKiBUaGlz
IGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgdGhlaXIgdG9wLWxldmVsIGJy
b3dzaW5nDQorICogY29udGV4dC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hF
RF9UT1BMRVZFTF9OQVZJR0FUSU9OID0gMHgyOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2
ZW50cyBjb250ZW50IGZyb20gaW5zdGFudGlhdGluZyBwbHVnaW5zLCB3aGV0aGVyIHVzaW5nIHRo
ZQ0KKyAqIGVtYmVkIGVsZW1lbnQsIHRoZSBvYmplY3QgZWxlbWVudCwgdGhlIGFwcGxldCBlbGVt
ZW50LCBvciB0aHJvdWdoDQorICogbmF2aWdhdGlvbiBvZiBhIG5lc3RlZCBicm93c2luZyBjb250
ZXh0LCB1bmxlc3MgdGhvc2UgcGx1Z2lucyBjYW4gYmUNCisgKiBzZWN1cmVkLg0KKyAqLw0KK2Nv
bnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1BMVUdJTlMgPSAweDQ7DQorDQorLyoqDQorICog
VGhpcyBmbGFnIGZvcmNlcyBjb250ZW50IGludG8gYSB1bmlxdWUgb3JpZ2luLCB0aHVzIHByZXZl
bnRpbmcgaXQgZnJvbQ0KKyAqIGFjY2Vzc2luZyBvdGhlciBjb250ZW50IGZyb20gdGhlIHNhbWUg
b3JpZ2luLg0KKyAqIFRoaXMgZmxhZyBhbHNvIHByZXZlbnRzIHNjcmlwdCBmcm9tIHJlYWRpbmcg
ZnJvbSBvciB3cml0aW5nIHRvIHRoZQ0KKyAqIGRvY3VtZW50LmNvb2tpZSBJREwgYXR0cmlidXRl
LCBhbmQgYmxvY2tzIGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuDQorICovDQorY29uc3QgdW5zaWdu
ZWQgbG9uZyBTQU5EQk9YRURfT1JJR0lOID0gMHg4Ow0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBi
bG9ja3MgZm9ybSBzdWJtaXNzaW9uLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJP
WEVEX0ZPUk1TID0gMHgxMDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIHNjcmlwdCBl
eGVjdXRpb24uDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfU0NSSVBUUyA9
IDB4MjA7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBmZWF0dXJlcyB0aGF0IHRyaWdn
ZXIgYXV0b21hdGljYWxseSwgc3VjaCBhcw0KKyAqIGF1dG9tYXRpY2FsbHkgcGxheWluZyBhIHZp
ZGVvIG9yIGF1dG9tYXRpY2FsbHkgZm9jdXNpbmcgYSBmb3JtIGNvbnRyb2wuDQorICovDQorY29u
c3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTID0gMHg0MDsNCisj
ZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2Jh
c2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2Fk
ZXIuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwCisrKyBiL2Nv
bnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwCkBAIC03MCwxNiArNzAsMTcgQEAKICNp
bmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJwcmxvZy5oIgog
I2luY2x1ZGUgIm5zSUNoYW5uZWxQb2xpY3kuaCIKICNpbmNsdWRlICJuc0NoYW5uZWxQb2xpY3ku
aCIKICNpbmNsdWRlICJuc0NSVC5oIgogI2luY2x1ZGUgIm5zQ29udGVudENyZWF0b3JGdW5jdGlv
bnMuaCIKICNpbmNsdWRlICJuc0dlbmVyaWNFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNDcm9zc1Np
dGVMaXN0ZW5lclByb3h5LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2luY2x1
ZGUgIm1vemlsbGEvRnVuY3Rpb25UaW1lci5oIgogI2luY2x1ZGUgIm1vemlsbGEvQ09SU01vZGUu
aCIKIAogI2lmZGVmIFBSX0xPR0dJTkcKIHN0YXRpYyBQUkxvZ01vZHVsZUluZm8qIGdDc3BQUkxv
ZzsKICNlbmRpZgogCkBAIC0zMDUsMTYgKzMwNiwyMiBAQCBuc1NjcmlwdExvYWRlcjo6U3RhcnRM
b2FkKG5zU2NyaXB0TG9hZFJlCiAgIGlmICghd2luZG93KSB7CiAgICAgcmV0dXJuIE5TX0VSUk9S
X05VTExfUE9JTlRFUjsKICAgfQogCiAgIG5zSURvY1NoZWxsICpkb2NzaGVsbCA9IHdpbmRvdy0+
R2V0RG9jU2hlbGwoKTsKIAogICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VSZXF1ZXN0b3I+IHByb21w
dGVyKGRvX1F1ZXJ5SW50ZXJmYWNlKGRvY3NoZWxsKSk7CiAKKyAgLy8gSWYgdGhpcyBkb2N1bWVu
dCBpcyBzYW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctc2NyaXB0cycsIGFib3J0LgorICBpZiAobURv
Y3VtZW50LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgLy8gUkVW
SUVXIDogdGhpcyBwcm9iYWJseSBpc24ndCB0aGUgcmlnaHQgZXJyb3IuLgorICAgIHJldHVybiBO
U19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICB9CisKICAgLy8gY2hlY2sgZm9yIGEgQ29udGVu
dCBTZWN1cml0eSBQb2xpY3kgdG8gcGFzcyBkb3duIHRvIHRoZSBjaGFubmVsCiAgIC8vIHRoYXQg
d2lsbCBiZSBjcmVhdGVkIHRvIGxvYWQgdGhlIHNjcmlwdAogICBuc0NPTVB0cjxuc0lDaGFubmVs
UG9saWN5PiBjaGFubmVsUG9saWN5OwogICBuc0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xp
Y3k+IGNzcDsKICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRl
cl9BZGRSZWZzKGNzcCkpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICBpZiAoY3Nw
KSB7CiAgICAgY2hhbm5lbFBvbGljeSA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcv
bnNjaGFubmVscG9saWN5OzEiKTsKQEAgLTY3NiwxNiArNjgzLDIxIEBAIG5zU2NyaXB0TG9hZGVy
OjpQcm9jZXNzU2NyaXB0RWxlbWVudChuc0kKICAgICAgICAgIlRoZXJlIGNhbiBiZSBvbmx5IG9u
ZSBwYXJzZXItYmxvY2tpbmcgc2NyaXB0IGF0IGEgdGltZSIpOwogICAgIE5TX0FTU0VSVElPTiht
WFNMVFJlcXVlc3RzLklzRW1wdHkoKSwKICAgICAgICAgIlBhcnNlci1ibG9ja2luZyBzY3JpcHRz
IGFuZCBYU0xUIHNjcmlwdHMgaW4gdGhlIHNhbWUgZG9jISIpOwogICAgIG1QYXJzZXJCbG9ja2lu
Z1JlcXVlc3QgPSByZXF1ZXN0OwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8gaW5saW5l
IHNjcmlwdAorICAvLyBJcyB0aGlzIGRvY3VtZW50IHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1z
Y3JpcHRzJz8KKyAgaWYgKG1Eb2N1bWVudC0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NS
SVBUUykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRT
ZWN1cml0eVBvbGljeT4gY3NwOwogICBydiA9IG1Eb2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5H
ZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBmYWxz
ZSk7CiAKICAgaWYgKGNzcCkgewogICAgIFBSX0xPRyhnQ3NwUFJMb2csIFBSX0xPR19ERUJVRywg
KCJOZXcgU2NyaXB0TG9hZGVyIGkgKioqKndpdGggQ1NQKioqKiIpKTsKICAgICBib29sIGlubGlu
ZU9LOwogICAgIHJ2ID0gY3NwLT5HZXRBbGxvd3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcCBi
L2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcAotLS0gYS9jb250
ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAKKysrIGIvY29udGVudC9l
dmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCkBAIC04MywxNiArODMsMTcgQEAK
ICNpbmNsdWRlICJuc0RPTUpTVXRpbHMuaCIKICNpbmNsdWRlICJuc0RPTVNjcmlwdE9iamVjdEhv
bGRlci5oIgogI2luY2x1ZGUgIm5zRGF0YUhhc2h0YWJsZS5oIgogI2luY2x1ZGUgIm5zQ09NQXJy
YXkuaCIKICNpbmNsdWRlICJuc0V2ZW50TGlzdGVuZXJTZXJ2aWNlLmgiCiAjaW5jbHVkZSAibnNJ
Q29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAibnNKU0Vudmlyb25tZW50LmgiCiAj
aW5jbHVkZSAieHBjcHVibGljLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpoYWw7
CiAKICNkZWZpbmUgRVZFTlRfVFlQRV9FUVVBTFMoIGxzLCB0eXBlLCB1c2VyVHlwZSApIFwKICAg
KGxzLT5tRXZlbnRUeXBlID09IHR5cGUgJiYgXAogICAobHMtPm1FdmVudFR5cGUgIT0gTlNfVVNF
Ul9ERUZJTkVEX0VWRU5UIHx8IGxzLT5tVHlwZUF0b20gPT0gdXNlclR5cGUpKQogCkBAIC01ODUs
MTYgKzU4NiwyMiBAQCBuc0V2ZW50TGlzdGVuZXJNYW5hZ2VyOjpBZGRTY3JpcHRFdmVudExpCiAg
ICAgLy8gbG9hZGVkIGFzIGRhdGEuCiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKICAgbnNyZXN1
bHQgcnYgPSBOU19PSzsKICAgLy8gcmV0dXJuIGVhcmx5IHByZXZlbnRpbmcgdGhlIGV2ZW50IGxp
c3RlbmVyIGZyb20gYmVpbmcgYWRkZWQKICAgLy8gJ2RvYycgaXMgZmV0Y2hlZCBhYm92ZQogICBp
ZiAoZG9jKSB7CisgICAgLy8gRG9uJ3QgYWxsb3cgYWRkaW5nIGFuIGV2ZW50IGxpc3RlbmVyIGlm
IHRoZSBkb2N1bWVudCBpcyBzYW5kYm94ZWQKKyAgICAvLyB3aXRob3V0ICdhbGxvdy1zY3JpcHRz
Jy4KKyAgICBpZiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7Cisg
ICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBuc0NP
TVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgICBydiA9IGRvYy0+Tm9kZVBy
aW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgICAgTlNfRU5TVVJFX1NV
Q0NFU1MocnYsIHJ2KTsKIAogICAgIGlmIChjc3ApIHsKICAgICAgIGJvb2wgaW5saW5lT0s7CiAg
ICAgICBydiA9IGNzcC0+R2V0QWxsb3dzSW5saW5lU2NyaXB0KCZpbmxpbmVPSyk7CiAgICAgICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxGb3JtRWxlbWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRN
TEZvcm1FbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9y
bUVsZW1lbnQuY3BwCkBAIC04MCwxNiArODAsMTcgQEAKIAogI2luY2x1ZGUgIm1vekF1dG9Eb2NV
cGRhdGUuaCIKICNpbmNsdWRlICJuc0lIVE1MQ29sbGVjdGlvbi5oIgogCiAjaW5jbHVkZSAibnNJ
Q29uc3RyYWludFZhbGlkYXRpb24uaCIKIAogI2luY2x1ZGUgIm5zSURPTUhUTUxCdXR0b25FbGVt
ZW50LmgiCiAjaW5jbHVkZSAiZG9tYmluZGluZ3MuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFn
cy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiBzdGF0aWMgY29uc3QgaW50
IE5TX0ZPUk1fQ09OVFJPTF9MSVNUX0hBU0hUQUJMRV9TSVpFID0gMTY7CiAKIHN0YXRpYyBjb25z
dCBQUlVpbnQ4IE5TX0ZPUk1fQVVUT0NPTVBMRVRFX09OICA9IDE7CiBzdGF0aWMgY29uc3QgUFJV
aW50OCBOU19GT1JNX0FVVE9DT01QTEVURV9PRkYgPSAwOwogCkBAIC02ODMsMTcgKzY4NCwyNSBA
QCBuc0hUTUxGb3JtRWxlbWVudDo6RG9TdWJtaXRPclJlc2V0KG5zRXZlCiAgICAgcmV0dXJuIERv
UmVzZXQoKTsKICAgfQogCiAgIGlmIChOU19GT1JNX1NVQk1JVCA9PSBhTWVzc2FnZSkgewogICAg
IC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdyZSBub3QgaW4gYSBkb2N1bWVudC4KICAgICBpZiAoIWRv
YykgewogICAgICAgcmV0dXJuIE5TX09LOwogICAgIH0KLSAgICByZXR1cm4gRG9TdWJtaXQoYUV2
ZW50KTsKKyAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgaW4gYSBzYW5kYm94ZWQgZnJhbWUg
YW5kIGZvcm0gc3VibWl0CisgICAgLy8gaXMgZGlzYWJsZWQuCisgICAgUFJVaW50MzIgc2FuZGJv
eEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKworICAgIGlmICghKHNhbmRib3hGbGFncyAm
IFNBTkRCT1hFRF9GT1JNUykpIHsKKyAgICAgIHJldHVybiBEb1N1Ym1pdChhRXZlbnQpOworICAg
IH0KKworICAgIHJldHVybiBOU19PSzsKICAgfQogCiAgIE1PWl9BU1NFUlQoZmFsc2UpOwogICBy
ZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0hUTUxGb3JtRWxlbWVudDo6RG9SZXNldCgp
CkBAIC0xNjg0LDE2ICsxNjkzLDI4IEBAIG5zSFRNTEZvcm1FbGVtZW50OjpDaGVja1ZhbGlkRm9y
bVN1Ym1pc3MKICAgICogVE9ETzogdGhlIGNoZWNrIGZvciBvYnNlcnZlciBzaG91bGQgYmUgcmVt
b3ZlZCBsYXRlciB3aGVuIEhUTUw1IEZvcm1zIHdpbGwKICAgICogYmUgc3ByZWFkIGVub3VnaCBh
bmQgYXV0aG9ycyB3aWxsIGFzc3VtZSBmb3JtcyBjYW4ndCBiZSBzdWJtaXR0ZWQgd2hlbgogICAg
KiBpbnZhbGlkLiBTZWUgYnVnIDU4NzY3MS4KICAgICovCiAKICAgTlNfQVNTRVJUSU9OKCFIYXNB
dHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6Om5vdmFsaWRhdGUpLAogICAgICAgICAg
ICAgICAgIldlIHNob3VsZG4ndCBiZSB0aGVyZSBpZiBub3ZhbGlkYXRlIGlzIHNldCEiKTsKIAor
ICAvLyBEb24ndCBkbyB2YWxpZGF0aW9uIGZvciBhIGZvcm0gc3VibWl0IGRvbmUgYnkgYSBzYW5k
Ym94ZWQgZG9jdW1lbnQgdGhhdAorICAvLyBkb2Vzbid0IGhhdmUgJ2FsbG93LWZvcm1zJywgdGhl
IHN1Ym1pdCB3aWxsIGhhdmUgYmVlbiBibG9ja2VkIGFuZCB0aGUKKyAgLy8gSFRNTDUgc3BlYyBz
YXlzIHdlIHNob3VsZG4ndCB2YWxpZGF0ZSBpbiB0aGlzIGNhc2UuCisgIG5zSURvY3VtZW50KiBk
b2MgPSBHZXRDdXJyZW50RG9jKCk7CisgIGlmIChkb2MpIHsKKyAgICBQUlVpbnQzMiBzYW5kYm94
RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgaWYgKHNhbmRib3hGbGFncyAmIFNB
TkRCT1hFRF9GT1JNUykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisKICAgLy8g
V2hlbiAuc3VibWl0KCkgaXMgY2FsbGVkIGFFdmVudCA9IG5zbnVsbCBzbyB3ZSBjYW4gcmVseSBv
biB0aGF0IHRvIGtub3cgaWYKICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGUgdmFsaWRpdHkgb2Yg
dGhlIGZvcm0uCiAgIG5zQ09NUHRyPG5zSU9ic2VydmVyU2VydmljZT4gc2VydmljZSA9CiAgICAg
bW96aWxsYTo6c2VydmljZXM6OkdldE9ic2VydmVyU2VydmljZSgpOwogICBpZiAoIXNlcnZpY2Up
IHsKICAgICBOU19XQVJOSU5HKCJObyBvYnNlcnZlciBzZXJ2aWNlIGF2YWlsYWJsZSEiKTsKICAg
ICByZXR1cm4gdHJ1ZTsKICAgfQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRN
TElGcmFtZUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJ
RnJhbWVFbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZy
YW1lRWxlbWVudC5jcHAKQEAgLTMzLDc0ICszMywyMyBAQAogICogdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgog
ICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4K
ICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVkZSAibW96
aWxsYS9VdGlsLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIm5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01Eb2N1
bWVudC5oIgotI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNJ
RE9NU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRlICJuc0lE
b2N1bWVudC5oIgotI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIm5z
RE9NRXJyb3IuaCIKLSNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNTdHlsZUNv
bnN0cy5oIgorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCi1jbGFzcyBuc0hU
TUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLXsK
LXB1YmxpYzoKLSAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJ
bmZvPiBhTm9kZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9t
UGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOwotICB2
aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7Ci0KLSAgLy8gbnNJU3VwcG9ydHMKLSAgTlNf
REVDTF9JU1VQUE9SVFNfSU5IRVJJVEVECi0KLSAgLy8gbnNJRE9NTm9kZQotICBOU19GT1JXQVJE
X05TSURPTU5PREUobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUVs
ZW1lbnQKLSAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1l
bnQ6OikKLQotICAvLyBuc0lET01IVE1MRWxlbWVudAotICBOU19GT1JXQVJEX05TSURPTUhUTUxF
TEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1MSUZy
YW1lRWxlbWVudAotICBOU19ERUNMX05TSURPTUhUTUxJRlJBTUVFTEVNRU5UCi0KLSAgLy8gbnNJ
RE9NR2V0U1ZHRG9jdW1lbnQKLSAgTlNfREVDTF9OU0lET01HRVRTVkdET0NVTUVOVAotCi0gIC8v
IG5zSUNvbnRlbnQKLSAgdmlydHVhbCBib29sIFBhcnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVz
cGFjZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmli
dXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFW
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1
bHQpOwotICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9t
KiBhQXR0cmlidXRlKSBjb25zdDsKLSAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5j
IEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OwotCi0gIHZpcnR1YWwgbnNyZXN1
bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0
OwotICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKLSAgdmlydHVhbCBu
c0lET01Ob2RlKiBBc0RPTU5vZGUoKSB7IHJldHVybiB0aGlzOyB9Ci19OwotCi0KIE5TX0lNUExf
TlNfTkVXX0hUTUxfRUxFTUVOVF9DSEVDS19QQVJTRVIoSUZyYW1lKQogCi0KIG5zSFRNTElGcmFt
ZUVsZW1lbnQ6Om5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5m
bz4gYU5vZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
cm9tUGFyc2VyIGFGcm9tUGFyc2VyKQogICA6IG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQoYU5v
ZGVJbmZvLCBhRnJvbVBhcnNlcikKIHsKIH0KIAogbnNIVE1MSUZyYW1lRWxlbWVudDo6fm5zSFRN
TElGcmFtZUVsZW1lbnQoKQogewpAQCAtMTMyLDE2ICs4MSwxNyBAQCBOU19JTVBMX1NUUklOR19B
VFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsCiBOU19JTVBMX1VSSV9BVFRSKG5zSFRNTElGcmFtZUVs
ZW1lbnQsIExvbmdEZXNjLCBsb25nZGVzYykKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZy
YW1lRWxlbWVudCwgTWFyZ2luSGVpZ2h0LCBtYXJnaW5oZWlnaHQpCiBOU19JTVBMX1NUUklOR19B
VFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE1hcmdpbldpZHRoLCBtYXJnaW53aWR0aCkKIE5TX0lN
UExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTmFtZSwgbmFtZSkKIE5TX0lNUExf
U1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU2Nyb2xsaW5nLCBzY3JvbGxpbmcpCiBO
U19JTVBMX1VSSV9BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNyYywgc3JjKQogTlNfSU1QTF9T
VFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBXaWR0aCwgd2lkdGgpCiBOU19JTVBMX0JP
T0xfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBNb3pBbGxvd0Z1bGxTY3JlZW4sIG1vemFsbG93
ZnVsbHNjcmVlbikKK05TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU2Fu
ZGJveCwgc2FuZGJveCkKIAogTlNfSU1FVEhPRElNUAogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0
Q29udGVudERvY3VtZW50KG5zSURPTURvY3VtZW50KiogYUNvbnRlbnREb2N1bWVudCkKIHsKICAg
cmV0dXJuIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OkdldENvbnRlbnREb2N1bWVudChhQ29u
dGVudERvY3VtZW50KTsKIH0KIAogTlNfSU1FVEhPRElNUApAQCAtMjY5LDggKzIxOSwzNyBAQCBu
c0hUTUxJRnJhbWVFbGVtZW50OjpJc0F0dHJpYnV0ZU1hcHBlZChjCiAKIAogbnNNYXBSdWxlVG9B
dHRyaWJ1dGVzRnVuYwogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0QXR0cmlidXRlTWFwcGluZ0Z1
bmN0aW9uKCkgY29uc3QKIHsKICAgcmV0dXJuICZNYXBBdHRyaWJ1dGVzSW50b1J1bGU7CiB9CiAK
K25zcmVzdWx0Cituc0hUTUxJRnJhbWVFbGVtZW50OjpBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFt
ZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNBdHRyVmFsdWUqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYU5vdGlmeSkKK3sKKyAgaWYgKGFOYW1lID09IG5zR2tBdG9tczo6
c2FuZGJveCAmJiBhTmFtZVNwYWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKKyAgICAvLyBQ
YXJzZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSwgYW5kIGlmIHdlIGhh
dmUgYSBkb2NzaGVsbAorICAgIC8vIHNldCBpdHMgc2FuZGJveCBmbGFncyBhcHByb3ByaWF0ZWx5
LgorICAgIGlmIChtRnJhbWVMb2FkZXIpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBk
b2NzaGVsbCA9IG1GcmFtZUxvYWRlci0+R2V0RXhpc3RpbmdEb2NTaGVsbCgpOworCisgICAgICBp
ZiAoZG9jc2hlbGwpIHsKKyAgICAgICAgUFJVaW50MzIgbmV3RmxhZ3MgPSAwOworICAgICAgICAv
LyBJZiBhIE5VTEwgYVZhbHVlIGlzIHBhc3NlZCBpbiwgd2Ugd2FudCB0byBjbGVhciB0aGUgc2Fu
ZGJveCBmbGFncworICAgICAgICAvLyB3aGljaCB3ZSB3aWxsIGRvIGJ5IHNldHRpbmcgdGhlbSB0
byAwLgorICAgICAgICBpZiAoYVZhbHVlKSB7CisgICAgICAgICAgbnNBdXRvU3RyaW5nIHN0clZh
bHVlOworICAgICAgICAgIGFWYWx1ZS0+VG9TdHJpbmcoc3RyVmFsdWUpOworICAgICAgICAgIG5l
d0ZsYWdzID0gbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3MoCisg
ICAgICAgICAgICBzdHJWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZG9jc2hlbGwtPlNldFNh
bmRib3hGbGFncyhuZXdGbGFncyk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBuc0dl
bmVyaWNIVE1MRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKGFOYW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5vdGlmeSk7
CisKK30KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVF
bGVtZW50LmggYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApAQCAtMCwwICsxLDExNCBAQAorLyogLSot
IE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLSAqLworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICog
VmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwor
ICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIg
dGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29t
bXVuaWNhdG9yIGNsaWVudCBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0
aGUgT3JpZ2luYWwgQ29kZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRp
b24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29w
eXJpZ2h0IChDKSAxOTk4CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhl
IGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAq
IGVpdGhlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxh
dGVyICh0aGUgIkdQTCIpLAorICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNl
IHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5z
dGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3Vy
IHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIg
dGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRp
Y2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBh
bmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMg
cmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAq
IHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRo
ZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiog
Ki8KKworI2luY2x1ZGUgIm1vemlsbGEvVXRpbC5oIgorCisjaW5jbHVkZSAibnNJRE9NSFRNTElG
cmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRWxlbWVudC5oIgorI2luY2x1
ZGUgIm5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01Eb2N1bWVu
dC5oIgorI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJRE9N
U1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0drQXRvbXMuaCIKKyNpbmNsdWRlICJuc0lEb2N1
bWVudC5oIgorI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIm5zRE9N
RXJyb3IuaCIKKyNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCisjaW5jbHVkZSAibnNTdHlsZUNvbnN0
cy5oIgorI2luY2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCisKK2NsYXNzIG5zSFRNTElGcmFtZUVs
ZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAoreworcHVibGljOgor
ICBuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2Rl
SW5mbywKKyAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZy
b21QYXJzZXIgPSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7CisgIHZpcnR1YWwgfm5z
SFRNTElGcmFtZUVsZW1lbnQoKTsKKworICAvLyBuc0lTdXBwb3J0cworICBOU19ERUNMX0lTVVBQ
T1JUU19JTkhFUklURUQKKworICAvLyBuc0lET01Ob2RlCisgIE5TX0ZPUldBUkRfTlNJRE9NTk9E
RShuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NRWxlbWVudAorICBO
U19GT1JXQVJEX05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisg
IC8vIG5zSURPTUhUTUxFbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNH
ZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50
CisgIE5TX0RFQ0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKKworICAvLyBuc0lET01HZXRTVkdE
b2N1bWVudAorICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCisKKyAgLy8gbnNJQ29udGVu
dAorICB2aXJ0dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CisgIE5T
X0lNRVRIT0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1
dGUpIGNvbnN0OworICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmli
dXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3Q7CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShu
c0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7CisgIHZpcnR1
YWwgbnNYUENDbGFzc0luZm8qIEdldENsYXNzSW5mbygpOworICB2aXJ0dWFsIG5zSURPTU5vZGUq
IEFzRE9NTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KKworICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVy
U2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBdHRyVmFsdWUqIGFWYWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpOworCisgIFBSVWludDMy
IEdldFNhbmRib3hGbGFncygpIHsKKyAgICBuc0F1dG9TdHJpbmcgc2FuZGJveEF0dHI7CisKKyAg
ICBpZiAoR2V0QXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpzYW5kYm94LCBzYW5k
Ym94QXR0cikpIHsKKyAgICAgIHJldHVybiBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0
cmlidXRlVG9GbGFncyhzYW5kYm94QXR0cik7CisgICAgfQorCisgICAgLy8gTm8gc2FuZGJveCBh
dHRyaWJ1dGUsIG5vIHNhbmRib3ggZmxhZ3MuCisgICAgcmV0dXJuIDA7CisgIH0KKworICBzdGF0
aWMgbnNIVE1MSUZyYW1lRWxlbWVudCogRnJvbUNvbnRlbnQobnNJQ29udGVudCAqYUNvbnRlbnQp
CisgIHsKKyAgICBpZiAoYUNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6OmlmcmFtZSkpCisgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8bnNIVE1MSUZyYW1lRWxlbWVudCo+KGFDb250ZW50KTsKKyAg
ICByZXR1cm4gbnNudWxsOworICB9Cit9OwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2RvY3Vt
ZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25z
SFRNTERvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERv
Y3VtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50
LmNwcApAQCAtMTMxLDE2ICsxMzEsMTcgQEAKICNpbmNsdWRlICJwcnByZi5oIgogI2luY2x1ZGUg
Im1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgi
CiAjaW5jbHVkZSAibnNNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJuc0lSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAibnNIdG1sNVRyZWVPcEV4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibnNIdG1sNVBhcnNlci5o
IgogI2luY2x1ZGUgIm5zSURPTUpTV2luZG93LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3Mu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6
ZG9tOwogCiAjZGVmaW5lIE5TX01BWF9ET0NVTUVOVF9XUklURV9ERVBUSCAyMAogCiAjaW5jbHVk
ZSAicHJtZW0uaCIKICNpbmNsdWRlICJwcnRpbWUuaCIKQEAgLTEyNDksMTYgKzEyNTAsMjEgQEAg
bnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwogewogICBhQ29va2llLlRy
dW5jYXRlKCk7IC8vIGNsZWFyIGN1cnJlbnQgY29va2llIGluIGNhc2Ugc2VydmljZSBmYWlsczsK
ICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBjb29raWUgaXNuJ3QgYW4gZXJyb3IgY29uZGl0
aW9uLgogCiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2VzcykgewogICAgIHJldHVybiBOU19PSzsK
ICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBpcyBz
ZXQsIGFjY2VzcyB0byByZWFkIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1T
YW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKQorICAgIHJldHVybiBOU19FUlJPUl9ET01f
U0VDVVJJVFlfRVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBh
biBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2Vy
dmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSkgewogICAg
IC8vIEdldCBhIFVSSSBmcm9tIHRoZSBkb2N1bWVudCBwcmluY2lwYWwuIFdlIHVzZSB0aGUgb3Jp
Z2luYWwKICAgICAvLyBjb2RlYmFzZSBpbiBjYXNlIHRoZSBjb2RlYmFzZSB3YXMgY2hhbmdlZCBi
eSBTZXREb21haW4KICAgICBuc0NPTVB0cjxuc0lVUkk+IGNvZGViYXNlVVJJOwogICAgIE5vZGVQ
cmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKGNvZGViYXNlVVJJKSk7CiAKQEAgLTEy
NzksMTYgKzEyODUsMjEgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFD
bwogCiBOU19JTUVUSE9ESU1QCiBuc0hUTUxEb2N1bWVudDo6U2V0Q29va2llKGNvbnN0IG5zQVN0
cmluZyYgYUNvb2tpZSkKIHsKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0
dXJuIE5TX09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdp
biBmbGFnIGlzIHNldCwgYWNjZXNzIHRvIHdyaXRlIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRl
ZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKQorICAgIHJldHVybiBO
U19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2Vy
dmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNl
ID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2Vy
dmljZSAmJiBtRG9jdW1lbnRVUkkpIHsKICAgICBuc0NPTVB0cjxuc0lQcm9tcHQ+IHByb21wdDsK
ICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW5kb3cgPSBHZXRXaW5kb3coKTsKICAgICBp
ZiAod2luZG93KSB7CiAgICAgICB3aW5kb3ctPkdldFByb21wdGVyKGdldHRlcl9BZGRSZWZzKHBy
b21wdCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4gYi9k
b2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCi0tLSBhL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4K
KysrIGIvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbgpAQCAtMTE5LDkgKzExOSwxMCBAQCBpbmNs
dWRlICQodG9wc3JjZGlyKS9jb25maWcvY29uZmlnLm1rCiBpbmNsdWRlICQodG9wc3JjZGlyKS9p
cGMvY2hyb21pdW0vY2hyb21pdW0tY29uZmlnLm1rCiBpbmNsdWRlICQodG9wc3JjZGlyKS9jb25m
aWcvcnVsZXMubWsKIAogTE9DQUxfSU5DTFVERVMgKz0gXAogICAtSSQoc3JjZGlyKS8uLi9zaGlz
dG9yeS9zcmMgXAogICAtSSQodG9wc3JjZGlyKS9kb20vYmFzZSBcCiAgIC1JJCh0b3BzcmNkaXIp
L2xheW91dC9iYXNlIFwKICAgLUkkKHRvcHNyY2RpcikveHBjb20vZHMgXAorICAtSSQodG9wc3Jj
ZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKICAgJChOVUxMKQpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwv
YmFzZS9uc0RvY1NoZWxsLmNwcCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKLS0tIGEv
ZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAorKysgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hl
bGwuY3BwCkBAIC0yMTYsMTYgKzIxNiwxNyBAQAogI2luY2x1ZGUgIm5zSVdlYkJyb3dzZXJQcmlu
dC5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJuc1BsdWdpbkVycm9yLmgiCiAjaW5jbHVkZSAibnND
b250ZW50VXRpbHMuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRFcnJvcnMuaCIKICNpbmNsdWRlICJu
c0lDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5Lmgi
CisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2luY2x1ZGUgIm5zWFVMQXBwQVBJLmgi
CiAKICNpbmNsdWRlICJuc0RPTU5hdmlnYXRpb25UaW1pbmcuaCIKICNpbmNsdWRlICJuc0lUaW1l
ZENoYW5uZWwuaCIKICNpbmNsdWRlICJtb3ppbGxhL1N0YXJ0dXBUaW1lbGluZS5oIgogCiBzdGF0
aWMgTlNfREVGSU5FX0NJRChrRE9NU2NyaXB0T2JqZWN0RmFjdG9yeUNJRCwKQEAgLTc2NiwxNiAr
NzY3LDE3IEBAIG5zRG9jU2hlbGw6Om5zRG9jU2hlbGwoKToKICAgICBtQnVzeUZsYWdzKEJVU1lf
RkxBR1NfTk9ORSksCiAgICAgbUFwcFR5cGUobnNJRG9jU2hlbGw6OkFQUF9UWVBFX1VOS05PV04p
LAogICAgIG1Mb2FkVHlwZSgwKSwKICAgICBtTWFyZ2luV2lkdGgoLTEpLAogICAgIG1NYXJnaW5I
ZWlnaHQoLTEpLAogICAgIG1JdGVtVHlwZSh0eXBlQ29udGVudCksCiAgICAgbVByZXZpb3VzVHJh
bnNJbmRleCgtMSksCiAgICAgbUxvYWRlZFRyYW5zSW5kZXgoLTEpLAorICAgIG1TYW5kYm94Rmxh
Z3MoMCksCiAgICAgbUNyZWF0ZWQoZmFsc2UpLAogICAgIG1BbGxvd1N1YmZyYW1lcyh0cnVlKSwK
ICAgICBtQWxsb3dQbHVnaW5zKHRydWUpLAogICAgIG1BbGxvd0phdmFzY3JpcHQodHJ1ZSksCiAg
ICAgbUFsbG93TWV0YVJlZGlyZWN0cyh0cnVlKSwKICAgICBtQWxsb3dJbWFnZXModHJ1ZSksCiAg
ICAgbUFsbG93RE5TUHJlZmV0Y2godHJ1ZSksCiAgICAgbUFsbG93V2luZG93Q29udHJvbCh0cnVl
KSwKQEAgLTI5ODYsMTYgKzI5ODgsNzMgQEAgbnNEb2NTaGVsbDo6RmluZEl0ZW1XaXRoTmFtZShj
b25zdCBQUlVuaQogICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGZvdW5kSXRlbSkgewogICAgICAgICAgICAgLy8gV2UgcmV0dXJuIGZvdW5k
SXRlbSBoZXJlIGV2ZW4gaWYgaXQncyBub3QgYW4gYWN0aXZlCiAgICAgICAgICAgICAvLyBpdGVt
IHNpbmNlIGFsbCB0aGUgbmFtZXMgd2UndmUgZGVhbHQgd2l0aCBzbyBmYXIgYXJlCiAgICAgICAg
ICAgICAvLyBzcGVjaWFsIGNhc2VzIHRoYXQgd2Ugd29uJ3QgYm90aGVyIGxvb2tpbmcgZm9yIGZ1
cnRoZXIuCiAKKyAgICAgICAgICAgIC8vIElmIG91ciBkb2N1bWVudCBpcyBzYW5kYm94ZWQsIHdl
IG5lZWQgdG8gZG8gc29tZSBleHRyYSBjaGVja3MuCisgICAgICAgICAgICBQUlVpbnQzMiBzYW5k
Ym94RmxhZ3MgPSAwOworCisgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gZG9jID0g
ZG9fR2V0SW50ZXJmYWNlKGFPcmlnaW5hbFJlcXVlc3Rvcik7CisKKyAgICAgICAgICAgIGlmIChk
b2MpIHsKKyAgICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncykgeworICAgICAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHJvb3Q7CisgICAgICAgICAg
ICAgICAgR2V0U2FtZVR5cGVSb290VHJlZUl0ZW0oZ2V0dGVyX0FkZFJlZnMocm9vdCkpOworCisg
ICAgICAgICAgICAgICAgLy8gSXMgdGhlIGZvdW5kIGl0ZW0gbm90IGEgdG9wIGxldmVsIGJyb3dz
aW5nIGNvbnRleHQgYW5kIG5vdCBvdXJzZWxmID8KKyAgICAgICAgICAgICAgICBuc0NPTVB0cjxu
c0lEb2NTaGVsbFRyZWVJdGVtPiBzZWxmQXNJdGVtID0gc3RhdGljX2Nhc3Q8bnNJRG9jU2hlbGxU
cmVlSXRlbSAqPih0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRJdGVtICE9IHJvb3Qg
JiYgZm91bmRJdGVtICE9IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXJl
IHdlIGFuIGFuY2VzdG9yIG9mIHRoZSBmb3VuZEl0ZW0gPworICAgICAgICAgICAgICAgICAgICBi
b29sIGlzQW5jZXN0b3IgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxu
c0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0ZW07CisgICAgICAgICAgICAgICAgICAgIEdl
dFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudEFzSXRlbSkpOworCisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBzZWxmQXNJdGVtKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmNlc3RvciA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQW5jZXN0b3IpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE5vLCB3ZSBhcmUgbm90IGFuIGFuY2VzdG9yIGFuZCBvdXIgZG9j
dW1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbmRib3hlZCwgd2UgY2FuJ3Qg
YWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0IC0gaXMgaXQgYW4gYW5j
ZXN0b3Igb2Ygb3VycyA/CisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
VHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0
dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRtcCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gZm91bmRJdGVtKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhbmNlc3RvciwgYW5kIHdl
IGFyZSBzYW5kYm94ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIGFs
bG93LXRvcC1uYXZpZ2F0aW9uIGlzIHNldCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX1RPUExFVkVM
X05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9
IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB0bXAtPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAgICAgICAgcmV0dXJuIE5T
X09LOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29raW5nCiAgICAgICAgIAog
ICAgIC8vIEZpcnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAtNTAyNiwxNiArNTA4NSwzMCBAQCBu
c0RvY1NoZWxsOjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5z
RG9jU2hlbGw6OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9
IG1Jc0FwcFRhYjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1No
ZWxsOjpTZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgbVNhbmRi
b3hGbGFncyA9IGFTYW5kYm94RmxhZ3M7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhP
RElNUAorbnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFn
cykKK3sKKyAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOworICByZXR1cm4gTlNfT0s7
Cit9CisKK05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHkoYm9vbCBhVmlz
aWJpbGl0eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICByZXR1cm4gTlNf
T0s7CiAgICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmlld2VyLT5TaG93
KCk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtODI0NywxNiArODMyMCwyOSBAQCBuc0RvY1NoZWxs
OjpJbnRlcm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hl
bGxUcmVlSXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2luZG93
VGFyZ2V0LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0Fk
ZFJlZnModGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiB0YXJn
ZXREb2NTaGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAgICAgICAKICAg
ICAgICAgYm9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRhcmdldERvY1No
ZWxsKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVudCBpcyBzYW5k
Ym94ZWQgYW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRlL2xvYWQgYSBm
cmFtZSBpdCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAgICAgLy8gRmlu
ZEl0ZW1XaXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3IgdGhlIHRhcmdl
dAorICAgICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgb3BlbiBh
IG5ldyB3aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0aG91Z2guIENoZWNrIGlm
IHdlIGFyZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYgc28uCisgICAgICAgICAgICBO
U19FTlNVUkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1JfRkFJTFVSRSk7CisgICAgICAg
ICAgICBuc0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3VtZW50KCk7Cisg
ICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICAgICAgc2FuZGJv
eEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIGlmIChzYW5kYm94Rmxh
Z3MgJiBTQU5EQk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgICAgICByZXR1cm4gTlNfRVJS
T1JfRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9N
V2luZG93PiB3aW4gPQogICAgICAgICAgICAgICAgIGRvX0dldEludGVyZmFjZShHZXRBc1N1cHBv
cnRzKHRoaXMpKTsKICAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKHdpbiwgTlNfRVJST1JfTk9U
X0FWQUlMQUJMRSk7CiAKICAgICAgICAgICAgIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUoYVdpbmRv
d1RhcmdldCk7CiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IG5ld1dpbjsKICAg
ICAgICAgICAgIHJ2ID0gd2luLT5PcGVuKEVtcHR5U3RyaW5nKCksIC8vIFVSTCB0byBsb2FkCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAvLyB3aW5kb3cgbmFtZQpA
QCAtOTAzNCwxOCArOTEyMCwzMSBAQCBuc0RvY1NoZWxsOjpEb1VSSUxvYWQobnNJVVJJICogYVVS
SSwKICAgICAgICAgfQogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkKICAg
ICAgICAgaWYgKGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAgICAv
LyBSZWZlcnJlciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4KICAg
ICAgICAgICAgIGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChk
b19RdWVyeUludGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFu
bmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUpOworICAgIG5zQ09N
UHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWw7CisKKyAgICAvLyBJZiB0aGUgY29udGVu
dCBiZWluZyBsb2FkZWQgc2hvdWxkIGJlIHNhbmRib3hlZCB3aXRoIHJlc3BlY3QgdG8gb3JpZ2lu
CisgICAgLy8gd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lwYWwgaGVyZSwgYW5k
IHRoZW4gdGVsbAorICAgIC8vIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lciB0byBm
b3JjZSBpdCB0byBiZSBzZXQgYXMgdGhlCisgICAgLy8gY2hhbm5lbCBvd25lci4KKyAgICBpZiAo
bVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICAgIG93bmVyUHJpbmNpcGFs
ID0gZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9udWxscHJpbmNpcGFsOzEiKTsKKyAg
ICB9IGVsc2UgeworICAgICAgLy8gTm90IHNhbmRib3hlZCAtIHdlIGFsbG93IHRoZSBjb250ZW50
IHRvIGFzc3VtZSBpdHMgbmF0dXJhbCBvd25lci4KKyAgICAgIG93bmVyUHJpbmNpcGFsID0gZG9f
UXVlcnlJbnRlcmZhY2UoYU93bmVyKTsKKyAgICB9CisKKyAgICBuc0NvbnRlbnRVdGlsczo6U2V0
VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVNhbmRib3hGbGFncyAmIFNBTkRC
T1hFRF9PUklHSU4pKTsKIAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENoYW5uZWw+IHNjcmlwdENo
YW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShjaGFubmVsKTsKICAgICBpZiAoc2NyaXB0Q2hhbm5l
bCkgewogICAgICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBvdXIgY29udGV4dCBpZiB0
aGUgcHJpbmNpcGFscyBtYXRjaAogICAgICAgICBzY3JpcHRDaGFubmVsLT4KICAgICAgICAgICAg
IFNldEV4ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05PUk1BTCk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaCBiL2RvY3NoZWxs
L2Jhc2UvbnNEb2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCisrKyBi
L2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03ODQsMTYgKzc4NCwxOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgLy8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBpcyBub3QgZXhwZWN0ZWQg
dG8gY2hhbmdlLgogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1JdGVtVHlwZTsKIAog
ICAgIC8vIEluZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwgaW5kaWNhdGluZyB0aGUg
cHJldmlvdXMgYW5kIGN1cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBhdCB0aGUgdGltZSB0aGF0
IHRoaXMgRG9jU2hlbGwgYmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMyICAgICAgICAgICAgICAg
ICAgICBtUHJldmlvdXNUcmFuc0luZGV4OwogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAg
IG1Mb2FkZWRUcmFuc0luZGV4OwogCisgICAgUFJVaW50MzIgICAgICAgICAgICAgICAgICAgbVNh
bmRib3hGbGFnczsKKwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1DcmVhdGVkOwog
ICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1N1YmZyYW1lczsKICAgICBib29s
ICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dQbHVnaW5zOwogICAgIGJvb2wgICAgICAgICAg
ICAgICAgICAgICAgIG1BbGxvd0phdmFzY3JpcHQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAg
ICAgICAgbUFsbG93TWV0YVJlZGlyZWN0czsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAg
ICBtQWxsb3dJbWFnZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93RE5T
UHJlZmV0Y2g7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93V2luZG93Q29u
dHJvbDsKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsIGIvZG9jc2hl
bGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5p
ZGwKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAgLTY4LDE3ICs2OCwxNyBA
QCBpbnRlcmZhY2UgbnNJU0hFbnRyeTsKIGludGVyZmFjZSBuc0lMYXlvdXRIaXN0b3J5U3RhdGU7
CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJvd3NlclVJOwogaW50ZXJmYWNlIG5zSURPTVN0b3JhZ2U7
CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsOwogaW50ZXJmYWNlIG5zSVdlYkJyb3dzZXJQcmludDsK
IGludGVyZmFjZSBuc0lWYXJpYW50OwogaW50ZXJmYWNlIG5zSVByaXZhY3lUcmFuc2l0aW9uT2Jz
ZXJ2ZXI7CiAKLVtzY3JpcHRhYmxlLCB1dWlkKDZmNjBhYzk2LWZhMmMtNDFhNS05MmI0LTI5YWFh
ZGJkN2E3YildCitbc2NyaXB0YWJsZSwgdXVpZCg5YjI4MzMzNy0wOTdkLTRmYTgtYTJkYS05MTYz
MThlYWY4MjgpXQogaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKIHsKICAgLyoq
CiAgICAqIExvYWRzIGEgZ2l2ZW4gVVJJLiAgVGhpcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gbG9h
ZGluZyB0aGUgcmVxdWVzdGVkIFVSSQogICAgKiBpbiB0aGUgb2JqZWN0IGltcGxlbWVudGluZwl0
aGlzIGludGVyZmFjZS4gIElmIGl0IGNhbid0IGJlIGxvYWRlZCBoZXJlCiAgICAqIGhvd2V2ZXIs
IHRoZSBVUkwgZGlzcGF0Y2hlciB3aWxsIGdvIHRocm91Z2ggaXRzIG5vcm1hbCBwcm9jZXNzIG9m
IGNvbnRlbnQKICAgICogbG9hZGluZy4KICAgICoKQEAgLTYyMiw5ICs2MjIsMjMgQEAgaW50ZXJm
YWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKICAgICovCiAgIGF0dHJpYnV0ZSBib29sIGlz
QnJvd3NlckZyYW1lOwogCiAgIC8qCiAgICAqIElzIHRoaXMgZG9jc2hlbGwgY29udGFpbmVkIGlu
IGFuIDxpZnJhbWUgbW96YnJvd3Nlcj4sIGVpdGhlciBkaXJlY3RseSBvcgogICAgKiBpbmRpcmVj
dGx5PwogICAgKi8KICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgY29udGFpbmVkSW5Ccm93c2Vy
RnJhbWU7CisKKyAgLyoqCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2NzaGVsbC4g
VGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlIG9m
IHRoZSBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYKKyAg
ICogZXhpc3RlbnQuIFNlZSB0aGUgSFRNTDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBU
aGVzZSBmbGFncyBvbiB0aGUgZG9jc2hlbGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0
aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuIFRoZXkgYXJl
IG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcgbmV3CisgICAqIGNvbnRlbnQsIHNhbmRib3ggZmxhZ3Mg
YXJlIGFsc28gaW1tdXRhYmx5IHNldCBvbiB0aGUgZG9jdW1lbnQgd2hlbiBpdCBpcworICAgKiBs
b2FkZWQuCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRo
ZSBzYW5kYm94IGZsYWdzIG9uIGl0cworICAgKiBkb2NzaGVsbCBhbmQgb2YgaXRzIHBhcmVudCBk
b2N1bWVudCwgaWYgYW55LgorICAgKiBTZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBvc3Np
YmxlIGZsYWdzLgorICAgKi8KKyAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdz
OwogfTsKZGlmZiAtLWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNl
L25zR2xvYmFsV2luZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysr
IGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCkBAIC0yNTUsMTYgKzI1NSwxNyBAQAogCiAj
aW5jbHVkZSAibnNSZWZyZXNoRHJpdmVyLmgiCiAjaW5jbHVkZSAibW96QXV0b0RvY1VwZGF0ZS5o
IgogCiAjaW5jbHVkZSAibW96aWxsYS9UZWxlbWV0cnkuaCIKICNpbmNsdWRlICJuc0xvY2F0aW9u
LmgiCiAjaW5jbHVkZSAibnNXcmFwcGVyQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAibnNET01F
dmVudFRhcmdldEhlbHBlci5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpZmRl
ZiBBTkRST0lECiAjaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KICNlbmRpZgogCiAjaWZkZWYgUFJf
TE9HR0lORwogc3RhdGljIFBSTG9nTW9kdWxlSW5mbyogZ0RPTUxlYWtQUkxvZzsKICNlbmRpZgpA
QCAtNzk4NiwxNiArNzk4NywyMiBAQCBuc0dsb2JhbFdpbmRvdzo6R2V0U2Vzc2lvblN0b3JhZ2Uo
bnNJRE9NCiAgIGlmICghbVNlc3Npb25TdG9yYWdlKSB7CiAgICAgKmFTZXNzaW9uU3RvcmFnZSA9
IG5zbnVsbDsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQp
IHsKICAgICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0K
IAorICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBz
ZXQKKyAgICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmICht
RG9jICYmIChtRG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9PUklHSU4pKSB7CisgICAg
ICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBuc3Jlc3Vs
dCBydiA9IGRvY1NoZWxsLT5HZXRTZXNzaW9uU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhtU2Vzc2lvblN0b3JhZ2Up
KTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAjaWZkZWYgUFJfTE9HR0lORwog
ICAgIGlmIChQUl9MT0dfVEVTVChnRE9NTGVha1BSTG9nLCBQUl9MT0dfREVCVUcpKSB7CkBAIC04
MDQ3LDE2ICs4MDU0LDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRMb2NhbFN0b3JhZ2UobnNJRE9N
U3QKICAgICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9kb20vc3RvcmFnZW1hbmFnZXI7
MSIsICZydik7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICAgIG5zU3RyaW5n
IGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAgICAgIG1Eb2N1bWVudC0+R2V0
RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAorICAgIC8vIElmIHRoZSBkb2N1bWVu
dCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAgICAvLyBkb24ndCBhbGxvdyBh
Y2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9jICYmIChtRG9jLT5TYW5kYm94Rmxh
Z3MoKSAmIFNBTkRCT1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NF
Q1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBydiA9IHN0b3JhZ2VNYW5hZ2VyLT5HZXRMb2NhbFN0
b3JhZ2VGb3JQcmluY2lwYWwocHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFVSSSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobUxvY2Fs
U3RvcmFnZSkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgIH0KIAogICBOU19B
RERSRUYoKmFMb2NhbFN0b3JhZ2UgPSBtTG9jYWxTdG9yYWdlKTsKICAgcmV0dXJuIE5TX09LOwpk
aWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5p
ZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAotLS0g
YS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAorKysgYi9k
b20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbApAQCAtNDUsMzIg
KzQ1LDMyIEBACiAgKgogICogVGhpcyBpbnRlcmZhY2UgaXMgdHJ5aW5nIHRvIGZvbGxvdyB0aGUg
RE9NIExldmVsIDIgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53My5vcmcvVFIv
RE9NLUxldmVsLTItSFRNTC8KICAqCiAgKiB3aXRoIGNoYW5nZXMgZnJvbSB0aGUgd29yay1pbi1w
cm9ncmVzcyBXSEFUV0cgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53aGF0d2cu
b3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8KICAqLwogCi1bc2NyaXB0YWJsZSwgdXVp
ZCg5N0U0RjBFMS1CRDI3LTQwRUMtOTI4Ny01NjM0REFGMTVCNzMpXQorW3NjcmlwdGFibGUsIHV1
aWQoNTJmNjI0NGItYjFmNS00ZjRjLThmZjMtN2UxNDYzMTZmNDExKV0KIGludGVyZmFjZSBuc0lE
T01IVE1MSUZyYW1lRWxlbWVudCA6IG5zSURPTUhUTUxFbGVtZW50CiB7CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGFsaWduOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nICAgICAgICBmcmFtZUJvcmRlcjsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmlu
ZyAgICAgICAgaGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBs
b25nRGVzYzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luSGVp
Z2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5XaWR0aDsK
ICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFtZTsKICAgICAgICAgICAg
YXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc2Nyb2xsaW5nOwogICAgICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nICAgICAgICBzcmM7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcg
ICAgICAgIHdpZHRoOwogICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICByZWFkb25s
eSBhdHRyaWJ1dGUgbnNJRE9NRG9jdW1lbnQgICBjb250ZW50RG9jdW1lbnQ7CiAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBuc0lET01XaW5kb3cgICAgIGNvbnRlbnRXaW5kb3c7CiAKLQorICAgICAgICAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzYW5kYm94OwogICAvLyBNb3ppbGxhIGV4dGVu
c2lvbnMKICAgLy8gaWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1vekFsbG93RnVsbFNjcmVl
biBhdHRyaWJ1dGUgdG8gYmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3JlIHRvIGFsbG93IGNvbnRl
bnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxsLXNjcmVlbgogICAvLyBt
b2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBocD90aXRsZT1HZWNrbzpG
dWxsU2NyZWVuQVBJCiAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgIG1vekFs
bG93RnVsbFNjcmVlbjsKIH07CmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL01ha2VmaWxlLmlu
IGIvZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbgotLS0gYS9kb20vc3JjL2pzdXJsL01ha2VmaWxl
LmluCisrKyBiL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KQEAgLTU3LDE2ICs1NywxNyBAQCBY
UElETFNSQ1MJPSBcCiBDUFBTUkNTCQk9IG5zSlNQcm90b2NvbEhhbmRsZXIuY3BwCiAKIEVYUE9S
VFMJCT0gJChzcmNkaXIpL25zSlNQcm90b2NvbEhhbmRsZXIuaAogCiBMT0NBTF9JTkNMVURFUyAr
PSBcCiAJCS1JJChzcmNkaXIpIFwKIAkJLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UgXAogCQktSSQo
dG9wc3JjZGlyKS9uZXR3ZXJrL2Jhc2Uvc3JjIFwKKwkJLUkkKHRvcHNyY2RpcikvY29udGVudC9i
YXNlL3NyYyBcCiAKIGlmZGVmIEJVSUxEX0RFQlVHX0dDCiBERUZJTkVTCQkrPSAtRERFQlVHX0dD
CiBlbmRpZgogCiBESVJTICAgICAgICAgICAgPSAkKE5VTEwpCiBURVNUX0RJUlMgKz0gdGVzdAog
CmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwIGIvZG9t
L3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcAotLS0gYS9kb20vc3JjL2pzdXJsL25z
SlNQcm90b2NvbEhhbmRsZXIuY3BwCisrKyBiL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFu
ZGxlci5jcHAKQEAgLTc0LDE2ICs3NCwxNyBAQAogI2luY2x1ZGUgIm5zVGhyZWFkVXRpbHMuaCIK
ICNpbmNsdWRlICJuc0lKU0NvbnRleHRTdGFjay5oIgogI2luY2x1ZGUgIm5zSVNjcmlwdENoYW5u
ZWwuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgogI2luY2x1ZGUgIm5zSU9iamVjdElucHV0
U3RyZWFtLmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0T3V0cHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAi
bnNJV3JpdGFibGVQcm9wZXJ0eUJhZzIuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQ
b2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBzdGF0aWMgTlNfREVGSU5F
X0NJRChrSlNVUklDSUQsIE5TX0pTVVJJX0NJRCk7CiAKIGNsYXNzIG5zSlNUaHVuayA6IHB1Ymxp
YyBuc0lJbnB1dFN0cmVhbQogewogcHVibGljOgogICAgIG5zSlNUaHVuaygpOwogCkBAIC0yMjAs
MTYgKzIyMSwyOCBAQCBuc3Jlc3VsdCBuc0pTVGh1bms6OkV2YWx1YXRlU2NyaXB0KG5zSUNoCiAg
ICAgLy8gR2V0IHRoZSBnbG9iYWwgb2JqZWN0IHdlIHNob3VsZCBiZSBydW5uaW5nIG9uLgogICAg
IG5zSVNjcmlwdEdsb2JhbE9iamVjdCogZ2xvYmFsID0gR2V0R2xvYmFsT2JqZWN0KGFDaGFubmVs
KTsKICAgICBpZiAoIWdsb2JhbCkgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsK
ICAgICB9CiAKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW4oZG9fUXVlcnlJbnRlcmZh
Y2UoZ2xvYmFsKSk7CiAKKyAgICAvLyBTYW5kYm94ZWQgZG9jdW1lbnQgY2hlY2s6IGphdmFzY3Jp
cHQ6IFVSSSdzIGFyZSBkaXNhYmxlZAorICAgIC8vIGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHVu
bGVzcyAnYWxsb3ctc2NyaXB0cycgd2FzIHNwZWNpZmllZAorCisgICAgLy8gUkVWSUVXIC0gaXQg
c2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgaW5uZXIgd2luZG93IHdvdWxkIGJlIHRoZSBvbmUKKyAg
ICAvLyB0aGF0IHdpbGwgZXhlY3V0ZSB0aGUgamF2YXNjcmlwdCB3aXRoIGl0cyBwcmluY2lwYWwg
LSBpcyB0aGlzCisgICAgLy8gYXNzdW1wdGlvbiBjb3JyZWN0ID8/IChhbmQgaXMgR2V0RXh0YW50
RG9jdW1lbnQoKSB0aGUgcmlnaHQgd2F5CisgICAgLy8gdG8gZ2V0IHRoZSByaWdodCBkb2N1bWVu
dCA/PworICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19RdWVyeUludGVyZmFjZShh
T3JpZ2luYWxJbm5lcldpbmRvdy0+R2V0RXh0YW50RG9jdW1lbnQoKSk7CisgICAgaWYgKGRvYyAm
JiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSkgeworICAgICAgcmV0
dXJuIE5TX0VSUk9SX0RPTV9SRVRWQUxfVU5ERUZJTkVEOworICAgIH0KKwogICAgIC8vIFB1c2gg
b3VyIHBvcHVwIGNvbnRyb2wgc3RhdGUKICAgICBuc0F1dG9Qb3B1cFN0YXRlUHVzaGVyIHBvcHVw
U3RhdGVQdXNoZXIod2luLCBhUG9wdXBTdGF0ZSk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2Ugc3Rp
bGwgaGF2ZSB0aGUgc2FtZSBpbm5lciB3aW5kb3cgYXMgd2UgdXNlZCB0by4KICAgICBuc1BJRE9N
V2luZG93ICppbm5lcldpbiA9IHdpbi0+R2V0Q3VycmVudElubmVyV2luZG93KCk7CiAKICAgICBp
ZiAoaW5uZXJXaW4gIT0gYU9yaWdpbmFsSW5uZXJXaW5kb3cpIHsKICAgICAgICAgcmV0dXJuIE5T
X0VSUk9SX1VORVhQRUNURUQ7CmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5k
b3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbiBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dh
dGNoZXIvc3JjL01ha2VmaWxlLmluCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dh
dGNoZXIvc3JjL01ha2VmaWxlLmluCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dh
dGNoZXIvc3JjL01ha2VmaWxlLmluCkBAIC01NiwxMSArNTYsMTIgQEAgQ1BQU1JDUwkJKz0gbnNE
aWFsb2dQYXJhbUJsb2NrLmNwcCBcCiAJCSAgICQoTlVMTCkKIGVuZGlmCiAKICMgd2UgZG9uJ3Qg
d2FudCB0aGUgc2hhcmVkIGxpYiwgYnV0IHdlIHdhbnQgdG8gZm9yY2UgdGhlIGNyZWF0aW9uIG9m
IGEKICMgc3RhdGljIGxpYi4KIEZPUkNFX1NUQVRJQ19MSUIgPSAxCiAKICMgRm9yIG5zSlNVdGls
cwotTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UKK0xPQ0FMX0lOQ0xV
REVTICs9IC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKKwkJICAtSSQodG9wc3JjZGlyKS9jb250
ZW50L2Jhc2Uvc3JjIFwKIAogaW5jbHVkZSAkKHRvcHNyY2RpcikvY29uZmlnL3J1bGVzLm1rCmRp
ZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRv
d1dhdGNoZXIuY3BwIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNX
aW5kb3dXYXRjaGVyLmNwcAotLS0gYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVy
L3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRv
d3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKQEAgLTg2LDE2ICs4NiwxNyBAQAogI2lu
Y2x1ZGUgIm5zUElET01TdG9yYWdlLmgiCiAjaW5jbHVkZSAibnNJV2lkZ2V0LmgiCiAjaW5jbHVk
ZSAibnNGb2N1c01hbmFnZXIuaCIKICNpbmNsdWRlICJuc0lQcmVzU2hlbGwuaCIKICNpbmNsdWRl
ICJuc1ByZXNDb250ZXh0LmgiCiAjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKICNpbmNsdWRl
ICJuc0lQcmVmQnJhbmNoLmgiCiAjaW5jbHVkZSAibnNJUHJlZlNlcnZpY2UuaCIKKyNpbmNsdWRl
ICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZkZWYgVVNFV0VBS1JFRlMKICNpbmNsdWRlICJuc0lX
ZWFrUmVmZXJlbmNlLmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiAKIHN0
YXRpYyBjb25zdCBjaGFyICpzSlNTdGFja0NvbnRyYWN0SUQ9IkBtb3ppbGxhLm9yZy9qcy94cGMv
Q29udGV4dFN0YWNrOzEiOwpAQCAtNjAzLDE2ICs2MDQsMzMgQEAgbnNXaW5kb3dXYXRjaGVyOjpP
cGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAgaWYgKCFuZXdEb2NTaGVsbEl0ZW0pIHsK
ICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3BlbiB1cCBhIG5ldyB3aW5kb3cgb3Vyc2Vs
dmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJvdmlkZXIgZm9yIG9uZS4gIEluIGVpdGhl
ciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmlnaHQKICAgICAvLyBuYW1lIG9uIGl0Lgog
ICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAgICAvLyBJZiB0aGUgcGFyZW50IHRyeWlu
ZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94ZWQsCisgICAgLy8gdGhpcyBpcyBub3Qg
YWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlmIChhUGFyZW50KSB7CisgICAgICBuc0NP
TVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAgICAgYVBhcmVudC0+R2V0RG9jdW1lbnQo
Z2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gZG9j
ID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKworICAgICAgaWYgKGRvYykgeworICAgICAg
ICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2Mt
PlNhbmRib3hGbGFncygpOworCisgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURf
TkFWSUdBVElPTikgeworICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAg
ICB9CisgICAgICB9CisgICAgfQorCiAgICAgLy8gTm93IGNoZWNrIHdoZXRoZXIgaXQncyBvayB0
byBhc2sgYSB3aW5kb3cgcHJvdmlkZXIgZm9yIGEgd2luZG93LiAgRG9uJ3QKICAgICAvLyBkbyBp
dCBpZiB3ZSdyZSBvcGVuaW5nIGEgZGlhbG9nIG9yIGlmIG91ciBwYXJlbnQgaXMgYSBjaHJvbWUg
d2luZG93IG9yCiAgICAgLy8gaWYgd2UncmUgb3BlbmluZyBzb21ldGhpbmcgdGhhdCBoYXMgbW9k
YWwsIGRpYWxvZywgb3IgY2hyb21lIGZsYWdzIHNldC4KICAgICBuc0NPTVB0cjxuc0lET01DaHJv
bWVXaW5kb3c+IGNocm9tZVdpbiA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFQYXJlbnQpOwogICAgIGlm
ICghYURpYWxvZyAmJiAhY2hyb21lV2luICYmCiAgICAgICAgICEoY2hyb21lRmxhZ3MgJiAobnNJ
V2ViQnJvd3NlckNocm9tZTo6Q0hST01FX01PREFMICAgICAgICAgfAogICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfRElBTE9HIHwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX09QRU5B
U19DSFJPTUUpKSkgewo=
</data>
<flag name="review"
          id="515231"
          type_id="937"
          status="-"
          setter="smaug"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>621205</attachid>
            <date>2012-05-04 15:51:53 -0700</date>
            <delta_ts>2012-05-15 15:37:40 -0700</delta_ts>
            <desc>CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v2</desc>
            <filename>iframe_sandbox_check_may_load</filename>
            <type>text/plain</type>
            <size>27370</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgY2YzN2UxYmM2YzRlNDk4ZGRlNWVhYjQ2NDZl
OTJkMGIyZmYwOTllYQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KbW9k
aWZ5IG5zSVByaW5jaXBhbDo6Y2hlY2tNYXlMb2FkIHRvIGFsbG93IGluaGVyaXRlZC9pbmhlcml0
aW5nIGxvYWRzCgpkaWZmIC0tZ2l0IGEvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbCBiL2NhcHMv
aWRsL25zSVByaW5jaXBhbC5pZGwKLS0tIGEvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbAorKysg
Yi9jYXBzL2lkbC9uc0lQcmluY2lwYWwuaWRsCkBAIC00NywxNyArNDcsMTcgQEAgc3RydWN0IEpT
UHJpbmNpcGFsczsKICV9CiAKIGludGVyZmFjZSBuc0lVUkk7CiBpbnRlcmZhY2UgbnNJQ29udGVu
dFNlY3VyaXR5UG9saWN5OwogCiBbcHRyXSBuYXRpdmUgSlNDb250ZXh0KEpTQ29udGV4dCk7CiBb
cHRyXSBuYXRpdmUgSlNQcmluY2lwYWxzKEpTUHJpbmNpcGFscyk7CiAKLVtzY3JpcHRhYmxlLCB1
dWlkKDQyYmE2YTM4LWQ2MTktNDlhYi04MjQ4LTNkMjQ3ZTk1OWQ1ZSldCitbc2NyaXB0YWJsZSwg
dXVpZCg4MjVmZmNlOC05NjJkLTExZTEtYWVmMy04ZjJiNjE4ODcwOWIpXQogaW50ZXJmYWNlIG5z
SVByaW5jaXBhbCA6IG5zSVNlcmlhbGl6YWJsZQogewogICAgIC8qKgogICAgICAqIFZhbHVlcyBv
ZiBjYXBhYmlsaXRpZXMgZm9yIGVhY2ggcHJpbmNpcGFsLiBPcmRlciBpcwogICAgICAqIHNpZ25p
ZmljYW50OiBpZiBhbiBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIG9uIGEgc2V0CiAgICAgICogb2Yg
Y2FwYWJpbGl0aWVzLCB0aGUgbWluaW11bSBpcyBjb21wdXRlZC4KICAgICAgKi8KICAgICBjb25z
dCBzaG9ydCBFTkFCTEVfREVOSUVEICAgICAgICAgICAgICAgID0gMTsKQEAgLTE5OSwzMyArMTk5
LDQzIEBAIGludGVyZmFjZSBuc0lQcmluY2lwYWwgOiBuc0lTZXJpYWxpemFibGUKICAgICAgKi8K
ICAgICBib29sZWFuIHN1YnN1bWVzSWdub3JpbmdEb21haW4oaW4gbnNJUHJpbmNpcGFsIG90aGVy
KTsKIAogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgcHJpbmNpcGFsIGlzIGFs
bG93ZWQgdG8gbG9hZCB0aGUgbmV0d29yayByZXNvdXJjZQogICAgICAqIGxvY2F0ZWQgYXQgdGhl
IGdpdmVuIFVSSSB1bmRlciB0aGUgc2FtZS1vcmlnaW4gcG9saWN5LiBUaGlzIG1lYW5zIHRoYXQK
ICAgICAgKiBjb2RlYmFzZSBwcmluY2lwYWxzIGFyZSBvbmx5IGFsbG93ZWQgdG8gbG9hZCByZXNv
dXJjZXMgZnJvbSB0aGUgc2FtZQogICAgICAqIGRvbWFpbiwgdGhlIHN5c3RlbSBwcmluY2lwYWwg
aXMgYWxsb3dlZCB0byBsb2FkIGFueXRoaW5nLCBhbmQgbnVsbAotICAgICAqIHByaW5jaXBhbHMg
YXJlIG5vdCBhbGxvd2VkIHRvIGxvYWQgYW55dGhpbmcuCisgICAgICogcHJpbmNpcGFscyBhcmUg
bm90IGFsbG93ZWQgdG8gbG9hZCBhbnl0aGluZy4gVGhpcyBpcyBjaGFuZ2VkIHNsaWdodGx5Cisg
ICAgICogYnkgdGhlIG9wdGlvbmFsIGZsYWcgYWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsICh3aGlj
aCBkZWZhdWx0cyB0byBmYWxzZSkKKyAgICAgKiB3aGljaCBhbGxvd3MgdGhlIGxvYWQgb2YgYSBk
YXRhOiBVUkkgKHdoaWNoIGluaGVyaXRzIHRoZSBwcmluY2lwYWwgb2YKKyAgICAgKiBpdHMgbG9h
ZGVyKSBvciBhIFVSSSB3aXRoIHRoZSBzYW1lIHByaW5jaXBhbCBhcyBpdHMgbG9hZGVyIChlZy4g
YSAKKyAgICAgKiBCbG9iIFVSSSkuCisgICAgICogSW4gdGhlc2UgY2FzZXMsIHdpdGggYWxsb3dJ
ZkluaGVyaXRzUHJpbmNpcGFsIHNldCB0byB0cnVlLCB0aGUgVVJJIGNhbgorICAgICAqIGJlIGxv
YWRlZCBieSBhIG51bGwgcHJpbmNpcGFsLgogICAgICAqCiAgICAgICogSWYgdGhlIGxvYWQgaXMg
YWxsb3dlZCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gSWYgdGhlIGxvYWQgaXMgbm90CiAg
ICAgICogYWxsb3dlZCB0aGUgZnVuY3Rpb24gdGhyb3dzIE5TX0VSUk9SX0RPTV9CQURfVVJJLgog
ICAgICAqCiAgICAgICogTk9URTogT3RoZXIgcG9saWNpZXMgbWlnaHQgb3ZlcnJpZGUgdGhpcywg
c3VjaCBhcyB0aGUgQWNjZXNzLUNvbnRyb2wKICAgICAgKiAgICAgICBzcGVjaWZpY2F0aW9uLgog
ICAgICAqIE5PVEU6IFRoZSAnZG9tYWluJyBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCBvbiB0aGUg
YmVoYXZpb3VyIG9mIHRoaXMKICAgICAgKiAgICAgICBmdW5jdGlvbi4KICAgICAgKgogICAgICAq
CiAgICAgICogQHBhcmFtIHVyaSAgICBUaGUgVVJJIGFib3V0IHRvIGJlIGxvYWRlZC4KICAgICAg
KiBAcGFyYW0gcmVwb3J0IElmIHRydWUsIHdpbGwgcmVwb3J0IGEgd2FybmluZyB0byB0aGUgY29u
c29sZSBzZXJ2aWNlCiAgICAgICogICAgICAgICAgICAgICBpZiB0aGUgbG9hZCBpcyBub3QgYWxs
b3dlZC4KKyAgICAgKiBAcGFyYW0gYWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsICAgSWYgdHJ1ZSwg
dGhlIGxvYWQgaXMgYWxsb3dlZCBpZiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9hZGVlIGluaGVyaXRzIHRoZSBwcmluY2lwYWwgb2YgdGhlCisgICAgICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci4KICAgICAgKiBAdGhyb3dz
IE5TX0VSUk9SX0RPTV9CQURfVVJJIGlmIHRoZSBsb2FkIGlzIG5vdCBhbGxvd2VkLgogICAgICAq
LwotICAgIHZvaWQgY2hlY2tNYXlMb2FkKGluIG5zSVVSSSB1cmksIGluIGJvb2xlYW4gcmVwb3J0
KTsKKyAgICB2b2lkIGNoZWNrTWF5TG9hZChpbiBuc0lVUkkgdXJpLCBpbiBib29sZWFuIHJlcG9y
dCwKKyAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGFsbG93SWZJbmhlcml0c1ByaW5j
aXBhbCk7CiAKICAgICAvKioKICAgICAgKiBUaGUgc3ViamVjdCBuYW1lIGZvciB0aGUgY2VydGlm
aWNhdGUuICBUaGlzIGFjdHVhbGx5IGlkZW50aWZpZXMgdGhlCiAgICAgICogc3ViamVjdCBvZiB0
aGUgY2VydGlmaWNhdGUuICBUaGlzIG1heSB3ZWxsIG5vdCBiZSBhIHN0cmluZyB0aGF0IHdvdWxk
CiAgICAgICogbWVhbiBtdWNoIHRvIGEgdHlwaWNhbCB1c2VyIG9uIGl0cyBvd24gKGUuZy4gaXQg
bWF5IGhhdmUgYSBudW1iZXIgb2YKICAgICAgKiBkaWZmZXJlbnQgbmFtZXMgYWxsIGNvbmNhdGVu
YXRlZCB0b2dldGhlciB3aXRoIHNvbWUgaW5mb3JtYXRpb24gb24gd2hhdAogICAgICAqIHRoZXkg
bWVhbiBpbiBiZXR3ZWVuKS4KICAgICAgKgpkaWZmIC0tZ2l0IGEvY2Fwcy9pbmNsdWRlL25zTnVs
bFByaW5jaXBhbC5oIGIvY2Fwcy9pbmNsdWRlL25zTnVsbFByaW5jaXBhbC5oCi0tLSBhL2NhcHMv
aW5jbHVkZS9uc051bGxQcmluY2lwYWwuaAorKysgYi9jYXBzL2luY2x1ZGUvbnNOdWxsUHJpbmNp
cGFsLmgKQEAgLTQzLDE2ICs0MywxNyBAQAogICovCiAKICNpZm5kZWYgbnNOdWxsUHJpbmNpcGFs
X2hfXwogI2RlZmluZSBuc051bGxQcmluY2lwYWxfaF9fCiAKICNpbmNsdWRlICJuc0lQcmluY2lw
YWwuaCIKICNpbmNsdWRlICJuc0pTUHJpbmNpcGFscy5oIgogI2luY2x1ZGUgIm5zQ09NUHRyLmgi
CisjaW5jbHVkZSAibnNQcmluY2lwYWwuaCIKIAogY2xhc3MgbnNJVVJJOwogCiAjZGVmaW5lIE5T
X05VTExQUklOQ0lQQUxfQ0xBU1NOQU1FICJudWxscHJpbmNpcGFsIgogI2RlZmluZSBOU19OVUxM
UFJJTkNJUEFMX0NJRCBcCiB7IDB4ZGQxNTZkNjIsIDB4ZDI2ZiwgMHg0NDQxLCBcCiAgeyAweDlj
LCAweGRiLCAweGU4LCAweGYwLCAweDkxLCAweDA3LCAweGMyLCAweDczIH0gfQogI2RlZmluZSBO
U19OVUxMUFJJTkNJUEFMX0NPTlRSQUNUSUQgIkBtb3ppbGxhLm9yZy9udWxscHJpbmNpcGFsOzEi
CmRpZmYgLS1naXQgYS9jYXBzL2luY2x1ZGUvbnNQcmluY2lwYWwuaCBiL2NhcHMvaW5jbHVkZS9u
c1ByaW5jaXBhbC5oCi0tLSBhL2NhcHMvaW5jbHVkZS9uc1ByaW5jaXBhbC5oCisrKyBiL2NhcHMv
aW5jbHVkZS9uc1ByaW5jaXBhbC5oCkBAIC00MSwxNyArNDEsMTkgQEAKICNkZWZpbmUgbnNQcmlu
Y2lwYWxfaF9fCiAKICNpbmNsdWRlICJuc0F1dG9QdHIuaCIKICNpbmNsdWRlICJuc0NPTVB0ci5o
IgogI2luY2x1ZGUgIm5zVm9pZEFycmF5LmgiCiAjaW5jbHVkZSAibnNIYXNodGFibGUuaCIKICNp
bmNsdWRlICJuc0pTUHJpbmNpcGFscy5oIgogI2luY2x1ZGUgIm5zVEFycmF5LmgiCi0jaW5jbHVk
ZSAibnNBdXRvUHRyLmgiCisjaW5jbHVkZSAibnNJUHJvdG9jb2xIYW5kbGVyLmgiCisjaW5jbHVk
ZSAibnNOZXRVdGlsLmgiCisjaW5jbHVkZSAibnNTY3JpcHRTZWN1cml0eU1hbmFnZXIuaCIKIAog
Y2xhc3MgbnNJT2JqZWN0SW5wdXRTdHJlYW07CiBjbGFzcyBuc0lPYmplY3RPdXRwdXRTdHJlYW07
CiAKIGNsYXNzIG5zUHJpbmNpcGFsIDogcHVibGljIG5zSlNQcmluY2lwYWxzCiB7CiBwdWJsaWM6
CiAgIG5zUHJpbmNpcGFsKCk7CkBAIC05NywxNiArOTksMzIgQEAgcHVibGljOgogICB2b2lkIFNl
dFVSSShuc0lVUkkgKmFVUkkpOwogICBuc3Jlc3VsdCBTZXRDYXBhYmlsaXR5KGNvbnN0IGNoYXIg
KmNhcGFiaWxpdHksIHZvaWQgKiphbm5vdGF0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICBBbm5vdGF0aW9uVmFsdWUgdmFsdWUpOwogCiAgIHN0YXRpYyBjb25zdCBjaGFyIHNJbnZhbGlk
W107CiAKICAgdmlydHVhbCB2b2lkIEdldFNjcmlwdExvY2F0aW9uKG5zQUNTdHJpbmcgJmFTdHIp
IE1PWl9PVkVSUklERTsKIAorICBzdGF0aWMgYm9vbCBJc1ByaW5jaXBhbEluaGVyaXRlZChuc0lV
UkkqIGFVUkkpIHsKKyAgICAvLyByZXR1cm4gdHJ1ZSBpZiB0aGUgbG9hZGVlIFVSSSBoYXMKKyAg
ICAvLyB0aGUgVVJJX0lOSEVSSVRTX1NFQ1VSSVRZX0NPTlRFWFQgZmxhZyBzZXQuCisgICAgYm9v
bCBkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dDsKKyAgICBuc3Jlc3VsdCBydiA9CisgICAgTlNf
VVJJQ2hhaW5IYXNGbGFncyhhVVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJvdG9j
b2xIYW5kbGVyOjpVUklfSU5IRVJJVFNfU0VDVVJJVFlfQ09OVEVYVCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICZkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dCk7CisKKyAgICBpZiAoTlNfU1VD
Q0VFREVEKHJ2KSAmJiBkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dCkgeworICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICNpZmRlZiBERUJVRwog
ICB2aXJ0dWFsIHZvaWQgZHVtcEltcGwoKSBNT1pfT1ZFUlJJREU7CiAjZW5kaWYgCiAKIHByb3Rl
Y3RlZDoKICAgLy8gRm9ybWVybHkgYW4gSURMIG1ldGhvZC4gTm93IGp1c3QgYSBwcm90ZWN0ZWQg
aGVscGVyLgogICBuc3Jlc3VsdCBTZXRDYW5FbmFibGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIgKmNh
cGFiaWxpdHksIFBSSW50MTYgY2FuRW5hYmxlKTsKIApkaWZmIC0tZ2l0IGEvY2Fwcy9zcmMvbnNO
dWxsUHJpbmNpcGFsLmNwcCBiL2NhcHMvc3JjL25zTnVsbFByaW5jaXBhbC5jcHAKLS0tIGEvY2Fw
cy9zcmMvbnNOdWxsUHJpbmNpcGFsLmNwcAorKysgYi9jYXBzL3NyYy9uc051bGxQcmluY2lwYWwu
Y3BwCkBAIC0zMTksMTggKzMxOSwzNiBAQCBuc051bGxQcmluY2lwYWw6OlN1YnN1bWVzKG5zSVBy
aW5jaXBhbCAqCiAKIE5TX0lNRVRIT0RJTVAKIG5zTnVsbFByaW5jaXBhbDo6U3Vic3VtZXNJZ25v
cmluZ0RvbWFpbihuc0lQcmluY2lwYWwgKmFPdGhlciwgYm9vbCAqYVJlc3VsdCkKIHsKICAgcmV0
dXJuIFN1YnN1bWVzKGFPdGhlciwgYVJlc3VsdCk7CiB9CiAKIE5TX0lNRVRIT0RJTVAKLW5zTnVs
bFByaW5jaXBhbDo6Q2hlY2tNYXlMb2FkKG5zSVVSSSogYVVSSSwgYm9vbCBhUmVwb3J0KQorbnNO
dWxsUHJpbmNpcGFsOjpDaGVja01heUxvYWQobnNJVVJJKiBhVVJJLCBib29sIGFSZXBvcnQsIGJv
b2wgYUFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCkKIHsKKyAgaWYgKGFBbGxvd0lmSW5oZXJpdHNQ
cmluY2lwYWwpIHsKKyAgICBpZiAobnNQcmluY2lwYWw6OklzUHJpbmNpcGFsSW5oZXJpdGVkKGFV
UkkpKSB7CisgICAgICByZXR1cm4gTlNfT0s7CisgICAgfQorCisgICAgLy8gQWxzbyBhbGxvdyB0
aGUgbG9hZCBpZiB0aGUgcHJpbmNpcGFsIG9mIHRoZSBVUkkgYmVpbmcgY2hlY2tlZCBpcyBleGFj
dGx5CisgICAgLy8gdXMgaWUgdGhpcy4KKyAgICBuc0NPTVB0cjxuc0lVUklXaXRoUHJpbmNpcGFs
PiB1cmlQcmluYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFVUkkpOworICAgIGlmICh1cmlQcmluYykg
eworICAgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBwcmluY2lwYWw7CisgICAgICB1cmlQcmlu
Yy0+R2V0UHJpbmNpcGFsKGdldHRlcl9BZGRSZWZzKHByaW5jaXBhbCkpOworCisgICAgICBpZiAo
cHJpbmNpcGFsICYmIHByaW5jaXBhbCA9PSB0aGlzKSB7CisgICAgICAgIHJldHVybiBOU19PSzsK
KyAgICAgIH0KKyAgICB9CisgIH0KKwogICBpZiAoYVJlcG9ydCkgewogICAgIG5zU2NyaXB0U2Vj
dXJpdHlNYW5hZ2VyOjpSZXBvcnRFcnJvcigKICAgICAgIG5zbnVsbCwgTlNfTElURVJBTF9TVFJJ
TkcoIkNoZWNrU2FtZU9yaWdpbkVycm9yIiksIG1VUkksIGFVUkkpOwogICB9CiAKICAgcmV0dXJu
IE5TX0VSUk9SX0RPTV9CQURfVVJJOwogfQogCmRpZmYgLS1naXQgYS9jYXBzL3NyYy9uc1ByaW5j
aXBhbC5jcHAgYi9jYXBzL3NyYy9uc1ByaW5jaXBhbC5jcHAKLS0tIGEvY2Fwcy9zcmMvbnNQcmlu
Y2lwYWwuY3BwCisrKyBiL2NhcHMvc3JjL25zUHJpbmNpcGFsLmNwcApAQCAtMzg3LDE4ICszODcs
MjYgQEAgVVJJSXNMb2NhbEZpbGUobnNJVVJJICphVVJJKQogCiAgIHJldHVybiB1dGlsICYmIE5T
X1NVQ0NFRURFRCh1dGlsLT5Qcm90b2NvbEhhc0ZsYWdzKGFVUkksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVByb3RvY29sSGFuZGxlcjo6VVJJX0lTX0xPQ0FMX0ZJTEUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc0ZpbGUpKSAmJgogICAgICAgICAgaXNG
aWxlOwogfQogCiBOU19JTUVUSE9ESU1QCi1uc1ByaW5jaXBhbDo6Q2hlY2tNYXlMb2FkKG5zSVVS
SSogYVVSSSwgYm9vbCBhUmVwb3J0KQorbnNQcmluY2lwYWw6OkNoZWNrTWF5TG9hZChuc0lVUkkq
IGFVUkksIGJvb2wgYVJlcG9ydCwgYm9vbCBhQWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsKQogewor
ICAgaWYgKGFBbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpIHsKKyAgICAvLyBJZiB0aGUgY2FsbGVy
IHNwZWNpZmllZCB0byBhbGxvdyBsb2FkcyBvZiBVUklzIHRoYXQgaW5oZXJpdAorICAgIC8vIG91
ciBwcmluY2lwYWwsIGFsbG93IHRoZSBsb2FkIGlmIHRoaXMgVVJJIGluaGVyaXRzIGl0cyBwcmlu
Y2lwYWwKKyAgICBpZiAobnNQcmluY2lwYWw6OklzUHJpbmNpcGFsSW5oZXJpdGVkKGFVUkkpKSB7
CisgICAgICByZXR1cm4gTlNfT0s7CisgICAgfQorICB9CisKICAgaWYgKCFuc1NjcmlwdFNlY3Vy
aXR5TWFuYWdlcjo6U2VjdXJpdHlDb21wYXJlVVJJcyhtQ29kZWJhc2UsIGFVUkkpKSB7CiAgICAg
aWYgKG5zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOjpHZXRTdHJpY3RGaWxlT3JpZ2luUG9saWN5KCkg
JiYKICAgICAgICAgVVJJSXNMb2NhbEZpbGUoYVVSSSkpIHsKICAgICAgIG5zQ09NUHRyPG5zSUZp
bGVVUkw+IGZpbGVVUkwoZG9fUXVlcnlJbnRlcmZhY2UoYVVSSSkpOwogCiAgICAgICBpZiAoIVVS
SUlzTG9jYWxGaWxlKG1Db2RlYmFzZSkpIHsKICAgICAgICAgLy8gSWYgdGhlIGNvZGViYXNlIGlz
IG5vdCBhbHNvIGEgZmlsZTogdXJpIHRoZW4gZm9yZ2V0IGl0CiAgICAgICAgIC8vIChkb24ndCB3
YW50IHJlc291cmNlOiBwcmluY2lwYWxzIGluIGEgZmlsZTogZG9jKQpkaWZmIC0tZ2l0IGEvY2Fw
cy9zcmMvbnNTY3JpcHRTZWN1cml0eU1hbmFnZXIuY3BwIGIvY2Fwcy9zcmMvbnNTY3JpcHRTZWN1
cml0eU1hbmFnZXIuY3BwCi0tLSBhL2NhcHMvc3JjL25zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmNw
cAorKysgYi9jYXBzL3NyYy9uc1NjcmlwdFNlY3VyaXR5TWFuYWdlci5jcHAKQEAgLTE0ODQsMTcg
KzE0ODQsMTcgQEAgbnNTY3JpcHRTZWN1cml0eU1hbmFnZXI6OkNoZWNrTG9hZFVSSVdpdAogICAg
IC8vIENoZWNrIGZvciB1cmlzIHRoYXQgYXJlIG9ubHkgbG9hZGFibGUgYnkgcHJpbmNpcGFscyB0
aGF0IHN1YnN1bWUgdGhlbQogICAgIGJvb2wgaGFzRmxhZ3M7CiAgICAgcnYgPSBOU19VUklDaGFp
bkhhc0ZsYWdzKHRhcmdldEJhc2VVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVByb3RvY29sSGFuZGxlcjo6VVJJX0xPQURBQkxFX0JZX1NVQlNVTUVSUywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmhhc0ZsYWdzKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwg
cnYpOwogCiAgICAgaWYgKGhhc0ZsYWdzKSB7Ci0gICAgICAgIHJldHVybiBhUHJpbmNpcGFsLT5D
aGVja01heUxvYWQodGFyZ2V0QmFzZVVSSSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBhUHJpbmNp
cGFsLT5DaGVja01heUxvYWQodGFyZ2V0QmFzZVVSSSwgdHJ1ZSwgZmFsc2UpOwogICAgIH0KIAog
ICAgIC8vLS0gZ2V0IHRoZSBzb3VyY2Ugc2NoZW1lCiAgICAgbnNDQXV0b1N0cmluZyBzb3VyY2VT
Y2hlbWU7CiAgICAgcnYgPSBzb3VyY2VCYXNlVVJJLT5HZXRTY2hlbWUoc291cmNlU2NoZW1lKTsK
ICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgcmV0dXJuIHJ2OwogCiAgICAgaWYgKHNvdXJjZVNjaGVt
ZS5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKE5TX05VTExQUklOQ0lQQUxfU0NIRU1FKSkgewpkaWZm
IC0tZ2l0IGEvY2Fwcy9zcmMvbnNTeXN0ZW1QcmluY2lwYWwuY3BwIGIvY2Fwcy9zcmMvbnNTeXN0
ZW1QcmluY2lwYWwuY3BwCi0tLSBhL2NhcHMvc3JjL25zU3lzdGVtUHJpbmNpcGFsLmNwcAorKysg
Yi9jYXBzL3NyYy9uc1N5c3RlbVByaW5jaXBhbC5jcHAKQEAgLTE0MSwxNyArMTQxLDE3IEBAIG5z
U3lzdGVtUHJpbmNpcGFsOjpTdWJzdW1lcyhuc0lQcmluY2lwYWwKIE5TX0lNRVRIT0RJTVAKIG5z
U3lzdGVtUHJpbmNpcGFsOjpTdWJzdW1lc0lnbm9yaW5nRG9tYWluKG5zSVByaW5jaXBhbCAqb3Ro
ZXIsIGJvb2wgKnJlc3VsdCkKIHsKICAgICAqcmVzdWx0ID0gdHJ1ZTsKICAgICByZXR1cm4gTlNf
T0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKLW5zU3lzdGVtUHJpbmNpcGFsOjpDaGVja01heUxvYWQo
bnNJVVJJKiB1cmksIGJvb2wgYVJlcG9ydCkKK25zU3lzdGVtUHJpbmNpcGFsOjpDaGVja01heUxv
YWQobnNJVVJJKiB1cmksIGJvb2wgYVJlcG9ydCwgYm9vbCBhQWxsb3dJZkluaGVyaXRzUHJpbmNp
cGFsKQogewogICAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAogbnNTeXN0ZW1Q
cmluY2lwYWw6OkdldEhhc2hWYWx1ZShQUlVpbnQzMiAqcmVzdWx0KQogewogICAgICpyZXN1bHQg
PSBOU19QVFJfVE9fSU5UMzIodGhpcyk7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGlj
L25zQ29udGVudFV0aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgK
LS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQv
YmFzZS9wdWJsaWMvbnNDb250ZW50VXRpbHMuaApAQCAtMTcwOSwxNyArMTcwOSwxNyBAQCBwdWJs
aWM6CiAgICAqCiAgICAqIEBwYXJhbSBhU2NyaXB0Q29udGV4dCB0aGUgc2NyaXB0IGNvbnRleHQg
dG8gZ2V0IHRoZSBkb2N1bWVudCBmb3I7IGNhbiBiZSBudWxsCiAgICAqCiAgICAqIEByZXR1cm4g
dGhlIGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NyaXB0IGNvbnRleHQKICAgICovCiAg
IHN0YXRpYyBhbHJlYWR5X0FkZFJlZmVkPG5zSURvY3VtZW50PgogICBHZXREb2N1bWVudEZyb21T
Y3JpcHRDb250ZXh0KG5zSVNjcmlwdENvbnRleHQgKmFTY3JpcHRDb250ZXh0KTsKIAotICBzdGF0
aWMgYm9vbCBDaGVja01heUxvYWQobnNJUHJpbmNpcGFsKiBhUHJpbmNpcGFsLCBuc0lDaGFubmVs
KiBhQ2hhbm5lbCk7CisgIHN0YXRpYyBib29sIENoZWNrTWF5TG9hZChuc0lQcmluY2lwYWwqIGFQ
cmluY2lwYWwsIG5zSUNoYW5uZWwqIGFDaGFubmVsLCBib29sIGFBbGxvd0lmSW5oZXJpdHNQcmlu
Y2lwYWwpOwogCiAgIC8qKgogICAgKiBUaGUgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIHRoZSBjYWxs
ZXIgY2FuIGFjY2VzcyBuYXRpdmUgYW5vbnltb3VzIGNvbnRlbnQuCiAgICAqIElmIHRoZXJlIGlz
IG5vIEpTIGluIHRoZSBzdGFjayBvciBwcml2aWxlZ2VkIEpTIGlzIHJ1bm5pbmcsIHRoaXMKICAg
ICogbWV0aG9kIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNlLgogICAgKi8KICAgc3RhdGlj
IGJvb2wgQ2FuQWNjZXNzTmF0aXZlQW5vbigpOwogCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uv
c3JjL25zQ29udGVudFNpbmsuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRTaW5rLmNw
cAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFNpbmsuY3BwCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNDb250ZW50U2luay5jcHAKQEAgLTEwNDIsMTcgKzEwNDIsMTcgQEAgbnNDb250
ZW50U2luazo6UHJvY2Vzc09mZmxpbmVNYW5pZmVzdChjbwogICAgIG5zQ29udGVudFV0aWxzOjpO
ZXdVUklXaXRoRG9jdW1lbnRDaGFyc2V0KGdldHRlcl9BZGRSZWZzKG1hbmlmZXN0VVJJKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTWFuaWZlc3RTcGVj
LCBtRG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbURvY3VtZW50VVJJKTsKICAgICBpZiAoIW1hbmlmZXN0VVJJKSB7CiAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgLy8gRG9jdW1lbnRzIG11c3QgbGlzdCBhIG1hbmlmZXN0IGZyb20gdGhl
IHNhbWUgb3JpZ2luCi0gICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+Q2hlY2tN
YXlMb2FkKG1hbmlmZXN0VVJJLCB0cnVlKTsKKyAgICBydiA9IG1Eb2N1bWVudC0+Tm9kZVByaW5j
aXBhbCgpLT5DaGVja01heUxvYWQobWFuaWZlc3RVUkksIHRydWUsIGZhbHNlKTsKICAgICBpZiAo
TlNfRkFJTEVEKHJ2KSkgewogICAgICAgYWN0aW9uID0gQ0FDSEVfU0VMRUNUSU9OX1JFU0VMRUNU
X1dJVEhPVVRfTUFOSUZFU1Q7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgLy8gT25seSBjb250
aW51ZSBpZiB0aGUgZG9jdW1lbnQgaGFzIHBlcm1pc3Npb24gdG8gdXNlIG9mZmxpbmUgQVBJcy4K
ICAgICAgIGlmICghbnNDb250ZW50VXRpbHM6Ok9mZmxpbmVBcHBBbGxvd2VkKG1Eb2N1bWVudC0+
Tm9kZVByaW5jaXBhbCgpKSkgewogICAgICAgICByZXR1cm47CiAgICAgICB9CmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMv
bnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMu
Y3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC00NDk4LDE3
ICs0NDk4LDE3IEBAIG5zQ29udGVudFV0aWxzOjpDaGVja1NlY3VyaXR5QmVmb3JlTG9hZCgKIAog
ICAvLyBTYW1lIE9yaWdpbgogICBpZiAoKGFBbGxvd0RhdGEgJiYgU2NoZW1lSXMoYVVSSVRvTG9h
ZCwgImRhdGEiKSkgfHwKICAgICAgICgoYUNoZWNrTG9hZEZsYWdzICYgbnNJU2NyaXB0U2VjdXJp
dHlNYW5hZ2VyOjpBTExPV19DSFJPTUUpICYmCiAgICAgICAgU2NoZW1lSXMoYVVSSVRvTG9hZCwg
ImNocm9tZSIpKSkgewogICAgIHJldHVybiBOU19PSzsKICAgfQogCi0gIHJldHVybiBhTG9hZGlu
Z1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGFVUklUb0xvYWQsIHRydWUpOworICByZXR1cm4gYUxv
YWRpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJVG9Mb2FkLCB0cnVlLCBmYWxzZSk7CiB9
CiAKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpJc1N5c3RlbVByaW5jaXBhbChuc0lQcmluY2lwYWwq
IGFQcmluY2lwYWwpCiB7CiAgIGJvb2wgaXNTeXN0ZW07CiAgIG5zcmVzdWx0IHJ2ID0gc1NlY3Vy
aXR5TWFuYWdlci0+SXNTeXN0ZW1QcmluY2lwYWwoYVByaW5jaXBhbCwgJmlzU3lzdGVtKTsKICAg
cmV0dXJuIE5TX1NVQ0NFRURFRChydikgJiYgaXNTeXN0ZW07CkBAIC01NjE2LDE5ICs1NjE2LDE5
IEBAIG5zQ29udGVudFV0aWxzOjpDaGVja1NhbWVPcmlnaW4obnNJQ2hhbm4KIAogICBuc0NPTVB0
cjxuc0lVUkk+IG5ld1VSSTsKICAgYU5ld0NoYW5uZWwtPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhu
ZXdVUkkpKTsKICAgbnNDT01QdHI8bnNJVVJJPiBuZXdPcmlnaW5hbFVSSTsKICAgYU5ld0NoYW5u
ZWwtPkdldE9yaWdpbmFsVVJJKGdldHRlcl9BZGRSZWZzKG5ld09yaWdpbmFsVVJJKSk7CiAKICAg
TlNfRU5TVVJFX1NUQVRFKG9sZFByaW5jaXBhbCAmJiBuZXdVUkkgJiYgbmV3T3JpZ2luYWxVUkkp
OwogCi0gIG5zcmVzdWx0IHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJLCBm
YWxzZSk7CisgIG5zcmVzdWx0IHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJ
LCBmYWxzZSwgZmFsc2UpOwogICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSAmJiBuZXdPcmlnaW5hbFVS
SSAhPSBuZXdVUkkpIHsKLSAgICBydiA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld09y
aWdpbmFsVVJJLCBmYWxzZSk7CisgICAgcnYgPSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChu
ZXdPcmlnaW5hbFVSSSwgZmFsc2UsIGZhbHNlKTsKICAgfQogCiAgIHJldHVybiBydjsKIH0KIAog
TlNfSU1QTF9JU1VQUE9SVFMyKG5zU2FtZU9yaWdpbkNoZWNrZXIsCiAgICAgICAgICAgICAgICAg
ICAgbnNJQ2hhbm5lbEV2ZW50U2luaywKICAgICAgICAgICAgICAgICAgICBuc0lJbnRlcmZhY2VS
ZXF1ZXN0b3IpCkBAIC01Nzg5LDIzICs1Nzg5LDIzIEBAIG5zQ29udGVudFV0aWxzOjpHZXREb2N1
bWVudEZyb21TY3JpcHRDb24KICAgICAgIENhbGxRdWVyeUludGVyZmFjZShkb21kb2MsICZkb2Mp
OwogICAgIH0KICAgfQogICByZXR1cm4gZG9jOwogfQogCiAvKiBzdGF0aWMgKi8KIGJvb2wKLW5z
Q29udGVudFV0aWxzOjpDaGVja01heUxvYWQobnNJUHJpbmNpcGFsKiBhUHJpbmNpcGFsLCBuc0lD
aGFubmVsKiBhQ2hhbm5lbCkKK25zQ29udGVudFV0aWxzOjpDaGVja01heUxvYWQobnNJUHJpbmNp
cGFsKiBhUHJpbmNpcGFsLCBuc0lDaGFubmVsKiBhQ2hhbm5lbCwgYm9vbCBhQWxsb3dJZkluaGVy
aXRzUHJpbmNpcGFsKQogewogICBuc0NPTVB0cjxuc0lVUkk+IGNoYW5uZWxVUkk7CiAgIG5zcmVz
dWx0IHJ2ID0gTlNfR2V0RmluYWxDaGFubmVsVVJJKGFDaGFubmVsLCBnZXR0ZXJfQWRkUmVmcyhj
aGFubmVsVVJJKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBmYWxzZSk7CiAKLSAgcmV0dXJu
IE5TX1NVQ0NFRURFRChhUHJpbmNpcGFsLT5DaGVja01heUxvYWQoY2hhbm5lbFVSSSwgZmFsc2Up
KTsKKyAgcmV0dXJuIE5TX1NVQ0NFRURFRChhUHJpbmNpcGFsLT5DaGVja01heUxvYWQoY2hhbm5l
bFVSSSwgZmFsc2UsIGFBbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpKTsKIH0KIAogbnNDb250ZW50
VHlwZVBhcnNlcjo6bnNDb250ZW50VHlwZVBhcnNlcihjb25zdCBuc0FTdHJpbmcmIGFTdHJpbmcp
CiAgIDogbVN0cmluZyhhU3RyaW5nKSwgbVNlcnZpY2UobnNudWxsKQogewogICBDYWxsR2V0U2Vy
dmljZSgiQG1vemlsbGEub3JnL25ldHdvcmsvbWltZS1oZHJwYXJhbTsxIiwgJm1TZXJ2aWNlKTsK
IH0KIApAQCAtNjU0MywxNyArNjU0MywxNyBAQCBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVs
T3duZXIobnNJUHJpCiAgIC8vIGZpbGU6IHVyaSBzcGVjaWFsLWNhc2luZwogICAvLwogICAvLyBJ
ZiB0aGlzIGlzIGEgZmlsZTogbG9hZCBvcGVuZWQgZnJvbSBhbm90aGVyIGZpbGU6IHRoZW4gaXQg
bWF5IG5lZWQKICAgLy8gdG8gaW5oZXJpdCB0aGUgb3duZXIgZnJvbSB0aGUgcmVmZXJyZXIgc28g
dGhleSBjYW4gc2NyaXB0IGVhY2ggb3RoZXIuCiAgIC8vIElmIHdlIGRvbid0IHNldCB0aGUgb3du
ZXIgZXhwbGljaXRseSB0aGVuIGVhY2ggZmlsZTogZ2V0cyBhbiBvd25lcgogICAvLyBiYXNlZCBv
biBpdHMgb3duIGNvZGViYXNlIGxhdGVyLgogICAvLwogICBpZiAoVVJJSXNMb2NhbEZpbGUoYVVS
SSkgJiYgYUxvYWRpbmdQcmluY2lwYWwgJiYKLSAgICAgIE5TX1NVQ0NFRURFRChhTG9hZGluZ1By
aW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGFVUkksIGZhbHNlKSkgJiYKKyAgICAgIE5TX1NVQ0NFRURF
RChhTG9hZGluZ1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGFVUkksIGZhbHNlLCBmYWxzZSkpICYm
CiAgICAgICAvLyBPbmUgbW9yZSBjaGVjayBoZXJlLiAgQ2hlY2tNYXlMb2FkIHdpbGwgYWx3YXlz
IHJldHVybiB0cnVlIGZvciB0aGUKICAgICAgIC8vIHN5c3RlbSBwcmluY2lwYWwsIGJ1dCB3ZSBk
byBOT1Qgd2FudCB0byBpbmhlcml0IGluIHRoYXQgY2FzZS4KICAgICAgICFJc1N5c3RlbVByaW5j
aXBhbChhTG9hZGluZ1ByaW5jaXBhbCkpIHsKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIoYUxvYWRp
bmdQcmluY2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgcmV0dXJuIGZhbHNlOwpk
aWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHkuY3Bw
IGIvY29udGVudC9iYXNlL3NyYy9uc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHkuY3BwCi0tLSBhL2Nv
bnRlbnQvYmFzZS9zcmMvbnNDcm9zc1NpdGVMaXN0ZW5lclByb3h5LmNwcAorKysgYi9jb250ZW50
L2Jhc2Uvc3JjL25zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5jcHAKQEAgLTc3NiwyMCArNzc2LDIw
IEBAIG5zQ09SU0xpc3RlbmVyUHJveHk6OlVwZGF0ZUNoYW5uZWwobnNJQ2gKICAgaWYgKG9yaWdp
bmFsVVJJICE9IHVyaSkgewogICAgIHJ2ID0gbnNDb250ZW50VXRpbHM6OkdldFNlY3VyaXR5TWFu
YWdlcigpLT4KICAgICAgIENoZWNrTG9hZFVSSVdpdGhQcmluY2lwYWwobVJlcXVlc3RpbmdQcmlu
Y2lwYWwsIG9yaWdpbmFsVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lT
Y3JpcHRTZWN1cml0eU1hbmFnZXI6OlNUQU5EQVJEKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhy
diwgcnYpOwogICB9CiAKICAgaWYgKCFtSGFzQmVlbkNyb3NzU2l0ZSAmJgotICAgICAgTlNfU1VD
Q0VFREVEKG1SZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQodXJpLCBmYWxzZSkpICYm
CisgICAgICBOU19TVUNDRUVERUQobVJlcXVlc3RpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1
cmksIGZhbHNlLCBmYWxzZSkpICYmCiAgICAgICAob3JpZ2luYWxVUkkgPT0gdXJpIHx8CiAgICAg
ICAgTlNfU1VDQ0VFREVEKG1SZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQob3JpZ2lu
YWxVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UpKSkpIHsKICAgICByZXR1cm4gTlNfT0s7CiAg
IH0KIAogICAvLyBJdCdzIGEgY3Jvc3Mgc2l0ZSBsb2FkCiAgIG1IYXNCZWVuQ3Jvc3NTaXRlID0g
dHJ1ZTsKIAogICBuc0NTdHJpbmcgdXNlcnBhc3M7CiAgIHVyaS0+R2V0VXNlclBhc3ModXNlcnBh
c3MpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2NvbnRl
bnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3Vt
ZW50LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0xMTAwLDI4
ICsxMTAwLDIyIEBAIG5zRXh0ZXJuYWxSZXNvdXJjZU1hcDo6UGVuZGluZ0xvYWQ6OlN0YXIKIAog
ICBuc0lQcmluY2lwYWwqIHJlcXVlc3RpbmdQcmluY2lwYWwgPSBhUmVxdWVzdGluZ05vZGUtPk5v
ZGVQcmluY2lwYWwoKTsKIAogICBuc3Jlc3VsdCBydiA9IG5zQ29udGVudFV0aWxzOjpHZXRTZWN1
cml0eU1hbmFnZXIoKS0+CiAgICAgQ2hlY2tMb2FkVVJJV2l0aFByaW5jaXBhbChyZXF1ZXN0aW5n
UHJpbmNpcGFsLCBhVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU2NyaXB0
U2VjdXJpdHlNYW5hZ2VyOjpTVEFOREFSRCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7
CiAgIAotICAvLyBBbGxvdyBkYXRhIFVSSXMgKGxldCB0aGVtIHNraXAgdGhlIENoZWNrTWF5TG9h
ZCBjYWxsKSwgc2luY2Ugd2Ugd2FudAorICAvLyBBbGxvdyBkYXRhIFVSSXMgYW5kIG90aGVyIFVS
SSdzIHRoYXQgaW5oZXJpdCB0aGVpciBwcmluY2lwYWwgYnkgcGFzc2luZworICAvLyB0cnVlIGFz
IHRoZSAzcmQgYXJndW1lbnQgb2YgQ2hlY2tNYXlMb2FkLCBzaW5jZSB3ZSB3YW50CiAgIC8vIHRv
IGFsbG93IGV4dGVybmFsIHJlc291cmNlcyBmcm9tIGRhdGEgVVJJcyByZWdhcmRsZXNzIG9mIHRo
ZSBkaWZmZXJlbmNlCiAgIC8vIGluIFVSSSBzY2hlbWUuCi0gIGJvb2wgZG9lc0luaGVyaXRTZWN1
cml0eUNvbnRleHQ7Ci0gIHJ2ID0KLSAgICBOU19VUklDaGFpbkhhc0ZsYWdzKGFVUkksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBuc0lQcm90b2NvbEhhbmRsZXI6OlVSSV9JTkhFUklUU19TRUNV
UklUWV9DT05URVhULAotICAgICAgICAgICAgICAgICAgICAgICAgJmRvZXNJbmhlcml0U2VjdXJp
dHlDb250ZXh0KTsKLSAgaWYgKE5TX0ZBSUxFRChydikgfHwgIWRvZXNJbmhlcml0U2VjdXJpdHlD
b250ZXh0KSB7Ci0gICAgcnYgPSByZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQoYVVS
SSwgdHJ1ZSk7Ci0gICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKLSAgfQorICBydiA9IHJl
cXVlc3RpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJLCB0cnVlLCB0cnVlKTsKKyAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBQUkludDE2IHNob3VsZExvYWQgPSBuc0lDb250
ZW50UG9saWN5OjpBQ0NFUFQ7CiAgIHJ2ID0gTlNfQ2hlY2tDb250ZW50TG9hZFBvbGljeShuc0lD
b250ZW50UG9saWN5OjpUWVBFX09USEVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RpbmdQcmlu
Y2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVxdWVzdGluZ05vZGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbXB0eUNTdHJpbmcoKSwgLy9taW1l
IGd1ZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc251bGwsICAgICAgICAg
Ly9leHRyYQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc1hNTEh0dHBSZXF1ZXN0LmNw
cCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNYTUxIdHRwUmVxdWVzdC5jcHAKLS0tIGEvY29udGVudC9i
YXNlL3NyYy9uc1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zWE1M
SHR0cFJlcXVlc3QuY3BwCkBAIC0xNzQ0LDI4ICsxNzQ0LDE5IEBAIG5zWE1MSHR0cFJlcXVlc3Q6
OklzU3lzdGVtWEhSKCkKIG5zcmVzdWx0CiBuc1hNTEh0dHBSZXF1ZXN0OjpDaGVja0NoYW5uZWxG
b3JDcm9zc1NpdGVSZXF1ZXN0KG5zSUNoYW5uZWwqIGFDaGFubmVsKQogewogICAvLyBGaXJzdCBj
aGVjayBpZiBjcm9zcy1zaXRlIHJlcXVlc3RzIGFyZSBlbmFibGVkLi4uCiAgIGlmIChJc1N5c3Rl
bVhIUigpKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKLSAgLy8gLi4ub3IgaWYgdGhpcyBp
cyBhIHNhbWUtb3JpZ2luIHJlcXVlc3QuCi0gIGlmIChuc0NvbnRlbnRVdGlsczo6Q2hlY2tNYXlM
b2FkKG1QcmluY2lwYWwsIGFDaGFubmVsKSkgewotICAgIHJldHVybiBOU19PSzsKLSAgfQotCi0g
IC8vIGV4ZW1wdCBkYXRhIFVSSXMgZnJvbSB0aGUgc2FtZSBvcmlnaW4gY2hlY2suCi0gIG5zQ09N
UHRyPG5zSVVSST4gY2hhbm5lbFVSSTsKLSAgYm9vbCBkYXRhU2NoZW1lID0gZmFsc2U7Ci0gIGlm
IChOU19TVUNDRUVERUQoTlNfR2V0RmluYWxDaGFubmVsVVJJKGFDaGFubmVsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhjaGFubmVsVVJJ
KSkpICYmCi0gICAgICBOU19TVUNDRUVERUQoY2hhbm5lbFVSSS0+U2NoZW1lSXMoImRhdGEiLCAm
ZGF0YVNjaGVtZSkpICYmCi0gICAgICBkYXRhU2NoZW1lKSB7CisgIC8vIElmIHRoaXMgaXMgYSBz
YW1lLW9yaWdpbiByZXF1ZXN0IG9yIHRoZSBjaGFubmVsJ3MgVVJJIGluaGVyaXRzCisgIC8vIGl0
cyBwcmluY2lwYWwsIGl0J3MgYWxsb3dlZC4KKyAgaWYgKG5zQ29udGVudFV0aWxzOjpDaGVja01h
eUxvYWQobVByaW5jaXBhbCwgYUNoYW5uZWwsIHRydWUpKSB7CiAgICAgcmV0dXJuIE5TX09LOwog
ICB9CiAKICAgLy8gVGhpcyBpcyBhIGNyb3NzLXNpdGUgcmVxdWVzdAogICBtU3RhdGUgfD0gWE1M
X0hUVFBfUkVRVUVTVF9VU0VfWFNJVEVfQUM7CiAKICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBk
byBhIHByZWZsaWdodCByZXF1ZXN0LgogICBuc0NPTVB0cjxuc0lIdHRwQ2hhbm5lbD4gaHR0cENo
YW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShhQ2hhbm5lbCk7CmRpZmYgLS1naXQgYS9jb250ZW50
L3hibC9zcmMvbnNYQkxTZXJ2aWNlLmNwcCBiL2NvbnRlbnQveGJsL3NyYy9uc1hCTFNlcnZpY2Uu
Y3BwCi0tLSBhL2NvbnRlbnQveGJsL3NyYy9uc1hCTFNlcnZpY2UuY3BwCisrKyBiL2NvbnRlbnQv
eGJsL3NyYy9uc1hCTFNlcnZpY2UuY3BwCkBAIC05NzcsMTcgKzk3NywxNyBAQCBuc1hCTFNlcnZp
Y2U6OkxvYWRCaW5kaW5nRG9jdW1lbnRJbmZvKG5zCiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYs
IE5TX0VSUk9SX1hCTF9CTE9DS0VEKTsKIAogICAgIGlmICghSXNTeXN0ZW1PckNocm9tZVVSTFBy
aW5jaXBhbChhT3JpZ2luUHJpbmNpcGFsKSkgewogICAgICAgLy8gQWxzbyBtYWtlIHN1cmUgdGhh
dCB3ZSdyZSBzYW1lLW9yaWdpbiB3aXRoIHRoZSBib3VuZCBkb2N1bWVudAogICAgICAgLy8gZXhj
ZXB0IGlmIHRoZSBzdHlsZXNoZWV0IGhhcyB0aGUgc3lzdGVtIHByaW5jaXBhbC4KICAgICAgIGlm
ICghKGdBbGxvd0RhdGFVUklzICYmIFNjaGVtZUlzKGFCaW5kaW5nVVJJLCAiZGF0YSIpKSAmJgog
ICAgICAgICAgICFTY2hlbWVJcyhhQmluZGluZ1VSSSwgImNocm9tZSIpKSB7CiAgICAgICAgIHJ2
ID0gYUJvdW5kRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+Q2hlY2tNYXlMb2FkKGFCaW5kaW5n
VVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ1ZSwgZmFsc2UpOwogICAgICAgICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgTlNfRVJST1JfWEJMX0JMT0NLRUQpOwogICAgICAgfQogCiAgICAgICAvLyBGaW5hbGx5
IGNoZWNrIGlmIHRoaXMgZG9jdW1lbnQgaXMgYWxsb3dlZCB0byB1c2UgWEJMIGF0IGFsbC4KICAg
ICAgIE5TX0VOU1VSRV9UUlVFKGFCb3VuZERvY3VtZW50LT5BbGxvd1hVTFhCTCgpLAogICAgICAg
ICAgICAgICAgICAgICAgTlNfRVJST1JfWEJMX0JMT0NLRUQpOwogICAgIH0KICAgfQpkaWZmIC0t
Z2l0IGEvY29udGVudC94bWwvZG9jdW1lbnQvc3JjL25zWE1MRG9jdW1lbnQuY3BwIGIvY29udGVu
dC94bWwvZG9jdW1lbnQvc3JjL25zWE1MRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQveG1sL2Rv
Y3VtZW50L3NyYy9uc1hNTERvY3VtZW50LmNwcAorKysgYi9jb250ZW50L3htbC9kb2N1bWVudC9z
cmMvbnNYTUxEb2N1bWVudC5jcHAKQEAgLTM2MiwxNyArMzYyLDE3IEBAIG5zWE1MRG9jdW1lbnQ6
OkxvYWQoY29uc3QgbnNBU3RyaW5nJiBhVXIKICAgLy8gdGhhdCB3ZSBkb24ndCBlbmQgdXAgaW4g
YSBjYXNlIHdoZXJlIGNvZGUgd2l0aCBlbGV2YXRlZCBwcml2aWxlZ2VzIGlzCiAgIC8vIGNhbGxp
bmcgdXMgYW5kIGNoYW5naW5nIHRoZSBwcmluY2lwYWwgb2YgdGhpcyBkb2N1bWVudC4KIAogICAv
LyBFbmZvcmNlIHNhbWUtb3JpZ2luIGV2ZW4gZm9yIGNocm9tZSBsb2FkZXJzIHRvIGF2b2lkIHNv
bWVvbmUgYWNjaWRlbnRhbGx5CiAgIC8vIHVzaW5nIGEgZG9jdW1lbnQgdGhhdCBjb250ZW50IGhh
cyBhIHJlZmVyZW5jZSB0byBhbmQgdHVybiB0aGF0IGludG8gYQogICAvLyBjaHJvbWUgZG9jdW1l
bnQuCiAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gcHJpbmNpcGFsID0gTm9kZVByaW5jaXBhbCgp
OwogICBpZiAoIW5zQ29udGVudFV0aWxzOjpJc1N5c3RlbVByaW5jaXBhbChwcmluY2lwYWwpKSB7
Ci0gICAgcnYgPSBwcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIGZhbHNlKTsKKyAgICBydiA9
IHByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UsIGZhbHNlKTsKICAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgUFJJbnQxNiBzaG91bGRMb2FkID0gbnNJQ29udGVu
dFBvbGljeTo6QUNDRVBUOwogICAgIHJ2ID0gTlNfQ2hlY2tDb250ZW50TG9hZFBvbGljeShuc0lD
b250ZW50UG9saWN5OjpUWVBFX1hNTEhUVFBSRVFVRVNULAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
aW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGluZ0RvYyA/
IGNhbGxpbmdEb2MuZ2V0KCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PG5zSURvY3VtZW50Kj4odGhpcyksCmRpZmYgLS1naXQgYS9jb250ZW50L3h1
bC9kb2N1bWVudC9zcmMvbnNYVUxEb2N1bWVudC5jcHAgYi9jb250ZW50L3h1bC9kb2N1bWVudC9z
cmMvbnNYVUxEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC94dWwvZG9jdW1lbnQvc3JjL25zWFVM
RG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQveHVsL2RvY3VtZW50L3NyYy9uc1hVTERvY3VtZW50
LmNwcApAQCAtMjcwMCwxNyArMjcwMCwxNyBAQCBuc1hVTERvY3VtZW50OjpMb2FkT3ZlcmxheUlu
dGVybmFsKG5zSVVSCiAKICAgICAvLyBDaHJvbWUgZG9jdW1lbnRzIGFyZSBhbGxvd2VkIHRvIGxv
YWQgb3ZlcmxheXMgZnJvbSBhbnl3aGVyZS4KICAgICAvLyBJbiBhbGwgb3RoZXIgY2FzZXMsIHRo
ZSBvdmVybGF5IGlzIG9ubHkgYWxsb3dlZCB0byBsb2FkIGlmCiAgICAgLy8gdGhlIG1hc3RlciBk
b2N1bWVudCBhbmQgcHJvdG90eXBlIGRvY3VtZW50IGhhdmUgdGhlIHNhbWUgb3JpZ2luLgogCiAg
ICAgYm9vbCBkb2N1bWVudElzQ2hyb21lID0gSXNDaHJvbWVVUkkobURvY3VtZW50VVJJKTsKICAg
ICBpZiAoIWRvY3VtZW50SXNDaHJvbWUpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIGFs
bG93ZWQgdG8gbG9hZCB0aGlzIG92ZXJsYXkuCi0gICAgICAgIHJ2ID0gTm9kZVByaW5jaXBhbCgp
LT5DaGVja01heUxvYWQoYVVSSSwgdHJ1ZSk7CisgICAgICAgIHJ2ID0gTm9kZVByaW5jaXBhbCgp
LT5DaGVja01heUxvYWQoYVVSSSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICBpZiAoTlNfRkFJTEVE
KHJ2KSkgewogICAgICAgICAgICAgKmFGYWlsdXJlRnJvbUNvbnRlbnQgPSB0cnVlOwogICAgICAg
ICAgICAgcmV0dXJuIHJ2OwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTG9vayBpbiB0aGUg
cHJvdG90eXBlIGNhY2hlIGZvciB0aGUgcHJvdG90eXBlIGRvY3VtZW50IHdpdGgKICAgICAvLyB0
aGUgc3BlY2lmaWVkIG92ZXJsYXkgVVJJLiBPbmx5IHVzZSB0aGUgY2FjaGUgaWYgdGhlIGNvbnRh
aW5pbmcKZGlmZiAtLWdpdCBhL2NvbnRlbnQveHVsL3RlbXBsYXRlcy9zcmMvbnNYVUxUZW1wbGF0
ZUJ1aWxkZXIuY3BwIGIvY29udGVudC94dWwvdGVtcGxhdGVzL3NyYy9uc1hVTFRlbXBsYXRlQnVp
bGRlci5jcHAKLS0tIGEvY29udGVudC94dWwvdGVtcGxhdGVzL3NyYy9uc1hVTFRlbXBsYXRlQnVp
bGRlci5jcHAKKysrIGIvY29udGVudC94dWwvdGVtcGxhdGVzL3NyYy9uc1hVTFRlbXBsYXRlQnVp
bGRlci5jcHAKQEAgLTEzNzIsMTcgKzEzNzIsMTcgQEAgbnNYVUxUZW1wbGF0ZUJ1aWxkZXI6Okxv
YWREYXRhU291cmNlVXJscwogCiAgICAgICAgIG5zQ09NUHRyPG5zSVVSST4gdXJpOwogICAgICAg
ICBydiA9IE5TX05ld1VSSShnZXR0ZXJfQWRkUmVmcyh1cmkpLCB1cmlTdHIpOwogICAgICAgICBp
ZiAoTlNfRkFJTEVEKHJ2KSB8fCAhdXJpKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5lY2tv
IHdpbGwgYmFyZiBpZiBvdXIgVVJJIGlzIHdlaXJkCiAKICAgICAgICAgLy8gZG9uJ3QgYWRkIHRo
ZSB1cmkgdG8gdGhlIGxpc3QgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCBhbGxvd2VkIHRvCiAgICAg
ICAgIC8vIGxvYWQgaXQKLSAgICAgICAgaWYgKCFpc1RydXN0ZWQgJiYgTlNfRkFJTEVEKGRvY1By
aW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgdHJ1ZSkpKQorICAgICAgICBpZiAoIWlzVHJ1c3Rl
ZCAmJiBOU19GQUlMRUQoZG9jUHJpbmNpcGFsLT5DaGVja01heUxvYWQodXJpLCB0cnVlLCBmYWxz
ZSkpKQogICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHVyaUxpc3QtPkFwcGVuZEVsZW1l
bnQodXJpLCBmYWxzZSk7CiAgICAgfQogCiAgICAgbnNDT01QdHI8bnNJRE9NTm9kZT4gcm9vdE5v
ZGUgPSBkb19RdWVyeUludGVyZmFjZShtUm9vdCk7CiAgICAgcnYgPSBtUXVlcnlQcm9jZXNzb3It
PkdldERhdGFzb3VyY2UodXJpTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByb290Tm9kZSwKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5j
cHAgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNE
b2NTaGVsbC5jcHAKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcApAQCAtOTg4OSwx
NyArOTg4OSwxNyBAQCBuc0RvY1NoZWxsOjpBZGRTdGF0ZShuc0lWYXJpYW50ICphRGF0YSwgCiAK
ICAgICAgICAgICAgIGlmICghZG9jU2NyaXB0T2JqKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gcHJpbmNpcGFsID0gZG9jU2NyaXB0T2JqLT5HZXRQcmlu
Y2lwYWwoKTsKIAogICAgICAgICAgICAgaWYgKCFwcmluY2lwYWwgfHwKLSAgICAgICAgICAgICAg
ICBOU19GQUlMRUQocHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJLCB0cnVlKSkpIHsKKyAg
ICAgICAgICAgICAgICBOU19GQUlMRUQocHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJLCB0
cnVlLCBmYWxzZSkpKSB7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NF
Q1VSSVRZX0VSUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChtQ3Vy
cmVudFVSSSkgewogICAgICAgICAgICAgbUN1cnJlbnRVUkktPkVxdWFscyhuZXdVUkksICZlcXVh
bFVSSXMpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kb20vd29ya2Vycy9TY3JpcHRMb2FkZXIu
Y3BwIGIvZG9tL3dvcmtlcnMvU2NyaXB0TG9hZGVyLmNwcAotLS0gYS9kb20vd29ya2Vycy9TY3Jp
cHRMb2FkZXIuY3BwCisrKyBiL2RvbS93b3JrZXJzL1NjcmlwdExvYWRlci5jcHAKQEAgLTMyOSwy
MSArMzI5LDIyIEBAIHB1YmxpYzoKICAgICAgIC8vIElmIHRoaXMgc2NyaXB0IGxvYWRlciBpcyBi
ZWluZyB1c2VkIHRvIG1ha2UgYSBuZXcgd29ya2VyIHRoZW4gd2UgbmVlZAogICAgICAgLy8gdG8g
ZG8gYSBzYW1lLW9yaWdpbiBjaGVjay4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGxv
YWQgd2l0aCB0aGUKICAgICAgIC8vIHNlY3VyaXR5IG1hbmFnZXIuCiAgICAgICBpZiAobUlzV29y
a2VyU2NyaXB0KSB7CiAgICAgICAgIG5zQ1N0cmluZyBzY2hlbWU7CiAgICAgICAgIHJ2ID0gdXJp
LT5HZXRTY2hlbWUoc2NoZW1lKTsKICAgICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsK
IAotICAgICAgICAvLyBXZSBleGVtcHQgZGF0YSBVUkxzIGZyb20gdGhlIHNhbWUgb3JpZ2luIGNo
ZWNrLgotICAgICAgICBpZiAoIXNjaGVtZS5FcXVhbHNMaXRlcmFsKCJkYXRhIikpIHsKLSAgICAg
ICAgICBydiA9IHByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UpOwotICAgICAgICAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gV2UgcGFz
cyB0cnVlIGFzIHRoZSAzcmQgYXJndW1lbnQgdG8gY2hlY2tNYXlMb2FkIGhlcmUuCisgICAgICAg
IC8vIFRoaXMgYWxsb3dzIHdvcmtlcnMgaW4gc2FuZGJveGVkIGRvY3VtZW50cyB0byBsb2FkIGRh
dGEgVVJMcworICAgICAgICAvLyAoYW5kIG90aGVyIFVSTHMgdGhhdCBpbmhlcml0IHRoZWlyIHBy
aW5jaXBhbCBmcm9tIHRoZWlyCisgICAgICAgIC8vIGNyZWF0b3IuKQorICAgICAgICBydiA9IHBy
aW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UsIHRydWUpOworICAgICAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAgIHJ2ID0g
c2VjTWFuLT5DaGVja0xvYWRVUklXaXRoUHJpbmNpcGFsKHByaW5jaXBhbCwgdXJpLCAwKTsKICAg
ICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgICAgIH0KIAogICAgICAgLy8gV2Ug
bmVlZCB0byBrbm93IHdoaWNoIGluZGV4IHdlJ3JlIG9uIGluIE9uU3RyZWFtQ29tcGxldGUgc28g
d2Uga25vdwogICAgICAgLy8gd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQuCkBAIC01MTYsMTkgKzUx
NywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9CQURfVVJJOwog
ICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlICB7CiAgICAgICAgIG5zQ1N0cmluZyBzY2hl
bWU7CiAgICAgICAgIHJ2ID0gZmluYWxVUkktPkdldFNjaGVtZShzY2hlbWUpOwogICAgICAgICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCi0gICAgICAgIC8vIFdlIGV4ZW1wdCBkYXRhIHVy
bHMgYWdhaW4uCi0gICAgICAgIGlmICghc2NoZW1lLkVxdWFsc0xpdGVyYWwoImRhdGEiKSAmJgot
ICAgICAgICAgICAgTlNfRkFJTEVEKGxvYWRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChmaW5hbFVS
SSwgZmFsc2UpKSkgeworICAgICAgICAvLyBXZSBleGVtcHQgZGF0YSB1cmxzIGFuZCBvdGhlciBV
UkkncyB0aGF0IGluaGVyaXQgdGhlaXIKKyAgICAgICAgLy8gcHJpbmNpcGFsIGFnYWluLgorICAg
ICAgICBpZiAoTlNfRkFJTEVEKGxvYWRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChmaW5hbFVSSSwg
ZmFsc2UsIHRydWUpKSkgewogICAgICAgICAgIHJldHVybiBOU19FUlJPUl9ET01fQkFEX1VSSTsK
ICAgICAgICAgfQogICAgICAgfQogCiAgICAgICBtV29ya2VyUHJpdmF0ZS0+U2V0UHJpbmNpcGFs
KGNoYW5uZWxQcmluY2lwYWwpOwogICAgIH0KIAogICAgIHJldHVybiBOU19PSzsKZGlmZiAtLWdp
dCBhL2xheW91dC9zdHlsZS9Mb2FkZXIuY3BwIGIvbGF5b3V0L3N0eWxlL0xvYWRlci5jcHAKLS0t
IGEvbGF5b3V0L3N0eWxlL0xvYWRlci5jcHAKKysrIGIvbGF5b3V0L3N0eWxlL0xvYWRlci5jcHAK
QEAgLTE1NjgsMTcgKzE1NjgsMTcgQEAgTG9hZGVyOjpMb2FkU2hlZXQoU2hlZXRMb2FkRGF0YSog
YUxvYWREYQogICBpZiAoYUxvYWREYXRhLT5tTG9hZGVyUHJpbmNpcGFsKSB7CiAgICAgYm9vbCBp
bmhlcml0OwogICAgIHJ2ID0gTlNfVVJJQ2hhaW5IYXNGbGFncyhhTG9hZERhdGEtPm1VUkksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByb3RvY29sSGFuZGxlcjo6VVJJX0lOSEVS
SVRTX1NFQ1VSSVRZX0NPTlRFWFQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmhl
cml0KTsKICAgICBpZiAoKE5TX1NVQ0NFRURFRChydikgJiYgaW5oZXJpdCkgfHwKICAgICAgICAg
KG5zQ29udGVudFV0aWxzOjpVUklJc0xvY2FsRmlsZShhTG9hZERhdGEtPm1VUkkpICYmCiAgICAg
ICAgICBOU19TVUNDRUVERUQoYUxvYWREYXRhLT5tTG9hZGVyUHJpbmNpcGFsLT4KLSAgICAgICAg
ICAgICAgICAgICAgICBDaGVja01heUxvYWQoYUxvYWREYXRhLT5tVVJJLCBmYWxzZSkpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgIENoZWNrTWF5TG9hZChhTG9hZERhdGEtPm1VUkksIGZhbHNl
LCBmYWxzZSkpKSkgewogICAgICAgY2hhbm5lbC0+U2V0T3duZXIoYUxvYWREYXRhLT5tTG9hZGVy
UHJpbmNpcGFsKTsKICAgICB9CiAgIH0KIAogICAvLyBXZSBkb24ndCBoYXZlIHRvIGhvbGQgb24g
dG8gdGhlIHN0cmVhbSBsb2FkZXIuICBUaGUgb3duZXJzaGlwCiAgIC8vIG1vZGVsIGlzOiBOZWNr
byBvd25zIHRoZSBzdHJlYW0gbG9hZGVyLCB3aGljaCBvd25zIHRoZSBsb2FkIGRhdGEsCiAgIC8v
IHdoaWNoIG93bnMgdXMKICAgbnNDT01QdHI8bnNJVW5pY2hhclN0cmVhbUxvYWRlcj4gc3RyZWFt
TG9hZGVyOwpkaWZmIC0tZ2l0IGEvcmRmL2Jhc2Uvc3JjL25zUkRGWE1MRGF0YVNvdXJjZS5jcHAg
Yi9yZGYvYmFzZS9zcmMvbnNSREZYTUxEYXRhU291cmNlLmNwcAotLS0gYS9yZGYvYmFzZS9zcmMv
bnNSREZYTUxEYXRhU291cmNlLmNwcAorKysgYi9yZGYvYmFzZS9zcmMvbnNSREZYTUxEYXRhU291
cmNlLmNwcApAQCAtOTE1LDE5ICs5MTUsMTkgQEAgUkRGWE1MRGF0YVNvdXJjZUltcGw6OkFzeW5j
T25DaGFubmVsUmVkaQogCiAgICAgbnNDT01QdHI8bnNJVVJJPiBuZXdVUkk7CiAgICAgYU5ld0No
YW5uZWwtPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhuZXdVUkkpKTsKICAgICBuc0NPTVB0cjxuc0lV
Ukk+IG5ld09yaWdpbmFsVVJJOwogICAgIGFOZXdDaGFubmVsLT5HZXRPcmlnaW5hbFVSSShnZXR0
ZXJfQWRkUmVmcyhuZXdPcmlnaW5hbFVSSSkpOwogCiAgICAgTlNfRU5TVVJFX1NUQVRFKG9sZFBy
aW5jaXBhbCAmJiBuZXdVUkkgJiYgbmV3T3JpZ2luYWxVUkkpOwogCi0gICAgcnYgPSBvbGRQcmlu
Y2lwYWwtPkNoZWNrTWF5TG9hZChuZXdVUkksIGZhbHNlKTsKKyAgICBydiA9IG9sZFByaW5jaXBh
bC0+Q2hlY2tNYXlMb2FkKG5ld1VSSSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAoTlNfU1VDQ0VF
REVEKHJ2KSAmJiBuZXdPcmlnaW5hbFVSSSAhPSBuZXdVUkkpIHsKLSAgICAgICAgcnYgPSBvbGRQ
cmluY2lwYWwtPkNoZWNrTWF5TG9hZChuZXdPcmlnaW5hbFVSSSwgZmFsc2UpOworICAgICAgICBy
diA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld09yaWdpbmFsVVJJLCBmYWxzZSwgZmFs
c2UpOwogICAgIH0KIAogICAgIGlmIChOU19GQUlMRUQocnYpKQogICAgICAgICByZXR1cm4gcnY7
CiAKICAgICBjYi0+T25SZWRpcmVjdFZlcmlmeUNhbGxiYWNrKE5TX09LKTsKICAgICByZXR1cm4g
TlNfT0s7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>621221</attachid>
            <date>2012-05-04 16:49:03 -0700</date>
            <delta_ts>2012-05-15 15:32:19 -0700</delta_ts>
            <desc>iframe sandbox tests - general v6</desc>
            <filename>iframe_sandbox_tests_general</filename>
            <type>text/plain</type>
            <size>17155</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZWNlMzFiMDJjMjcxZjMwZDIxMjNkYmRhNThh
Mzg1MWNkOGFmOWE5MAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KQEAgLTI5MSwxNiArMjkxLDI3IEBAIF9URVNUX0ZJTEVTID0gXAogCQl0ZXN0X2xpX2F0
dHJpYnV0ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9vbF9hdHRyaWJ1dGVzX3JlZmxlY3Rp
b24uaHRtbCBcCiAJCXRlc3RfYnVnNjUxOTU2Lmh0bWwgXAogCQl0ZXN0X2J1ZzY5NDUwMy5odG1s
IFwKIAkJdGVzdF9vYmplY3RfcGx1Z2luX25hdi5odG1sIFwKIAkJdGVzdF9idWc3NDIwMzAuaHRt
bCBcCiAJCXRlc3RfYnVnNzQyNTQ5Lmh0bWwgXAogCQl0ZXN0X2J1Zzc0NTY4NS5odG1sIFwKKwkJ
dGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94
X2NfaWYxLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgXAorCQlmaWxl
X2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwgXAorCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2Zvcm1fZmFpbC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX3Bh
c3MuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNzLmpzIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9m
YWlsLmpzIFwKIAkJdGVzdF9pZnJhbWVfc2FuZGJveF93b3JrZXJzLmh0bWwgXAogCQlmaWxlX2lm
cmFtZV9zYW5kYm94X2dfaWYxLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X3dvcmtlci5q
cyBcCiAJCSQoTlVMTCkKIAogX0JST1dTRVJfVEVTVF9GSUxFUyA9IFwKIAkJYnJvd3Nlcl9idWc2
NDk3NzguanMgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sIFwKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbApAQCAtMCwwICsxLDM1IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3Njcmlw
dD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3Rz
L1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij4KKyAgZnVuY3Rpb24gb2socmVzdWx0LCBkZXNjKSB7CisgICAgd2luZG93LnBhcmVu
dC5wb3N0TWVzc2FnZSh7b2s6IHJlc3VsdCwgZGVzYzogZGVzY30sICIqIik7CisgIH0KKworICBm
dW5jdGlvbiBkb1N0dWZmKCkgeworICAgIG9rKHRydWUsICJkb2N1bWVudHMgc2FuZGJveGVkIHdp
dGggYWxsb3ctc2NyaXB0cyBzaG91bGQgYmUgYWJsZSB0byBydW4gaW5saW5lIHNjcmlwdHMiKTsK
KworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhX2Zvcm0nKS5zdWJtaXQoKTsKKworICAg
IC8vIHRyaWdnZXIgdGhlIGphdmFzY3JpcHQ6IHVybCB0ZXN0CisgICAgc2VuZE1vdXNlRXZlbnQo
e3R5cGU6J2NsaWNrJ30sICdhX2xpbmsnKTsKKyAgfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0n
ZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNzLmpzJz48L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0nb2so
dHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBh
YmxlIHRvIHJ1biBzY3JpcHQgZnJvbSBldmVudCBsaXN0ZW5lcnMiKTtkb1N0dWZmKCk7Jz4KKyAg
SSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMiCisKKyAgPGZvcm0gbWV0aG9k
PSJnZXQiIGFjdGlvbj0iZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX2ZhaWwuaHRtbCIgaWQ9ImFf
Zm9ybSI+CisgICAgRmlyc3QgbmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZpcnN0bmFt
ZSI+CisgICAgTGFzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibGFzdG5hbWUiPgor
ICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG9uY2xpY2s9ImRvU3VibWl0KCkiIGlkPSJhX2J1dHRv
biI+CisgIDwvZm9ybT4KKworICA8YSBocmVmID0gJ2phdmFzY3JpcHQ6b2sodHJ1ZSwgImRvY3Vt
ZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1biBz
Y3JpcHQgZnJvbSBqYXZhc2NyaXB0OiBVUkxzIik7JyBpZD0nYV9saW5rJz5jbGljayBtZTwvYT4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfY19pZjIuaHRtbApAQCAtMCwwICsxLDIzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1
ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3Nz
IiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorCis8L2hlYWQ+Cis8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVzYykgewor
ICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiByZXN1bHQsIGRlc2M6IG1lc3NhZ2V9
LCAiKiIpOworICB9CisKKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICBvayhmYWxzZSwgImRv
Y3VtZW50cyBzYW5kYm94ZWQgd2l0aG91dCBhbGxvdy1zY3JpcHRzIHNob3VsZCBOT1QgYmUgYWJs
ZSB0byBydW4gaW5saW5lIHNjcmlwdHMiKTsKKyAgfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0n
ZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzJz48L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0nd2lu
ZG93LnBhcmVudC5wb3N0bWVzc2FnZSh7b2s6IGZhbHNlLCBkZXNjOiAiZG9jdW1lbnRzIHNhbmRi
b3hlZCB3aXRob3V0IGFsbG93LXNjcmlwdHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIHJ1biBzY3Jp
cHQgZnJvbSBldmVudCBoYW5kbGVycyJ9LCAiKiIpO2RvU3R1ZmYoKTsnPgorICBJIGFtIHNhbmRi
b3hlZCB3aXRoIG5vIHBlcm1pc3Npb25zCisgIDxpbWcgc3JjPSJhYm91dDpibGFuayIgb25lcnJv
cj0nb2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2NyaXB0cyBz
aG91bGQgTk9UIGJlIGFibGUgdG8gcnVuIHNjcmlwdCBmcm9tIGV2ZW50IGhhbmRsZXJzIik7Jyk+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0t
LSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2NfaWYzLmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBC
dWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
L3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+CisgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3Qu
Y3NzIi8+CisKKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgZnVu
Y3Rpb24gZG9TdHVmZigpIHsKKyAgICAvLyB0cnkgYW5kIHN1Ym1pdCB0aGUgZm9ybSAtIHRoaXMg
c2hvdWxkIHN1Y2NlZWQKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYV9mb3JtJykuc3Vi
bWl0KCk7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFt
IHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1mb3JtcyIKKworICA8Zm9y
bSBtZXRob2Q9ImdldCIgYWN0aW9uPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1s
IiBpZD0iYV9mb3JtIj4KKyAgICBGaXJzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0i
Zmlyc3RuYW1lIj4KKyAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYXN0
bmFtZSI+CisgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgb25jbGljaz0iZG9TdWJtaXQoKSIgaWQ9
ImFfYnV0dG9uIj4KKyAgPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5odG1sCkBAIC0wLDAgKzEsNDQgQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwv
c2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIv
dGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVzYykgeworICAgIHdpbmRv
dy5wYXJlbnQub2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpOworICB9CisKKyAgZnVuY3Rpb24gZG9T
dHVmZigpIHsKKyAgICAvLyB0cnkgdG8gb3BlbiBhIG5ldyB3aW5kb3cgdmlhIHRhcmdldD0iX2Js
YW5rIiwgd2luZG93Lm9wZW4oKSwgYW5kIHNob3dNb2RhbERpYWxvZygpCisgICAgLy8gdGhlIHdp
bmRvdyB3ZSB0cnkgdG8gb3BlbiBjbG9zZXMgaXRzZWxmIG9uY2UgaXQgb3BlbnMKKyAgICBzZW5k
TW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ3RhcmdldF9ibGFuaycpOworCisgICAgdmFyIHRo
cmV3ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgIHdpbmRvdy5vcGVuKCJhYm91dDpibGFuayIp
OworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICB0aHJldyA9IHRydWU7CisgICAgfQorICAg
IAorICAgIG9rKHRocmV3LCAid2luZG93Lm9wZW4gdGhyZXcgYSBKUyBleGNlcHRpb24gYW5kIHdh
cyBub3QgYWxsb3dlZCIpOworCisgICAgdGhyZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAg
d2luZG93LnNob3dNb2RhbERpYWxvZygiYWJvdXQ6YmxhbmsiKTsKKyAgICB9IGNhdGNoKGVycm9y
KSB7CisgICAgICB0aHJldyA9IHRydWU7CisgICAgfQorICAgIAorICAgIG9rKHRocmV3LCAid2lu
ZG93LnNob3dNb2RhbERpYWxvZyB0aHJldyBhIEpTIGV4Y2VwdGlvbiBhbmQgd2FzIG5vdCBhbGxv
d2VkIik7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFt
IHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIKKwor
ICA8YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93X2ZhaWwuaHRtbCIgdGFy
Z2V0PSJfYmxhbmsiIGlkPSJ0YXJnZXRfYmxhbmsiPm9wZW4gd2luZG93PC9hPgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2NfaWY1Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfY19pZjUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxs
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lm
NS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4K
KyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwv
dGl0bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1w
bGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQi
IHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorCis8
L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJl
c3VsdCwgZGVzYykgeworICAgIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihyZXN1bHQsIGRlc2Mp
OworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBzYW5k
Ym94ZWQgYnV0IHdpdGggImFsbG93LXNhbWUtb3JpZ2luIgorCisgIDxhIGhyZWYgPSAnamF2YXNj
cmlwdDpvayhmYWxzZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aG91dCBhbGxvdy1zY3JpcHRz
IHNob3VsZCBub3QgYmUgYWJsZSB0byBydW4gc2NyaXB0IHdpdGggamF2YXNjcmlwdDogVVJMcyIp
OycgaWQ9J2FfbGluayc+Y2xpY2sgbWU8L2E+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZmFpbC5qcyBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMKQEAgLTAsMCArMSwxIEBACitvayhm
YWxzZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBOT1Qg
YmUgYWJsZSB0byBydW4gPHNjcmlwdCBzcmM9Li4uPiIpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9mb3JtX2ZhaWwuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9mb3JtX2ZhaWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9mb3JtX2ZhaWwuaHRtbApAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1
ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQi
IHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+CisgIDxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0
L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+CisKKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBz
aG91bGQgTk9UIGJlIGxvYWRlZCBieSBhIGZvcm0gc3VibWl0IGZyb20gYSBzYW5kYm94IHdpdGhv
dXQgJ2FsbG93LWZvcm1zJworPC9ib2R5PgorPC9odG1sPgorCis8c2NyaXB0PgorICBmdW5jdGlv
biBkb1N0dWZmKCkgeworICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiBmYWxzZSwg
ZGVzYzogImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aG91dCBhbGxvdy1mb3JtcyBzaG91bGQgTk9U
IGJlIGFibGUgdG8gc3VibWl0IGZvcm1zIn0sICIqIik7CisgIH0KKzwvc2NyaXB0PgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX3Bhc3MuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX3Bhc3MuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9mb3JtX3Bhc3MuaHRtbApAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRp
dGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0
aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9z
Y3JpcHQ+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90
ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+CisKKzxib2R5IG9uTG9hZD0iZG9T
dHVmZigpIj4KKyAgSSBzaG91bGQgYmUgbG9hZGVkIGJ5IGEgZm9ybSBzdWJtaXQgZnJvbSBhIHNh
bmRib3ggd2l0aCAnYWxsb3ctZm9ybXMnCis8L2JvZHk+Cis8L2h0bWw+CisKKzxzY3JpcHQ+Cisg
IGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6
IHRydWUsIGRlc2M6ICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctZm9ybXMgc2hvdWxk
IGJlIGFibGUgdG8gc3VibWl0IGZvcm1zIn0sICIqIik7CisgIH0KKzwvc2NyaXB0PgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWlsLmh0bWwgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93X2ZhaWwuaHRtbApAQCAt
MCwwICsxLDIxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8
c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRl
c3QvU2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlw
ZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+
CisKKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBzaG91bGQgTk9UIGJlIG9wZW5lZCBi
eSBhIHNhbmRib3hlZCBpZnJhbWUgdmlhIGFueSBtZXRob2QKKzwvYm9keT4KKzwvaHRtbD4KKwor
PHNjcmlwdD4KKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICBjb25zb2xlLmxvZygiZmlsZV9p
ZnJhbWVfc2FuZGJveF93aW5kb3dfb3Blbl9mYWlsLmh0bWwiKTsKKyAgICB3aW5kb3cub3BlbmVy
Lm9rKGZhbHNlLCAic2FuZGJveGVkIGRvY3VtZW50cyBzaG91bGQgTk9UIGJlIGFibGUgdG8gb3Bl
biB3aW5kb3dzIik7CisgICAgc2VsZi5jbG9zZSgpOworICB9Cis8L3NjcmlwdD4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X3Bhc3MuanMKQEAgLTAsMCArMSwxIEBACitvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3
aXRoIGFsbG93LXNjcmlwdHMgc2hvdWxkIGJlIGFibGUgdG8gcnVuIDxzY3JpcHQgc3JjPS4uLj4i
KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvdGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwKQEAgLTAsMCArMSwxMzYgQEAKKzwh
RE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzwhLS0NCitodHRwczovL2J1Z3ppbGxhLm1vemlsbGEu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQNCitJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRy
aWJ1dGUgZm9yIElGUkFNRXMgLSBnZW5lcmFsIHRlc3RzDQorLS0+DQorPGhlYWQ+DQorICA8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+
DQorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1Np
bXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+DQorICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3Njcmlw
dD4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0
cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxzY3JpcHQgdHlwZT0iYXBwbGlj
YXRpb24vamF2YXNjcmlwdCI+DQorLyoqIFRlc3QgZm9yIEJ1ZyAzNDE2MDQgLSBJbXBsZW1lbnQg
SFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMgLSBnZW5lcmFsIHRlc3RzICoqLw0K
Kw0KK1NpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0RmluaXNoKCk7DQorDQorLy8gYSBwb3N0TWVz
c2FnZSBoYW5kbGVyIHRoYXQgaXMgdXNlZCBieSBzYW5kYm94ZWQgaWZyYW1lcyB3aXRob3V0DQor
Ly8gJ2FsbG93LXNhbWUtb3JpZ2luJyB0byBjb21tdW5pY2F0ZSBwYXNzL2ZhaWwgYmFjayB0byB0
aGlzIG1haW4gcGFnZS4NCisvLyBpdCBleHBlY3RzIHRvIGJlIGNhbGxlZCB3aXRoIGFuIG9iamVj
dCBsaWtlIHtvazogdHJ1ZS9mYWxzZSwgZGVzYzoNCisvLyA8ZGVzY3JpcHRpb24gb2YgdGhlIHRl
c3Q+IHdoaWNoIGl0IHRoZW4gZm9yd2FyZHMgdG8gb2soKQ0KK3dpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTsNCisNCitmdW5jdGlvbiByZWNl
aXZlTWVzc2FnZShldmVudCkNCit7DQorICBva193cmFwcGVyKGV2ZW50LmRhdGEub2ssIGV2ZW50
LmRhdGEuZGVzYyk7DQorfQ0KKw0KK3ZhciBjb21wbGV0ZWRUZXN0cyA9IDA7DQordmFyIHBhc3Nl
ZFRlc3RzID0gMDsNCisNCitmdW5jdGlvbiBva193cmFwcGVyKHJlc3VsdCwgZGVzYykgew0KKyAg
b2socmVzdWx0LCBkZXNjKTsNCisNCisgIGNvbXBsZXRlZFRlc3RzKys7DQorDQorICBpZiAocmVz
dWx0KSB7DQorICAgIHBhc3NlZFRlc3RzKys7DQorICB9DQorDQorICBpZiAoY29tcGxldGVkVGVz
dHMgPT0gOSkgew0KKyAgICBpcyhwYXNzZWRUZXN0cywgOSwgIlRoZXJlIGFyZSA5IGdlbmVyYWwg
dGVzdHMgdGhhdCBzaG91bGQgcGFzcyIpOw0KKyAgICBTaW1wbGVUZXN0LmZpbmlzaCgpOw0KKyAg
fQ0KK30NCisNCitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAg
Ly8gMSkgdGVzdCB0aGF0IGlubGluZSBzY3JpcHRzICg8c2NyaXB0PikgY2FuIHJ1biBpbiBhbiBp
ZnJhbWUgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBmaWxl
X2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJykNCisN
CisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAyKSB0ZXN0IHRoYXQgPHNjcmlwdCBzcmM9Li4u
PiBjYW4gcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyINCisg
IC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3aGljaCBoYXMgJ2Fs
bG93LXNjcmlwdHMnKQ0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDMpIHRlc3QgdGhh
dCBzY3JpcHQgaW4gYW4gZXZlbnQgbGlzdGVuZXIgKGJvZHkgb25sb2FkKSBjYW4gcnVuIGluIGFu
IGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25lIGluIGZp
bGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnKQ0K
Kw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDQpIHRlc3QgdGhhdCBzY3JpcHQgaW4gYW4g
amF2YXNjcmlwdDp1cmwgY2FuIHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggImFsbG93
LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwg
d2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJykNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8g
NSkgdGVzdCB0aGF0IGlubGluZSBzY3JpcHRzIGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRi
b3hlZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94PScnKQ0KKw0KKyAgLy8gZmFpbHMg
aWYgYmFkDQorICAvLyA2KSB0ZXN0IHRoYXQgPHNjcmlwdCBzcmM9Li4uPiBjYW5ub3QgcnVuIGlu
IGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25l
IGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0nJykN
CisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gNykgdGVzdCB0aGF0IHNjcmlwdCBpbiBhbiBl
dmVudCBsaXN0ZW5lciAoYm9keSBvbmxvYWQpIGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRi
b3hlZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94PScnKQ0KKw0KKyAgLy8gZmFpbHMg
aWYgYmFkDQorICAvLyA4KSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFuIGV2ZW50IGxpc3RlbmVyIChp
bWcgb25lcnJvcikgY2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFs
bG93LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0
bWwgd2hpY2ggaGFzIHNhbmRib3g9JycpDQorICANCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8g
OSkgdGVzdCB0aGF0IHNjcmlwdCBpbiBhbiBqYXZhc2NyaXB0OnVybCBjYW5ub3QgcnVuIGluIGFu
IGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25lIGlu
IGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZl81Lmh0bWwgd2hpY2ggaGFzIHNhbmRib3g9J2FsbG93
LXNhbWUtb3JpZ2luJykNCisgIHZhciBpZl93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lm
XzUnKS5jb250ZW50V2luZG93Ow0KKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdh
X2xpbmsnLCBpZl93KTsNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAxMCkgdGVzdCB0
aGF0IGEgbmV3IGlmcmFtZSBoYXMgc2FuZGJveCBhdHRyaWJ1dGUNCisgIHZhciBpZnIgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsNCisgIG9rX3dyYXBwZXIoInNhbmRib3giIGlu
IGlmciwgImEgbmV3IGlmcmFtZSBzaG91bGQgaGF2ZSBhIHNhbmRib3ggYXR0cmlidXRlIik7DQor
DQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMTEpIHRlc3QgdGhhdCB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUncyBkZWZhdWx0IHZhbHVlIGlzIGFuIGVtcHR5IHN0cmluZw0KKyAgb2tfd3JhcHBl
cihpZnIuc2FuZGJveCA9PT0gIiIsICJkZWZhdWx0IHNhbmRib3ggYXR0cmlidXRlIHNob3VsZCBi
ZSBhbiBlbXB0eSBzdHJpbmciKTsNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAxMikg
dGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSB3aXRoICdhbGxvdy1mb3JtcycgY2FuIHN1Ym1p
dCBmb3Jtcw0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIHdo
aWNoIGhhcyAnYWxsb3ctZm9ybXMnIGFuZCAnYWxsb3ctc2NyaXB0cycpDQorDQorICAvLyBmYWls
cyBpZiBiYWQNCisgIC8vIDEzKSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGhvdXQg
J2FsbG93LWZvcm1zJyBjYW4gTk9UIHN1Ym1pdCBmb3Jtcw0KKyAgLy8gKGRvbmUgaW4gZmlsZV9p
ZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIG9ubHkgaGFzICdhbGxvdy1zY3JpcHRzJykN
CisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gMTQpIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBp
ZnJhbWUgY2FuJ3Qgb3BlbiBhIG5ldyB3aW5kb3cgdXNpbmcgdGhlIHRhcmdldC5hdHRyaWJ1dGUN
CisgIC8vIHRoaXMgaXMgZG9uZSB2aWEgZmlsZV9pZnJhbWVfY19pZjQuaHRtbCB3aGljaCBpcyBz
YW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYW5kICJhbGxvdy1zYW1lLW9yaWdpbiINCisg
IC8vIHRoZSB3aW5kb3cgaXQgYXR0ZW1wdHMgdG8gb3BlbiBjYWxscyB3aW5kb3cub3BlbmVyLm9r
KGZhbHNlLCAuLi4pIGFuZCBmaWxlX2lmcmFtZV9jX2lmNC5odG1sIGhhcyBhbiBvaygpDQorICAv
LyBmdW5jdGlvbiB0aGF0IGNhbGxzIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcg0KKw0KKyAgLy8g
cGFzc2VzIGlmIGdvb2QNCisgIC8vIDE1KSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNh
bid0IG9wZW4gYSBuZXcgd2luZG93IHVzaW5nIHdpbmRvdy5vcGVuDQorICAvLyB0aGlzIGlzIGRv
bmUgdmlhIGZpbGVfaWZyYW1lX2NfaWY0Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggImFs
bG93LXNjcmlwdHMiIGFuZCAiYWxsb3ctc2FtZS1vcmlnaW4iDQorICAvLyB0aGUgd2luZG93IGl0
IGF0dGVtcHRzIHRvIG9wZW4gY2FsbHMgd2luZG93Lm9wZW5lci5vayhmYWxzZSwgLi4uKSBhbmQg
ZmlsZV9pZnJhbWVfY19pZjQuaHRtbCBoYXMgYW4gb2soKQ0KKyAgLy8gZnVuY3Rpb24gdGhhdCBj
YWxscyB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXINCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQor
ICAvLyAxNikgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdp
bmRvdyB1c2luZyB3aW5kb3cuU2hvd01vZGFsRGlhbG9nDQorICAvLyB0aGlzIGlzIGRvbmUgdmlh
IGZpbGVfaWZyYW1lX2NfaWY0Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggImFsbG93LXNj
cmlwdHMiIGFuZCAiYWxsb3ctc2FtZS1vcmlnaW4iDQorICAvLyB0aGUgd2luZG93IGl0IGF0dGVt
cHRzIHRvIG9wZW4gY2FsbHMgd2luZG93Lm9wZW5lci5vayhmYWxzZSwgLi4uKSBhbmQgZmlsZV9p
ZnJhbWVfY19pZjQuaHRtbCBoYXMgYW4gb2soKQ0KKyAgLy8gZnVuY3Rpb24gdGhhdCBjYWxscyB3
aW5kb3cucGFyZW50Lm9rX3dyYXBwZXINCit9DQorDQorYWRkTG9hZEV2ZW50KGRvVGVzdCk7DQor
PC9zY3JpcHQ+DQorPGJvZHk+DQorPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vYnVn
emlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNCI+TW96aWxsYSBCdWcgMzQx
NjA0PC9hPiAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1Fcw0K
KzxwIGlkPSJkaXNwbGF5Ij48L3A+DQorPGRpdiBpZD0iY29udGVudCI+DQorPGlmcmFtZSBzYW5k
Ym94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMSIgc3JjPSJmaWxl
X2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJh
bWU+DQorPGlmcmFtZSBzYW5kYm94PSIiIGlkPSJpZl8yIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRi
b3hfY19pZjIuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1l
IHNhbmRib3g9ImFsbG93LWZvcm1zIGFsbG93LXNjcmlwdHMiIGlkPSJpZl8zIiBzcmM9ImZpbGVf
aWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFt
ZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXNjcmlwdHMiIGlk
PSJpZl80IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbCIgaGVpZ2h0PSIxMCIg
d2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2lu
IiBpZD0iaWZfNSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwiIGhlaWdodD0i
MTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPC9kaXY+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>624214</attachid>
            <date>2012-05-15 15:32:19 -0700</date>
            <delta_ts>2012-06-15 13:32:40 -0700</delta_ts>
            <desc>iframe sandbox tests - general v7</desc>
            <filename>iframe_sandbox_tests_general</filename>
            <type>text/plain</type>
            <size>21539</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOTQxZWI2OTBmNDg2MGZlYjI5OWRjYzA2MDY2
ZWNlMzk1NzJiN2M2MgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KCmRp
ZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250
ZW50VXRpbHMuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBA
IC02NTYxLDE3ICs2NTYxLDE3IEBAIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihu
c0lQcmkKICAgLy8gZmlsZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAgIC8vCiAgIC8vIElmIHRoaXMg
aXMgYSBmaWxlOiBsb2FkIG9wZW5lZCBmcm9tIGFub3RoZXIgZmlsZTogdGhlbiBpdCBtYXkgbmVl
ZAogICAvLyB0byBpbmhlcml0IHRoZSBvd25lciBmcm9tIHRoZSByZWZlcnJlciBzbyB0aGV5IGNh
biBzY3JpcHQgZWFjaCBvdGhlci4KICAgLy8gSWYgd2UgZG9uJ3Qgc2V0IHRoZSBvd25lciBleHBs
aWNpdGx5IHRoZW4gZWFjaCBmaWxlOiBnZXRzIGFuIG93bmVyCiAgIC8vIGJhc2VkIG9uIGl0cyBv
d24gY29kZWJhc2UgbGF0ZXIuCiAgIC8vCiAgIGlmIChVUklJc0xvY2FsRmlsZShhVVJJKSAmJiBh
TG9hZGluZ1ByaW5jaXBhbCAmJgotICAgICAgTlNfU1VDQ0VFREVEKGFMb2FkaW5nUHJpbmNpcGFs
LT5DaGVja01heUxvYWQoYVVSSSwgZmFsc2UpKSAmJgorICAgICAgTlNfU1VDQ0VFREVEKGFMb2Fk
aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQoYVVSSSwgZmFsc2UsIGZhbHNlKSkgJiYKICAgICAg
IC8vIE9uZSBtb3JlIGNoZWNrIGhlcmUuICBDaGVja01heUxvYWQgd2lsbCBhbHdheXMgcmV0dXJu
IHRydWUgZm9yIHRoZQogICAgICAgLy8gc3lzdGVtIHByaW5jaXBhbCwgYnV0IHdlIGRvIE5PVCB3
YW50IHRvIGluaGVyaXQgaW4gdGhhdCBjYXNlLgogICAgICAgIUlzU3lzdGVtUHJpbmNpcGFsKGFM
b2FkaW5nUHJpbmNpcGFsKSkgewogICAgIGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGluZ1ByaW5j
aXBhbCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICByZXR1cm4gZmFsc2U7CmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4K
QEAgLTI5MSwxNiArMjkxLDI4IEBAIF9URVNUX0ZJTEVTID0gXAogCQl0ZXN0X2xpX2F0dHJpYnV0
ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9vbF9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRt
bCBcCiAJCXRlc3RfYnVnNjUxOTU2Lmh0bWwgXAogCQl0ZXN0X2J1ZzY5NDUwMy5odG1sIFwKIAkJ
dGVzdF9vYmplY3RfcGx1Z2luX25hdi5odG1sIFwKIAkJdGVzdF9idWc3NDIwMzAuaHRtbCBcCiAJ
CXRlc3RfYnVnNzQyNTQ5Lmh0bWwgXAogCQl0ZXN0X2J1Zzc0NTY4NS5odG1sIFwKKwkJdGVzdF9p
ZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYx
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2NfaWYzLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwg
XAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5k
Ym94X2NfaWY2Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX3Bhc3MuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3Nh
bmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNz
LmpzIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzIFwKIAkJJChOVUxMKQogCiBfQlJP
V1NFUl9URVNUX0ZJTEVTID0gXAogCQlicm93c2VyX2J1ZzY0OTc3OC5qcyBcCiAJCWZpbGVfYnVn
NjQ5Nzc4Lmh0bWwgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sXmhlYWRlcnNeIFwKIAkJJChOVUxM
KQogCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfY19pZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0
bWwKQEAgLTAsMCArMSwzNSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRs
ZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRl
c3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlw
ZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwg
ZGVzYykgeworICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiByZXN1bHQsIGRlc2M6
IGRlc2N9LCAiKiIpOworICB9CisKKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICBvayh0cnVl
LCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMgc2hvdWxkIGJlIGFibGUg
dG8gcnVuIGlubGluZSBzY3JpcHRzIik7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
YV9mb3JtJykuc3VibWl0KCk7CisKKyAgICAvLyB0cmlnZ2VyIHRoZSBqYXZhc2NyaXB0OiB1cmwg
dGVzdAorICAgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYV9saW5rJyk7CisgIH0K
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9J2ZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcyc+PC9z
Y3JpcHQ+Cis8Ym9keSBvbkxvYWQ9J29rKHRydWUsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGgg
YWxsb3ctc2NyaXB0cyBzaG91bGQgYmUgYWJsZSB0byBydW4gc2NyaXB0IGZyb20gZXZlbnQgbGlz
dGVuZXJzIik7ZG9TdHVmZigpOyc+CisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1z
Y3JpcHRzIgorCisgIDxmb3JtIG1ldGhvZD0iZ2V0IiBhY3Rpb249ImZpbGVfaWZyYW1lX3NhbmRi
b3hfZm9ybV9mYWlsLmh0bWwiIGlkPSJhX2Zvcm0iPgorICAgIEZpcnN0IG5hbWU6IDxpbnB1dCB0
eXBlPSJ0ZXh0IiBuYW1lPSJmaXJzdG5hbWUiPgorICAgIExhc3QgbmFtZTogPGlucHV0IHR5cGU9
InRleHQiIG5hbWU9Imxhc3RuYW1lIj4KKyAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBvbmNsaWNr
PSJkb1N1Ym1pdCgpIiBpZD0iYV9idXR0b24iPgorICA8L2Zvcm0+CisKKyAgPGEgaHJlZiA9ICdq
YXZhc2NyaXB0Om9rKHRydWUsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0
cyBzaG91bGQgYmUgYWJsZSB0byBydW4gc2NyaXB0IGZyb20gamF2YXNjcmlwdDogVVJMcyIpOycg
aWQ9J2FfbGluayc+Y2xpY2sgbWU8L2E+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwKQEAgLTAsMCArMSwyMyBA
QAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5j
c3MiLz4KKworPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5j
dGlvbiBvayhyZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHtv
azogcmVzdWx0LCBkZXNjOiBtZXNzYWdlfSwgIioiKTsKKyAgfQorCisgIGZ1bmN0aW9uIGRvU3R1
ZmYoKSB7CisgICAgb2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ct
c2NyaXB0cyBzaG91bGQgTk9UIGJlIGFibGUgdG8gcnVuIGlubGluZSBzY3JpcHRzIik7CisgIH0K
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9J2ZpbGVfaWZyYW1lX3NhbmRib3hfZmFpbC5qcyc+PC9z
Y3JpcHQ+Cis8Ym9keSBvbkxvYWQ9J3dpbmRvdy5wYXJlbnQucG9zdG1lc3NhZ2Uoe29rOiBmYWxz
ZSwgZGVzYzogImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aG91dCBhbGxvdy1zY3JpcHRzIHNob3Vs
ZCBOT1QgYmUgYWJsZSB0byBydW4gc2NyaXB0IGZyb20gZXZlbnQgaGFuZGxlcnMifSwgIioiKTtk
b1N0dWZmKCk7Jz4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCBubyBwZXJtaXNzaW9ucworICA8aW1n
IHNyYz0iYWJvdXQ6YmxhbmsiIG9uZXJyb3I9J29rKGZhbHNlLCAiZG9jdW1lbnRzIHNhbmRib3hl
ZCB3aXRob3V0IGFsbG93LXNjcmlwdHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIHJ1biBzY3JpcHQg
ZnJvbSBldmVudCBoYW5kbGVycyIpOycpPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sCkBAIC0wLDAgKzEsMjUg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRm
LTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMi
Pjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVm
PSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgLy8gdHJ5IGFu
ZCBzdWJtaXQgdGhlIGZvcm0gLSB0aGlzIHNob3VsZCBzdWNjZWVkCisgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2FfZm9ybScpLnN1Ym1pdCgpOworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9u
TG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlw
dHMgYWxsb3ctZm9ybXMiCisKKyAgPGZvcm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iZmlsZV9pZnJh
bWVfc2FuZGJveF9mb3JtX3Bhc3MuaHRtbCIgaWQ9ImFfZm9ybSI+CisgICAgRmlyc3QgbmFtZTog
PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZpcnN0bmFtZSI+CisgICAgTGFzdCBuYW1lOiA8aW5w
dXQgdHlwZT0idGV4dCIgbmFtZT0ibGFzdG5hbWUiPgorICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQi
IG9uY2xpY2s9ImRvU3VibWl0KCkiIGlkPSJhX2J1dHRvbiI+CisgIDwvZm9ybT4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9jX2lmNC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19p
ZjQuaHRtbApAQCAtMCwwICsxLDQ0IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8
L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2lt
cGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKwor
PC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhy
ZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVzdWx0LCBkZXNj
KTsKKyAgfQorCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgLy8gdHJ5IHRvIG9wZW4gYSBu
ZXcgd2luZG93IHZpYSB0YXJnZXQ9Il9ibGFuayIsIHdpbmRvdy5vcGVuKCksIGFuZCBzaG93TW9k
YWxEaWFsb2coKQorICAgIC8vIHRoZSB3aW5kb3cgd2UgdHJ5IHRvIG9wZW4gY2xvc2VzIGl0c2Vs
ZiBvbmNlIGl0IG9wZW5zCisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICd0YXJn
ZXRfYmxhbmsnKTsKKworICAgIHZhciB0aHJldyA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICB3
aW5kb3cub3BlbigiYWJvdXQ6YmxhbmsiKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAg
dGhyZXcgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBvayh0aHJldywgIndpbmRvdy5vcGVuIHRo
cmV3IGEgSlMgZXhjZXB0aW9uIGFuZCB3YXMgbm90IGFsbG93ZWQiKTsKKworICAgIHRocmV3ID0g
ZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgIHdpbmRvdy5zaG93TW9kYWxEaWFsb2coImFib3V0OmJs
YW5rIik7CisgICAgfSBjYXRjaChlcnJvcikgeworICAgICAgdGhyZXcgPSB0cnVlOworICAgIH0K
KyAgICAKKyAgICBvayh0aHJldywgIndpbmRvdy5zaG93TW9kYWxEaWFsb2cgdGhyZXcgYSBKUyBl
eGNlcHRpb24gYW5kIHdhcyBub3QgYWxsb3dlZCIpOworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9u
TG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlw
dHMgYWxsb3ctc2FtZS1vcmlnaW4iCisKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9v
cGVuX3dpbmRvd19mYWlsLmh0bWwiIHRhcmdldD0iX2JsYW5rIiBpZD0idGFyZ2V0X2JsYW5rIj5v
cGVuIHdpbmRvdzwvYT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5odG1sIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRp
dGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4K
KyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1Np
bXBsZVRlc3QvdGVzdC5jc3MiLz4KKworPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5kb3cucGFyZW50
Lm9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKTsKKyAgfQorPC9zY3JpcHQ+Cis8Ym9keSBvbkxvYWQ9
ImRvU3R1ZmYoKSI+CisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zYW1lLW9yaWdp
biIKKworICA8YSBocmVmID0gJ2phdmFzY3JpcHQ6b2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJv
eGVkIHdpdGhvdXQgYWxsb3ctc2NyaXB0cyBzaG91bGQgbm90IGJlIGFibGUgdG8gcnVuIHNjcmlw
dCB3aXRoIGphdmFzY3JpcHQ6IFVSTHMiKTsnIGlkPSdhX2xpbmsnPmNsaWNrIG1lPC9hPgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmNi5odG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0K
KzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1
ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
L3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+DQorICA8bGluayByZWw9
InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0
LmNzcyIvPg0KKw0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQor
ICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2MpIHsNCisgICAgd2luZG93LnBhcmVudC5va193cmFw
cGVyKHJlc3VsdCwgZGVzYyk7DQorICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiBy
ZXN1bHQsIGRlc2M6IGRlc2N9LCAiKiIpOw0KKyAgfQ0KKyAgDQorICBmdW5jdGlvbiBkb1N0dWZm
KCkgew0KKyAgICBvayh0cnVlLCAiYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zYW1l
LW9yaWdpbiBhbmQgYWxsb3ctc2NyaXB0cyBzaG91bGQgYmUgc2FtZSBvcmlnaW4gd2l0aCBpdHMg
cGFyZW50IGFuZCBhYmxlIHRvIHJ1biBzY3JpcHRzICIgKw0KKyAgICAgICAicmVnYXJkbGVzcyBv
ZiB3aGF0IGtpbmQgb2Ygd2hpdGVzcGFjZSB3YXMgdXNlZCBpbiBpdHMgc2FuZGJveCBhdHRyaWJ1
dGUiKTsNCisgIH0NCis8L3NjcmlwdD4NCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+DQorICBJ
IGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2FtZS1vcmlnaW4iIGFuZCAiYWxsb3ctc2Ny
aXB0cyINCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
LS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfZmFpbC5qcwpAQCAtMCwwICsxLDEgQEAKK29rKGZhbHNlLCAiZG9jdW1lbnRzIHNh
bmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIHJ1biA8c2Ny
aXB0IHNyYz0uLi4+Iik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5o
dG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1f
ZmFpbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5odG1sCkBA
IC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEg
Y2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+Cisg
IDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxl
VGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0
eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVh
ZD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIHNob3VsZCBOT1QgYmUgbG9hZGVk
IGJ5IGEgZm9ybSBzdWJtaXQgZnJvbSBhIHNhbmRib3ggd2l0aG91dCAnYWxsb3ctZm9ybXMnCis8
L2JvZHk+Cis8L2h0bWw+CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAg
d2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IGZhbHNlLCBkZXNjOiAiZG9jdW1lbnRzIHNh
bmRib3hlZCB3aXRob3V0IGFsbG93LWZvcm1zIHNob3VsZCBOT1QgYmUgYWJsZSB0byBzdWJtaXQg
Zm9ybXMifSwgIioiKTsKKyAgfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2Zvcm1fcGFzcy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zv
cm1fcGFzcy5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3Jj
PSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVz
dC5jc3MiLz4KKzwvaGVhZD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIHNob3Vs
ZCBiZSBsb2FkZWQgYnkgYSBmb3JtIHN1Ym1pdCBmcm9tIGEgc2FuZGJveCB3aXRoICdhbGxvdy1m
b3JtcycKKzwvYm9keT4KKzwvaHRtbD4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gZG9TdHVmZigp
IHsKKyAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHtvazogdHJ1ZSwgZGVzYzogImRvY3Vt
ZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1mb3JtcyBzaG91bGQgYmUgYWJsZSB0byBzdWJtaXQg
Zm9ybXMifSwgIioiKTsKKyAgfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X29wZW5fd2luZG93X2ZhaWwuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8
dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGlj
YXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48
L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i
L3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKworPGJvZHkgb25Mb2FkPSJk
b1N0dWZmKCkiPgorICBJIHNob3VsZCBOT1QgYmUgb3BlbmVkIGJ5IGEgc2FuZGJveGVkIGlmcmFt
ZSB2aWEgYW55IG1ldGhvZAorPC9ib2R5PgorPC9odG1sPgorCis8c2NyaXB0PgorICBmdW5jdGlv
biBkb1N0dWZmKCkgeworICAgIGNvbnNvbGUubG9nKCJmaWxlX2lmcmFtZV9zYW5kYm94X3dpbmRv
d19vcGVuX2ZhaWwuaHRtbCIpOworICAgIHdpbmRvdy5vcGVuZXIub2soZmFsc2UsICJzYW5kYm94
ZWQgZG9jdW1lbnRzIHNob3VsZCBOT1QgYmUgYWJsZSB0byBvcGVuIHdpbmRvd3MiKTsKKyAgICBz
ZWxmLmNsb3NlKCk7CisgIH0KKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9wYXNzLmpzIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X3Bhc3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcwpAQCAtMCwwICsx
LDEgQEAKK29rKHRydWUsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0cyBz
aG91bGQgYmUgYWJsZSB0byBydW4gPHNjcmlwdCBzcmM9Li4uPiIpOwpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9p
ZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rl
c3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5k
Ym94X2dlbmVyYWwuaHRtbApAQCAtMCwwICsxLDE2NiBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0
bWw+DQorPCEtLQ0KK2h0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lk
PTM0MTYwNA0KK0ltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAt
IGdlbmVyYWwgdGVzdHMNCistLT4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4N
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxzY3JpcHQgdHlwZT0i
YXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0
LmpzIj48L3NjcmlwdD4NCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90
ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0Pg0KKyAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5j
c3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4N
CisvKiogVGVzdCBmb3IgQnVnIDM0MTYwNCAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJp
YnV0ZSBmb3IgSUZSQU1FcyAtIGdlbmVyYWwgdGVzdHMgKiovDQorDQorU2ltcGxlVGVzdC53YWl0
Rm9yRXhwbGljaXRGaW5pc2goKTsNCisNCisvLyBhIHBvc3RNZXNzYWdlIGhhbmRsZXIgdGhhdCBp
cyB1c2VkIGJ5IHNhbmRib3hlZCBpZnJhbWVzIHdpdGhvdXQNCisvLyAnYWxsb3ctc2FtZS1vcmln
aW4nIHRvIGNvbW11bmljYXRlIHBhc3MvZmFpbCBiYWNrIHRvIHRoaXMgbWFpbiBwYWdlLg0KKy8v
IGl0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0IGxpa2Uge29rOiB0cnVlL2Zh
bHNlLCBkZXNjOg0KKy8vIDxkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBm
b3J3YXJkcyB0byBvaygpDQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNl
aXZlTWVzc2FnZSwgZmFsc2UpOw0KKw0KK2Z1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KQ0K
K3sNCisgIG9rX3dyYXBwZXIoZXZlbnQuZGF0YS5vaywgZXZlbnQuZGF0YS5kZXNjKTsNCit9DQor
DQordmFyIGNvbXBsZXRlZFRlc3RzID0gMDsNCit2YXIgcGFzc2VkVGVzdHMgPSAwOw0KKw0KK2Z1
bmN0aW9uIG9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKSB7DQorICBvayhyZXN1bHQsIGRlc2MpOw0K
Kw0KKyAgY29tcGxldGVkVGVzdHMrKzsNCisNCisgIGlmIChyZXN1bHQpIHsNCisgICAgcGFzc2Vk
VGVzdHMrKzsNCisgIH0NCisNCisgIGlmIChjb21wbGV0ZWRUZXN0cyA9PSAxOSkgew0KKyAgICBp
cyhwYXNzZWRUZXN0cywgMTksICJUaGVyZSBhcmUgMTkgZ2VuZXJhbCB0ZXN0cyB0aGF0IHNob3Vs
ZCBwYXNzIik7DQorICAgIFNpbXBsZVRlc3QuZmluaXNoKCk7DQorICB9DQorfQ0KKw0KK2Z1bmN0
aW9uIGRvVGVzdCgpIHsNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAxKSB0ZXN0IHRoYXQg
aW5saW5lIHNjcmlwdHMgKDxzY3JpcHQ+KSBjYW4gcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQg
d2l0aCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hf
Y19pZjEuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnKQ0KKw0KKyAgLy8gcGFzc2VzIGlm
IGdvb2QNCisgIC8vIDIpIHRlc3QgdGhhdCA8c2NyaXB0IHNyYz0uLi4+IGNhbiBydW4gaW4gYW4g
aWZyYW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmls
ZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQor
DQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMykgdGVzdCB0aGF0IHNjcmlwdCBpbiBhbiBl
dmVudCBsaXN0ZW5lciAoYm9keSBvbmxvYWQpIGNhbiBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hl
ZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQorDQorICAvLyBwYXNzZXMg
aWYgZ29vZA0KKyAgLy8gNCkgdGVzdCB0aGF0IHNjcmlwdCBpbiBhbiBqYXZhc2NyaXB0OnVybCBj
YW4gcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyINCisgIC8v
IChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3aGljaCBoYXMgJ2FsbG93
LXNjcmlwdHMnKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA1KSB0ZXN0IHRoYXQgaW5s
aW5lIHNjcmlwdHMgY2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFs
bG93LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0
bWwgd2hpY2ggaGFzIHNhbmRib3g9JycpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDYp
IHRlc3QgdGhhdCA8c2NyaXB0IHNyYz0uLi4+IGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRi
b3hlZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94PScnKQ0KKw0KKyAgLy8gZmFpbHMg
aWYgYmFkDQorICAvLyA3KSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFuIGV2ZW50IGxpc3RlbmVyIChi
b2R5IG9ubG9hZCkgY2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFs
bG93LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0
bWwgd2hpY2ggaGFzIHNhbmRib3g9JycpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDgp
IHRlc3QgdGhhdCBzY3JpcHQgaW4gYW4gZXZlbnQgbGlzdGVuZXIgKGltZyBvbmVycm9yKSBjYW5u
b3QgcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ctc2NyaXB0cyINCisg
IC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCB3aGljaCBoYXMgc2Fu
ZGJveD0nJykNCisgIA0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA5KSB0ZXN0IHRoYXQgc2Ny
aXB0IGluIGFuIGphdmFzY3JpcHQ6dXJsIGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hl
ZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2Fu
ZGJveF9jX2lmXzUuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0nYWxsb3ctc2FtZS1vcmlnaW4nKQ0K
KyAgdmFyIGlmX3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfNScpLmNvbnRlbnRXaW5k
b3c7DQorICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FfbGluaycsIGlmX3cpOw0K
Kw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDEwKSB0ZXN0IHRoYXQgYSBuZXcgaWZyYW1l
IGhhcyBzYW5kYm94IGF0dHJpYnV0ZQ0KKyAgdmFyIGlmciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImlmcmFtZSIpOw0KKyAgb2tfd3JhcHBlcigic2FuZGJveCIgaW4gaWZyLCAiYSBuZXcgaWZy
YW1lIHNob3VsZCBoYXZlIGEgc2FuZGJveCBhdHRyaWJ1dGUiKTsNCisNCisgIC8vIHBhc3NlcyBp
ZiBnb29kDQorICAvLyAxMSkgdGVzdCB0aGF0IHRoZSBzYW5kYm94IGF0dHJpYnV0ZSdzIGRlZmF1
bHQgdmFsdWUgaXMgYW4gZW1wdHkgc3RyaW5nDQorICBva193cmFwcGVyKGlmci5zYW5kYm94ID09
PSAiIiwgImRlZmF1bHQgc2FuZGJveCBhdHRyaWJ1dGUgc2hvdWxkIGJlIGFuIGVtcHR5IHN0cmlu
ZyIpOw0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDEyKSB0ZXN0IHRoYXQgYSBzYW5k
Ym94ZWQgaWZyYW1lIHdpdGggJ2FsbG93LWZvcm1zJyBjYW4gc3VibWl0IGZvcm1zDQorICAvLyAo
ZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1m
b3JtcycgYW5kICdhbGxvdy1zY3JpcHRzJykNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8g
MTMpIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aG91dCAnYWxsb3ctZm9ybXMnIGNh
biBOT1Qgc3VibWl0IGZvcm1zDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2Nf
aWYxLmh0bWwgd2hpY2ggb25seSBoYXMgJ2FsbG93LXNjcmlwdHMnKQ0KKw0KKyAgLy8gZmFpbHMg
aWYgYmFkDQorICAvLyAxNCkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVu
IGEgbmV3IHdpbmRvdyB1c2luZyB0aGUgdGFyZ2V0LmF0dHJpYnV0ZQ0KKyAgLy8gdGhpcyBpcyBk
b25lIHZpYSBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVk
IHdpdGggImFsbG93LXNjcmlwdHMiIGFuZCAiYWxsb3ctc2FtZS1vcmlnaW4iDQorICAvLyB0aGUg
d2luZG93IGl0IGF0dGVtcHRzIHRvIG9wZW4gY2FsbHMgd2luZG93Lm9wZW5lci5vayhmYWxzZSwg
Li4uKSBhbmQgZmlsZV9pZnJhbWVfY19pZjQuaHRtbCBoYXMgYW4gb2soKQ0KKyAgLy8gZnVuY3Rp
b24gdGhhdCBjYWxscyB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXINCisNCisgIC8vIHBhc3NlcyBp
ZiBnb29kDQorICAvLyAxNSkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVu
IGEgbmV3IHdpbmRvdyB1c2luZyB3aW5kb3cub3Blbg0KKyAgLy8gdGhpcyBpcyBkb25lIHZpYSBm
aWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggImFs
bG93LXNjcmlwdHMiIGFuZCAiYWxsb3ctc2FtZS1vcmlnaW4iDQorICAvLyB0aGUgd2luZG93IGl0
IGF0dGVtcHRzIHRvIG9wZW4gY2FsbHMgd2luZG93Lm9wZW5lci5vayhmYWxzZSwgLi4uKSBhbmQg
ZmlsZV9pZnJhbWVfY19pZjQuaHRtbCBoYXMgYW4gb2soKQ0KKyAgLy8gZnVuY3Rpb24gdGhhdCBj
YWxscyB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXINCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQor
ICAvLyAxNikgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdp
bmRvdyB1c2luZyB3aW5kb3cuU2hvd01vZGFsRGlhbG9nDQorICAvLyB0aGlzIGlzIGRvbmUgdmlh
IGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAi
YWxsb3ctc2NyaXB0cyIgYW5kICJhbGxvdy1zYW1lLW9yaWdpbiINCisgIC8vIHRoZSB3aW5kb3cg
aXQgYXR0ZW1wdHMgdG8gb3BlbiBjYWxscyB3aW5kb3cub3BlbmVyLm9rKGZhbHNlLCAuLi4pIGFu
ZCBmaWxlX2lmcmFtZV9jX2lmNC5odG1sIGhhcyBhbiBvaygpDQorICAvLyBmdW5jdGlvbiB0aGF0
IGNhbGxzIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcg0KKyAgDQorICAvLyBwYXNzZXMgdHdpY2Ug
aWYgZ29vZA0KKyAgLy8gMTcpIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgY2FuIGFjY2Vz
cyBzYW1lLW9yaWdpbiBkb2N1bWVudHMgYW5kIHJ1biBzY3JpcHRzIHdoZW4gaXRzIHNhbmRib3gg
YXR0cmlidXRlDQorICAvLyBpcyBzZXBhcmF0ZWQgd2l0aCB0d28gc3BhY2VzIA0KKyAgLy8gZG9u
ZSB2aWEgZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3
aXRoICIgIGFsbG93LXNjcmlwdHMgIGFsbG93LXNhbWUtb3JpZ2luICAiDQorICANCisgIC8vIHBh
c3NlcyB0d2ljZSBpZiBnb29kDQorICAvLyAxOCkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFt
ZSBjYW4gYWNjZXNzIHNhbWUtb3JpZ2luIGRvY3VtZW50cyBhbmQgcnVuIHNjcmlwdHMgd2hlbiBp
dHMgc2FuZGJveCBhdHRyaWJ1dGUNCisgIC8vIGlzIHNlcGFyYXRlZCB3aXRoIHRhYnMNCisgIC8v
IGRvbmUgdmlhIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCB3aGljaCBpcyBzYW5kYm94
ZWQgd2l0aCAiJiN4MDk7YWxsb3ctc2NyaXB0cyYjeDA5O2FsbG93LXNhbWUtb3JpZ2luJiN4MDk7
Ig0KKyAgDQorICAvLyBwYXNzZXMgdHdpY2UgaWYgZ29vZA0KKyAgLy8gMTkpIHRlc3QgdGhhdCBh
IHNhbmRib3hlZCBpZnJhbWUgY2FuIGFjY2VzcyBzYW1lLW9yaWdpbiBkb2N1bWVudHMgYW5kIHJ1
biBzY3JpcHRzIHdoZW4gaXRzIHNhbmRib3ggYXR0cmlidXRlDQorICAvLyBpcyBzZXBhcmF0ZWQg
d2l0aCBsaW5lIGZlZWRzDQorICAvLyBkb25lIHZpYSBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2
Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggIiYjeDBhO2FsbG93LXNjcmlwdHMmI3gwYTth
bGxvdy1zYW1lLW9yaWdpbiYjeDBhOyINCisgIA0KKyAgLy8gcGFzc2VzIHR3aWNlIGlmIGdvb2QN
CisgIC8vIDIwKSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNhbiBhY2Nlc3Mgc2FtZS1v
cmlnaW4gZG9jdW1lbnRzIGFuZCBydW4gc2NyaXB0cyB3aGVuIGl0cyBzYW5kYm94IGF0dHJpYnV0
ZQ0KKyAgLy8gaXMgc2VwYXJhdGVkIHdpdGggZm9ybSBmZWVkcw0KKyAgLy8gZG9uZSB2aWEgZmls
ZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICImI3gw
YzthbGxvdy1zY3JpcHRzJiN4MGM7YWxsb3ctc2FtZS1vcmlnaW4mI3gwYzsiDQorICANCisgIC8v
IHBhc3NlcyB0d2ljZSBpZiBnb29kDQorICAvLyAyMSkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlm
cmFtZSBjYW4gYWNjZXNzIHNhbWUtb3JpZ2luIGRvY3VtZW50cyBhbmQgcnVuIHNjcmlwdHMgd2hl
biBpdHMgc2FuZGJveCBhdHRyaWJ1dGUNCisgIC8vIGlzIHNlcGFyYXRlZCB3aXRoIGNhcnJpYWdl
IHJldHVybnMNCisgIC8vIGRvbmUgdmlhIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCB3
aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAiJiN4MGQ7YWxsb3ctc2NyaXB0cyYjeDBkO2FsbG93LXNh
bWUtb3JpZ2luJiN4MGQ7Ig0KK30NCisNCithZGRMb2FkRXZlbnQoZG9UZXN0KTsNCis8L3Njcmlw
dD4NCis8Ym9keT4NCis8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5t
b3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+
IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzDQorPHAgaWQ9
ImRpc3BsYXkiPjwvcD4NCis8ZGl2IGlkPSJjb250ZW50Ij4NCis8aWZyYW1lIHNhbmRib3g9ImFs
bG93LXNhbWUtb3JpZ2luIGFsbG93LXNjcmlwdHMiIGlkPSJpZl8xIiBzcmM9ImZpbGVfaWZyYW1l
X3NhbmRib3hfY19pZjEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8
aWZyYW1lIHNhbmRib3g9IiIgaWQ9ImlmXzIiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lm
Mi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJv
eD0iYWxsb3ctZm9ybXMgYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzMiIHNyYz0iZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxp
ZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzQi
IHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0i
MTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4iIGlkPSJp
Zl81IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjUuaHRtbCIgaGVpZ2h0PSIxMCIgd2lk
dGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9IiAgYWxsb3ctc2FtZS1vcmlnaW4g
IGFsbG93LXNjcmlwdHMgICIgaWQ9ImlmXzZfYSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Nf
aWY2Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5k
Ym94PSImI3gwOTthbGxvdy1zYW1lLW9yaWdpbiYjeDA5O2FsbG93LXNjcmlwdHMmI3gwOTsiIGlk
PSJpZl82X2IiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIiBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iJiN4MGE7YWxsb3ctc2Ft
ZS1vcmlnaW4mI3gwYTthbGxvdy1zY3JpcHRzJiN4MGE7IiBpZD0iaWZfNl9jIiBzcmM9ImZpbGVf
aWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFt
ZT4NCis8aWZyYW1lIHNhbmRib3g9IiYjeDBjO2FsbG93LXNhbWUtb3JpZ2luJiN4MGM7YWxsb3ct
c2NyaXB0cyYjeDBjOyIgaWQ9ImlmXzZfZCIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2
Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94
PSImI3gwZDthbGxvdy1zYW1lLW9yaWdpbiYjeDBkO2FsbG93LXNjcmlwdHMmI3gwZDsiIGlkPSJp
Zl82X2UiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIiBoZWlnaHQ9IjEwIiB3
aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvZGl2Pg0KKzwvYm9keT4NCis8L2h0bWw+DQo=
</data>
<flag name="review"
          id="517718"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>624217</attachid>
            <date>2012-05-15 15:37:40 -0700</date>
            <delta_ts>2012-06-14 11:32:27 -0700</delta_ts>
            <desc>CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v3</desc>
            <filename>iframe_sandbox_check_may_load</filename>
            <type>text/plain</type>
            <size>26521</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOTZiZDM1YjY3NWNjZTFhZTI1YzhlOWFiN2Jh
MDI3OWM0MjAxYWI2OQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KbW9k
aWZ5IG5zSVByaW5jaXBhbDo6Y2hlY2tNYXlMb2FkIHRvIGFsbG93IGluaGVyaXRlZC9pbmhlcml0
aW5nIGxvYWRzCgpkaWZmIC0tZ2l0IGEvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbCBiL2NhcHMv
aWRsL25zSVByaW5jaXBhbC5pZGwKLS0tIGEvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbAorKysg
Yi9jYXBzL2lkbC9uc0lQcmluY2lwYWwuaWRsCkBAIC00NywxNyArNDcsMTcgQEAgc3RydWN0IEpT
UHJpbmNpcGFsczsKICV9CiAKIGludGVyZmFjZSBuc0lVUkk7CiBpbnRlcmZhY2UgbnNJQ29udGVu
dFNlY3VyaXR5UG9saWN5OwogCiBbcHRyXSBuYXRpdmUgSlNDb250ZXh0KEpTQ29udGV4dCk7CiBb
cHRyXSBuYXRpdmUgSlNQcmluY2lwYWxzKEpTUHJpbmNpcGFscyk7CiAKLVtzY3JpcHRhYmxlLCB1
dWlkKDQyYmE2YTM4LWQ2MTktNDlhYi04MjQ4LTNkMjQ3ZTk1OWQ1ZSldCitbc2NyaXB0YWJsZSwg
dXVpZCg4MjVmZmNlOC05NjJkLTExZTEtYWVmMy04ZjJiNjE4ODcwOWIpXQogaW50ZXJmYWNlIG5z
SVByaW5jaXBhbCA6IG5zSVNlcmlhbGl6YWJsZQogewogICAgIC8qKgogICAgICAqIFZhbHVlcyBv
ZiBjYXBhYmlsaXRpZXMgZm9yIGVhY2ggcHJpbmNpcGFsLiBPcmRlciBpcwogICAgICAqIHNpZ25p
ZmljYW50OiBpZiBhbiBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIG9uIGEgc2V0CiAgICAgICogb2Yg
Y2FwYWJpbGl0aWVzLCB0aGUgbWluaW11bSBpcyBjb21wdXRlZC4KICAgICAgKi8KICAgICBjb25z
dCBzaG9ydCBFTkFCTEVfREVOSUVEICAgICAgICAgICAgICAgID0gMTsKQEAgLTE5OSwzMyArMTk5
LDQzIEBAIGludGVyZmFjZSBuc0lQcmluY2lwYWwgOiBuc0lTZXJpYWxpemFibGUKICAgICAgKi8K
ICAgICBib29sZWFuIHN1YnN1bWVzSWdub3JpbmdEb21haW4oaW4gbnNJUHJpbmNpcGFsIG90aGVy
KTsKIAogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgcHJpbmNpcGFsIGlzIGFs
bG93ZWQgdG8gbG9hZCB0aGUgbmV0d29yayByZXNvdXJjZQogICAgICAqIGxvY2F0ZWQgYXQgdGhl
IGdpdmVuIFVSSSB1bmRlciB0aGUgc2FtZS1vcmlnaW4gcG9saWN5LiBUaGlzIG1lYW5zIHRoYXQK
ICAgICAgKiBjb2RlYmFzZSBwcmluY2lwYWxzIGFyZSBvbmx5IGFsbG93ZWQgdG8gbG9hZCByZXNv
dXJjZXMgZnJvbSB0aGUgc2FtZQogICAgICAqIGRvbWFpbiwgdGhlIHN5c3RlbSBwcmluY2lwYWwg
aXMgYWxsb3dlZCB0byBsb2FkIGFueXRoaW5nLCBhbmQgbnVsbAotICAgICAqIHByaW5jaXBhbHMg
YXJlIG5vdCBhbGxvd2VkIHRvIGxvYWQgYW55dGhpbmcuCisgICAgICogcHJpbmNpcGFscyBhcmUg
bm90IGFsbG93ZWQgdG8gbG9hZCBhbnl0aGluZy4gVGhpcyBpcyBjaGFuZ2VkIHNsaWdodGx5Cisg
ICAgICogYnkgdGhlIG9wdGlvbmFsIGZsYWcgYWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsICh3aGlj
aCBkZWZhdWx0cyB0byBmYWxzZSkKKyAgICAgKiB3aGljaCBhbGxvd3MgdGhlIGxvYWQgb2YgYSBk
YXRhOiBVUkkgKHdoaWNoIGluaGVyaXRzIHRoZSBwcmluY2lwYWwgb2YKKyAgICAgKiBpdHMgbG9h
ZGVyKSBvciBhIFVSSSB3aXRoIHRoZSBzYW1lIHByaW5jaXBhbCBhcyBpdHMgbG9hZGVyIChlZy4g
YSAKKyAgICAgKiBCbG9iIFVSSSkuCisgICAgICogSW4gdGhlc2UgY2FzZXMsIHdpdGggYWxsb3dJ
ZkluaGVyaXRzUHJpbmNpcGFsIHNldCB0byB0cnVlLCB0aGUgVVJJIGNhbgorICAgICAqIGJlIGxv
YWRlZCBieSBhIG51bGwgcHJpbmNpcGFsLgogICAgICAqCiAgICAgICogSWYgdGhlIGxvYWQgaXMg
YWxsb3dlZCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gSWYgdGhlIGxvYWQgaXMgbm90CiAg
ICAgICogYWxsb3dlZCB0aGUgZnVuY3Rpb24gdGhyb3dzIE5TX0VSUk9SX0RPTV9CQURfVVJJLgog
ICAgICAqCiAgICAgICogTk9URTogT3RoZXIgcG9saWNpZXMgbWlnaHQgb3ZlcnJpZGUgdGhpcywg
c3VjaCBhcyB0aGUgQWNjZXNzLUNvbnRyb2wKICAgICAgKiAgICAgICBzcGVjaWZpY2F0aW9uLgog
ICAgICAqIE5PVEU6IFRoZSAnZG9tYWluJyBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCBvbiB0aGUg
YmVoYXZpb3VyIG9mIHRoaXMKICAgICAgKiAgICAgICBmdW5jdGlvbi4KICAgICAgKgogICAgICAq
CiAgICAgICogQHBhcmFtIHVyaSAgICBUaGUgVVJJIGFib3V0IHRvIGJlIGxvYWRlZC4KICAgICAg
KiBAcGFyYW0gcmVwb3J0IElmIHRydWUsIHdpbGwgcmVwb3J0IGEgd2FybmluZyB0byB0aGUgY29u
c29sZSBzZXJ2aWNlCiAgICAgICogICAgICAgICAgICAgICBpZiB0aGUgbG9hZCBpcyBub3QgYWxs
b3dlZC4KKyAgICAgKiBAcGFyYW0gYWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsICAgSWYgdHJ1ZSwg
dGhlIGxvYWQgaXMgYWxsb3dlZCBpZiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9hZGVlIGluaGVyaXRzIHRoZSBwcmluY2lwYWwgb2YgdGhlCisgICAgICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci4KICAgICAgKiBAdGhyb3dz
IE5TX0VSUk9SX0RPTV9CQURfVVJJIGlmIHRoZSBsb2FkIGlzIG5vdCBhbGxvd2VkLgogICAgICAq
LwotICAgIHZvaWQgY2hlY2tNYXlMb2FkKGluIG5zSVVSSSB1cmksIGluIGJvb2xlYW4gcmVwb3J0
KTsKKyAgICB2b2lkIGNoZWNrTWF5TG9hZChpbiBuc0lVUkkgdXJpLCBpbiBib29sZWFuIHJlcG9y
dCwKKyAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGFsbG93SWZJbmhlcml0c1ByaW5j
aXBhbCk7CiAKICAgICAvKioKICAgICAgKiBUaGUgc3ViamVjdCBuYW1lIGZvciB0aGUgY2VydGlm
aWNhdGUuICBUaGlzIGFjdHVhbGx5IGlkZW50aWZpZXMgdGhlCiAgICAgICogc3ViamVjdCBvZiB0
aGUgY2VydGlmaWNhdGUuICBUaGlzIG1heSB3ZWxsIG5vdCBiZSBhIHN0cmluZyB0aGF0IHdvdWxk
CiAgICAgICogbWVhbiBtdWNoIHRvIGEgdHlwaWNhbCB1c2VyIG9uIGl0cyBvd24gKGUuZy4gaXQg
bWF5IGhhdmUgYSBudW1iZXIgb2YKICAgICAgKiBkaWZmZXJlbnQgbmFtZXMgYWxsIGNvbmNhdGVu
YXRlZCB0b2dldGhlciB3aXRoIHNvbWUgaW5mb3JtYXRpb24gb24gd2hhdAogICAgICAqIHRoZXkg
bWVhbiBpbiBiZXR3ZWVuKS4KICAgICAgKgpkaWZmIC0tZ2l0IGEvY2Fwcy9pbmNsdWRlL25zTnVs
bFByaW5jaXBhbC5oIGIvY2Fwcy9pbmNsdWRlL25zTnVsbFByaW5jaXBhbC5oCi0tLSBhL2NhcHMv
aW5jbHVkZS9uc051bGxQcmluY2lwYWwuaAorKysgYi9jYXBzL2luY2x1ZGUvbnNOdWxsUHJpbmNp
cGFsLmgKQEAgLTQzLDE2ICs0MywxNyBAQAogICovCiAKICNpZm5kZWYgbnNOdWxsUHJpbmNpcGFs
X2hfXwogI2RlZmluZSBuc051bGxQcmluY2lwYWxfaF9fCiAKICNpbmNsdWRlICJuc0lQcmluY2lw
YWwuaCIKICNpbmNsdWRlICJuc0pTUHJpbmNpcGFscy5oIgogI2luY2x1ZGUgIm5zQ09NUHRyLmgi
CisjaW5jbHVkZSAibnNQcmluY2lwYWwuaCIKIAogY2xhc3MgbnNJVVJJOwogCiAjZGVmaW5lIE5T
X05VTExQUklOQ0lQQUxfQ0xBU1NOQU1FICJudWxscHJpbmNpcGFsIgogI2RlZmluZSBOU19OVUxM
UFJJTkNJUEFMX0NJRCBcCiB7IDB4ZGQxNTZkNjIsIDB4ZDI2ZiwgMHg0NDQxLCBcCiAgeyAweDlj
LCAweGRiLCAweGU4LCAweGYwLCAweDkxLCAweDA3LCAweGMyLCAweDczIH0gfQogI2RlZmluZSBO
U19OVUxMUFJJTkNJUEFMX0NPTlRSQUNUSUQgIkBtb3ppbGxhLm9yZy9udWxscHJpbmNpcGFsOzEi
CmRpZmYgLS1naXQgYS9jYXBzL2luY2x1ZGUvbnNQcmluY2lwYWwuaCBiL2NhcHMvaW5jbHVkZS9u
c1ByaW5jaXBhbC5oCi0tLSBhL2NhcHMvaW5jbHVkZS9uc1ByaW5jaXBhbC5oCisrKyBiL2NhcHMv
aW5jbHVkZS9uc1ByaW5jaXBhbC5oCkBAIC00MSwxNyArNDEsMTkgQEAKICNkZWZpbmUgbnNQcmlu
Y2lwYWxfaF9fCiAKICNpbmNsdWRlICJuc0F1dG9QdHIuaCIKICNpbmNsdWRlICJuc0NPTVB0ci5o
IgogI2luY2x1ZGUgIm5zVm9pZEFycmF5LmgiCiAjaW5jbHVkZSAibnNIYXNodGFibGUuaCIKICNp
bmNsdWRlICJuc0pTUHJpbmNpcGFscy5oIgogI2luY2x1ZGUgIm5zVEFycmF5LmgiCi0jaW5jbHVk
ZSAibnNBdXRvUHRyLmgiCisjaW5jbHVkZSAibnNJUHJvdG9jb2xIYW5kbGVyLmgiCisjaW5jbHVk
ZSAibnNOZXRVdGlsLmgiCisjaW5jbHVkZSAibnNTY3JpcHRTZWN1cml0eU1hbmFnZXIuaCIKIAog
Y2xhc3MgbnNJT2JqZWN0SW5wdXRTdHJlYW07CiBjbGFzcyBuc0lPYmplY3RPdXRwdXRTdHJlYW07
CiAKIGNsYXNzIG5zUHJpbmNpcGFsIDogcHVibGljIG5zSlNQcmluY2lwYWxzCiB7CiBwdWJsaWM6
CiAgIG5zUHJpbmNpcGFsKCk7CkBAIC05NywxNiArOTksMzIgQEAgcHVibGljOgogICB2b2lkIFNl
dFVSSShuc0lVUkkgKmFVUkkpOwogICBuc3Jlc3VsdCBTZXRDYXBhYmlsaXR5KGNvbnN0IGNoYXIg
KmNhcGFiaWxpdHksIHZvaWQgKiphbm5vdGF0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICBBbm5vdGF0aW9uVmFsdWUgdmFsdWUpOwogCiAgIHN0YXRpYyBjb25zdCBjaGFyIHNJbnZhbGlk
W107CiAKICAgdmlydHVhbCB2b2lkIEdldFNjcmlwdExvY2F0aW9uKG5zQUNTdHJpbmcgJmFTdHIp
IE1PWl9PVkVSUklERTsKIAorICBzdGF0aWMgYm9vbCBJc1ByaW5jaXBhbEluaGVyaXRlZChuc0lV
UkkqIGFVUkkpIHsKKyAgICAvLyByZXR1cm4gdHJ1ZSBpZiB0aGUgbG9hZGVlIFVSSSBoYXMKKyAg
ICAvLyB0aGUgVVJJX0lOSEVSSVRTX1NFQ1VSSVRZX0NPTlRFWFQgZmxhZyBzZXQuCisgICAgYm9v
bCBkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dDsKKyAgICBuc3Jlc3VsdCBydiA9CisgICAgTlNf
VVJJQ2hhaW5IYXNGbGFncyhhVVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJvdG9j
b2xIYW5kbGVyOjpVUklfSU5IRVJJVFNfU0VDVVJJVFlfQ09OVEVYVCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICZkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dCk7CisKKyAgICBpZiAoTlNfU1VD
Q0VFREVEKHJ2KSAmJiBkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dCkgeworICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICNpZmRlZiBERUJVRwog
ICB2aXJ0dWFsIHZvaWQgZHVtcEltcGwoKSBNT1pfT1ZFUlJJREU7CiAjZW5kaWYgCiAKIHByb3Rl
Y3RlZDoKICAgLy8gRm9ybWVybHkgYW4gSURMIG1ldGhvZC4gTm93IGp1c3QgYSBwcm90ZWN0ZWQg
aGVscGVyLgogICBuc3Jlc3VsdCBTZXRDYW5FbmFibGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIgKmNh
cGFiaWxpdHksIFBSSW50MTYgY2FuRW5hYmxlKTsKIApkaWZmIC0tZ2l0IGEvY2Fwcy9zcmMvbnNO
dWxsUHJpbmNpcGFsLmNwcCBiL2NhcHMvc3JjL25zTnVsbFByaW5jaXBhbC5jcHAKLS0tIGEvY2Fw
cy9zcmMvbnNOdWxsUHJpbmNpcGFsLmNwcAorKysgYi9jYXBzL3NyYy9uc051bGxQcmluY2lwYWwu
Y3BwCkBAIC0zMTksMTggKzMxOSwzNiBAQCBuc051bGxQcmluY2lwYWw6OlN1YnN1bWVzKG5zSVBy
aW5jaXBhbCAqCiAKIE5TX0lNRVRIT0RJTVAKIG5zTnVsbFByaW5jaXBhbDo6U3Vic3VtZXNJZ25v
cmluZ0RvbWFpbihuc0lQcmluY2lwYWwgKmFPdGhlciwgYm9vbCAqYVJlc3VsdCkKIHsKICAgcmV0
dXJuIFN1YnN1bWVzKGFPdGhlciwgYVJlc3VsdCk7CiB9CiAKIE5TX0lNRVRIT0RJTVAKLW5zTnVs
bFByaW5jaXBhbDo6Q2hlY2tNYXlMb2FkKG5zSVVSSSogYVVSSSwgYm9vbCBhUmVwb3J0KQorbnNO
dWxsUHJpbmNpcGFsOjpDaGVja01heUxvYWQobnNJVVJJKiBhVVJJLCBib29sIGFSZXBvcnQsIGJv
b2wgYUFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCkKIHsKKyAgaWYgKGFBbGxvd0lmSW5oZXJpdHNQ
cmluY2lwYWwpIHsKKyAgICBpZiAobnNQcmluY2lwYWw6OklzUHJpbmNpcGFsSW5oZXJpdGVkKGFV
UkkpKSB7CisgICAgICByZXR1cm4gTlNfT0s7CisgICAgfQorCisgICAgLy8gQWxzbyBhbGxvdyB0
aGUgbG9hZCBpZiB0aGUgcHJpbmNpcGFsIG9mIHRoZSBVUkkgYmVpbmcgY2hlY2tlZCBpcyBleGFj
dGx5CisgICAgLy8gdXMgaWUgdGhpcy4KKyAgICBuc0NPTVB0cjxuc0lVUklXaXRoUHJpbmNpcGFs
PiB1cmlQcmluYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFVUkkpOworICAgIGlmICh1cmlQcmluYykg
eworICAgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBwcmluY2lwYWw7CisgICAgICB1cmlQcmlu
Yy0+R2V0UHJpbmNpcGFsKGdldHRlcl9BZGRSZWZzKHByaW5jaXBhbCkpOworCisgICAgICBpZiAo
cHJpbmNpcGFsICYmIHByaW5jaXBhbCA9PSB0aGlzKSB7CisgICAgICAgIHJldHVybiBOU19PSzsK
KyAgICAgIH0KKyAgICB9CisgIH0KKwogICBpZiAoYVJlcG9ydCkgewogICAgIG5zU2NyaXB0U2Vj
dXJpdHlNYW5hZ2VyOjpSZXBvcnRFcnJvcigKICAgICAgIG5zbnVsbCwgTlNfTElURVJBTF9TVFJJ
TkcoIkNoZWNrU2FtZU9yaWdpbkVycm9yIiksIG1VUkksIGFVUkkpOwogICB9CiAKICAgcmV0dXJu
IE5TX0VSUk9SX0RPTV9CQURfVVJJOwogfQogCmRpZmYgLS1naXQgYS9jYXBzL3NyYy9uc1ByaW5j
aXBhbC5jcHAgYi9jYXBzL3NyYy9uc1ByaW5jaXBhbC5jcHAKLS0tIGEvY2Fwcy9zcmMvbnNQcmlu
Y2lwYWwuY3BwCisrKyBiL2NhcHMvc3JjL25zUHJpbmNpcGFsLmNwcApAQCAtMzg3LDE4ICszODcs
MjYgQEAgVVJJSXNMb2NhbEZpbGUobnNJVVJJICphVVJJKQogCiAgIHJldHVybiB1dGlsICYmIE5T
X1NVQ0NFRURFRCh1dGlsLT5Qcm90b2NvbEhhc0ZsYWdzKGFVUkksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVByb3RvY29sSGFuZGxlcjo6VVJJX0lTX0xPQ0FMX0ZJTEUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc0ZpbGUpKSAmJgogICAgICAgICAgaXNG
aWxlOwogfQogCiBOU19JTUVUSE9ESU1QCi1uc1ByaW5jaXBhbDo6Q2hlY2tNYXlMb2FkKG5zSVVS
SSogYVVSSSwgYm9vbCBhUmVwb3J0KQorbnNQcmluY2lwYWw6OkNoZWNrTWF5TG9hZChuc0lVUkkq
IGFVUkksIGJvb2wgYVJlcG9ydCwgYm9vbCBhQWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsKQogewor
ICAgaWYgKGFBbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpIHsKKyAgICAvLyBJZiB0aGUgY2FsbGVy
IHNwZWNpZmllZCB0byBhbGxvdyBsb2FkcyBvZiBVUklzIHRoYXQgaW5oZXJpdAorICAgIC8vIG91
ciBwcmluY2lwYWwsIGFsbG93IHRoZSBsb2FkIGlmIHRoaXMgVVJJIGluaGVyaXRzIGl0cyBwcmlu
Y2lwYWwKKyAgICBpZiAobnNQcmluY2lwYWw6OklzUHJpbmNpcGFsSW5oZXJpdGVkKGFVUkkpKSB7
CisgICAgICByZXR1cm4gTlNfT0s7CisgICAgfQorICB9CisKICAgaWYgKCFuc1NjcmlwdFNlY3Vy
aXR5TWFuYWdlcjo6U2VjdXJpdHlDb21wYXJlVVJJcyhtQ29kZWJhc2UsIGFVUkkpKSB7CiAgICAg
aWYgKG5zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOjpHZXRTdHJpY3RGaWxlT3JpZ2luUG9saWN5KCkg
JiYKICAgICAgICAgVVJJSXNMb2NhbEZpbGUoYVVSSSkpIHsKICAgICAgIG5zQ09NUHRyPG5zSUZp
bGVVUkw+IGZpbGVVUkwoZG9fUXVlcnlJbnRlcmZhY2UoYVVSSSkpOwogCiAgICAgICBpZiAoIVVS
SUlzTG9jYWxGaWxlKG1Db2RlYmFzZSkpIHsKICAgICAgICAgLy8gSWYgdGhlIGNvZGViYXNlIGlz
IG5vdCBhbHNvIGEgZmlsZTogdXJpIHRoZW4gZm9yZ2V0IGl0CiAgICAgICAgIC8vIChkb24ndCB3
YW50IHJlc291cmNlOiBwcmluY2lwYWxzIGluIGEgZmlsZTogZG9jKQpkaWZmIC0tZ2l0IGEvY2Fw
cy9zcmMvbnNTY3JpcHRTZWN1cml0eU1hbmFnZXIuY3BwIGIvY2Fwcy9zcmMvbnNTY3JpcHRTZWN1
cml0eU1hbmFnZXIuY3BwCi0tLSBhL2NhcHMvc3JjL25zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmNw
cAorKysgYi9jYXBzL3NyYy9uc1NjcmlwdFNlY3VyaXR5TWFuYWdlci5jcHAKQEAgLTE0ODEsMTcg
KzE0ODEsMTcgQEAgbnNTY3JpcHRTZWN1cml0eU1hbmFnZXI6OkNoZWNrTG9hZFVSSVdpdAogICAg
IC8vIENoZWNrIGZvciB1cmlzIHRoYXQgYXJlIG9ubHkgbG9hZGFibGUgYnkgcHJpbmNpcGFscyB0
aGF0IHN1YnN1bWUgdGhlbQogICAgIGJvb2wgaGFzRmxhZ3M7CiAgICAgcnYgPSBOU19VUklDaGFp
bkhhc0ZsYWdzKHRhcmdldEJhc2VVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVByb3RvY29sSGFuZGxlcjo6VVJJX0xPQURBQkxFX0JZX1NVQlNVTUVSUywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmhhc0ZsYWdzKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwg
cnYpOwogCiAgICAgaWYgKGhhc0ZsYWdzKSB7Ci0gICAgICAgIHJldHVybiBhUHJpbmNpcGFsLT5D
aGVja01heUxvYWQodGFyZ2V0QmFzZVVSSSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBhUHJpbmNp
cGFsLT5DaGVja01heUxvYWQodGFyZ2V0QmFzZVVSSSwgdHJ1ZSwgZmFsc2UpOwogICAgIH0KIAog
ICAgIC8vLS0gZ2V0IHRoZSBzb3VyY2Ugc2NoZW1lCiAgICAgbnNDQXV0b1N0cmluZyBzb3VyY2VT
Y2hlbWU7CiAgICAgcnYgPSBzb3VyY2VCYXNlVVJJLT5HZXRTY2hlbWUoc291cmNlU2NoZW1lKTsK
ICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgcmV0dXJuIHJ2OwogCiAgICAgaWYgKHNvdXJjZVNjaGVt
ZS5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKE5TX05VTExQUklOQ0lQQUxfU0NIRU1FKSkgewpkaWZm
IC0tZ2l0IGEvY2Fwcy9zcmMvbnNTeXN0ZW1QcmluY2lwYWwuY3BwIGIvY2Fwcy9zcmMvbnNTeXN0
ZW1QcmluY2lwYWwuY3BwCi0tLSBhL2NhcHMvc3JjL25zU3lzdGVtUHJpbmNpcGFsLmNwcAorKysg
Yi9jYXBzL3NyYy9uc1N5c3RlbVByaW5jaXBhbC5jcHAKQEAgLTE0MSwxNyArMTQxLDE3IEBAIG5z
U3lzdGVtUHJpbmNpcGFsOjpTdWJzdW1lcyhuc0lQcmluY2lwYWwKIE5TX0lNRVRIT0RJTVAKIG5z
U3lzdGVtUHJpbmNpcGFsOjpTdWJzdW1lc0lnbm9yaW5nRG9tYWluKG5zSVByaW5jaXBhbCAqb3Ro
ZXIsIGJvb2wgKnJlc3VsdCkKIHsKICAgICAqcmVzdWx0ID0gdHJ1ZTsKICAgICByZXR1cm4gTlNf
T0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKLW5zU3lzdGVtUHJpbmNpcGFsOjpDaGVja01heUxvYWQo
bnNJVVJJKiB1cmksIGJvb2wgYVJlcG9ydCkKK25zU3lzdGVtUHJpbmNpcGFsOjpDaGVja01heUxv
YWQobnNJVVJJKiB1cmksIGJvb2wgYVJlcG9ydCwgYm9vbCBhQWxsb3dJZkluaGVyaXRzUHJpbmNp
cGFsKQogewogICAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAogbnNTeXN0ZW1Q
cmluY2lwYWw6OkdldEhhc2hWYWx1ZShQUlVpbnQzMiAqcmVzdWx0KQogewogICAgICpyZXN1bHQg
PSBOU19QVFJfVE9fSU5UMzIodGhpcyk7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGlj
L25zQ29udGVudFV0aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgK
LS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCisrKyBiL2NvbnRlbnQv
YmFzZS9wdWJsaWMvbnNDb250ZW50VXRpbHMuaApAQCAtMTcwOSwxNyArMTcwOSwxNyBAQCBwdWJs
aWM6CiAgICAqCiAgICAqIEBwYXJhbSBhU2NyaXB0Q29udGV4dCB0aGUgc2NyaXB0IGNvbnRleHQg
dG8gZ2V0IHRoZSBkb2N1bWVudCBmb3I7IGNhbiBiZSBudWxsCiAgICAqCiAgICAqIEByZXR1cm4g
dGhlIGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NyaXB0IGNvbnRleHQKICAgICovCiAg
IHN0YXRpYyBhbHJlYWR5X0FkZFJlZmVkPG5zSURvY3VtZW50PgogICBHZXREb2N1bWVudEZyb21T
Y3JpcHRDb250ZXh0KG5zSVNjcmlwdENvbnRleHQgKmFTY3JpcHRDb250ZXh0KTsKIAotICBzdGF0
aWMgYm9vbCBDaGVja01heUxvYWQobnNJUHJpbmNpcGFsKiBhUHJpbmNpcGFsLCBuc0lDaGFubmVs
KiBhQ2hhbm5lbCk7CisgIHN0YXRpYyBib29sIENoZWNrTWF5TG9hZChuc0lQcmluY2lwYWwqIGFQ
cmluY2lwYWwsIG5zSUNoYW5uZWwqIGFDaGFubmVsLCBib29sIGFBbGxvd0lmSW5oZXJpdHNQcmlu
Y2lwYWwpOwogCiAgIC8qKgogICAgKiBUaGUgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIHRoZSBjYWxs
ZXIgY2FuIGFjY2VzcyBuYXRpdmUgYW5vbnltb3VzIGNvbnRlbnQuCiAgICAqIElmIHRoZXJlIGlz
IG5vIEpTIGluIHRoZSBzdGFjayBvciBwcml2aWxlZ2VkIEpTIGlzIHJ1bm5pbmcsIHRoaXMKICAg
ICogbWV0aG9kIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNlLgogICAgKi8KICAgc3RhdGlj
IGJvb2wgQ2FuQWNjZXNzTmF0aXZlQW5vbigpOwogCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uv
c3JjL25zQ29udGVudFNpbmsuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRTaW5rLmNw
cAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFNpbmsuY3BwCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNDb250ZW50U2luay5jcHAKQEAgLTEwNDIsMTcgKzEwNDIsMTcgQEAgbnNDb250
ZW50U2luazo6UHJvY2Vzc09mZmxpbmVNYW5pZmVzdChjbwogICAgIG5zQ29udGVudFV0aWxzOjpO
ZXdVUklXaXRoRG9jdW1lbnRDaGFyc2V0KGdldHRlcl9BZGRSZWZzKG1hbmlmZXN0VVJJKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTWFuaWZlc3RTcGVj
LCBtRG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbURvY3VtZW50VVJJKTsKICAgICBpZiAoIW1hbmlmZXN0VVJJKSB7CiAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgLy8gRG9jdW1lbnRzIG11c3QgbGlzdCBhIG1hbmlmZXN0IGZyb20gdGhl
IHNhbWUgb3JpZ2luCi0gICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+Q2hlY2tN
YXlMb2FkKG1hbmlmZXN0VVJJLCB0cnVlKTsKKyAgICBydiA9IG1Eb2N1bWVudC0+Tm9kZVByaW5j
aXBhbCgpLT5DaGVja01heUxvYWQobWFuaWZlc3RVUkksIHRydWUsIGZhbHNlKTsKICAgICBpZiAo
TlNfRkFJTEVEKHJ2KSkgewogICAgICAgYWN0aW9uID0gQ0FDSEVfU0VMRUNUSU9OX1JFU0VMRUNU
X1dJVEhPVVRfTUFOSUZFU1Q7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgLy8gT25seSBjb250
aW51ZSBpZiB0aGUgZG9jdW1lbnQgaGFzIHBlcm1pc3Npb24gdG8gdXNlIG9mZmxpbmUgQVBJcy4K
ICAgICAgIGlmICghbnNDb250ZW50VXRpbHM6Ok9mZmxpbmVBcHBBbGxvd2VkKG1Eb2N1bWVudC0+
Tm9kZVByaW5jaXBhbCgpKSkgewogICAgICAgICByZXR1cm47CiAgICAgICB9CmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMv
bnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMu
Y3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC00NDk3LDE3
ICs0NDk3LDE3IEBAIG5zQ29udGVudFV0aWxzOjpDaGVja1NlY3VyaXR5QmVmb3JlTG9hZCgKIAog
ICAvLyBTYW1lIE9yaWdpbgogICBpZiAoKGFBbGxvd0RhdGEgJiYgU2NoZW1lSXMoYVVSSVRvTG9h
ZCwgImRhdGEiKSkgfHwKICAgICAgICgoYUNoZWNrTG9hZEZsYWdzICYgbnNJU2NyaXB0U2VjdXJp
dHlNYW5hZ2VyOjpBTExPV19DSFJPTUUpICYmCiAgICAgICAgU2NoZW1lSXMoYVVSSVRvTG9hZCwg
ImNocm9tZSIpKSkgewogICAgIHJldHVybiBOU19PSzsKICAgfQogCi0gIHJldHVybiBhTG9hZGlu
Z1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGFVUklUb0xvYWQsIHRydWUpOworICByZXR1cm4gYUxv
YWRpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJVG9Mb2FkLCB0cnVlLCBmYWxzZSk7CiB9
CiAKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpJc1N5c3RlbVByaW5jaXBhbChuc0lQcmluY2lwYWwq
IGFQcmluY2lwYWwpCiB7CiAgIGJvb2wgaXNTeXN0ZW07CiAgIG5zcmVzdWx0IHJ2ID0gc1NlY3Vy
aXR5TWFuYWdlci0+SXNTeXN0ZW1QcmluY2lwYWwoYVByaW5jaXBhbCwgJmlzU3lzdGVtKTsKICAg
cmV0dXJuIE5TX1NVQ0NFRURFRChydikgJiYgaXNTeXN0ZW07CkBAIC01NjE1LDE5ICs1NjE1LDE5
IEBAIG5zQ29udGVudFV0aWxzOjpDaGVja1NhbWVPcmlnaW4obnNJQ2hhbm4KIAogICBuc0NPTVB0
cjxuc0lVUkk+IG5ld1VSSTsKICAgYU5ld0NoYW5uZWwtPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhu
ZXdVUkkpKTsKICAgbnNDT01QdHI8bnNJVVJJPiBuZXdPcmlnaW5hbFVSSTsKICAgYU5ld0NoYW5u
ZWwtPkdldE9yaWdpbmFsVVJJKGdldHRlcl9BZGRSZWZzKG5ld09yaWdpbmFsVVJJKSk7CiAKICAg
TlNfRU5TVVJFX1NUQVRFKG9sZFByaW5jaXBhbCAmJiBuZXdVUkkgJiYgbmV3T3JpZ2luYWxVUkkp
OwogCi0gIG5zcmVzdWx0IHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJLCBm
YWxzZSk7CisgIG5zcmVzdWx0IHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJ
LCBmYWxzZSwgZmFsc2UpOwogICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSAmJiBuZXdPcmlnaW5hbFVS
SSAhPSBuZXdVUkkpIHsKLSAgICBydiA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld09y
aWdpbmFsVVJJLCBmYWxzZSk7CisgICAgcnYgPSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChu
ZXdPcmlnaW5hbFVSSSwgZmFsc2UsIGZhbHNlKTsKICAgfQogCiAgIHJldHVybiBydjsKIH0KIAog
TlNfSU1QTF9JU1VQUE9SVFMyKG5zU2FtZU9yaWdpbkNoZWNrZXIsCiAgICAgICAgICAgICAgICAg
ICAgbnNJQ2hhbm5lbEV2ZW50U2luaywKICAgICAgICAgICAgICAgICAgICBuc0lJbnRlcmZhY2VS
ZXF1ZXN0b3IpCkBAIC01Nzg4LDIzICs1Nzg4LDIzIEBAIG5zQ29udGVudFV0aWxzOjpHZXREb2N1
bWVudEZyb21TY3JpcHRDb24KICAgICAgIENhbGxRdWVyeUludGVyZmFjZShkb21kb2MsICZkb2Mp
OwogICAgIH0KICAgfQogICByZXR1cm4gZG9jOwogfQogCiAvKiBzdGF0aWMgKi8KIGJvb2wKLW5z
Q29udGVudFV0aWxzOjpDaGVja01heUxvYWQobnNJUHJpbmNpcGFsKiBhUHJpbmNpcGFsLCBuc0lD
aGFubmVsKiBhQ2hhbm5lbCkKK25zQ29udGVudFV0aWxzOjpDaGVja01heUxvYWQobnNJUHJpbmNp
cGFsKiBhUHJpbmNpcGFsLCBuc0lDaGFubmVsKiBhQ2hhbm5lbCwgYm9vbCBhQWxsb3dJZkluaGVy
aXRzUHJpbmNpcGFsKQogewogICBuc0NPTVB0cjxuc0lVUkk+IGNoYW5uZWxVUkk7CiAgIG5zcmVz
dWx0IHJ2ID0gTlNfR2V0RmluYWxDaGFubmVsVVJJKGFDaGFubmVsLCBnZXR0ZXJfQWRkUmVmcyhj
aGFubmVsVVJJKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBmYWxzZSk7CiAKLSAgcmV0dXJu
IE5TX1NVQ0NFRURFRChhUHJpbmNpcGFsLT5DaGVja01heUxvYWQoY2hhbm5lbFVSSSwgZmFsc2Up
KTsKKyAgcmV0dXJuIE5TX1NVQ0NFRURFRChhUHJpbmNpcGFsLT5DaGVja01heUxvYWQoY2hhbm5l
bFVSSSwgZmFsc2UsIGFBbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpKTsKIH0KIAogbnNDb250ZW50
VHlwZVBhcnNlcjo6bnNDb250ZW50VHlwZVBhcnNlcihjb25zdCBuc0FTdHJpbmcmIGFTdHJpbmcp
CiAgIDogbVN0cmluZyhhU3RyaW5nKSwgbVNlcnZpY2UobnNudWxsKQogewogICBDYWxsR2V0U2Vy
dmljZSgiQG1vemlsbGEub3JnL25ldHdvcmsvbWltZS1oZHJwYXJhbTsxIiwgJm1TZXJ2aWNlKTsK
IH0KIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0Nyb3NzU2l0ZUxpc3RlbmVyUHJv
eHkuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHkuY3BwCi0t
LSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDcm9zc1NpdGVMaXN0ZW5lclByb3h5LmNwcAorKysgYi9j
b250ZW50L2Jhc2Uvc3JjL25zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5jcHAKQEAgLTc3NiwyMCAr
Nzc2LDIwIEBAIG5zQ09SU0xpc3RlbmVyUHJveHk6OlVwZGF0ZUNoYW5uZWwobnNJQ2gKICAgaWYg
KG9yaWdpbmFsVVJJICE9IHVyaSkgewogICAgIHJ2ID0gbnNDb250ZW50VXRpbHM6OkdldFNlY3Vy
aXR5TWFuYWdlcigpLT4KICAgICAgIENoZWNrTG9hZFVSSVdpdGhQcmluY2lwYWwobVJlcXVlc3Rp
bmdQcmluY2lwYWwsIG9yaWdpbmFsVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lTY3JpcHRTZWN1cml0eU1hbmFnZXI6OlNUQU5EQVJEKTsKICAgICBOU19FTlNVUkVfU1VD
Q0VTUyhydiwgcnYpOwogICB9CiAKICAgaWYgKCFtSGFzQmVlbkNyb3NzU2l0ZSAmJgotICAgICAg
TlNfU1VDQ0VFREVEKG1SZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQodXJpLCBmYWxz
ZSkpICYmCisgICAgICBOU19TVUNDRUVERUQobVJlcXVlc3RpbmdQcmluY2lwYWwtPkNoZWNrTWF5
TG9hZCh1cmksIGZhbHNlLCBmYWxzZSkpICYmCiAgICAgICAob3JpZ2luYWxVUkkgPT0gdXJpIHx8
CiAgICAgICAgTlNfU1VDQ0VFREVEKG1SZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQo
b3JpZ2luYWxVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmFsc2UpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UpKSkpIHsKICAgICByZXR1cm4gTlNf
T0s7CiAgIH0KIAogICAvLyBJdCdzIGEgY3Jvc3Mgc2l0ZSBsb2FkCiAgIG1IYXNCZWVuQ3Jvc3NT
aXRlID0gdHJ1ZTsKIAogICBuc0NTdHJpbmcgdXNlcnBhc3M7CiAgIHVyaS0+R2V0VXNlclBhc3Mo
dXNlcnBhc3MpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBi
L2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9u
c0RvY3VtZW50LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0x
MTAwLDI4ICsxMTAwLDIyIEBAIG5zRXh0ZXJuYWxSZXNvdXJjZU1hcDo6UGVuZGluZ0xvYWQ6OlN0
YXIKIAogICBuc0lQcmluY2lwYWwqIHJlcXVlc3RpbmdQcmluY2lwYWwgPSBhUmVxdWVzdGluZ05v
ZGUtPk5vZGVQcmluY2lwYWwoKTsKIAogICBuc3Jlc3VsdCBydiA9IG5zQ29udGVudFV0aWxzOjpH
ZXRTZWN1cml0eU1hbmFnZXIoKS0+CiAgICAgQ2hlY2tMb2FkVVJJV2l0aFByaW5jaXBhbChyZXF1
ZXN0aW5nUHJpbmNpcGFsLCBhVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
U2NyaXB0U2VjdXJpdHlNYW5hZ2VyOjpTVEFOREFSRCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2
LCBydik7CiAgIAotICAvLyBBbGxvdyBkYXRhIFVSSXMgKGxldCB0aGVtIHNraXAgdGhlIENoZWNr
TWF5TG9hZCBjYWxsKSwgc2luY2Ugd2Ugd2FudAorICAvLyBBbGxvdyBkYXRhIFVSSXMgYW5kIG90
aGVyIFVSSSdzIHRoYXQgaW5oZXJpdCB0aGVpciBwcmluY2lwYWwgYnkgcGFzc2luZworICAvLyB0
cnVlIGFzIHRoZSAzcmQgYXJndW1lbnQgb2YgQ2hlY2tNYXlMb2FkLCBzaW5jZSB3ZSB3YW50CiAg
IC8vIHRvIGFsbG93IGV4dGVybmFsIHJlc291cmNlcyBmcm9tIGRhdGEgVVJJcyByZWdhcmRsZXNz
IG9mIHRoZSBkaWZmZXJlbmNlCiAgIC8vIGluIFVSSSBzY2hlbWUuCi0gIGJvb2wgZG9lc0luaGVy
aXRTZWN1cml0eUNvbnRleHQ7Ci0gIHJ2ID0KLSAgICBOU19VUklDaGFpbkhhc0ZsYWdzKGFVUkks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBuc0lQcm90b2NvbEhhbmRsZXI6OlVSSV9JTkhFUklU
U19TRUNVUklUWV9DT05URVhULAotICAgICAgICAgICAgICAgICAgICAgICAgJmRvZXNJbmhlcml0
U2VjdXJpdHlDb250ZXh0KTsKLSAgaWYgKE5TX0ZBSUxFRChydikgfHwgIWRvZXNJbmhlcml0U2Vj
dXJpdHlDb250ZXh0KSB7Ci0gICAgcnYgPSByZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxv
YWQoYVVSSSwgdHJ1ZSk7Ci0gICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKLSAgfQorICBy
diA9IHJlcXVlc3RpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJLCB0cnVlLCB0cnVlKTsK
KyAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBQUkludDE2IHNob3VsZExvYWQgPSBu
c0lDb250ZW50UG9saWN5OjpBQ0NFUFQ7CiAgIHJ2ID0gTlNfQ2hlY2tDb250ZW50TG9hZFBvbGlj
eShuc0lDb250ZW50UG9saWN5OjpUWVBFX09USEVSLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Rp
bmdQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVxdWVzdGlu
Z05vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbXB0eUNTdHJpbmcoKSwg
Ly9taW1lIGd1ZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc251bGwsICAg
ICAgICAgLy9leHRyYQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc1hNTEh0dHBSZXF1
ZXN0LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNYTUxIdHRwUmVxdWVzdC5jcHAKLS0tIGEvY29u
dGVudC9iYXNlL3NyYy9uc1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3Jj
L25zWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC0xNzQ3LDI4ICsxNzQ3LDE5IEBAIG5zWE1MSHR0cFJl
cXVlc3Q6OklzU3lzdGVtWEhSKCkKIG5zcmVzdWx0CiBuc1hNTEh0dHBSZXF1ZXN0OjpDaGVja0No
YW5uZWxGb3JDcm9zc1NpdGVSZXF1ZXN0KG5zSUNoYW5uZWwqIGFDaGFubmVsKQogewogICAvLyBG
aXJzdCBjaGVjayBpZiBjcm9zcy1zaXRlIHJlcXVlc3RzIGFyZSBlbmFibGVkLi4uCiAgIGlmIChJ
c1N5c3RlbVhIUigpKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKLSAgLy8gLi4ub3IgaWYg
dGhpcyBpcyBhIHNhbWUtb3JpZ2luIHJlcXVlc3QuCi0gIGlmIChuc0NvbnRlbnRVdGlsczo6Q2hl
Y2tNYXlMb2FkKG1QcmluY2lwYWwsIGFDaGFubmVsKSkgewotICAgIHJldHVybiBOU19PSzsKLSAg
fQotCi0gIC8vIGV4ZW1wdCBkYXRhIFVSSXMgZnJvbSB0aGUgc2FtZSBvcmlnaW4gY2hlY2suCi0g
IG5zQ09NUHRyPG5zSVVSST4gY2hhbm5lbFVSSTsKLSAgYm9vbCBkYXRhU2NoZW1lID0gZmFsc2U7
Ci0gIGlmIChOU19TVUNDRUVERUQoTlNfR2V0RmluYWxDaGFubmVsVVJJKGFDaGFubmVsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhjaGFu
bmVsVVJJKSkpICYmCi0gICAgICBOU19TVUNDRUVERUQoY2hhbm5lbFVSSS0+U2NoZW1lSXMoImRh
dGEiLCAmZGF0YVNjaGVtZSkpICYmCi0gICAgICBkYXRhU2NoZW1lKSB7CisgIC8vIElmIHRoaXMg
aXMgYSBzYW1lLW9yaWdpbiByZXF1ZXN0IG9yIHRoZSBjaGFubmVsJ3MgVVJJIGluaGVyaXRzCisg
IC8vIGl0cyBwcmluY2lwYWwsIGl0J3MgYWxsb3dlZC4KKyAgaWYgKG5zQ29udGVudFV0aWxzOjpD
aGVja01heUxvYWQobVByaW5jaXBhbCwgYUNoYW5uZWwsIHRydWUpKSB7CiAgICAgcmV0dXJuIE5T
X09LOwogICB9CiAKICAgLy8gVGhpcyBpcyBhIGNyb3NzLXNpdGUgcmVxdWVzdAogICBtU3RhdGUg
fD0gWE1MX0hUVFBfUkVRVUVTVF9VU0VfWFNJVEVfQUM7CiAKICAgLy8gQ2hlY2sgaWYgd2UgbmVl
ZCB0byBkbyBhIHByZWZsaWdodCByZXF1ZXN0LgogICBuc0NPTVB0cjxuc0lIdHRwQ2hhbm5lbD4g
aHR0cENoYW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShhQ2hhbm5lbCk7CmRpZmYgLS1naXQgYS9j
b250ZW50L3hibC9zcmMvbnNYQkxTZXJ2aWNlLmNwcCBiL2NvbnRlbnQveGJsL3NyYy9uc1hCTFNl
cnZpY2UuY3BwCi0tLSBhL2NvbnRlbnQveGJsL3NyYy9uc1hCTFNlcnZpY2UuY3BwCisrKyBiL2Nv
bnRlbnQveGJsL3NyYy9uc1hCTFNlcnZpY2UuY3BwCkBAIC05NzcsMTcgKzk3NywxNyBAQCBuc1hC
TFNlcnZpY2U6OkxvYWRCaW5kaW5nRG9jdW1lbnRJbmZvKG5zCiAgICAgTlNfRU5TVVJFX1NVQ0NF
U1MocnYsIE5TX0VSUk9SX1hCTF9CTE9DS0VEKTsKIAogICAgIGlmICghSXNTeXN0ZW1PckNocm9t
ZVVSTFByaW5jaXBhbChhT3JpZ2luUHJpbmNpcGFsKSkgewogICAgICAgLy8gQWxzbyBtYWtlIHN1
cmUgdGhhdCB3ZSdyZSBzYW1lLW9yaWdpbiB3aXRoIHRoZSBib3VuZCBkb2N1bWVudAogICAgICAg
Ly8gZXhjZXB0IGlmIHRoZSBzdHlsZXNoZWV0IGhhcyB0aGUgc3lzdGVtIHByaW5jaXBhbC4KICAg
ICAgIGlmICghKGdBbGxvd0RhdGFVUklzICYmIFNjaGVtZUlzKGFCaW5kaW5nVVJJLCAiZGF0YSIp
KSAmJgogICAgICAgICAgICFTY2hlbWVJcyhhQmluZGluZ1VSSSwgImNocm9tZSIpKSB7CiAgICAg
ICAgIHJ2ID0gYUJvdW5kRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+Q2hlY2tNYXlMb2FkKGFC
aW5kaW5nVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgZmFsc2UpOwogICAgICAgICBOU19FTlNVUkVf
U1VDQ0VTUyhydiwgTlNfRVJST1JfWEJMX0JMT0NLRUQpOwogICAgICAgfQogCiAgICAgICAvLyBG
aW5hbGx5IGNoZWNrIGlmIHRoaXMgZG9jdW1lbnQgaXMgYWxsb3dlZCB0byB1c2UgWEJMIGF0IGFs
bC4KICAgICAgIE5TX0VOU1VSRV9UUlVFKGFCb3VuZERvY3VtZW50LT5BbGxvd1hVTFhCTCgpLAog
ICAgICAgICAgICAgICAgICAgICAgTlNfRVJST1JfWEJMX0JMT0NLRUQpOwogICAgIH0KICAgfQpk
aWZmIC0tZ2l0IGEvY29udGVudC94bWwvZG9jdW1lbnQvc3JjL25zWE1MRG9jdW1lbnQuY3BwIGIv
Y29udGVudC94bWwvZG9jdW1lbnQvc3JjL25zWE1MRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQv
eG1sL2RvY3VtZW50L3NyYy9uc1hNTERvY3VtZW50LmNwcAorKysgYi9jb250ZW50L3htbC9kb2N1
bWVudC9zcmMvbnNYTUxEb2N1bWVudC5jcHAKQEAgLTM2MiwxNyArMzYyLDE3IEBAIG5zWE1MRG9j
dW1lbnQ6OkxvYWQoY29uc3QgbnNBU3RyaW5nJiBhVXIKICAgLy8gdGhhdCB3ZSBkb24ndCBlbmQg
dXAgaW4gYSBjYXNlIHdoZXJlIGNvZGUgd2l0aCBlbGV2YXRlZCBwcml2aWxlZ2VzIGlzCiAgIC8v
IGNhbGxpbmcgdXMgYW5kIGNoYW5naW5nIHRoZSBwcmluY2lwYWwgb2YgdGhpcyBkb2N1bWVudC4K
IAogICAvLyBFbmZvcmNlIHNhbWUtb3JpZ2luIGV2ZW4gZm9yIGNocm9tZSBsb2FkZXJzIHRvIGF2
b2lkIHNvbWVvbmUgYWNjaWRlbnRhbGx5CiAgIC8vIHVzaW5nIGEgZG9jdW1lbnQgdGhhdCBjb250
ZW50IGhhcyBhIHJlZmVyZW5jZSB0byBhbmQgdHVybiB0aGF0IGludG8gYQogICAvLyBjaHJvbWUg
ZG9jdW1lbnQuCiAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gcHJpbmNpcGFsID0gTm9kZVByaW5j
aXBhbCgpOwogICBpZiAoIW5zQ29udGVudFV0aWxzOjpJc1N5c3RlbVByaW5jaXBhbChwcmluY2lw
YWwpKSB7Ci0gICAgcnYgPSBwcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIGZhbHNlKTsKKyAg
ICBydiA9IHByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UsIGZhbHNlKTsKICAgICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgUFJJbnQxNiBzaG91bGRMb2FkID0gbnNJ
Q29udGVudFBvbGljeTo6QUNDRVBUOwogICAgIHJ2ID0gTlNfQ2hlY2tDb250ZW50TG9hZFBvbGlj
eShuc0lDb250ZW50UG9saWN5OjpUWVBFX1hNTEhUVFBSRVFVRVNULAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGlu
Z0RvYyA/IGNhbGxpbmdEb2MuZ2V0KCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PG5zSURvY3VtZW50Kj4odGhpcyksCmRpZmYgLS1naXQgYS9jb250
ZW50L3h1bC9kb2N1bWVudC9zcmMvbnNYVUxEb2N1bWVudC5jcHAgYi9jb250ZW50L3h1bC9kb2N1
bWVudC9zcmMvbnNYVUxEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC94dWwvZG9jdW1lbnQvc3Jj
L25zWFVMRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQveHVsL2RvY3VtZW50L3NyYy9uc1hVTERv
Y3VtZW50LmNwcApAQCAtMjcwMCwxNyArMjcwMCwxNyBAQCBuc1hVTERvY3VtZW50OjpMb2FkT3Zl
cmxheUludGVybmFsKG5zSVVSCiAKICAgICAvLyBDaHJvbWUgZG9jdW1lbnRzIGFyZSBhbGxvd2Vk
IHRvIGxvYWQgb3ZlcmxheXMgZnJvbSBhbnl3aGVyZS4KICAgICAvLyBJbiBhbGwgb3RoZXIgY2Fz
ZXMsIHRoZSBvdmVybGF5IGlzIG9ubHkgYWxsb3dlZCB0byBsb2FkIGlmCiAgICAgLy8gdGhlIG1h
c3RlciBkb2N1bWVudCBhbmQgcHJvdG90eXBlIGRvY3VtZW50IGhhdmUgdGhlIHNhbWUgb3JpZ2lu
LgogCiAgICAgYm9vbCBkb2N1bWVudElzQ2hyb21lID0gSXNDaHJvbWVVUkkobURvY3VtZW50VVJJ
KTsKICAgICBpZiAoIWRvY3VtZW50SXNDaHJvbWUpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHdl
J3JlIGFsbG93ZWQgdG8gbG9hZCB0aGlzIG92ZXJsYXkuCi0gICAgICAgIHJ2ID0gTm9kZVByaW5j
aXBhbCgpLT5DaGVja01heUxvYWQoYVVSSSwgdHJ1ZSk7CisgICAgICAgIHJ2ID0gTm9kZVByaW5j
aXBhbCgpLT5DaGVja01heUxvYWQoYVVSSSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICBpZiAoTlNf
RkFJTEVEKHJ2KSkgewogICAgICAgICAgICAgKmFGYWlsdXJlRnJvbUNvbnRlbnQgPSB0cnVlOwog
ICAgICAgICAgICAgcmV0dXJuIHJ2OwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTG9vayBp
biB0aGUgcHJvdG90eXBlIGNhY2hlIGZvciB0aGUgcHJvdG90eXBlIGRvY3VtZW50IHdpdGgKICAg
ICAvLyB0aGUgc3BlY2lmaWVkIG92ZXJsYXkgVVJJLiBPbmx5IHVzZSB0aGUgY2FjaGUgaWYgdGhl
IGNvbnRhaW5pbmcKZGlmZiAtLWdpdCBhL2NvbnRlbnQveHVsL3RlbXBsYXRlcy9zcmMvbnNYVUxU
ZW1wbGF0ZUJ1aWxkZXIuY3BwIGIvY29udGVudC94dWwvdGVtcGxhdGVzL3NyYy9uc1hVTFRlbXBs
YXRlQnVpbGRlci5jcHAKLS0tIGEvY29udGVudC94dWwvdGVtcGxhdGVzL3NyYy9uc1hVTFRlbXBs
YXRlQnVpbGRlci5jcHAKKysrIGIvY29udGVudC94dWwvdGVtcGxhdGVzL3NyYy9uc1hVTFRlbXBs
YXRlQnVpbGRlci5jcHAKQEAgLTEzNzIsMTcgKzEzNzIsMTcgQEAgbnNYVUxUZW1wbGF0ZUJ1aWxk
ZXI6OkxvYWREYXRhU291cmNlVXJscwogCiAgICAgICAgIG5zQ09NUHRyPG5zSVVSST4gdXJpOwog
ICAgICAgICBydiA9IE5TX05ld1VSSShnZXR0ZXJfQWRkUmVmcyh1cmkpLCB1cmlTdHIpOwogICAg
ICAgICBpZiAoTlNfRkFJTEVEKHJ2KSB8fCAhdXJpKQogICAgICAgICAgICAgY29udGludWU7IC8v
IE5lY2tvIHdpbGwgYmFyZiBpZiBvdXIgVVJJIGlzIHdlaXJkCiAKICAgICAgICAgLy8gZG9uJ3Qg
YWRkIHRoZSB1cmkgdG8gdGhlIGxpc3QgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCBhbGxvd2VkIHRv
CiAgICAgICAgIC8vIGxvYWQgaXQKLSAgICAgICAgaWYgKCFpc1RydXN0ZWQgJiYgTlNfRkFJTEVE
KGRvY1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgdHJ1ZSkpKQorICAgICAgICBpZiAoIWlz
VHJ1c3RlZCAmJiBOU19GQUlMRUQoZG9jUHJpbmNpcGFsLT5DaGVja01heUxvYWQodXJpLCB0cnVl
LCBmYWxzZSkpKQogICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHVyaUxpc3QtPkFwcGVu
ZEVsZW1lbnQodXJpLCBmYWxzZSk7CiAgICAgfQogCiAgICAgbnNDT01QdHI8bnNJRE9NTm9kZT4g
cm9vdE5vZGUgPSBkb19RdWVyeUludGVyZmFjZShtUm9vdCk7CiAgICAgcnYgPSBtUXVlcnlQcm9j
ZXNzb3ItPkdldERhdGFzb3VyY2UodXJpTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByb290Tm9kZSwKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NT
aGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxsL2Jh
c2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcApAQCAt
OTg4OSwxNyArOTg4OSwxNyBAQCBuc0RvY1NoZWxsOjpBZGRTdGF0ZShuc0lWYXJpYW50ICphRGF0
YSwgCiAKICAgICAgICAgICAgIGlmICghZG9jU2NyaXB0T2JqKSB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gcHJpbmNpcGFsID0gZG9jU2NyaXB0T2JqLT5H
ZXRQcmluY2lwYWwoKTsKIAogICAgICAgICAgICAgaWYgKCFwcmluY2lwYWwgfHwKLSAgICAgICAg
ICAgICAgICBOU19GQUlMRUQocHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJLCB0cnVlKSkp
IHsKKyAgICAgICAgICAgICAgICBOU19GQUlMRUQocHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3
VVJJLCB0cnVlLCBmYWxzZSkpKSB7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gTlNfRVJST1Jf
RE9NX1NFQ1VSSVRZX0VSUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlm
IChtQ3VycmVudFVSSSkgewogICAgICAgICAgICAgbUN1cnJlbnRVUkktPkVxdWFscyhuZXdVUkks
ICZlcXVhbFVSSXMpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kb20vd29ya2Vycy9TY3JpcHRM
b2FkZXIuY3BwIGIvZG9tL3dvcmtlcnMvU2NyaXB0TG9hZGVyLmNwcAotLS0gYS9kb20vd29ya2Vy
cy9TY3JpcHRMb2FkZXIuY3BwCisrKyBiL2RvbS93b3JrZXJzL1NjcmlwdExvYWRlci5jcHAKQEAg
LTMyOSwyMSArMzI5LDIyIEBAIHB1YmxpYzoKICAgICAgIC8vIElmIHRoaXMgc2NyaXB0IGxvYWRl
ciBpcyBiZWluZyB1c2VkIHRvIG1ha2UgYSBuZXcgd29ya2VyIHRoZW4gd2UgbmVlZAogICAgICAg
Ly8gdG8gZG8gYSBzYW1lLW9yaWdpbiBjaGVjay4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2xlYXIg
dGhlIGxvYWQgd2l0aCB0aGUKICAgICAgIC8vIHNlY3VyaXR5IG1hbmFnZXIuCiAgICAgICBpZiAo
bUlzV29ya2VyU2NyaXB0KSB7CiAgICAgICAgIG5zQ1N0cmluZyBzY2hlbWU7CiAgICAgICAgIHJ2
ID0gdXJpLT5HZXRTY2hlbWUoc2NoZW1lKTsKICAgICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYs
IHJ2KTsKIAotICAgICAgICAvLyBXZSBleGVtcHQgZGF0YSBVUkxzIGZyb20gdGhlIHNhbWUgb3Jp
Z2luIGNoZWNrLgotICAgICAgICBpZiAoIXNjaGVtZS5FcXVhbHNMaXRlcmFsKCJkYXRhIikpIHsK
LSAgICAgICAgICBydiA9IHByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UpOwotICAg
ICAgICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7Ci0gICAgICAgIH0KKyAgICAgICAgLy8g
V2UgcGFzcyB0cnVlIGFzIHRoZSAzcmQgYXJndW1lbnQgdG8gY2hlY2tNYXlMb2FkIGhlcmUuCisg
ICAgICAgIC8vIFRoaXMgYWxsb3dzIHdvcmtlcnMgaW4gc2FuZGJveGVkIGRvY3VtZW50cyB0byBs
b2FkIGRhdGEgVVJMcworICAgICAgICAvLyAoYW5kIG90aGVyIFVSTHMgdGhhdCBpbmhlcml0IHRo
ZWlyIHByaW5jaXBhbCBmcm9tIHRoZWlyCisgICAgICAgIC8vIGNyZWF0b3IuKQorICAgICAgICBy
diA9IHByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UsIHRydWUpOworICAgICAgICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAg
IHJ2ID0gc2VjTWFuLT5DaGVja0xvYWRVUklXaXRoUHJpbmNpcGFsKHByaW5jaXBhbCwgdXJpLCAw
KTsKICAgICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgICAgIH0KIAogICAgICAg
Ly8gV2UgbmVlZCB0byBrbm93IHdoaWNoIGluZGV4IHdlJ3JlIG9uIGluIE9uU3RyZWFtQ29tcGxl
dGUgc28gd2Uga25vdwogICAgICAgLy8gd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQuCkBAIC01MTYs
MTkgKzUxNywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9CQURf
VVJJOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlICB7CiAgICAgICAgIG5zQ1N0cmlu
ZyBzY2hlbWU7CiAgICAgICAgIHJ2ID0gZmluYWxVUkktPkdldFNjaGVtZShzY2hlbWUpOwogICAg
ICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCi0gICAgICAgIC8vIFdlIGV4ZW1wdCBk
YXRhIHVybHMgYWdhaW4uCi0gICAgICAgIGlmICghc2NoZW1lLkVxdWFsc0xpdGVyYWwoImRhdGEi
KSAmJgotICAgICAgICAgICAgTlNfRkFJTEVEKGxvYWRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChm
aW5hbFVSSSwgZmFsc2UpKSkgeworICAgICAgICAvLyBXZSBleGVtcHQgZGF0YSB1cmxzIGFuZCBv
dGhlciBVUkkncyB0aGF0IGluaGVyaXQgdGhlaXIKKyAgICAgICAgLy8gcHJpbmNpcGFsIGFnYWlu
LgorICAgICAgICBpZiAoTlNfRkFJTEVEKGxvYWRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChmaW5h
bFVSSSwgZmFsc2UsIHRydWUpKSkgewogICAgICAgICAgIHJldHVybiBOU19FUlJPUl9ET01fQkFE
X1VSSTsKICAgICAgICAgfQogICAgICAgfQogCiAgICAgICBtV29ya2VyUHJpdmF0ZS0+U2V0UHJp
bmNpcGFsKGNoYW5uZWxQcmluY2lwYWwpOwogICAgIH0KIAogICAgIHJldHVybiBOU19PSzsKZGlm
ZiAtLWdpdCBhL2xheW91dC9zdHlsZS9Mb2FkZXIuY3BwIGIvbGF5b3V0L3N0eWxlL0xvYWRlci5j
cHAKLS0tIGEvbGF5b3V0L3N0eWxlL0xvYWRlci5jcHAKKysrIGIvbGF5b3V0L3N0eWxlL0xvYWRl
ci5jcHAKQEAgLTE1NjgsMTcgKzE1NjgsMTcgQEAgTG9hZGVyOjpMb2FkU2hlZXQoU2hlZXRMb2Fk
RGF0YSogYUxvYWREYQogICBpZiAoYUxvYWREYXRhLT5tTG9hZGVyUHJpbmNpcGFsKSB7CiAgICAg
Ym9vbCBpbmhlcml0OwogICAgIHJ2ID0gTlNfVVJJQ2hhaW5IYXNGbGFncyhhTG9hZERhdGEtPm1V
UkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByb3RvY29sSGFuZGxlcjo6VVJJ
X0lOSEVSSVRTX1NFQ1VSSVRZX0NPTlRFWFQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZpbmhlcml0KTsKICAgICBpZiAoKE5TX1NVQ0NFRURFRChydikgJiYgaW5oZXJpdCkgfHwKICAg
ICAgICAgKG5zQ29udGVudFV0aWxzOjpVUklJc0xvY2FsRmlsZShhTG9hZERhdGEtPm1VUkkpICYm
CiAgICAgICAgICBOU19TVUNDRUVERUQoYUxvYWREYXRhLT5tTG9hZGVyUHJpbmNpcGFsLT4KLSAg
ICAgICAgICAgICAgICAgICAgICBDaGVja01heUxvYWQoYUxvYWREYXRhLT5tVVJJLCBmYWxzZSkp
KSkgeworICAgICAgICAgICAgICAgICAgICAgIENoZWNrTWF5TG9hZChhTG9hZERhdGEtPm1VUkks
IGZhbHNlLCBmYWxzZSkpKSkgewogICAgICAgY2hhbm5lbC0+U2V0T3duZXIoYUxvYWREYXRhLT5t
TG9hZGVyUHJpbmNpcGFsKTsKICAgICB9CiAgIH0KIAogICAvLyBXZSBkb24ndCBoYXZlIHRvIGhv
bGQgb24gdG8gdGhlIHN0cmVhbSBsb2FkZXIuICBUaGUgb3duZXJzaGlwCiAgIC8vIG1vZGVsIGlz
OiBOZWNrbyBvd25zIHRoZSBzdHJlYW0gbG9hZGVyLCB3aGljaCBvd25zIHRoZSBsb2FkIGRhdGEs
CiAgIC8vIHdoaWNoIG93bnMgdXMKICAgbnNDT01QdHI8bnNJVW5pY2hhclN0cmVhbUxvYWRlcj4g
c3RyZWFtTG9hZGVyOwpkaWZmIC0tZ2l0IGEvcmRmL2Jhc2Uvc3JjL25zUkRGWE1MRGF0YVNvdXJj
ZS5jcHAgYi9yZGYvYmFzZS9zcmMvbnNSREZYTUxEYXRhU291cmNlLmNwcAotLS0gYS9yZGYvYmFz
ZS9zcmMvbnNSREZYTUxEYXRhU291cmNlLmNwcAorKysgYi9yZGYvYmFzZS9zcmMvbnNSREZYTUxE
YXRhU291cmNlLmNwcApAQCAtOTE1LDE5ICs5MTUsMTkgQEAgUkRGWE1MRGF0YVNvdXJjZUltcGw6
OkFzeW5jT25DaGFubmVsUmVkaQogCiAgICAgbnNDT01QdHI8bnNJVVJJPiBuZXdVUkk7CiAgICAg
YU5ld0NoYW5uZWwtPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhuZXdVUkkpKTsKICAgICBuc0NPTVB0
cjxuc0lVUkk+IG5ld09yaWdpbmFsVVJJOwogICAgIGFOZXdDaGFubmVsLT5HZXRPcmlnaW5hbFVS
SShnZXR0ZXJfQWRkUmVmcyhuZXdPcmlnaW5hbFVSSSkpOwogCiAgICAgTlNfRU5TVVJFX1NUQVRF
KG9sZFByaW5jaXBhbCAmJiBuZXdVUkkgJiYgbmV3T3JpZ2luYWxVUkkpOwogCi0gICAgcnYgPSBv
bGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChuZXdVUkksIGZhbHNlKTsKKyAgICBydiA9IG9sZFBy
aW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld1VSSSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAoTlNf
U1VDQ0VFREVEKHJ2KSAmJiBuZXdPcmlnaW5hbFVSSSAhPSBuZXdVUkkpIHsKLSAgICAgICAgcnYg
PSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChuZXdPcmlnaW5hbFVSSSwgZmFsc2UpOworICAg
ICAgICBydiA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld09yaWdpbmFsVVJJLCBmYWxz
ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChOU19GQUlMRUQocnYpKQogICAgICAgICByZXR1
cm4gcnY7CiAKICAgICBjYi0+T25SZWRpcmVjdFZlcmlmeUNhbGxiYWNrKE5TX09LKTsKICAgICBy
ZXR1cm4gTlNfT0s7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>624220</attachid>
            <date>2012-05-15 15:44:18 -0700</date>
            <delta_ts>2012-05-18 18:41:53 -0700</delta_ts>
            <desc>iframe sandbox v14</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>55339</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYzI0YjcyMWNhNWM5Y2M5MDA1Njg0Nzc2MWY0
MjEzYzQ0MTk4YjIzZQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgz
NSwxNiArODM1LDI3IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhU2FuZGJveEF0dHIp
OworCisKKyAgLyoqCiAgICAqIEZpbGwgKHdpdGggdGhlIHBhcmFtZXRlcnMgZ2l2ZW4pIHRoZSBs
b2NhbGl6ZWQgc3RyaW5nIG5hbWVkIHxhS2V5fCBpbgogICAgKiBwcm9wZXJ0aWVzIGZpbGUgfGFG
aWxlfC4KICAgICovCiBwcml2YXRlOgogICBzdGF0aWMgbnNyZXN1bHQgRm9ybWF0TG9jYWxpemVk
U3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiogYVBhcmFtcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhUGFyYW1zTGVuZ3RoLApAQCAtMTk1
NSw0MiArMTk2Niw0NCBAQCBwdWJsaWM6CiAgICAqIGZyb20gdGhlIGRvY3VtZW50IGl0IGNvbWVz
IGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQgVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRl
eHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsKIAogICAvKioKICAgICogU2V0IHRoZSBn
aXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRoZSBnaXZlbiBjaGFubmVsLCBpZgogICAg
KiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBvZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwg
bWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JBYm91dEJsYW5rIGlzIHRydWUsIHRoZW4g
YWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAgb24gaXQuCi0g
ICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LiBJZiBhRm9yY2VPd25lciBpcyB0
cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQgb24gdGhlIGNoYW5uZWwsIGV2ZW4gaWYg
dGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAorICAgKiBmcm9tIHRoZSBjaGFubmVsLgog
ICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIgdGhlIHByaW5jaXBhbCB3YXMgc2V0IHVw
IGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5lbC4KICAgICovCiAgIHN0YXRpYyBib29s
IFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lciA9IGZhbHNlKTsKIAogICBzdGF0
aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhLAogICAgICAgICAg
ICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJhc2U2NFN0cmluZyk7CiAKICAgc3RhdGlj
IG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBhQXNjaWlTdHJpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURhdGEpOwogCiAgIC8qKiBJZiBhSlNBcnJh
eSBpcyBhIEphdmFzY3JpcHQgYXJyYXksIHRoaXMgbWV0aG9kIGl0ZXJhdGVzIG92ZXIgaXRzCiAg
ICAqICBlbGVtZW50cyBhbmQgYXBwZW5kcyB2YWx1ZXMgdG8gYVJldFZhbCBhcyBuc0lBdG9tcy4K
ICAgICogIEB0aHJvdyBOU19FUlJPUl9JTExFR0FMX1ZBTFVFIGlmIGFKU0FycmF5IGlzbid0IGEg
SlMgYXJyYXkuCiAgICAqLyAKICAgc3RhdGljIG5zcmVzdWx0IEpTQXJyYXlUb0F0b21BcnJheShK
U0NvbnRleHQqIGFDeCwgY29uc3QgSlM6OlZhbHVlJiBhSlNBcnJheSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0NPTUFycmF5PG5zSUF0b20+JiBhUmV0VmFsKTsKIAog
ICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IHBhc3NlZCBpbiBw
YXJhbWV0ZXIgaGFzIHRoZSBhdXRvY29tcGxldGUKLSAgICogZnVuY3Rpb25uYWxpdHkgZW5hYmxl
ZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9ybSBvd25lci4KKyAgICogZnVuY3Rp
b25hbGl0eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVy
LgogICAgKiBOT1RFOiB0aGUgY2FsbGVyIGhhcyB0byBtYWtlIHN1cmUgYXV0b2NvbXBsZXRlIG1h
a2VzIHNlbnNlIGZvciB0aGUKICAgICogZWxlbWVudCdzIHR5cGUuCiAgICAqCiAgICAqIEBwYXJh
bSBhSW5wdXQgdGhlIGlucHV0IGVsZW1lbnQgdG8gY2hlY2suIE5PVEU6IGFJbnB1dCBjYW4ndCBi
ZSBudWxsLgogICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgaGFzIGF1dG9j
b21wbGV0ZSBlbmFibGVkLgogICAgKi8KICAgc3RhdGljIGJvb2wgSXNBdXRvY29tcGxldGVFbmFi
bGVkKG5zSURPTUhUTUxJbnB1dEVsZW1lbnQqIGFJbnB1dCk7CiAKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9j
dW1lbnQuaAotLS0gYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysrIGIvY29u
dGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCkBAIC0xMjAsMTkgKzEyMCwxOCBAQCBjbGFz
cyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xhc3MgTGluazsKIGNsYXNzIEVsZW1lbnQ7
CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNwYWNlIG1vemlsbGEKIAogI2RlZmluZSBO
U19JRE9DVU1FTlRfSUlEIFwKLXsgMHg4ZTUxZTZkOSwgMHg5MTRkLCAweDQ2YmEsIFwKLSAgeyAw
eGIzLCAweDExLCAweDJmLCAweDI3LCAweDNkLCAweGU2LCAweDBkLCAweDE5IH0gfQotCit7IDB4
NTdmZTQ0YWUsIDB4NjY1NiwgMHg0NGI4LCBcCisgIHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhhNywg
MHg0MywgMHgyOCwgMHhiZSwgMHg4NiB9IH0KIAogLy8gRmxhZyBmb3IgQWRkU3R5bGVTaGVldCgp
LgogI2RlZmluZSBOU19TVFlMRVNIRUVUX0ZST01fQ0FUQUxPRyAgICAgICAgICAgICAgICAoMSA8
PCAwKQogCiAvLyBFbnVtIGZvciByZXF1ZXN0aW5nIGEgcGFydGljdWxhciB0eXBlIG9mIGRvY3Vt
ZW50IHdoZW4gY3JlYXRpbmcgYSBkb2MKIGVudW0gRG9jdW1lbnRGbGF2b3IgewogICBEb2N1bWVu
dEZsYXZvckxlZ2FjeUd1ZXNzLCAvLyBjb21wYXQgd2l0aCBvbGQgY29kZSB1bnRpbCBtYWRlIEhU
TUw1LWNvbXBsaWFudAogICBEb2N1bWVudEZsYXZvckhUTUwsIC8vIEhUTUxEb2N1bWVudCB3aXRo
IEhUTUxuZXNzIGJpdCBzZXQgdG8gdHJ1ZQpAQCAtNDYwLDE3ICs0NTksMjYgQEAgcHVibGljOgog
ICAgKiBjYWxsZXJzIGFyZSBleHBlY3RlZCB0byB0YWtlIGFjdGlvbiBhcyBuZWVkZWQgaWYgdGhl
eSB3YW50IHRoaXMKICAgICogY2hhbmdlIHRvIGFjdHVhbGx5IGNoYW5nZSBhbnl0aGluZyBpbW1l
ZGlhdGVseS4KICAgICogQHNlZSBuc0JpZGlVdGlscy5oCiAgICAqLwogICB2b2lkIFNldEJpZGlP
cHRpb25zKFBSVWludDMyIGFCaWRpT3B0aW9ucykKICAgewogICAgIG1CaWRpT3B0aW9ucyA9IGFC
aWRpT3B0aW9uczsKICAgfQotICAKKworICAvKioKKyAgICogR2V0IHRoZSBzYW5kYm94IGZsYWdz
IGZvciB0aGlzIGRvY3VtZW50LgorICAgKiBAc2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRoZSBw
b3NzaWJsZSBmbGFncworICAgKi8KKyAgUFJVaW50MzIgU2FuZGJveEZsYWdzKCkgY29uc3QKKyAg
eworICAgIHJldHVybiBtU2FuZGJveEZsYWdzOworICB9CisKICAgLyoqCiAgICAqIEFjY2VzcyBI
VFRQIGhlYWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAgKiBz
b3VyY2VzLCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCiAgIHZpcnR1YWwgdm9pZCBHZXRI
ZWFkZXJEYXRhKG5zSUF0b20qIGFIZWFkZXJGaWVsZCwgbnNBU3RyaW5nJiBhRGF0YSkgY29uc3Qg
PSAwOwogICB2aXJ0dWFsIHZvaWQgU2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhaGVhZGVyRmllbGQs
IGNvbnN0IG5zQVN0cmluZyYgYURhdGEpID0gMDsKIAogICAvKioKQEAgLTE4NTQsMTYgKzE4NjIs
MjEgQEAgcHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1bWVudCBpcyB0cnVlLCBtT3Jp
Z2luYWxEb2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAgIC8vIGRvY3VtZW50LgogICBu
c0NPTVB0cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7CiAKICAgLy8gVGhlIGJpZGkg
b3B0aW9ucyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBiaXRmaWVsZCBtZWFucyBpcwog
ICAvLyBkZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50MzIgbUJpZGlPcHRpb25zOwog
CisgIC8vIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVudC4gVGhlc2UgcmVmbGVjdCB0
aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRoZQorICAvLyBhc3NvY2lhdGVk
IElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3RlbnQuIFRoZXNlIGFy
ZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRhYmxlIC0gc2VlIG5zU2FuZGJv
eEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgUFJVaW50MzIgbVNhbmRib3hGbGFn
czsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0cmlu
ZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhlIGRvY3VtZW50J3Mgc2VjdXJp
dHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZmIC0t
Z2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uv
c3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0
aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcApAQCAtMjA4
LDE2ICsyMDgsMTcgQEAgc3RhdGljIE5TX0RFRklORV9DSUQoa1hURlNlcnZpY2VDSUQsIE5TXwog
I2luY2x1ZGUgIm5zQ0NVbmNvbGxlY3RhYmxlTWFya2VyLmgiCiAjaW5jbHVkZSAibW96aWxsYS9C
YXNlNjQuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibnNE
T01NdXRhdGlvbk9ic2VydmVyLmgiCiAKICNpbmNsdWRlICJuc1dyYXBwZXJDYWNoZUlubGluZXMu
aCIKICNpbmNsdWRlICJuc0lET01Eb2N1bWVudFR5cGUuaCIKICNpbmNsdWRlICJuc0NoYXJTZXBh
cmF0ZWRUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBleHRlcm4g
IkMiIGludCBNT1pfWE1MVHJhbnNsYXRlRW50aXR5KGNvbnN0IGNoYXIqIHB0ciwgY29uc3QgY2hh
ciogZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiogbmV4dCwgUFJVbmljaGFyKiByZXN1bHQpOwogZXh0ZXJuICJDIiBpbnQgTU9aX1hNTENoZWNr
UU5hbWUoY29uc3QgY2hhciogcHRyLCBjb25zdCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbnNfYXdhcmUsIGNvbnN0IGNoYXIqKiBjb2xvbik7CiAKIHVz
aW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5
ZXJzOwpAQCAtOTE2LDE2ICs5MTcsNjIgQEAgbnNDb250ZW50VXRpbHM6OkdldFBhcnNlclNlcnZp
Y2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1BhcnNlclNlcnZpY2VDSUQs
ICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIHNQYXJz
ZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVybiBzUGFyc2VyU2Vydmlj
ZTsKIH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0
dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5kIGNvbnZl
cnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICoKKyAqIEBwYXJh
bSBhQXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAqIEBy
ZXR1cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLworUFJVaW50MzIKK25zQ29u
dGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYg
YVNhbmRib3hBdHRyVmFsdWUpCit7CisgIC8vIElmIHRoZXJlJ3MgYSBzYW5kYm94IGF0dHJpYnV0
ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBpZiB0aGlzIGlzIGJlaW5nCisgIC8vIGNhbGxlZCksIHN0
YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0aGUgcmVzdHJpY3Rpb24gZmxhZ3MuCisgIFBSVWludDMy
IG91dCA9IFNBTkRCT1hFRF9OQVZJR0FUSU9OIHwKKyAgICBTQU5EQk9YRURfVE9QTEVWRUxfTkFW
SUdBVElPTiB8CisgICAgU0FOREJPWEVEX1BMVUdJTlMgfCBTQU5EQk9YRURfT1JJR0lOIHwKKyAg
ICBTQU5EQk9YRURfRk9STVMgfCBTQU5EQk9YRURfU0NSSVBUUyB8CisgICAgU0FOREJPWEVEX0FV
VE9NQVRJQ19GRUFUVVJFUzsKKworICBpZiAoIWFTYW5kYm94QXR0clZhbHVlLklzRW1wdHkoKSkg
eworICAgIC8vIFRoZSBzZXBhcmF0b3Igb3B0aW9uYWwgZmxhZyBpcyB1c2VkIGJlY2F1c2UgdGhl
IEhUTUw1IHNwZWMgc2F5cyBhbnkKKyAgICAvLyB3aGl0ZXNwYWNlIGlzIG9rIGFzIGEgc2VwYXJh
dG9yLCB3aGljaCBpcyB3aGF0IHRoaXMgZG9lcy4KKyAgICBIVE1MU3BsaXRPblNwYWNlc1Rva2Vu
aXplciB0b2tlbml6ZXIoYVNhbmRib3hBdHRyVmFsdWUsICcgJywKKyAgICAgIG5zQ2hhclNlcGFy
YXRlZFRva2VuaXplclRlbXBsYXRlPG5zQ29udGVudFV0aWxzOjpJc0hUTUxXaGl0ZXNwYWNlPjo6
U0VQQVJBVE9SX09QVElPTkFMKTsKKworICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2Vu
cygpKSB7CisgICAgICBuc0RlcGVuZGVudFN1YnN0cmluZyB0b2tlbiA9IHRva2VuaXplci5uZXh0
VG9rZW4oKTsKKworICAgICAgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93
LXNjcmlwdHMiKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9TQ1JJUFRTOworICAgICAg
fSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zYW1lLW9yaWdp
biIpKSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX09SSUdJTjsKKyAgICAgIH0gZWxzZSBp
ZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9ybXMiKSkgeworICAgICAg
ICBvdXQgJj0gflNBTkRCT1hFRF9GT1JNUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJD
YXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7CisgICAgICAgIC8vIGFsbG93LXNj
cmlwdHMgcmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRTIGFuZAorICAgICAgICAvLyBTQU5E
Qk9YRURfQVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9TQ1JJ
UFRTOworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisgICAg
ICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXRvcC1uYXZp
Z2F0aW9uIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElP
TjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb3V0OworfQogCiAjaWZkZWYgTU9a
X1hURgogbnNJWFRGU2VydmljZSoKIG5zQ29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsK
ICAgaWYgKCFzWFRGU2VydmljZSkgewogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uo
a1hURlNlcnZpY2VDSUQsICZzWFRGU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsK
QEAgLTY0NTIsMTcgKzY0OTksMTggQEAgbnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8g
c3RhdGljCiBib29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNp
cGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBh
U2V0VXBGb3JBYm91dEJsYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFGb3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBj
aGFubmVsLCBidXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRo
ZWlyIG93biBzZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25n
IHRoYXQgdGhlIG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1
cHBsaWVkKSB1bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6Ymxh
bmsuCiAgIC8vIFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJz
IGZvciB3aGF0IG93bmVycwpAQCAtNjQ3MCwyMyArNjUxOCwzMyBAQCBuc0NvbnRlbnRVdGlsczo6
U2V0VXBDaGFubmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVs
bDo6TG9hZFVSSSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRo
ZSBvd25lciBpZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAg
dmVyeSB3cm9uZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhh
dAogICAvLyAgICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAg
IC8vCiAgIC8vICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4g
dGhleSBhcmUgY3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3Vs
ZCBiZSBiYWQhKQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIg
d2lsbCBiZSBzZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0
cyBvd24gc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1F
CisgIC8vIHNhbmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFu
ZCBpdHMgZG9jdW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFs
LgogICBib29sIGluaGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29u
dGV4dCB0byByZXR1cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBk
b24ndCBjYWxsIE5TX0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhp
cyBjb25kaXRpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5h
bExvYWQgd2hlcmUKICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNl
IHRoZSBvd25lci4KLSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4
dChhVVJJLCAmaW5oZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRC
bGFuayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwg
KChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQp
KSAmJgorICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91
dEJsYW5rKGFVUkkpKSkpKSkgeworICAgIC8vIEJlIGNlcnRhaW4gdGhhdCBhRm9yY2VPd25lciBp
cyBvbmx5IHNldCBmb3IgbnVsbCBwcmluY2lwYWxzCisgICAgaWYgKGFGb3JjZU93bmVyKSB7Cisg
ICAgICBuc0NPTVB0cjxuc0lVUkk+IG93bmVyVVJJOworICAgICAgbnNyZXN1bHQgcnYgPSBhTG9h
ZGluZ1ByaW5jaXBhbC0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKG93bmVyVVJJKSk7CisgICAgICBN
T1pfQVNTRVJUKE5TX1NVQ0NFRURFRChydikgJiYgU2NoZW1lSXMob3duZXJVUkksIE5TX05VTExQ
UklOQ0lQQUxfU0NIRU1FKSk7CisgICAgfQogICAgIGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGlu
Z1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLwogICAvLyBmaWxlOiB1
cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3Bl
bmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCmRpZmYgLS1naXQgYS9jb250
ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50
LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTI0MTUsMTYgKzI0MTUsMjUgQEAgbnNEb2N1bWVu
dDo6U3RhcnREb2N1bWVudExvYWQoY29uc3QgY2hhcgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgn
OycsIHNlbWljb2xvbiwgZW5kKTsKICAgICBTZXRDb250ZW50VHlwZUludGVybmFsKFN1YnN0cmlu
ZyhzdGFydCwgc2VtaWNvbG9uKSk7CiAgIH0KIAogICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhh
Q2hhbm5lbCk7CiAKICAgbUNoYW5uZWwgPSBhQ2hhbm5lbDsKIAorICAvLyBJZiB0aGlzIGRvY3Vt
ZW50IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRvY3NoZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdz
CisgIC8vIHRvIHRoZSBkb2N1bWVudC4gVGhlc2UgYXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBz
ZXQgaGVyZS4KKyAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRl
cmZhY2UoYUNvbnRhaW5lcik7CisKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgbnNyZXN1bHQgcnYg
PSBkb2NTaGVsbC0+R2V0U2FuZGJveEZsYWdzKCZtU2FuZGJveEZsYWdzKTsKKyAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOworICB9CisKICAgbnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7CiAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jl
c3VsdAogbnNEb2N1bWVudDo6SW5pdENTUCgpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3Jj
L25zRnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAot
LS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFz
ZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTExMiwxNiArMTEyLDE5IEBACiAjaW5jbHVkZSAi
bW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgi
CiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIKICNpbmNsdWRlICJtb3ppbGxhL2RvbS9FbGVt
ZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlvdXQvUmVuZGVyRnJhbWVQYXJlbnQuaCIKIAog
I2luY2x1ZGUgImpzYXBpLmgiCiAKKyNpbmNsdWRlICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCisj
aW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKKwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1
c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6Omxh
eWVyczsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXlvdXQ7CiB0eXBlZGVmIEZyYW1lTWV0
cmljczo6Vmlld0lEIFZpZXdJRDsKIAogY2xhc3MgbnNBc3luY0RvY1NoZWxsRGVzdHJveWVyIDog
cHVibGljIG5zUnVubmFibGUKIHsKQEAgLTQ3MywxNiArNDc2LDQ2IEBAIG5zRnJhbWVMb2FkZXI6
OlJlYWxseVN0YXJ0TG9hZGluZ0ludGVybmEKICAgLy8gSnVzdCB0byBiZSBzYWZlLCByZWNoZWNr
IHVyaS4KICAgcnYgPSBDaGVja1VSSUxvYWQobVVSSVRvTG9hZCk7CiAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CiAKICAgbnNDT01QdHI8bnNJRG9jU2hlbGxMb2FkSW5mbz4gbG9hZEluZm87
CiAgIG1Eb2NTaGVsbC0+Q3JlYXRlTG9hZEluZm8oZ2V0dGVyX0FkZFJlZnMobG9hZEluZm8pKTsK
ICAgTlNfRU5TVVJFX1RSVUUobG9hZEluZm8sIE5TX0VSUk9SX0ZBSUxVUkUpOwogCisgIC8vIElz
IHRoaXMgYW4gPGlmcmFtZT4gd2l0aCBhIHNhbmRib3ggYXR0cmlidXRlIG9yIGEgcGFyZW50IHdo
aWNoIGlzCisgIC8vIHNhbmRib3hlZCA/CisgIG5zSFRNTElGcmFtZUVsZW1lbnQqIGlmcmFtZSA9
CisgICAgbnNIVE1MSUZyYW1lRWxlbWVudDo6RnJvbUNvbnRlbnQobU93bmVyQ29udGVudCk7CisK
KyAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICBpZiAoaWZyYW1lKSB7CisgICAgc2Fu
ZGJveEZsYWdzID0gaWZyYW1lLT5HZXRTYW5kYm94RmxhZ3MoKTsKKworICAgIFBSVWludDMyIHBh
cmVudFNhbmRib3hGbGFncyA9IGlmcmFtZS0+T3duZXJEb2MoKS0+R2V0UGFyZW50RG9jdW1lbnQo
KSA/CisgICAgICBpZnJhbWUtPk93bmVyRG9jKCktPkdldFBhcmVudERvY3VtZW50KCktPlNhbmRi
b3hGbGFncygpIDogMDsKKworICAgIGlmIChzYW5kYm94RmxhZ3MgfHwgcGFyZW50U2FuZGJveEZs
YWdzKSB7CisgICAgICAvLyBUaGUgY2hpbGQgY2FuIG9ubHkgYWRkIHJlc3RyaWN0aW9ucywgbm90
IHJlbW92ZSB0aGVtLgorICAgICAgc2FuZGJveEZsYWdzIHw9IHBhcmVudFNhbmRib3hGbGFnczsK
KworICAgICAgbURvY1NoZWxsLT5TZXRTYW5kYm94RmxhZ3Moc2FuZGJveEZsYWdzKTsKKworICAg
ICAgLy8gU2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGluZyBmb3IgcGx1Z2lucyBhcyBzcGVjaWZp
ZWQuCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX1BMVUdJTlMpIHsKKyAgICAg
ICAgbURvY1NoZWxsLT5TZXRBbGxvd1BsdWdpbnMoZmFsc2UpOworICAgICAgfQorICAgIH0KKyAg
fQorCisgIC8vIElmIHRoaXMgaXMgYW4gPGlmcmFtZT4gYW5kIGl0J3Mgc2FuZGJveGVkIHdpdGgg
cmVzcGVjdCB0byBvcmlnaW4KKyAgLy8gd2Ugd2lsbCBzZXQgaXQgdXAgd2l0aCBhIG51bGwgcHJp
bmNpcGFsIGxhdGVyIGluIG5zRG9jU2hlbGw6OkRvVVJJTG9hZC4KKyAgLy8gV2UgZG8gaXQgdGhl
cmUgdG8gY29ycmVjdGx5IHNhbmRib3ggY29udGVudCB0aGF0IHdhcyBsb2FkZWQgaW50bworICAv
LyB0aGUgaWZyYW1lIHZpYSBvdGhlciBtZXRob2RzIHRoYW4gdGhlIHNyYyBhdHRyaWJ1dGUuCiAg
IC8vIFdlJ2xsIHVzZSBvdXIgcHJpbmNpcGFsLCBub3QgdGhhdCBvZiB0aGUgZG9jdW1lbnQgbG9h
ZGVkIGluc2lkZSB1cy4gIFRoaXMKICAgLy8gaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBw
cmV2ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBsb2FkZWQgaW4KICAgLy8gc3ViZnJhbWVz
IQogICBsb2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsK
IAogICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwogICBydiA9IG1Pd25lckNvbnRlbnQtPk5v
ZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKHJlZmVycmVyKSk7CiAgIE5TX0VO
U1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tB
dG9tTGlzdC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAotLS0gYS9jb250ZW50
L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21M
aXN0LmgKQEAgLTk0LDE3ICs5NCwyMSBAQCBHS19BVE9NKGFjdHVhdGUsICJhY3R1YXRlIikKIEdL
X0FUT00oYWRkcmVzcywgImFkZHJlc3MiKQogR0tfQVRPTShhZnRlciwgImFmdGVyIikKIEdLX0FU
T00oYWZ0ZXJfZW5kLCAiYWZ0ZXJfZW5kIikKIEdLX0FUT00oYWZ0ZXJfc3RhcnQsICJhZnRlcl9z
dGFydCIpCiBHS19BVE9NKGFsaWduLCAiYWxpZ24iKQogR0tfQVRPTShhbGluaywgImFsaW5rIikK
IEdLX0FUT00oYWxsLCAiYWxsIikKIEdLX0FUT00oYWxsb3dldmVudHMsICJhbGxvd2V2ZW50cyIp
CitHS19BVE9NKGFsbG93Zm9ybXMsICJhbGxvdy1mb3JtcyIpCiBHS19BVE9NKGFsbG93bmVnYXRp
dmVhc3NlcnRpb25zLCAiYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMiKQorR0tfQVRPTShhbGxvd3Nh
bWVvcmlnaW4sICJhbGxvdy1zYW1lLW9yaWdpbiIpCitHS19BVE9NKGFsbG93c2NyaXB0cywgImFs
bG93LXNjcmlwdHMiKQorR0tfQVRPTShhbGxvd3RvcG5hdmlnYXRpb24sICJhbGxvdy10b3AtbmF2
aWdhdGlvbiIpCiBHS19BVE9NKGFsbG93dW50cnVzdGVkLCAiYWxsb3d1bnRydXN0ZWQiKQogR0tf
QVRPTShhbHQsICJhbHQiKQogR0tfQVRPTShhbHRlcm5hdGUsICJhbHRlcm5hdGUiKQogR0tfQVRP
TShhbHdheXMsICJhbHdheXMiKQogR0tfQVRPTShhbmNlc3RvciwgImFuY2VzdG9yIikKIEdLX0FU
T00oYW5jZXN0b3JPclNlbGYsICJhbmNlc3Rvci1vci1zZWxmIikKIEdLX0FUT00oX2FuZCwgImFu
ZCIpCiBHS19BVE9NKGFueSwgImFueSIpCkBAIC04ODMsMTYgKzg4NywxNyBAQCBHS19BVE9NKHJv
d3NwYW4sICJyb3dzcGFuIikKIEdLX0FUT00ocnAsICJycCIpCiBHS19BVE9NKHJ0LCAicnQiKQog
R0tfQVRPTShydGwsICJydGwiKQogR0tfQVRPTShydWJ5LCAicnVieSIpCiBHS19BVE9NKHJ1bGUs
ICJydWxlIikKIEdLX0FUT00ocnVsZXMsICJydWxlcyIpCiBHS19BVE9NKHMsICJzIikKIEdLX0FU
T00oc2FtcCwgInNhbXAiKQorR0tfQVRPTShzYW5kYm94LCAic2FuZGJveCIpCiBHS19BVE9NKHNi
YXR0ciwgInNiYXR0ciIpCiBHS19BVE9NKHNjYWxlLCAic2NhbGUiKQogR0tfQVRPTShzY2FuLCAi
c2NhbiIpCiBHS19BVE9NKHNjaGVtZSwgInNjaGVtZSIpCiBHS19BVE9NKHNjb3BlLCAic2NvcGUi
KQogR0tfQVRPTShzY29wZWQsICJzY29wZWQiKQogR0tfQVRPTShzY3JlZW4sICJzY3JlZW4iKQog
R0tfQVRPTShzY3JlZW5YLCAic2NyZWVuWCIpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3Jj
L25zU2FuZGJveEZsYWdzLmggYi9jb250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25z
U2FuZGJveEZsYWdzLmgKQEAgLTAsMCArMSw1OCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdp
ZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLw0K
Ky8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUg
TW96aWxsYSBQdWJsaWMNCisgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBM
IHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIGZpbGUsDQorICogWW91IGNhbiBvYnRhaW4g
b25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8NCisNCisvKg0KKyAqIENvbnN0
YW50IGZsYWdzIHRoYXQgZGVzY3JpYmUgaG93IGEgZG9jdW1lbnQgaXMgc2FuZGJveGVkIGFjY29y
ZGluZyB0byB0aGUNCisgKiBIVE1MNSBzcGVjLg0KKyAqLw0KKw0KKyNpZm5kZWYgbnNTYW5kYm94
RmxhZ3NfaF9fXw0KKyNkZWZpbmUgbnNTYW5kYm94RmxhZ3NfaF9fXw0KKw0KKy8qKg0KKyAqIFRo
aXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyBicm93c2luZyBjb250ZXh0
cyBvdGhlciB0aGFuDQorICogdGhlIHNhbmRib3hlZCBicm93c2luZyBjb250ZXh0IGl0c2VsZiAo
b3IgYnJvd3NpbmcgY29udGV4dHMgZnVydGhlcg0KKyAqIG5lc3RlZCBpbnNpZGUgaXQpLCBhbmQg
dGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0Lg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxv
bmcgU0FOREJPWEVEX05BVklHQVRJT04gID0gMHgxOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBw
cmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyB0aGVpciB0b3AtbGV2ZWwgYnJvd3NpbmcN
CisgKiBjb250ZXh0Lg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1RPUExF
VkVMX05BVklHQVRJT04gPSAweDI7DQorDQorLyoqDQorICogVGhpcyBmbGFnIHByZXZlbnRzIGNv
bnRlbnQgZnJvbSBpbnN0YW50aWF0aW5nIHBsdWdpbnMsIHdoZXRoZXIgdXNpbmcgdGhlDQorICog
ZW1iZWQgZWxlbWVudCwgdGhlIG9iamVjdCBlbGVtZW50LCB0aGUgYXBwbGV0IGVsZW1lbnQsIG9y
IHRocm91Z2gNCisgKiBuYXZpZ2F0aW9uIG9mIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIHVu
bGVzcyB0aG9zZSBwbHVnaW5zIGNhbiBiZQ0KKyAqIHNlY3VyZWQuDQorICovDQorY29uc3QgdW5z
aWduZWQgbG9uZyBTQU5EQk9YRURfUExVR0lOUyA9IDB4NDsNCisNCisvKioNCisgKiBUaGlzIGZs
YWcgZm9yY2VzIGNvbnRlbnQgaW50byBhIHVuaXF1ZSBvcmlnaW4sIHRodXMgcHJldmVudGluZyBp
dCBmcm9tDQorICogYWNjZXNzaW5nIG90aGVyIGNvbnRlbnQgZnJvbSB0aGUgc2FtZSBvcmlnaW4u
DQorICogVGhpcyBmbGFnIGFsc28gcHJldmVudHMgc2NyaXB0IGZyb20gcmVhZGluZyBmcm9tIG9y
IHdyaXRpbmcgdG8gdGhlDQorICogZG9jdW1lbnQuY29va2llIElETCBhdHRyaWJ1dGUsIGFuZCBi
bG9ja3MgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25n
IFNBTkRCT1hFRF9PUklHSU4gPSAweDg7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBm
b3JtIHN1Ym1pc3Npb24uDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfRk9S
TVMgPSAweDEwOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlv
bi4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9TQ1JJUFRTID0gMHgyMDsN
CisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIGZlYXR1cmVzIHRoYXQgdHJpZ2dlciBhdXRv
bWF0aWNhbGx5LCBzdWNoIGFzDQorICogYXV0b21hdGljYWxseSBwbGF5aW5nIGEgdmlkZW8gb3Ig
YXV0b21hdGljYWxseSBmb2N1c2luZyBhIGZvcm0gY29udHJvbC4NCisgKi8NCitjb25zdCB1bnNp
Z25lZCBsb25nIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMgPSAweDQwOw0KKyNlbmRpZg0K
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwIGIvY29udGVu
dC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc1Nj
cmlwdExvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAK
QEAgLTcwLDE2ICs3MCwxNyBAQAogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5o
IgogI2luY2x1ZGUgInBybG9nLmgiCiAjaW5jbHVkZSAibnNJQ2hhbm5lbFBvbGljeS5oIgogI2lu
Y2x1ZGUgIm5zQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1ZGUgIm5zQ1JULmgiCiAjaW5jbHVkZSAi
bnNDb250ZW50Q3JlYXRvckZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIm5zR2VuZXJpY0VsZW1lbnQu
aCIKICNpbmNsdWRlICJuc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRlICJuc1Nh
bmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9GdW5jdGlvblRpbWVyLmgiCiAjaW5j
bHVkZSAibW96aWxsYS9DT1JTTW9kZS5oIgogCiAjaWZkZWYgUFJfTE9HR0lORwogc3RhdGljIFBS
TG9nTW9kdWxlSW5mbyogZ0NzcFBSTG9nOwogI2VuZGlmCiAKQEAgLTMwNSwxNiArMzA2LDIyIEBA
IG5zU2NyaXB0TG9hZGVyOjpTdGFydExvYWQobnNTY3JpcHRMb2FkUmUKICAgaWYgKCF3aW5kb3cp
IHsKICAgICByZXR1cm4gTlNfRVJST1JfTlVMTF9QT0lOVEVSOwogICB9CiAKICAgbnNJRG9jU2hl
bGwgKmRvY3NoZWxsID0gd2luZG93LT5HZXREb2NTaGVsbCgpOwogCiAgIG5zQ09NUHRyPG5zSUlu
dGVyZmFjZVJlcXVlc3Rvcj4gcHJvbXB0ZXIoZG9fUXVlcnlJbnRlcmZhY2UoZG9jc2hlbGwpKTsK
IAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlzIHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3Jp
cHRzJywgYWJvcnQuCisgIGlmIChtRG9jdW1lbnQtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVE
X1NDUklQVFMpIHsKKyAgICAvLyBSRVZJRVcgOiB0aGlzIHByb2JhYmx5IGlzbid0IHRoZSByaWdo
dCBlcnJvci4uCisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgIH0KKwog
ICAvLyBjaGVjayBmb3IgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0byBwYXNzIGRvd24gdG8g
dGhlIGNoYW5uZWwKICAgLy8gdGhhdCB3aWxsIGJlIGNyZWF0ZWQgdG8gbG9hZCB0aGUgc2NyaXB0
CiAgIG5zQ09NUHRyPG5zSUNoYW5uZWxQb2xpY3k+IGNoYW5uZWxQb2xpY3k7CiAgIG5zQ09NUHRy
PG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3NwOwogICBydiA9IG1Eb2N1bWVudC0+Tm9kZVBy
aW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CiAgIGlmIChjc3ApIHsKICAgICBjaGFubmVsUG9saWN5ID0gZG9fQ3JlYXRl
SW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9uc2NoYW5uZWxwb2xpY3k7MSIpOwpAQCAtNjc2LDE2ICs2
ODMsMjEgQEAgbnNTY3JpcHRMb2FkZXI6OlByb2Nlc3NTY3JpcHRFbGVtZW50KG5zSQogICAgICAg
ICAiVGhlcmUgY2FuIGJlIG9ubHkgb25lIHBhcnNlci1ibG9ja2luZyBzY3JpcHQgYXQgYSB0aW1l
Iik7CiAgICAgTlNfQVNTRVJUSU9OKG1YU0xUUmVxdWVzdHMuSXNFbXB0eSgpLAogICAgICAgICAi
UGFyc2VyLWJsb2NraW5nIHNjcmlwdHMgYW5kIFhTTFQgc2NyaXB0cyBpbiB0aGUgc2FtZSBkb2Mh
Iik7CiAgICAgbVBhcnNlckJsb2NraW5nUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgcmV0dXJuIHRy
dWU7CiAgIH0KIAogICAvLyBpbmxpbmUgc2NyaXB0CisgIC8vIElzIHRoaXMgZG9jdW1lbnQgc2Fu
ZGJveGVkIHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMnPworICBpZiAobURvY3VtZW50LT5TYW5kYm94
RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisK
ICAgbnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5PiBjc3A7CiAgIHJ2ID0gbURvY3Vt
ZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldENzcChnZXR0ZXJfQWRkUmVmcyhjc3ApKTsKICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIGZhbHNlKTsKIAogICBpZiAoY3NwKSB7CiAgICAgUFJfTE9HKGdD
c3BQUkxvZywgUFJfTE9HX0RFQlVHLCAoIk5ldyBTY3JpcHRMb2FkZXIgaSAqKioqd2l0aCBDU1Aq
KioqIikpOwogICAgIGJvb2wgaW5saW5lT0s7CiAgICAgcnYgPSBjc3AtPkdldEFsbG93c0lubGlu
ZVNjcmlwdCgmaW5saW5lT0spOwpkaWZmIC0tZ2l0IGEvY29udGVudC9ldmVudHMvc3JjL25zRXZl
bnRMaXN0ZW5lck1hbmFnZXIuY3BwIGIvY29udGVudC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5l
ck1hbmFnZXIuY3BwCi0tLSBhL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5h
Z2VyLmNwcAorKysgYi9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5j
cHAKQEAgLTgzLDE2ICs4MywxNyBAQAogI2luY2x1ZGUgIm5zRE9NSlNVdGlscy5oIgogI2luY2x1
ZGUgIm5zRE9NU2NyaXB0T2JqZWN0SG9sZGVyLmgiCiAjaW5jbHVkZSAibnNEYXRhSGFzaHRhYmxl
LmgiCiAjaW5jbHVkZSAibnNDT01BcnJheS5oIgogI2luY2x1ZGUgIm5zRXZlbnRMaXN0ZW5lclNl
cnZpY2UuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRl
ICJuc0pTRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJ4cGNwdWJsaWMuaCIKKyNpbmNsdWRlICJu
c1NhbmRib3hGbGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNpbmcg
bmFtZXNwYWNlIG1vemlsbGE6OmhhbDsKIAogI2RlZmluZSBFVkVOVF9UWVBFX0VRVUFMUyggbHMs
IHR5cGUsIHVzZXJUeXBlICkgXAogICAobHMtPm1FdmVudFR5cGUgPT0gdHlwZSAmJiBcCiAgIChs
cy0+bUV2ZW50VHlwZSAhPSBOU19VU0VSX0RFRklORURfRVZFTlQgfHwgbHMtPm1UeXBlQXRvbSA9
PSB1c2VyVHlwZSkpCiAKQEAgLTU4NSwxNiArNTg2LDIyIEBAIG5zRXZlbnRMaXN0ZW5lck1hbmFn
ZXI6OkFkZFNjcmlwdEV2ZW50TGkKICAgICAvLyBsb2FkZWQgYXMgZGF0YS4KICAgICByZXR1cm4g
TlNfT0s7CiAgIH0KIAogICBuc3Jlc3VsdCBydiA9IE5TX09LOwogICAvLyByZXR1cm4gZWFybHkg
cHJldmVudGluZyB0aGUgZXZlbnQgbGlzdGVuZXIgZnJvbSBiZWluZyBhZGRlZAogICAvLyAnZG9j
JyBpcyBmZXRjaGVkIGFib3ZlCiAgIGlmIChkb2MpIHsKKyAgICAvLyBEb24ndCBhbGxvdyBhZGRp
bmcgYW4gZXZlbnQgbGlzdGVuZXIgaWYgdGhlIGRvY3VtZW50IGlzIHNhbmRib3hlZAorICAgIC8v
IHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMnLgorICAgIGlmIChkb2MtPlNhbmRib3hGbGFncygpICYg
U0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlf
RVJSOworICAgIH0KKwogICAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3Nw
OwogICAgIHJ2ID0gZG9jLT5Ob2RlUHJpbmNpcGFsKCktPkdldENzcChnZXR0ZXJfQWRkUmVmcyhj
c3ApKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgaWYgKGNzcCkgewog
ICAgICAgYm9vbCBpbmxpbmVPSzsKICAgICAgIHJ2ID0gY3NwLT5HZXRBbGxvd3NJbmxpbmVTY3Jp
cHQoJmlubGluZU9LKTsKICAgICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAotLS0gYS9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTgwLDE2ICs4MCwxNyBAQAog
CiAjaW5jbHVkZSAibW96QXV0b0RvY1VwZGF0ZS5oIgogI2luY2x1ZGUgIm5zSUhUTUxDb2xsZWN0
aW9uLmgiCiAKICNpbmNsdWRlICJuc0lDb25zdHJhaW50VmFsaWRhdGlvbi5oIgogCiAjaW5jbHVk
ZSAibnNJRE9NSFRNTEJ1dHRvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJkb21iaW5kaW5ncy5oIgor
I2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpk
b207CiAKIHN0YXRpYyBjb25zdCBpbnQgTlNfRk9STV9DT05UUk9MX0xJU1RfSEFTSFRBQkxFX1NJ
WkUgPSAxNjsKIAogc3RhdGljIGNvbnN0IFBSVWludDggTlNfRk9STV9BVVRPQ09NUExFVEVfT04g
ID0gMTsKIHN0YXRpYyBjb25zdCBQUlVpbnQ4IE5TX0ZPUk1fQVVUT0NPTVBMRVRFX09GRiA9IDA7
CiAKQEAgLTY4MywxNyArNjg0LDE5IEBAIG5zSFRNTEZvcm1FbGVtZW50OjpEb1N1Ym1pdE9yUmVz
ZXQobnNFdmUKICAgICByZXR1cm4gRG9SZXNldCgpOwogICB9CiAKICAgaWYgKE5TX0ZPUk1fU1VC
TUlUID09IGFNZXNzYWdlKSB7CiAgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIG5vdCBpbiBh
IGRvY3VtZW50LgogICAgIGlmICghZG9jKSB7CiAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgfQot
ICAgIHJldHVybiBEb1N1Ym1pdChhRXZlbnQpOworICAgIC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdy
ZSBpbiBhIHNhbmRib3hlZCBmcmFtZSBhbmQgZm9ybSBzdWJtaXQKKyAgICAvLyBpcyBkaXNhYmxl
ZC4KKyAgICByZXR1cm4gKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfRk9STVMpID8g
TlNfT0sgOiBEb1N1Ym1pdChhRXZlbnQpOwogICB9CiAKICAgTU9aX0FTU0VSVChmYWxzZSk7CiAg
IHJldHVybiBOU19PSzsKIH0KIAogbnNyZXN1bHQKIG5zSFRNTEZvcm1FbGVtZW50OjpEb1Jlc2V0
KCkKQEAgLTE2ODQsMTYgKzE2ODcsMjQgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkNoZWNrVmFsaWRG
b3JtU3VibWlzcwogICAgKiBUT0RPOiB0aGUgY2hlY2sgZm9yIG9ic2VydmVyIHNob3VsZCBiZSBy
ZW1vdmVkIGxhdGVyIHdoZW4gSFRNTDUgRm9ybXMgd2lsbAogICAgKiBiZSBzcHJlYWQgZW5vdWdo
IGFuZCBhdXRob3JzIHdpbGwgYXNzdW1lIGZvcm1zIGNhbid0IGJlIHN1Ym1pdHRlZCB3aGVuCiAg
ICAqIGludmFsaWQuIFNlZSBidWcgNTg3NjcxLgogICAgKi8KIAogICBOU19BU1NFUlRJT04oIUhh
c0F0dHIoa05hbWVTcGFjZUlEX05vbmUsIG5zR2tBdG9tczo6bm92YWxpZGF0ZSksCiAgICAgICAg
ICAgICAgICAiV2Ugc2hvdWxkbid0IGJlIHRoZXJlIGlmIG5vdmFsaWRhdGUgaXMgc2V0ISIpOwog
CisgIC8vIERvbid0IGRvIHZhbGlkYXRpb24gZm9yIGEgZm9ybSBzdWJtaXQgZG9uZSBieSBhIHNh
bmRib3hlZCBkb2N1bWVudCB0aGF0CisgIC8vIGRvZXNuJ3QgaGF2ZSAnYWxsb3ctZm9ybXMnLCB0
aGUgc3VibWl0IHdpbGwgaGF2ZSBiZWVuIGJsb2NrZWQgYW5kIHRoZQorICAvLyBIVE1MNSBzcGVj
IHNheXMgd2Ugc2hvdWxkbid0IHZhbGlkYXRlIGluIHRoaXMgY2FzZS4KKyAgbnNJRG9jdW1lbnQq
IGRvYyA9IEdldEN1cnJlbnREb2MoKTsKKyAgaWYgKGRvYyAmJiAoZG9jLT5TYW5kYm94RmxhZ3Mo
KSAmIFNBTkRCT1hFRF9GT1JNUykpIHsKKyAgICAgIHJldHVybiB0cnVlOworICB9CisKICAgLy8g
V2hlbiAuc3VibWl0KCkgaXMgY2FsbGVkIGFFdmVudCA9IG5zbnVsbCBzbyB3ZSBjYW4gcmVseSBv
biB0aGF0IHRvIGtub3cgaWYKICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGUgdmFsaWRpdHkgb2Yg
dGhlIGZvcm0uCiAgIG5zQ09NUHRyPG5zSU9ic2VydmVyU2VydmljZT4gc2VydmljZSA9CiAgICAg
bW96aWxsYTo6c2VydmljZXM6OkdldE9ic2VydmVyU2VydmljZSgpOwogICBpZiAoIXNlcnZpY2Up
IHsKICAgICBOU19XQVJOSU5HKCJObyBvYnNlcnZlciBzZXJ2aWNlIGF2YWlsYWJsZSEiKTsKICAg
ICByZXR1cm4gdHJ1ZTsKICAgfQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRN
TElGcmFtZUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJ
RnJhbWVFbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZy
YW1lRWxlbWVudC5jcHAKQEAgLTMzLDc0ICszMywyMyBAQAogICogdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgog
ICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4K
ICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCiAjaW5jbHVkZSAibW96
aWxsYS9VdGlsLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIm5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01Eb2N1
bWVudC5oIgotI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNJ
RE9NU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRlICJuc0lE
b2N1bWVudC5oIgotI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIm5z
RE9NRXJyb3IuaCIKLSNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNTdHlsZUNv
bnN0cy5oIgorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCi1jbGFzcyBuc0hU
TUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKLXsK
LXB1YmxpYzoKLSAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJ
bmZvPiBhTm9kZUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9t
UGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOwotICB2
aXJ0dWFsIH5uc0hUTUxJRnJhbWVFbGVtZW50KCk7Ci0KLSAgLy8gbnNJU3VwcG9ydHMKLSAgTlNf
REVDTF9JU1VQUE9SVFNfSU5IRVJJVEVECi0KLSAgLy8gbnNJRE9NTm9kZQotICBOU19GT1JXQVJE
X05TSURPTU5PREUobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUVs
ZW1lbnQKLSAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1l
bnQ6OikKLQotICAvLyBuc0lET01IVE1MRWxlbWVudAotICBOU19GT1JXQVJEX05TSURPTUhUTUxF
TEVNRU5UKG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OikKLQotICAvLyBuc0lET01IVE1MSUZy
YW1lRWxlbWVudAotICBOU19ERUNMX05TSURPTUhUTUxJRlJBTUVFTEVNRU5UCi0KLSAgLy8gbnNJ
RE9NR2V0U1ZHRG9jdW1lbnQKLSAgTlNfREVDTF9OU0lET01HRVRTVkdET0NVTUVOVAotCi0gIC8v
IG5zSUNvbnRlbnQKLSAgdmlydHVhbCBib29sIFBhcnNlQXR0cmlidXRlKFBSSW50MzIgYU5hbWVz
cGFjZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmli
dXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FTdHJpbmcmIGFW
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1
bHQpOwotICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9t
KiBhQXR0cmlidXRlKSBjb25zdDsKLSAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5j
IEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OwotCi0gIHZpcnR1YWwgbnNyZXN1
bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0
OwotICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKLSAgdmlydHVhbCBu
c0lET01Ob2RlKiBBc0RPTU5vZGUoKSB7IHJldHVybiB0aGlzOyB9Ci19OwotCi0KIE5TX0lNUExf
TlNfTkVXX0hUTUxfRUxFTUVOVF9DSEVDS19QQVJTRVIoSUZyYW1lKQogCi0KIG5zSFRNTElGcmFt
ZUVsZW1lbnQ6Om5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5m
bz4gYU5vZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
cm9tUGFyc2VyIGFGcm9tUGFyc2VyKQogICA6IG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQoYU5v
ZGVJbmZvLCBhRnJvbVBhcnNlcikKIHsKIH0KIAogbnNIVE1MSUZyYW1lRWxlbWVudDo6fm5zSFRN
TElGcmFtZUVsZW1lbnQoKQogewpAQCAtMTMyLDE2ICs4MSwxNyBAQCBOU19JTVBMX1NUUklOR19B
VFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsCiBOU19JTVBMX1VSSV9BVFRSKG5zSFRNTElGcmFtZUVs
ZW1lbnQsIExvbmdEZXNjLCBsb25nZGVzYykKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZy
YW1lRWxlbWVudCwgTWFyZ2luSGVpZ2h0LCBtYXJnaW5oZWlnaHQpCiBOU19JTVBMX1NUUklOR19B
VFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE1hcmdpbldpZHRoLCBtYXJnaW53aWR0aCkKIE5TX0lN
UExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTmFtZSwgbmFtZSkKIE5TX0lNUExf
U1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU2Nyb2xsaW5nLCBzY3JvbGxpbmcpCiBO
U19JTVBMX1VSSV9BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNyYywgc3JjKQogTlNfSU1QTF9T
VFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBXaWR0aCwgd2lkdGgpCiBOU19JTVBMX0JP
T0xfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBNb3pBbGxvd0Z1bGxTY3JlZW4sIG1vemFsbG93
ZnVsbHNjcmVlbikKK05TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU2Fu
ZGJveCwgc2FuZGJveCkKIAogTlNfSU1FVEhPRElNUAogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0
Q29udGVudERvY3VtZW50KG5zSURPTURvY3VtZW50KiogYUNvbnRlbnREb2N1bWVudCkKIHsKICAg
cmV0dXJuIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQ6OkdldENvbnRlbnREb2N1bWVudChhQ29u
dGVudERvY3VtZW50KTsKIH0KIAogTlNfSU1FVEhPRElNUApAQCAtMjY5LDggKzIxOSwzNyBAQCBu
c0hUTUxJRnJhbWVFbGVtZW50OjpJc0F0dHJpYnV0ZU1hcHBlZChjCiAKIAogbnNNYXBSdWxlVG9B
dHRyaWJ1dGVzRnVuYwogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0QXR0cmlidXRlTWFwcGluZ0Z1
bmN0aW9uKCkgY29uc3QKIHsKICAgcmV0dXJuICZNYXBBdHRyaWJ1dGVzSW50b1J1bGU7CiB9CiAK
K25zcmVzdWx0Cituc0hUTUxJRnJhbWVFbGVtZW50OjpBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFt
ZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNBdHRyVmFsdWUqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYU5vdGlmeSkKK3sKKyAgaWYgKGFOYW1lID09IG5zR2tBdG9tczo6
c2FuZGJveCAmJiBhTmFtZVNwYWNlSUQgPT0ga05hbWVTcGFjZUlEX05vbmUpIHsKKyAgICAvLyBQ
YXJzZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSwgYW5kIGlmIHdlIGhh
dmUgYSBkb2NzaGVsbAorICAgIC8vIHNldCBpdHMgc2FuZGJveCBmbGFncyBhcHByb3ByaWF0ZWx5
LgorICAgIGlmIChtRnJhbWVMb2FkZXIpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBk
b2NzaGVsbCA9IG1GcmFtZUxvYWRlci0+R2V0RXhpc3RpbmdEb2NTaGVsbCgpOworCisgICAgICBp
ZiAoZG9jc2hlbGwpIHsKKyAgICAgICAgUFJVaW50MzIgbmV3RmxhZ3MgPSAwOworICAgICAgICAv
LyBJZiBhIE5VTEwgYVZhbHVlIGlzIHBhc3NlZCBpbiwgd2Ugd2FudCB0byBjbGVhciB0aGUgc2Fu
ZGJveCBmbGFncworICAgICAgICAvLyB3aGljaCB3ZSB3aWxsIGRvIGJ5IHNldHRpbmcgdGhlbSB0
byAwLgorICAgICAgICBpZiAoYVZhbHVlKSB7CisgICAgICAgICAgbnNBdXRvU3RyaW5nIHN0clZh
bHVlOworICAgICAgICAgIGFWYWx1ZS0+VG9TdHJpbmcoc3RyVmFsdWUpOworICAgICAgICAgIG5l
d0ZsYWdzID0gbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3MoCisg
ICAgICAgICAgICBzdHJWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZG9jc2hlbGwtPlNldFNh
bmRib3hGbGFncyhuZXdGbGFncyk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBuc0dl
bmVyaWNIVE1MRWxlbWVudDo6QWZ0ZXJTZXRBdHRyKGFOYW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5vdGlmeSk7
CisKK30KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVF
bGVtZW50LmggYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApAQCAtMCwwICsxLDExNiBAQAorLyogLSot
IE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLSAqLworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICog
VmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwor
ICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIg
dGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29t
bXVuaWNhdG9yIGNsaWVudCBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0
aGUgT3JpZ2luYWwgQ29kZSBpcworICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRp
b24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29w
eXJpZ2h0IChDKSAxOTk4CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhl
IGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAq
IGVpdGhlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxh
dGVyICh0aGUgIkdQTCIpLAorICogb3IgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNl
IHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5z
dGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3Vy
IHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIg
dGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRp
Y2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBh
bmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMg
cmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAq
IHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRo
ZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiog
Ki8KKworI2luY2x1ZGUgIm1vemlsbGEvVXRpbC5oIgorCisjaW5jbHVkZSAibnNJRE9NSFRNTElG
cmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRWxlbWVudC5oIgorI2luY2x1
ZGUgIm5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01Eb2N1bWVu
dC5oIgorI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJRE9N
U1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0drQXRvbXMuaCIKKyNpbmNsdWRlICJuc0lEb2N1
bWVudC5oIgorI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIm5zRE9N
RXJyb3IuaCIKKyNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCisjaW5jbHVkZSAibnNTdHlsZUNvbnN0
cy5oIgorI2luY2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCisKK2NsYXNzIG5zSFRNTElGcmFtZUVs
ZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAoreworcHVibGljOgor
ICBuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2Rl
SW5mbywKKyAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZy
b21QYXJzZXIgPSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7CisgIHZpcnR1YWwgfm5z
SFRNTElGcmFtZUVsZW1lbnQoKTsKKworICAvLyBuc0lTdXBwb3J0cworICBOU19ERUNMX0lTVVBQ
T1JUU19JTkhFUklURUQKKworICAvLyBuc0lET01Ob2RlCisgIE5TX0ZPUldBUkRfTlNJRE9NTk9E
RShuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NRWxlbWVudAorICBO
U19GT1JXQVJEX05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisg
IC8vIG5zSURPTUhUTUxFbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNH
ZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQorCisgIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50
CisgIE5TX0RFQ0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKKworICAvLyBuc0lET01HZXRTVkdE
b2N1bWVudAorICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCisKKyAgLy8gbnNJQ29udGVu
dAorICB2aXJ0dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CisgIE5TX0lNRVRI
T0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNv
bnN0OworICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFw
cGluZ0Z1bmN0aW9uKCkgY29uc3Q7CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2Rl
SW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7CisgIHZpcnR1YWwgbnNY
UENDbGFzc0luZm8qIEdldENsYXNzSW5mbygpOworICB2aXJ0dWFsIG5zSURPTU5vZGUqIEFzRE9N
Tm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KKworICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVyU2V0QXR0
cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zQXR0clZhbHVlKiBhVmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYU5vdGlmeSk7CisKKyAgUFJVaW50MzIgR2V0U2FuZGJv
eEZsYWdzKCkKKyAgeworICAgIG5zQXV0b1N0cmluZyBzYW5kYm94QXR0cjsKKworICAgIGlmIChH
ZXRBdHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6OnNhbmRib3gsIHNhbmRib3hBdHRy
KSkgeworICAgICAgcmV0dXJuIG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVU
b0ZsYWdzKHNhbmRib3hBdHRyKTsKKyAgICB9CisKKyAgICAvLyBObyBzYW5kYm94IGF0dHJpYnV0
ZSwgbm8gc2FuZGJveCBmbGFncy4KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHN0YXRpYyBuc0hU
TUxJRnJhbWVFbGVtZW50KiBGcm9tQ29udGVudChuc0lDb250ZW50ICphQ29udGVudCkKKyAgewor
ICAgIGlmIChhQ29udGVudC0+SXNIVE1MKG5zR2tBdG9tczo6aWZyYW1lKSkgeworICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PG5zSFRNTElGcmFtZUVsZW1lbnQqPihhQ29udGVudCk7CisgICAgfQor
ICAgIHJldHVybiBuc251bGw7CisgIH0KK307CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvZG9j
dW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMv
bnNIVE1MRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1M
RG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1l
bnQuY3BwCkBAIC0xMzEsMTYgKzEzMSwxNyBAQAogI2luY2x1ZGUgInBycHJmLmgiCiAjaW5jbHVk
ZSAibW96aWxsYS9kb20vRWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMu
aCIKICNpbmNsdWRlICJuc01pbWVUeXBlcy5oIgogI2luY2x1ZGUgIm5zSVJlcXVlc3QuaCIKICNp
bmNsdWRlICJuc0h0bWw1VHJlZU9wRXhlY3V0b3IuaCIKICNpbmNsdWRlICJuc0h0bWw1UGFyc2Vy
LmgiCiAjaW5jbHVkZSAibnNJRE9NSlNXaW5kb3cuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFn
cy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxh
Ojpkb207CiAKICNkZWZpbmUgTlNfTUFYX0RPQ1VNRU5UX1dSSVRFX0RFUFRIIDIwCiAKICNpbmNs
dWRlICJwcm1lbS5oIgogI2luY2x1ZGUgInBydGltZS5oIgpAQCAtMTI0OSwxNiArMTI1MCwyMiBA
QCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiB7CiAgIGFDb29raWUu
VHJ1bmNhdGUoKTsgLy8gY2xlYXIgY3VycmVudCBjb29raWUgaW4gY2FzZSBzZXJ2aWNlIGZhaWxz
OwogICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNvb2tpZSBpc24ndCBhbiBlcnJvciBjb25k
aXRpb24uCiAKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09L
OwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlz
IHNldCwgYWNjZXNzIHRvIHJlYWQgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAo
bVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICByZXR1cm4gTlNfRVJST1Jf
RE9NX1NFQ1VSSVRZX0VSUjsKKyAgfQorICAKICAgLy8gbm90IGhhdmluZyBhIGNvb2tpZSBzZXJ2
aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNlcnZpY2Ug
PSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlmIChzZXJ2
aWNlKSB7CiAgICAgLy8gR2V0IGEgVVJJIGZyb20gdGhlIGRvY3VtZW50IHByaW5jaXBhbC4gV2Ug
dXNlIHRoZSBvcmlnaW5hbAogICAgIC8vIGNvZGViYXNlIGluIGNhc2UgdGhlIGNvZGViYXNlIHdh
cyBjaGFuZ2VkIGJ5IFNldERvbWFpbgogICAgIG5zQ09NUHRyPG5zSVVSST4gY29kZWJhc2VVUkk7
CiAgICAgTm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMoY29kZWJhc2VVUkkp
KTsKIApAQCAtMTI3OSwxNiArMTI4NiwyMiBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5z
QVN0cmluZyYgYUNvCiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTERvY3VtZW50OjpTZXRDb29raWUo
Y29uc3QgbnNBU3RyaW5nJiBhQ29va2llKQogewogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3Mp
IHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5k
Ym94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gd3JpdGUgY29va2llcworICAvLyBp
cyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pIHsK
KyAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgfQorCiAgIC8vIG5vdCBo
YXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29r
aWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRS
QUNUSUQpOwogICBpZiAoc2VydmljZSAmJiBtRG9jdW1lbnRVUkkpIHsKICAgICBuc0NPTVB0cjxu
c0lQcm9tcHQ+IHByb21wdDsKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW5kb3cgPSBH
ZXRXaW5kb3coKTsKICAgICBpZiAod2luZG93KSB7CiAgICAgICB3aW5kb3ctPkdldFByb21wdGVy
KGdldHRlcl9BZGRSZWZzKHByb21wdCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jh
c2UvTWFrZWZpbGUuaW4gYi9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCi0tLSBhL2RvY3NoZWxs
L2Jhc2UvTWFrZWZpbGUuaW4KKysrIGIvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbgpAQCAtMTE5
LDkgKzExOSwxMCBAQCBpbmNsdWRlICQodG9wc3JjZGlyKS9jb25maWcvY29uZmlnLm1rCiBpbmNs
dWRlICQodG9wc3JjZGlyKS9pcGMvY2hyb21pdW0vY2hyb21pdW0tY29uZmlnLm1rCiBpbmNsdWRl
ICQodG9wc3JjZGlyKS9jb25maWcvcnVsZXMubWsKIAogTE9DQUxfSU5DTFVERVMgKz0gXAogICAt
SSQoc3JjZGlyKS8uLi9zaGlzdG9yeS9zcmMgXAogICAtSSQodG9wc3JjZGlyKS9kb20vYmFzZSBc
CiAgIC1JJCh0b3BzcmNkaXIpL2xheW91dC9iYXNlIFwKICAgLUkkKHRvcHNyY2RpcikveHBjb20v
ZHMgXAorICAtSSQodG9wc3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKICAgJChOVUxMKQpkaWZm
IC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcCBiL2RvY3NoZWxsL2Jhc2UvbnNE
b2NTaGVsbC5jcHAKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAorKysgYi9kb2Nz
aGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCkBAIC0yMTYsMTYgKzIxNiwxNyBAQAogI2luY2x1ZGUg
Im5zSVdlYkJyb3dzZXJQcmludC5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJuc1BsdWdpbkVycm9y
LmgiCiAjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRFcnJv
cnMuaCIKICNpbmNsdWRlICJuc0lDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNJQ29udGVu
dFNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2luY2x1
ZGUgIm5zWFVMQXBwQVBJLmgiCiAKICNpbmNsdWRlICJuc0RPTU5hdmlnYXRpb25UaW1pbmcuaCIK
ICNpbmNsdWRlICJuc0lUaW1lZENoYW5uZWwuaCIKICNpbmNsdWRlICJtb3ppbGxhL1N0YXJ0dXBU
aW1lbGluZS5oIgogCiBzdGF0aWMgTlNfREVGSU5FX0NJRChrRE9NU2NyaXB0T2JqZWN0RmFjdG9y
eUNJRCwKQEAgLTc2NiwxNiArNzY3LDE3IEBAIG5zRG9jU2hlbGw6Om5zRG9jU2hlbGwoKToKICAg
ICBtQnVzeUZsYWdzKEJVU1lfRkxBR1NfTk9ORSksCiAgICAgbUFwcFR5cGUobnNJRG9jU2hlbGw6
OkFQUF9UWVBFX1VOS05PV04pLAogICAgIG1Mb2FkVHlwZSgwKSwKICAgICBtTWFyZ2luV2lkdGgo
LTEpLAogICAgIG1NYXJnaW5IZWlnaHQoLTEpLAogICAgIG1JdGVtVHlwZSh0eXBlQ29udGVudCks
CiAgICAgbVByZXZpb3VzVHJhbnNJbmRleCgtMSksCiAgICAgbUxvYWRlZFRyYW5zSW5kZXgoLTEp
LAorICAgIG1TYW5kYm94RmxhZ3MoMCksCiAgICAgbUNyZWF0ZWQoZmFsc2UpLAogICAgIG1BbGxv
d1N1YmZyYW1lcyh0cnVlKSwKICAgICBtQWxsb3dQbHVnaW5zKHRydWUpLAogICAgIG1BbGxvd0ph
dmFzY3JpcHQodHJ1ZSksCiAgICAgbUFsbG93TWV0YVJlZGlyZWN0cyh0cnVlKSwKICAgICBtQWxs
b3dJbWFnZXModHJ1ZSksCiAgICAgbUFsbG93RE5TUHJlZmV0Y2godHJ1ZSksCiAgICAgbUFsbG93
V2luZG93Q29udHJvbCh0cnVlKSwKQEAgLTI5ODYsMTYgKzI5ODgsNzMgQEAgbnNEb2NTaGVsbDo6
RmluZEl0ZW1XaXRoTmFtZShjb25zdCBQUlVuaQogICAgICAgICAgICAgZm91bmRJdGVtID0gbnNu
dWxsOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvdW5kSXRlbSkgewogICAgICAgICAgICAg
Ly8gV2UgcmV0dXJuIGZvdW5kSXRlbSBoZXJlIGV2ZW4gaWYgaXQncyBub3QgYW4gYWN0aXZlCiAg
ICAgICAgICAgICAvLyBpdGVtIHNpbmNlIGFsbCB0aGUgbmFtZXMgd2UndmUgZGVhbHQgd2l0aCBz
byBmYXIgYXJlCiAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2VzIHRoYXQgd2Ugd29uJ3QgYm90
aGVyIGxvb2tpbmcgZm9yIGZ1cnRoZXIuCiAKKyAgICAgICAgICAgIC8vIElmIG91ciBkb2N1bWVu
dCBpcyBzYW5kYm94ZWQsIHdlIG5lZWQgdG8gZG8gc29tZSBleHRyYSBjaGVja3MuCisgICAgICAg
ICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworCisgICAgICAgICAgICBuc0NPTVB0cjxu
c0lEb2N1bWVudD4gZG9jID0gZG9fR2V0SW50ZXJmYWNlKGFPcmlnaW5hbFJlcXVlc3Rvcik7CisK
KyAgICAgICAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgICAgICAgICBzYW5kYm94RmxhZ3MgPSBk
b2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2Fu
ZGJveEZsYWdzKSB7CisgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRl
bT4gcm9vdDsKKyAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVJvb3RUcmVlSXRlbShnZXR0ZXJf
QWRkUmVmcyhyb290KSk7CisKKyAgICAgICAgICAgICAgICAvLyBJcyB0aGUgZm91bmQgaXRlbSBu
b3QgYSB0b3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCBhbmQgbm90IG91cnNlbGYgPworICAgICAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHNlbGZBc0l0ZW0gPSBzdGF0
aWNfY2FzdDxuc0lEb2NTaGVsbFRyZWVJdGVtICo+KHRoaXMpOworICAgICAgICAgICAgICAgIGlm
IChmb3VuZEl0ZW0gIT0gcm9vdCAmJiBmb3VuZEl0ZW0gIT0gc2VsZkFzSXRlbSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBBcmUgd2UgYW4gYW5jZXN0b3Igb2YgdGhlIGZvdW5kSXRlbSA/Cisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaXNBbmNlc3RvciA9IGZhbHNlOworCisgICAgICAgICAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHBhcmVudEFzSXRlbTsKKyAg
ICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50
QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudEFzSXRlbSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1w
OworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVtLT5HZXRQYXJlbnQoZ2V0dGVy
X0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgdG1w
ID09IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuY2VzdG9y
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbSA9IHRt
cDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNB
bmNlc3RvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8sIHdlIGFyZSBub3QgYW4g
YW5jZXN0b3IgYW5kIG91ciBkb2N1bWVudCBpcworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
c2FuZGJveGVkLCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAg
Zm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVG9wIGxldmVsIGJyb3dzaW5nIGNv
bnRleHQgLSBpcyBpdCBhbiBhbmNlc3RvciBvZiBvdXJzID8KKyAgICAgICAgICAgICAgICAgICAg
bnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICBH
ZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKworICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAodG1wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRt
cCA9PSBmb3VuZEl0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IGFuIGFuY2VzdG9yLCBhbmQgd2UgYXJlIHNhbmRib3hlZC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9wLW5hdmlnYXRpb24gaXMgc2V0LCB3ZSBjYW4ndCBh
bGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3Mg
JiBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcC0+R2V0UGFyZW50KGdldHRlcl9B
ZGRSZWZzKHRtcCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBmb3VuZEl0ZW0uc3dhcCgqX3JldHZhbCk7CiAg
ICAgICAgICAgICByZXR1cm4gTlNfT0s7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBLZWVw
IGxvb2tpbmcKICAgICAgICAgCiAgICAgLy8gRmlyc3Qgd2UgY2hlY2sgb3VyIG5hbWUuCkBAIC01
MDI2LDE2ICs1MDg1LDMwIEBAIG5zRG9jU2hlbGw6OlNldElzQXBwVGFiKGJvb2wgYUlzQXBwVGFi
KQogTlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6R2V0SXNBcHBUYWIoYm9vbCAqYUlzQXBwVGFi
KQogewogICAqYUlzQXBwVGFiID0gbUlzQXBwVGFiOwogICByZXR1cm4gTlNfT0s7CiB9CiAKIE5T
X0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6OlNldFNhbmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJv
eEZsYWdzKQoreworICAgIG1TYW5kYm94RmxhZ3MgPSBhU2FuZGJveEZsYWdzOworICAgIHJldHVy
biBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdz
KFBSVWludDMyICAqYVNhbmRib3hGbGFncykKK3sKKyAgICAqYVNhbmRib3hGbGFncyA9IG1TYW5k
Ym94RmxhZ3M7CisgICAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCiBuc0RvY1No
ZWxsOjpTZXRWaXNpYmlsaXR5KGJvb2wgYVZpc2liaWxpdHkpCiB7CiAgICAgaWYgKCFtQ29udGVu
dFZpZXdlcikKICAgICAgICAgcmV0dXJuIE5TX09LOwogICAgIGlmIChhVmlzaWJpbGl0eSkgewog
ICAgICAgICBtQ29udGVudFZpZXdlci0+U2hvdygpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTgy
NDcsMTYgKzgzMjAsMjkgQEAgbnNEb2NTaGVsbDo6SW50ZXJuYWxMb2FkKG5zSVVSSSAqIGFVUkks
CiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRhcmdldEl0ZW07CiAgICAg
ICAgIEZpbmRJdGVtV2l0aE5hbWUoYVdpbmRvd1RhcmdldCwgbnNudWxsLCB0aGlzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKHRhcmdldEl0ZW0pKTsKIAogICAgICAg
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gdGFyZ2V0RG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFj
ZSh0YXJnZXRJdGVtKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNOZXdXaW5kb3cgPSBmYWxz
ZTsKICAgICAgICAgaWYgKCF0YXJnZXREb2NTaGVsbCkgeworICAgICAgICAgICAgLy8gSWYgdGhl
IGRvY3NoZWxsJ3MgZG9jdW1lbnQgaXMgc2FuZGJveGVkIGFuZCB3YXMgdHJ5aW5nIHRvCisgICAg
ICAgICAgICAvLyBuYXZpZ2F0ZS9sb2FkIGEgZnJhbWUgaXQgd2Fzbid0IGFsbG93ZWQgdG8gYWNj
ZXNzLCB0aGUKKyAgICAgICAgICAgIC8vIEZpbmRJdGVtV2l0aE5hbWUgYWJvdmUgd2lsbCBoYXZl
IHJldHVybmVkIG51bGwgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgIC8vIGl0ZW0gLSB3ZSBk
b24ndCB3YW50IHRvIGFjdHVhbGx5IG9wZW4gYSBuZXcgd2luZG93IGluIHRoaXMgY2FzZQorICAg
ICAgICAgICAgLy8gdGhvdWdoLiBDaGVjayBpZiB3ZSBhcmUgc2FuZGJveGVkIGFuZCBiYWlsIG91
dCBoZXJlIGlmIHNvLgorICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUobUNvbnRlbnRWaWV3ZXIs
IE5TX0VSUk9SX0ZBSUxVUkUpOworICAgICAgICAgICAgbnNJRG9jdW1lbnQqIGRvYyA9IG1Db250
ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZs
YWdzID0gMDsKKyAgICAgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7
CisgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX05BVklHQVRJT04pIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiB3aW4gPQogICAgICAgICAgICAg
ICAgIGRvX0dldEludGVyZmFjZShHZXRBc1N1cHBvcnRzKHRoaXMpKTsKICAgICAgICAgICAgIE5T
X0VOU1VSRV9UUlVFKHdpbiwgTlNfRVJST1JfTk9UX0FWQUlMQUJMRSk7CiAKICAgICAgICAgICAg
IG5zRGVwZW5kZW50U3RyaW5nIG5hbWUoYVdpbmRvd1RhcmdldCk7CiAgICAgICAgICAgICBuc0NP
TVB0cjxuc0lET01XaW5kb3c+IG5ld1dpbjsKICAgICAgICAgICAgIHJ2ID0gd2luLT5PcGVuKEVt
cHR5U3RyaW5nKCksIC8vIFVSTCB0byBsb2FkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lLCAgICAgICAgICAvLyB3aW5kb3cgbmFtZQpAQCAtOTAzNCwxOCArOTEyMCwzMSBAQCBuc0Rv
Y1NoZWxsOjpEb1VSSUxvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgfQogICAgICAgICAvLyBT
ZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkKICAgICAgICAgaWYgKGFSZWZlcnJlclVSSSAmJiBh
U2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAgICAvLyBSZWZlcnJlciBpcyBjdXJyZW5seSBvbmx5
IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4KICAgICAgICAgICAgIGh0dHBDaGFubmVsLT5TZXRS
ZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbnNDT01QdHI8
bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChkb19RdWVyeUludGVyZmFjZShhT3duZXIpKTsK
LSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNo
YW5uZWwsIGFVUkksIHRydWUpOworICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmlu
Y2lwYWw7CisKKyAgICAvLyBJZiB0aGUgY29udGVudCBiZWluZyBsb2FkZWQgc2hvdWxkIGJlIHNh
bmRib3hlZCB3aXRoIHJlc3BlY3QgdG8gb3JpZ2luCisgICAgLy8gd2UgbmVlZCB0byBjcmVhdGUg
YSBuZXcgbnVsbCBwcmluY2lwYWwgaGVyZSwgYW5kIHRoZW4gdGVsbAorICAgIC8vIG5zQ29udGVu
dFV0aWxzOjpTZXRVcENoYW5uZWxPd25lciB0byBmb3JjZSBpdCB0byBiZSBzZXQgYXMgdGhlCisg
ICAgLy8gY2hhbm5lbCBvd25lci4KKyAgICBpZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9P
UklHSU4pIHsKKyAgICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1v
emlsbGEub3JnL251bGxwcmluY2lwYWw7MSIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5v
dCBzYW5kYm94ZWQgLSB3ZSBhbGxvdyB0aGUgY29udGVudCB0byBhc3N1bWUgaXRzIG5hdHVyYWwg
b3duZXIuCisgICAgICAgIG93bmVyUHJpbmNpcGFsID0gZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVy
KTsKKyAgICB9CisKKyAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQ
cmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikpOwogCiAgICAg
bnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJm
YWNlKGNoYW5uZWwpOwogICAgIGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgICAgIC8vIEFsbG93
IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAg
ICAgICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAgICAgICAgU2V0RXhlY3V0aW9uUG9saWN5KG5z
SVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFMKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2Rv
Y3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKLS0t
IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1No
ZWxsLmgKQEAgLTc4NCwxNiArNzg0LDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBDcmVhdGUoKSBp
cyBjYWxsZWQsIHRoZSB0eXBlIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuCiAgICAgUFJJbnQz
MiAgICAgICAgICAgICAgICAgICAgbUl0ZW1UeXBlOwogCiAgICAgLy8gSW5kZXggaW50byB0aGUg
U0hUcmFuc2FjdGlvbiBsaXN0LCBpbmRpY2F0aW5nIHRoZSBwcmV2aW91cyBhbmQgY3VycmVudAog
ICAgIC8vIHRyYW5zYWN0aW9uIGF0IHRoZSB0aW1lIHRoYXQgdGhpcyBEb2NTaGVsbCBiZWdpbnMg
dG8gbG9hZAogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1QcmV2aW91c1RyYW5zSW5k
ZXg7CiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUxvYWRlZFRyYW5zSW5kZXg7CiAK
KyAgICBQUlVpbnQzMiAgICAgICAgICAgICAgICAgICBtU2FuZGJveEZsYWdzOworCiAgICAgYm9v
bCAgICAgICAgICAgICAgICAgICAgICAgbUNyZWF0ZWQ7CiAgICAgYm9vbCAgICAgICAgICAgICAg
ICAgICAgICAgbUFsbG93U3ViZnJhbWVzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAg
IG1BbGxvd1BsdWdpbnM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93SmF2
YXNjcmlwdDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dNZXRhUmVkaXJl
Y3RzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ltYWdlczsKICAgICBi
b29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dETlNQcmVmZXRjaDsKICAgICBib29sICAg
ICAgICAgICAgICAgICAgICAgICBtQWxsb3dXaW5kb3dDb250cm9sOwpkaWZmIC0tZ2l0IGEvZG9j
c2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlk
bAotLS0gYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAorKysgYi9kb2NzaGVsbC9iYXNl
L25zSURvY1NoZWxsLmlkbApAQCAtNjgsMTcgKzY4LDE3IEBAIGludGVyZmFjZSBuc0lTSEVudHJ5
OwogaW50ZXJmYWNlIG5zSUxheW91dEhpc3RvcnlTdGF0ZTsKIGludGVyZmFjZSBuc0lTZWN1cmVC
cm93c2VyVUk7CiBpbnRlcmZhY2UgbnNJRE9NU3RvcmFnZTsKIGludGVyZmFjZSBuc0lQcmluY2lw
YWw7CiBpbnRlcmZhY2UgbnNJV2ViQnJvd3NlclByaW50OwogaW50ZXJmYWNlIG5zSVZhcmlhbnQ7
CiBpbnRlcmZhY2UgbnNJUHJpdmFjeVRyYW5zaXRpb25PYnNlcnZlcjsKIAotW3NjcmlwdGFibGUs
IHV1aWQoNmY2MGFjOTYtZmEyYy00MWE1LTkyYjQtMjlhYWFkYmQ3YTdiKV0KK1tzY3JpcHRhYmxl
LCB1dWlkKDliMjgzMzM3LTA5N2QtNGZhOC1hMmRhLTkxNjMxOGVhZjgyOCldCiBpbnRlcmZhY2Ug
bnNJRG9jU2hlbGwgOiBuc0lTdXBwb3J0cwogewogICAvKioKICAgICogTG9hZHMgYSBnaXZlbiBV
UkkuICBUaGlzIHdpbGwgZ2l2ZSBwcmlvcml0eSB0byBsb2FkaW5nIHRoZSByZXF1ZXN0ZWQgVVJJ
CiAgICAqIGluIHRoZSBvYmplY3QgaW1wbGVtZW50aW5nCXRoaXMgaW50ZXJmYWNlLiAgSWYgaXQg
Y2FuJ3QgYmUgbG9hZGVkIGhlcmUKICAgICogaG93ZXZlciwgdGhlIFVSTCBkaXNwYXRjaGVyIHdp
bGwgZ28gdGhyb3VnaCBpdHMgbm9ybWFsIHByb2Nlc3Mgb2YgY29udGVudAogICAgKiBsb2FkaW5n
LgogICAgKgpAQCAtNjIyLDkgKzYyMiwyMyBAQCBpbnRlcmZhY2UgbnNJRG9jU2hlbGwgOiBuc0lT
dXBwb3J0cwogICAgKi8KICAgYXR0cmlidXRlIGJvb2wgaXNCcm93c2VyRnJhbWU7CiAKICAgLyoK
ICAgICogSXMgdGhpcyBkb2NzaGVsbCBjb250YWluZWQgaW4gYW4gPGlmcmFtZSBtb3picm93c2Vy
PiwgZWl0aGVyIGRpcmVjdGx5IG9yCiAgICAqIGluZGlyZWN0bHk/CiAgICAqLwogICByZWFkb25s
eSBhdHRyaWJ1dGUgYm9vbCBjb250YWluZWRJbkJyb3dzZXJGcmFtZTsKKworICAvKioKKyAgICog
VGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3NoZWxsLiBUaGVzZSByZWZsZWN0IHRoZSB2YWx1
ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUgb2YgdGhlIGFzc29jaWF0ZWQgSUZSQU1F
IG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZgorICAgKiBleGlzdGVudC4gU2VlIHRoZSBI
VE1MNSBzcGVjIGZvciBtb3JlIGRldGFpbHMuCisgICAqIFRoZXNlIGZsYWdzIG9uIHRoZSBkb2Nz
aGVsbCByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzYW5kYm94CisgICAqIGF0dHJp
YnV0ZSwgd2hpY2ggaXMgbW9kaWZpYWJsZS4gVGhleSBhcmUgb25seSB1c2VkIHdoZW4gbG9hZGlu
ZyBuZXcKKyAgICogY29udGVudCwgc2FuZGJveCBmbGFncyBhcmUgYWxzbyBpbW11dGFibHkgc2V0
IG9uIHRoZSBkb2N1bWVudCB3aGVuIGl0IGlzCisgICAqIGxvYWRlZC4KKyAgICogVGhlIHNhbmRi
b3ggZmxhZ3Mgb2YgYSBkb2N1bWVudCBkZXBlbmQgb24gdGhlIHNhbmRib3ggZmxhZ3Mgb24gaXRz
CisgICAqIGRvY3NoZWxsIGFuZCBvZiBpdHMgcGFyZW50IGRvY3VtZW50LCBpZiBhbnkuCisgICAq
IFNlZSBuc1NhbmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MuCisgICAqLworICBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzYW5kYm94RmxhZ3M7CiB9OwpkaWZmIC0tZ2l0IGEvZG9t
L2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCi0t
LSBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcAorKysgYi9kb20vYmFzZS9uc0dsb2JhbFdp
bmRvdy5jcHAKQEAgLTI1NSwxNiArMjU1LDE3IEBACiAKICNpbmNsdWRlICJuc1JlZnJlc2hEcml2
ZXIuaCIKICNpbmNsdWRlICJtb3pBdXRvRG9jVXBkYXRlLmgiCiAKICNpbmNsdWRlICJtb3ppbGxh
L1RlbGVtZXRyeS5oIgogI2luY2x1ZGUgIm5zTG9jYXRpb24uaCIKICNpbmNsdWRlICJuc1dyYXBw
ZXJDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJuc0RPTUV2ZW50VGFyZ2V0SGVscGVyLmgiCisj
aW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2lmZGVmIEFORFJPSUQKICNpbmNsdWRlIDxh
bmRyb2lkL2xvZy5oPgogI2VuZGlmCiAKICNpZmRlZiBQUl9MT0dHSU5HCiBzdGF0aWMgUFJMb2dN
b2R1bGVJbmZvKiBnRE9NTGVha1BSTG9nOwogI2VuZGlmCkBAIC03OTc4LDE2ICs3OTc5LDIyIEBA
IG5zR2xvYmFsV2luZG93OjpHZXRTZXNzaW9uU3RvcmFnZShuc0lET00KICAgaWYgKCFtU2Vzc2lv
blN0b3JhZ2UpIHsKICAgICAqYVNlc3Npb25TdG9yYWdlID0gbnNudWxsOwogCiAgICAgbnNTdHJp
bmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5H
ZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3Vt
ZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93
IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hG
bGFncygpICYgU0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01f
U0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zcmVzdWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNl
c3Npb25TdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFVSSSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdldHRlcl9BZGRSZWZzKG1TZXNzaW9uU3RvcmFnZSkpOwogICAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CiAKICNpZmRlZiBQUl9MT0dHSU5HCiAgICAgaWYgKFBSX0xPR19URVNUKGdE
T01MZWFrUFJMb2csIFBSX0xPR19ERUJVRykpIHsKQEAgLTgwMzksMTYgKzgwNDYsMjIgQEAgbnNH
bG9iYWxXaW5kb3c6OkdldExvY2FsU3RvcmFnZShuc0lET01TdAogICAgICAgZG9fR2V0U2Vydmlj
ZSgiQG1vemlsbGEub3JnL2RvbS9zdG9yYWdlbWFuYWdlcjsxIiwgJnJ2KTsKICAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYg
KG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVS
SSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9y
aWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2Uu
CisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX09SSUdJ
TikpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwog
ICAgIHJ2ID0gc3RvcmFnZU1hbmFnZXItPkdldExvY2FsU3RvcmFnZUZvclByaW5jaXBhbChwcmlu
Y2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY3VtZW50VVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhtTG9jYWxTdG9yYWdlKSk7CiAgICAgTlNfRU5T
VVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgfQogCiAgIE5TX0FERFJFRigqYUxvY2FsU3RvcmFnZSA9
IG1Mb2NhbFN0b3JhZ2UpOwogICByZXR1cm4gTlNfT0s7CmRpZmYgLS1naXQgYS9kb20vaW50ZXJm
YWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0
bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwv
bnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJ
RE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCkBAIC00NSwzMiArNDUsMzIgQEAKICAqCiAgKiBUaGlz
IGludGVyZmFjZSBpcyB0cnlpbmcgdG8gZm9sbG93IHRoZSBET00gTGV2ZWwgMiBIVE1MIHNwZWNp
ZmljYXRpb246CiAgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1MLwogICoK
ICAqIHdpdGggY2hhbmdlcyBmcm9tIHRoZSB3b3JrLWluLXByb2dyZXNzIFdIQVRXRyBIVE1MIHNw
ZWNpZmljYXRpb246CiAgKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3Vy
cmVudC13b3JrLwogICovCiAKLVtzY3JpcHRhYmxlLCB1dWlkKDk3RTRGMEUxLUJEMjctNDBFQy05
Mjg3LTU2MzREQUYxNUI3MyldCitbc2NyaXB0YWJsZSwgdXVpZCg1MmY2MjQ0Yi1iMWY1LTRmNGMt
OGZmMy03ZTE0NjMxNmY0MTEpXQogaW50ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDog
bnNJRE9NSFRNTEVsZW1lbnQKIHsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAg
ICAgYWxpZ247CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGZyYW1lQm9y
ZGVyOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBoZWlnaHQ7CiAgICAg
ICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGxvbmdEZXNjOwogICAgICAgICAgICBh
dHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5IZWlnaHQ7CiAgICAgICAgICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbldpZHRoOwogICAgICAgICAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nICAgICAgICBuYW1lOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAg
ICAgICBzY3JvbGxpbmc7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNy
YzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgd2lkdGg7CiAgIC8vIElu
dHJvZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01Eb2N1
bWVudCAgIGNvbnRlbnREb2N1bWVudDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVdpbmRv
dyAgICAgY29udGVudFdpbmRvdzsKIAotCisgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcg
ICAgICAgIHNhbmRib3g7CiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBpZnJhbWUgZWxl
bWVudHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0byBiZSBwcmVz
ZW50CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3ViIGRvY3VtZW50
IHRvIGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRwczovL3dpa2ku
bW96aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkKICAgICAgICAg
ICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVuOwogfTsKZGlm
ZiAtLWdpdCBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4gYi9kb20vc3JjL2pzdXJsL01ha2Vm
aWxlLmluCi0tLSBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KKysrIGIvZG9tL3NyYy9qc3Vy
bC9NYWtlZmlsZS5pbgpAQCAtNTcsMTYgKzU3LDE3IEBAIFhQSURMU1JDUwk9IFwKIENQUFNSQ1MJ
CT0gbnNKU1Byb3RvY29sSGFuZGxlci5jcHAKIAogRVhQT1JUUwkJPSAkKHNyY2RpcikvbnNKU1By
b3RvY29sSGFuZGxlci5oCiAKIExPQ0FMX0lOQ0xVREVTICs9IFwKIAkJLUkkKHNyY2RpcikgXAog
CQktSSQodG9wc3JjZGlyKS9kb20vYmFzZSBcCiAJCS1JJCh0b3BzcmNkaXIpL25ldHdlcmsvYmFz
ZS9zcmMgXAorCQktSSQodG9wc3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKIAogaWZkZWYgQlVJ
TERfREVCVUdfR0MKIERFRklORVMJCSs9IC1EREVCVUdfR0MKIGVuZGlmCiAKIERJUlMgICAgICAg
ICAgICA9ICQoTlVMTCkKIFRFU1RfRElSUyArPSB0ZXN0CiAKZGlmZiAtLWdpdCBhL2RvbS9zcmMv
anN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAgYi9kb20vc3JjL2pzdXJsL25zSlNQcm90b2Nv
bEhhbmRsZXIuY3BwCi0tLSBhL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAK
KysrIGIvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcApAQCAtNzQsMTYgKzc0
LDE3IEBACiAjaW5jbHVkZSAibnNUaHJlYWRVdGlscy5oIgogI2luY2x1ZGUgIm5zSUpTQ29udGV4
dFN0YWNrLmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIm5zSURv
Y3VtZW50LmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0SW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJu
c0lPYmplY3RPdXRwdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lXcml0YWJsZVByb3BlcnR5QmFn
Mi5oIgogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIm5z
U2FuZGJveEZsYWdzLmgiCiAKIHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtKU1VSSUNJRCwgTlNfSlNV
UklfQ0lEKTsKIAogY2xhc3MgbnNKU1RodW5rIDogcHVibGljIG5zSUlucHV0U3RyZWFtCiB7CiBw
dWJsaWM6CiAgICAgbnNKU1RodW5rKCk7CiAKQEAgLTIyMCwxNiArMjIxLDI4IEBAIG5zcmVzdWx0
IG5zSlNUaHVuazo6RXZhbHVhdGVTY3JpcHQobnNJQ2gKICAgICAvLyBHZXQgdGhlIGdsb2JhbCBv
YmplY3Qgd2Ugc2hvdWxkIGJlIHJ1bm5pbmcgb24uCiAgICAgbnNJU2NyaXB0R2xvYmFsT2JqZWN0
KiBnbG9iYWwgPSBHZXRHbG9iYWxPYmplY3QoYUNoYW5uZWwpOwogICAgIGlmICghZ2xvYmFsKSB7
CiAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAogICAgIG5zQ09NUHRy
PG5zUElET01XaW5kb3c+IHdpbihkb19RdWVyeUludGVyZmFjZShnbG9iYWwpKTsKIAorICAgIC8v
IFNhbmRib3hlZCBkb2N1bWVudCBjaGVjazogamF2YXNjcmlwdDogVVJJJ3MgYXJlIGRpc2FibGVk
CisgICAgLy8gaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgdW5sZXNzICdhbGxvdy1zY3JpcHRzJyB3
YXMgc3BlY2lmaWVkCisKKyAgICAvLyBSRVZJRVcgLSBpdCBzZWVtcyBsaWtlIHRoZSBvcmlnaW5h
bCBpbm5lciB3aW5kb3cgd291bGQgYmUgdGhlIG9uZQorICAgIC8vIHRoYXQgd2lsbCBleGVjdXRl
IHRoZSBqYXZhc2NyaXB0IHdpdGggaXRzIHByaW5jaXBhbCAtIGlzIHRoaXMKKyAgICAvLyBhc3N1
bXB0aW9uIGNvcnJlY3QgPz8gKGFuZCBpcyBHZXRFeHRhbnREb2N1bWVudCgpIHRoZSByaWdodCB3
YXkKKyAgICAvLyB0byBnZXQgdGhlIHJpZ2h0IGRvY3VtZW50ID8/CisgICAgbnNDT01QdHI8bnNJ
RG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFPcmlnaW5hbElubmVyV2luZG93LT5H
ZXRFeHRhbnREb2N1bWVudCgpKTsKKyAgICBpZiAoZG9jICYmIChkb2MtPlNhbmRib3hGbGFncygp
ICYgU0FOREJPWEVEX1NDUklQVFMpKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1JFVFZB
TF9VTkRFRklORUQ7CisgICAgfQorCiAgICAgLy8gUHVzaCBvdXIgcG9wdXAgY29udHJvbCBzdGF0
ZQogICAgIG5zQXV0b1BvcHVwU3RhdGVQdXNoZXIgcG9wdXBTdGF0ZVB1c2hlcih3aW4sIGFQb3B1
cFN0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHRoZSBzYW1lIGlubmVy
IHdpbmRvdyBhcyB3ZSB1c2VkIHRvLgogICAgIG5zUElET01XaW5kb3cgKmlubmVyV2luID0gd2lu
LT5HZXRDdXJyZW50SW5uZXJXaW5kb3coKTsKIAogICAgIGlmIChpbm5lcldpbiAhPSBhT3JpZ2lu
YWxJbm5lcldpbmRvdykgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfVU5FWFBFQ1RFRDsKZGlm
ZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL01ha2VmaWxl
LmluIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4K
LS0tIGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4K
KysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4K
QEAgLTU2LDExICs1NiwxMiBAQCBDUFBTUkNTCQkrPSBuc0RpYWxvZ1BhcmFtQmxvY2suY3BwIFwK
IAkJICAgJChOVUxMKQogZW5kaWYKIAogIyB3ZSBkb24ndCB3YW50IHRoZSBzaGFyZWQgbGliLCBi
dXQgd2Ugd2FudCB0byBmb3JjZSB0aGUgY3JlYXRpb24gb2YgYQogIyBzdGF0aWMgbGliLgogRk9S
Q0VfU1RBVElDX0xJQiA9IDEKIAogIyBGb3IgbnNKU1V0aWxzCi1MT0NBTF9JTkNMVURFUyArPSAt
SSQodG9wc3JjZGlyKS9kb20vYmFzZQorTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2Rpcikv
ZG9tL2Jhc2UgXAorCQkgIC1JJCh0b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9zcmMgXAogCiBpbmNs
dWRlICQodG9wc3JjZGlyKS9jb25maWcvcnVsZXMubWsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9j
b21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAgYi9lbWJlZGRp
bmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCi0tLSBh
L2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5j
cHAKKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dX
YXRjaGVyLmNwcApAQCAtODYsMTYgKzg2LDE3IEBACiAjaW5jbHVkZSAibnNQSURPTVN0b3JhZ2Uu
aCIKICNpbmNsdWRlICJuc0lXaWRnZXQuaCIKICNpbmNsdWRlICJuc0ZvY3VzTWFuYWdlci5oIgog
I2luY2x1ZGUgIm5zSVByZXNTaGVsbC5oIgogI2luY2x1ZGUgIm5zUHJlc0NvbnRleHQuaCIKICNp
bmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zSVByZWZCcmFuY2guaCIKICNp
bmNsdWRlICJuc0lQcmVmU2VydmljZS5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAK
ICNpZmRlZiBVU0VXRUFLUkVGUwogI2luY2x1ZGUgIm5zSVdlYWtSZWZlcmVuY2UuaCIKICNlbmRp
ZgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNKU1N0
YWNrQ29udHJhY3RJRD0iQG1vemlsbGEub3JnL2pzL3hwYy9Db250ZXh0U3RhY2s7MSI7CkBAIC02
MDMsMTYgKzYwNCwzMyBAQCBuc1dpbmRvd1dhdGNoZXI6Ok9wZW5XaW5kb3dKU0ludGVybmFsKG5z
CiAgIH0KIAogICBpZiAoIW5ld0RvY1NoZWxsSXRlbSkgewogICAgIC8vIFdlJ3JlIGdvaW5nIHRv
IGVpdGhlciBvcGVuIHVwIGEgbmV3IHdpbmRvdyBvdXJzZWx2ZXMgb3IgYXNrIGEKICAgICAvLyBu
c0lXaW5kb3dQcm92aWRlciBmb3Igb25lLiAgSW4gZWl0aGVyIGNhc2UsIHdlJ2xsIHdhbnQgdG8g
c2V0IHRoZSByaWdodAogICAgIC8vIG5hbWUgb24gaXQuCiAgICAgd2luZG93TmVlZHNOYW1lID0g
dHJ1ZTsKIAorICAgIC8vIElmIHRoZSBwYXJlbnQgdHJ5aW5nIHRvIG9wZW4gYSBuZXcgd2luZG93
IGlzIHNhbmRib3hlZCwKKyAgICAvLyB0aGlzIGlzIG5vdCBhbGxvd2VkIGFuZCB3ZSBmYWlsIGhl
cmUuCisgICAgaWYgKGFQYXJlbnQpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURPTURvY3VtZW50PiBk
b21kb2M7CisgICAgICBhUGFyZW50LT5HZXREb2N1bWVudChnZXR0ZXJfQWRkUmVmcyhkb21kb2Mp
KTsKKyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19RdWVyeUludGVyZmFjZShk
b21kb2MpOworCisgICAgICBpZiAoZG9jKSB7CisgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFn
cyA9IDA7CisgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisKKyAg
ICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAg
ICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisK
ICAgICAvLyBOb3cgY2hlY2sgd2hldGhlciBpdCdzIG9rIHRvIGFzayBhIHdpbmRvdyBwcm92aWRl
ciBmb3IgYSB3aW5kb3cuICBEb24ndAogICAgIC8vIGRvIGl0IGlmIHdlJ3JlIG9wZW5pbmcgYSBk
aWFsb2cgb3IgaWYgb3VyIHBhcmVudCBpcyBhIGNocm9tZSB3aW5kb3cgb3IKICAgICAvLyBpZiB3
ZSdyZSBvcGVuaW5nIHNvbWV0aGluZyB0aGF0IGhhcyBtb2RhbCwgZGlhbG9nLCBvciBjaHJvbWUg
ZmxhZ3Mgc2V0LgogICAgIG5zQ09NUHRyPG5zSURPTUNocm9tZVdpbmRvdz4gY2hyb21lV2luID0g
ZG9fUXVlcnlJbnRlcmZhY2UoYVBhcmVudCk7CiAgICAgaWYgKCFhRGlhbG9nICYmICFjaHJvbWVX
aW4gJiYKICAgICAgICAgIShjaHJvbWVGbGFncyAmIChuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJP
TUVfTU9EQUwgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3Nl
ckNocm9tZTo6Q0hST01FX09QRU5BU19ESUFMT0cgfCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0NIUk9NRSkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>624484</attachid>
            <date>2012-05-16 12:11:01 -0700</date>
            <delta_ts>2012-08-08 17:17:19 -0700</delta_ts>
            <desc>iframe sandbox tests - same origin v4</desc>
            <filename>iframe_sandbox_tests_same_origin</filename>
            <type>text/plain</type>
            <size>10575</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMzlmYTU3NDI0Mjc1NWNmMDM5OWQ1MTkxMDg1
NWI3YTk4NzYxMmFlMAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBzYW1lIG9yaWdpbgoKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4gYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01h
a2VmaWxlLmluCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgpAQCAtMjkxLDE2ICsyOTEs
MjAgQEAgX1RFU1RfRklMRVMgPSBcCiAJCXRlc3RfbGlfYXR0cmlidXRlc19yZWZsZWN0aW9uLmh0
bWwgXAogCQl0ZXN0X29sX2F0dHJpYnV0ZXNfcmVmbGVjdGlvbi5odG1sIFwKIAkJdGVzdF9idWc2
NTE5NTYuaHRtbCBcCiAJCXRlc3RfYnVnNjk0NTAzLmh0bWwgXAogCQl0ZXN0X29iamVjdF9wbHVn
aW5fbmF2Lmh0bWwgXAogCQl0ZXN0X2J1Zzc0MjAzMC5odG1sIFwKIAkJdGVzdF9idWc3NDI1NDku
aHRtbCBcCiAJCXRlc3RfYnVnNzQ1Njg1Lmh0bWwgXAorCQl0ZXN0X2lmcmFtZV9zYW5kYm94X3Nh
bWVfb3JpZ2luLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2JfaWYxLmh0bWwgXAorCQlm
aWxlX2lmcmFtZV9zYW5kYm94X2JfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Jf
aWYzLmh0bWwgXAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb24uaHRtbCBcCiAJCWZp
bGVfaWZyYW1lX3NhbmRib3hfZF9pZjEuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9p
ZjIuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjMuaHRtbCBcCiAJCWZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjQuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRt
bCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjYuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjcuaHRtbCBcCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0t
LSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2JfaWYxLmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBC
dWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2Nz
cyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5Pgor
ICBJIGFtIHNhbmRib3hlZCB3aXRob3V0IGFueSBwZXJtaXNzaW9ucworPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2JfaWYyLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfYl9pZjIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMi5odG1s
CkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+
CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9T
aW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8c2NyaXB0PgorICBmdW5jdGlvbiBvayhj
b25kaXRpb24sIG1zZykgeworICAgIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihjb25kaXRpb24s
IG1zZyk7CisgIH0KKworICBmdW5jdGlvbiB0ZXN0WEhSKCkgeworICAgIHZhciB4aHIgPSBuZXcg
WE1MSHR0cFJlcXVlc3QoKTsKKworICAgIHhoci5vcGVuKCJHRVQiLCAiZmlsZV9pZnJhbWVfc2Fu
ZGJveF9iX2lmMS5odG1sIik7CisKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rp
b24gKG9FdmVudCkgeworICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlOworICAgICAgaWYgKHhoci5y
ZWFkeVN0YXRlID09IDQpIHsKKyAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7CisgICAg
ICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBvayhyZXN1bHQsICJYSFIg
c2hvdWxkIHdvcmsgbm9ybWFsbHkgaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoICdhbGxvdy1z
YW1lLW9yaWdpbiciKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB4aHIuc2VuZChudWxsKTsKKyAg
fQorCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgb2sodHJ1ZSwgImRvY3VtZW50cyBzYW5k
Ym94ZWQgd2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyB0
aGVpciBwYXJlbnQiKTsKKworICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyBkb2N1bWVu
dC5jb29raWUgc2luY2Ugd2UgaGF2ZSAnYWxsb3ctc2FtZS1vcmlnaW4nCisgICAgb2soZG9jdW1l
bnQuY29va2llID09ICIiLCAiYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zYW1lLW9y
aWdpbiBzaG91bGQgYmUgYWJsZSB0byBhY2Nlc3MgZG9jdW1lbnQuY29va2llIik7CisKKyAgICAv
LyBzaG91bGQgYmUgYWJsZSB0byBhY2Nlc3MgbG9jYWxTdG9yYWdlIHNpbmNlIHdlIGhhdmUgJ2Fs
bG93LXNhbWUtb3JpZ2luJworICAgIG9rKHdpbmRvdy5sb2NhbFN0b3JhZ2UsICJhIGRvY3VtZW50
IHNhbmRib3hlZCB3aXRoIGFsbG93LXNhbWUtb3JpZ2luIHNob3VsZCBiZSBhYmxlIHRvIGFjY2Vz
cyBsb2NhbFN0b3JhZ2UiKTsKKworICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyBzZXNz
aW9uU3RvcmFnZSBzaW5jZSB3ZSBoYXZlICdhbGxvdy1zYW1lLW9yaWdpbicKKyAgICBvayh3aW5k
b3cuc2Vzc2lvblN0b3JhZ2UsICJhIGRvY3VtZW50IHNhbmRib3hlZCB3aXRoIGFsbG93LXNhbWUt
b3JpZ2luIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyBzZXNzaW9uU3RvcmFnZSIpOworCisgICAg
dGVzdFhIUigpOworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAg
SSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNhbWUtb3JpZ2luIiBhbmQgImFsbG93LXNj
cmlwdHMiCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjMuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2JfaWYzLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0
IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0
ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxz
Y3JpcHQ+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgbWVzc2FnZSkgeworICAgIHdpbmRvdy5wYXJl
bnQucG9zdE1lc3NhZ2Uoe29rOiByZXN1bHQsIGRlc2M6IG1lc3NhZ2V9LCAiKiIpOworICB9CisK
KyAgZnVuY3Rpb24gdGVzdFhIUigpIHsKKyAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgp
OworCisgIHhoci5vcGVuKCJHRVQiLCAiZmlsZV9pZnJhbWVfc2FuZGJveF9pZjEuaHRtbCIpOwor
CisgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAob0V2ZW50KSB7CisgICAgdmFy
IHJlc3VsdCA9IGZhbHNlOworICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICBp
ZiAoeGhyLnN0YXR1cyA9PSAwKSB7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICB9Cisg
ICAgICBvayhyZXN1bHQsICJYSFIgc2hvdWxkIGJlIGJsb2NrZWQgaW4gYW4gaWZyYW1lIHNhbmRi
b3hlZCBXSVRIT1VUICdhbGxvdy1zYW1lLW9yaWdpbiciKTsKKyAgICB9CisgIH0KKworICB4aHIu
c2VuZChudWxsKTsKK30KKworICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIHRyeSB7CisgICAg
ICB3aW5kb3cucGFyZW50Lm9rKGZhbHNlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRob3V0ICdh
bGxvdy1zYW1lLW9yaWdpbicgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyB0aGVpciBwYXJl
bnQiKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgb2sodHJ1ZSwgImRvY3VtZW50cyBz
YW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctc2FtZS1vcmlnaW4nIHNob3VsZCBOT1QgYmUgYWJsZSB0
byBhY2Nlc3MgdGhlaXIgcGFyZW50Iik7CisgICAgfQorCisgICAgLy8gc2hvdWxkIE5PVCBiZSBh
YmxlIHRvIGFjY2VzcyBkb2N1bWVudC5jb29raWUKKyAgICB0cnkgeworICAgICAgdmFyIGZvbyA9
IGRvY3VtZW50LmNvb2tpZTsKKyAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICBvayh0cnVlLCAi
YSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aG91dCBhbGxvdy1zYW1lLW9yaWdpbiBzaG91bGQgTk9U
IGJlIGFibGUgdG8gYWNjZXNzIGRvY3VtZW50LmNvb2tpZSIpOworICAgIH0KKworICAgIC8vIHNo
b3VsZCBOT1QgYmUgYWJsZSB0byBhY2Nlc3MgbG9jYWxTdG9yYWdlCisgICAgdHJ5IHsKKyAgICAg
IHZhciBmb28gPSB3aW5kb3cubG9jYWxTdG9yYWdlOworICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAg
ICAgIG9rKHRydWUsICJhIGRvY3VtZW50IHNhbmRib3hlZCB3aXRob3V0IGFsbG93LXNhbWUtb3Jp
Z2luIHNob3VsZCBOT1QgYmUgYWJsZSB0byBhY2Nlc3MgbG9jYWxTdG9yYWdlIik7CisgICAgfQor
CisgICAgLy8gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBzZXNzaW9uU3RvcmFnZQorICAg
IHRyeSB7CisgICAgICB2YXIgZm9vID0gd2luZG93LnNlc3Npb25TdG9yYWdlOworICAgIH0gY2F0
Y2goZXJyb3IpIHsKKyAgICAgIG9rKHRydWUsICJhIGRvY3VtZW50IHNhbmRib3hlZCB3aXRob3V0
IGFsbG93LXNhbWUtb3JpZ2luIHNob3VsZCBOT1QgYmUgYWJsZSB0byBhY2Nlc3Mgc2Vzc2lvblN0
b3JhZ2UiKTsKKyAgICB9CisKKyAgdGVzdFhIUigpOworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9u
TG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlw
dHMiCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfc2FtZV9vcmlnaW4uaHRtbCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdpbi5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC90ZXN0X2lmcmFtZV9zYW5kYm94X3NhbWVfb3JpZ2luLmh0bWwKQEAgLTAsMCArMSwxMDggQEAK
K1w8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8IS0tDQoraHR0cHM6Ly9idWd6aWxsYS5tb3pp
bGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1IHNhbmRib3gg
YXR0cmlidXRlIGZvciBJRlJBTUVzIC0gc2FtZSBvcmlnaW4gdGVzdHMNCistLT4NCis8aGVhZD4N
CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0
PC90aXRsZT4NCisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIv
dGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4NCisgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3Qu
Y3NzIi8+DQorPC9oZWFkPg0KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+
DQorLyoqIFRlc3QgZm9yIEJ1ZyAzNDE2MDQgLSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRy
aWJ1dGUgZm9yIElGUkFNRXMgKiovDQorLyoqIFNhbWUgT3JpZ2luIFRlc3RzICoqLw0KKw0KK1Np
bXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0RmluaXNoKCk7DQorICANCit2YXIgY29tcGxldGVkVGVz
dHMgPSAwOw0KK3ZhciBwYXNzZWRUZXN0cyA9IDA7DQorDQorZnVuY3Rpb24gb2tfd3JhcHBlcihy
ZXN1bHQsIGRlc2MpIHsNCisgIG9rKHJlc3VsdCwgZGVzYyk7DQorDQorICBjb21wbGV0ZWRUZXN0
cysrOw0KKw0KKyAgaWYgKHJlc3VsdCkgew0KKyAgICBwYXNzZWRUZXN0cysrOw0KKyAgfQ0KKw0K
KyAgaWYgKGNvbXBsZXRlZFRlc3RzID09IDEyKSB7DQorICAgIGlzKHBhc3NlZFRlc3RzLCAxMiwg
IlRoZXJlIGFyZSAxMiBzYW1lLW9yaWdpbiB0ZXN0cyB0aGF0IHNob3VsZCBwYXNzIik7DQorDQor
ICAgIFNpbXBsZVRlc3QuZmluaXNoKCk7DQorICB9DQorfQ0KKw0KK2Z1bmN0aW9uIHJlY2VpdmVN
ZXNzYWdlKGV2ZW50KQ0KK3sNCisgIG9rX3dyYXBwZXIoZXZlbnQuZGF0YS5vaywgZXZlbnQuZGF0
YS5kZXNjKTsNCit9DQorDQorLy8gYSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRoYXQgaXMgdXNlZCBi
eSBzYW5kYm94ZWQgaWZyYW1lcyB3aXRob3V0DQorLy8gJ2FsbG93LXNhbWUtb3JpZ2luJyB0byBj
b21tdW5pY2F0ZSBwYXNzL2ZhaWwgYmFjayB0byB0aGlzIG1haW4gcGFnZS4NCisvLyBpdCBleHBl
Y3RzIHRvIGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCBsaWtlIHtvazogdHJ1ZS9mYWxzZSwgZGVz
YzoNCisvLyA8ZGVzY3JpcHRpb24gb2YgdGhlIHRlc3Q+IHdoaWNoIGl0IHRoZW4gZm9yd2FyZHMg
dG8gb2soKQ0KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1lc3Nh
Z2UsIGZhbHNlKTsNCisNCitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICAvLyAxKSB0ZXN0IHRoYXQg
d2UgY2FuJ3QgYWNjZXNzIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ctc2FtZS1v
cmlnaW4iDQorICB2YXIgaWZfMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZl8xIik7DQor
ICB0cnkgew0KKyAgICB2YXIgYiA9IGlmXzEuY29udGVudERvY3VtZW50LmJvZHk7DQorICAgIG9r
X3dyYXBwZXIoZmFsc2UsICJhY2Nlc3NpbmcgYm9keSBvZiBhIHNhbmRib3hlZCBkb2N1bWVudCBz
aG91bGQgbm90IGJlIGFsbG93ZWQiKTsNCisgIH0gY2F0Y2ggKGVycil7DQorICAgIG9rX3dyYXBw
ZXIodHJ1ZSwgImFjY2Vzc2luZyBib2R5IG9mIGEgc2FuZGJveGVkIGRvY3VtZW50IHNob3VsZCBu
b3QgYmUgYWxsb3dlZCIpOw0KKyAgfQ0KKw0KKyAgLy8gMikgdGVzdCB0aGF0IHdlIGNhbiBhY2Nl
c3MgYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zYW1lLW9yaWdpbiINCisgIHZhciBp
Zl8yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlmXzIiKTsNCisNCisgIHRyeSB7DQorICAg
IHZhciBiID0gaWZfMi5jb250ZW50RG9jdW1lbnQuYm9keTsNCisgICAgb2tfd3JhcHBlcih0cnVl
LCAiYWNjZXNzaW5nIGJvZHkgb2YgYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aCBhbGxvdy1zYW1l
LW9yaWdpbiBzaG91bGQgYmUgYWxsb3dlZCIpOw0KKyAgfSBjYXRjaCAoZXJyKSB7DQorICAgIG9r
X3dyYXBwZXIoZmFsc2UsICJhY2Nlc3NpbmcgYm9keSBvZiBhIHNhbmRib3hlZCBkb2N1bWVudCB3
aXRoIGFsbG93LXNhbWUtb3JpZ2luIHNob3VsZCBiZSBhbGxvd2VkIik7DQorICB9DQorDQorICAv
LyAzKSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGhvdXQgJ2FsbG93LXNhbWUtb3Jp
Z2luJyBjYW5ub3QgYWNjZXNzIGl0cyBwYXJlbnQNCisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxl
X2lmcmFtZV9iX2lmMy5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycgYnV0IG5vdCAnYWxs
b3ctc2FtZS1vcmlnaW4nDQorDQorICAvLyA0KSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1l
IHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyBjYW4gYWNjZXNzIGl0cyBwYXJlbnQNCisgIC8vIHRo
aXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lmMi5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2Ft
ZS1vcmlnaW4nIGFuZCAnYWxsb3ctc2NyaXB0cycNCisNCisgIC8vIDUpIGNoZWNrIHRoYXQgYSBz
YW5kYm94ZWQgaWZyYW1lIHdpdGggImFsbG93LXNhbWUtb3JpZ2luIiBjYW4gYWNjZXNzIGRvY3Vt
ZW50LmNvb2tpZQ0KKyAgLy8gdGhpcyBpcyBkb25lIGJ5IGZpbGVfaWZyYW1lX2JfaWYyLmh0bWwg
d2hpY2ggaGFzICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kICdhbGxvdy1zY3JpcHRzJw0KKw0KKyAg
Ly8gNikgY2hlY2sgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAiYWxsb3ctc2FtZS1vcmln
aW4iIGNhbiBhY2Nlc3Mgd2luZG93LmxvY2FsU3RvcmFnZQ0KKyAgLy8gdGhpcyBpcyBkb25lIGJ5
IGZpbGVfaWZyYW1lX2JfaWYyLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zYW1lLW9yaWdpbicgYW5k
ICdhbGxvdy1zY3JpcHRzJw0KKw0KKyAgLy8gNykgY2hlY2sgdGhhdCBhIHNhbmRib3hlZCBpZnJh
bWUgd2l0aCAiYWxsb3ctc2FtZS1vcmlnaW4iIGNhbiBhY2Nlc3Mgd2luZG93LnNlc3Npb25TdG9y
YWdlDQorICAvLyB0aGlzIGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjIuaHRtbCB3aGljaCBo
YXMgJ2FsbG93LXNhbWUtb3JpZ2luJyBhbmQgJ2FsbG93LXNjcmlwdHMnDQorDQorICAvLyA4KSBj
aGVjayB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBXSVRIT1VUICJhbGxvdy1zYW1lLW9yaWdpbiIg
Y2FuIE5PVCBhY2Nlc3MgZG9jdW1lbnQuY29va2llDQorICAvLyB0aGlzIGlzIGRvbmUgYnkgZmls
ZV9pZnJhbWVfYl9pZjMuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnIGJ1dCBub3QgJ2Fs
bG93LXNhbWUtb3JpZ2luJw0KKw0KKyAgLy8gOSkgY2hlY2sgdGhhdCBhIHNhbmRib3hlZCBpZnJh
bWUgV0lUSE9VVCAiYWxsb3ctc2FtZS1vcmlnaW4iIGNhbiBOT1QgYWNjZXNzIHdpbmRvdy5sb2Nh
bFN0b3JhZ2UNCisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lmMy5odG1sIHdo
aWNoIGhhcyAnYWxsb3ctc2NyaXB0cycgYnV0IG5vdCAnYWxsb3ctc2FtZS1vcmlnaW4nDQorDQor
ICAvLyAxMCkgY2hlY2sgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgV0lUSE9VVCAiYWxsb3ctc2Ft
ZS1vcmlnaW4iIGNhbiBOT1QgYWNjZXNzIHdpbmRvdy5zZXNzaW9uU3RvcmFnZQ0KKyAgLy8gdGhp
cyBpcyBkb25lIGJ5IGZpbGVfaWZyYW1lX2JfaWYzLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3Jp
cHRzJyBidXQgbm90ICdhbGxvdy1zYW1lLW9yaWdpbicNCisNCisgIC8vIDExKSBjaGVjayB0aGF0
IFhIUiB3b3JrcyBub3JtYWxseSBpbiBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAiYWxsb3ctc2Ft
ZS1vcmlnaW4iIGFuZCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxl
X2lmcmFtZV9iX2lmMi5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2FtZS1vcmlnaW4nIGFuZCAnYWxs
b3ctc2NyaXB0cycNCisNCisgIC8vIDEyKSBjaGVjayB0aGF0IFhIUiBpcyBibG9ja2VkIGluIGEg
c2FuZGJveGVkIGlmcmFtZSB3aXRoICJhbGxvdy1zY3JpcHRzIiBidXQgV0lUSE9VVCAiYWxsb3ct
c2FtZS1vcmlnaW4iDQorICAvLyB0aGlzIGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjMuaHRt
bCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnIGJ1dCBub3QgJ2FsbG93LXNhbWUtb3JpZ2luJw0K
K30NCithZGRMb2FkRXZlbnQoZG9UZXN0KTsNCis8L3NjcmlwdD4NCis8Ym9keT4NCis8YSB0YXJn
ZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzQxNjA0Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNh
bmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzDQorPHAgaWQ9ImRpc3BsYXkiPjwvcD4NCis8ZGl2
IGlkPSJjb250ZW50Ij4NCis8aWZyYW1lIHNhbmRib3g9IiIgaWQ9ImlmXzEiIHNyYz0iZmlsZV9p
ZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1l
Pg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyIgaWQ9
ImlmXzIiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMi5odG1sIiBoZWlnaHQ9IjEwIiB3
aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9
ImlmXzMiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3
aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvZGl2Pg0K
</data>
<flag name="review"
          id="517954"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>624522</attachid>
            <date>2012-05-16 14:00:53 -0700</date>
            <delta_ts>2012-07-02 17:32:06 -0700</delta_ts>
            <desc>iframe sandbox tests - plugins v2</desc>
            <filename>iframe_sandbox_tests_plugins</filename>
            <type>text/plain</type>
            <size>5862</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgY2RjZTc2MWRlNTYxMjk0Mjg2NTE5MTY3MjYw
MTBhMWVkYWIxNGZjOQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBwbHVnaW5zCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0zMjQsMTYgKzMyNCwyMCBA
QCBfVEVTVF9GSUxFUyA9IFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3Mu
aHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwgXAogCQlm
aWxlX2lmcmFtZV9zYW5kYm94X2VfaWYxLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Vf
aWYyLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwgXAogCQlmaWxlX2lm
cmFtZV9zYW5kYm94X2VfaWY0Lmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY1Lmh0
bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY2Lmh0bWwgXAorCQl0ZXN0X2lmcmFtZV9z
YW5kYm94X3BsdWdpbnMuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjEuaHRtbCBc
CisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfZl9pZjIuaHRtbF5oZWFkZXJzXiBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmln
YXRpb25fcGFzcy5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9m
YWlsLmh0bWwgXAogCQkkKE5VTEwpCiAKIF9CUk9XU0VSX1RFU1RfRklMRVMgPSBcCiAJCWJyb3dz
ZXJfYnVnNjQ5Nzc4LmpzIFwKIAkJZmlsZV9idWc2NDk3NzguaHRtbCBcCiAJCWZpbGVfYnVnNjQ5
Nzc4Lmh0bWxeaGVhZGVyc14gXApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAot
LS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9mX2lmMS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxo
dG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3Qg
Zm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0
ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQor
PGJvZHk+DQorSSBoYXZlIDIgcGx1Z2luIGluc3RhbmNlcyBlbWJlZGRlZCBpbiBtZS4NCis8ZW1i
ZWQgaWQ9InBsdWdpbjEiIHR5cGU9ImFwcGxpY2F0aW9uL3gtdGVzdCIgd2lkdGg9IjIwMCIgaGVp
Z2h0PSIyMDAiPjwvZW1iZWQ+DQorPG9iamVjdCB0eXBlPSJhcHBsaWNhdGlvbi94LXRlc3QiIHdp
ZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48L29iamVjdD4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9m
X2lmMi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2ZfaWYyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbApAQCAt
MCwwICsxLDExIEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4N
CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9T
aW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxib2R5Pg0KKyAgSSBhbSBhIGRvY3Vt
ZW50IHRoYXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgYSBwbHVnaW4gbG9hZC4NCis8L2JvZHk+DQor
PC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9mX2lmMi5odG1sXmhlYWRlcnNeIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWxeaGVhZGVyc14KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbF5oZWFkZXJzXgpAQCAtMCwwICsxLDEgQEAKK0NvbnRl
bnQtVHlwZTogYXBwbGljYXRpb24veC10ZXN0DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X3BsdWdpbnMuaHRtbCBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9wbHVnaW5zLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L3Rlc3RfaWZyYW1lX3NhbmRib3hfcGx1Z2lucy5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzwhRE9D
VFlQRSBIVE1MPg0KKzxodG1sPg0KKzwhLS0NCitodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQNCitJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1
dGUgZm9yIElGUkFNRXMNCistLT4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4N
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0IC0gcGx1Z2luczwvdGl0bGU+DQorICA8c2Ny
aXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3Qv
U2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9
InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4N
Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KKy8qKiBUZXN0IGZvciBC
dWcgMzQxNjA0IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVz
ICoqLw0KKy8qKiBQbHVnaW4gdGVzdHMgKiovDQorU2ltcGxlVGVzdC53YWl0Rm9yRXhwbGljaXRG
aW5pc2goKTsNCisgIA0KK2Z1bmN0aW9uIGRvVGVzdCgpIHsgDQorCS8vIDEpIHRlc3QgdGhhdCBh
IHBsdWdpbiBjYW4ndCBiZSBsb2FkZWQgd2l0aCA8ZW1iZWQ+IGluc2lkZSBhIHNhbmRib3hlZCA8
aWZyYW1lPg0KKwkvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwgbG9h
ZGVkIGluIGlmMSBiZWxvdykNCisJLy8gMikgdGVzdCB0aGF0IGEgcGx1Z2luIGNhbid0IGJlIGxv
YWRlZCB3aXRoIDxvYmplY3Q+IGluc2lkZSBhIHNhbmRib3hlZCA8aWZyYW1lPg0KKwkvLyAoZG9u
ZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwgbG9hZGVkIGluIGlmMSBiZWxvdykN
CisJLy8gMykgdGVzdCB0aGF0IHBsdWdpbiBjYW4ndCBiZSBsb2FkZWQgYnkgYSBzYW5kYm94ZWQg
PGlmcmFtZT4gd2l0aCBzcmMgcG9pbnRpbmcgdG8NCisJLy8gYSBkb2N1bWVudCB0aGF0IGlzIGhh
bmRsZWQgYnkgYSBwbHVnaW4gKGRvbmUgYnkgaWZfMiBiZWxvdykNCisJDQorCS8vIHRoZXNlIGFy
ZSBhbGwgaGFuZGxlZCBieSBjaGVja2luZyBob3cgbWFueSBpbnN0YW5jZXMgb2YgdGhlIHRlc3Qg
cGx1Z2luIGFyZSBsb2FkZWQNCisJLy8gd2hlbiB0aGlzIHNjcmlwdCBydW5zIGFzIHRoZSBvbmxv
YWQgaGFuZGxlciAtIHRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBpbnN0YW5jZSwNCisJLy8gdGhl
IG9uZSBsb2FkZWQgaW4gdGhpcyBwYWdlIGl0c2VsZiANCisJdmFyIHAgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgncGx1Z2luMScpOw0KKyAgdmFyIGlmXzEgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnaWZfMScpOw0KKwlwLnN0YXJ0V2F0Y2hpbmdJbnN0YW5jZUNvdW50KCk7DQorDQorCWlm
XzEuc3JjID0gJ2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjEuaHRtbCc7DQorfQ0KKw0KK2Z1bmN0
aW9uIGlmXzFfbG9hZCgpIHsgDQorICB2YXIgaWZfMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdpZl8xJyk7DQorDQorCWlmIChpZl8xLnNyYyA9PSAiYWJvdXQ6YmxhbmsiKQ0KKwkJcmV0dXJu
Ow0KKw0KKwkvLyBuZWVkIHRvIHdhaXQgZm9yIHBsdWdpbiB0byBsb2FkLCBpZiB0aGUgdGVzdCBm
YWlscy4uLg0KKyAgU2ltcGxlVGVzdC5leGVjdXRlU29vbihpZl8xX2NvbnRpbnVlKTsNCit9DQor
DQorZnVuY3Rpb24gaWZfMV9jb250aW51ZSgpIHsNCisJLy8gaW5zdGFuY2UgY291bnQgc2hvdWxk
IGJlIDAgKHRlc3RzICMxIGFuZCAjMiBhYm92ZSkgDQorCXZhciBwID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3BsdWdpbjEnKTsNCisJaXMocC5nZXRJbnN0YW5jZUNvdW50KCksIDAsICJwbHVn
aW5zIHNob3VsZCBub3QgYmUgbG9hZGVkIHZpYSA8b2JqZWN0PiBvciA8ZW1iZWQ+IGJ5IGEgc2Fu
ZGJveGVkIGlmcmFtZSIpOw0KKw0KKyAgdmFyIGlmXzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnaWZfMicpOw0KKwlpZl8yLnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWwn
Ow0KKwkNCisJU2ltcGxlVGVzdC5leGVjdXRlU29vbihpZl8yX2NvbnRpbnVlKTsNCit9DQorDQor
ZnVuY3Rpb24gaWZfMl9jb250aW51ZSgpIHsNCisJLy8gaW5zdGFuY2UgY291bnQgc2hvdWxkIGJl
IDAgKHRlc3QgIzMgYWJvdmUpIA0KKwl2YXIgcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdw
bHVnaW4xJyk7DQorCQ0KKwlpcyhwLmdldEluc3RhbmNlQ291bnQoKSwgMCwgInBsdWdpbnMgc2hv
dWxkIG5vdCBiZSBsb2FkZWQgdmlhIGEgZG9jdW1lbnQgb2YgYSB0eXBlIHRoYXQgcmVxdWlyZXMg
YSBwbHVnaW4gZW1iZWRkZWQgaW4gYSBzYW5kYm94ZWQgaWZyYW1lIik7DQorCQ0KKwlwLnN0b3BX
YXRjaGluZ0luc3RhbmNlQ291bnQoKTsNCisJDQorICBTaW1wbGVUZXN0LmV4ZWN1dGVTb29uKGZp
bmlzaF90ZXN0KTsNCit9DQorDQorZnVuY3Rpb24gZmluaXNoX3Rlc3QoKSB7DQorCVNpbXBsZVRl
c3QuZmluaXNoKCk7DQorfQ0KKw0KK2FkZExvYWRFdmVudChkb1Rlc3QpOw0KKzwvc2NyaXB0Pg0K
Kzxib2R5Pg0KKzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxhLm1vemls
bGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJ
bXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMNCis8cCBpZD0iZGlz
cGxheSI+PC9wPg0KKzxkaXYgaWQ9ImNvbnRlbnQiPg0KKzxlbWJlZCBpZD0icGx1Z2luMSIgdHlw
ZT0iYXBwbGljYXRpb24veC10ZXN0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PC9lbWJlZD4N
Cis8aWZyYW1lIGlkPSJpZl8xIiBzYW5kYm94PScnIG9uTG9hZD0naWZfMV9sb2FkKCknIHNyYz0i
YWJvdXQ6YmxhbmsiIGhlaWdodD0iNDAwIiB3aWR0aD0iNDAwIj48L2lmcmFtZT4NCis8aWZyYW1l
IGlkPSJpZl8yIiBzYW5kYm94PScnIHNyYz0iYWJvdXQ6YmxhbmsiIGhlaWdodD0iNDAwIiB3aWR0
aD0iNDAwIj48L2lmcmFtZT4NCis8L2Rpdj4NCis8L2JvZHk+DQorPC9odG1sPg0K
</data>
<flag name="review"
          id="517985"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>625316</attachid>
            <date>2012-05-18 17:38:21 -0700</date>
            <delta_ts>2012-06-15 17:25:36 -0700</delta_ts>
            <desc>iframe sandbox tests - inheritance v4</desc>
            <filename>iframe_sandbox_tests_inheritance</filename>
            <type>text/plain</type>
            <size>14977</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNWFlZGZhYjliYjIxODFlMGMyNDI2MWY0NmFj
NjhkMDIwZjY5N2YwZgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KdGVz
dHMgZm9yIGlmcmFtZSBzYW5kYm94IC0gaW5oZXJpdGFuY2UKCmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmlu
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KQEAgLTI5MSwxNiAr
MjkxLDI2IEBAIF9URVNUX0ZJTEVTID0gXAogCQl0ZXN0X2xpX2F0dHJpYnV0ZXNfcmVmbGVjdGlv
bi5odG1sIFwKIAkJdGVzdF9vbF9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRtbCBcCiAJCXRlc3Rf
YnVnNjUxOTU2Lmh0bWwgXAogCQl0ZXN0X2J1ZzY5NDUwMy5odG1sIFwKIAkJdGVzdF9vYmplY3Rf
cGx1Z2luX25hdi5odG1sIFwKIAkJdGVzdF9idWc3NDIwMzAuaHRtbCBcCiAJCXRlc3RfYnVnNzQy
NTQ5Lmh0bWwgXAogCQl0ZXN0X2J1Zzc0NTY4NS5odG1sIFwKKwkJdGVzdF9pZnJhbWVfc2FuZGJv
eF9pbmhlcml0YW5jZS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMS5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmMy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sIFwKKwkJZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmNS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lm
Ni5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNy5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF9hX2lmOC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOS5odG1s
IFwKIAkJdGVzdF9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uLmh0bWwgXAogCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWYxLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0bWwg
XAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYzLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWY0Lmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwgXAogCQlm
aWxlX2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Rf
aWY3Lmh0bWwgXApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2FfaWYxLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfYV9pZjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9u
dWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9h
X2lmMS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVh
ZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYw
NDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9
Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgSSBhbSBz
YW5kYm94ZWQgd2l0aG91dCBhbnkgcGVybWlzc2lvbnMKKyAgPGlmcmFtZSBpZD0iaWZfMmEiIHNy
Yz0iZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAi
PjwvaWZyYW1lPgorICA8aWZyYW1lIGlkPSJpZl8yYiIgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIg
c3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIx
MCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0
eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVh
ZD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9TdHVmZigp
IHsKKyAgLy8gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGV4ZWN1dGUgc2NyaXB0cworICB3aW5kb3cu
cGFyZW50LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IGZhbHNlLCBkZXNjOiAiYSBkb2N1bWVudCB3
aXRoaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoIHNhbmRib3g9Jycgc2hvdWxkIE5PVCBiZSBh
YmxlIHRvIGV4ZWN1dGUgc2NyaXB0cyJ9LCAiKiIpOworfQorPC9zY3JpcHQ+CisKKzxib2R5IG9u
TG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBOT1Qgc2FuZGJveGVkIG9yIGFtIHNhbmRib3hlZCB3
aXRoICJhbGxvdy1zY3JpcHRzIiBidXQgYW0gY29udGFpbmVkIHdpdGhpbiBhbiBpZnJhbWUgc2Fu
ZGJveGVkIHdpdGggc2FuZGJveCA9ICIiCisgIG9yIGFtIHNhbmRib3hlZCB3aXRoIHNhbmRib3g9
JycgaW5zaWRlIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIKKzwvYm9k
eT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmMy5odG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhy
ZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9u
IG9rX3dyYXBwZXIoY29uZGl0aW9uLCBtc2cpIHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBw
ZXIoY29uZGl0aW9uLCBtc2cpOworICB9Cis8L3NjcmlwdD4KKworPGJvZHk+CisgIEkgYW0gc2Fu
ZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zY3JpcHRzIgorCisgIDxpZnJhbWUgaWQ9J2lmXzQnIHNy
Yz0nZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sJyBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAi
PjwvaWZyYW1lPgorICA8aWZyYW1lIGlkPSdpZl83JyBzcmM9J2ZpbGVfaWZyYW1lX3NhbmRib3hf
YV9pZjcuaHRtbCcgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBp
ZD0naWZfMicgc2FuZGJveD0nJyBzcmM9J2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCcg
aGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZm
IC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Ff
aWY0Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
YV9pZjQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sCkBAIC0w
LDAgKzEsMjggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVU
ZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90
ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1N0dWZmKCkgeworICB0cnkg
eworICAgIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihmYWxzZSwgImEgZG9jdW1lbnQgY29udGFp
bmVkIHdpdGhpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB3aXRob3V0ICdhbGxvdy1zYW1lLW9yaWdp
bicgc2hvdWxkIE5PVCBiZSBzYW1lIGRvbWFpbiB3aXRoIGl0cyBwYXJlbnQiKTsKKyAgfSBjYXRj
aChlKSB7CisgIH0KKworICB0cnkgeworICAgIHdpbmRvdy5wYXJlbnQucGFyZW50Lm9rX3dyYXBw
ZXIoZmFsc2UsICJhIGRvY3VtZW50IGNvbnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1l
bnQgd2l0aG91dCAnYWxsb3ctc2FtZS1vcmlnaW4nIHNob3VsZCBOT1QgYmUgc2FtZSBkb21haW4g
d2l0aCB0aGUgdG9wIGxldmVsIik7CisgIH0gY2F0Y2goZSkgeworICB9Cit9Cis8L3NjcmlwdD4K
KworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIG5vdCBzYW5kYm94ZWQgYnV0IGNv
bnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aCAnYWxsb3ctc2NyaXB0cycK
KzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY1Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAot
LS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9hX2lmNS5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0
bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3Ig
QnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9j
c3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1
bmN0aW9uIG9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKSB7CisgICAgd2luZG93LnBhcmVudC5va193
cmFwcGVyKHJlc3VsdCwgZGVzYyk7CisgIH0KKzwvc2NyaXB0PgorCis8Ym9keT4KKyAgSSBhbSBz
YW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4iCisKKyAg
PGlmcmFtZSBzYW5kYm94PSdhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luJyBpZD0naWZf
Nicgc3JjPSdmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY2Lmh0bWwnIGhlaWdodD0iMTAiIHdpZHRo
PSIxMCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNi5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY2Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjYuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgor
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9F
dmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgorZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgd2luZG93LnBhcmVudC5va193cmFw
cGVyKHRydWUsICJhIGRvY3VtZW50IHNhbmRib3hlZCB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicg
YW5kIGNvbnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aCAnYWxsb3ctc2Ft
ZS1vcmlnaW4nIHNob3VsZCBiZSBzYW1lIGRvbWFpbiB3aXRoIGl0cyBwYXJlbnQiKTsKKyAgd2lu
ZG93LnBhcmVudC5wYXJlbnQub2tfd3JhcHBlcih0cnVlLCAiYSBkb2N1bWVudCBzYW5kYm94ZWQg
d2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nIGNvbnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9j
dW1lbnQgd2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nIHNob3VsZCBiZSBzYW1lIGRvbWFpbiB3aXRo
IHRoZSB0b3AgbGV2ZWwiKTsKK30KKzwvc2NyaXB0PgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYo
KSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmln
aW4nIGFuZCBjb250YWluZWQgd2l0aGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHdpdGggJ2FsbG93
LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4nCis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNy5o
dG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY3
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjcuaHRtbApAQCAtMCwwICsx
LDIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90
ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Citm
dW5jdGlvbiBkb1N0dWZmKCkgeworICAvLyBzaG91bGQgYmUgYWJsZSB0byBleGVjdXRlIHNjcmlw
dHMKKyAgd2luZG93LnBhcmVudC5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiB0cnVlLCBkZXNjOiAi
YSBkb2N1bWVudCBjb250YWluZWQgd2l0aGluIGFuIGlmcmFtZSBjb250YWluZWQgd2l0aGluIGFu
IGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycgc2hvdWxkIGJlIGFibGUgdG8g
ZXhlY3V0ZSBzY3JpcHRzIn0sICIqIik7Cit9Cis8L3NjcmlwdD4KKworPGJvZHkgb25Mb2FkPSJk
b1N0dWZmKCkiPgorICBJIGFtIE5PVCBzYW5kYm94ZWQgYnV0IGFtIGNvbnRhaW5lZCB3aXRoaW4g
YW4gaWZyYW1lIGNvbnRhaW5lZCB3aXRoaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoIHNhbmRi
b3ggPSAiYWxsb3ctc2NyaXB0cyIKKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY4Lmh0bWwgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjguaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5odG1sCkBAIC0wLDAgKzEsMjYgQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3Nz
Ii8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVU
ZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9u
IGRvU3VibG9hZCgpIHsKKyAgdmFyIGlmXzkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZf
OScpOworICBpZl85LnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY5Lmh0bWwnOworfQor
Cit3aW5kb3cuZG9TdWJsb2FkID0gZG9TdWJsb2FkOworCis8L3NjcmlwdD4KKzxib2R5PgorICBJ
IGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIu
IEFmdGVyIG15IGluaXRpYWwgbG9hZCwgImFsbG93LXNhbWUtb3JpZ2luIiBpcyByZW1vdmVkCisg
IGFuZCB0aGVuIEkgbG9hZCBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY5Lmh0bWwsIHdoaWNoIGF0
dGVtcHMgdG8gY2FsbCBhIGZ1bmN0aW9uIGluIHdpbmRvdy50b3AuIFRoaXMgc2hvdWxkCisgIHN1
Y2NlZWQgc2luY2UgdGhlIG5ldyBzYW5kYm94IGZsYWdzIHNob3VsZG4ndCBoYXZlIHRha2VuIGFm
ZmVjdCBvbiBtZSB1bnRpbCBJJ20gcmVsb2FkZWQuCisKKyAgPGlmcmFtZSBpZD0naWZfOScgc3Jj
PSdhYm91dDpibGFuaycgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwvYm9keT4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2FfaWY5Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfYV9pZjkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9u
dWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9h
X2lmOS5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVh
ZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYw
NDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9
Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8c2NyaXB0PgorZnVuY3Rp
b24gZG9TdHVmZigpIHsKKyAgd2luZG93LnBhcmVudC5wYXJlbnQub2tfd3JhcHBlcih0cnVlLCAi
YSBzdWJsb2FkZWQgZG9jdW1lbnQgc2hvdWxkIGluaGVyaXQgdGhlIGZsYWdzIG9mIHRoZSBkb2N1
bWVudCwgbm90IG9mIHRoZSBkb2NzaGVsbC9zYW5kYm94IGF0dHJpYnV0ZSIpOworfQorPC9zY3Jp
cHQ+Cis8Ym9keSBvbmxvYWQ9J2RvU3R1ZmYoKSc+CisgIEknbSBhIHN1YmxvYWRlZCBkb2N1bWVu
dCBvZiBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY4Lmh0bWwuIEkgc2hvdWxkIGJlIGFibGUgdG8g
Y2FsbCBhIGZ1bmN0aW9uIGluIHdpbmRvdy50b3AKKyAgYmVjYXVzZSBJIHNob3VsZCBiZSBzYW1l
LW9yaWdpbiB3aXRoIGl0LgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfaW5oZXJpdGFuY2UuaHRtbCBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9pbmhlcml0YW5j
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2luaGVyaXRhbmNlLmh0bWwKQEAg
LTAsMCArMSwxMDkgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzwhLS0NCitodHRwczov
L2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQNCitJbXBsZW1lbnQg
SFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMgLSBpbmhlcml0YW5jZSB0ZXN0cw0K
Ky0tPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3Qg
Zm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZh
c2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0Pg0K
KyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1Np
bXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlv
bi9qYXZhc2NyaXB0Ij4NCisvKiogVGVzdCBmb3IgQnVnIDM0MTYwNCAtIEltcGxlbWVudCBIVE1M
NSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAqKi8NCisvKiogSW5oZXJpdGFuY2UgVGVz
dHMgKiovDQorDQorU2ltcGxlVGVzdC53YWl0Rm9yRXhwbGljaXRGaW5pc2goKTsNCisgIA0KKy8v
IEEgcG9zdE1lc3NhZ2UgaGFuZGxlciB0aGF0IGlzIHVzZWQgYnkgc2FuZGJveGVkIGlmcmFtZXMg
d2l0aG91dA0KKy8vICdhbGxvdy1zYW1lLW9yaWdpbicgdG8gY29tbXVuaWNhdGUgcGFzcy9mYWls
IGJhY2sgdG8gdGhpcyBtYWluIHBhZ2UuDQorLy8gSXQgZXhwZWN0cyB0byBiZSBjYWxsZWQgd2l0
aCBhbiBvYmplY3QgbGlrZSB7b2s6IHRydWUvZmFsc2UsIGRlc2M6DQorLy8gPGRlc2NyaXB0aW9u
IG9mIHRoZSB0ZXN0PiB3aGljaCBpdCB0aGVuIGZvcndhcmRzIHRvIG9rKCkuDQord2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOw0KKw0KK3Zh
ciBjb21wbGV0ZWRUZXN0cyA9IDA7DQordmFyIHBhc3NlZFRlc3RzID0gMDsNCisNCitmdW5jdGlv
biByZWNlaXZlTWVzc2FnZShldmVudCkNCit7DQorICBva193cmFwcGVyKGV2ZW50LmRhdGEub2ss
IGV2ZW50LmRhdGEuZGVzYyk7DQorfQ0KKw0KK2Z1bmN0aW9uIG9rX3dyYXBwZXIocmVzdWx0LCBk
ZXNjKSB7DQorICBvayhyZXN1bHQsIGRlc2MpOw0KKw0KKyAgY29tcGxldGVkVGVzdHMrKzsNCisN
CisgIGlmIChyZXN1bHQpDQorCXBhc3NlZFRlc3RzKys7DQorDQorICAvLyBSRVZJRVcgOiBpZiBv
bmUgb2YgdGhlc2UgdGVzdHMgZmFpbHMgYW5kIHRoZSBtZXNzYWdlIGlzbid0IHNlbnQNCisgIC8v
IHRoaXMgbWVhbnMgdGhpcyB0ZXN0IHdpbGwgaGFuZyB1bnRpbCB0aGUgdGltZSBvdXQgaGFwcGVu
cyA6KA0KKyAgLy8gYWR2aWNlIG9uIGJldHRlciB3YXlzIHRvIHN5bmNocm9uaXplIHRoaW5ncyBh
cHByZWNpYXRlZCAhDQorICBpZiAoY29tcGxldGVkVGVzdHMgPT0gNCkgew0KKyAgICBpcyhwYXNz
ZWRUZXN0cywgNCwgInRoZXJlIHNob3VsZCBiZSAzIHBhc3NlZCBpbmhlcml0YW5jZSB0ZXN0cyIp
Ow0KKyAgICBTaW1wbGVUZXN0LmZpbmlzaCgpOw0KKyAgfQ0KK30NCisNCitmdW5jdGlvbiBkb1Rl
c3QoKSB7DQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDEpIGFuIGlmcmFtZSB3aXRoIG5vIHNh
bmRib3ggYXR0cmlidXRlIGluc2lkZSBhbiBpZnJhbWUgdGhhdCBoYXMgc2FuZGJveCA9ICIiDQor
ICAvLyBzaG91bGQgbm90IGJlIGFibGUgdG8gZXhlY3V0ZSBzY3JpcHRzIChjYW5ub3QgZXZlciBs
b29zZW4gcGVybWlzc2lvbnMpDQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2Ff
aWYyLmh0bWwgY29udGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYxLmh0bWwp
DQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDIpIGFuIGlmcmFtZSB3aXRoIHNhbmRib3gg
PSAiYWxsb3ctc2NyaXB0cyIgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhhcyBzYW5kYm94ID0gIiIN
CisgIC8vIHNob3VsZCBub3QgYmUgYWJsZSB0byBleGVjdXRlIHNjcmlwdHMgKGNhbm5vdCBldmVy
IGxvb3NlbiBwZXJtaXNzaW9ucykNCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hf
YV9pZjIuaHRtbCBjb250YWluZWQgd2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjEuaHRt
bCkNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gMykgYW4gaWZyYW1lIHdpdGggbm8gc2Fu
ZGJveCBhdHRyaWJ1dGUgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhhcyBzYW5kYm94ID0gImFsbG93
LXNjcmlwdHMiDQorICAvLyBzaG91bGQgbm90IGJlIHNhbWUgb3JpZ2luIHdpdGggdGhlIHRvcCB3
aW5kb3cNCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjQuaHRtbCBjb250
YWluZWQgd2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbCkNCisNCisgIC8vIGZh
aWxzIGlmIGJhZA0KKyAgLy8gNCkgYW4gaWZyYW1lIHdpdGggbm8gc2FuZGJveCBhdHRyaWJ1dGUg
aW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhhcyBzYW5kYm94ID0gImFsbG93LXNjcmlwdHMiDQorICAv
LyBzaG91bGQgbm90IGJlIHNhbWUgb3JpZ2luIHdpdGggaXRzIHBhcmVudA0KKyAgLy8gKGRvbmUg
YnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9p
ZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sKQ0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8v
IDUpIGFuIGlmcmFtZSB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kICdhbGxvdy1zY3JpcHRz
JyBpbnNpZGUgYW4gaWZyYW1lIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJw0KKyAgLy8gYW5kICdh
bGxvdy1zY3JpcHRzJyBzaG91bGQgYmUgc2FtZSBvcmlnaW4gd2l0aCB0aGUgdG9wIHdpbmRvdw0K
KyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNi5odG1sIGNvbnRhaW5lZCB3
aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNS5odG1sKQ0KKw0KKyAgLy8gcGFzc2VzIGlm
IGdvb2QNCisgIC8vIDYpIGFuIGlmcmFtZSB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kICdh
bGxvdy1zY3JpcHRzJyBpbnNpZGUgYW4gaWZyYW1lIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJw0K
KyAgLy8gYW5kICdhbGxvdy1zY3JpcHRzJyBzaG91bGQgYmUgc2FtZSBvcmlnaW4gd2l0aCBpdHMg
cGFyZW50DQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY2Lmh0bWwgY29u
dGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY1Lmh0bWwpDQorDQorICAvLyBw
YXNzZXMgaWYgZ29vZA0KKyAgLy8gNykgYW4gaWZyYW1lIHdpdGggbm8gc2FuZGJveCBhdHRyaWJ1
dGUgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhhcyBzYW5kYm94ID0gImFsbG93LXNjcmlwdHMiDQor
ICAvLyBzaG91bGQgYmUgYWJsZSB0byBleGVjdXRlIHNjcmlwdHMNCisgIC8vIChkb25lIGJ5IGZp
bGVfaWZyYW1lX3NhbmRib3hfYV9pZjcuaHRtbCBjb250YWluZWQgd2l0aGluIGZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjMuaHRtbCkNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gOCkgYW4g
aWZyYW1lIHdpdGggc2FuZGJveD0iIiBpbnNpZGUgYW4gaWZyYW1lIHRoYXQgaGFzIGFsbG93LXNj
cmlwdHMgc2hvdWxkIG5vdCBiZSBhYmxlDQorICAvLyB0byBleGVjdXRlIHNjcmlwdHMNCisgIC8v
IChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCBjb250YWluZWQgd2l0aGlu
IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbCkNCisNCisgIC8vIHBhc3NlcyBpZiBnb29k
DQorICAvLyA5KSBtYWtlIHN1cmUgdGhhdCBjaGFuZ2luZyB0aGUgc2FuZGJveCBmbGFncyBvbiBh
biBpZnJhbWUgKGlmXzgpIGRvZXNuJ3QgYWZmZWN0DQorICAvLyB0aGUgc2FuZGJveGluZyBvZiBz
dWJsb2FkcyBvZiBjb250ZW50IHdpdGhpbiB0aGF0IGlmcmFtZQ0KKyAgdmFyIGlmXzggPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfOCcpOw0KKyAgaWZfOC5zYW5kYm94ID0gJ2FsbG93LXNj
cmlwdHMnOw0KKyAgaWZfOC5jb250ZW50V2luZG93LmRvU3VibG9hZCgpOw0KKyAgDQorICBhZGRM
b2FkRXZlbnQoZG9UZXN0KTsNCit9DQorPC9zY3JpcHQ+DQorPGJvZHk+DQorPGEgdGFyZ2V0PSJf
YmxhbmsiIGhyZWY9Imh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lk
PTM0MTYwNCI+TW96aWxsYSBCdWcgMzQxNjA0PC9hPiAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94
IGF0dHJpYnV0ZSBmb3IgSUZSQU1Fcw0KKzxwIGlkPSJkaXNwbGF5Ij48L3A+DQorPGRpdiBpZD0i
Y29udGVudCI+DQorPGlmcmFtZSBzYW5kYm94PSIiIGlkPSJpZl8xIiBzcmM9ImZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8
aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIGlkPSJpZl8zIiBzcmM9ImZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjMuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8
aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4iIGlkPSJpZl81
IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjUuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9
IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMgYWxsb3ctc2Ft
ZS1vcmlnaW4iIGlkPSJpZl84IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjguaHRtbCIg
aGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8L2Rpdj4NCg==
</data>
<flag name="review"
          id="518715"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>625329</attachid>
            <date>2012-05-18 18:41:53 -0700</date>
            <delta_ts>2012-06-14 11:35:02 -0700</delta_ts>
            <desc>iframe sandbox v15</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>55404</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOWRhYjMzZmE1ZmY0YWVjYmMzNmRmZDZjMDkw
MjdmZWU4OTdjZjA1ZQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTg0
MiwxNiArODQyLDI3IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhU2FuZGJveEF0dHIp
OworCisKKyAgLyoqCiAgICAqIEZpbGwgKHdpdGggdGhlIHBhcmFtZXRlcnMgZ2l2ZW4pIHRoZSBs
b2NhbGl6ZWQgc3RyaW5nIG5hbWVkIHxhS2V5fCBpbgogICAgKiBwcm9wZXJ0aWVzIGZpbGUgfGFG
aWxlfC4KICAgICovCiBwcml2YXRlOgogICBzdGF0aWMgbnNyZXN1bHQgRm9ybWF0TG9jYWxpemVk
U3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiogYVBhcmFtcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhUGFyYW1zTGVuZ3RoLApAQCAtMTk1
NSw0MiArMTk2Niw0NCBAQCBwdWJsaWM6CiAgICAqIGZyb20gdGhlIGRvY3VtZW50IGl0IGNvbWVz
IGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQgVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRl
eHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsKIAogICAvKioKICAgICogU2V0IHRoZSBn
aXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRoZSBnaXZlbiBjaGFubmVsLCBpZgogICAg
KiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBvZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwg
bWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JBYm91dEJsYW5rIGlzIHRydWUsIHRoZW4g
YWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAgb24gaXQuCi0g
ICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LiBJZiBhRm9yY2VPd25lciBpcyB0
cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQgb24gdGhlIGNoYW5uZWwsIGV2ZW4gaWYg
dGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAorICAgKiBmcm9tIHRoZSBjaGFubmVsLgog
ICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIgdGhlIHByaW5jaXBhbCB3YXMgc2V0IHVw
IGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5lbC4KICAgICovCiAgIHN0YXRpYyBib29s
IFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lciA9IGZhbHNlKTsKIAogICBzdGF0
aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhLAogICAgICAgICAg
ICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJhc2U2NFN0cmluZyk7CiAKICAgc3RhdGlj
IG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBhQXNjaWlTdHJpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURhdGEpOwogCiAgIC8qKiBJZiBhSlNBcnJh
eSBpcyBhIEphdmFzY3JpcHQgYXJyYXksIHRoaXMgbWV0aG9kIGl0ZXJhdGVzIG92ZXIgaXRzCiAg
ICAqICBlbGVtZW50cyBhbmQgYXBwZW5kcyB2YWx1ZXMgdG8gYVJldFZhbCBhcyBuc0lBdG9tcy4K
ICAgICogIEB0aHJvdyBOU19FUlJPUl9JTExFR0FMX1ZBTFVFIGlmIGFKU0FycmF5IGlzbid0IGEg
SlMgYXJyYXkuCiAgICAqLyAKICAgc3RhdGljIG5zcmVzdWx0IEpTQXJyYXlUb0F0b21BcnJheShK
U0NvbnRleHQqIGFDeCwgY29uc3QgSlM6OlZhbHVlJiBhSlNBcnJheSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0NPTUFycmF5PG5zSUF0b20+JiBhUmV0VmFsKTsKIAog
ICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IHBhc3NlZCBpbiBw
YXJhbWV0ZXIgaGFzIHRoZSBhdXRvY29tcGxldGUKLSAgICogZnVuY3Rpb25uYWxpdHkgZW5hYmxl
ZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9ybSBvd25lci4KKyAgICogZnVuY3Rp
b25hbGl0eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVy
LgogICAgKiBOT1RFOiB0aGUgY2FsbGVyIGhhcyB0byBtYWtlIHN1cmUgYXV0b2NvbXBsZXRlIG1h
a2VzIHNlbnNlIGZvciB0aGUKICAgICogZWxlbWVudCdzIHR5cGUuCiAgICAqCiAgICAqIEBwYXJh
bSBhSW5wdXQgdGhlIGlucHV0IGVsZW1lbnQgdG8gY2hlY2suIE5PVEU6IGFJbnB1dCBjYW4ndCBi
ZSBudWxsLgogICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgaGFzIGF1dG9j
b21wbGV0ZSBlbmFibGVkLgogICAgKi8KICAgc3RhdGljIGJvb2wgSXNBdXRvY29tcGxldGVFbmFi
bGVkKG5zSURPTUhUTUxJbnB1dEVsZW1lbnQqIGFJbnB1dCk7CiAKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9j
dW1lbnQuaAotLS0gYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysrIGIvY29u
dGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCkBAIC0xMjAsMTkgKzEyMCwxOCBAQCBjbGFz
cyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xhc3MgTGluazsKIGNsYXNzIEVsZW1lbnQ7
CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNwYWNlIG1vemlsbGEKIAogI2RlZmluZSBO
U19JRE9DVU1FTlRfSUlEIFwKLXsgMHg4ZTUxZTZkOSwgMHg5MTRkLCAweDQ2YmEsIFwKLSAgeyAw
eGIzLCAweDExLCAweDJmLCAweDI3LCAweDNkLCAweGU2LCAweDBkLCAweDE5IH0gfQotCit7IDB4
NTdmZTQ0YWUsIDB4NjY1NiwgMHg0NGI4LCBcCisgIHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhhNywg
MHg0MywgMHgyOCwgMHhiZSwgMHg4NiB9IH0KIAogLy8gRmxhZyBmb3IgQWRkU3R5bGVTaGVldCgp
LgogI2RlZmluZSBOU19TVFlMRVNIRUVUX0ZST01fQ0FUQUxPRyAgICAgICAgICAgICAgICAoMSA8
PCAwKQogCiAvLyBFbnVtIGZvciByZXF1ZXN0aW5nIGEgcGFydGljdWxhciB0eXBlIG9mIGRvY3Vt
ZW50IHdoZW4gY3JlYXRpbmcgYSBkb2MKIGVudW0gRG9jdW1lbnRGbGF2b3IgewogICBEb2N1bWVu
dEZsYXZvckxlZ2FjeUd1ZXNzLCAvLyBjb21wYXQgd2l0aCBvbGQgY29kZSB1bnRpbCBtYWRlIEhU
TUw1LWNvbXBsaWFudAogICBEb2N1bWVudEZsYXZvckhUTUwsIC8vIEhUTUxEb2N1bWVudCB3aXRo
IEhUTUxuZXNzIGJpdCBzZXQgdG8gdHJ1ZQpAQCAtNDYwLDE3ICs0NTksMjYgQEAgcHVibGljOgog
ICAgKiBjYWxsZXJzIGFyZSBleHBlY3RlZCB0byB0YWtlIGFjdGlvbiBhcyBuZWVkZWQgaWYgdGhl
eSB3YW50IHRoaXMKICAgICogY2hhbmdlIHRvIGFjdHVhbGx5IGNoYW5nZSBhbnl0aGluZyBpbW1l
ZGlhdGVseS4KICAgICogQHNlZSBuc0JpZGlVdGlscy5oCiAgICAqLwogICB2b2lkIFNldEJpZGlP
cHRpb25zKFBSVWludDMyIGFCaWRpT3B0aW9ucykKICAgewogICAgIG1CaWRpT3B0aW9ucyA9IGFC
aWRpT3B0aW9uczsKICAgfQotICAKKworICAvKioKKyAgICogR2V0IHRoZSBzYW5kYm94IGZsYWdz
IGZvciB0aGlzIGRvY3VtZW50LgorICAgKiBAc2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRoZSBw
b3NzaWJsZSBmbGFncworICAgKi8KKyAgUFJVaW50MzIgU2FuZGJveEZsYWdzKCkgY29uc3QKKyAg
eworICAgIHJldHVybiBtU2FuZGJveEZsYWdzOworICB9CisKICAgLyoqCiAgICAqIEFjY2VzcyBI
VFRQIGhlYWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAgKiBz
b3VyY2VzLCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCiAgIHZpcnR1YWwgdm9pZCBHZXRI
ZWFkZXJEYXRhKG5zSUF0b20qIGFIZWFkZXJGaWVsZCwgbnNBU3RyaW5nJiBhRGF0YSkgY29uc3Qg
PSAwOwogICB2aXJ0dWFsIHZvaWQgU2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhaGVhZGVyRmllbGQs
IGNvbnN0IG5zQVN0cmluZyYgYURhdGEpID0gMDsKIAogICAvKioKQEAgLTE4NTQsMTYgKzE4NjIs
MjEgQEAgcHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1bWVudCBpcyB0cnVlLCBtT3Jp
Z2luYWxEb2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAgIC8vIGRvY3VtZW50LgogICBu
c0NPTVB0cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7CiAKICAgLy8gVGhlIGJpZGkg
b3B0aW9ucyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBiaXRmaWVsZCBtZWFucyBpcwog
ICAvLyBkZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50MzIgbUJpZGlPcHRpb25zOwog
CisgIC8vIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVudC4gVGhlc2UgcmVmbGVjdCB0
aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRoZQorICAvLyBhc3NvY2lhdGVk
IElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3RlbnQuIFRoZXNlIGFy
ZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRhYmxlIC0gc2VlIG5zU2FuZGJv
eEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgUFJVaW50MzIgbVNhbmRib3hGbGFn
czsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0cmlu
ZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhlIGRvY3VtZW50J3Mgc2VjdXJp
dHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZmIC0t
Z2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uv
c3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0
aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcApAQCAtMjA4
LDE2ICsyMDgsMTcgQEAgc3RhdGljIE5TX0RFRklORV9DSUQoa1hURlNlcnZpY2VDSUQsIE5TXwog
I2luY2x1ZGUgIm5zQ0NVbmNvbGxlY3RhYmxlTWFya2VyLmgiCiAjaW5jbHVkZSAibW96aWxsYS9C
YXNlNjQuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibnNE
T01NdXRhdGlvbk9ic2VydmVyLmgiCiAKICNpbmNsdWRlICJuc1dyYXBwZXJDYWNoZUlubGluZXMu
aCIKICNpbmNsdWRlICJuc0lET01Eb2N1bWVudFR5cGUuaCIKICNpbmNsdWRlICJuc0NoYXJTZXBh
cmF0ZWRUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBleHRlcm4g
IkMiIGludCBNT1pfWE1MVHJhbnNsYXRlRW50aXR5KGNvbnN0IGNoYXIqIHB0ciwgY29uc3QgY2hh
ciogZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiogbmV4dCwgUFJVbmljaGFyKiByZXN1bHQpOwogZXh0ZXJuICJDIiBpbnQgTU9aX1hNTENoZWNr
UU5hbWUoY29uc3QgY2hhciogcHRyLCBjb25zdCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbnNfYXdhcmUsIGNvbnN0IGNoYXIqKiBjb2xvbik7CiAKIHVz
aW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5
ZXJzOwpAQCAtOTEyLDE2ICs5MTMsNjIgQEAgbnNDb250ZW50VXRpbHM6OkdldFBhcnNlclNlcnZp
Y2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1BhcnNlclNlcnZpY2VDSUQs
ICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIHNQYXJz
ZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVybiBzUGFyc2VyU2Vydmlj
ZTsKIH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0
dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5kIGNvbnZl
cnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICoKKyAqIEBwYXJh
bSBhQXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAqIEBy
ZXR1cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLworUFJVaW50MzIKK25zQ29u
dGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYg
YVNhbmRib3hBdHRyVmFsdWUpCit7CisgIC8vIElmIHRoZXJlJ3MgYSBzYW5kYm94IGF0dHJpYnV0
ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBpZiB0aGlzIGlzIGJlaW5nCisgIC8vIGNhbGxlZCksIHN0
YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0aGUgcmVzdHJpY3Rpb24gZmxhZ3MuCisgIFBSVWludDMy
IG91dCA9IFNBTkRCT1hFRF9OQVZJR0FUSU9OIHwKKyAgICBTQU5EQk9YRURfVE9QTEVWRUxfTkFW
SUdBVElPTiB8CisgICAgU0FOREJPWEVEX1BMVUdJTlMgfCBTQU5EQk9YRURfT1JJR0lOIHwKKyAg
ICBTQU5EQk9YRURfRk9STVMgfCBTQU5EQk9YRURfU0NSSVBUUyB8CisgICAgU0FOREJPWEVEX0FV
VE9NQVRJQ19GRUFUVVJFUzsKKworICBpZiAoIWFTYW5kYm94QXR0clZhbHVlLklzRW1wdHkoKSkg
eworICAgIC8vIFRoZSBzZXBhcmF0b3Igb3B0aW9uYWwgZmxhZyBpcyB1c2VkIGJlY2F1c2UgdGhl
IEhUTUw1IHNwZWMgc2F5cyBhbnkKKyAgICAvLyB3aGl0ZXNwYWNlIGlzIG9rIGFzIGEgc2VwYXJh
dG9yLCB3aGljaCBpcyB3aGF0IHRoaXMgZG9lcy4KKyAgICBIVE1MU3BsaXRPblNwYWNlc1Rva2Vu
aXplciB0b2tlbml6ZXIoYVNhbmRib3hBdHRyVmFsdWUsICcgJywKKyAgICAgIG5zQ2hhclNlcGFy
YXRlZFRva2VuaXplclRlbXBsYXRlPG5zQ29udGVudFV0aWxzOjpJc0hUTUxXaGl0ZXNwYWNlPjo6
U0VQQVJBVE9SX09QVElPTkFMKTsKKworICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2Vu
cygpKSB7CisgICAgICBuc0RlcGVuZGVudFN1YnN0cmluZyB0b2tlbiA9IHRva2VuaXplci5uZXh0
VG9rZW4oKTsKKworICAgICAgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93
LXNjcmlwdHMiKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9TQ1JJUFRTOworICAgICAg
fSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zYW1lLW9yaWdp
biIpKSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX09SSUdJTjsKKyAgICAgIH0gZWxzZSBp
ZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9ybXMiKSkgeworICAgICAg
ICBvdXQgJj0gflNBTkRCT1hFRF9GT1JNUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJD
YXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7CisgICAgICAgIC8vIGFsbG93LXNj
cmlwdHMgcmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRTIGFuZAorICAgICAgICAvLyBTQU5E
Qk9YRURfQVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9TQ1JJ
UFRTOworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisgICAg
ICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXRvcC1uYXZp
Z2F0aW9uIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElP
TjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb3V0OworfQogCiAjaWZkZWYgTU9a
X1hURgogbnNJWFRGU2VydmljZSoKIG5zQ29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsK
ICAgaWYgKCFzWFRGU2VydmljZSkgewogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uo
a1hURlNlcnZpY2VDSUQsICZzWFRGU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsK
QEAgLTY0NjUsMTcgKzY1MTIsMTggQEAgbnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8g
c3RhdGljCiBib29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNp
cGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBh
U2V0VXBGb3JBYm91dEJsYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFGb3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBj
aGFubmVsLCBidXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRo
ZWlyIG93biBzZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25n
IHRoYXQgdGhlIG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1
cHBsaWVkKSB1bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6Ymxh
bmsuCiAgIC8vIFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJz
IGZvciB3aGF0IG93bmVycwpAQCAtNjQ4MywyMyArNjUzMSwzMyBAQCBuc0NvbnRlbnRVdGlsczo6
U2V0VXBDaGFubmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVs
bDo6TG9hZFVSSSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRo
ZSBvd25lciBpZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAg
dmVyeSB3cm9uZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhh
dAogICAvLyAgICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAg
IC8vCiAgIC8vICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4g
dGhleSBhcmUgY3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3Vs
ZCBiZSBiYWQhKQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIg
d2lsbCBiZSBzZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0
cyBvd24gc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1F
CisgIC8vIHNhbmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFu
ZCBpdHMgZG9jdW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFs
LgogICBib29sIGluaGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29u
dGV4dCB0byByZXR1cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBk
b24ndCBjYWxsIE5TX0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhp
cyBjb25kaXRpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5h
bExvYWQgd2hlcmUKICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNl
IHRoZSBvd25lci4KLSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4
dChhVVJJLCAmaW5oZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRC
bGFuayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwg
KChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQp
KSAmJgorICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91
dEJsYW5rKGFVUkkpKSkpKSkgeworICAgIC8vIEJlIGNlcnRhaW4gdGhhdCBhRm9yY2VPd25lciBp
cyBvbmx5IHNldCBmb3IgbnVsbCBwcmluY2lwYWxzCisgICAgaWYgKGFGb3JjZU93bmVyKSB7Cisg
ICAgICBuc0NPTVB0cjxuc0lVUkk+IG93bmVyVVJJOworICAgICAgbnNyZXN1bHQgcnYgPSBhTG9h
ZGluZ1ByaW5jaXBhbC0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKG93bmVyVVJJKSk7CisgICAgICBN
T1pfQVNTRVJUKE5TX1NVQ0NFRURFRChydikgJiYgU2NoZW1lSXMob3duZXJVUkksIE5TX05VTExQ
UklOQ0lQQUxfU0NIRU1FKSk7CisgICAgfQogICAgIGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGlu
Z1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLwogICAvLyBmaWxlOiB1
cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3Bl
bmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCmRpZmYgLS1naXQgYS9jb250
ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50
LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTI0MTYsMTYgKzI0MTYsMjUgQEAgbnNEb2N1bWVu
dDo6U3RhcnREb2N1bWVudExvYWQoY29uc3QgY2hhcgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgn
OycsIHNlbWljb2xvbiwgZW5kKTsKICAgICBTZXRDb250ZW50VHlwZUludGVybmFsKFN1YnN0cmlu
ZyhzdGFydCwgc2VtaWNvbG9uKSk7CiAgIH0KIAogICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhh
Q2hhbm5lbCk7CiAKICAgbUNoYW5uZWwgPSBhQ2hhbm5lbDsKIAorICAvLyBJZiB0aGlzIGRvY3Vt
ZW50IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRvY3NoZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdz
CisgIC8vIHRvIHRoZSBkb2N1bWVudC4gVGhlc2UgYXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBz
ZXQgaGVyZS4KKyAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRl
cmZhY2UoYUNvbnRhaW5lcik7CisKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgbnNyZXN1bHQgcnYg
PSBkb2NTaGVsbC0+R2V0U2FuZGJveEZsYWdzKCZtU2FuZGJveEZsYWdzKTsKKyAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOworICB9CisKICAgbnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7CiAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jl
c3VsdAogbnNEb2N1bWVudDo6SW5pdENTUCgpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3Jj
L25zRnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAot
LS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFz
ZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTExMiwxNiArMTEyLDE5IEBACiAjaW5jbHVkZSAi
bW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgi
CiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIKICNpbmNsdWRlICJtb3ppbGxhL2RvbS9FbGVt
ZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlvdXQvUmVuZGVyRnJhbWVQYXJlbnQuaCIKIAog
I2luY2x1ZGUgImpzYXBpLmgiCiAKKyNpbmNsdWRlICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCisj
aW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKKwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1
c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6Omxh
eWVyczsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXlvdXQ7CiB0eXBlZGVmIEZyYW1lTWV0
cmljczo6Vmlld0lEIFZpZXdJRDsKIAogY2xhc3MgbnNBc3luY0RvY1NoZWxsRGVzdHJveWVyIDog
cHVibGljIG5zUnVubmFibGUKIHsKQEAgLTQ3MywxNiArNDc2LDQ3IEBAIG5zRnJhbWVMb2FkZXI6
OlJlYWxseVN0YXJ0TG9hZGluZ0ludGVybmEKICAgLy8gSnVzdCB0byBiZSBzYWZlLCByZWNoZWNr
IHVyaS4KICAgcnYgPSBDaGVja1VSSUxvYWQobVVSSVRvTG9hZCk7CiAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CiAKICAgbnNDT01QdHI8bnNJRG9jU2hlbGxMb2FkSW5mbz4gbG9hZEluZm87
CiAgIG1Eb2NTaGVsbC0+Q3JlYXRlTG9hZEluZm8oZ2V0dGVyX0FkZFJlZnMobG9hZEluZm8pKTsK
ICAgTlNfRU5TVVJFX1RSVUUobG9hZEluZm8sIE5TX0VSUk9SX0ZBSUxVUkUpOwogCisgIC8vIElz
IHRoaXMgYW4gPGlmcmFtZT4gd2l0aCBhIHNhbmRib3ggYXR0cmlidXRlIG9yIGEgcGFyZW50IHdo
aWNoIGlzCisgIC8vIHNhbmRib3hlZCA/CisgIG5zSFRNTElGcmFtZUVsZW1lbnQqIGlmcmFtZSA9
CisgICAgbnNIVE1MSUZyYW1lRWxlbWVudDo6RnJvbUNvbnRlbnQobU93bmVyQ29udGVudCk7CisK
KyAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICBpZiAoaWZyYW1lKSB7CisgICAgc2Fu
ZGJveEZsYWdzID0gaWZyYW1lLT5HZXRTYW5kYm94RmxhZ3MoKTsKKworICAgIC8vIFRoZSBPd25l
ckRvYyBvZiBhbiBpZnJhbWUgbm9kZSBpcyB0aGUgcGFyZW50IGRvY3VtZW50IG9mIHRoYXQgPGlm
cmFtZT4uCisgICAgUFJVaW50MzIgcGFyZW50U2FuZGJveEZsYWdzID0gaWZyYW1lLT5Pd25lckRv
YygpID8KKyAgICAgIGlmcmFtZS0+T3duZXJEb2MoKS0+U2FuZGJveEZsYWdzKCkgOiAwOworCisg
ICAgaWYgKHNhbmRib3hGbGFncyB8fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgIC8vIFRo
ZSBjaGlsZCBjYW4gb25seSBhZGQgcmVzdHJpY3Rpb25zLCBub3QgcmVtb3ZlIHRoZW0uCisgICAg
ICBzYW5kYm94RmxhZ3MgfD0gcGFyZW50U2FuZGJveEZsYWdzOworCisgICAgICBtRG9jU2hlbGwt
PlNldFNhbmRib3hGbGFncyhzYW5kYm94RmxhZ3MpOworCisgICAgICAvLyBTZXQgdXAgdGhlIGFj
dHVhbCBzYW5kYm94aW5nIGZvciBwbHVnaW5zIGFzIHNwZWNpZmllZC4KKyAgICAgIGlmIChzYW5k
Ym94RmxhZ3MgJiBTQU5EQk9YRURfUExVR0lOUykgeworICAgICAgICBtRG9jU2hlbGwtPlNldEFs
bG93UGx1Z2lucyhmYWxzZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gSWYgdGhpcyBp
cyBhbiA8aWZyYW1lPiBhbmQgaXQncyBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9yaWdpbgor
ICAvLyB3ZSB3aWxsIHNldCBpdCB1cCB3aXRoIGEgbnVsbCBwcmluY2lwYWwgbGF0ZXIgaW4gbnNE
b2NTaGVsbDo6RG9VUklMb2FkLgorICAvLyBXZSBkbyBpdCB0aGVyZSB0byBjb3JyZWN0bHkgc2Fu
ZGJveCBjb250ZW50IHRoYXQgd2FzIGxvYWRlZCBpbnRvCisgIC8vIHRoZSBpZnJhbWUgdmlhIG90
aGVyIG1ldGhvZHMgdGhhbiB0aGUgc3JjIGF0dHJpYnV0ZS4KICAgLy8gV2UnbGwgdXNlIG91ciBw
cmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZSBkb2N1bWVudCBsb2FkZWQgaW5zaWRlIHVzLiAgVGhp
cwogICAvLyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvIHByZXZlbnQgWFNTIGF0dGFja3Mg
b24gZG9jdW1lbnRzIGxvYWRlZCBpbgogICAvLyBzdWJmcmFtZXMhCiAgIGxvYWRJbmZvLT5TZXRP
d25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOwogCiAgIG5zQ09NUHRyPG5zSVVS
ST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRV
UkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2
KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmggYi9jb250ZW50
L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21M
aXN0LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaApAQCAtOTQsMTcgKzk0
LDIxIEBAIEdLX0FUT00oYWN0dWF0ZSwgImFjdHVhdGUiKQogR0tfQVRPTShhZGRyZXNzLCAiYWRk
cmVzcyIpCiBHS19BVE9NKGFmdGVyLCAiYWZ0ZXIiKQogR0tfQVRPTShhZnRlcl9lbmQsICJhZnRl
cl9lbmQiKQogR0tfQVRPTShhZnRlcl9zdGFydCwgImFmdGVyX3N0YXJ0IikKIEdLX0FUT00oYWxp
Z24sICJhbGlnbiIpCiBHS19BVE9NKGFsaW5rLCAiYWxpbmsiKQogR0tfQVRPTShhbGwsICJhbGwi
KQogR0tfQVRPTShhbGxvd2V2ZW50cywgImFsbG93ZXZlbnRzIikKK0dLX0FUT00oYWxsb3dmb3Jt
cywgImFsbG93LWZvcm1zIikKIEdLX0FUT00oYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMsICJhbGxv
d25lZ2F0aXZlYXNzZXJ0aW9ucyIpCitHS19BVE9NKGFsbG93c2FtZW9yaWdpbiwgImFsbG93LXNh
bWUtb3JpZ2luIikKK0dLX0FUT00oYWxsb3dzY3JpcHRzLCAiYWxsb3ctc2NyaXB0cyIpCitHS19B
VE9NKGFsbG93dG9wbmF2aWdhdGlvbiwgImFsbG93LXRvcC1uYXZpZ2F0aW9uIikKIEdLX0FUT00o
YWxsb3d1bnRydXN0ZWQsICJhbGxvd3VudHJ1c3RlZCIpCiBHS19BVE9NKGFsdCwgImFsdCIpCiBH
S19BVE9NKGFsdGVybmF0ZSwgImFsdGVybmF0ZSIpCiBHS19BVE9NKGFsd2F5cywgImFsd2F5cyIp
CiBHS19BVE9NKGFuY2VzdG9yLCAiYW5jZXN0b3IiKQogR0tfQVRPTShhbmNlc3Rvck9yU2VsZiwg
ImFuY2VzdG9yLW9yLXNlbGYiKQogR0tfQVRPTShfYW5kLCAiYW5kIikKIEdLX0FUT00oYW55LCAi
YW55IikKQEAgLTg4NCwxNiArODg4LDE3IEBAIEdLX0FUT00ocm93c3BhbiwgInJvd3NwYW4iKQog
R0tfQVRPTShycCwgInJwIikKIEdLX0FUT00ocnQsICJydCIpCiBHS19BVE9NKHJ0bCwgInJ0bCIp
CiBHS19BVE9NKHJ1YnksICJydWJ5IikKIEdLX0FUT00ocnVsZSwgInJ1bGUiKQogR0tfQVRPTShy
dWxlcywgInJ1bGVzIikKIEdLX0FUT00ocywgInMiKQogR0tfQVRPTShzYW1wLCAic2FtcCIpCitH
S19BVE9NKHNhbmRib3gsICJzYW5kYm94IikKIEdLX0FUT00oc2JhdHRyLCAic2JhdHRyIikKIEdL
X0FUT00oc2NhbGUsICJzY2FsZSIpCiBHS19BVE9NKHNjYW4sICJzY2FuIikKIEdLX0FUT00oc2No
ZW1lLCAic2NoZW1lIikKIEdLX0FUT00oc2NvcGUsICJzY29wZSIpCiBHS19BVE9NKHNjb3BlZCwg
InNjb3BlZCIpCiBHS19BVE9NKHNjcmVlbiwgInNjcmVlbiIpCiBHS19BVE9NKHNjcmVlblgsICJz
Y3JlZW5YIikKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3MuaCBi
L2NvbnRlbnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAot
LS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3MuaApAQCAt
MCwwICsxLDU4IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJz
LW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovDQorLyogVGhpcyBTb3VyY2UgQ29k
ZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYw0KKyAq
IExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRl
ZCB3aXRoIHRoaXMgZmlsZSwNCisgKiBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemls
bGEub3JnL01QTC8yLjAvLiAqLw0KKw0KKy8qDQorICogQ29uc3RhbnQgZmxhZ3MgdGhhdCBkZXNj
cmliZSBob3cgYSBkb2N1bWVudCBpcyBzYW5kYm94ZWQgYWNjb3JkaW5nIHRvIHRoZQ0KKyAqIEhU
TUw1IHNwZWMuDQorICovDQorDQorI2lmbmRlZiBuc1NhbmRib3hGbGFnc19oX19fDQorI2RlZmlu
ZSBuc1NhbmRib3hGbGFnc19oX19fDQorDQorLyoqDQorICogVGhpcyBmbGFnIHByZXZlbnRzIGNv
bnRlbnQgZnJvbSBuYXZpZ2F0aW5nIGJyb3dzaW5nIGNvbnRleHRzIG90aGVyIHRoYW4NCisgKiB0
aGUgc2FuZGJveGVkIGJyb3dzaW5nIGNvbnRleHQgaXRzZWxmIChvciBicm93c2luZyBjb250ZXh0
cyBmdXJ0aGVyDQorICogbmVzdGVkIGluc2lkZSBpdCksIGFuZCB0aGUgdG9wLWxldmVsIGJyb3dz
aW5nIGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfTkFWSUdB
VElPTiAgPSAweDE7DQorDQorLyoqDQorICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJv
bSBuYXZpZ2F0aW5nIHRoZWlyIHRvcC1sZXZlbCBicm93c2luZw0KKyAqIGNvbnRleHQuDQorICov
DQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiA9IDB4
MjsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIGluc3RhbnRp
YXRpbmcgcGx1Z2lucywgd2hldGhlciB1c2luZyB0aGUNCisgKiBlbWJlZCBlbGVtZW50LCB0aGUg
b2JqZWN0IGVsZW1lbnQsIHRoZSBhcHBsZXQgZWxlbWVudCwgb3IgdGhyb3VnaA0KKyAqIG5hdmln
YXRpb24gb2YgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgdW5sZXNzIHRob3NlIHBsdWdpbnMg
Y2FuIGJlDQorICogc2VjdXJlZC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hF
RF9QTFVHSU5TID0gMHg0Ow0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBmb3JjZXMgY29udGVudCBp
bnRvIGEgdW5pcXVlIG9yaWdpbiwgdGh1cyBwcmV2ZW50aW5nIGl0IGZyb20NCisgKiBhY2Nlc3Np
bmcgb3RoZXIgY29udGVudCBmcm9tIHRoZSBzYW1lIG9yaWdpbi4NCisgKiBUaGlzIGZsYWcgYWxz
byBwcmV2ZW50cyBzY3JpcHQgZnJvbSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byB0aGUNCisg
KiBkb2N1bWVudC5jb29raWUgSURMIGF0dHJpYnV0ZSwgYW5kIGJsb2NrcyBhY2Nlc3MgdG8gbG9j
YWxTdG9yYWdlLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX09SSUdJTiA9
IDB4ODsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIGZvcm0gc3VibWlzc2lvbi4NCisg
Ki8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9GT1JNUyA9IDB4MTA7DQorDQorLyoq
DQorICogVGhpcyBmbGFnIGJsb2NrcyBzY3JpcHQgZXhlY3V0aW9uLg0KKyAqLw0KK2NvbnN0IHVu
c2lnbmVkIGxvbmcgU0FOREJPWEVEX1NDUklQVFMgPSAweDIwOw0KKw0KKy8qKg0KKyAqIFRoaXMg
ZmxhZyBibG9ja3MgZmVhdHVyZXMgdGhhdCB0cmlnZ2VyIGF1dG9tYXRpY2FsbHksIHN1Y2ggYXMN
CisgKiBhdXRvbWF0aWNhbGx5IHBsYXlpbmcgYSB2aWRlbyBvciBhdXRvbWF0aWNhbGx5IGZvY3Vz
aW5nIGEgZm9ybSBjb250cm9sLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVE
X0FVVE9NQVRJQ19GRUFUVVJFUyA9IDB4NDA7DQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvY29udGVu
dC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0
TG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcAorKysg
Yi9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcApAQCAtNzAsMTYgKzcwLDE3IEBA
CiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAicHJsb2cu
aCIKICNpbmNsdWRlICJuc0lDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNDaGFubmVsUG9s
aWN5LmgiCiAjaW5jbHVkZSAibnNDUlQuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRDcmVhdG9yRnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSAibnNHZW5lcmljRWxlbWVudC5oIgogI2luY2x1ZGUgIm5zQ3Jv
c3NTaXRlTGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNp
bmNsdWRlICJtb3ppbGxhL0Z1bmN0aW9uVGltZXIuaCIKICNpbmNsdWRlICJtb3ppbGxhL0NPUlNN
b2RlLmgiCiAKICNpZmRlZiBQUl9MT0dHSU5HCiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnQ3Nw
UFJMb2c7CiAjZW5kaWYKIApAQCAtMzA1LDE2ICszMDYsMjIgQEAgbnNTY3JpcHRMb2FkZXI6OlN0
YXJ0TG9hZChuc1NjcmlwdExvYWRSZQogICBpZiAoIXdpbmRvdykgewogICAgIHJldHVybiBOU19F
UlJPUl9OVUxMX1BPSU5URVI7CiAgIH0KIAogICBuc0lEb2NTaGVsbCAqZG9jc2hlbGwgPSB3aW5k
b3ctPkdldERvY1NoZWxsKCk7CiAKICAgbnNDT01QdHI8bnNJSW50ZXJmYWNlUmVxdWVzdG9yPiBw
cm9tcHRlcihkb19RdWVyeUludGVyZmFjZShkb2NzaGVsbCkpOwogCisgIC8vIElmIHRoaXMgZG9j
dW1lbnQgaXMgc2FuZGJveGVkIHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMnLCBhYm9ydC4KKyAgaWYg
KG1Eb2N1bWVudC0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgIC8v
IFJFVklFVyA6IHRoaXMgcHJvYmFibHkgaXNuJ3QgdGhlIHJpZ2h0IGVycm9yLi4KKyAgICByZXR1
cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgfQorCiAgIC8vIGNoZWNrIGZvciBhIENv
bnRlbnQgU2VjdXJpdHkgUG9saWN5IHRvIHBhc3MgZG93biB0byB0aGUgY2hhbm5lbAogICAvLyB0
aGF0IHdpbGwgYmUgY3JlYXRlZCB0byBsb2FkIHRoZSBzY3JpcHQKICAgbnNDT01QdHI8bnNJQ2hh
bm5lbFBvbGljeT4gY2hhbm5lbFBvbGljeTsKICAgbnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5
UG9saWN5PiBjc3A7CiAgIHJ2ID0gbURvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldENzcChn
ZXR0ZXJfQWRkUmVmcyhjc3ApKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgaWYg
KGNzcCkgewogICAgIGNoYW5uZWxQb2xpY3kgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEu
b3JnL25zY2hhbm5lbHBvbGljeTsxIik7CkBAIC02NjYsMTYgKzY3MywyMSBAQCBuc1NjcmlwdExv
YWRlcjo6UHJvY2Vzc1NjcmlwdEVsZW1lbnQobnNJCiAgICAgICAgICJUaGVyZSBjYW4gYmUgb25s
eSBvbmUgcGFyc2VyLWJsb2NraW5nIHNjcmlwdCBhdCBhIHRpbWUiKTsKICAgICBOU19BU1NFUlRJ
T04obVhTTFRSZXF1ZXN0cy5Jc0VtcHR5KCksCiAgICAgICAgICJQYXJzZXItYmxvY2tpbmcgc2Ny
aXB0cyBhbmQgWFNMVCBzY3JpcHRzIGluIHRoZSBzYW1lIGRvYyEiKTsKICAgICBtUGFyc2VyQmxv
Y2tpbmdSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8vIGlu
bGluZSBzY3JpcHQKKyAgLy8gSXMgdGhpcyBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aG91dCAnYWxs
b3ctc2NyaXB0cyc/CisgIGlmIChtRG9jdW1lbnQtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVE
X1NDUklQVFMpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKwogICBuc0NPTVB0cjxuc0lDb250
ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwo
KS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwg
ZmFsc2UpOwogCiAgIGlmIChjc3ApIHsKICAgICBQUl9MT0coZ0NzcFBSTG9nLCBQUl9MT0dfREVC
VUcsICgiTmV3IFNjcmlwdExvYWRlciBpICoqKip3aXRoIENTUCoqKioiKSk7CiAgICAgYm9vbCBp
bmxpbmVPSzsKICAgICBydiA9IGNzcC0+R2V0QWxsb3dzSW5saW5lU2NyaXB0KCZpbmxpbmVPSyk7
CmRpZmYgLS1naXQgYS9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5j
cHAgYi9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAKLS0tIGEv
Y29udGVudC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCisrKyBiL2NvbnRl
bnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcApAQCAtODMsMTYgKzgzLDE3
IEBACiAjaW5jbHVkZSAibnNET01KU1V0aWxzLmgiCiAjaW5jbHVkZSAibnNET01TY3JpcHRPYmpl
Y3RIb2xkZXIuaCIKICNpbmNsdWRlICJuc0RhdGFIYXNodGFibGUuaCIKICNpbmNsdWRlICJuc0NP
TUFycmF5LmgiCiAjaW5jbHVkZSAibnNFdmVudExpc3RlbmVyU2VydmljZS5oIgogI2luY2x1ZGUg
Im5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIm5zSlNFbnZpcm9ubWVudC5o
IgogI2luY2x1ZGUgInhwY3B1YmxpYy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6
aGFsOwogCiAjZGVmaW5lIEVWRU5UX1RZUEVfRVFVQUxTKCBscywgdHlwZSwgdXNlclR5cGUgKSBc
CiAgIChscy0+bUV2ZW50VHlwZSA9PSB0eXBlICYmIFwKICAgKGxzLT5tRXZlbnRUeXBlICE9IE5T
X1VTRVJfREVGSU5FRF9FVkVOVCB8fCBscy0+bVR5cGVBdG9tID09IHVzZXJUeXBlKSkKIApAQCAt
NTg3LDE2ICs1ODgsMjIgQEAgbnNFdmVudExpc3RlbmVyTWFuYWdlcjo6QWRkU2NyaXB0RXZlbnRM
aQogICAgIC8vIGxvYWRlZCBhcyBkYXRhLgogICAgIHJldHVybiBOU19PSzsKICAgfQogCiAgIG5z
cmVzdWx0IHJ2ID0gTlNfT0s7CiAgIC8vIHJldHVybiBlYXJseSBwcmV2ZW50aW5nIHRoZSBldmVu
dCBsaXN0ZW5lciBmcm9tIGJlaW5nIGFkZGVkCiAgIC8vICdkb2MnIGlzIGZldGNoZWQgYWJvdmUK
ICAgaWYgKGRvYykgeworICAgIC8vIERvbid0IGFsbG93IGFkZGluZyBhbiBldmVudCBsaXN0ZW5l
ciBpZiB0aGUgZG9jdW1lbnQgaXMgc2FuZGJveGVkCisgICAgLy8gd2l0aG91dCAnYWxsb3ctc2Ny
aXB0cycuCisgICAgaWYgKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykg
eworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAg
bnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5PiBjc3A7CiAgICAgcnYgPSBkb2MtPk5v
ZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICAgIE5TX0VOU1VS
RV9TVUNDRVNTKHJ2LCBydik7CiAKICAgICBpZiAoY3NwKSB7CiAgICAgICBib29sIGlubGluZU9L
OwogICAgICAgcnYgPSBjc3AtPkdldEFsbG93c0lubGluZVNjcmlwdCgmaW5saW5lT0spOwogICAg
ICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9j
b250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9z
cmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRN
TEZvcm1FbGVtZW50LmNwcApAQCAtODAsMTYgKzgwLDE3IEBACiAKICNpbmNsdWRlICJtb3pBdXRv
RG9jVXBkYXRlLmgiCiAjaW5jbHVkZSAibnNJSFRNTENvbGxlY3Rpb24uaCIKIAogI2luY2x1ZGUg
Im5zSUNvbnN0cmFpbnRWYWxpZGF0aW9uLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MQnV0dG9u
RWxlbWVudC5oIgogI2luY2x1ZGUgImRvbWJpbmRpbmdzLmgiCisjaW5jbHVkZSAibnNTYW5kYm94
RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIAogc3RhdGljIGNvbnN0
IGludCBOU19GT1JNX0NPTlRST0xfTElTVF9IQVNIVEFCTEVfU0laRSA9IDE2OwogCiBzdGF0aWMg
Y29uc3QgUFJVaW50OCBOU19GT1JNX0FVVE9DT01QTEVURV9PTiAgPSAxOwogc3RhdGljIGNvbnN0
IFBSVWludDggTlNfRk9STV9BVVRPQ09NUExFVEVfT0ZGID0gMDsKIApAQCAtNjgzLDE3ICs2ODQs
MTkgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNldChuc0V2ZQogICAgIHJldHVy
biBEb1Jlc2V0KCk7CiAgIH0KIAogICBpZiAoTlNfRk9STV9TVUJNSVQgPT0gYU1lc3NhZ2UpIHsK
ICAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgbm90IGluIGEgZG9jdW1lbnQuCiAgICAgaWYg
KCFkb2MpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAgICB9Ci0gICAgcmV0dXJuIERvU3VibWl0
KGFFdmVudCk7CisgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIGluIGEgc2FuZGJveGVkIGZy
YW1lIGFuZCBmb3JtIHN1Ym1pdAorICAgIC8vIGlzIGRpc2FibGVkLgorICAgIHJldHVybiAoZG9j
LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9GT1JNUykgPyBOU19PSyA6IERvU3VibWl0KGFF
dmVudCk7CiAgIH0KIAogICBNT1pfQVNTRVJUKGZhbHNlKTsKICAgcmV0dXJuIE5TX09LOwogfQog
CiBuc3Jlc3VsdAogbnNIVE1MRm9ybUVsZW1lbnQ6OkRvUmVzZXQoKQpAQCAtMTY4NCwxNiArMTY4
NywyNCBAQCBuc0hUTUxGb3JtRWxlbWVudDo6Q2hlY2tWYWxpZEZvcm1TdWJtaXNzCiAgICAqIFRP
RE86IHRoZSBjaGVjayBmb3Igb2JzZXJ2ZXIgc2hvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBI
VE1MNSBGb3JtcyB3aWxsCiAgICAqIGJlIHNwcmVhZCBlbm91Z2ggYW5kIGF1dGhvcnMgd2lsbCBh
c3N1bWUgZm9ybXMgY2FuJ3QgYmUgc3VibWl0dGVkIHdoZW4KICAgICogaW52YWxpZC4gU2VlIGJ1
ZyA1ODc2NzEuCiAgICAqLwogCiAgIE5TX0FTU0VSVElPTighSGFzQXR0cihrTmFtZVNwYWNlSURf
Tm9uZSwgbnNHa0F0b21zOjpub3ZhbGlkYXRlKSwKICAgICAgICAgICAgICAgICJXZSBzaG91bGRu
J3QgYmUgdGhlcmUgaWYgbm92YWxpZGF0ZSBpcyBzZXQhIik7CiAKKyAgLy8gRG9uJ3QgZG8gdmFs
aWRhdGlvbiBmb3IgYSBmb3JtIHN1Ym1pdCBkb25lIGJ5IGEgc2FuZGJveGVkIGRvY3VtZW50IHRo
YXQKKyAgLy8gZG9lc24ndCBoYXZlICdhbGxvdy1mb3JtcycsIHRoZSBzdWJtaXQgd2lsbCBoYXZl
IGJlZW4gYmxvY2tlZCBhbmQgdGhlCisgIC8vIEhUTUw1IHNwZWMgc2F5cyB3ZSBzaG91bGRuJ3Qg
dmFsaWRhdGUgaW4gdGhpcyBjYXNlLgorICBuc0lEb2N1bWVudCogZG9jID0gR2V0Q3VycmVudERv
YygpOworICBpZiAoZG9jICYmIChkb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX0ZPUk1T
KSkgeworICAgICAgcmV0dXJuIHRydWU7CisgIH0KKwogICAvLyBXaGVuIC5zdWJtaXQoKSBpcyBj
YWxsZWQgYUV2ZW50ID0gbnNudWxsIHNvIHdlIGNhbiByZWx5IG9uIHRoYXQgdG8ga25vdyBpZgog
ICAvLyB3ZSBoYXZlIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgZm9ybS4KICAgbnNDT01Q
dHI8bnNJT2JzZXJ2ZXJTZXJ2aWNlPiBzZXJ2aWNlID0KICAgICBtb3ppbGxhOjpzZXJ2aWNlczo6
R2V0T2JzZXJ2ZXJTZXJ2aWNlKCk7CiAgIGlmICghc2VydmljZSkgewogICAgIE5TX1dBUk5JTkco
Ik5vIG9ic2VydmVyIHNlcnZpY2UgYXZhaWxhYmxlISIpOwogICAgIHJldHVybiB0cnVlOwogICB9
CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVu
dC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAK
LS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAt
MzMsNzQgKzMzLDIzIEBACiAgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCiAgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgogICoKICAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpbmNsdWRlICJtb3ppbGxhL1V0aWwuaCIKIAogI2lu
Y2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAibnNHZW5lcmljSFRN
TEZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIm5zSURPTURvY3VtZW50LmgiCi0jaW5jbHVkZSAi
bnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01TVkdEb2N1bWVudC5oIgot
I2luY2x1ZGUgIm5zR2tBdG9tcy5oIgotI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCi0jaW5jbHVk
ZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAibnNET01FcnJvci5oIgotI2luY2x1
ZGUgIm5zUnVsZURhdGEuaCIKLSNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCisjaW5jbHVkZSAi
bnNIVE1MSUZyYW1lRWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5n
IG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKLWNsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBw
dWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAotewotcHVibGljOgotICBuc0hUTUxJ
RnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKLSAg
ICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJzZXIg
PSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7Ci0gIHZpcnR1YWwgfm5zSFRNTElGcmFt
ZUVsZW1lbnQoKTsKLQotICAvLyBuc0lTdXBwb3J0cwotICBOU19ERUNMX0lTVVBQT1JUU19JTkhF
UklURUQKLQotICAvLyBuc0lET01Ob2RlCi0gIE5TX0ZPUldBUkRfTlNJRE9NTk9ERShuc0dlbmVy
aWNIVE1MRnJhbWVFbGVtZW50OjopCi0KLSAgLy8gbnNJRE9NRWxlbWVudAotICBOU19GT1JXQVJE
X05TSURPTUVMRU1FTlQobnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURP
TUhUTUxFbGVtZW50Ci0gIE5TX0ZPUldBUkRfTlNJRE9NSFRNTEVMRU1FTlQobnNHZW5lcmljSFRN
TEZyYW1lRWxlbWVudDo6KQotCi0gIC8vIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50Ci0gIE5TX0RF
Q0xfTlNJRE9NSFRNTElGUkFNRUVMRU1FTlQKLQotICAvLyBuc0lET01HZXRTVkdEb2N1bWVudAot
ICBOU19ERUNMX05TSURPTUdFVFNWR0RPQ1VNRU5UCi0KLSAgLy8gbnNJQ29udGVudAotICB2aXJ0
dWFsIGJvb2wgUGFyc2VBdHRyaWJ1dGUoUFJJbnQzMiBhTmFtZXNwYWNlSUQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7Ci0gIE5TX0lNRVRIT0Rf
KGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0
OwotICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGlu
Z0Z1bmN0aW9uKCkgY29uc3Q7Ci0KLSAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5m
byAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7Ci0gIHZpcnR1YWwgbnNYUEND
bGFzc0luZm8qIEdldENsYXNzSW5mbygpOwotICB2aXJ0dWFsIG5zSURPTU5vZGUqIEFzRE9NTm9k
ZSgpIHsgcmV0dXJuIHRoaXM7IH0KLX07Ci0KLQogTlNfSU1QTF9OU19ORVdfSFRNTF9FTEVNRU5U
X0NIRUNLX1BBUlNFUihJRnJhbWUpCiAKLQogbnNIVE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZy
YW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJz
ZXIpCiAgIDogbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudChhTm9kZUluZm8sIGFGcm9tUGFyc2Vy
KQogewogfQogCiBuc0hUTUxJRnJhbWVFbGVtZW50Ojp+bnNIVE1MSUZyYW1lRWxlbWVudCgpCiB7
CkBAIC0xMzIsMTYgKzgxLDE3IEBAIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxl
bWVudCwKIE5TX0lNUExfVVJJX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTG9uZ0Rlc2MsIGxv
bmdkZXNjKQogTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBNYXJnaW5I
ZWlnaHQsIG1hcmdpbmhlaWdodCkKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxl
bWVudCwgTWFyZ2luV2lkdGgsIG1hcmdpbndpZHRoKQogTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hU
TUxJRnJhbWVFbGVtZW50LCBOYW1lLCBuYW1lKQogTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJ
RnJhbWVFbGVtZW50LCBTY3JvbGxpbmcsIHNjcm9sbGluZykKIE5TX0lNUExfVVJJX0FUVFIobnNI
VE1MSUZyYW1lRWxlbWVudCwgU3JjLCBzcmMpCiBOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElG
cmFtZUVsZW1lbnQsIFdpZHRoLCB3aWR0aCkKIE5TX0lNUExfQk9PTF9BVFRSKG5zSFRNTElGcmFt
ZUVsZW1lbnQsIE1vekFsbG93RnVsbFNjcmVlbiwgbW96YWxsb3dmdWxsc2NyZWVuKQorTlNfSU1Q
TF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBTYW5kYm94LCBzYW5kYm94KQogCiBO
U19JTUVUSE9ESU1QCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRDb250ZW50RG9jdW1lbnQobnNJ
RE9NRG9jdW1lbnQqKiBhQ29udGVudERvY3VtZW50KQogewogICByZXR1cm4gbnNHZW5lcmljSFRN
TEZyYW1lRWxlbWVudDo6R2V0Q29udGVudERvY3VtZW50KGFDb250ZW50RG9jdW1lbnQpOwogfQog
CiBOU19JTUVUSE9ESU1QCkBAIC0yNjksOCArMjE5LDM3IEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6
OklzQXR0cmlidXRlTWFwcGVkKGMKIAogCiBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jCiBuc0hU
TUxJRnJhbWVFbGVtZW50OjpHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdAogewog
ICByZXR1cm4gJk1hcEF0dHJpYnV0ZXNJbnRvUnVsZTsKIH0KIAorbnNyZXN1bHQKK25zSFRNTElG
cmFtZUVsZW1lbnQ6OkFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSog
YU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F0dHJW
YWx1ZSogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBh
Tm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0gbnNHa0F0b21zOjpzYW5kYm94ICYmIGFOYW1lU3Bh
Y2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgeworICAgIC8vIFBhcnNlIHRoZSBuZXcgdmFsdWUg
b2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBhbmQgaWYgd2UgaGF2ZSBhIGRvY3NoZWxsCisgICAg
Ly8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFwcHJvcHJpYXRlbHkuCisgICAgaWYgKG1GcmFtZUxv
YWRlcikgeworICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY3NoZWxsID0gbUZyYW1lTG9h
ZGVyLT5HZXRFeGlzdGluZ0RvY1NoZWxsKCk7CisKKyAgICAgIGlmIChkb2NzaGVsbCkgeworICAg
ICAgICBQUlVpbnQzMiBuZXdGbGFncyA9IDA7CisgICAgICAgIC8vIElmIGEgTlVMTCBhVmFsdWUg
aXMgcGFzc2VkIGluLCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBzYW5kYm94IGZsYWdzCisgICAgICAg
IC8vIHdoaWNoIHdlIHdpbGwgZG8gYnkgc2V0dGluZyB0aGVtIHRvIDAuCisgICAgICAgIGlmIChh
VmFsdWUpIHsKKyAgICAgICAgICBuc0F1dG9TdHJpbmcgc3RyVmFsdWU7CisgICAgICAgICAgYVZh
bHVlLT5Ub1N0cmluZyhzdHJWYWx1ZSk7CisgICAgICAgICAgbmV3RmxhZ3MgPSBuc0NvbnRlbnRV
dGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncygKKyAgICAgICAgICAgIHN0clZhbHVl
KTsKKyAgICAgICAgfQorICAgICAgICBkb2NzaGVsbC0+U2V0U2FuZGJveEZsYWdzKG5ld0ZsYWdz
KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIG5zR2VuZXJpY0hUTUxFbGVtZW50OjpB
ZnRlclNldEF0dHIoYU5hbWVTcGFjZUlELCBhTmFtZSwgYVZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTm90aWZ5KTsKKworfQpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaCBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZy
YW1lRWxlbWVudC5oCkBAIC0wLDAgKzEsMTE2IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lk
dGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisv
KiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQ
TCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJq
ZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJM
aWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBi
YXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisg
KgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxsYSBDb21tdW5pY2F0b3IgY2xpZW50IGNv
ZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlz
CisgKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNy
ZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgKKyAq
IHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250
cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBm
aWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksCisg
KiBvciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9y
IGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2Yg
dGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBh
Ym92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp
bGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BM
LCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lz
aW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0
aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BM
IG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgor
ICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4K
KyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisjaW5jbHVkZSAibW96
aWxsYS9VdGlsLmgiCisKKyNpbmNsdWRlICJuc0lET01IVE1MSUZyYW1lRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIm5zR2VuZXJpY0hUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAibnNHZW5lcmljSFRNTEZy
YW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zSURPTURvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJ
RE9NR2V0U1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01TVkdEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIm5zR2tBdG9tcy5oIgorI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCisjaW5jbHVkZSAi
bnNNYXBwZWRBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAibnNET01FcnJvci5oIgorI2luY2x1ZGUg
Im5zUnVsZURhdGEuaCIKKyNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCisjaW5jbHVkZSAibnND
b250ZW50VXRpbHMuaCIKKworY2xhc3MgbnNIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0dl
bmVyaWNIVE1MRnJhbWVFbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IG5zSURPTUhUTUxJRnJhbWVFbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVi
bGljIG5zSURPTUdldFNWR0RvY3VtZW50Cit7CitwdWJsaWM6CisgIG5zSFRNTElGcmFtZUVsZW1l
bnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvLAorICAgICAgICAgICAg
ICAgICAgICAgIG1vemlsbGE6OmRvbTo6RnJvbVBhcnNlciBhRnJvbVBhcnNlciA9IG1vemlsbGE6
OmRvbTo6Tk9UX0ZST01fUEFSU0VSKTsKKyAgdmlydHVhbCB+bnNIVE1MSUZyYW1lRWxlbWVudCgp
OworCisgIC8vIG5zSVN1cHBvcnRzCisgIE5TX0RFQ0xfSVNVUFBPUlRTX0lOSEVSSVRFRAorCisg
IC8vIG5zSURPTU5vZGUKKyAgTlNfRk9SV0FSRF9OU0lET01OT0RFKG5zR2VuZXJpY0hUTUxGcmFt
ZUVsZW1lbnQ6OikKKworICAvLyBuc0lET01FbGVtZW50CisgIE5TX0ZPUldBUkRfTlNJRE9NRUxF
TUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50OjopCisKKyAgLy8gbnNJRE9NSFRNTEVsZW1l
bnQKKyAgTlNfRk9SV0FSRF9OU0lET01IVE1MRUxFTUVOVChuc0dlbmVyaWNIVE1MRnJhbWVFbGVt
ZW50OjopCisKKyAgLy8gbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKKyAgTlNfREVDTF9OU0lET01I
VE1MSUZSQU1FRUxFTUVOVAorCisgIC8vIG5zSURPTUdldFNWR0RvY3VtZW50CisgIE5TX0RFQ0xf
TlNJRE9NR0VUU1ZHRE9DVU1FTlQKKworICAvLyBuc0lDb250ZW50CisgIHZpcnR1YWwgYm9vbCBQ
YXJzZUF0dHJpYnV0ZShQUkludDMyIGFOYW1lc3BhY2VJRCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc0FTdHJpbmcmIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KTsKKyAgTlNfSU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1
dGVNYXBwZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CisgIHZpcnR1YWwgbnNN
YXBSdWxlVG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25z
dDsKKworICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5z
SU5vZGUgKiphUmVzdWx0KSBjb25zdDsKKyAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xh
c3NJbmZvKCk7CisgIHZpcnR1YWwgbnNJRE9NTm9kZSogQXNET01Ob2RlKCkgeyByZXR1cm4gdGhp
czsgfQorCisgIHZpcnR1YWwgbnNyZXN1bHQgQWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFj
ZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNBdHRyVmFsdWUqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhTm90aWZ5KTsKKworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKQorICB7CisgICAg
bnNBdXRvU3RyaW5nIHNhbmRib3hBdHRyOworCisgICAgaWYgKEdldEF0dHIoa05hbWVTcGFjZUlE
X05vbmUsIG5zR2tBdG9tczo6c2FuZGJveCwgc2FuZGJveEF0dHIpKSB7CisgICAgICByZXR1cm4g
bnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2FuZGJveEF0dHIp
OworICAgIH0KKworICAgIC8vIE5vIHNhbmRib3ggYXR0cmlidXRlLCBubyBzYW5kYm94IGZsYWdz
LgorICAgIHJldHVybiAwOworICB9CisKKyAgc3RhdGljIG5zSFRNTElGcmFtZUVsZW1lbnQqIEZy
b21Db250ZW50KG5zSUNvbnRlbnQgKmFDb250ZW50KQorICB7CisgICAgaWYgKGFDb250ZW50LT5J
c0hUTUwobnNHa0F0b21zOjppZnJhbWUpKSB7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnNI
VE1MSUZyYW1lRWxlbWVudCo+KGFDb250ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIG5zbnVsbDsK
KyAgfQorfTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9j
dW1lbnQuY3BwIGIvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAK
LS0tIGEvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKKysrIGIv
Y29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKQEAgLTEzMSwxNiAr
MTMxLDE3IEBACiAjaW5jbHVkZSAicHJwcmYuaCIKICNpbmNsdWRlICJtb3ppbGxhL2RvbS9FbGVt
ZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIm5zTWlt
ZVR5cGVzLmgiCiAjaW5jbHVkZSAibnNJUmVxdWVzdC5oIgogI2luY2x1ZGUgIm5zSHRtbDVUcmVl
T3BFeGVjdXRvci5oIgogI2luY2x1ZGUgIm5zSHRtbDVQYXJzZXIuaCIKICNpbmNsdWRlICJuc0lE
T01KU1dpbmRvdy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIAogI2RlZmluZSBO
U19NQVhfRE9DVU1FTlRfV1JJVEVfREVQVEggMjAKIAogI2luY2x1ZGUgInBybWVtLmgiCiAjaW5j
bHVkZSAicHJ0aW1lLmgiCkBAIC0xMjQ5LDE2ICsxMjUwLDIyIEBAIG5zSFRNTERvY3VtZW50OjpH
ZXRDb29raWUobnNBU3RyaW5nJiBhQ28KIHsKICAgYUNvb2tpZS5UcnVuY2F0ZSgpOyAvLyBjbGVh
ciBjdXJyZW50IGNvb2tpZSBpbiBjYXNlIHNlcnZpY2UgZmFpbHM7CiAgICAgICAgICAgICAgICAg
ICAgICAgLy8gbm8gY29va2llIGlzbid0IGFuIGVycm9yIGNvbmRpdGlvbi4KIAogICBpZiAobURp
c2FibGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0
aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gcmVh
ZCBjb29raWVzCisgIC8vIGlzIHByb2hpYml0ZWQuCisgIGlmIChtU2FuZGJveEZsYWdzICYgU0FO
REJPWEVEX09SSUdJTikgeworICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOwor
ICB9CisgIAogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZpY2UgaXNuJ3QgYW4gZXJyb3IK
ICAgbnNDT01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9IGRvX0dldFNlcnZpY2UoTlNf
Q09PS0lFU0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZpY2UpIHsKICAgICAvLyBHZXQg
YSBVUkkgZnJvbSB0aGUgZG9jdW1lbnQgcHJpbmNpcGFsLiBXZSB1c2UgdGhlIG9yaWdpbmFsCiAg
ICAgLy8gY29kZWJhc2UgaW4gY2FzZSB0aGUgY29kZWJhc2Ugd2FzIGNoYW5nZWQgYnkgU2V0RG9t
YWluCiAgICAgbnNDT01QdHI8bnNJVVJJPiBjb2RlYmFzZVVSSTsKICAgICBOb2RlUHJpbmNpcGFs
KCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhjb2RlYmFzZVVSSSkpOwogCkBAIC0xMjc5LDE2ICsx
Mjg2LDIyIEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3RyaW5nJiBhQ28KIAogTlNf
SU1FVEhPRElNUAogbnNIVE1MRG9jdW1lbnQ6OlNldENvb2tpZShjb25zdCBuc0FTdHJpbmcmIGFD
b29raWUpCiB7CiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2VzcykgewogICAgIHJldHVybiBOU19P
SzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBp
cyBzZXQsIGFjY2VzcyB0byB3cml0ZSBjb29raWVzCisgIC8vIGlzIHByb2hpYml0ZWQuCisgIGlm
IChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikgeworICAgIHJldHVybiBOU19FUlJP
Ul9ET01fU0VDVVJJVFlfRVJSOworICB9CisKICAgLy8gbm90IGhhdmluZyBhIGNvb2tpZSBzZXJ2
aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNlcnZpY2Ug
PSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlmIChzZXJ2
aWNlICYmIG1Eb2N1bWVudFVSSSkgewogICAgIG5zQ09NUHRyPG5zSVByb21wdD4gcHJvbXB0Owog
ICAgIG5zQ09NUHRyPG5zUElET01XaW5kb3c+IHdpbmRvdyA9IEdldFdpbmRvdygpOwogICAgIGlm
ICh3aW5kb3cpIHsKICAgICAgIHdpbmRvdy0+R2V0UHJvbXB0ZXIoZ2V0dGVyX0FkZFJlZnMocHJv
bXB0KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbiBiL2Rv
Y3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4KLS0tIGEvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbgor
KysgYi9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCkBAIC0xMTgsOSArMTE4LDEwIEBAIGluY2x1
ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9jb25maWcubWsKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2lw
Yy9jaHJvbWl1bS9jaHJvbWl1bS1jb25maWcubWsKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZp
Zy9ydWxlcy5tawogCiBMT0NBTF9JTkNMVURFUyArPSBcCiAgIC1JJChzcmNkaXIpLy4uL3NoaXN0
b3J5L3NyYyBcCiAgIC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKICAgLUkkKHRvcHNyY2Rpcikv
bGF5b3V0L2Jhc2UgXAogICAtSSQodG9wc3JjZGlyKS94cGNvbS9kcyBcCisgIC1JJCh0b3BzcmNk
aXIpL2NvbnRlbnQvYmFzZS9zcmMgXAogICAkKE5VTEwpCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9i
YXNlL25zRG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9k
b2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVs
bC5jcHAKQEAgLTIxNiwxNiArMjE2LDE3IEBACiAjaW5jbHVkZSAibnNJV2ViQnJvd3NlclByaW50
LmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgIm5zUGx1Z2luRXJyb3IuaCIKICNpbmNsdWRlICJuc0Nv
bnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zQ29udGVudEVycm9ycy5oIgogI2luY2x1ZGUgIm5z
SUNoYW5uZWxQb2xpY3kuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIK
KyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNYVUxBcHBBUEkuaCIK
IAogI2luY2x1ZGUgIm5zRE9NTmF2aWdhdGlvblRpbWluZy5oIgogI2luY2x1ZGUgIm5zSVRpbWVk
Q2hhbm5lbC5oIgogI2luY2x1ZGUgIm1vemlsbGEvU3RhcnR1cFRpbWVsaW5lLmgiCiAKIHN0YXRp
YyBOU19ERUZJTkVfQ0lEKGtET01TY3JpcHRPYmplY3RGYWN0b3J5Q0lELApAQCAtNzY2LDE2ICs3
NjcsMTcgQEAgbnNEb2NTaGVsbDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVTWV9G
TEFHU19OT05FKSwKICAgICBtQXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9XTiks
CiAgICAgbUxvYWRUeXBlKDApLAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdpbkhl
aWdodCgtMSksCiAgICAgbUl0ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNUcmFu
c0luZGV4KC0xKSwKICAgICBtTG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hGbGFn
cygwKSwKICAgICBtQ3JlYXRlZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUpLAog
ICAgIG1BbGxvd1BsdWdpbnModHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwKICAg
ICBtQWxsb3dNZXRhUmVkaXJlY3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwKICAg
ICBtQWxsb3dETlNQcmVmZXRjaCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRydWUp
LApAQCAtMjk4NiwxNiArMjk4OCw3MyBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1lKGNv
bnN0IFBSVW5pCiAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoZm91bmRJdGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91bmRJ
dGVtIGhlcmUgZXZlbiBpZiBpdCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0ZW0g
c2luY2UgYWxsIHRoZSBuYW1lcyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAgICAg
ICAgIC8vIHNwZWNpYWwgY2FzZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3IgZnVy
dGhlci4KIAorICAgICAgICAgICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwgd2Ug
bmVlZCB0byBkbyBzb21lIGV4dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRi
b3hGbGFncyA9IDA7CisKKyAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBk
b19HZXRJbnRlcmZhY2UoYU9yaWdpbmFsUmVxdWVzdG9yKTsKKworICAgICAgICAgICAgaWYgKGRv
YykgeworICAgICAgICAgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MpIHsKKyAgICAg
ICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiByb290OworICAgICAgICAg
ICAgICAgIEdldFNhbWVUeXBlUm9vdFRyZWVJdGVtKGdldHRlcl9BZGRSZWZzKHJvb3QpKTsKKwor
ICAgICAgICAgICAgICAgIC8vIElzIHRoZSBmb3VuZCBpdGVtIG5vdCBhIHRvcCBsZXZlbCBicm93
c2luZyBjb250ZXh0IGFuZCBub3Qgb3Vyc2VsZiA/CisgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gc2VsZkFzSXRlbSA9IHN0YXRpY19jYXN0PG5zSURvY1NoZWxs
VHJlZUl0ZW0gKj4odGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kSXRlbSAhPSByb290
ICYmIGZvdW5kSXRlbSAhPSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFy
ZSB3ZSBhbiBhbmNlc3RvciBvZiB0aGUgZm91bmRJdGVtID8KKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc0FuY2VzdG9yID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50QXNJdGVtOworICAgICAgICAgICAgICAgICAgICBH
ZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJlbnRBc0l0ZW0pKTsKKworICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAocGFyZW50QXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0bXA7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRBc0l0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gc2VsZkFzSXRlbSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5jZXN0b3IgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVtID0gdG1wOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FuY2VzdG9yKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBObywgd2UgYXJlIG5vdCBhbiBhbmNlc3RvciBhbmQgb3VyIGRv
Y3VtZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW5kYm94ZWQsIHdlIGNhbid0
IGFsbG93IHRoaXMuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAvLyBUb3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAtIGlzIGl0IGFuIGFu
Y2VzdG9yIG9mIG91cnMgPworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVs
bFRyZWVJdGVtPiB0bXA7CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdl
dHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0bXApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgdG1wID09IGZvdW5kSXRlbSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYW5jZXN0b3IsIGFuZCB3
ZSBhcmUgc2FuZGJveGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBh
bGxvdy10b3AtbmF2aWdhdGlvbiBpcyBzZXQsIHdlIGNhbid0IGFsbG93IHRoaXMuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9UT1BMRVZF
TF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0g
PSBuc251bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgdG1wLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgIGZvdW5kSXRlbS5zd2FwKCpfcmV0dmFsKTsKICAgICAgICAgICAgIHJldHVybiBO
U19PSzsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEtlZXAgbG9va2luZwogICAgICAgICAK
ICAgICAvLyBGaXJzdCB3ZSBjaGVjayBvdXIgbmFtZS4KQEAgLTUwMjYsMTYgKzUwODUsMzAgQEAg
bnNEb2NTaGVsbDo6U2V0SXNBcHBUYWIoYm9vbCBhSXNBcHBUYWIpCiBOU19JTUVUSE9ESU1QCiBu
c0RvY1NoZWxsOjpHZXRJc0FwcFRhYihib29sICphSXNBcHBUYWIpCiB7CiAgICphSXNBcHBUYWIg
PSBtSXNBcHBUYWI7CiAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAorbnNEb2NT
aGVsbDo6U2V0U2FuZGJveEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCit7CisgICAgbVNh
bmRib3hGbGFncyA9IGFTYW5kYm94RmxhZ3M7CisgICAgcmV0dXJuIE5TX09LOworfQorCitOU19J
TUVUSE9ESU1QCituc0RvY1NoZWxsOjpHZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgICphU2FuZGJv
eEZsYWdzKQoreworICAgICphU2FuZGJveEZsYWdzID0gbVNhbmRib3hGbGFnczsKKyAgICByZXR1
cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHko
Ym9vbCBhVmlzaWJpbGl0eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICBy
ZXR1cm4gTlNfT0s7CiAgICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmll
d2VyLT5TaG93KCk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtODI0NywxNiArODMyMCwyOSBAQCBu
c0RvY1NoZWxsOjpJbnRlcm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFt
ZShhV2luZG93VGFyZ2V0LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0dGVyX0FkZFJlZnModGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1No
ZWxsPiB0YXJnZXREb2NTaGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAg
ICAgICAKICAgICAgICAgYm9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRh
cmdldERvY1NoZWxsKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVu
dCBpcyBzYW5kYm94ZWQgYW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRl
L2xvYWQgYSBmcmFtZSBpdCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAg
ICAgLy8gRmluZEl0ZW1XaXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3Ig
dGhlIHRhcmdldAorICAgICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFs
bHkgb3BlbiBhIG5ldyB3aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0aG91Z2gu
IENoZWNrIGlmIHdlIGFyZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYgc28uCisgICAg
ICAgICAgICBOU19FTlNVUkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1JfRkFJTFVSRSk7
CisgICAgICAgICAgICBuc0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3Vt
ZW50KCk7CisgICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICAg
ICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIGlmIChz
YW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgICAgICAgIHJl
dHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBuc0NP
TVB0cjxuc0lET01XaW5kb3c+IHdpbiA9CiAgICAgICAgICAgICAgICAgZG9fR2V0SW50ZXJmYWNl
KEdldEFzU3VwcG9ydHModGhpcykpOwogICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUod2luLCBO
U19FUlJPUl9OT1RfQVZBSUxBQkxFKTsKIAogICAgICAgICAgICAgbnNEZXBlbmRlbnRTdHJpbmcg
bmFtZShhV2luZG93VGFyZ2V0KTsKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4g
bmV3V2luOwogICAgICAgICAgICAgcnYgPSB3aW4tPk9wZW4oRW1wdHlTdHJpbmcoKSwgLy8gVVJM
IHRvIGxvYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsICAgICAgICAgIC8vIHdp
bmRvdyBuYW1lCkBAIC05MDM0LDE4ICs5MTIwLDMxIEBAIG5zRG9jU2hlbGw6OkRvVVJJTG9hZChu
c0lVUkkgKiBhVVJJLAogICAgICAgICB9CiAgICAgICAgIC8vIFNldCB0aGUgcmVmZXJyZXIgZXhw
bGljaXRseQogICAgICAgICBpZiAoYVJlZmVycmVyVVJJICYmIGFTZW5kUmVmZXJyZXIpIHsKICAg
ICAgICAgICAgIC8vIFJlZmVycmVyIGlzIGN1cnJlbmx5IG9ubHkgc2V0IGZvciBsaW5rIGNsaWNr
cyBoZXJlLgogICAgICAgICAgICAgaHR0cENoYW5uZWwtPlNldFJlZmVycmVyKGFSZWZlcnJlclVS
SSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVy
UHJpbmNpcGFsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFPd25lcikpOwotICAgIG5zQ29udGVudFV0aWxz
OjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSk7
CisgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbDsKKworICAgIC8vIElm
IHRoZSBjb250ZW50IGJlaW5nIGxvYWRlZCBzaG91bGQgYmUgc2FuZGJveGVkIHdpdGggcmVzcGVj
dCB0byBvcmlnaW4KKyAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBudWxsIHByaW5jaXBh
bCBoZXJlLCBhbmQgdGhlbiB0ZWxsCisgICAgLy8gbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5l
bE93bmVyIHRvIGZvcmNlIGl0IHRvIGJlIHNldCBhcyB0aGUKKyAgICAvLyBjaGFubmVsIG93bmVy
LgorICAgIGlmIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikgeworICAgICAgICBv
d25lclByaW5jaXBhbCA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnVsbHByaW5j
aXBhbDsxIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHNhbmRib3hlZCAtIHdlIGFs
bG93IHRoZSBjb250ZW50IHRvIGFzc3VtZSBpdHMgbmF0dXJhbCBvd25lci4KKyAgICAgICAgb3du
ZXJQcmluY2lwYWwgPSBkb19RdWVyeUludGVyZmFjZShhT3duZXIpOworICAgIH0KKworICAgIG5z
Q29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwg
YVVSSSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TYW5k
Ym94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSk7CiAKICAgICBuc0NPTVB0cjxuc0lTY3JpcHRD
aGFubmVsPiBzY3JpcHRDaGFubmVsID0gZG9fUXVlcnlJbnRlcmZhY2UoY2hhbm5lbCk7CiAgICAg
aWYgKHNjcmlwdENoYW5uZWwpIHsKICAgICAgICAgLy8gQWxsb3cgZXhlY3V0aW9uIGFnYWluc3Qg
b3VyIGNvbnRleHQgaWYgdGhlIHByaW5jaXBhbHMgbWF0Y2gKICAgICAgICAgc2NyaXB0Q2hhbm5l
bC0+CiAgICAgICAgICAgICBTZXRFeGVjdXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhF
Q1VURV9OT1JNQUwpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1No
ZWxsLmggYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAotLS0gYS9kb2NzaGVsbC9iYXNlL25z
RG9jU2hlbGwuaAorKysgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaApAQCAtNzg0LDE2ICs3
ODQsMTggQEAgcHJvdGVjdGVkOgogICAgIC8vIENyZWF0ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUg
aXMgbm90IGV4cGVjdGVkIHRvIGNoYW5nZS4KICAgICBQUkludDMyICAgICAgICAgICAgICAgICAg
ICBtSXRlbVR5cGU7CiAKICAgICAvLyBJbmRleCBpbnRvIHRoZSBTSFRyYW5zYWN0aW9uIGxpc3Qs
IGluZGljYXRpbmcgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50CiAgICAgLy8gdHJhbnNhY3Rpb24g
YXQgdGhlIHRpbWUgdGhhdCB0aGlzIERvY1NoZWxsIGJlZ2lucyB0byBsb2FkCiAgICAgUFJJbnQz
MiAgICAgICAgICAgICAgICAgICAgbVByZXZpb3VzVHJhbnNJbmRleDsKICAgICBQUkludDMyICAg
ICAgICAgICAgICAgICAgICBtTG9hZGVkVHJhbnNJbmRleDsKIAorICAgIFBSVWludDMyICAgICAg
ICAgICAgICAgICAgIG1TYW5kYm94RmxhZ3M7CisKICAgICBib29sICAgICAgICAgICAgICAgICAg
ICAgICBtQ3JlYXRlZDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJm
cmFtZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wg
ICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAg
ICAgICAgICAgICAgICAgICAgbUFsbG93SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAg
ICAgICAgIG1BbGxvd0ROU1ByZWZldGNoOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAg
IG1BbGxvd1dpbmRvd0NvbnRyb2w7CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zSURvY1No
ZWxsLmlkbCBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCi0tLSBhL2RvY3NoZWxsL2Jh
c2UvbnNJRG9jU2hlbGwuaWRsCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCkBA
IC02OCwxNyArNjgsMTcgQEAgaW50ZXJmYWNlIG5zSVNIRW50cnk7CiBpbnRlcmZhY2UgbnNJTGF5
b3V0SGlzdG9yeVN0YXRlOwogaW50ZXJmYWNlIG5zSVNlY3VyZUJyb3dzZXJVSTsKIGludGVyZmFj
ZSBuc0lET01TdG9yYWdlOwogaW50ZXJmYWNlIG5zSVByaW5jaXBhbDsKIGludGVyZmFjZSBuc0lX
ZWJCcm93c2VyUHJpbnQ7CiBpbnRlcmZhY2UgbnNJVmFyaWFudDsKIGludGVyZmFjZSBuc0lQcml2
YWN5VHJhbnNpdGlvbk9ic2VydmVyOwogCi1bc2NyaXB0YWJsZSwgdXVpZCg2ZjYwYWM5Ni1mYTJj
LTQxYTUtOTJiNC0yOWFhYWRiZDdhN2IpXQorW3NjcmlwdGFibGUsIHV1aWQoOWIyODMzMzctMDk3
ZC00ZmE4LWEyZGEtOTE2MzE4ZWFmODI4KV0KIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1
cHBvcnRzCiB7CiAgIC8qKgogICAgKiBMb2FkcyBhIGdpdmVuIFVSSS4gIFRoaXMgd2lsbCBnaXZl
IHByaW9yaXR5IHRvIGxvYWRpbmcgdGhlIHJlcXVlc3RlZCBVUkkKICAgICogaW4gdGhlIG9iamVj
dCBpbXBsZW1lbnRpbmcJdGhpcyBpbnRlcmZhY2UuICBJZiBpdCBjYW4ndCBiZSBsb2FkZWQgaGVy
ZQogICAgKiBob3dldmVyLCB0aGUgVVJMIGRpc3BhdGNoZXIgd2lsbCBnbyB0aHJvdWdoIGl0cyBu
b3JtYWwgcHJvY2VzcyBvZiBjb250ZW50CiAgICAqIGxvYWRpbmcuCiAgICAqCkBAIC02MjIsOSAr
NjIyLDIzIEBAIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiAgICAqLwogICBh
dHRyaWJ1dGUgYm9vbCBpc0Jyb3dzZXJGcmFtZTsKIAogICAvKgogICAgKiBJcyB0aGlzIGRvY3No
ZWxsIGNvbnRhaW5lZCBpbiBhbiA8aWZyYW1lIG1vemJyb3dzZXI+LCBlaXRoZXIgZGlyZWN0bHkg
b3IKICAgICogaW5kaXJlY3RseT8KICAgICovCiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sIGNv
bnRhaW5lZEluQnJvd3NlckZyYW1lOworCisgIC8qKgorICAgKiBUaGUgc2FuZGJveCBmbGFncyBv
biB0aGUgZG9jc2hlbGwuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94Cisg
ICAqIGF0dHJpYnV0ZSBvZiB0aGUgYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxl
IGNvbnRlbnQsIGlmCisgICAqIGV4aXN0ZW50LiBTZWUgdGhlIEhUTUw1IHNwZWMgZm9yIG1vcmUg
ZGV0YWlscy4KKyAgICogVGhlc2UgZmxhZ3Mgb24gdGhlIGRvY3NoZWxsIHJlZmxlY3QgdGhlIGN1
cnJlbnQgc3RhdGUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlLCB3aGljaCBpcyBtb2Rp
ZmlhYmxlLiBUaGV5IGFyZSBvbmx5IHVzZWQgd2hlbiBsb2FkaW5nIG5ldworICAgKiBjb250ZW50
LCBzYW5kYm94IGZsYWdzIGFyZSBhbHNvIGltbXV0YWJseSBzZXQgb24gdGhlIGRvY3VtZW50IHdo
ZW4gaXQgaXMKKyAgICogbG9hZGVkLgorICAgKiBUaGUgc2FuZGJveCBmbGFncyBvZiBhIGRvY3Vt
ZW50IGRlcGVuZCBvbiB0aGUgc2FuZGJveCBmbGFncyBvbiBpdHMKKyAgICogZG9jc2hlbGwgYW5k
IG9mIGl0cyBwYXJlbnQgZG9jdW1lbnQsIGlmIGFueS4KKyAgICogU2VlIG5zU2FuZGJveEZsYWdz
LmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgICovCisgIGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIHNhbmRib3hGbGFnczsKIH07CmRpZmYgLS1naXQgYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRv
dy5jcHAgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKLS0tIGEvZG9tL2Jhc2UvbnNHbG9i
YWxXaW5kb3cuY3BwCisrKyBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcApAQCAtMjU2LDE2
ICsyNTYsMTcgQEAKICNpbmNsdWRlICJuc1JlZnJlc2hEcml2ZXIuaCIKICNpbmNsdWRlICJtb3pB
dXRvRG9jVXBkYXRlLmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL1RlbGVtZXRyeS5oIgogI2luY2x1
ZGUgIm5zTG9jYXRpb24uaCIKICNpbmNsdWRlICJuc1dyYXBwZXJDYWNoZUlubGluZXMuaCIKICNp
bmNsdWRlICJuc0RPTUV2ZW50VGFyZ2V0SGVscGVyLmgiCiAjaW5jbHVkZSAibnNJQXBwc1NlcnZp
Y2UuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZkZWYgQU5EUk9JRAogI2lu
Y2x1ZGUgPGFuZHJvaWQvbG9nLmg+CiAjZW5kaWYKIAogI2lmZGVmIFBSX0xPR0dJTkcKIHN0YXRp
YyBQUkxvZ01vZHVsZUluZm8qIGdET01MZWFrUFJMb2c7CiAjZW5kaWYKQEAgLTgwMTIsMTYgKzgw
MTMsMjIgQEAgbnNHbG9iYWxXaW5kb3c6OkdldFNlc3Npb25TdG9yYWdlKG5zSURPTQogICBpZiAo
IW1TZXNzaW9uU3RvcmFnZSkgewogICAgICphU2Vzc2lvblN0b3JhZ2UgPSBuc251bGw7CiAKICAg
ICBuc1N0cmluZyBkb2N1bWVudFVSSTsKICAgICBpZiAobURvY3VtZW50KSB7CiAgICAgICBtRG9j
dW1lbnQtPkdldERvY3VtZW50VVJJKGRvY3VtZW50VVJJKTsKICAgICB9CiAKKyAgICAvLyBJZiB0
aGUgZG9jdW1lbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgLy8gZG9u
J3QgYWxsb3cgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAgICBpZiAobURvYyAmJiAobURvYy0+
U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfT1JJR0lOKSkgeworICAgICAgcmV0dXJuIE5TX0VS
Uk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVs
bC0+R2V0U2Vzc2lvblN0b3JhZ2VGb3JQcmluY2lwYWwocHJpbmNpcGFsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50VVJJ
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobVNlc3Npb25TdG9yYWdlKSk7CiAgICAgTlNfRU5T
VVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogI2lmZGVmIFBSX0xPR0dJTkcKICAgICBpZiAoUFJfTE9H
X1RFU1QoZ0RPTUxlYWtQUkxvZywgUFJfTE9HX0RFQlVHKSkgewpAQCAtODA3MywxNiArODA4MCwy
MiBAQCBuc0dsb2JhbFdpbmRvdzo6R2V0TG9jYWxTdG9yYWdlKG5zSURPTVN0CiAgICAgICBkb19H
ZXRTZXJ2aWNlKCJAbW96aWxsYS5vcmcvZG9tL3N0b3JhZ2VtYW5hZ2VyOzEiLCAmcnYpOwogICAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgICBuc1N0cmluZyBkb2N1bWVudFVSSTsK
ICAgICBpZiAobURvY3VtZW50KSB7CiAgICAgICBtRG9jdW1lbnQtPkdldERvY3VtZW50VVJJKGRv
Y3VtZW50VVJJKTsKICAgICB9CiAKKyAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaGFzIHRoZSBzYW5k
Ym94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgLy8gZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIGxvY2Fs
U3RvcmFnZS4KKyAgICBpZiAobURvYyAmJiAobURvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9Y
RURfT1JJR0lOKSkgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7Cisg
ICAgfQorCiAgICAgcnYgPSBzdG9yYWdlTWFuYWdlci0+R2V0TG9jYWxTdG9yYWdlRm9yUHJpbmNp
cGFsKHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAg
ICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICB9CiAKICAgTlNfQUREUkVGKCphTG9jYWxT
dG9yYWdlID0gbUxvY2FsU3RvcmFnZSk7CiAgIHJldHVybiBOU19PSzsKZGlmZiAtLWdpdCBhL2Rv
bS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVy
ZmFjZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFj
ZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMv
aHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwKQEAgLTQ1LDMyICs0NSwzMiBAQAogICoK
ICAqIFRoaXMgaW50ZXJmYWNlIGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhU
TUwgc3BlY2lmaWNhdGlvbjoKICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhU
TUwvCiAgKgogICogd2l0aCBjaGFuZ2VzIGZyb20gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgV0hBVFdH
IEhUTUwgc3BlY2lmaWNhdGlvbjoKICAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWIt
YXBwcy9jdXJyZW50LXdvcmsvCiAgKi8KIAotW3NjcmlwdGFibGUsIHV1aWQoOTdFNEYwRTEtQkQy
Ny00MEVDLTkyODctNTYzNERBRjE1QjczKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDUyZjYyNDRiLWIx
ZjUtNGY0Yy04ZmYzLTdlMTQ2MzE2ZjQxMSldCiBpbnRlcmZhY2UgbnNJRE9NSFRNTElGcmFtZUVs
ZW1lbnQgOiBuc0lET01IVE1MRWxlbWVudAogewogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3Ry
aW5nICAgICAgICBhbGlnbjsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAg
ZnJhbWVCb3JkZXI7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGhlaWdo
dDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbG9uZ0Rlc2M7CiAgICAg
ICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbkhlaWdodDsKICAgICAgICAg
ICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luV2lkdGg7CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG5hbWU7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgICAgICAgIHNjcm9sbGluZzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAg
ICAgICAgc3JjOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB3aWR0aDsK
ICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5z
SURPTURvY3VtZW50ICAgY29udGVudERvY3VtZW50OwogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJ
RE9NV2luZG93ICAgICBjb250ZW50V2luZG93OwogCi0KKyAgICAgICAgICAgYXR0cmlidXRlIERP
TVN0cmluZyAgICAgICAgc2FuZGJveDsKICAgLy8gTW96aWxsYSBleHRlbnNpb25zCiAgIC8vIGlm
cmFtZSBlbGVtZW50cyByZXF1aXJlIHRoZSBtb3pBbGxvd0Z1bGxTY3JlZW4gYXR0cmlidXRlIHRv
IGJlIHByZXNlbnQKICAgLy8gaWYgdGhleSdyZSB0byBhbGxvdyBjb250ZW50IGluIHRoZSBzdWIg
ZG9jdW1lbnQgdG8gZ28gaW50byBET00gZnVsbC1zY3JlZW4KICAgLy8gbW9kZS4gU2VlIGh0dHBz
Oi8vd2lraS5tb3ppbGxhLm9yZy9pbmRleC5waHA/dGl0bGU9R2Vja286RnVsbFNjcmVlbkFQSQog
ICAgICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiAgICAgICAgICBtb3pBbGxvd0Z1bGxTY3JlZW47
CiB9OwpkaWZmIC0tZ2l0IGEvZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbiBiL2RvbS9zcmMvanN1
cmwvTWFrZWZpbGUuaW4KLS0tIGEvZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbgorKysgYi9kb20v
c3JjL2pzdXJsL01ha2VmaWxlLmluCkBAIC01NywxNiArNTcsMTcgQEAgWFBJRExTUkNTCT0gXAog
Q1BQU1JDUwkJPSBuc0pTUHJvdG9jb2xIYW5kbGVyLmNwcAogCiBFWFBPUlRTCQk9ICQoc3JjZGly
KS9uc0pTUHJvdG9jb2xIYW5kbGVyLmgKIAogTE9DQUxfSU5DTFVERVMgKz0gXAogCQktSSQoc3Jj
ZGlyKSBcCiAJCS1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKIAkJLUkkKHRvcHNyY2RpcikvbmV0
d2Vyay9iYXNlL3NyYyBcCisJCS1JJCh0b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9zcmMgXAogCiBp
ZmRlZiBCVUlMRF9ERUJVR19HQwogREVGSU5FUwkJKz0gLURERUJVR19HQwogZW5kaWYKIAogRElS
UyAgICAgICAgICAgID0gJChOVUxMKQogVEVTVF9ESVJTICs9IHRlc3QKIApkaWZmIC0tZ2l0IGEv
ZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcCBiL2RvbS9zcmMvanN1cmwvbnNK
U1Byb3RvY29sSGFuZGxlci5jcHAKLS0tIGEvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5k
bGVyLmNwcAorKysgYi9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwCkBAIC03
NCwxNiArNzQsMTcgQEAKICNpbmNsdWRlICJuc1RocmVhZFV0aWxzLmgiCiAjaW5jbHVkZSAibnNJ
SlNDb250ZXh0U3RhY2suaCIKICNpbmNsdWRlICJuc0lTY3JpcHRDaGFubmVsLmgiCiAjaW5jbHVk
ZSAibnNJRG9jdW1lbnQuaCIKICNpbmNsdWRlICJuc0lPYmplY3RJbnB1dFN0cmVhbS5oIgogI2lu
Y2x1ZGUgIm5zSU9iamVjdE91dHB1dFN0cmVhbS5oIgogI2luY2x1ZGUgIm5zSVdyaXRhYmxlUHJv
cGVydHlCYWcyLmgiCiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCisjaW5j
bHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogc3RhdGljIE5TX0RFRklORV9DSUQoa0pTVVJJQ0lE
LCBOU19KU1VSSV9DSUQpOwogCiBjbGFzcyBuc0pTVGh1bmsgOiBwdWJsaWMgbnNJSW5wdXRTdHJl
YW0KIHsKIHB1YmxpYzoKICAgICBuc0pTVGh1bmsoKTsKIApAQCAtMjIwLDE2ICsyMjEsMjggQEAg
bnNyZXN1bHQgbnNKU1RodW5rOjpFdmFsdWF0ZVNjcmlwdChuc0lDaAogICAgIC8vIEdldCB0aGUg
Z2xvYmFsIG9iamVjdCB3ZSBzaG91bGQgYmUgcnVubmluZyBvbi4KICAgICBuc0lTY3JpcHRHbG9i
YWxPYmplY3QqIGdsb2JhbCA9IEdldEdsb2JhbE9iamVjdChhQ2hhbm5lbCk7CiAgICAgaWYgKCFn
bG9iYWwpIHsKICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAgICAgfQogCiAgICAg
bnNDT01QdHI8bnNQSURPTVdpbmRvdz4gd2luKGRvX1F1ZXJ5SW50ZXJmYWNlKGdsb2JhbCkpOwog
CisgICAgLy8gU2FuZGJveGVkIGRvY3VtZW50IGNoZWNrOiBqYXZhc2NyaXB0OiBVUkkncyBhcmUg
ZGlzYWJsZWQKKyAgICAvLyBpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB1bmxlc3MgJ2FsbG93LXNj
cmlwdHMnIHdhcyBzcGVjaWZpZWQKKworICAgIC8vIFJFVklFVyAtIGl0IHNlZW1zIGxpa2UgdGhl
IG9yaWdpbmFsIGlubmVyIHdpbmRvdyB3b3VsZCBiZSB0aGUgb25lCisgICAgLy8gdGhhdCB3aWxs
IGV4ZWN1dGUgdGhlIGphdmFzY3JpcHQgd2l0aCBpdHMgcHJpbmNpcGFsIC0gaXMgdGhpcworICAg
IC8vIGFzc3VtcHRpb24gY29ycmVjdCA/PyAoYW5kIGlzIEdldEV4dGFudERvY3VtZW50KCkgdGhl
IHJpZ2h0IHdheQorICAgIC8vIHRvIGdldCB0aGUgcmlnaHQgZG9jdW1lbnQgPz8KKyAgICBuc0NP
TVB0cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoYU9yaWdpbmFsSW5uZXJX
aW5kb3ctPkdldEV4dGFudERvY3VtZW50KCkpOworICAgIGlmIChkb2MgJiYgKGRvYy0+U2FuZGJv
eEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9E
T01fUkVUVkFMX1VOREVGSU5FRDsKKyAgICB9CisKICAgICAvLyBQdXNoIG91ciBwb3B1cCBjb250
cm9sIHN0YXRlCiAgICAgbnNBdXRvUG9wdXBTdGF0ZVB1c2hlciBwb3B1cFN0YXRlUHVzaGVyKHdp
biwgYVBvcHVwU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgdGhlIHNh
bWUgaW5uZXIgd2luZG93IGFzIHdlIHVzZWQgdG8uCiAgICAgbnNQSURPTVdpbmRvdyAqaW5uZXJX
aW4gPSB3aW4tPkdldEN1cnJlbnRJbm5lcldpbmRvdygpOwogCiAgICAgaWYgKGlubmVyV2luICE9
IGFPcmlnaW5hbElubmVyV2luZG93KSB7CiAgICAgICAgIHJldHVybiBOU19FUlJPUl9VTkVYUEVD
VEVEOwpkaWZmIC0tZ2l0IGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMv
TWFrZWZpbGUuaW4gYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtl
ZmlsZS5pbgotLS0gYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtl
ZmlsZS5pbgorKysgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtl
ZmlsZS5pbgpAQCAtNTYsMTEgKzU2LDEyIEBAIENQUFNSQ1MJCSs9IG5zRGlhbG9nUGFyYW1CbG9j
ay5jcHAgXAogCQkgICAkKE5VTEwpCiBlbmRpZgogCiAjIHdlIGRvbid0IHdhbnQgdGhlIHNoYXJl
ZCBsaWIsIGJ1dCB3ZSB3YW50IHRvIGZvcmNlIHRoZSBjcmVhdGlvbiBvZiBhCiAjIHN0YXRpYyBs
aWIuCiBGT1JDRV9TVEFUSUNfTElCID0gMQogCiAjIEZvciBuc0pTVXRpbHMKLUxPQ0FMX0lOQ0xV
REVTICs9IC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlCitMT0NBTF9JTkNMVURFUyArPSAtSSQodG9w
c3JjZGlyKS9kb20vYmFzZSBcCisJCSAgLUkkKHRvcHNyY2RpcikvY29udGVudC9iYXNlL3NyYyBc
CiAKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawpkaWZmIC0tZ2l0IGEvZW1i
ZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcCBi
L2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5j
cHAKLS0tIGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dX
YXRjaGVyLmNwcAorKysgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9u
c1dpbmRvd1dhdGNoZXIuY3BwCkBAIC04NiwxNiArODYsMTcgQEAKICNpbmNsdWRlICJuc1BJRE9N
U3RvcmFnZS5oIgogI2luY2x1ZGUgIm5zSVdpZGdldC5oIgogI2luY2x1ZGUgIm5zRm9jdXNNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAibnNJUHJlc1NoZWxsLmgiCiAjaW5jbHVkZSAibnNQcmVzQ29udGV4
dC5oIgogI2luY2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCiAjaW5jbHVkZSAibnNJUHJlZkJyYW5j
aC5oIgogI2luY2x1ZGUgIm5zSVByZWZTZXJ2aWNlLmgiCisjaW5jbHVkZSAibnNTYW5kYm94Rmxh
Z3MuaCIKIAogI2lmZGVmIFVTRVdFQUtSRUZTCiAjaW5jbHVkZSAibnNJV2Vha1JlZmVyZW5jZS5o
IgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogCiBzdGF0aWMgY29uc3QgY2hh
ciAqc0pTU3RhY2tDb250cmFjdElEPSJAbW96aWxsYS5vcmcvanMveHBjL0NvbnRleHRTdGFjazsx
IjsKQEAgLTYwMywxNiArNjA0LDMzIEBAIG5zV2luZG93V2F0Y2hlcjo6T3BlbldpbmRvd0pTSW50
ZXJuYWwobnMKICAgfQogCiAgIGlmICghbmV3RG9jU2hlbGxJdGVtKSB7CiAgICAgLy8gV2UncmUg
Z29pbmcgdG8gZWl0aGVyIG9wZW4gdXAgYSBuZXcgd2luZG93IG91cnNlbHZlcyBvciBhc2sgYQog
ICAgIC8vIG5zSVdpbmRvd1Byb3ZpZGVyIGZvciBvbmUuICBJbiBlaXRoZXIgY2FzZSwgd2UnbGwg
d2FudCB0byBzZXQgdGhlIHJpZ2h0CiAgICAgLy8gbmFtZSBvbiBpdC4KICAgICB3aW5kb3dOZWVk
c05hbWUgPSB0cnVlOwogCisgICAgLy8gSWYgdGhlIHBhcmVudCB0cnlpbmcgdG8gb3BlbiBhIG5l
dyB3aW5kb3cgaXMgc2FuZGJveGVkLAorICAgIC8vIHRoaXMgaXMgbm90IGFsbG93ZWQgYW5kIHdl
IGZhaWwgaGVyZS4KKyAgICBpZiAoYVBhcmVudCkgeworICAgICAgbnNDT01QdHI8bnNJRE9NRG9j
dW1lbnQ+IGRvbWRvYzsKKyAgICAgIGFQYXJlbnQtPkdldERvY3VtZW50KGdldHRlcl9BZGRSZWZz
KGRvbWRvYykpOworICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50
ZXJmYWNlKGRvbWRvYyk7CisKKyAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgUFJVaW50MzIgc2Fu
ZGJveEZsYWdzID0gMDsKKyAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3Mo
KTsKKworICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX05BVklHQVRJT04pIHsK
KyAgICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0KKwogICAgIC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93
IHByb3ZpZGVyIGZvciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3Bl
bmluZyBhIGRpYWxvZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAg
IC8vIGlmIHdlJ3JlIG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9y
IGNocm9tZSBmbGFncyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJv
bWVXaW4gPSBkb19RdWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYg
IWNocm9tZVdpbiAmJgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJv
bWU6OkNIUk9NRV9NT0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lX
ZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>
<flag name="review"
          id="518750"
          type_id="937"
          status="-"
          setter="smaug"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>630331</attachid>
            <date>2012-06-05 14:38:29 -0700</date>
            <delta_ts>2012-06-15 13:10:12 -0700</delta_ts>
            <desc>iframe sandbox tests - navigation v6</desc>
            <filename>iframe_sandbox_tests_navigation</filename>
            <type>text/plain</type>
            <size>30905</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYmViNTJmMGY5Njg3YWM0NTAzNzQxOGQ3NGQ5
ODU4YTIyMmRkN2IzNwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBuYXZpZ2F0aW9uCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFr
ZWZpbGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yNTksMTYgKzI1OSw0
MSBAQCBfVEVTVF9GSUxFUyA9IFwKIAkJdGVzdF9saV9hdHRyaWJ1dGVzX3JlZmxlY3Rpb24uaHRt
bCBcCiAJCXRlc3Rfb2xfYXR0cmlidXRlc19yZWZsZWN0aW9uLmh0bWwgXAogCQl0ZXN0X2J1ZzY1
MTk1Ni5odG1sIFwKIAkJdGVzdF9idWc2OTQ1MDMuaHRtbCBcCiAJCXRlc3Rfb2JqZWN0X3BsdWdp
bl9uYXYuaHRtbCBcCiAJCXRlc3RfYnVnNzQyMDMwLmh0bWwgXAogCQl0ZXN0X2J1Zzc0MjU0OS5o
dG1sIFwKIAkJdGVzdF9idWc3NDU2ODUuaHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRib3hfbmF2
aWdhdGlvbi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sIFwKKwkJZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
My5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmNS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNi5odG1s
IFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmOC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOS5odG1sIFwKKwkJ
ZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTAuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hf
ZF9pZjExLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMi5odG1sIFwKKwkJZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmMTMuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfbmF2
aWdhdGlvbl9zdGFydC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bh
c3MuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwgXAor
CQlmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYxLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94
X2VfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwgXAorCQlmaWxl
X2lmcmFtZV9zYW5kYm94X2VfaWY0Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY1
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY2Lmh0bWwgXAorCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X3RvcF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfdG9wX25hdmlnYXRpb25fZmFpbC5odG1sIFwKIAkJJChOVUxMKQogCiBfQlJPV1NFUl9URVNU
X0ZJTEVTID0gXAogCQlicm93c2VyX2J1ZzY0OTc3OC5qcyBcCiAJCWZpbGVfYnVnNjQ5Nzc4Lmh0
bWwgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sXmhlYWRlcnNeIFwKIAkJJChOVUxMKQogCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9p
ZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9k
X2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxLmh0bWwKQEAgLTAs
MCArMSwxOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRl
c3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rl
c3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0
IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBz
ZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOworfQorPC9zY3JpcHQ+Cis8
Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2Ny
aXB0cycKKworICA8YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5o
dG1sP2lmXzEiIHRhcmdldD0iX3NlbGYiIGlkPSdhbmNob3InPgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2RfaWYxMC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMC5odG1s
CkBAIC0wLDAgKzEsMTcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+
CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9T
aW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgp
IHsKKyAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7dGVzdDonaWZfMTAnfSwgIioiKTsKK30K
Kzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSdkb1Rlc3QoKSc+CisgIEkgYW0gc2FuZGJveGVkIHdp
dGggJ2FsbG93LXNjcmlwdHMnCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjExLmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjExLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjExLmh0bWwKQEAgLTAsMCArMSwyNiBAQAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3Mi
Lz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRl
c3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxp
Y2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgeworICAvLyB0aGlzIHNob3Vs
ZCBmYWlsIHRoZSBmaXJzdCB0aW1lLCBidXQgd29yayB0aGUgc2Vjb25kCisgIHRyeSB7CisgICAg
d2luZG93LnBhcmVudC5va193cmFwcGVyKHRydWUsICJhIGRvY3VtZW50IHRoYXQgd2FzIGxvYWRl
ZCwgbmF2aWdhdGVkIHRvIGFub3RoZXIgZG9jdW1lbnQsIGhhZCAnYWxsb3ctc2FtZS1vcmlnaW4n
IGFkZGVkIGFuZCB0aGVuIHdhcyIgKworICAgICAgIiBuYXZpZ2F0ZWQgYmFjayBzaG91bGQgYmUg
c2FtZS1vcmlnaW4gd2l0aCBpdHMgcGFyZW50Iik7CisgIH0gCisgIGNhdGNoIChlKSB7CisgICAg
c2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsKKyAgfQorfQorCis8L3Nj
cmlwdD4KKzxib2R5IG9ubG9hZD0nZG9UZXN0KCknPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdh
bGxvdy1zY3JpcHRzJworICA8YSBocmVmPSdmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMi5odG1s
JyBpZD0nYW5jaG9yJz5DTElDSyBNRTwvYT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTIuaHRt
bCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTIu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTIuaHRtbApAQCAtMCwwICsx
LDE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90
ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0
Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7dGVz
dDonaWZfMTEnfSwgIioiKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSdkb1Rlc3QoKSc+
CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZF9pZjEzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjEzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEzLmh0
bWwKQEAgLTAsMCArMSwzNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRs
ZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3Rz
L1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgord2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOworCitmdW5jdGlvbiBy
ZWNlaXZlTWVzc2FnZShldmVudCkgeworICAvLyB0aGlzIG1lc3NhZ2UgaXMgcGFydCBvZiBpZl8x
MSdzIHRlc3QKKyAgaWYgKGV2ZW50LmRhdGEudGVzdCA9PSAnaWZfMTEnKSB7CisgICAgZG9JZjEx
VGVzdFBhcnQyKCk7CisgICAgcmV0dXJuOworICB9Cit9CisKK2Z1bmN0aW9uIG9rX3dyYXBwZXIo
cmVzdWx0LCBtc2cpIHsKKyAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZSh7b2s6IHJlc3VsdCwg
ZGVzYzogbXNnfSwgIioiKTsKKyAgd2luZG93LmNsb3NlKCk7Cit9CisKK2Z1bmN0aW9uIGRvSWYx
MVRlc3RQYXJ0MigpIHsKKyAgdmFyIGlmXzExID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lm
XzExJyk7CisgIGlmXzExLnNhbmRib3ggPSAnYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdp
bic7CisgIGlmXzExLmNvbnRlbnRXaW5kb3cuaGlzdG9yeS5iYWNrKCk7Cit9IAorPC9zY3JpcHQ+
Cis8Ym9keT4KKyAgPGlmcmFtZSBzYW5kYm94PSdhbGxvdy1zY3JpcHRzJyBpZD0iaWZfMTEiIHNy
Yz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEw
Ij48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfZF9pZjIuaHRtbApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxl
PlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5
cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0
aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2
YXNjcmlwdCI+CisvLyBuZWVkZWQgdG8gZm9yd2FyZCB0aGUgbWVzc2FnZSB0byB0aGUgbWFpbiB0
ZXN0IHBhZ2UKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1lc3Nh
Z2UsIGZhbHNlKTsKKworZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpIHsgCisgIHdpbmRv
dy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiBldmVudC5kYXRhLm9rLCBkZXNjOiBldmVudC5kYXRh
LmRlc2N9LCAiKiIpOworfQorCitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIHNlbmRNb3VzZUV2ZW50
KHt0eXBlOidjbGljayd9LCAnYW5jaG9yJyk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0i
ZG9UZXN0KCkiPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworCisgIDxp
ZnJhbWUgbmFtZT0iZm9vIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFy
dC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorCisgIDxhIGhyZWY9ImZp
bGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9wYXNzLmh0bWw/aWYyIiB0YXJnZXQ9J2Zvbycg
aWQ9J2FuY2hvcic+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjMuaHRtbCBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2RfaWYzLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0
eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVh
ZD4KKzxib2R5PgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworCisgIDxp
ZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzQiIHNyYz0iZmlsZV9pZnJhbWVf
c2FuZGJveF9kX2lmNC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2RfaWY0Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfZF9pZjQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9kX2lmNC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhy
ZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0
aW9uIGRvVGVzdCgpIHsKKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3In
KTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJv
eGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCisKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJv
eF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCIgdGFyZ2V0PSdfcGFyZW50JyBpZD0nYW5jaG9yJz4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZF9pZjUuaHRtbApAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAz
NDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CitmdW5j
dGlvbiBkb1Rlc3QoKSB7CisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYW5jaG9y
Jyk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPgorICBJIGFtIHNhbmRi
b3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luJworCisgIDxhIGhyZWY9
ImZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwiIHRhcmdldD0nc2libGlu
ZycgaWQ9J2FuY2hvcic+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjYuaHRtbCBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNi5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0
aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZl
bnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9u
L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBzZW5kTW91c2VFdmVudCh7dHlw
ZTonY2xpY2snfSwgJ2FuY2hvcicpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVz
dCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycKKworICA8YSBocmVm
PSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwiIHRhcmdldD0nX3NlbGYnIGlkPSdhbmNo
b3InPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmNy5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzwhRE9DVFlQRSBIVE1MPgor
PGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBm
b3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4
dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8c2Ny
aXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgewor
ICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIoZmFsc2UsICJhIHNhbmRib3hlZCBkb2N1bWVudCB3
aGVuIG5hdmlnYXRlZCBzaG91bGQgc3RpbGwgTk9UIGJlIHNhbWUtb3JpZ2luIHdpdGggaXRzIHBh
cmVudCIpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKyAgSSBhbSBz
YW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5o
dG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY4
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjguaHRtbApAQCAtMCwwICsx
LDE3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90
ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0
Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKwl3aW5kb3cucGFyZW50Lm1vZGlmeV9pZl84KCk7Cit9
Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPgorICBJIGFtIHNhbmRib3hlZCB3
aXRoICdhbGxvdy1zY3JpcHRzJyBhbmQgJ2FsbG93LXNhbWUtb3JpZ2luJyB0aGUgZmlyc3QgdGlt
ZSBJIGFtIGxvYWRlZCwgYW5kCisJd2l0aCAnYWxsb3ctc2NyaXB0cycgdGhlIHNlY29uZCB0aW1l
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjkuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0t
LSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2RfaWY5Lmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBC
dWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2Nz
cyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQg
dHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1Rlc3QoKSB7CisJd2lu
ZG93LnBhcmVudC5tb2RpZnlfaWZfOSgpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRv
VGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycgYW5kICdhbGxv
dy1zYW1lLW9yaWdpbicgdGhlIGZpcnN0IHRpbWUgSSBhbSBsb2FkZWQsIGFuZAorCXdpdGggJ2Fs
bG93LXNhbWUtb3JpZ2luJyB0aGUgc2Vjb25kIHRpbWUKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lm
MS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Vf
aWYxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjEuaHRtbApAQCAtMCww
ICsxLDI0IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisg
IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1w
bGVUZXN0L3Rlc3QuY3NzIi8+DQorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3Jp
cHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+DQorPC9o
ZWFkPg0KKzxib2R5Pg0KKyAgPHNjcmlwdD4NCisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
Im1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOw0KKw0KKyAgICBmdW5jdGlvbiByZWNl
aXZlTWVzc2FnZShldmVudCkNCisgICAgew0KKyAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3Nh
Z2UoImNsb3NlIiwgIioiKTsNCisNCisgICAgICBTaW1wbGVUZXN0LmV4ZWN1dGVTb29uKGZ1bmN0
aW9uKCkgew0KKyAgICAgICAgd2luZG93LmNsb3NlKCk7DQorICAgICAgfSk7IA0KKyAgICB9DQor
ICA8L3NjcmlwdD4NCisgIDxpZnJhbWUgc2FuZGJveD0nYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1l
LW9yaWdpbicgaWQ9J2lmXzYnIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNi5odG1sIiBo
ZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZm
IC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Vf
aWYyLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
ZV9pZjIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMi5odG1sCkBAIC0w
LDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEg
Y2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0K
KyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1Np
bXBsZVRlc3QvdGVzdC5jc3MiLz4NCisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNj
cmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4NCis8
L2hlYWQ+DQorPGJvZHk+DQorICA8c2NyaXB0Pg0KKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cigibWVzc2FnZSIsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7DQorDQorICAgIGZ1bmN0aW9uIHJl
Y2VpdmVNZXNzYWdlKGV2ZW50KQ0KKyAgICB7DQorICAgICAgU2ltcGxlVGVzdC5leGVjdXRlU29v
bihmdW5jdGlvbigpIHsNCisgICAgICAgIHdpbmRvdy5jbG9zZSgpOw0KKyAgICAgIH0pOw0KKyAg
ICB9DQorICA8L3NjcmlwdD4NCisgIDxpZnJhbWUgc2FuZGJveD0nYWxsb3ctc2NyaXB0cyBhbGxv
dy10b3AtbmF2aWdhdGlvbiBhbGxvdy1zYW1lLW9yaWdpbicgaWQ9J2lmXzEnIHNyYz0iZmlsZV9p
ZnJhbWVfc2FuZGJveF9lX2lmMS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1l
Pg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9lX2lmMy5odG1sCkBAIC0wLDAgKzEsMTEgQEAKKzwhRE9DVFlQRSBIVE1MPg0K
KzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRl
c3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBl
PSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+
DQorPGJvZHk+DQorICA8aWZyYW1lIHNhbmRib3g9J2FsbG93LXNjcmlwdHMgYWxsb3ctdG9wLW5h
dmlnYXRpb24nIGlkPSdpZl81JyBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjUuaHRtbCIg
aGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9l
X2lmNC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2VfaWY0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjQuaHRtbApAQCAt
MCwwICsxLDExIEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4N
CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9T
aW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxib2R5Pg0KKyAgPGlmcmFtZSBzYW5k
Ym94PSdhbGxvdy1zY3JpcHRzIGFsbG93LXRvcC1uYXZpZ2F0aW9uJyBpZD0naWZfMycgc3JjPSJm
aWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9p
ZnJhbWU+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjUuaHRtbCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2VfaWY1Lmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIEhU
TUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0
bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQi
IHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKyAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZl
bnRVdGlscy5qcyI+PC9zY3JpcHQ+DQorPC9oZWFkPg0KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRp
b24vamF2YXNjcmlwdCI+DQorZnVuY3Rpb24gZG9UZXN0KCkgew0KKyAgc2VuZE1vdXNlRXZlbnQo
e3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsNCit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25sb2Fk
PSJkb1Rlc3QoKSI+DQorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzIGFuZCBh
bGxvdy10b3AtbmF2aWdhdGlvbicNCisNCisgIDxhIGhyZWY9ImZpbGVfaWZyYW1lX3NhbmRib3hf
dG9wX25hdmlnYXRpb25fcGFzcy5odG1sIiB0YXJnZXQ9J190b3AnIGlkPSdhbmNob3InPg0KKzwv
Ym9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2VfaWY2Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0g
L2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9lX2lmNi5odG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1s
Pg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9y
IEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0
L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCisgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMi
Pjwvc2NyaXB0Pg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9
Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8
c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KK2Z1bmN0aW9uIGRvVGVzdCgp
IHsNCisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYW5jaG9yJyk7DQorDQorICAg
U2ltcGxlVGVzdC5leGVjdXRlU29vbihmdW5jdGlvbigpIHsNCisgICAgIHdpbmRvdy5wYXJlbnQu
cG9zdE1lc3NhZ2UoImNsb3NlIiwgIioiKTsNCisgICB9KTsNCit9DQorPC9zY3JpcHQ+DQorPGJv
ZHkgb25sb2FkPSJkb1Rlc3QoKSI+DQorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3Jp
cHRzJw0KKw0KKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9m
YWlsLmh0bWwiIHRhcmdldD0nX3RvcCcgaWQ9J2FuY2hvcic+DQorPC9ib2R5Pg0KKzwvaHRtbD4N
CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
LS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0
eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVh
ZD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KK0ZBSUwKKzwvYm9keT4KKzxzY3JpcHQ+Cisg
IGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6
IGZhbHNlLCBkZXNjOiAidGhpcyBuYXZpZ2F0aW9uIHNob3VsZCBOT1QgYmUgYWxsb3dlZCBieSBh
IHNhbmRib3hlZCBkb2N1bWVudCJ9LCAiKiIpOworICB9Cis8L3NjcmlwdD4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9u
YXZpZ2F0aW9uX3Bhc3MuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0g
L2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbApAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRl
c3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9
InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgor
PHNjcmlwdD4KK2Z1bmN0aW9uIGRvU3R1ZmYoKSB7CisgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3Nh
Z2Uoe29rOiB0cnVlLCBkZXNjOiAidGhpcyBuYXZpZ2F0aW9uIHNob3VsZCBiZSBhbGxvd2VkIGJ5
IGEgc2FuZGJveGVkIGRvY3VtZW50In0sICIqIik7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9h
ZD0iZG9TdHVmZigpIj4KK1BBU1MKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0
Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2
aWdhdGlvbl9zdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRp
b25fc3RhcnQuaHRtbApAQCAtMCwwICsxLDExIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAz
NDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPGJvZHk+CitJIGFt
IGp1c3QgYSBub3JtYWwgSFRNTCBkb2N1bWVudCwgcHJvYmFibHkgY29udGFpbmVkIGluIGEgc2Fu
ZGJveGVkIGlmcmFtZQorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3RvcF9uYXZpZ2F0aW9uX2ZhaWwuaHRt
bCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2
aWdhdGlvbl9mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmln
YXRpb25fZmFpbC5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1s
Pg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9y
IEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0
L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPHNj
cmlwdD4NCitmdW5jdGlvbiBkb1N0dWZmKCkgew0KKwl3aW5kb3cub3BlbmVyLnBvc3RNZXNzYWdl
KHtvazogZmFsc2UsIGRlc2M6ICAidG9wIG5hdmlnYXRpb24gc2hvdWxkIE5PVCBiZSBhbGxvd2Vk
IGJ5IGEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgJ2FsbG93LXRvcC1uYXZpZ2F0aW9uJyJ9
LCAiKiIpOw0KKwl3aW5kb3cuY2xvc2UoKTsNCit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25Mb2Fk
PSJkb1N0dWZmKCkiPg0KK0ZBSUwNCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlv
bl9wYXNzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfdG9wX25hdmlnYXRpb25fcGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X3RvcF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbApAQCAtMCwwICsxLDE3IEBACis8IURPQ1RZUEUgSFRN
TD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
dHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9o
ZWFkPg0KKzxzY3JpcHQ+DQorZnVuY3Rpb24gZG9TdHVmZigpIHsNCisJd2luZG93Lm9wZW5lci5w
b3N0TWVzc2FnZSh7b2s6IHRydWUsIGRlc2M6ICAidG9wIG5hdmlnYXRpb24gc2hvdWxkIGJlIGFs
bG93ZWQgYnkgYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctdG9wLW5hdmlnYXRpb24n
In0sICIqIik7DQorCXdpbmRvdy5jbG9zZSgpOw0KK30NCis8L3NjcmlwdD4NCis8Ym9keSBvbkxv
YWQ9ImRvU3R1ZmYoKSI+DQorUEFTUw0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb24u
aHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9uYXZp
Z2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbi5odG1s
CkBAIC0wLDAgKzEsMjI5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPCEtLQoraHR0cHM6
Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1wbGVtZW50
IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzCistLT4KKzxoZWFkPgorICA8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0IC0gbmF2aWdh
dGlvbjwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3Jj
PSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpz
Ij48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJl
Zj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0i
YXBwbGljYXRpb24vamF2YXNjcmlwdCI+CisvKiogVGVzdCBmb3IgQnVnIDM0MTYwNCAtIEltcGxl
bWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAqKi8KKy8qKiBOYXZpZ2F0
aW9uIHRlc3RzICoqLworCitTaW1wbGVUZXN0LndhaXRGb3JFeHBsaWNpdEZpbmlzaCgpOworLy8g
YSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRoYXQgaXMgdXNlZCBieSBzYW5kYm94ZWQgaWZyYW1lcyB3
aXRob3V0CisvLyAnYWxsb3ctc2FtZS1vcmlnaW4nL290aGVyIHdpbmRvd3MgdG8gY29tbXVuaWNh
dGUgcGFzcy9mYWlsIGJhY2sgdG8gdGhpcyBtYWluIHBhZ2UuCisvLyBpdCBleHBlY3RzIHRvIGJl
IGNhbGxlZCB3aXRoIGFuIG9iamVjdCBsaWtlIHtvazogdHJ1ZS9mYWxzZSwgZGVzYzoKKy8vIDxk
ZXNjcmlwdGlvbiBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0byBvaygpCit3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7
CisKK3ZhciB0ZXN0UGFzc2VzUmVjZWl2ZWQgPSAwOworCitmdW5jdGlvbiByZWNlaXZlTWVzc2Fn
ZShldmVudCkgeworICAvLyB0aGlzIG1lc3NhZ2UgaXMgcGFydCBvZiBpZl8xMCdzIHRlc3QKKyAg
aWYgKGV2ZW50LmRhdGEudGVzdCA9PSAnaWZfMTAnKSB7CisgICAgZG9JZjEwVGVzdFBhcnQyKCk7
CisgICAgcmV0dXJuOworICB9CisKKyAgb2tfd3JhcHBlcihldmVudC5kYXRhLm9rLCBldmVudC5k
YXRhLmRlc2MpOworfQorCit2YXIgY29tcGxldGVkVGVzdHMgPSAwOwordmFyIHBhc3NlZFRlc3Rz
ID0gMDsKKworZnVuY3Rpb24gb2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpIHsKKyAgb2socmVzdWx0
LCBkZXNjKTsKKworICBjb21wbGV0ZWRUZXN0cysrOworCisgIGlmIChyZXN1bHQpIHsKKyAgICBw
YXNzZWRUZXN0cysrOworICB9CisKKyAgaWYgKGNvbXBsZXRlZFRlc3RzID09IDYpIHsKKyAgICBp
cyhwYXNzZWRUZXN0cywgNiwgIlRoZXJlIGFyZSA2IG5hdmlnYXRpb24gdGVzdHMgdGhhdCBzaG91
bGQgcGFzcyIpOworCisgICAgU2ltcGxlVGVzdC5maW5pc2goKTsKKyAgfQorfQorCitmdW5jdGlv
biBkb1Rlc3QoKSB7CisgIC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDEpIEEgc2FuZGJveGVkIGlm
cmFtZSBpcyBhbGxvd2VkIHRvIG5hdmlnYXRlIGl0c2VsZgorICAvLyAoZG9uZSBieSBmaWxlX2lm
cmFtZV9zYW5kYm94X2RfaWYxLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJyBhbmQgbmF2
aWdhdGVzIHRvCisgIC8vIGZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9wYXNzLmh0bWwp
LgorCisgIC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDIpIEEgc2FuZGJveGVkIGlmcmFtZSBpcyBh
bGxvd2VkIHRvIG5hdmlnYXRlIGl0cyBjaGlsZHJlbiwgZXZlbiBpZiB0aGV5IGFyZSBzYW5kYm94
ZWQKKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIHdoaWNoIGhh
cyAnYWxsb3ctc2NyaXB0cycsIGl0IG5hdmlnYXRlcyBhIGNoaWxkCisgIC8vIGlmcmFtZSBjb250
YWluaW5nIGZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1sIHRvIGZpbGVf
aWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9wYXNzLmh0bWwpLgorCisgIC8vIGZhaWxzIGlmIGJh
ZAorICAvLyAzKSBBIHNhbmRib3hlZCBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gbmF2aWdhdGUg
aXRzIGFuY2VzdG9yCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjQuaHRt
bCBjb250YWluZWQgd2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjMuaHRtbCwKKyAgLy8g
aXQgYXR0ZW1wdHMgdG8gbmF2aWdhdGUgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sIHRv
IGZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwpLgorCisgIC8vIGZhaWxz
IGlmIGJhZAorICAvLyA0KSBBIHNhbmRib3hlZCBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gbmF2
aWdhdGUgaXRzIHNpYmxpbmcKKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
NS5odG1sIHdoaWNoIGhhcyAnYWxsb3cgc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicKKyAgLy8g
YW5kIGF0dGVtcHRzIHRvIG5hdmlnYXRlIGZpbGVfaWZyYW1lX25hdmlnYXRpb25fc3RhcnQuaHRt
bCBjb250YWluZWQgaW4gaWZfc2libGluZyBvbiB0aGlzCisgIC8vIHBhZ2UgdG8gZmlsZV9pZnJh
bWVfc2FuZGJveF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCkuCisKKyAgLy8gZmFpbHMgaWYgYmFkCisg
IC8vIDUpIFdoZW4gYSBsaW5rIGlzIGNsaWNrZWQgaW4gYSBzYW5kYm94ZWQgaWZyYW1lLCB0aGUg
ZG9jdW1lbnQgbmF2aWdhdGVkIHRvIGlzIHNhbmRib3hlZAorICAvLyB0aGUgc2FtZSBhcyB0aGUg
b3JpZ2luYWwgZG9jdW1lbnQgYW5kIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIHBhcmVudCBkb2N1
bWVudAorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwgd2hpY2gg
c2ltdWxhdGVzIGEgbGluayBjbGljayBhbmQgbmF2aWdhdGVzCisgIC8vIHRvIGZpbGVfaWZyYW1l
X3NhbmRib3hfZF9pZjcuaHRtbCB3aGljaCBhdHRlbXB0cyB0byBjYWxsIGJhY2sgaW50byBpdHMg
cGFyZW50KS4KKworICAvLyBmYWlscyBpZiBiYWQKKyAgLy8gNikgQW4gaWZyYW1lIChpZl84KSBo
YXMgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyIsIHRoZSBzYW5kYm94
ZWQgZG9jdW1lbnQKKyAgLy8gKGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZl84Lmh0bWwpIHRoYXQg
aXQgY29udGFpbnMgYWNjZXNzZXMgaXRzIHBhcmVudCAodGhpcyBmaWxlKSBhbmQgcmVtb3Zlcwor
ICAvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIGFuZCB0aGVuIHRyaWdnZXJzIGEgcmVsb2FkLgorICAv
LyBUaGUgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyBpdHMgcGFyZW50ICh0
aGlzIGZpbGUpLgorCisgIC8vIGZhaWxzIGlmIGJhZAorICAvLyA3KSBBbiBpZnJhbWUgKGlmXzkp
IGhhcyBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiwgdGhlIHNhbmRi
b3hlZCBkb2N1bWVudAorICAvLyAoZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmXzkuaHRtbCkgdGhh
dCBpdCBjb250YWlucyBhY2Nlc3NlcyBpdHMgcGFyZW50ICh0aGlzIGZpbGUpIGFuZCByZW1vdmVz
CisgIC8vICdhbGxvdy1zY3JpcHRzJyBhbmQgdGhlbiB0cmlnZ2VycyBhIHJlbG9hZC4KKyAgLy8g
VGhlIGRvY3VtZW50IHNob3VsZCBub3QgYmUgYWJsZSB0byBydW4gYSBzY3JpcHQgYW5kIGFjY2Vz
cyBpdHMgcGFyZW50ICh0aGlzIGZpbGUpLgorCisgIC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDgp
IGEgZG9jdW1lbnQgaW4gYW4gaWZyYW1lIHdpdGggc2FuZGJveD0nYWxsb3ctc2NyaXB0cycgc2hv
dWxkIGhhdmUgYSBkaWZmZXJlbnQgbnVsbAorICAvLyBwcmluY2lwYWwgaW4gaXRzIG9yaWdpbmFs
IGRvY3VtZW50IHRoYW4gYSBkb2N1bWVudCB0byB3aGljaCBpdCBuYXZpZ2F0ZXMgaXRzZWxmCisg
IC8vIGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZl8xMC5odG1sIGRvZXMgdGhpcywgY28tb3JkaW5h
dGluZyB3aXRoIHRoaXMgcGFnZSB2aWEgcG9zdE1lc3NhZ2UKKyAgCisgIC8vIHBhc3NlcyBpZiBn
b29kCisgIC8vIDkpIGEgZG9jdW1lbnQgKGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjExLmh0bWwg
aW4gYW4gaWZyYW1lIChpZl8xMSkgd2l0aCBzYW5kYm94PSdhbGxvdy1zY3JpcHRzJworICAvLyBp
cyBuYXZpZ2F0ZWQgdG8gZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTIuaHRtbCAtIHdoZW4gdGhh
dCBkb2N1bWVudCBsb2FkcworICAvLyBhIG1lc3NhZ2UgaXMgc2VudCBiYWNrIHRvIHRoaXMgZG9j
dW1lbnQsIHdoaWNoIGFkZHMgJ2FsbG93LXNhbWUtb3JpZ2luJyB0byBpZl8xMSBhbmQgdGhlbgor
ICAvLyBjYWxscyAuYmFjayBvbiBpdCAtIGZpbGVfaWZyYW1lX3NhbmRib3hfaWYxMi5odG1sIHNo
b3VsZCBiZSBhYmxlIHRvIGNhbGwgYmFjayBpbnRvIHRoaXMKKyAgLy8gZG9jdW1lbnQgLSB0aGlz
IGlzIGFsbCBjb250YWluZWQgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTMuaHRtbCB3aGlj
aCBpcyBvcGVuZWQgaW4gYW5vdGhlcgorICAvLyB0YWIgc28gaXQgaGFzIGl0cyBvd24gaXNvbGF0
ZWQgc2Vzc2lvbiBoaXN0b3J5CisgIHdpbmRvdy5vcGVuKCJmaWxlX2lmcmFtZV9zYW5kYm94X2Rf
aWYxMy5odG1sIik7CisgIAorICAvLyBvcGVuIHVwIHRoZSB0b3AgbmF2aWdhdGlvbiB0ZXN0cwor
CisgIC8vIGZhaWxzIGlmIGJhZAorICAvLyAxMCkgaWZyYW1lIHdpdGggc2FuZGJveD0nYWxsb3ct
c2NyaXB0cycgY2FuIE5PVCBuYXZpZ2F0ZSB0b3AKKyAgLy8gZmlsZV9pZnJhbWVfc2FuZGJveF9l
X2lmMS5odG1sIGNvbnRhaW5zIGZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjYuaHRtbCB3aGljaAor
ICAvLyBhdHRlbXB0cyB0byBuYXZpZ2F0ZSB0b3AKKyAgd2luZG93Lm9wZW4oImZpbGVfaWZyYW1l
X3NhbmRib3hfZV9pZjEuaHRtbCIpOworCisgIC8vIGZhaWxzIGlmIGJhZAorICAvLyAxMSkgaWZy
YW1lIHdpdGggc2FuZGJveD0nYWxsb3ctc2NyaXB0cycgbmVzdGVkIGluc2lkZSBpZnJhbWUgd2l0
aAorICAvLyAnYWxsb3ctdG9wLW5hdmlnYXRpb24gYWxsb3ctc2NyaXB0cycgY2FuIE5PVCBuYXZp
Z2F0ZSB0b3AKKyAgLy8gZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMi5odG1sIGNvbnRhaW5zIGZp
bGVfaWZyYW1lX3NhbmRib3hfZV9pZjEuaHRtbCB3aGljaAorICAvLyBjb250YWlucyBmaWxlX2lm
cmFtZV9zYW5kYm94X2VfaWY2Lmh0bWwgd2hpY2ggYXR0ZW1wdHMgdG8gbmF2aWdhdGUgdG9wCisg
IHdpbmRvdy5vcGVuKCJmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYyLmh0bWwiKTsKKworICAvLyBw
YXNzZXMgaWYgZ29vZAorICAvLyAxMikgaWZyYW1lIHdpdGggc2FuZGJveD0nYWxsb3ctdG9wLW5h
dmlnYXRpb24gYWxsb3ctc2NyaXB0cycgY2FuIG5hdmlnYXRlIHRvcAorICAvLyBmaWxlX2lmcmFt
ZV9zYW5kYm94X2VfaWYzLmh0bWwgY29udGFpbnMgZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNS5o
dG1sIHdoaWNoIG5hdmlnYXRlcyB0b3AKKyAgd2luZG93Lm9wZW4oImZpbGVfaWZyYW1lX3NhbmRi
b3hfZV9pZjMuaHRtbCIpOworCisgIC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDEzMSkgaWZyYW1l
IHdpdGggc2FuZGJveD0nYWxsb3ctdG9wLW5hdmlnYXRpb24gYWxsb3ctc2NyaXB0cycgbmVzdGVk
IGluc2lkZSBhbiBpZnJhbWUgd2l0aAorICAvLyAnYWxsb3ctdG9wLW5hdmlnYXRpb24gYWxsb3ct
c2NyaXB0cycgY2FuIG5hdmlnYXRlIHRvcAorICAvLyBmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY0
Lmh0bWwgY29udGFpbnMgZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMy5odG1sIHdoaWNoIGNvbnRh
aW5zCisgIC8vIGZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjUuaHRtbCB3aGljaCBuYXZpZ2F0ZXMg
dG9wCisgIHdpbmRvdy5vcGVuKCJmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY0Lmh0bWwiKTsKK30K
KworYWRkTG9hZEV2ZW50KGRvVGVzdCk7CisKK3dpbmRvdy5tb2RpZmllZF9pZl84ID0gZmFsc2U7
CisKK2Z1bmN0aW9uIHJlbG9hZF9pZl84KCkgeworICB2YXIgaWZfOCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdpZl84Jyk7CisgIGlmXzguc3JjID0gJ2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9p
ZjguaHRtbCc7Cit9CisKK2Z1bmN0aW9uIG1vZGlmeV9pZl84KCkgeworICAvLyBJZiB0aGlzIGlz
IHRoZSBzZWNvbmQgdGltZSB0aGlzIGhhcyBiZWVuIGNhbGxlZAorICAvLyB0aGF0J3MgYSBmYWls
ZWQgdGVzdCAoYWxsb3ctc2FtZS1vcmlnaW4gd2FzIHJlbW92ZWQKKyAgLy8gdGhlIGZpcnN0IHRp
bWUpLgorICBpZiAod2luZG93Lm1vZGlmaWVkX2lmXzgpIHsKKyAgICBva193cmFwcGVyKGZhbHNl
LCAiYW4gc2FuZGJveGVkIGlmcmFtZSBmcm9tIHdoaWNoICdhbGxvdy1zYW1lLW9yaWdpbicgd2Fz
IHJlbW92ZWQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyBpdHMgcGFyZW50Iik7CisKKyAg
ICAvLyBuZWVkIHRvIHJldHVybiBoZXJlIHNpbmNlIHdlIGVuZCB1cCBpbiBhbiBpbmZpbml0ZSBs
b29wIG90aGVyd2lzZQorICAgIHJldHVybjsKKyAgfQorCisgIHZhciBpZl84ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2lmXzgnKTsKKyAgd2luZG93Lm1vZGlmaWVkX2lmXzggPSB0cnVlOwor
CisgIGlmXzguc2FuZGJveCA9ICdhbGxvdy1zY3JpcHRzJzsKKyAgc2VuZE1vdXNlRXZlbnQoe3R5
cGU6J2NsaWNrJ30sICdhX2J1dHRvbicpOworfQorCit3aW5kb3cubW9kaWZpZWRfaWZfOSA9IGZh
bHNlOworCitmdW5jdGlvbiByZWxvYWRfaWZfOSgpIHsKKyAgdmFyIGlmXzkgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnaWZfOScpOworICBpZl85LnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5kYm94
X2RfaWY5Lmh0bWwnOworfQorCitmdW5jdGlvbiBtb2RpZnlfaWZfOSgpIHsKKyAgLy8gSWYgdGhp
cyBpcyB0aGUgc2Vjb25kIHRpbWUgdGhpcyBoYXMgYmVlbiBjYWxsZWQKKyAgLy8gdGhhdCdzIGEg
ZmFpbGVkIHRlc3QgKGFsbG93LXNjcmlwdHMgd2FzIHJlbW92ZWQKKyAgLy8gdGhlIGZpcnN0IHRp
bWUpLgorICBpZiAod2luZG93Lm1vZGlmaWVkX2lmXzkpIHsKKyAgICBva193cmFwcGVyKGZhbHNl
LCAiYW4gc2FuZGJveGVkIGlmcmFtZSBmcm9tIHdoaWNoICdhbGxvdy1zY3JpcHRzJyBzaG91bGQg
YmUgcmVtb3ZlZCBzaG91bGQgbm90IGJlIGFibGUgdG8gYWNjZXNzIGl0cyBwYXJlbnQgdmlhIGEg
c2NyaXB0Iik7CisKKyAgICAvLyBuZWVkIHRvIHJldHVybiBoZXJlIHNpbmNlIHdlIGVuZCB1cCBp
biBhbiBpbmZpbml0ZSBsb29wIG90aGVyd2lzZQorICAgIHJldHVybjsKKyAgfQorCisgIHZhciBp
Zl85ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmXzknKTsKKyAgd2luZG93Lm1vZGlmaWVk
X2lmXzkgPSB0cnVlOworCisgIGlmXzkuc2FuZGJveCA9ICdhbGxvdy1zYW1lLW9yaWdpbic7CisK
KyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhX2J1dHRvbjInKTsKK30KKwordmFy
IGZpcnN0UHJpbmNpcGFsID0gIiI7Cit2YXIgc2Vjb25kUHJpbmNpcGFsOworCitmdW5jdGlvbiBk
b0lmMTBUZXN0UGFydDEoKSB7CisgIGlmIChmaXJzdFByaW5jaXBhbCAhPSAiIikKKyAgICByZXR1
cm47CisKKyAgLy8gdXNlIFNwZWNpYWxQb3dlcnMgdG8gZ2V0IHRoZSBwcmluY2lwYWwgb2YgaWZf
MTAKKyAgdmFyIGlmXzEwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmXzEwJyk7CisgIGZp
cnN0UHJpbmNpcGFsID0gU3BlY2lhbFBvd2Vycy5nZXROb2RlUHJpbmNpcGFsKGlmXzEwLmNvbnRl
bnREb2N1bWVudCk7CisgIGlmXzEwLnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMC5o
dG1sJzsKKworfQorZnVuY3Rpb24gZG9JZjEwVGVzdFBhcnQyKCkgeworICB2YXIgaWZfMTAgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMTAnKTsKKyAgLy8gdXNlIFNwZWNpYWxQb3dlcnMg
dG8gZ2V0IHRoZSBwcmluY2lwYWwgb2YgaWZfMTAKKyAgc2Vjb25kUHJpbmNpcGFsID0gU3BlY2lh
bFBvd2Vycy5nZXROb2RlUHJpbmNpcGFsKGlmXzEwLmNvbnRlbnREb2N1bWVudCk7CisgIG9rX3dy
YXBwZXIoZmlyc3RQcmluY2lwYWwgIT0gc2Vjb25kUHJpbmNpcGFsLCAiZG9jdW1lbnRzIHNob3Vs
ZCBOT1QgaGF2ZSB0aGUgc2FtZSBwcmluY2lwYWwgaWYgdGhleSBhcmUgc2FuZGJveGVkIHdpdGhv
dXQiICsKKyAgICAiIGFsbG93LXNhbWUtb3JpZ2luIGFuZCB0aGUgZmlyc3QgZG9jdW1lbnQgaXMg
bmF2aWdhdGVkIHRvIHRoZSBzZWNvbmQiKTsKK30KKzwvc2NyaXB0PgorPGJvZHk+Cis8YSB0YXJn
ZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzQxNjA0Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNh
bmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzCis8cCBpZD0iZGlzcGxheSI+PC9wPgorPGRpdiBp
ZD0iY29udGVudCI+Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIGlkPSJpZl8xIiBz
cmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEw
Ij48L2lmcmFtZT4KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzIiIHNy
Yz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAi
PjwvaWZyYW1lPgorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMyIgc3Jj
PSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYzLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+
PC9pZnJhbWU+Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93X3NjcmlwdHMgYWxsb3ctc2FtZS1vcmln
aW4iIGlkPSJpZl81IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRtbCIgaGVpZ2h0
PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzxpZnJhbWUgaWQ9ImlmX3NpYmxpbmciIHNyYz0i
ZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwiIGhlaWdodD0iMTAiIHdp
ZHRoPSIxMCI+PC9pZnJhbWU+Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93X3NjcmlwdHMiIGlkPSJp
Zl82IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjYuaHRtbCIgaGVpZ2h0PSIxMCIgd2lk
dGg9IjEwIj48L2lmcmFtZT4KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxs
b3ctc2NyaXB0cyIgaWQ9ImlmXzgiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5odG1s
IiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPGlmcmFtZSBzYW5kYm94PSJhbGxv
dy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfOSIgc3JjPSJmaWxlX2lmcmFtZV9z
YW5kYm94X2RfaWY5Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+Cis8aWZy
YW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIGlkPSJpZl8xMCIgc3JjPSJmaWxlX2lmcmFtZV9z
YW5kYm94X25hdmlnYXRpb25fc3RhcnQuaHRtbCIgb25sb2FkPSdkb0lmMTBUZXN0UGFydDEoKScg
aGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwvZGl2PgorPGlucHV0IHR5cGU9J2J1
dHRvbicgaWQ9ImFfYnV0dG9uIiBvbmNsaWNrPSdyZWxvYWRfaWZfOCgpJz4KKzxpbnB1dCB0eXBl
PSdidXR0b24nIGlkPSJhX2J1dHRvbjIiIG9uY2xpY2s9J3JlbG9hZF9pZl85KCknPgorPC9ib2R5
PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="523180"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>633207</attachid>
            <date>2012-06-14 11:32:27 -0700</date>
            <delta_ts>2012-08-04 09:07:10 -0700</delta_ts>
            <desc>CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v4</desc>
            <filename>iframe_sandbox_check_may_load</filename>
            <type>text/plain</type>
            <size>30350</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZDI1ZjI3NzAwZjdkODM0N2FjMGZmYzY4NDYw
NmFkNGU0OTM5MmM1MgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KbW9k
aWZ5IG5zSVByaW5jaXBhbDo6Y2hlY2tNYXlMb2FkIHRvIGFsbG93IGluaGVyaXRlZC9pbmhlcml0
aW5nIGxvYWRzCgpkaWZmIC0tZ2l0IGEvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbCBiL2NhcHMv
aWRsL25zSVByaW5jaXBhbC5pZGwKLS0tIGEvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbAorKysg
Yi9jYXBzL2lkbC9uc0lQcmluY2lwYWwuaWRsCkBAIC0xNiwxNyArMTYsMTcgQEAgc3RydWN0IEpT
UHJpbmNpcGFsczsKIAogaW50ZXJmYWNlIG5zSVVSSTsKIGludGVyZmFjZSBuc0lDb250ZW50U2Vj
dXJpdHlQb2xpY3k7CiAKIFtwdHJdIG5hdGl2ZSBKU0NvbnRleHQoSlNDb250ZXh0KTsKIFtwdHJd
IG5hdGl2ZSBKU1ByaW5jaXBhbHMoSlNQcmluY2lwYWxzKTsKIFtwdHJdIG5hdGl2ZSBQcmluY2lw
YWxBcnJheShuc1RBcnJheTxuc0NPTVB0cjxuc0lQcmluY2lwYWw+ID4pOwogCi1bc2NyaXB0YWJs
ZSwgdXVpZCg0MmJhNmEzOC1kNjE5LTQ5YWItODI0OC0zZDI0N2U5NTlkNWUpXQorW3NjcmlwdGFi
bGUsIHV1aWQoODI1ZmZjZTgtOTYyZC0xMWUxLWFlZjMtOGYyYjYxODg3MDliKV0KIGludGVyZmFj
ZSBuc0lQcmluY2lwYWwgOiBuc0lTZXJpYWxpemFibGUKIHsKICAgICAvKioKICAgICAgKiBWYWx1
ZXMgb2YgY2FwYWJpbGl0aWVzIGZvciBlYWNoIHByaW5jaXBhbC4gT3JkZXIgaXMKICAgICAgKiBz
aWduaWZpY2FudDogaWYgYW4gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbiBhIHNldAogICAgICAq
IG9mIGNhcGFiaWxpdGllcywgdGhlIG1pbmltdW0gaXMgY29tcHV0ZWQuCiAgICAgICovCiAgICAg
Y29uc3Qgc2hvcnQgRU5BQkxFX0RFTklFRCAgICAgICAgICAgICAgICA9IDE7CkBAIC0xNjgsMzMg
KzE2OCw0MyBAQCBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsIDogbnNJU2VyaWFsaXphYmxlCiAgICAg
ICovCiAgICAgYm9vbGVhbiBzdWJzdW1lc0lnbm9yaW5nRG9tYWluKGluIG5zSVByaW5jaXBhbCBv
dGhlcik7CiAKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0aGlzIHByaW5jaXBhbCBp
cyBhbGxvd2VkIHRvIGxvYWQgdGhlIG5ldHdvcmsgcmVzb3VyY2UKICAgICAgKiBsb2NhdGVkIGF0
IHRoZSBnaXZlbiBVUkkgdW5kZXIgdGhlIHNhbWUtb3JpZ2luIHBvbGljeS4gVGhpcyBtZWFucyB0
aGF0CiAgICAgICogY29kZWJhc2UgcHJpbmNpcGFscyBhcmUgb25seSBhbGxvd2VkIHRvIGxvYWQg
cmVzb3VyY2VzIGZyb20gdGhlIHNhbWUKICAgICAgKiBkb21haW4sIHRoZSBzeXN0ZW0gcHJpbmNp
cGFsIGlzIGFsbG93ZWQgdG8gbG9hZCBhbnl0aGluZywgYW5kIG51bGwKLSAgICAgKiBwcmluY2lw
YWxzIGFyZSBub3QgYWxsb3dlZCB0byBsb2FkIGFueXRoaW5nLgorICAgICAqIHByaW5jaXBhbHMg
YXJlIG5vdCBhbGxvd2VkIHRvIGxvYWQgYW55dGhpbmcuIFRoaXMgaXMgY2hhbmdlZCBzbGlnaHRs
eQorICAgICAqIGJ5IHRoZSBvcHRpb25hbCBmbGFnIGFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCAo
d2hpY2ggZGVmYXVsdHMgdG8gZmFsc2UpCisgICAgICogd2hpY2ggYWxsb3dzIHRoZSBsb2FkIG9m
IGEgZGF0YTogVVJJICh3aGljaCBpbmhlcml0cyB0aGUgcHJpbmNpcGFsIG9mCisgICAgICogaXRz
IGxvYWRlcikgb3IgYSBVUkkgd2l0aCB0aGUgc2FtZSBwcmluY2lwYWwgYXMgaXRzIGxvYWRlciAo
ZWcuIGEgCisgICAgICogQmxvYiBVUkkpLgorICAgICAqIEluIHRoZXNlIGNhc2VzLCB3aXRoIGFs
bG93SWZJbmhlcml0c1ByaW5jaXBhbCBzZXQgdG8gdHJ1ZSwgdGhlIFVSSSBjYW4KKyAgICAgKiBi
ZSBsb2FkZWQgYnkgYSBudWxsIHByaW5jaXBhbC4KICAgICAgKgogICAgICAqIElmIHRoZSBsb2Fk
IGlzIGFsbG93ZWQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIElmIHRoZSBsb2FkIGlzIG5v
dAogICAgICAqIGFsbG93ZWQgdGhlIGZ1bmN0aW9uIHRocm93cyBOU19FUlJPUl9ET01fQkFEX1VS
SS4KICAgICAgKgogICAgICAqIE5PVEU6IE90aGVyIHBvbGljaWVzIG1pZ2h0IG92ZXJyaWRlIHRo
aXMsIHN1Y2ggYXMgdGhlIEFjY2Vzcy1Db250cm9sCiAgICAgICogICAgICAgc3BlY2lmaWNhdGlv
bi4KICAgICAgKiBOT1RFOiBUaGUgJ2RvbWFpbicgYXR0cmlidXRlIGhhcyBubyBlZmZlY3Qgb24g
dGhlIGJlaGF2aW91ciBvZiB0aGlzCiAgICAgICogICAgICAgZnVuY3Rpb24uCiAgICAgICoKICAg
ICAgKgogICAgICAqIEBwYXJhbSB1cmkgICAgVGhlIFVSSSBhYm91dCB0byBiZSBsb2FkZWQuCiAg
ICAgICogQHBhcmFtIHJlcG9ydCBJZiB0cnVlLCB3aWxsIHJlcG9ydCBhIHdhcm5pbmcgdG8gdGhl
IGNvbnNvbGUgc2VydmljZQogICAgICAqICAgICAgICAgICAgICAgaWYgdGhlIGxvYWQgaXMgbm90
IGFsbG93ZWQuCisgICAgICogQHBhcmFtIGFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCAgIElmIHRy
dWUsIHRoZSBsb2FkIGlzIGFsbG93ZWQgaWYgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvYWRlZSBpbmhlcml0cyB0aGUgcHJpbmNpcGFsIG9mIHRoZQorICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIuCiAgICAgICogQHRo
cm93cyBOU19FUlJPUl9ET01fQkFEX1VSSSBpZiB0aGUgbG9hZCBpcyBub3QgYWxsb3dlZC4KICAg
ICAgKi8KLSAgICB2b2lkIGNoZWNrTWF5TG9hZChpbiBuc0lVUkkgdXJpLCBpbiBib29sZWFuIHJl
cG9ydCk7CisgICAgdm9pZCBjaGVja01heUxvYWQoaW4gbnNJVVJJIHVyaSwgaW4gYm9vbGVhbiBy
ZXBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBhbGxvd0lmSW5oZXJpdHNQ
cmluY2lwYWwpOwogCiAgICAgLyoqCiAgICAgICogVGhlIHN1YmplY3QgbmFtZSBmb3IgdGhlIGNl
cnRpZmljYXRlLiAgVGhpcyBhY3R1YWxseSBpZGVudGlmaWVzIHRoZQogICAgICAqIHN1YmplY3Qg
b2YgdGhlIGNlcnRpZmljYXRlLiAgVGhpcyBtYXkgd2VsbCBub3QgYmUgYSBzdHJpbmcgdGhhdCB3
b3VsZAogICAgICAqIG1lYW4gbXVjaCB0byBhIHR5cGljYWwgdXNlciBvbiBpdHMgb3duIChlLmcu
IGl0IG1heSBoYXZlIGEgbnVtYmVyIG9mCiAgICAgICogZGlmZmVyZW50IG5hbWVzIGFsbCBjb25j
YXRlbmF0ZWQgdG9nZXRoZXIgd2l0aCBzb21lIGluZm9ybWF0aW9uIG9uIHdoYXQKICAgICAgKiB0
aGV5IG1lYW4gaW4gYmV0d2VlbikuCiAgICAgICoKQEAgLTIyOSw5ICsyMzksOSBAQCBpbnRlcmZh
Y2UgbnNJUHJpbmNpcGFsIDogbnNJU2VyaWFsaXphYmxlCiBpbnRlcmZhY2UgbnNJRXhwYW5kZWRQ
cmluY2lwYWwgOiBuc0lTdXBwb3J0cwogewogICAvKioKICAgICogQW4gYXJyYXkgb2YgcHJpbmNp
cGFscyB0aGF0IHRoZSBleHBhbmRlZCBwcmluY2lwYWwgc3Vic3VtZXMuCiAgICAqIE5vdGU6IHRo
aXMgbGlzdCBpcyBub3QgcmVmZXJlbmNlIGNvdW50ZWQsIGl0IGlzIHNoYXJlZCwgc28gCiAgICAq
IHNob3VsZCBub3QgYmUgY2hhbmdlZCBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBlcGhlbWVyYWxs
eS4KICAgICovCiAgIFtub3R4cGNvbV0gcmVhZG9ubHkgYXR0cmlidXRlIFByaW5jaXBhbEFycmF5
IHdoaXRlTGlzdDsKLX07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfTsKZGlmZiAtLWdp
dCBhL2NhcHMvaW5jbHVkZS9uc051bGxQcmluY2lwYWwuaCBiL2NhcHMvaW5jbHVkZS9uc051bGxQ
cmluY2lwYWwuaAotLS0gYS9jYXBzL2luY2x1ZGUvbnNOdWxsUHJpbmNpcGFsLmgKKysrIGIvY2Fw
cy9pbmNsdWRlL25zTnVsbFByaW5jaXBhbC5oCkBAIC0xMCwxNiArMTAsMTcgQEAKICAqLwogCiAj
aWZuZGVmIG5zTnVsbFByaW5jaXBhbF9oX18KICNkZWZpbmUgbnNOdWxsUHJpbmNpcGFsX2hfXwog
CiAjaW5jbHVkZSAibnNJUHJpbmNpcGFsLmgiCiAjaW5jbHVkZSAibnNKU1ByaW5jaXBhbHMuaCIK
ICNpbmNsdWRlICJuc0NPTVB0ci5oIgorI2luY2x1ZGUgIm5zUHJpbmNpcGFsLmgiCiAKIGNsYXNz
IG5zSVVSSTsKIAogI2RlZmluZSBOU19OVUxMUFJJTkNJUEFMX0NMQVNTTkFNRSAibnVsbHByaW5j
aXBhbCIKICNkZWZpbmUgTlNfTlVMTFBSSU5DSVBBTF9DSUQgXAogeyAweGRkMTU2ZDYyLCAweGQy
NmYsIDB4NDQ0MSwgXAogIHsgMHg5YywgMHhkYiwgMHhlOCwgMHhmMCwgMHg5MSwgMHgwNywgMHhj
MiwgMHg3MyB9IH0KICNkZWZpbmUgTlNfTlVMTFBSSU5DSVBBTF9DT05UUkFDVElEICJAbW96aWxs
YS5vcmcvbnVsbHByaW5jaXBhbDsxIgpkaWZmIC0tZ2l0IGEvY2Fwcy9pbmNsdWRlL25zUHJpbmNp
cGFsLmggYi9jYXBzL2luY2x1ZGUvbnNQcmluY2lwYWwuaAotLS0gYS9jYXBzL2luY2x1ZGUvbnNQ
cmluY2lwYWwuaAorKysgYi9jYXBzL2luY2x1ZGUvbnNQcmluY2lwYWwuaApAQCAtOCwxNiArOCwx
OSBAQAogCiAjaW5jbHVkZSAibnNBdXRvUHRyLmgiCiAjaW5jbHVkZSAibnNDT01QdHIuaCIKICNp
bmNsdWRlICJuc1ZvaWRBcnJheS5oIgogI2luY2x1ZGUgIm5zSGFzaHRhYmxlLmgiCiAjaW5jbHVk
ZSAibnNKU1ByaW5jaXBhbHMuaCIKICNpbmNsdWRlICJuc1RBcnJheS5oIgogI2luY2x1ZGUgIm5z
QXV0b1B0ci5oIgorI2luY2x1ZGUgIm5zSVByb3RvY29sSGFuZGxlci5oIgorI2luY2x1ZGUgIm5z
TmV0VXRpbC5oIgorI2luY2x1ZGUgIm5zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgiCiAKIGNsYXNz
IG5zSU9iamVjdElucHV0U3RyZWFtOwogY2xhc3MgbnNJT2JqZWN0T3V0cHV0U3RyZWFtOwogY2xh
c3MgRG9tYWluUG9saWN5OyAKIAogY2xhc3MgbnNCYXNlUHJpbmNpcGFsIDogcHVibGljIG5zSlNQ
cmluY2lwYWxzCiB7CiBwdWJsaWM6CkBAIC0xMjQsMTcgKzEyNywxNyBAQCBwdWJsaWM6CiAgIE5T
X0lNRVRIT0QgRXF1YWxzSWdub3JpbmdEb21haW4obnNJUHJpbmNpcGFsKiBvdGhlciwgYm9vbCog
X3JldHZhbCBOU19PVVRQQVJBTSk7CiAgIE5TX0lNRVRIT0QgR2V0SGFzaFZhbHVlKFBSVWludDMy
KiBhSGFzaFZhbHVlKTsKICAgTlNfSU1FVEhPRCBHZXRVUkkobnNJVVJJKiogYVVSSSk7CiAgIE5T
X0lNRVRIT0QgR2V0RG9tYWluKG5zSVVSSSoqIGFEb21haW4pOwogICBOU19JTUVUSE9EIFNldERv
bWFpbihuc0lVUkkqIGFEb21haW4pOwogICBOU19JTUVUSE9EIEdldE9yaWdpbihjaGFyKiogYU9y
aWdpbik7CiAgIE5TX0lNRVRIT0QgU3Vic3VtZXMobnNJUHJpbmNpcGFsKiBvdGhlciwgYm9vbCog
X3JldHZhbCBOU19PVVRQQVJBTSk7CiAgIE5TX0lNRVRIT0QgU3Vic3VtZXNJZ25vcmluZ0RvbWFp
bihuc0lQcmluY2lwYWwqIG90aGVyLCBib29sKiBfcmV0dmFsIE5TX09VVFBBUkFNKTsKLSAgTlNf
SU1FVEhPRCBDaGVja01heUxvYWQobnNJVVJJKiB1cmksIGJvb2wgcmVwb3J0KTsKKyAgTlNfSU1F
VEhPRCBDaGVja01heUxvYWQobnNJVVJJKiB1cmksIGJvb2wgcmVwb3J0LCBib29sIGFsbG93SWZJ
bmhlcml0c1ByaW5jaXBhbCk7CiAjaWZkZWYgREVCVUcKICAgdmlydHVhbCB2b2lkIGR1bXBJbXBs
KCk7CiAjZW5kaWYKICAgLy8gRWl0aGVyIEluaXQoKSBvciBJbml0RnJvbVBlcnNpc3RlbnQoKSBt
dXN0IGJlIGNhbGxlZCBiZWZvcmUKICAgLy8gdGhlIHByaW5jaXBhbCBpcyBpbiBhIHVzYWJsZSBz
dGF0ZS4KICAgbnNyZXN1bHQgSW5pdChjb25zdCBuc0FDU3RyaW5nJiBhQ2VydEZpbmdlcnByaW50
LAogICAgICAgICAgICAgICAgIGNvbnN0IG5zQUNTdHJpbmcmIGFTdWJqZWN0TmFtZSwKICAgICAg
ICAgICAgICAgICBjb25zdCBuc0FDU3RyaW5nJiBhUHJldHR5TmFtZSwKQEAgLTE0OCwxNiArMTUx
LDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGFEZW5pZWRMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMq
IGFDZXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhSXNDZXJ0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhVHJ1c3RlZCk7CiAKICAgdmlydHVhbCB2
b2lkIEdldFNjcmlwdExvY2F0aW9uKG5zQUNTdHJpbmcmIGFTdHIpIE1PWl9PVkVSUklERTsKICAg
dm9pZCBTZXRVUkkobnNJVVJJKiBhVVJJKTsKIAorICBzdGF0aWMgYm9vbCBJc1ByaW5jaXBhbElu
aGVyaXRlZChuc0lVUkkqIGFVUkkpIHsKKyAgICAvLyByZXR1cm4gdHJ1ZSBpZiB0aGUgbG9hZGVl
IFVSSSBoYXMKKyAgICAvLyB0aGUgVVJJX0lOSEVSSVRTX1NFQ1VSSVRZX0NPTlRFWFQgZmxhZyBz
ZXQuCisgICAgYm9vbCBkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dDsKKyAgICBuc3Jlc3VsdCBy
diA9CisgICAgTlNfVVJJQ2hhaW5IYXNGbGFncyhhVVJJLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJUHJvdG9jb2xIYW5kbGVyOjpVUklfSU5IRVJJVFNfU0VDVVJJVFlfQ09OVEVYVCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICZkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dCk7CisKKyAg
ICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSAmJiBkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dCkgewor
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAg
bnNDT01QdHI8bnNJVVJJPiBtRG9tYWluOwogICBuc0NPTVB0cjxuc0lVUkk+IG1Db2RlYmFzZTsK
ICAgLy8gSWYgbUNvZGViYXNlSW1tdXRhYmxlIGlzIHRydWUsIG1Db2RlYmFzZSBpcyBub24tbnVs
bCBhbmQgaW1tdXRhYmxlCiAgIGJvb2wgbUNvZGViYXNlSW1tdXRhYmxlOwogICBib29sIG1Eb21h
aW5JbW11dGFibGU7CiAgIGJvb2wgbUluaXRpYWxpemVkOwogfTsKIApAQCAtMTc3LDE3ICsxOTYs
MTcgQEAgcHVibGljOgogICBOU19JTUVUSE9EIEVxdWFsc0lnbm9yaW5nRG9tYWluKG5zSVByaW5j
aXBhbCogb3RoZXIsIGJvb2wqIF9yZXR2YWwgTlNfT1VUUEFSQU0pOwogICBOU19JTUVUSE9EIEdl
dEhhc2hWYWx1ZShQUlVpbnQzMiogYUhhc2hWYWx1ZSk7CiAgIE5TX0lNRVRIT0QgR2V0VVJJKG5z
SVVSSSoqIGFVUkkpOwogICBOU19JTUVUSE9EIEdldERvbWFpbihuc0lVUkkqKiBhRG9tYWluKTsK
ICAgTlNfSU1FVEhPRCBTZXREb21haW4obnNJVVJJKiBhRG9tYWluKTsKICAgTlNfSU1FVEhPRCBH
ZXRPcmlnaW4oY2hhcioqIGFPcmlnaW4pOwogICBOU19JTUVUSE9EIFN1YnN1bWVzKG5zSVByaW5j
aXBhbCogb3RoZXIsIGJvb2wqIF9yZXR2YWwgTlNfT1VUUEFSQU0pOwogICBOU19JTUVUSE9EIFN1
YnN1bWVzSWdub3JpbmdEb21haW4obnNJUHJpbmNpcGFsKiBvdGhlciwgYm9vbCogX3JldHZhbCBO
U19PVVRQQVJBTSk7Ci0gIE5TX0lNRVRIT0QgQ2hlY2tNYXlMb2FkKG5zSVVSSSogdXJpLCBib29s
IHJlcG9ydCk7CisgIE5TX0lNRVRIT0QgQ2hlY2tNYXlMb2FkKG5zSVVSSSogdXJpLCBib29sIHJl
cG9ydCwgYm9vbCBhbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpOwogI2lmZGVmIERFQlVHCiAgIHZp
cnR1YWwgdm9pZCBkdW1wSW1wbCgpOwogI2VuZGlmCiAgIAogICB2aXJ0dWFsIHZvaWQgR2V0U2Ny
aXB0TG9jYXRpb24obnNBQ1N0cmluZyAmYVN0cikgTU9aX09WRVJSSURFOwogCiBwcml2YXRlOgog
ICBuc1RBcnJheTwgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiA+IG1QcmluY2lwYWxzOwpkaWZmIC0t
Z2l0IGEvY2Fwcy9zcmMvbnNOdWxsUHJpbmNpcGFsLmNwcCBiL2NhcHMvc3JjL25zTnVsbFByaW5j
aXBhbC5jcHAKLS0tIGEvY2Fwcy9zcmMvbnNOdWxsUHJpbmNpcGFsLmNwcAorKysgYi9jYXBzL3Ny
Yy9uc051bGxQcmluY2lwYWwuY3BwCkBAIC0yODYsMTggKzI4NiwzNiBAQCBuc051bGxQcmluY2lw
YWw6OlN1YnN1bWVzKG5zSVByaW5jaXBhbCAqCiAKIE5TX0lNRVRIT0RJTVAKIG5zTnVsbFByaW5j
aXBhbDo6U3Vic3VtZXNJZ25vcmluZ0RvbWFpbihuc0lQcmluY2lwYWwgKmFPdGhlciwgYm9vbCAq
YVJlc3VsdCkKIHsKICAgcmV0dXJuIFN1YnN1bWVzKGFPdGhlciwgYVJlc3VsdCk7CiB9CiAKIE5T
X0lNRVRIT0RJTVAKLW5zTnVsbFByaW5jaXBhbDo6Q2hlY2tNYXlMb2FkKG5zSVVSSSogYVVSSSwg
Ym9vbCBhUmVwb3J0KQorbnNOdWxsUHJpbmNpcGFsOjpDaGVja01heUxvYWQobnNJVVJJKiBhVVJJ
LCBib29sIGFSZXBvcnQsIGJvb2wgYUFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCkKIHsKKyAgaWYg
KGFBbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpIHsKKyAgICBpZiAobnNQcmluY2lwYWw6OklzUHJp
bmNpcGFsSW5oZXJpdGVkKGFVUkkpKSB7CisgICAgICByZXR1cm4gTlNfT0s7CisgICAgfQorCisg
ICAgLy8gQWxzbyBhbGxvdyB0aGUgbG9hZCBpZiB0aGUgcHJpbmNpcGFsIG9mIHRoZSBVUkkgYmVp
bmcgY2hlY2tlZCBpcyBleGFjdGx5CisgICAgLy8gdXMgaWUgdGhpcy4KKyAgICBuc0NPTVB0cjxu
c0lVUklXaXRoUHJpbmNpcGFsPiB1cmlQcmluYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFVUkkpOwor
ICAgIGlmICh1cmlQcmluYykgeworICAgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBwcmluY2lw
YWw7CisgICAgICB1cmlQcmluYy0+R2V0UHJpbmNpcGFsKGdldHRlcl9BZGRSZWZzKHByaW5jaXBh
bCkpOworCisgICAgICBpZiAocHJpbmNpcGFsICYmIHByaW5jaXBhbCA9PSB0aGlzKSB7CisgICAg
ICAgIHJldHVybiBOU19PSzsKKyAgICAgIH0KKyAgICB9CisgIH0KKwogICBpZiAoYVJlcG9ydCkg
ewogICAgIG5zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOjpSZXBvcnRFcnJvcigKICAgICAgIG5zbnVs
bCwgTlNfTElURVJBTF9TVFJJTkcoIkNoZWNrU2FtZU9yaWdpbkVycm9yIiksIG1VUkksIGFVUkkp
OwogICB9CiAKICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9CQURfVVJJOwogfQogCmRpZmYgLS1naXQg
YS9jYXBzL3NyYy9uc1ByaW5jaXBhbC5jcHAgYi9jYXBzL3NyYy9uc1ByaW5jaXBhbC5jcHAKLS0t
IGEvY2Fwcy9zcmMvbnNQcmluY2lwYWwuY3BwCisrKyBiL2NhcHMvc3JjL25zUHJpbmNpcGFsLmNw
cApAQCAtODI0LDE4ICs4MjQsMjYgQEAgVVJJSXNMb2NhbEZpbGUobnNJVVJJICphVVJJKQogCiAg
IHJldHVybiB1dGlsICYmIE5TX1NVQ0NFRURFRCh1dGlsLT5Qcm90b2NvbEhhc0ZsYWdzKGFVUkks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByb3RvY29sSGFuZGxlcjo6VVJJ
X0lTX0xPQ0FMX0ZJTEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc0ZpbGUp
KSAmJgogICAgICAgICAgaXNGaWxlOwogfQogCiBOU19JTUVUSE9ESU1QCi1uc1ByaW5jaXBhbDo6
Q2hlY2tNYXlMb2FkKG5zSVVSSSogYVVSSSwgYm9vbCBhUmVwb3J0KQorbnNQcmluY2lwYWw6OkNo
ZWNrTWF5TG9hZChuc0lVUkkqIGFVUkksIGJvb2wgYVJlcG9ydCwgYm9vbCBhQWxsb3dJZkluaGVy
aXRzUHJpbmNpcGFsKQogeworICAgaWYgKGFBbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpIHsKKyAg
ICAvLyBJZiB0aGUgY2FsbGVyIHNwZWNpZmllZCB0byBhbGxvdyBsb2FkcyBvZiBVUklzIHRoYXQg
aW5oZXJpdAorICAgIC8vIG91ciBwcmluY2lwYWwsIGFsbG93IHRoZSBsb2FkIGlmIHRoaXMgVVJJ
IGluaGVyaXRzIGl0cyBwcmluY2lwYWwKKyAgICBpZiAobnNQcmluY2lwYWw6OklzUHJpbmNpcGFs
SW5oZXJpdGVkKGFVUkkpKSB7CisgICAgICByZXR1cm4gTlNfT0s7CisgICAgfQorICB9CisKICAg
aWYgKCFuc1NjcmlwdFNlY3VyaXR5TWFuYWdlcjo6U2VjdXJpdHlDb21wYXJlVVJJcyhtQ29kZWJh
c2UsIGFVUkkpKSB7CiAgICAgaWYgKG5zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOjpHZXRTdHJpY3RG
aWxlT3JpZ2luUG9saWN5KCkgJiYKICAgICAgICAgVVJJSXNMb2NhbEZpbGUoYVVSSSkpIHsKICAg
ICAgIG5zQ09NUHRyPG5zSUZpbGVVUkw+IGZpbGVVUkwoZG9fUXVlcnlJbnRlcmZhY2UoYVVSSSkp
OwogCiAgICAgICBpZiAoIVVSSUlzTG9jYWxGaWxlKG1Db2RlYmFzZSkpIHsKICAgICAgICAgLy8g
SWYgdGhlIGNvZGViYXNlIGlzIG5vdCBhbHNvIGEgZmlsZTogdXJpIHRoZW4gZm9yZ2V0IGl0CiAg
ICAgICAgIC8vIChkb24ndCB3YW50IHJlc291cmNlOiBwcmluY2lwYWxzIGluIGEgZmlsZTogZG9j
KQpAQCAtMTMzNCwyMSArMTM0MiwyMSBAQCBuc0V4cGFuZGVkUHJpbmNpcGFsOjpTdWJzdW1lcyhu
c0lQcmluY2lwCiAKIE5TX0lNRVRIT0RJTVAKIG5zRXhwYW5kZWRQcmluY2lwYWw6OlN1YnN1bWVz
SWdub3JpbmdEb21haW4obnNJUHJpbmNpcGFsKiBhT3RoZXIsIGJvb2wqIGFSZXN1bHQpCiB7CiAg
IHJldHVybiA6OlN1YnN1bWVzKHRoaXMsICZuc0lQcmluY2lwYWw6OlN1YnN1bWVzSWdub3JpbmdE
b21haW4sIGFPdGhlciwgYVJlc3VsdCk7CiB9CiAKIE5TX0lNRVRIT0RJTVAKLW5zRXhwYW5kZWRQ
cmluY2lwYWw6OkNoZWNrTWF5TG9hZChuc0lVUkkqIHVyaSwgYm9vbCBhUmVwb3J0KQorbnNFeHBh
bmRlZFByaW5jaXBhbDo6Q2hlY2tNYXlMb2FkKG5zSVVSSSogdXJpLCBib29sIGFSZXBvcnQsIGJv
b2wgYUFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCkKIHsKICAgbnNyZXN1bHQgcnY7CiAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBtUHJpbmNpcGFscy5MZW5ndGgoKTsgKytpKXsKLSAgICBydiA9
IG1QcmluY2lwYWxzW2ldLT5DaGVja01heUxvYWQodXJpLCBhUmVwb3J0KTsKKyAgICBydiA9IG1Q
cmluY2lwYWxzW2ldLT5DaGVja01heUxvYWQodXJpLCBhUmVwb3J0LCBhQWxsb3dJZkluaGVyaXRz
UHJpbmNpcGFsKTsKICAgICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSkKICAgICAgIHJldHVybiBydjsK
ICAgfQogCiAgIHJldHVybiBOU19FUlJPUl9ET01fQkFEX1VSSTsKIH0KIAogTlNfSU1FVEhPRElN
UApkaWZmIC0tZ2l0IGEvY2Fwcy9zcmMvbnNTY3JpcHRTZWN1cml0eU1hbmFnZXIuY3BwIGIvY2Fw
cy9zcmMvbnNTY3JpcHRTZWN1cml0eU1hbmFnZXIuY3BwCi0tLSBhL2NhcHMvc3JjL25zU2NyaXB0
U2VjdXJpdHlNYW5hZ2VyLmNwcAorKysgYi9jYXBzL3NyYy9uc1NjcmlwdFNlY3VyaXR5TWFuYWdl
ci5jcHAKQEAgLTE0NTksMTcgKzE0NTksMTcgQEAgbnNTY3JpcHRTZWN1cml0eU1hbmFnZXI6OkNo
ZWNrTG9hZFVSSVdpdAogICAgIC8vIENoZWNrIGZvciB1cmlzIHRoYXQgYXJlIG9ubHkgbG9hZGFi
bGUgYnkgcHJpbmNpcGFscyB0aGF0IHN1YnN1bWUgdGhlbQogICAgIGJvb2wgaGFzRmxhZ3M7CiAg
ICAgcnYgPSBOU19VUklDaGFpbkhhc0ZsYWdzKHRhcmdldEJhc2VVUkksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVByb3RvY29sSGFuZGxlcjo6VVJJX0xPQURBQkxFX0JZX1NVQlNV
TUVSUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhc0ZsYWdzKTsKICAgICBOU19F
TlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgaWYgKGhhc0ZsYWdzKSB7Ci0gICAgICAgIHJl
dHVybiBhUHJpbmNpcGFsLT5DaGVja01heUxvYWQodGFyZ2V0QmFzZVVSSSwgdHJ1ZSk7CisgICAg
ICAgIHJldHVybiBhUHJpbmNpcGFsLT5DaGVja01heUxvYWQodGFyZ2V0QmFzZVVSSSwgdHJ1ZSwg
ZmFsc2UpOwogICAgIH0KIAogICAgIC8vLS0gZ2V0IHRoZSBzb3VyY2Ugc2NoZW1lCiAgICAgbnND
QXV0b1N0cmluZyBzb3VyY2VTY2hlbWU7CiAgICAgcnYgPSBzb3VyY2VCYXNlVVJJLT5HZXRTY2hl
bWUoc291cmNlU2NoZW1lKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgcmV0dXJuIHJ2OwogCiAg
ICAgaWYgKHNvdXJjZVNjaGVtZS5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKE5TX05VTExQUklOQ0lQ
QUxfU0NIRU1FKSkgewpkaWZmIC0tZ2l0IGEvY2Fwcy9zcmMvbnNTeXN0ZW1QcmluY2lwYWwuY3Bw
IGIvY2Fwcy9zcmMvbnNTeXN0ZW1QcmluY2lwYWwuY3BwCi0tLSBhL2NhcHMvc3JjL25zU3lzdGVt
UHJpbmNpcGFsLmNwcAorKysgYi9jYXBzL3NyYy9uc1N5c3RlbVByaW5jaXBhbC5jcHAKQEAgLTEw
OSwxNyArMTA5LDE3IEBAIG5zU3lzdGVtUHJpbmNpcGFsOjpTdWJzdW1lcyhuc0lQcmluY2lwYWwK
IE5TX0lNRVRIT0RJTVAKIG5zU3lzdGVtUHJpbmNpcGFsOjpTdWJzdW1lc0lnbm9yaW5nRG9tYWlu
KG5zSVByaW5jaXBhbCAqb3RoZXIsIGJvb2wgKnJlc3VsdCkKIHsKICAgICAqcmVzdWx0ID0gdHJ1
ZTsKICAgICByZXR1cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKLW5zU3lzdGVtUHJpbmNp
cGFsOjpDaGVja01heUxvYWQobnNJVVJJKiB1cmksIGJvb2wgYVJlcG9ydCkKK25zU3lzdGVtUHJp
bmNpcGFsOjpDaGVja01heUxvYWQobnNJVVJJKiB1cmksIGJvb2wgYVJlcG9ydCwgYm9vbCBhQWxs
b3dJZkluaGVyaXRzUHJpbmNpcGFsKQogewogICAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1F
VEhPRElNUAogbnNTeXN0ZW1QcmluY2lwYWw6OkdldEhhc2hWYWx1ZShQUlVpbnQzMiAqcmVzdWx0
KQogewogICAgICpyZXN1bHQgPSBOU19QVFJfVE9fSU5UMzIodGhpcyk7CmRpZmYgLS1naXQgYS9j
b250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmggYi9jb250ZW50L2Jhc2UvcHVibGlj
L25zQ29udGVudFV0aWxzLmgKLS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGls
cy5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50VXRpbHMuaApAQCAtMTY5Niwx
NyArMTY5NiwxNyBAQCBwdWJsaWM6CiAgICAqCiAgICAqIEBwYXJhbSBhU2NyaXB0Q29udGV4dCB0
aGUgc2NyaXB0IGNvbnRleHQgdG8gZ2V0IHRoZSBkb2N1bWVudCBmb3I7IGNhbiBiZSBudWxsCiAg
ICAqCiAgICAqIEByZXR1cm4gdGhlIGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NyaXB0
IGNvbnRleHQKICAgICovCiAgIHN0YXRpYyBhbHJlYWR5X0FkZFJlZmVkPG5zSURvY3VtZW50Pgog
ICBHZXREb2N1bWVudEZyb21TY3JpcHRDb250ZXh0KG5zSVNjcmlwdENvbnRleHQgKmFTY3JpcHRD
b250ZXh0KTsKIAotICBzdGF0aWMgYm9vbCBDaGVja01heUxvYWQobnNJUHJpbmNpcGFsKiBhUHJp
bmNpcGFsLCBuc0lDaGFubmVsKiBhQ2hhbm5lbCk7CisgIHN0YXRpYyBib29sIENoZWNrTWF5TG9h
ZChuc0lQcmluY2lwYWwqIGFQcmluY2lwYWwsIG5zSUNoYW5uZWwqIGFDaGFubmVsLCBib29sIGFB
bGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpOwogCiAgIC8qKgogICAgKiBUaGUgbWV0aG9kIGNoZWNr
cyB3aGV0aGVyIHRoZSBjYWxsZXIgY2FuIGFjY2VzcyBuYXRpdmUgYW5vbnltb3VzIGNvbnRlbnQu
CiAgICAqIElmIHRoZXJlIGlzIG5vIEpTIGluIHRoZSBzdGFjayBvciBwcml2aWxlZ2VkIEpTIGlz
IHJ1bm5pbmcsIHRoaXMKICAgICogbWV0aG9kIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNl
LgogICAgKi8KICAgc3RhdGljIGJvb2wgQ2FuQWNjZXNzTmF0aXZlQW5vbigpOwogCmRpZmYgLS1n
aXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFNpbmsuY3BwIGIvY29udGVudC9iYXNlL3Ny
Yy9uc0NvbnRlbnRTaW5rLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFNpbmsu
Y3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50U2luay5jcHAKQEAgLTEwODEsMTcg
KzEwODEsMTcgQEAgbnNDb250ZW50U2luazo6UHJvY2Vzc09mZmxpbmVNYW5pZmVzdChjbwogICAg
IG5zQ29udGVudFV0aWxzOjpOZXdVUklXaXRoRG9jdW1lbnRDaGFyc2V0KGdldHRlcl9BZGRSZWZz
KG1hbmlmZXN0VVJJKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhTWFuaWZlc3RTcGVjLCBtRG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbURvY3VtZW50VVJJKTsKICAgICBpZiAoIW1hbmlmZXN0VVJJ
KSB7CiAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gRG9jdW1lbnRzIG11c3QgbGlzdCBh
IG1hbmlmZXN0IGZyb20gdGhlIHNhbWUgb3JpZ2luCi0gICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQ
cmluY2lwYWwoKS0+Q2hlY2tNYXlMb2FkKG1hbmlmZXN0VVJJLCB0cnVlKTsKKyAgICBydiA9IG1E
b2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5DaGVja01heUxvYWQobWFuaWZlc3RVUkksIHRydWUs
IGZhbHNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgICAgYWN0aW9uID0gQ0FDSEVf
U0VMRUNUSU9OX1JFU0VMRUNUX1dJVEhPVVRfTUFOSUZFU1Q7CiAgICAgfQogICAgIGVsc2Ugewog
ICAgICAgLy8gT25seSBjb250aW51ZSBpZiB0aGUgZG9jdW1lbnQgaGFzIHBlcm1pc3Npb24gdG8g
dXNlIG9mZmxpbmUgQVBJcy4KICAgICAgIGlmICghbnNDb250ZW50VXRpbHM6Ok9mZmxpbmVBcHBB
bGxvd2VkKG1Eb2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpKSkgewogICAgICAgICByZXR1cm47CiAg
ICAgICB9CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBi
L2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9z
cmMvbnNDb250ZW50VXRpbHMuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRp
bHMuY3BwCkBAIC00NTYwLDE3ICs0NTYwLDE3IEBAIG5zQ29udGVudFV0aWxzOjpDaGVja1NlY3Vy
aXR5QmVmb3JlTG9hZCgKIAogICAvLyBTYW1lIE9yaWdpbgogICBpZiAoKGFBbGxvd0RhdGEgJiYg
U2NoZW1lSXMoYVVSSVRvTG9hZCwgImRhdGEiKSkgfHwKICAgICAgICgoYUNoZWNrTG9hZEZsYWdz
ICYgbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOjpBTExPV19DSFJPTUUpICYmCiAgICAgICAgU2No
ZW1lSXMoYVVSSVRvTG9hZCwgImNocm9tZSIpKSkgewogICAgIHJldHVybiBOU19PSzsKICAgfQog
Ci0gIHJldHVybiBhTG9hZGluZ1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGFVUklUb0xvYWQsIHRy
dWUpOworICByZXR1cm4gYUxvYWRpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJVG9Mb2Fk
LCB0cnVlLCBmYWxzZSk7CiB9CiAKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpJc1N5c3RlbVByaW5j
aXBhbChuc0lQcmluY2lwYWwqIGFQcmluY2lwYWwpCiB7CiAgIGJvb2wgaXNTeXN0ZW07CiAgIG5z
cmVzdWx0IHJ2ID0gc1NlY3VyaXR5TWFuYWdlci0+SXNTeXN0ZW1QcmluY2lwYWwoYVByaW5jaXBh
bCwgJmlzU3lzdGVtKTsKICAgcmV0dXJuIE5TX1NVQ0NFRURFRChydikgJiYgaXNTeXN0ZW07CkBA
IC01Njg4LDE5ICs1Njg4LDE5IEBAIG5zQ29udGVudFV0aWxzOjpDaGVja1NhbWVPcmlnaW4obnNJ
Q2hhbm4KIAogICBuc0NPTVB0cjxuc0lVUkk+IG5ld1VSSTsKICAgYU5ld0NoYW5uZWwtPkdldFVS
SShnZXR0ZXJfQWRkUmVmcyhuZXdVUkkpKTsKICAgbnNDT01QdHI8bnNJVVJJPiBuZXdPcmlnaW5h
bFVSSTsKICAgYU5ld0NoYW5uZWwtPkdldE9yaWdpbmFsVVJJKGdldHRlcl9BZGRSZWZzKG5ld09y
aWdpbmFsVVJJKSk7CiAKICAgTlNfRU5TVVJFX1NUQVRFKG9sZFByaW5jaXBhbCAmJiBuZXdVUkkg
JiYgbmV3T3JpZ2luYWxVUkkpOwogCi0gIG5zcmVzdWx0IHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVj
a01heUxvYWQobmV3VVJJLCBmYWxzZSk7CisgIG5zcmVzdWx0IHJ2ID0gb2xkUHJpbmNpcGFsLT5D
aGVja01heUxvYWQobmV3VVJJLCBmYWxzZSwgZmFsc2UpOwogICBpZiAoTlNfU1VDQ0VFREVEKHJ2
KSAmJiBuZXdPcmlnaW5hbFVSSSAhPSBuZXdVUkkpIHsKLSAgICBydiA9IG9sZFByaW5jaXBhbC0+
Q2hlY2tNYXlMb2FkKG5ld09yaWdpbmFsVVJJLCBmYWxzZSk7CisgICAgcnYgPSBvbGRQcmluY2lw
YWwtPkNoZWNrTWF5TG9hZChuZXdPcmlnaW5hbFVSSSwgZmFsc2UsIGZhbHNlKTsKICAgfQogCiAg
IHJldHVybiBydjsKIH0KIAogTlNfSU1QTF9JU1VQUE9SVFMyKFNhbWVPcmlnaW5DaGVja2VyLAog
ICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWxFdmVudFNpbmssCiAgICAgICAgICAgICAgICAg
ICAgbnNJSW50ZXJmYWNlUmVxdWVzdG9yKQpAQCAtNTg2MSwyMyArNTg2MSwyMyBAQCBuc0NvbnRl
bnRVdGlsczo6R2V0RG9jdW1lbnRGcm9tU2NyaXB0Q29uCiAgICAgICBDYWxsUXVlcnlJbnRlcmZh
Y2UoZG9tZG9jLCAmZG9jKTsKICAgICB9CiAgIH0KICAgcmV0dXJuIGRvYzsKIH0KIAogLyogc3Rh
dGljICovCiBib29sCi1uc0NvbnRlbnRVdGlsczo6Q2hlY2tNYXlMb2FkKG5zSVByaW5jaXBhbCog
YVByaW5jaXBhbCwgbnNJQ2hhbm5lbCogYUNoYW5uZWwpCituc0NvbnRlbnRVdGlsczo6Q2hlY2tN
YXlMb2FkKG5zSVByaW5jaXBhbCogYVByaW5jaXBhbCwgbnNJQ2hhbm5lbCogYUNoYW5uZWwsIGJv
b2wgYUFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCkKIHsKICAgbnNDT01QdHI8bnNJVVJJPiBjaGFu
bmVsVVJJOwogICBuc3Jlc3VsdCBydiA9IE5TX0dldEZpbmFsQ2hhbm5lbFVSSShhQ2hhbm5lbCwg
Z2V0dGVyX0FkZFJlZnMoY2hhbm5lbFVSSSkpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgZmFs
c2UpOwogCi0gIHJldHVybiBOU19TVUNDRUVERUQoYVByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGNo
YW5uZWxVUkksIGZhbHNlKSk7CisgIHJldHVybiBOU19TVUNDRUVERUQoYVByaW5jaXBhbC0+Q2hl
Y2tNYXlMb2FkKGNoYW5uZWxVUkksIGZhbHNlLCBhQWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsKSk7
CiB9CiAKIG5zQ29udGVudFR5cGVQYXJzZXI6Om5zQ29udGVudFR5cGVQYXJzZXIoY29uc3QgbnNB
U3RyaW5nJiBhU3RyaW5nKQogICA6IG1TdHJpbmcoYVN0cmluZyksIG1TZXJ2aWNlKG5zbnVsbCkK
IHsKICAgQ2FsbEdldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9uZXR3b3JrL21pbWUtaGRycGFyYW07
MSIsICZtU2VydmljZSk7CiB9CiAKQEAgLTY2MzQsMTcgKzY2MzQsMTcgQEAgbnNDb250ZW50VXRp
bHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaQogICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNp
bmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhl
ciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCiAgIC8vIHRvIGluaGVyaXQgdGhlIG93bmVyIGZyb20g
dGhlIHJlZmVycmVyIHNvIHRoZXkgY2FuIHNjcmlwdCBlYWNoIG90aGVyLgogICAvLyBJZiB3ZSBk
b24ndCBzZXQgdGhlIG93bmVyIGV4cGxpY2l0bHkgdGhlbiBlYWNoIGZpbGU6IGdldHMgYW4gb3du
ZXIKICAgLy8gYmFzZWQgb24gaXRzIG93biBjb2RlYmFzZSBsYXRlci4KICAgLy8KICAgaWYgKFVS
SUlzTG9jYWxGaWxlKGFVUkkpICYmIGFMb2FkaW5nUHJpbmNpcGFsICYmCi0gICAgICBOU19TVUND
RUVERUQoYUxvYWRpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJLCBmYWxzZSkpICYmCisg
ICAgICBOU19TVUNDRUVERUQoYUxvYWRpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJLCBm
YWxzZSwgZmFsc2UpKSAmJgogICAgICAgLy8gT25lIG1vcmUgY2hlY2sgaGVyZS4gIENoZWNrTWF5
TG9hZCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZSBmb3IgdGhlCiAgICAgICAvLyBzeXN0ZW0gcHJp
bmNpcGFsLCBidXQgd2UgZG8gTk9UIHdhbnQgdG8gaW5oZXJpdCBpbiB0aGF0IGNhc2UuCiAgICAg
ICAhSXNTeXN0ZW1QcmluY2lwYWwoYUxvYWRpbmdQcmluY2lwYWwpKSB7CiAgICAgYUNoYW5uZWwt
PlNldE93bmVyKGFMb2FkaW5nUHJpbmNpcGFsKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDcm9zc1NpdGVM
aXN0ZW5lclByb3h5LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDcm9zc1NpdGVMaXN0ZW5lclBy
b3h5LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5j
cHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHkuY3BwCkBA
IC03MzgsMjAgKzczOCwyMCBAQCBuc0NPUlNMaXN0ZW5lclByb3h5OjpVcGRhdGVDaGFubmVsKG5z
SUNoCiAgIGlmIChvcmlnaW5hbFVSSSAhPSB1cmkpIHsKICAgICBydiA9IG5zQ29udGVudFV0aWxz
OjpHZXRTZWN1cml0eU1hbmFnZXIoKS0+CiAgICAgICBDaGVja0xvYWRVUklXaXRoUHJpbmNpcGFs
KG1SZXF1ZXN0aW5nUHJpbmNpcGFsLCBvcmlnaW5hbFVSSSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOjpTVEFOREFSRCk7CiAgICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgfQogCiAgIGlmICghbUhhc0JlZW5Dcm9zc1NpdGUg
JiYKLSAgICAgIE5TX1NVQ0NFRURFRChtUmVxdWVzdGluZ1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2Fk
KHVyaSwgZmFsc2UpKSAmJgorICAgICAgTlNfU1VDQ0VFREVEKG1SZXF1ZXN0aW5nUHJpbmNpcGFs
LT5DaGVja01heUxvYWQodXJpLCBmYWxzZSwgZmFsc2UpKSAmJgogICAgICAgKG9yaWdpbmFsVVJJ
ID09IHVyaSB8fAogICAgICAgIE5TX1NVQ0NFRURFRChtUmVxdWVzdGluZ1ByaW5jaXBhbC0+Q2hl
Y2tNYXlMb2FkKG9yaWdpbmFsVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlKSkpKSB7CiAgICAg
cmV0dXJuIE5TX09LOwogICB9CiAKICAgLy8gSXQncyBhIGNyb3NzIHNpdGUgbG9hZAogICBtSGFz
QmVlbkNyb3NzU2l0ZSA9IHRydWU7CiAKICAgbnNDU3RyaW5nIHVzZXJwYXNzOwogICB1cmktPkdl
dFVzZXJQYXNzKHVzZXJwYXNzKTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1
bWVudC5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQv
YmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50
LmNwcApAQCAtMTA0OSwyOCArMTA0OSwyMiBAQCBuc0V4dGVybmFsUmVzb3VyY2VNYXA6OlBlbmRp
bmdMb2FkOjpTdGFyCiAKICAgbnNJUHJpbmNpcGFsKiByZXF1ZXN0aW5nUHJpbmNpcGFsID0gYVJl
cXVlc3RpbmdOb2RlLT5Ob2RlUHJpbmNpcGFsKCk7CiAKICAgbnNyZXN1bHQgcnYgPSBuc0NvbnRl
bnRVdGlsczo6R2V0U2VjdXJpdHlNYW5hZ2VyKCktPgogICAgIENoZWNrTG9hZFVSSVdpdGhQcmlu
Y2lwYWwocmVxdWVzdGluZ1ByaW5jaXBhbCwgYVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSVNjcmlwdFNlY3VyaXR5TWFuYWdlcjo6U1RBTkRBUkQpOwogICBOU19FTlNVUkVf
U1VDQ0VTUyhydiwgcnYpOwogICAKLSAgLy8gQWxsb3cgZGF0YSBVUklzIChsZXQgdGhlbSBza2lw
IHRoZSBDaGVja01heUxvYWQgY2FsbCksIHNpbmNlIHdlIHdhbnQKKyAgLy8gQWxsb3cgZGF0YSBV
UklzIGFuZCBvdGhlciBVUkkncyB0aGF0IGluaGVyaXQgdGhlaXIgcHJpbmNpcGFsIGJ5IHBhc3Np
bmcKKyAgLy8gdHJ1ZSBhcyB0aGUgM3JkIGFyZ3VtZW50IG9mIENoZWNrTWF5TG9hZCwgc2luY2Ug
d2Ugd2FudAogICAvLyB0byBhbGxvdyBleHRlcm5hbCByZXNvdXJjZXMgZnJvbSBkYXRhIFVSSXMg
cmVnYXJkbGVzcyBvZiB0aGUgZGlmZmVyZW5jZQogICAvLyBpbiBVUkkgc2NoZW1lLgotICBib29s
IGRvZXNJbmhlcml0U2VjdXJpdHlDb250ZXh0OwotICBydiA9Ci0gICAgTlNfVVJJQ2hhaW5IYXNG
bGFncyhhVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJvdG9jb2xIYW5kbGVyOjpV
UklfSU5IRVJJVFNfU0VDVVJJVFlfQ09OVEVYVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZk
b2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dCk7Ci0gIGlmIChOU19GQUlMRUQocnYpIHx8ICFkb2Vz
SW5oZXJpdFNlY3VyaXR5Q29udGV4dCkgewotICAgIHJ2ID0gcmVxdWVzdGluZ1ByaW5jaXBhbC0+
Q2hlY2tNYXlMb2FkKGFVUkksIHRydWUpOwotICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7
Ci0gIH0KKyAgcnYgPSByZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQoYVVSSSwgdHJ1
ZSwgdHJ1ZSk7CisgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgUFJJbnQxNiBzaG91
bGRMb2FkID0gbnNJQ29udGVudFBvbGljeTo6QUNDRVBUOwogICBydiA9IE5TX0NoZWNrQ29udGVu
dExvYWRQb2xpY3kobnNJQ29udGVudFBvbGljeTo6VFlQRV9PVEhFUiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0aW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YVJlcXVlc3RpbmdOb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHlD
U3RyaW5nKCksIC8vbWltZSBndWVzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNudWxsLCAgICAgICAgIC8vZXh0cmEKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNY
TUxIdHRwUmVxdWVzdC5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zWE1MSHR0cFJlcXVlc3QuY3Bw
Ci0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNYTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvY29udGVu
dC9iYXNlL3NyYy9uc1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTcxMywyOCArMTcxMywxOSBAQCBu
c1hNTEh0dHBSZXF1ZXN0OjpJc1N5c3RlbVhIUigpCiBuc3Jlc3VsdAogbnNYTUxIdHRwUmVxdWVz
dDo6Q2hlY2tDaGFubmVsRm9yQ3Jvc3NTaXRlUmVxdWVzdChuc0lDaGFubmVsKiBhQ2hhbm5lbCkK
IHsKICAgLy8gRmlyc3QgY2hlY2sgaWYgY3Jvc3Mtc2l0ZSByZXF1ZXN0cyBhcmUgZW5hYmxlZC4u
LgogICBpZiAoSXNTeXN0ZW1YSFIoKSkgewogICAgIHJldHVybiBOU19PSzsKICAgfQogCi0gIC8v
IC4uLm9yIGlmIHRoaXMgaXMgYSBzYW1lLW9yaWdpbiByZXF1ZXN0LgotICBpZiAobnNDb250ZW50
VXRpbHM6OkNoZWNrTWF5TG9hZChtUHJpbmNpcGFsLCBhQ2hhbm5lbCkpIHsKLSAgICByZXR1cm4g
TlNfT0s7Ci0gIH0KLQotICAvLyBleGVtcHQgZGF0YSBVUklzIGZyb20gdGhlIHNhbWUgb3JpZ2lu
IGNoZWNrLgotICBuc0NPTVB0cjxuc0lVUkk+IGNoYW5uZWxVUkk7Ci0gIGJvb2wgZGF0YVNjaGVt
ZSA9IGZhbHNlOwotICBpZiAoTlNfU1VDQ0VFREVEKE5TX0dldEZpbmFsQ2hhbm5lbFVSSShhQ2hh
bm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0Fk
ZFJlZnMoY2hhbm5lbFVSSSkpKSAmJgotICAgICAgTlNfU1VDQ0VFREVEKGNoYW5uZWxVUkktPlNj
aGVtZUlzKCJkYXRhIiwgJmRhdGFTY2hlbWUpKSAmJgotICAgICAgZGF0YVNjaGVtZSkgeworICAv
LyBJZiB0aGlzIGlzIGEgc2FtZS1vcmlnaW4gcmVxdWVzdCBvciB0aGUgY2hhbm5lbCdzIFVSSSBp
bmhlcml0cworICAvLyBpdHMgcHJpbmNpcGFsLCBpdCdzIGFsbG93ZWQuCisgIGlmIChuc0NvbnRl
bnRVdGlsczo6Q2hlY2tNYXlMb2FkKG1QcmluY2lwYWwsIGFDaGFubmVsLCB0cnVlKSkgewogICAg
IHJldHVybiBOU19PSzsKICAgfQogCiAgIC8vIFRoaXMgaXMgYSBjcm9zcy1zaXRlIHJlcXVlc3QK
ICAgbVN0YXRlIHw9IFhNTF9IVFRQX1JFUVVFU1RfVVNFX1hTSVRFX0FDOwogCiAgIC8vIENoZWNr
IGlmIHdlIG5lZWQgdG8gZG8gYSBwcmVmbGlnaHQgcmVxdWVzdC4KICAgbnNDT01QdHI8bnNJSHR0
cENoYW5uZWw+IGh0dHBDaGFubmVsID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNoYW5uZWwpOwpkaWZm
IC0tZ2l0IGEvY29udGVudC94Ymwvc3JjL25zWEJMU2VydmljZS5jcHAgYi9jb250ZW50L3hibC9z
cmMvbnNYQkxTZXJ2aWNlLmNwcAotLS0gYS9jb250ZW50L3hibC9zcmMvbnNYQkxTZXJ2aWNlLmNw
cAorKysgYi9jb250ZW50L3hibC9zcmMvbnNYQkxTZXJ2aWNlLmNwcApAQCAtOTI1LDE3ICs5MjUs
MTcgQEAgbnNYQkxTZXJ2aWNlOjpMb2FkQmluZGluZ0RvY3VtZW50SW5mbyhucwogICAgIE5TX0VO
U1VSRV9TVUNDRVNTKHJ2LCBOU19FUlJPUl9YQkxfQkxPQ0tFRCk7CiAKICAgICBpZiAoIUlzU3lz
dGVtT3JDaHJvbWVVUkxQcmluY2lwYWwoYU9yaWdpblByaW5jaXBhbCkpIHsKICAgICAgIC8vIEFs
c28gbWFrZSBzdXJlIHRoYXQgd2UncmUgc2FtZS1vcmlnaW4gd2l0aCB0aGUgYm91bmQgZG9jdW1l
bnQKICAgICAgIC8vIGV4Y2VwdCBpZiB0aGUgc3R5bGVzaGVldCBoYXMgdGhlIHN5c3RlbSBwcmlu
Y2lwYWwuCiAgICAgICBpZiAoIShnQWxsb3dEYXRhVVJJcyAmJiBTY2hlbWVJcyhhQmluZGluZ1VS
SSwgImRhdGEiKSkgJiYKICAgICAgICAgICAhU2NoZW1lSXMoYUJpbmRpbmdVUkksICJjaHJvbWUi
KSkgewogICAgICAgICBydiA9IGFCb3VuZERvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkNoZWNr
TWF5TG9hZChhQmluZGluZ1VSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGZhbHNlKTsKICAgICAgICAg
TlNfRU5TVVJFX1NVQ0NFU1MocnYsIE5TX0VSUk9SX1hCTF9CTE9DS0VEKTsKICAgICAgIH0KIAog
ICAgICAgLy8gRmluYWxseSBjaGVjayBpZiB0aGlzIGRvY3VtZW50IGlzIGFsbG93ZWQgdG8gdXNl
IFhCTCBhdCBhbGwuCiAgICAgICBOU19FTlNVUkVfVFJVRShhQm91bmREb2N1bWVudC0+QWxsb3dY
VUxYQkwoKSwKICAgICAgICAgICAgICAgICAgICAgIE5TX0VSUk9SX1hCTF9CTE9DS0VEKTsKICAg
ICB9CiAgIH0KZGlmZiAtLWdpdCBhL2NvbnRlbnQveG1sL2RvY3VtZW50L3NyYy9uc1hNTERvY3Vt
ZW50LmNwcCBiL2NvbnRlbnQveG1sL2RvY3VtZW50L3NyYy9uc1hNTERvY3VtZW50LmNwcAotLS0g
YS9jb250ZW50L3htbC9kb2N1bWVudC9zcmMvbnNYTUxEb2N1bWVudC5jcHAKKysrIGIvY29udGVu
dC94bWwvZG9jdW1lbnQvc3JjL25zWE1MRG9jdW1lbnQuY3BwCkBAIC0zMjksMTcgKzMyOSwxNyBA
QCBuc1hNTERvY3VtZW50OjpMb2FkKGNvbnN0IG5zQVN0cmluZyYgYVVyCiAgIC8vIHRoYXQgd2Ug
ZG9uJ3QgZW5kIHVwIGluIGEgY2FzZSB3aGVyZSBjb2RlIHdpdGggZWxldmF0ZWQgcHJpdmlsZWdl
cyBpcwogICAvLyBjYWxsaW5nIHVzIGFuZCBjaGFuZ2luZyB0aGUgcHJpbmNpcGFsIG9mIHRoaXMg
ZG9jdW1lbnQuCiAKICAgLy8gRW5mb3JjZSBzYW1lLW9yaWdpbiBldmVuIGZvciBjaHJvbWUgbG9h
ZGVycyB0byBhdm9pZCBzb21lb25lIGFjY2lkZW50YWxseQogICAvLyB1c2luZyBhIGRvY3VtZW50
IHRoYXQgY29udGVudCBoYXMgYSByZWZlcmVuY2UgdG8gYW5kIHR1cm4gdGhhdCBpbnRvIGEKICAg
Ly8gY2hyb21lIGRvY3VtZW50LgogICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IHByaW5jaXBhbCA9
IE5vZGVQcmluY2lwYWwoKTsKICAgaWYgKCFuc0NvbnRlbnRVdGlsczo6SXNTeXN0ZW1QcmluY2lw
YWwocHJpbmNpcGFsKSkgewotICAgIHJ2ID0gcHJpbmNpcGFsLT5DaGVja01heUxvYWQodXJpLCBm
YWxzZSk7CisgICAgcnYgPSBwcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIGZhbHNlLCBmYWxz
ZSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICAgIFBSSW50MTYgc2hvdWxk
TG9hZCA9IG5zSUNvbnRlbnRQb2xpY3k6OkFDQ0VQVDsKICAgICBydiA9IE5TX0NoZWNrQ29udGVu
dExvYWRQb2xpY3kobnNJQ29udGVudFBvbGljeTo6VFlQRV9YTUxIVFRQUkVRVUVTVCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxpbmdEb2MgPyBjYWxsaW5nRG9jLmdldCgpIDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxuc0lEb2N1bWVudCo+KHRoaXMpLApkaWZmIC0t
Z2l0IGEvY29udGVudC94dWwvZG9jdW1lbnQvc3JjL25zWFVMRG9jdW1lbnQuY3BwIGIvY29udGVu
dC94dWwvZG9jdW1lbnQvc3JjL25zWFVMRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQveHVsL2Rv
Y3VtZW50L3NyYy9uc1hVTERvY3VtZW50LmNwcAorKysgYi9jb250ZW50L3h1bC9kb2N1bWVudC9z
cmMvbnNYVUxEb2N1bWVudC5jcHAKQEAgLTI2NTQsMTcgKzI2NTQsMTcgQEAgbnNYVUxEb2N1bWVu
dDo6TG9hZE92ZXJsYXlJbnRlcm5hbChuc0lVUgogCiAgICAgLy8gQ2hyb21lIGRvY3VtZW50cyBh
cmUgYWxsb3dlZCB0byBsb2FkIG92ZXJsYXlzIGZyb20gYW55d2hlcmUuCiAgICAgLy8gSW4gYWxs
IG90aGVyIGNhc2VzLCB0aGUgb3ZlcmxheSBpcyBvbmx5IGFsbG93ZWQgdG8gbG9hZCBpZgogICAg
IC8vIHRoZSBtYXN0ZXIgZG9jdW1lbnQgYW5kIHByb3RvdHlwZSBkb2N1bWVudCBoYXZlIHRoZSBz
YW1lIG9yaWdpbi4KIAogICAgIGJvb2wgZG9jdW1lbnRJc0Nocm9tZSA9IElzQ2hyb21lVVJJKG1E
b2N1bWVudFVSSSk7CiAgICAgaWYgKCFkb2N1bWVudElzQ2hyb21lKSB7CiAgICAgICAgIC8vIE1h
a2Ugc3VyZSB3ZSdyZSBhbGxvd2VkIHRvIGxvYWQgdGhpcyBvdmVybGF5LgotICAgICAgICBydiA9
IE5vZGVQcmluY2lwYWwoKS0+Q2hlY2tNYXlMb2FkKGFVUkksIHRydWUpOworICAgICAgICBydiA9
IE5vZGVQcmluY2lwYWwoKS0+Q2hlY2tNYXlMb2FkKGFVUkksIHRydWUsIGZhbHNlKTsKICAgICAg
ICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgICAgICAgICphRmFpbHVyZUZyb21Db250ZW50
ID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBydjsKICAgICAgICAgfQogICAgIH0KIAogICAg
IC8vIExvb2sgaW4gdGhlIHByb3RvdHlwZSBjYWNoZSBmb3IgdGhlIHByb3RvdHlwZSBkb2N1bWVu
dCB3aXRoCiAgICAgLy8gdGhlIHNwZWNpZmllZCBvdmVybGF5IFVSSS4gT25seSB1c2UgdGhlIGNh
Y2hlIGlmIHRoZSBjb250YWluaW5nCmRpZmYgLS1naXQgYS9jb250ZW50L3h1bC90ZW1wbGF0ZXMv
c3JjL25zWFVMVGVtcGxhdGVCdWlsZGVyLmNwcCBiL2NvbnRlbnQveHVsL3RlbXBsYXRlcy9zcmMv
bnNYVUxUZW1wbGF0ZUJ1aWxkZXIuY3BwCi0tLSBhL2NvbnRlbnQveHVsL3RlbXBsYXRlcy9zcmMv
bnNYVUxUZW1wbGF0ZUJ1aWxkZXIuY3BwCisrKyBiL2NvbnRlbnQveHVsL3RlbXBsYXRlcy9zcmMv
bnNYVUxUZW1wbGF0ZUJ1aWxkZXIuY3BwCkBAIC0xMzIzLDE3ICsxMzIzLDE3IEBAIG5zWFVMVGVt
cGxhdGVCdWlsZGVyOjpMb2FkRGF0YVNvdXJjZVVybHMKIAogICAgICAgICBuc0NPTVB0cjxuc0lV
Ukk+IHVyaTsKICAgICAgICAgcnYgPSBOU19OZXdVUkkoZ2V0dGVyX0FkZFJlZnModXJpKSwgdXJp
U3RyKTsKICAgICAgICAgaWYgKE5TX0ZBSUxFRChydikgfHwgIXVyaSkKICAgICAgICAgICAgIGNv
bnRpbnVlOyAvLyBOZWNrbyB3aWxsIGJhcmYgaWYgb3VyIFVSSSBpcyB3ZWlyZAogCiAgICAgICAg
IC8vIGRvbid0IGFkZCB0aGUgdXJpIHRvIHRoZSBsaXN0IGlmIHRoZSBkb2N1bWVudCBpcyBub3Qg
YWxsb3dlZCB0bwogICAgICAgICAvLyBsb2FkIGl0Ci0gICAgICAgIGlmICghaXNUcnVzdGVkICYm
IE5TX0ZBSUxFRChkb2NQcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIHRydWUpKSkKKyAgICAg
ICAgaWYgKCFpc1RydXN0ZWQgJiYgTlNfRkFJTEVEKGRvY1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2Fk
KHVyaSwgdHJ1ZSwgZmFsc2UpKSkKICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICB1cmlM
aXN0LT5BcHBlbmRFbGVtZW50KHVyaSwgZmFsc2UpOwogICAgIH0KIAogICAgIG5zQ09NUHRyPG5z
SURPTU5vZGU+IHJvb3ROb2RlID0gZG9fUXVlcnlJbnRlcmZhY2UobVJvb3QpOwogICAgIHJ2ID0g
bVF1ZXJ5UHJvY2Vzc29yLT5HZXREYXRhc291cmNlKHVyaUxpc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcm9vdE5vZGUsCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9i
YXNlL25zRG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9k
b2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVs
bC5jcHAKQEAgLTk5MjksMTcgKzk5MjksMTcgQEAgbnNEb2NTaGVsbDo6QWRkU3RhdGUobnNJVmFy
aWFudCAqYURhdGEsIAogCiAgICAgICAgICAgICBpZiAoIWRvY1NjcmlwdE9iaikgewogICAgICAg
ICAgICAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IHByaW5jaXBhbCA9IGRvY1Nj
cmlwdE9iai0+R2V0UHJpbmNpcGFsKCk7CiAKICAgICAgICAgICAgIGlmICghcHJpbmNpcGFsIHx8
Ci0gICAgICAgICAgICAgICAgTlNfRkFJTEVEKHByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld1VS
SSwgdHJ1ZSkpKSB7CisgICAgICAgICAgICAgICAgTlNfRkFJTEVEKHByaW5jaXBhbC0+Q2hlY2tN
YXlMb2FkKG5ld1VSSSwgdHJ1ZSwgZmFsc2UpKSkgewogCiAgICAgICAgICAgICAgICAgcmV0dXJu
IE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAobUN1cnJlbnRVUkkpIHsKICAgICAgICAgICAgIG1DdXJyZW50VVJJLT5FcXVh
bHMobmV3VVJJLCAmZXF1YWxVUklzKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZG9tL3dvcmtl
cnMvU2NyaXB0TG9hZGVyLmNwcCBiL2RvbS93b3JrZXJzL1NjcmlwdExvYWRlci5jcHAKLS0tIGEv
ZG9tL3dvcmtlcnMvU2NyaXB0TG9hZGVyLmNwcAorKysgYi9kb20vd29ya2Vycy9TY3JpcHRMb2Fk
ZXIuY3BwCkBAIC0yOTYsMjEgKzI5NiwyMiBAQCBwdWJsaWM6CiAgICAgICAvLyBJZiB0aGlzIHNj
cmlwdCBsb2FkZXIgaXMgYmVpbmcgdXNlZCB0byBtYWtlIGEgbmV3IHdvcmtlciB0aGVuIHdlIG5l
ZWQKICAgICAgIC8vIHRvIGRvIGEgc2FtZS1vcmlnaW4gY2hlY2suIE90aGVyd2lzZSB3ZSBuZWVk
IHRvIGNsZWFyIHRoZSBsb2FkIHdpdGggdGhlCiAgICAgICAvLyBzZWN1cml0eSBtYW5hZ2VyLgog
ICAgICAgaWYgKG1Jc1dvcmtlclNjcmlwdCkgewogICAgICAgICBuc0NTdHJpbmcgc2NoZW1lOwog
ICAgICAgICBydiA9IHVyaS0+R2V0U2NoZW1lKHNjaGVtZSk7CiAgICAgICAgIE5TX0VOU1VSRV9T
VUNDRVNTKHJ2LCBydik7CiAKLSAgICAgICAgLy8gV2UgZXhlbXB0IGRhdGEgVVJMcyBmcm9tIHRo
ZSBzYW1lIG9yaWdpbiBjaGVjay4KLSAgICAgICAgaWYgKCFzY2hlbWUuRXF1YWxzTGl0ZXJhbCgi
ZGF0YSIpKSB7Ci0gICAgICAgICAgcnYgPSBwcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIGZh
bHNlKTsKLSAgICAgICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwotICAgICAgICB9Cisg
ICAgICAgIC8vIFdlIHBhc3MgdHJ1ZSBhcyB0aGUgM3JkIGFyZ3VtZW50IHRvIGNoZWNrTWF5TG9h
ZCBoZXJlLgorICAgICAgICAvLyBUaGlzIGFsbG93cyB3b3JrZXJzIGluIHNhbmRib3hlZCBkb2N1
bWVudHMgdG8gbG9hZCBkYXRhIFVSTHMKKyAgICAgICAgLy8gKGFuZCBvdGhlciBVUkxzIHRoYXQg
aW5oZXJpdCB0aGVpciBwcmluY2lwYWwgZnJvbSB0aGVpcgorICAgICAgICAvLyBjcmVhdG9yLikK
KyAgICAgICAgcnYgPSBwcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIGZhbHNlLCB0cnVlKTsK
KyAgICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgICAgIH0KICAgICAgIGVsc2Ug
ewogICAgICAgICBydiA9IHNlY01hbi0+Q2hlY2tMb2FkVVJJV2l0aFByaW5jaXBhbChwcmluY2lw
YWwsIHVyaSwgMCk7CiAgICAgICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgICAgICB9
CiAKICAgICAgIC8vIFdlIG5lZWQgdG8ga25vdyB3aGljaCBpbmRleCB3ZSdyZSBvbiBpbiBPblN0
cmVhbUNvbXBsZXRlIHNvIHdlIGtub3cKICAgICAgIC8vIHdoZXJlIHRvIHB1dCB0aGUgcmVzdWx0
LgpAQCAtNDgzLDE5ICs0ODQsMTkgQEAgcHVibGljOgogICAgICAgICAgIHJldHVybiBOU19FUlJP
Ul9ET01fQkFEX1VSSTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZSAgewogICAgICAg
ICBuc0NTdHJpbmcgc2NoZW1lOwogICAgICAgICBydiA9IGZpbmFsVVJJLT5HZXRTY2hlbWUoc2No
ZW1lKTsKICAgICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAotICAgICAgICAvLyBX
ZSBleGVtcHQgZGF0YSB1cmxzIGFnYWluLgotICAgICAgICBpZiAoIXNjaGVtZS5FcXVhbHNMaXRl
cmFsKCJkYXRhIikgJiYKLSAgICAgICAgICAgIE5TX0ZBSUxFRChsb2FkUHJpbmNpcGFsLT5DaGVj
a01heUxvYWQoZmluYWxVUkksIGZhbHNlKSkpIHsKKyAgICAgICAgLy8gV2UgZXhlbXB0IGRhdGEg
dXJscyBhbmQgb3RoZXIgVVJJJ3MgdGhhdCBpbmhlcml0IHRoZWlyCisgICAgICAgIC8vIHByaW5j
aXBhbCBhZ2Fpbi4KKyAgICAgICAgaWYgKE5TX0ZBSUxFRChsb2FkUHJpbmNpcGFsLT5DaGVja01h
eUxvYWQoZmluYWxVUkksIGZhbHNlLCB0cnVlKSkpIHsKICAgICAgICAgICByZXR1cm4gTlNfRVJS
T1JfRE9NX0JBRF9VUkk7CiAgICAgICAgIH0KICAgICAgIH0KIAogICAgICAgbVdvcmtlclByaXZh
dGUtPlNldFByaW5jaXBhbChjaGFubmVsUHJpbmNpcGFsKTsKICAgICB9CiAKICAgICByZXR1cm4g
TlNfT0s7CmRpZmYgLS1naXQgYS9sYXlvdXQvc3R5bGUvTG9hZGVyLmNwcCBiL2xheW91dC9zdHls
ZS9Mb2FkZXIuY3BwCi0tLSBhL2xheW91dC9zdHlsZS9Mb2FkZXIuY3BwCisrKyBiL2xheW91dC9z
dHlsZS9Mb2FkZXIuY3BwCkBAIC0xNTQxLDE3ICsxNTQxLDE3IEBAIExvYWRlcjo6TG9hZFNoZWV0
KFNoZWV0TG9hZERhdGEqIGFMb2FkRGEKICAgaWYgKGFMb2FkRGF0YS0+bUxvYWRlclByaW5jaXBh
bCkgewogICAgIGJvb2wgaW5oZXJpdDsKICAgICBydiA9IE5TX1VSSUNoYWluSGFzRmxhZ3MoYUxv
YWREYXRhLT5tVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcm90b2NvbEhh
bmRsZXI6OlVSSV9JTkhFUklUU19TRUNVUklUWV9DT05URVhULAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmaW5oZXJpdCk7CiAgICAgaWYgKChOU19TVUNDRUVERUQocnYpICYmIGluaGVy
aXQpIHx8CiAgICAgICAgIChuc0NvbnRlbnRVdGlsczo6VVJJSXNMb2NhbEZpbGUoYUxvYWREYXRh
LT5tVVJJKSAmJgogICAgICAgICAgTlNfU1VDQ0VFREVEKGFMb2FkRGF0YS0+bUxvYWRlclByaW5j
aXBhbC0+Ci0gICAgICAgICAgICAgICAgICAgICAgQ2hlY2tNYXlMb2FkKGFMb2FkRGF0YS0+bVVS
SSwgZmFsc2UpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBDaGVja01heUxvYWQoYUxvYWRE
YXRhLT5tVVJJLCBmYWxzZSwgZmFsc2UpKSkpIHsKICAgICAgIGNoYW5uZWwtPlNldE93bmVyKGFM
b2FkRGF0YS0+bUxvYWRlclByaW5jaXBhbCk7CiAgICAgfQogICB9CiAKICAgLy8gV2UgZG9uJ3Qg
aGF2ZSB0byBob2xkIG9uIHRvIHRoZSBzdHJlYW0gbG9hZGVyLiAgVGhlIG93bmVyc2hpcAogICAv
LyBtb2RlbCBpczogTmVja28gb3ducyB0aGUgc3RyZWFtIGxvYWRlciwgd2hpY2ggb3ducyB0aGUg
bG9hZCBkYXRhLAogICAvLyB3aGljaCBvd25zIHVzCiAgIG5zQ09NUHRyPG5zSVVuaWNoYXJTdHJl
YW1Mb2FkZXI+IHN0cmVhbUxvYWRlcjsKZGlmZiAtLWdpdCBhL3JkZi9iYXNlL3NyYy9uc1JERlhN
TERhdGFTb3VyY2UuY3BwIGIvcmRmL2Jhc2Uvc3JjL25zUkRGWE1MRGF0YVNvdXJjZS5jcHAKLS0t
IGEvcmRmL2Jhc2Uvc3JjL25zUkRGWE1MRGF0YVNvdXJjZS5jcHAKKysrIGIvcmRmL2Jhc2Uvc3Jj
L25zUkRGWE1MRGF0YVNvdXJjZS5jcHAKQEAgLTg4MiwxOSArODgyLDE5IEBAIFJERlhNTERhdGFT
b3VyY2VJbXBsOjpBc3luY09uQ2hhbm5lbFJlZGkKIAogICAgIG5zQ09NUHRyPG5zSVVSST4gbmV3
VVJJOwogICAgIGFOZXdDaGFubmVsLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMobmV3VVJJKSk7CiAg
ICAgbnNDT01QdHI8bnNJVVJJPiBuZXdPcmlnaW5hbFVSSTsKICAgICBhTmV3Q2hhbm5lbC0+R2V0
T3JpZ2luYWxVUkkoZ2V0dGVyX0FkZFJlZnMobmV3T3JpZ2luYWxVUkkpKTsKIAogICAgIE5TX0VO
U1VSRV9TVEFURShvbGRQcmluY2lwYWwgJiYgbmV3VVJJICYmIG5ld09yaWdpbmFsVVJJKTsKIAot
ICAgIHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJLCBmYWxzZSk7CisgICAg
cnYgPSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChuZXdVUkksIGZhbHNlLCBmYWxzZSk7CiAg
ICAgaWYgKE5TX1NVQ0NFRURFRChydikgJiYgbmV3T3JpZ2luYWxVUkkgIT0gbmV3VVJJKSB7Ci0g
ICAgICAgIHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3T3JpZ2luYWxVUkksIGZh
bHNlKTsKKyAgICAgICAgcnYgPSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChuZXdPcmlnaW5h
bFVSSSwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkKICAg
ICAgICAgcmV0dXJuIHJ2OwogCiAgICAgY2ItPk9uUmVkaXJlY3RWZXJpZnlDYWxsYmFjayhOU19P
Syk7CiAgICAgcmV0dXJuIE5TX09LOwogfQo=
</data>
<flag name="review"
          id="525596"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>633209</attachid>
            <date>2012-06-14 11:35:02 -0700</date>
            <delta_ts>2012-06-15 17:38:43 -0700</delta_ts>
            <desc>iframe sandbox v16</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>51827</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOGNmNTQyM2IwMjEzOTZlOTZjMDk2NDQzNDMx
ZTBlMGIwZjBjNmQ2OQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgx
NiwxNiArODE2LDI3IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhU2FuZGJveEF0dHIp
OworCisKKyAgLyoqCiAgICAqIEZpbGwgKHdpdGggdGhlIHBhcmFtZXRlcnMgZ2l2ZW4pIHRoZSBs
b2NhbGl6ZWQgc3RyaW5nIG5hbWVkIHxhS2V5fCBpbgogICAgKiBwcm9wZXJ0aWVzIGZpbGUgfGFG
aWxlfC4KICAgICovCiBwcml2YXRlOgogICBzdGF0aWMgbnNyZXN1bHQgRm9ybWF0TG9jYWxpemVk
U3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiogYVBhcmFtcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhUGFyYW1zTGVuZ3RoLApAQCAtMTkz
NSw0MiArMTk0Niw0NCBAQCBwdWJsaWM6CiAgICAqIGZyb20gdGhlIGRvY3VtZW50IGl0IGNvbWVz
IGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQgVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRl
eHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsKIAogICAvKioKICAgICogU2V0IHRoZSBn
aXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRoZSBnaXZlbiBjaGFubmVsLCBpZgogICAg
KiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBvZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwg
bWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JBYm91dEJsYW5rIGlzIHRydWUsIHRoZW4g
YWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAgb24gaXQuCi0g
ICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LiBJZiBhRm9yY2VPd25lciBpcyB0
cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQgb24gdGhlIGNoYW5uZWwsIGV2ZW4gaWYg
dGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAorICAgKiBmcm9tIHRoZSBjaGFubmVsLgog
ICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIgdGhlIHByaW5jaXBhbCB3YXMgc2V0IHVw
IGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5lbC4KICAgICovCiAgIHN0YXRpYyBib29s
IFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lciA9IGZhbHNlKTsKIAogICBzdGF0
aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhLAogICAgICAgICAg
ICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJhc2U2NFN0cmluZyk7CiAKICAgc3RhdGlj
IG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBhQXNjaWlTdHJpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURhdGEpOwogCiAgIC8qKiBJZiBhSlNBcnJh
eSBpcyBhIEphdmFzY3JpcHQgYXJyYXksIHRoaXMgbWV0aG9kIGl0ZXJhdGVzIG92ZXIgaXRzCiAg
ICAqICBlbGVtZW50cyBhbmQgYXBwZW5kcyB2YWx1ZXMgdG8gYVJldFZhbCBhcyBuc0lBdG9tcy4K
ICAgICogIEB0aHJvdyBOU19FUlJPUl9JTExFR0FMX1ZBTFVFIGlmIGFKU0FycmF5IGlzbid0IGEg
SlMgYXJyYXkuCiAgICAqLyAKICAgc3RhdGljIG5zcmVzdWx0IEpTQXJyYXlUb0F0b21BcnJheShK
U0NvbnRleHQqIGFDeCwgY29uc3QgSlM6OlZhbHVlJiBhSlNBcnJheSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0NPTUFycmF5PG5zSUF0b20+JiBhUmV0VmFsKTsKIAog
ICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IHBhc3NlZCBpbiBw
YXJhbWV0ZXIgaGFzIHRoZSBhdXRvY29tcGxldGUKLSAgICogZnVuY3Rpb25uYWxpdHkgZW5hYmxl
ZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9ybSBvd25lci4KKyAgICogZnVuY3Rp
b25hbGl0eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVy
LgogICAgKiBOT1RFOiB0aGUgY2FsbGVyIGhhcyB0byBtYWtlIHN1cmUgYXV0b2NvbXBsZXRlIG1h
a2VzIHNlbnNlIGZvciB0aGUKICAgICogZWxlbWVudCdzIHR5cGUuCiAgICAqCiAgICAqIEBwYXJh
bSBhSW5wdXQgdGhlIGlucHV0IGVsZW1lbnQgdG8gY2hlY2suIE5PVEU6IGFJbnB1dCBjYW4ndCBi
ZSBudWxsLgogICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgaGFzIGF1dG9j
b21wbGV0ZSBlbmFibGVkLgogICAgKi8KICAgc3RhdGljIGJvb2wgSXNBdXRvY29tcGxldGVFbmFi
bGVkKG5zSURPTUhUTUxJbnB1dEVsZW1lbnQqIGFJbnB1dCk7CiAKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9j
dW1lbnQuaAotLS0gYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysrIGIvY29u
dGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCkBAIC04NywxOCArODcsMTggQEAgY2xhc3Mg
TG9hZGVyOwogCiBuYW1lc3BhY2UgZG9tIHsKIGNsYXNzIExpbms7CiBjbGFzcyBFbGVtZW50Owog
fSAvLyBuYW1lc3BhY2UgZG9tCiB9IC8vIG5hbWVzcGFjZSBtb3ppbGxhCiAKICNkZWZpbmUgTlNf
SURPQ1VNRU5UX0lJRCBcCi17IDB4MDc3ZGNmZjAsIDB4NDAwZCwgMHg0ZDNjLCBcCi0gIHsgMHhi
ZCwgMHg0ZCwgMHg1ZiwgMHhkNSwgMHhlMSwgMHhhNiwgMHg2MywgMHgwNyB9IH0KK3sgMHg1N2Zl
NDRhZSwgMHg2NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAweGE3LCAweDQz
LCAweDI4LCAweGJlLCAweDg2IH0gfQogCiAvLyBGbGFnIGZvciBBZGRTdHlsZVNoZWV0KCkuCiAj
ZGVmaW5lIE5TX1NUWUxFU0hFRVRfRlJPTV9DQVRBTE9HICAgICAgICAgICAgICAgICgxIDw8IDAp
CiAKIC8vIEVudW0gZm9yIHJlcXVlc3RpbmcgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZG9jdW1lbnQg
d2hlbiBjcmVhdGluZyBhIGRvYwogZW51bSBEb2N1bWVudEZsYXZvciB7CiAgIERvY3VtZW50Rmxh
dm9yTGVnYWN5R3Vlc3MsIC8vIGNvbXBhdCB3aXRoIG9sZCBjb2RlIHVudGlsIG1hZGUgSFRNTDUt
Y29tcGxpYW50CiAgIERvY3VtZW50Rmxhdm9ySFRNTCwgLy8gSFRNTERvY3VtZW50IHdpdGggSFRN
TG5lc3MgYml0IHNldCB0byB0cnVlCkBAIC00MjYsMTcgKzQyNiwyNiBAQCBwdWJsaWM6CiAgICAq
IGNhbGxlcnMgYXJlIGV4cGVjdGVkIHRvIHRha2UgYWN0aW9uIGFzIG5lZWRlZCBpZiB0aGV5IHdh
bnQgdGhpcwogICAgKiBjaGFuZ2UgdG8gYWN0dWFsbHkgY2hhbmdlIGFueXRoaW5nIGltbWVkaWF0
ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9wdGlv
bnMoUFJVaW50MzIgYUJpZGlPcHRpb25zKQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJpZGlP
cHRpb25zOwogICB9Ci0gIAorCisgIC8qKgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9y
IHRoaXMgZG9jdW1lbnQuCisgICAqIEBzZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBvc3Np
YmxlIGZsYWdzCisgICAqLworICBQUlVpbnQzMiBTYW5kYm94RmxhZ3MoKSBjb25zdAorICB7Cisg
ICAgcmV0dXJuIG1TYW5kYm94RmxhZ3M7CisgIH0KKwogICAvKioKICAgICogQWNjZXNzIEhUVFAg
aGVhZGVyIGRhdGEgKHRoaXMgbWF5IGFsc28gZ2V0IHNldCBmcm9tIG90aGVyCiAgICAqIHNvdXJj
ZXMsIGxpa2UgSFRNTCBNRVRBIHRhZ3MpLgogICAgKi8KICAgdmlydHVhbCB2b2lkIEdldEhlYWRl
ckRhdGEobnNJQXRvbSogYUhlYWRlckZpZWxkLCBuc0FTdHJpbmcmIGFEYXRhKSBjb25zdCA9IDA7
CiAgIHZpcnR1YWwgdm9pZCBTZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFoZWFkZXJGaWVsZCwgY29u
c3QgbnNBU3RyaW5nJiBhRGF0YSkgPSAwOwogCiAgIC8qKgpAQCAtMTg0MSwxNiArMTg1MCwyMSBA
QCBwcm90ZWN0ZWQ6CiAgIC8vIElmIG1Jc1N0YXRpY0RvY3VtZW50IGlzIHRydWUsIG1PcmlnaW5h
bERvY3VtZW50IHBvaW50cyB0byB0aGUgb3JpZ2luYWwKICAgLy8gZG9jdW1lbnQuCiAgIG5zQ09N
UHRyPG5zSURvY3VtZW50PiBtT3JpZ2luYWxEb2N1bWVudDsKIAogICAvLyBUaGUgYmlkaSBvcHRp
b25zIGZvciB0aGlzIGRvY3VtZW50LiAgV2hhdCB0aGlzIGJpdGZpZWxkIG1lYW5zIGlzCiAgIC8v
IGRlZmluZWQgaW4gbnNCaWRpVXRpbHMuaAogICBQUlVpbnQzMiBtQmlkaU9wdGlvbnM7CiAKKyAg
Ly8gVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3VtZW50LiBUaGVzZSByZWZsZWN0IHRoZSB2
YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2YgdGhlCisgIC8vIGFzc29jaWF0ZWQgSUZS
QU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZiBleGlzdGVudC4gVGhlc2UgYXJlIHNl
dCBhdCBsb2FkIHRpbWUgYW5kCisgIC8vIGFyZSBpbW11dGFibGUgLSBzZWUgbnNTYW5kYm94Rmxh
Z3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICBQUlVpbnQzMiBtU2FuZGJveEZsYWdzOwor
CiAgIG5zQ1N0cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnNDU3RyaW5nIG1D
b250ZW50VHlwZTsKIHByb3RlY3RlZDoKIAogICAvLyBUaGUgZG9jdW1lbnQncyBzZWN1cml0eSBp
bmZvCiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VjdXJpdHlJbmZvOwogCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMv
bnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMu
Y3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC0xNzYsMTYg
KzE3NiwxNyBAQCBzdGF0aWMgTlNfREVGSU5FX0NJRChrWFRGU2VydmljZUNJRCwgTlNfCiAKICNp
bmNsdWRlICJuc1dyYXBwZXJDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJuc0lET01Eb2N1bWVu
dFR5cGUuaCIKICNpbmNsdWRlICJuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXIuaCIKIAogI2luY2x1
ZGUgIm5zSUNoYXJzZXREZXRlY3Rvci5oIgogI2luY2x1ZGUgIm5zSUNoYXJzZXREZXRlY3Rpb25P
YnNlcnZlci5oIgogI2luY2x1ZGUgIm5zSVBsYXRmb3JtQ2hhcnNldC5oIgorI2luY2x1ZGUgIm5z
U2FuZGJveEZsYWdzLmgiCiAKIGV4dGVybiAiQyIgaW50IE1PWl9YTUxUcmFuc2xhdGVFbnRpdHko
Y29uc3QgY2hhciogcHRyLCBjb25zdCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBuZXh0LCBQUlVuaWNoYXIqIHJlc3VsdCk7CiBl
eHRlcm4gIkMiIGludCBNT1pfWE1MQ2hlY2tRTmFtZShjb25zdCBjaGFyKiBwdHIsIGNvbnN0IGNo
YXIqIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuc19hd2FyZSwg
Y29uc3QgY2hhcioqIGNvbG9uKTsKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVz
aW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CkBAIC04ODIsMTYgKzg4Myw2MiBAQCBuc0Nv
bnRlbnRVdGlsczo6R2V0UGFyc2VyU2VydmljZSgpCiAgICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0
U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwgJnNQYXJzZXJTZXJ2aWNlKTsKICAgICBpZiAoTlNf
RkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNlclNlcnZpY2UgPSBuc251bGw7CiAgICAgfQogICB9
CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNlOwogfQorLyoqCisgKiBBIGhlbHBlciBmdW5jdGlv
biB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICog
YSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1c2Vk
IGludGVybmFsbHkuCisgKgorICogQHBhcmFtIGFBdHRyaWJ1dGUgICAgdGhlIHZhbHVlIG9mIHRo
ZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJldHVybiAgICAgICAgICAgICAgdGhlIHNldCBvZiBm
bGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0
ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBhU2FuZGJveEF0dHJWYWx1ZSkKK3sKKyAgLy8gSWYg
dGhlcmUncyBhIHNhbmRib3ggYXR0cmlidXRlIGF0IGFsbCAoYW5kIHRoZXJlIGlzIGlmIHRoaXMg
aXMgYmVpbmcKKyAgLy8gY2FsbGVkKSwgc3RhcnQgb2ZmIGJ5IHNldHRpbmcgYWxsIHRoZSByZXN0
cmljdGlvbiBmbGFncy4KKyAgUFJVaW50MzIgb3V0ID0gU0FOREJPWEVEX05BVklHQVRJT04gfAor
ICAgIFNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FUSU9OIHwKKyAgICBTQU5EQk9YRURfUExVR0lO
UyB8IFNBTkRCT1hFRF9PUklHSU4gfAorICAgIFNBTkRCT1hFRF9GT1JNUyB8IFNBTkRCT1hFRF9T
Q1JJUFRTIHwKKyAgICBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTOworCisgIGlmICghYVNh
bmRib3hBdHRyVmFsdWUuSXNFbXB0eSgpKSB7CisgICAgLy8gVGhlIHNlcGFyYXRvciBvcHRpb25h
bCBmbGFnIGlzIHVzZWQgYmVjYXVzZSB0aGUgSFRNTDUgc3BlYyBzYXlzIGFueQorICAgIC8vIHdo
aXRlc3BhY2UgaXMgb2sgYXMgYSBzZXBhcmF0b3IsIHdoaWNoIGlzIHdoYXQgdGhpcyBkb2VzLgor
ICAgIEhUTUxTcGxpdE9uU3BhY2VzVG9rZW5pemVyIHRva2VuaXplcihhU2FuZGJveEF0dHJWYWx1
ZSwgJyAnLAorICAgICAgbnNDaGFyU2VwYXJhdGVkVG9rZW5pemVyVGVtcGxhdGU8bnNDb250ZW50
VXRpbHM6OklzSFRNTFdoaXRlc3BhY2U+OjpTRVBBUkFUT1JfT1BUSU9OQUwpOworCisgICAgd2hp
bGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKKyAgICAgIG5zRGVwZW5kZW50U3Vic3Ry
aW5nIHRva2VuID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworCisgICAgICBpZiAodG9rZW4uTG93
ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7CisgICAgICAgIG91dCAmPSB+
U0FOREJPWEVEX1NDUklQVFM7CisgICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFs
c0xpdGVyYWwoImFsbG93LXNhbWUtb3JpZ2luIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9Y
RURfT1JJR0lOOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFs
KCJhbGxvdy1mb3JtcyIpKSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX0ZPUk1TOworICAg
ICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRz
IikpIHsKKyAgICAgICAgLy8gYWxsb3ctc2NyaXB0cyByZW1vdmVzIGJvdGggU0FOREJPWEVEX1ND
UklQVFMgYW5kCisgICAgICAgIC8vIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMuCisgICAg
ICAgIG91dCAmPSB+U0FOREJPWEVEX1NDUklQVFM7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVE
X0FVVE9NQVRJQ19GRUFUVVJFUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1
YWxzTGl0ZXJhbCgiYWxsb3ctdG9wLW5hdmlnYXRpb24iKSkgeworICAgICAgICBvdXQgJj0gflNB
TkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FUSU9OOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJl
dHVybiBvdXQ7Cit9CiAKICNpZmRlZiBNT1pfWFRGCiBuc0lYVEZTZXJ2aWNlKgogbnNDb250ZW50
VXRpbHM6OkdldFhURlNlcnZpY2UoKQogewogICBpZiAoIXNYVEZTZXJ2aWNlKSB7CiAgICAgbnNy
ZXN1bHQgcnYgPSBDYWxsR2V0U2VydmljZShrWFRGU2VydmljZUNJRCwgJnNYVEZTZXJ2aWNlKTsK
ICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkgewpAQCAtNjUzOCwxNyArNjU4NSwxOCBAQCBuc0NvbnRl
bnRVdGlsczo6VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFSZXN1bHQpOwogfQogCiAvLyBzdGF0aWMKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpT
ZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIpCiB7CiAgIC8vCiAg
IC8vIFNldCB0aGUgb3duZXIgb2YgdGhlIGNoYW5uZWwsIGJ1dCBvbmx5IGZvciBjaGFubmVscyB0
aGF0IGNhbid0CiAgIC8vIHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQuCiAgIC8v
CiAgIC8vIFhYWDogSXQgc2VlbXMgd3JvbmcgdGhhdCB0aGUgb3duZXIgaXMgaWdub3JlZCAtIGV2
ZW4gaWYgb25lIGlzCiAgIC8vICAgICAgc3VwcGxpZWQpIHVubGVzcyB0aGUgVVJJIGlzIGphdmFz
Y3JpcHQgb3IgZGF0YSBvciBhYm91dDpibGFuay4KICAgLy8gWFhYOiBJZiB0aGlzIGlzIGV2ZXIg
Y2hhbmdlZCwgY2hlY2sgYWxsIGNhbGxlcnMgZm9yIHdoYXQgb3duZXJzCkBAIC02NTU2LDIzICs2
NjA0LDMzIEBAIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmkKICAgLy8g
ICAgICBjb21tZW50cyBpbiBuc0RvY1NoZWxsOjpMb2FkVVJJIHdoZXJlIHdlIGZhbGwgYmFjayBv
bgogICAvLyAgICAgIGluaGVyaXRpbmcgdGhlIG93bmVyIGlmIGNhbGxlZCBmcm9tIGNocm9tZS4g
IFRoYXQgd291bGQgYmUKICAgLy8gICAgICB2ZXJ5IHdyb25nIGlmIHRoaXMgY29kZSBjaGFuZ2Vk
IGFueXRoaW5nIGJ1dCBjaGFubmVscyB0aGF0CiAgIC8vICAgICAgY2FuJ3QgcHJvdmlkZSB0aGVp
ciBvd24gc2VjdXJpdHkgY29udGV4dCEKICAgLy8KICAgLy8gICAgICAoQ3VycmVudGx5IGNocm9t
ZSBVUklzIHNldCB0aGUgb3duZXIgd2hlbiB0aGV5IGFyZSBjcmVhdGVkIQogICAvLyAgICAgIFNv
IHNldHRpbmcgYSBOVUxMIG93bmVyIHdvdWxkIGJlIGJhZCEpCiAgIC8vCisgIC8vIElmIGFGb3Jj
ZU93bmVyIGlzIHRydWUsIHRoZSBvd25lciB3aWxsIGJlIHNldCwgZXZlbiBmb3IgYSBjaGFubmVs
IHRoYXQKKyAgLy8gY2FuIHByb3ZpZGUgaXRzIG93biBzZWN1cml0eSBjb250ZXh0LiBUaGlzIGlz
IHVzZWQgZm9yIHRoZSBIVE1MNSBJRlJBTUUKKyAgLy8gc2FuZGJveCBhdHRyaWJ1dGUsIHNvIHdl
IGNhbiBmb3JjZSB0aGUgY2hhbm5lbCAoYW5kIGl0cyBkb2N1bWVudCkgdG8KKyAgLy8gZXhwbGlj
aXRseSBoYXZlIGEgbnVsbCBwcmluY2lwYWwuCiAgIGJvb2wgaW5oZXJpdDsKICAgLy8gV2UgZXhw
ZWN0IFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0IHRvIHJldHVybiBzdWNjZXNzIGZvciBhbgog
ICAvLyBhYm91dDpibGFuayBVUkksIHNvIGRvbid0IGNhbGwgTlNfSXNBYm91dEJsYW5rKCkgaWYg
dGhpcyBjYWxsIGZhaWxzLgogICAvLyBUaGlzIGNvbmRpdGlvbiBuZWVkcyB0byBtYXRjaCB0aGUg
b25lIGluIG5zRG9jU2hlbGw6OkludGVybmFsTG9hZCB3aGVyZQogICAvLyB3ZSdyZSBjaGVja2lu
ZyBmb3IgdGhpbmdzIHRoYXQgd2lsbCB1c2UgdGhlIG93bmVyLgotICBpZiAoTlNfU1VDQ0VFREVE
KFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KGFVUkksICZpbmhlcml0KSkgJiYKLSAgICAgIChp
bmhlcml0IHx8IChhU2V0VXBGb3JBYm91dEJsYW5rICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkp
KSB7CisgIGlmIChhRm9yY2VPd25lciB8fCAoKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3Vy
aXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYmCisgICAgICAoaW5oZXJpdCB8fCAoYVNldFVw
Rm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkpKSB7CisgICAgLy8gQmUg
Y2VydGFpbiB0aGF0IGFGb3JjZU93bmVyIGlzIG9ubHkgc2V0IGZvciBudWxsIHByaW5jaXBhbHMK
KyAgICBpZiAoYUZvcmNlT3duZXIpIHsKKyAgICAgIG5zQ09NUHRyPG5zSVVSST4gb3duZXJVUkk7
CisgICAgICBuc3Jlc3VsdCBydiA9IGFMb2FkaW5nUHJpbmNpcGFsLT5HZXRVUkkoZ2V0dGVyX0Fk
ZFJlZnMob3duZXJVUkkpKTsKKyAgICAgIE1PWl9BU1NFUlQoTlNfU1VDQ0VFREVEKHJ2KSAmJiBT
Y2hlbWVJcyhvd25lclVSSSwgTlNfTlVMTFBSSU5DSVBBTF9TQ0hFTUUpKTsKKyAgICB9CiAgICAg
YUNoYW5uZWwtPlNldE93bmVyKGFMb2FkaW5nUHJpbmNpcGFsKTsKICAgICByZXR1cm4gdHJ1ZTsK
ICAgfQogCiAgIC8vCiAgIC8vIGZpbGU6IHVyaSBzcGVjaWFsLWNhc2luZwogICAvLwogICAvLyBJ
ZiB0aGlzIGlzIGEgZmlsZTogbG9hZCBvcGVuZWQgZnJvbSBhbm90aGVyIGZpbGU6IHRoZW4gaXQg
bWF5IG5lZWQKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAgYi9j
b250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNE
b2N1bWVudC5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcApAQCAtMjM2
MywxNiArMjM2MywyNSBAQCBuc0RvY3VtZW50OjpTdGFydERvY3VtZW50TG9hZChjb25zdCBjaGFy
CiAgICAgRmluZENoYXJJblJlYWRhYmxlKCc7Jywgc2VtaWNvbG9uLCBlbmQpOwogICAgIFNldENv
bnRlbnRUeXBlSW50ZXJuYWwoU3Vic3RyaW5nKHN0YXJ0LCBzZW1pY29sb24pKTsKICAgfQogCiAg
IFJldHJpZXZlUmVsZXZhbnRIZWFkZXJzKGFDaGFubmVsKTsKIAogICBtQ2hhbm5lbCA9IGFDaGFu
bmVsOwogCisgIC8vIElmIHRoaXMgZG9jdW1lbnQgaXMgYmVpbmcgbG9hZGVkIGJ5IGEgZG9jc2hl
bGwsIGNvcHkgaXRzIHNhbmRib3ggZmxhZ3MKKyAgLy8gdG8gdGhlIGRvY3VtZW50LiBUaGVzZSBh
cmUgaW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBoZXJlLgorICBuc0NPTVB0cjxuc0lEb2NTaGVs
bD4gZG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFjZShhQ29udGFpbmVyKTsKKworICBpZiAoZG9j
U2hlbGwpIHsKKyAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTYW5kYm94RmxhZ3MoJm1T
YW5kYm94RmxhZ3MpOworICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgIH0KKwogICBu
c3Jlc3VsdCBydiA9IEluaXRDU1AoKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAog
ICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0RvY3VtZW50OjpJbml0Q1NQKCkKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAgYi9jb250ZW50L2Jh
c2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxv
YWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcApAQCAtNzcs
MTYgKzc3LDE5IEBACiAjaW5jbHVkZSAibW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNsdWRl
ICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIKICNp
bmNsdWRlICJtb3ppbGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlvdXQv
UmVuZGVyRnJhbWVQYXJlbnQuaCIKIAogI2luY2x1ZGUgImpzYXBpLmgiCiAKKyNpbmNsdWRlICJu
c0hUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKKwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmxheWVyczsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjps
YXlvdXQ7CiB0eXBlZGVmIEZyYW1lTWV0cmljczo6Vmlld0lEIFZpZXdJRDsKIAogY2xhc3MgbnNB
c3luY0RvY1NoZWxsRGVzdHJveWVyIDogcHVibGljIG5zUnVubmFibGUKIHsKQEAgLTQzOCwxNiAr
NDQxLDQ3IEBAIG5zRnJhbWVMb2FkZXI6OlJlYWxseVN0YXJ0TG9hZGluZ0ludGVybmEKICAgLy8g
SnVzdCB0byBiZSBzYWZlLCByZWNoZWNrIHVyaS4KICAgcnYgPSBDaGVja1VSSUxvYWQobVVSSVRv
TG9hZCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxMb2FkSW5mbz4gbG9hZEluZm87CiAgIG1Eb2NTaGVsbC0+Q3JlYXRlTG9hZEluZm8oZ2V0
dGVyX0FkZFJlZnMobG9hZEluZm8pKTsKICAgTlNfRU5TVVJFX1RSVUUobG9hZEluZm8sIE5TX0VS
Uk9SX0ZBSUxVUkUpOwogCisgIC8vIElzIHRoaXMgYW4gPGlmcmFtZT4gd2l0aCBhIHNhbmRib3gg
YXR0cmlidXRlIG9yIGEgcGFyZW50IHdoaWNoIGlzCisgIC8vIHNhbmRib3hlZCA/CisgIG5zSFRN
TElGcmFtZUVsZW1lbnQqIGlmcmFtZSA9CisgICAgbnNIVE1MSUZyYW1lRWxlbWVudDo6RnJvbUNv
bnRlbnQobU93bmVyQ29udGVudCk7CisKKyAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKwor
ICBpZiAoaWZyYW1lKSB7CisgICAgc2FuZGJveEZsYWdzID0gaWZyYW1lLT5HZXRTYW5kYm94Rmxh
Z3MoKTsKKworICAgIC8vIFRoZSBPd25lckRvYyBvZiBhbiBpZnJhbWUgbm9kZSBpcyB0aGUgcGFy
ZW50IGRvY3VtZW50IG9mIHRoYXQgPGlmcmFtZT4uCisgICAgUFJVaW50MzIgcGFyZW50U2FuZGJv
eEZsYWdzID0gaWZyYW1lLT5Pd25lckRvYygpID8KKyAgICAgIGlmcmFtZS0+T3duZXJEb2MoKS0+
U2FuZGJveEZsYWdzKCkgOiAwOworCisgICAgaWYgKHNhbmRib3hGbGFncyB8fCBwYXJlbnRTYW5k
Ym94RmxhZ3MpIHsKKyAgICAgIC8vIFRoZSBjaGlsZCBjYW4gb25seSBhZGQgcmVzdHJpY3Rpb25z
LCBub3QgcmVtb3ZlIHRoZW0uCisgICAgICBzYW5kYm94RmxhZ3MgfD0gcGFyZW50U2FuZGJveEZs
YWdzOworCisgICAgICBtRG9jU2hlbGwtPlNldFNhbmRib3hGbGFncyhzYW5kYm94RmxhZ3MpOwor
CisgICAgICAvLyBTZXQgdXAgdGhlIGFjdHVhbCBzYW5kYm94aW5nIGZvciBwbHVnaW5zIGFzIHNw
ZWNpZmllZC4KKyAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfUExVR0lOUykgewor
ICAgICAgICBtRG9jU2hlbGwtPlNldEFsbG93UGx1Z2lucyhmYWxzZSk7CisgICAgICB9CisgICAg
fQorICB9CisKKyAgLy8gSWYgdGhpcyBpcyBhbiA8aWZyYW1lPiBhbmQgaXQncyBzYW5kYm94ZWQg
d2l0aCByZXNwZWN0IHRvIG9yaWdpbgorICAvLyB3ZSB3aWxsIHNldCBpdCB1cCB3aXRoIGEgbnVs
bCBwcmluY2lwYWwgbGF0ZXIgaW4gbnNEb2NTaGVsbDo6RG9VUklMb2FkLgorICAvLyBXZSBkbyBp
dCB0aGVyZSB0byBjb3JyZWN0bHkgc2FuZGJveCBjb250ZW50IHRoYXQgd2FzIGxvYWRlZCBpbnRv
CisgIC8vIHRoZSBpZnJhbWUgdmlhIG90aGVyIG1ldGhvZHMgdGhhbiB0aGUgc3JjIGF0dHJpYnV0
ZS4KICAgLy8gV2UnbGwgdXNlIG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZSBkb2N1bWVu
dCBsb2FkZWQgaW5zaWRlIHVzLiAgVGhpcwogICAvLyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVk
IHRvIHByZXZlbnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbgogICAvLyBzdWJm
cmFtZXMhCiAgIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFs
KCkpOwogCiAgIG5zQ09NUHRyPG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVu
dC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAg
TlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMv
bnNHa0F0b21MaXN0LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCi0tLSBhL2Nv
bnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0dr
QXRvbUxpc3QuaApAQCAtNjIsMTcgKzYyLDIxIEBAIEdLX0FUT00oYWN0dWF0ZSwgImFjdHVhdGUi
KQogR0tfQVRPTShhZGRyZXNzLCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVyLCAiYWZ0ZXIiKQog
R0tfQVRPTShhZnRlcl9lbmQsICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRlcl9zdGFydCwgImFm
dGVyX3N0YXJ0IikKIEdLX0FUT00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9NKGFsaW5rLCAiYWxp
bmsiKQogR0tfQVRPTShhbGwsICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50cywgImFsbG93ZXZl
bnRzIikKK0dLX0FUT00oYWxsb3dmb3JtcywgImFsbG93LWZvcm1zIikKIEdLX0FUT00oYWxsb3du
ZWdhdGl2ZWFzc2VydGlvbnMsICJhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucyIpCitHS19BVE9NKGFs
bG93c2FtZW9yaWdpbiwgImFsbG93LXNhbWUtb3JpZ2luIikKK0dLX0FUT00oYWxsb3dzY3JpcHRz
LCAiYWxsb3ctc2NyaXB0cyIpCitHS19BVE9NKGFsbG93dG9wbmF2aWdhdGlvbiwgImFsbG93LXRv
cC1uYXZpZ2F0aW9uIikKIEdLX0FUT00oYWxsb3d1bnRydXN0ZWQsICJhbGxvd3VudHJ1c3RlZCIp
CiBHS19BVE9NKGFsdCwgImFsdCIpCiBHS19BVE9NKGFsdGVybmF0ZSwgImFsdGVybmF0ZSIpCiBH
S19BVE9NKGFsd2F5cywgImFsd2F5cyIpCiBHS19BVE9NKGFuY2VzdG9yLCAiYW5jZXN0b3IiKQog
R0tfQVRPTShhbmNlc3Rvck9yU2VsZiwgImFuY2VzdG9yLW9yLXNlbGYiKQogR0tfQVRPTShfYW5k
LCAiYW5kIikKIEdLX0FUT00oYW55LCAiYW55IikKQEAgLTgzNywxNiArODQxLDE3IEBAIEdLX0FU
T00ocm93c3BhbiwgInJvd3NwYW4iKQogR0tfQVRPTShycCwgInJwIikKIEdLX0FUT00ocnQsICJy
dCIpCiBHS19BVE9NKHJ0bCwgInJ0bCIpCiBHS19BVE9NKHJ1YnksICJydWJ5IikKIEdLX0FUT00o
cnVsZSwgInJ1bGUiKQogR0tfQVRPTShydWxlcywgInJ1bGVzIikKIEdLX0FUT00ocywgInMiKQog
R0tfQVRPTShzYW1wLCAic2FtcCIpCitHS19BVE9NKHNhbmRib3gsICJzYW5kYm94IikKIEdLX0FU
T00oc2JhdHRyLCAic2JhdHRyIikKIEdLX0FUT00oc2NhbGUsICJzY2FsZSIpCiBHS19BVE9NKHNj
YW4sICJzY2FuIikKIEdLX0FUT00oc2NoZW1lLCAic2NoZW1lIikKIEdLX0FUT00oc2NvcGUsICJz
Y29wZSIpCiBHS19BVE9NKHNjb3BlZCwgInNjb3BlZCIpCiBHS19BVE9NKHNjcmVlbiwgInNjcmVl
biIpCiBHS19BVE9NKHNjcmVlblgsICJzY3JlZW5YIikKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFz
ZS9zcmMvbnNTYW5kYm94RmxhZ3MuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3Mu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvYmFzZS9z
cmMvbnNTYW5kYm94RmxhZ3MuaApAQCAtMCwwICsxLDU4IEBACisvKiAtKi0gTW9kZTogQysrOyB0
YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSot
ICovDQorLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9m
IHRoZSBNb3ppbGxhIFB1YmxpYw0KKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRo
ZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwNCisgKiBZb3UgY2FuIG9i
dGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLw0KKw0KKy8qDQorICog
Q29uc3RhbnQgZmxhZ3MgdGhhdCBkZXNjcmliZSBob3cgYSBkb2N1bWVudCBpcyBzYW5kYm94ZWQg
YWNjb3JkaW5nIHRvIHRoZQ0KKyAqIEhUTUw1IHNwZWMuDQorICovDQorDQorI2lmbmRlZiBuc1Nh
bmRib3hGbGFnc19oX19fDQorI2RlZmluZSBuc1NhbmRib3hGbGFnc19oX19fDQorDQorLyoqDQor
ICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIGJyb3dzaW5nIGNv
bnRleHRzIG90aGVyIHRoYW4NCisgKiB0aGUgc2FuZGJveGVkIGJyb3dzaW5nIGNvbnRleHQgaXRz
ZWxmIChvciBicm93c2luZyBjb250ZXh0cyBmdXJ0aGVyDQorICogbmVzdGVkIGluc2lkZSBpdCks
IGFuZCB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWdu
ZWQgbG9uZyBTQU5EQk9YRURfTkFWSUdBVElPTiAgPSAweDE7DQorDQorLyoqDQorICogVGhpcyBm
bGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWlyIHRvcC1sZXZlbCBicm93
c2luZw0KKyAqIGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURf
VE9QTEVWRUxfTkFWSUdBVElPTiA9IDB4MjsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgcHJldmVu
dHMgY29udGVudCBmcm9tIGluc3RhbnRpYXRpbmcgcGx1Z2lucywgd2hldGhlciB1c2luZyB0aGUN
CisgKiBlbWJlZCBlbGVtZW50LCB0aGUgb2JqZWN0IGVsZW1lbnQsIHRoZSBhcHBsZXQgZWxlbWVu
dCwgb3IgdGhyb3VnaA0KKyAqIG5hdmlnYXRpb24gb2YgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4
dCwgdW5sZXNzIHRob3NlIHBsdWdpbnMgY2FuIGJlDQorICogc2VjdXJlZC4NCisgKi8NCitjb25z
dCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5TID0gMHg0Ow0KKw0KKy8qKg0KKyAqIFRo
aXMgZmxhZyBmb3JjZXMgY29udGVudCBpbnRvIGEgdW5pcXVlIG9yaWdpbiwgdGh1cyBwcmV2ZW50
aW5nIGl0IGZyb20NCisgKiBhY2Nlc3Npbmcgb3RoZXIgY29udGVudCBmcm9tIHRoZSBzYW1lIG9y
aWdpbi4NCisgKiBUaGlzIGZsYWcgYWxzbyBwcmV2ZW50cyBzY3JpcHQgZnJvbSByZWFkaW5nIGZy
b20gb3Igd3JpdGluZyB0byB0aGUNCisgKiBkb2N1bWVudC5jb29raWUgSURMIGF0dHJpYnV0ZSwg
YW5kIGJsb2NrcyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVk
IGxvbmcgU0FOREJPWEVEX09SSUdJTiA9IDB4ODsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxv
Y2tzIGZvcm0gc3VibWlzc2lvbi4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hF
RF9GT1JNUyA9IDB4MTA7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBzY3JpcHQgZXhl
Y3V0aW9uLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1NDUklQVFMgPSAw
eDIwOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3MgZmVhdHVyZXMgdGhhdCB0cmlnZ2Vy
IGF1dG9tYXRpY2FsbHksIHN1Y2ggYXMNCisgKiBhdXRvbWF0aWNhbGx5IHBsYXlpbmcgYSB2aWRl
byBvciBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIGEgZm9ybSBjb250cm9sLg0KKyAqLw0KK2NvbnN0
IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUyA9IDB4NDA7DQorI2Vu
ZGlmDQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAgYi9j
b250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3Jj
L25zU2NyaXB0TG9hZGVyLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVy
LmNwcApAQCAtMzcsMTYgKzM3LDE3IEBACiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9s
aWN5LmgiCiAjaW5jbHVkZSAicHJsb2cuaCIKICNpbmNsdWRlICJuc0lDaGFubmVsUG9saWN5Lmgi
CiAjaW5jbHVkZSAibnNDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNDUlQuaCIKICNpbmNs
dWRlICJuc0NvbnRlbnRDcmVhdG9yRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAibnNHZW5lcmljRWxl
bWVudC5oIgogI2luY2x1ZGUgIm5zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUg
Im5zU2FuZGJveEZsYWdzLmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL0Z1bmN0aW9uVGltZXIuaCIK
ICNpbmNsdWRlICJtb3ppbGxhL0NPUlNNb2RlLmgiCiAKICNpZmRlZiBQUl9MT0dHSU5HCiBzdGF0
aWMgUFJMb2dNb2R1bGVJbmZvKiBnQ3NwUFJMb2c7CiAjZW5kaWYKIApAQCAtMjcyLDE2ICsyNzMs
MjIgQEAgbnNTY3JpcHRMb2FkZXI6OlN0YXJ0TG9hZChuc1NjcmlwdExvYWRSZQogICBpZiAoIXdp
bmRvdykgewogICAgIHJldHVybiBOU19FUlJPUl9OVUxMX1BPSU5URVI7CiAgIH0KIAogICBuc0lE
b2NTaGVsbCAqZG9jc2hlbGwgPSB3aW5kb3ctPkdldERvY1NoZWxsKCk7CiAKICAgbnNDT01QdHI8
bnNJSW50ZXJmYWNlUmVxdWVzdG9yPiBwcm9tcHRlcihkb19RdWVyeUludGVyZmFjZShkb2NzaGVs
bCkpOwogCisgIC8vIElmIHRoaXMgZG9jdW1lbnQgaXMgc2FuZGJveGVkIHdpdGhvdXQgJ2FsbG93
LXNjcmlwdHMnLCBhYm9ydC4KKyAgaWYgKG1Eb2N1bWVudC0+U2FuZGJveEZsYWdzKCkgJiBTQU5E
Qk9YRURfU0NSSVBUUykgeworICAgIC8vIFJFVklFVyA6IHRoaXMgcHJvYmFibHkgaXNuJ3QgdGhl
IHJpZ2h0IGVycm9yLi4KKyAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAg
fQorCiAgIC8vIGNoZWNrIGZvciBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHRvIHBhc3MgZG93
biB0byB0aGUgY2hhbm5lbAogICAvLyB0aGF0IHdpbGwgYmUgY3JlYXRlZCB0byBsb2FkIHRoZSBz
Y3JpcHQKICAgbnNDT01QdHI8bnNJQ2hhbm5lbFBvbGljeT4gY2hhbm5lbFBvbGljeTsKICAgbnND
T01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5PiBjc3A7CiAgIHJ2ID0gbURvY3VtZW50LT5O
b2RlUHJpbmNpcGFsKCktPkdldENzcChnZXR0ZXJfQWRkUmVmcyhjc3ApKTsKICAgTlNfRU5TVVJF
X1NVQ0NFU1MocnYsIHJ2KTsKICAgaWYgKGNzcCkgewogICAgIGNoYW5uZWxQb2xpY3kgPSBkb19D
cmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL25zY2hhbm5lbHBvbGljeTsxIik7CkBAIC02Mjks
MTYgKzYzNiwyMSBAQCBuc1NjcmlwdExvYWRlcjo6UHJvY2Vzc1NjcmlwdEVsZW1lbnQobnNJCiAg
ICAgICAgICJUaGVyZSBjYW4gYmUgb25seSBvbmUgcGFyc2VyLWJsb2NraW5nIHNjcmlwdCBhdCBh
IHRpbWUiKTsKICAgICBOU19BU1NFUlRJT04obVhTTFRSZXF1ZXN0cy5Jc0VtcHR5KCksCiAgICAg
ICAgICJQYXJzZXItYmxvY2tpbmcgc2NyaXB0cyBhbmQgWFNMVCBzY3JpcHRzIGluIHRoZSBzYW1l
IGRvYyEiKTsKICAgICBtUGFyc2VyQmxvY2tpbmdSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICByZXR1
cm4gdHJ1ZTsKICAgfQogCiAgIC8vIGlubGluZSBzY3JpcHQKKyAgLy8gSXMgdGhpcyBkb2N1bWVu
dCBzYW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctc2NyaXB0cyc/CisgIGlmIChtRG9jdW1lbnQtPlNh
bmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICByZXR1cm4gZmFsc2U7Cisg
IH0KKwogICBuc0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgcnYgPSBt
RG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwog
ICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgZmFsc2UpOwogCiAgIGlmIChjc3ApIHsKICAgICBQUl9M
T0coZ0NzcFBSTG9nLCBQUl9MT0dfREVCVUcsICgiTmV3IFNjcmlwdExvYWRlciBpICoqKip3aXRo
IENTUCoqKioiKSk7CiAgICAgYm9vbCBpbmxpbmVPSzsKICAgICBydiA9IGNzcC0+R2V0QWxsb3dz
SW5saW5lU2NyaXB0KCZpbmxpbmVPSyk7CmRpZmYgLS1naXQgYS9jb250ZW50L2V2ZW50cy9zcmMv
bnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAgYi9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExp
c3RlbmVyTWFuYWdlci5jcHAKLS0tIGEvY29udGVudC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5l
ck1hbmFnZXIuY3BwCisrKyBiL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5h
Z2VyLmNwcApAQCAtNTAsMTYgKzUwLDE3IEBACiAjaW5jbHVkZSAibnNET01KU1V0aWxzLmgiCiAj
aW5jbHVkZSAibnNET01TY3JpcHRPYmplY3RIb2xkZXIuaCIKICNpbmNsdWRlICJuc0RhdGFIYXNo
dGFibGUuaCIKICNpbmNsdWRlICJuc0NPTUFycmF5LmgiCiAjaW5jbHVkZSAibnNFdmVudExpc3Rl
bmVyU2VydmljZS5oIgogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2lu
Y2x1ZGUgIm5zSlNFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgInhwY3B1YmxpYy5oIgorI2luY2x1
ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiB1
c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6aGFsOwogCiAjZGVmaW5lIEVWRU5UX1RZUEVfRVFVQUxT
KCBscywgdHlwZSwgdXNlclR5cGUgKSBcCiAgIChscy0+bUV2ZW50VHlwZSA9PSB0eXBlICYmIFwK
ICAgKGxzLT5tRXZlbnRUeXBlICE9IE5TX1VTRVJfREVGSU5FRF9FVkVOVCB8fCBscy0+bVR5cGVB
dG9tID09IHVzZXJUeXBlKSkKIApAQCAtNTYxLDE2ICs1NjIsMjIgQEAgbnNFdmVudExpc3RlbmVy
TWFuYWdlcjo6QWRkU2NyaXB0RXZlbnRMaQogICAgIC8vIGxvYWRlZCBhcyBkYXRhLgogICAgIHJl
dHVybiBOU19PSzsKICAgfQogCiAgIG5zcmVzdWx0IHJ2ID0gTlNfT0s7CiAgIC8vIHJldHVybiBl
YXJseSBwcmV2ZW50aW5nIHRoZSBldmVudCBsaXN0ZW5lciBmcm9tIGJlaW5nIGFkZGVkCiAgIC8v
ICdkb2MnIGlzIGZldGNoZWQgYWJvdmUKICAgaWYgKGRvYykgeworICAgIC8vIERvbid0IGFsbG93
IGFkZGluZyBhbiBldmVudCBsaXN0ZW5lciBpZiB0aGUgZG9jdW1lbnQgaXMgc2FuZGJveGVkCisg
ICAgLy8gd2l0aG91dCAnYWxsb3ctc2NyaXB0cycuCisgICAgaWYgKGRvYy0+U2FuZGJveEZsYWdz
KCkgJiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNV
UklUWV9FUlI7CisgICAgfQorCiAgICAgbnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5
PiBjc3A7CiAgICAgcnYgPSBkb2MtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRS
ZWZzKGNzcCkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgICBpZiAoY3Nw
KSB7CiAgICAgICBib29sIGlubGluZU9LOwogICAgICAgcnYgPSBjc3AtPkdldEFsbG93c0lubGlu
ZVNjcmlwdCgmaW5saW5lT0spOwogICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAg
Yi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCi0tLSBhL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtNDgsMTYgKzQ4LDE3
IEBACiAKICNpbmNsdWRlICJtb3pBdXRvRG9jVXBkYXRlLmgiCiAjaW5jbHVkZSAibnNJSFRNTENv
bGxlY3Rpb24uaCIKIAogI2luY2x1ZGUgIm5zSUNvbnN0cmFpbnRWYWxpZGF0aW9uLmgiCiAKICNp
bmNsdWRlICJuc0lET01IVE1MQnV0dG9uRWxlbWVudC5oIgogI2luY2x1ZGUgImRvbWJpbmRpbmdz
LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemls
bGE6OmRvbTsKIAogc3RhdGljIGNvbnN0IGludCBOU19GT1JNX0NPTlRST0xfTElTVF9IQVNIVEFC
TEVfU0laRSA9IDE2OwogCiBzdGF0aWMgY29uc3QgUFJVaW50OCBOU19GT1JNX0FVVE9DT01QTEVU
RV9PTiAgPSAxOwogc3RhdGljIGNvbnN0IFBSVWludDggTlNfRk9STV9BVVRPQ09NUExFVEVfT0ZG
ID0gMDsKIApAQCAtNjQ4LDE3ICs2NDksMTkgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0
T3JSZXNldChuc0V2ZQogICAgIHJldHVybiBEb1Jlc2V0KCk7CiAgIH0KIAogICBpZiAoTlNfRk9S
TV9TVUJNSVQgPT0gYU1lc3NhZ2UpIHsKICAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgbm90
IGluIGEgZG9jdW1lbnQuCiAgICAgaWYgKCFkb2MpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAg
ICB9Ci0gICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAgLy8gRG9uJ3Qgc3VibWl0IGlm
IHdlJ3JlIGluIGEgc2FuZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1Ym1pdAorICAgIC8vIGlzIGRp
c2FibGVkLgorICAgIHJldHVybiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9GT1JN
UykgPyBOU19PSyA6IERvU3VibWl0KGFFdmVudCk7CiAgIH0KIAogICBNT1pfQVNTRVJUKGZhbHNl
KTsKICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNIVE1MRm9ybUVsZW1lbnQ6OkRv
UmVzZXQoKQpAQCAtMTY0OSwxNiArMTY1MiwyNCBAQCBuc0hUTUxGb3JtRWxlbWVudDo6Q2hlY2tW
YWxpZEZvcm1TdWJtaXNzCiAgICAqIFRPRE86IHRoZSBjaGVjayBmb3Igb2JzZXJ2ZXIgc2hvdWxk
IGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBIVE1MNSBGb3JtcyB3aWxsCiAgICAqIGJlIHNwcmVhZCBl
bm91Z2ggYW5kIGF1dGhvcnMgd2lsbCBhc3N1bWUgZm9ybXMgY2FuJ3QgYmUgc3VibWl0dGVkIHdo
ZW4KICAgICogaW52YWxpZC4gU2VlIGJ1ZyA1ODc2NzEuCiAgICAqLwogCiAgIE5TX0FTU0VSVElP
TighSGFzQXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpub3ZhbGlkYXRlKSwKICAg
ICAgICAgICAgICAgICJXZSBzaG91bGRuJ3QgYmUgdGhlcmUgaWYgbm92YWxpZGF0ZSBpcyBzZXQh
Iik7CiAKKyAgLy8gRG9uJ3QgZG8gdmFsaWRhdGlvbiBmb3IgYSBmb3JtIHN1Ym1pdCBkb25lIGJ5
IGEgc2FuZGJveGVkIGRvY3VtZW50IHRoYXQKKyAgLy8gZG9lc24ndCBoYXZlICdhbGxvdy1mb3Jt
cycsIHRoZSBzdWJtaXQgd2lsbCBoYXZlIGJlZW4gYmxvY2tlZCBhbmQgdGhlCisgIC8vIEhUTUw1
IHNwZWMgc2F5cyB3ZSBzaG91bGRuJ3QgdmFsaWRhdGUgaW4gdGhpcyBjYXNlLgorICBuc0lEb2N1
bWVudCogZG9jID0gR2V0Q3VycmVudERvYygpOworICBpZiAoZG9jICYmIChkb2MtPlNhbmRib3hG
bGFncygpICYgU0FOREJPWEVEX0ZPUk1TKSkgeworICAgICAgcmV0dXJuIHRydWU7CisgIH0KKwog
ICAvLyBXaGVuIC5zdWJtaXQoKSBpcyBjYWxsZWQgYUV2ZW50ID0gbnNudWxsIHNvIHdlIGNhbiBy
ZWx5IG9uIHRoYXQgdG8ga25vdyBpZgogICAvLyB3ZSBoYXZlIHRvIGNoZWNrIHRoZSB2YWxpZGl0
eSBvZiB0aGUgZm9ybS4KICAgbnNDT01QdHI8bnNJT2JzZXJ2ZXJTZXJ2aWNlPiBzZXJ2aWNlID0K
ICAgICBtb3ppbGxhOjpzZXJ2aWNlczo6R2V0T2JzZXJ2ZXJTZXJ2aWNlKCk7CiAgIGlmICghc2Vy
dmljZSkgewogICAgIE5TX1dBUk5JTkcoIk5vIG9ic2VydmVyIHNlcnZpY2UgYXZhaWxhYmxlISIp
OwogICAgIHJldHVybiB0cnVlOwogICB9CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVu
dC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMv
bnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
SFRNTElGcmFtZUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxJRnJhbWVFbGVtZW50LmNwcApAQCAtMSwyNCArMSwxNiBAQAogLyogLSotIE1vZGU6IEMrKzsg
dGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0q
LSAqLwogLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9m
IHRoZSBNb3ppbGxhIFB1YmxpYwogICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhl
IE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICogZmlsZSwgWW91IGNhbiBvYnRh
aW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KIAogI2luY2x1ZGUgIm1v
emlsbGEvVXRpbC5oIgogCiAjaW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1
ZGUgIm5zSURPTURvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgotI2luY2x1ZGUg
Im5zTWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIm5zRE9NRXJyb3IuaCIKLSNpbmNsdWRl
ICJuc1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgogCiB1c2luZyBuYW1l
c3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKIE5TX0lNUExf
TlNfTkVXX0hUTUxfRUxFTUVOVF9DSEVDS19QQVJTRVIoSUZyYW1lKQogCiBuc0hUTUxJRnJhbWVF
bGVtZW50Ojpuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+
IGFOb2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJv
bVBhcnNlciBhRnJvbVBhcnNlcikKQEAgLTUzLDE2ICs0NSwxNyBAQCBOU19JTVBMX1NUUklOR19B
VFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsCiBOU19JTVBMX1VSSV9BVFRSKG5zSFRNTElGcmFtZUVs
ZW1lbnQsIExvbmdEZXNjLCBsb25nZGVzYykKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZy
YW1lRWxlbWVudCwgTWFyZ2luSGVpZ2h0LCBtYXJnaW5oZWlnaHQpCiBOU19JTVBMX1NUUklOR19B
VFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE1hcmdpbldpZHRoLCBtYXJnaW53aWR0aCkKIE5TX0lN
UExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTmFtZSwgbmFtZSkKIE5TX0lNUExf
U1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU2Nyb2xsaW5nLCBzY3JvbGxpbmcpCiBO
U19JTVBMX1VSSV9BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNyYywgc3JjKQogTlNfSU1QTF9T
VFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBXaWR0aCwgd2lkdGgpCiBOU19JTVBMX0JP
T0xfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBNb3pBbGxvd0Z1bGxTY3JlZW4sIG1vemFsbG93
ZnVsbHNjcmVlbikKK05TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU2Fu
ZGJveCwgc2FuZGJveCkKIAogdm9pZAogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0SXRlbVZhbHVl
VGV4dChuc0FTdHJpbmcmIGFWYWx1ZSkKIHsKICAgR2V0U3JjKGFWYWx1ZSk7CiB9CiAKIHZvaWQK
QEAgLTIwMiw4ICsxOTUsMzcgQEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6SXNBdHRyaWJ1dGVNYXBw
ZWQoYwogCiAKIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMKIG5zSFRNTElGcmFtZUVsZW1lbnQ6
OkdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0CiB7CiAgIHJldHVybiAmTWFwQXR0
cmlidXRlc0ludG9SdWxlOwogfQogCituc3Jlc3VsdAorbnNIVE1MSUZyYW1lRWxlbWVudDo6QWZ0
ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQXR0clZhbHVlKiBhVmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpCit7CisgIGlm
IChhTmFtZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5hbWVTcGFjZUlEID09IGtOYW1lU3Bh
Y2VJRF9Ob25lKSB7CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgc2FuZGJveCBh
dHRyaWJ1dGUsIGFuZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwKKyAgICAvLyBzZXQgaXRzIHNhbmRi
b3ggZmxhZ3MgYXBwcm9wcmlhdGVseS4KKyAgICBpZiAobUZyYW1lTG9hZGVyKSB7CisgICAgICBu
c0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jc2hlbGwgPSBtRnJhbWVMb2FkZXItPkdldEV4aXN0aW5n
RG9jU2hlbGwoKTsKKworICAgICAgaWYgKGRvY3NoZWxsKSB7CisgICAgICAgIFBSVWludDMyIG5l
d0ZsYWdzID0gMDsKKyAgICAgICAgLy8gSWYgYSBOVUxMIGFWYWx1ZSBpcyBwYXNzZWQgaW4sIHdl
IHdhbnQgdG8gY2xlYXIgdGhlIHNhbmRib3ggZmxhZ3MKKyAgICAgICAgLy8gd2hpY2ggd2Ugd2ls
bCBkbyBieSBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAgaWYgKGFWYWx1ZSkgeworICAgICAg
ICAgIG5zQXV0b1N0cmluZyBzdHJWYWx1ZTsKKyAgICAgICAgICBhVmFsdWUtPlRvU3RyaW5nKHN0
clZhbHVlKTsKKyAgICAgICAgICBuZXdGbGFncyA9IG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRi
b3hBdHRyaWJ1dGVUb0ZsYWdzKAorICAgICAgICAgICAgc3RyVmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3RmxhZ3MpOworICAgICAgfQorICAg
IH0KKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6OkFmdGVyU2V0QXR0cihhTmFt
ZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFOb3RpZnkpOworCit9CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29u
dGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTElGcmFtZUVsZW1lbnQuaAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNI
VE1MSUZyYW1lRWxlbWVudC5oCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJ
RnJhbWVFbGVtZW50LmgKQEAgLTEsMTYgKzEsMjQgQEAKIC8qIC0qLSBNb2RlOiBDKys7IHRhYi13
aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8K
IC8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUg
TW96aWxsYSBQdWJsaWMKICAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwg
d2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9u
ZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCiAKICNpbmNsdWRlICJuc0dlbmVy
aWNIVE1MRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQu
aCIKICNpbmNsdWRlICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTVNW
R0RvY3VtZW50LmgiCisjaW5jbHVkZSAibnNHa0F0b21zLmgiCisjaW5jbHVkZSAibnNJRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJuc0RPTUVy
cm9yLmgiCisjaW5jbHVkZSAibnNSdWxlRGF0YS5oIgorI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMu
aCIKKyNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogCiBjbGFzcyBuc0hUTUxJRnJhbWVFbGVt
ZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKIHsKIHB1YmxpYzoKICAg
bnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUlu
Zm8sCiAgICAgICAgICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9t
UGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOwpAQCAtNDEsMTIgKzQ5LDM2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUm
IGFSZXN1bHQpOwogICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBu
c0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKICAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0
ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OwogCiAgIHZpcnR1YWwg
bnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQp
IGNvbnN0OwogICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKICAgdmly
dHVhbCBuc0lET01Ob2RlKiBBc0RPTU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKKyAgdmlydHVh
bCBuc3Jlc3VsdCBBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFO
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSog
YVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpOwor
CisgIFBSVWludDMyIEdldFNhbmRib3hGbGFncygpCisgIHsKKyAgICBuc0F1dG9TdHJpbmcgc2Fu
ZGJveEF0dHI7CisKKyAgICBpZiAoR2V0QXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21z
OjpzYW5kYm94LCBzYW5kYm94QXR0cikpIHsKKyAgICAgIHJldHVybiBuc0NvbnRlbnRVdGlsczo6
UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhzYW5kYm94QXR0cik7CisgICAgfQorCisgICAg
Ly8gTm8gc2FuZGJveCBhdHRyaWJ1dGUsIG5vIHNhbmRib3ggZmxhZ3MuCisgICAgcmV0dXJuIDA7
CisgIH0KKworICBzdGF0aWMgbnNIVE1MSUZyYW1lRWxlbWVudCogRnJvbUNvbnRlbnQobnNJQ29u
dGVudCAqYUNvbnRlbnQpCisgIHsKKyAgICBpZiAoYUNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6
OmlmcmFtZSkpIHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxuc0hUTUxJRnJhbWVFbGVtZW50
Kj4oYUNvbnRlbnQpOworICAgIH0KKyAgICByZXR1cm4gbnNudWxsOworICB9CisKIHByb3RlY3Rl
ZDoKICAgdmlydHVhbCB2b2lkIEdldEl0ZW1WYWx1ZVRleHQobnNBU3RyaW5nJiB0ZXh0KTsKICAg
dmlydHVhbCB2b2lkIFNldEl0ZW1WYWx1ZVRleHQoY29uc3QgbnNBU3RyaW5nJiB0ZXh0KTsKIH07
CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNw
cCBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCi0tLSBhL2Nv
bnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQv
aHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCkBAIC05NywxNiArOTcsMTcgQEAK
ICNpbmNsdWRlICJwcnByZi5oIgogI2luY2x1ZGUgIm1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNp
bmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibnNNaW1lVHlwZXMuaCIK
ICNpbmNsdWRlICJuc0lSZXF1ZXN0LmgiCiAjaW5jbHVkZSAibnNIdG1sNVRyZWVPcEV4ZWN1dG9y
LmgiCiAjaW5jbHVkZSAibnNIdG1sNVBhcnNlci5oIgogI2luY2x1ZGUgIm5zSURPTUpTV2luZG93
LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemls
bGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiAjZGVmaW5lIE5TX01BWF9ET0NV
TUVOVF9XUklURV9ERVBUSCAyMAogCiAjaW5jbHVkZSAicHJtZW0uaCIKICNpbmNsdWRlICJwcnRp
bWUuaCIKQEAgLTEyMTUsMTYgKzEyMTYsMjIgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShu
c0FTdHJpbmcmIGFDbwogewogICBhQ29va2llLlRydW5jYXRlKCk7IC8vIGNsZWFyIGN1cnJlbnQg
Y29va2llIGluIGNhc2Ugc2VydmljZSBmYWlsczsKICAgICAgICAgICAgICAgICAgICAgICAvLyBu
byBjb29raWUgaXNuJ3QgYW4gZXJyb3IgY29uZGl0aW9uLgogCiAgIGlmIChtRGlzYWJsZUNvb2tp
ZUFjY2VzcykgewogICAgIHJldHVybiBOU19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVu
dCdzIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBpcyBzZXQsIGFjY2VzcyB0byByZWFkIGNvb2tpZXMK
KyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJ
R0lOKSB7CisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgIH0KKyAgCiAg
IC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0
cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJW
SUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSkgewogICAgIC8vIEdldCBhIFVSSSBmcm9t
IHRoZSBkb2N1bWVudCBwcmluY2lwYWwuIFdlIHVzZSB0aGUgb3JpZ2luYWwKICAgICAvLyBjb2Rl
YmFzZSBpbiBjYXNlIHRoZSBjb2RlYmFzZSB3YXMgY2hhbmdlZCBieSBTZXREb21haW4KICAgICBu
c0NPTVB0cjxuc0lVUkk+IGNvZGViYXNlVVJJOwogICAgIE5vZGVQcmluY2lwYWwoKS0+R2V0VVJJ
KGdldHRlcl9BZGRSZWZzKGNvZGViYXNlVVJJKSk7CiAKQEAgLTEyNDUsMTYgKzEyNTIsMjIgQEAg
bnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwogCiBOU19JTUVUSE9ESU1Q
CiBuc0hUTUxEb2N1bWVudDo6U2V0Q29va2llKGNvbnN0IG5zQVN0cmluZyYgYUNvb2tpZSkKIHsK
ICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAK
KyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNldCwgYWNj
ZXNzIHRvIHdyaXRlIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1TYW5kYm94
RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSB7CisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNV
UklUWV9FUlI7CisgIH0KKwogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZpY2UgaXNuJ3Qg
YW4gZXJyb3IKICAgbnNDT01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9IGRvX0dldFNl
cnZpY2UoTlNfQ09PS0lFU0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZpY2UgJiYgbURv
Y3VtZW50VVJJKSB7CiAgICAgbnNDT01QdHI8bnNJUHJvbXB0PiBwcm9tcHQ7CiAgICAgbnNDT01Q
dHI8bnNQSURPTVdpbmRvdz4gd2luZG93ID0gR2V0V2luZG93KCk7CiAgICAgaWYgKHdpbmRvdykg
ewogICAgICAgd2luZG93LT5HZXRQcm9tcHRlcihnZXR0ZXJfQWRkUmVmcyhwcm9tcHQpKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluIGIvZG9jc2hlbGwvYmFz
ZS9NYWtlZmlsZS5pbgotLS0gYS9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCisrKyBiL2RvY3No
ZWxsL2Jhc2UvTWFrZWZpbGUuaW4KQEAgLTg1LDkgKzg1LDEwIEBAIGluY2x1ZGUgJCh0b3BzcmNk
aXIpL2NvbmZpZy9jb25maWcubWsKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2lwYy9jaHJvbWl1bS9j
aHJvbWl1bS1jb25maWcubWsKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawog
CiBMT0NBTF9JTkNMVURFUyArPSBcCiAgIC1JJChzcmNkaXIpLy4uL3NoaXN0b3J5L3NyYyBcCiAg
IC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKICAgLUkkKHRvcHNyY2RpcikvbGF5b3V0L2Jhc2Ug
XAogICAtSSQodG9wc3JjZGlyKS94cGNvbS9kcyBcCisgIC1JJCh0b3BzcmNkaXIpL2NvbnRlbnQv
YmFzZS9zcmMgXAogICAkKE5VTEwpCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hl
bGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9kb2NzaGVsbC9iYXNl
L25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKQEAgLTE3
NywxNiArMTc3LDE3IEBACiAjaW5jbHVkZSAibnNJV2ViQnJvd3NlclByaW50LmgiCiAjZW5kaWYK
IAogI2luY2x1ZGUgIm5zUGx1Z2luRXJyb3IuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5o
IgogI2luY2x1ZGUgIm5zQ29udGVudEVycm9ycy5oIgogI2luY2x1ZGUgIm5zSUNoYW5uZWxQb2xp
Y3kuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJu
c1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNYVUxBcHBBUEkuaCIKIAogI2luY2x1ZGUg
Im5zRE9NTmF2aWdhdGlvblRpbWluZy5oIgogI2luY2x1ZGUgIm5zSVRpbWVkQ2hhbm5lbC5oIgog
I2luY2x1ZGUgIm1vemlsbGEvU3RhcnR1cFRpbWVsaW5lLmgiCiAjaW5jbHVkZSAibnNJRnJhbWVN
ZXNzYWdlTWFuYWdlci5oIgogCkBAIC03MjgsMTYgKzcyOSwxNyBAQCBuc0RvY1NoZWxsOjpuc0Rv
Y1NoZWxsKCk6CiAgICAgbUJ1c3lGbGFncyhCVVNZX0ZMQUdTX05PTkUpLAogICAgIG1BcHBUeXBl
KG5zSURvY1NoZWxsOjpBUFBfVFlQRV9VTktOT1dOKSwKICAgICBtTG9hZFR5cGUoMCksCiAgICAg
bU1hcmdpbldpZHRoKC0xKSwKICAgICBtTWFyZ2luSGVpZ2h0KC0xKSwKICAgICBtSXRlbVR5cGUo
dHlwZUNvbnRlbnQpLAogICAgIG1QcmV2aW91c1RyYW5zSW5kZXgoLTEpLAogICAgIG1Mb2FkZWRU
cmFuc0luZGV4KC0xKSwKKyAgICBtU2FuZGJveEZsYWdzKDApLAogICAgIG1DcmVhdGVkKGZhbHNl
KSwKICAgICBtQWxsb3dTdWJmcmFtZXModHJ1ZSksCiAgICAgbUFsbG93UGx1Z2lucyh0cnVlKSwK
ICAgICBtQWxsb3dKYXZhc2NyaXB0KHRydWUpLAogICAgIG1BbGxvd01ldGFSZWRpcmVjdHModHJ1
ZSksCiAgICAgbUFsbG93SW1hZ2VzKHRydWUpLAogICAgIG1BbGxvd0ROU1ByZWZldGNoKHRydWUp
LAogICAgIG1BbGxvd1dpbmRvd0NvbnRyb2wodHJ1ZSksCkBAIC0yOTcyLDE2ICsyOTc0LDczIEBA
IG5zRG9jU2hlbGw6OkZpbmRJdGVtV2l0aE5hbWUoY29uc3QgUFJVbmkKICAgICAgICAgICAgIGZv
dW5kSXRlbSA9IG5zbnVsbDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChmb3VuZEl0ZW0pIHsK
ICAgICAgICAgICAgIC8vIFdlIHJldHVybiBmb3VuZEl0ZW0gaGVyZSBldmVuIGlmIGl0J3Mgbm90
IGFuIGFjdGl2ZQogICAgICAgICAgICAgLy8gaXRlbSBzaW5jZSBhbGwgdGhlIG5hbWVzIHdlJ3Zl
IGRlYWx0IHdpdGggc28gZmFyIGFyZQogICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlcyB0aGF0
IHdlIHdvbid0IGJvdGhlciBsb29raW5nIGZvciBmdXJ0aGVyLgogCisgICAgICAgICAgICAvLyBJ
ZiBvdXIgZG9jdW1lbnQgaXMgc2FuZGJveGVkLCB3ZSBuZWVkIHRvIGRvIHNvbWUgZXh0cmEgY2hl
Y2tzLgorICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICAgICAgICAg
ICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX0dldEludGVyZmFjZShhT3JpZ2luYWxS
ZXF1ZXN0b3IpOworCisgICAgICAgICAgICBpZiAoZG9jKSB7CisgICAgICAgICAgICAgICAgc2Fu
ZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHNhbmRib3hGbGFncykgeworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURv
Y1NoZWxsVHJlZUl0ZW0+IHJvb3Q7CisgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVSb290VHJl
ZUl0ZW0oZ2V0dGVyX0FkZFJlZnMocm9vdCkpOworCisgICAgICAgICAgICAgICAgLy8gSXMgdGhl
IGZvdW5kIGl0ZW0gbm90IGEgdG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgYW5kIG5vdCBvdXJz
ZWxmID8KKyAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBzZWxm
QXNJdGVtID0gc3RhdGljX2Nhc3Q8bnNJRG9jU2hlbGxUcmVlSXRlbSAqPih0aGlzKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZm91bmRJdGVtICE9IHJvb3QgJiYgZm91bmRJdGVtICE9IHNlbGZBc0l0
ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXJlIHdlIGFuIGFuY2VzdG9yIG9mIHRoZSBm
b3VuZEl0ZW0gPworICAgICAgICAgICAgICAgICAgICBib29sIGlzQW5jZXN0b3IgPSBmYWxzZTsK
KworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJl
bnRBc0l0ZW07CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9B
ZGRSZWZzKHBhcmVudEFzSXRlbSkpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJl
bnRBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
VHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbS0+R2V0
UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodG1wICYmIHRtcCA9PSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXNBbmNlc3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnRBc0l0ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vLCB3
ZSBhcmUgbm90IGFuIGFuY2VzdG9yIGFuZCBvdXIgZG9jdW1lbnQgaXMKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHNhbmRib3hlZCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRvcCBsZXZl
bCBicm93c2luZyBjb250ZXh0IC0gaXMgaXQgYW4gYW5jZXN0b3Igb2Ygb3VycyA/CisgICAgICAg
ICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAg
ICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKHRtcCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRtcCAmJiB0bXAgPT0gZm91bmRJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhbiBhbmNlc3RvciwgYW5kIHdlIGFyZSBzYW5kYm94ZWQuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIGFsbG93LXRvcC1uYXZpZ2F0aW9uIGlzIHNl
dCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c2FuZGJveEZsYWdzICYgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAtPkdldFBh
cmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZm91bmRJdGVtLnN3YXAo
Kl9yZXR2YWwpOwogICAgICAgICAgICAgcmV0dXJuIE5TX09LOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgLy8gS2VlcCBsb29raW5nCiAgICAgICAgIAogICAgIC8vIEZpcnN0IHdlIGNoZWNrIG91
ciBuYW1lLgpAQCAtNTAxMiwxNiArNTA3MSwzMCBAQCBuc0RvY1NoZWxsOjpTZXRJc0FwcFRhYihi
b29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OkdldElzQXBwVGFiKGJv
b2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0FwcFRhYjsKICAgcmV0dXJuIE5T
X09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpTZXRTYW5kYm94RmxhZ3MoUFJV
aW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgICBtU2FuZGJveEZsYWdzID0gYVNhbmRib3hGbGFn
czsKKyAgICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6Okdl
dFNhbmRib3hGbGFncyhQUlVpbnQzMiAgKmFTYW5kYm94RmxhZ3MpCit7CisgICAgKmFTYW5kYm94
RmxhZ3MgPSBtU2FuZGJveEZsYWdzOworICAgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhP
RElNUAogbnNEb2NTaGVsbDo6U2V0VmlzaWJpbGl0eShib29sIGFWaXNpYmlsaXR5KQogewogICAg
IGlmICghbUNvbnRlbnRWaWV3ZXIpCiAgICAgICAgIHJldHVybiBOU19PSzsKICAgICBpZiAoYVZp
c2liaWxpdHkpIHsKICAgICAgICAgbUNvbnRlbnRWaWV3ZXItPlNob3coKTsKICAgICB9CiAgICAg
ZWxzZSB7CkBAIC04MjUwLDE2ICs4MzIzLDI5IEBAIG5zRG9jU2hlbGw6OkludGVybmFsTG9hZChu
c0lVUkkgKiBhVVJJLAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0YXJn
ZXRJdGVtOwogICAgICAgICBGaW5kSXRlbVdpdGhOYW1lKGFXaW5kb3dUYXJnZXQsIG5zbnVsbCwg
dGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyh0YXJnZXRJdGVt
KSk7CiAKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IHRhcmdldERvY1NoZWxsID0gZG9f
UXVlcnlJbnRlcmZhY2UodGFyZ2V0SXRlbSk7CiAgICAgICAgIAogICAgICAgICBib29sIGlzTmV3
V2luZG93ID0gZmFsc2U7CiAgICAgICAgIGlmICghdGFyZ2V0RG9jU2hlbGwpIHsKKyAgICAgICAg
ICAgIC8vIElmIHRoZSBkb2NzaGVsbCdzIGRvY3VtZW50IGlzIHNhbmRib3hlZCBhbmQgd2FzIHRy
eWluZyB0bworICAgICAgICAgICAgLy8gbmF2aWdhdGUvbG9hZCBhIGZyYW1lIGl0IHdhc24ndCBh
bGxvd2VkIHRvIGFjY2VzcywgdGhlCisgICAgICAgICAgICAvLyBGaW5kSXRlbVdpdGhOYW1lIGFi
b3ZlIHdpbGwgaGF2ZSByZXR1cm5lZCBudWxsIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAv
LyBpdGVtIC0gd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBvcGVuIGEgbmV3IHdpbmRvdyBpbiB0
aGlzIGNhc2UKKyAgICAgICAgICAgIC8vIHRob3VnaC4gQ2hlY2sgaWYgd2UgYXJlIHNhbmRib3hl
ZCBhbmQgYmFpbCBvdXQgaGVyZSBpZiBzby4KKyAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKG1D
b250ZW50Vmlld2VyLCBOU19FUlJPUl9GQUlMVVJFKTsKKyAgICAgICAgICAgIG5zSURvY3VtZW50
KiBkb2MgPSBtQ29udGVudFZpZXdlci0+R2V0RG9jdW1lbnQoKTsKKyAgICAgICAgICAgIFBSVWlu
dDMyIHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNh
bmRib3hGbGFncygpOworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9O
QVZJR0FUSU9OKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7Cisg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gd2luID0K
ICAgICAgICAgICAgICAgICBkb19HZXRJbnRlcmZhY2UoR2V0QXNTdXBwb3J0cyh0aGlzKSk7CiAg
ICAgICAgICAgICBOU19FTlNVUkVfVFJVRSh3aW4sIE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpOwog
CiAgICAgICAgICAgICBuc0RlcGVuZGVudFN0cmluZyBuYW1lKGFXaW5kb3dUYXJnZXQpOwogICAg
ICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiBuZXdXaW47CiAgICAgICAgICAgICBydiA9
IHdpbi0+T3BlbihFbXB0eVN0cmluZygpLCAvLyBVUkwgdG8gbG9hZAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSwgICAgICAgICAgLy8gd2luZG93IG5hbWUKQEAgLTkwNjEsMTggKzkx
NDcsMzEgQEAgbnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIH0K
ICAgICAgICAgLy8gU2V0IHRoZSByZWZlcnJlciBleHBsaWNpdGx5CiAgICAgICAgIGlmIChhUmVm
ZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJlcikgewogICAgICAgICAgICAgLy8gUmVmZXJyZXIgaXMg
Y3VycmVubHkgb25seSBzZXQgZm9yIGxpbmsgY2xpY2tzIGhlcmUuCiAgICAgICAgICAgICBodHRw
Q2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJlZmVycmVyVVJJKTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWwoZG9fUXVlcnlJbnRlcmZh
Y2UoYU93bmVyKSk7Ci0gICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG93bmVy
UHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlKTsKKyAgICBuc0NPTVB0cjxuc0lQcmluY2lw
YWw+IG93bmVyUHJpbmNpcGFsOworCisgICAgLy8gSWYgdGhlIGNvbnRlbnQgYmVpbmcgbG9hZGVk
IHNob3VsZCBiZSBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9yaWdpbgorICAgIC8vIHdlIG5l
ZWQgdG8gY3JlYXRlIGEgbmV3IG51bGwgcHJpbmNpcGFsIGhlcmUsIGFuZCB0aGVuIHRlbGwKKyAg
ICAvLyBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIgdG8gZm9yY2UgaXQgdG8gYmUg
c2V0IGFzIHRoZQorICAgIC8vIGNoYW5uZWwgb3duZXIuCisgICAgaWYgKG1TYW5kYm94RmxhZ3Mg
JiBTQU5EQk9YRURfT1JJR0lOKSB7CisgICAgICAgIG93bmVyUHJpbmNpcGFsID0gZG9fQ3JlYXRl
SW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9udWxscHJpbmNpcGFsOzEiKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBOb3Qgc2FuZGJveGVkIC0gd2UgYWxsb3cgdGhlIGNvbnRlbnQgdG8gYXNzdW1l
IGl0cyBuYXR1cmFsIG93bmVyLgorICAgICAgICBvd25lclByaW5jaXBhbCA9IGRvX1F1ZXJ5SW50
ZXJmYWNlKGFPd25lcik7CisgICAgfQorCisgICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5l
bE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklH
SU4pKTsKIAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENoYW5uZWw+IHNjcmlwdENoYW5uZWwgPSBk
b19RdWVyeUludGVyZmFjZShjaGFubmVsKTsKICAgICBpZiAoc2NyaXB0Q2hhbm5lbCkgewogICAg
ICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBvdXIgY29udGV4dCBpZiB0aGUgcHJpbmNp
cGFscyBtYXRjaAogICAgICAgICBzY3JpcHRDaGFubmVsLT4KICAgICAgICAgICAgIFNldEV4ZWN1
dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05PUk1BTCk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaCBiL2RvY3NoZWxsL2Jhc2UvbnNE
b2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCisrKyBiL2RvY3NoZWxs
L2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03NTUsMTYgKzc1NSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
Ly8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBpcyBub3QgZXhwZWN0ZWQgdG8gY2hhbmdl
LgogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1JdGVtVHlwZTsKIAogICAgIC8vIElu
ZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwgaW5kaWNhdGluZyB0aGUgcHJldmlvdXMg
YW5kIGN1cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBhdCB0aGUgdGltZSB0aGF0IHRoaXMgRG9j
U2hlbGwgYmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtUHJl
dmlvdXNUcmFuc0luZGV4OwogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1Mb2FkZWRU
cmFuc0luZGV4OwogCisgICAgUFJVaW50MzIgICAgICAgICAgICAgICAgICAgbVNhbmRib3hGbGFn
czsKKwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1DcmVhdGVkOwogICAgIGJvb2wg
ICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1N1YmZyYW1lczsKICAgICBib29sICAgICAgICAg
ICAgICAgICAgICAgICBtQWxsb3dQbHVnaW5zOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAg
ICAgIG1BbGxvd0phdmFzY3JpcHQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFs
bG93TWV0YVJlZGlyZWN0czsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dJ
bWFnZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93RE5TUHJlZmV0Y2g7
CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93V2luZG93Q29udHJvbDsKZGlm
ZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsIGIvZG9jc2hlbGwvYmFzZS9u
c0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKKysrIGIv
ZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAgLTM0LDE3ICszNCwxNyBAQCBpbnRlcmZh
Y2UgbnNJU0hFbnRyeTsKIGludGVyZmFjZSBuc0lMYXlvdXRIaXN0b3J5U3RhdGU7CiBpbnRlcmZh
Y2UgbnNJU2VjdXJlQnJvd3NlclVJOwogaW50ZXJmYWNlIG5zSURPTVN0b3JhZ2U7CiBpbnRlcmZh
Y2UgbnNJUHJpbmNpcGFsOwogaW50ZXJmYWNlIG5zSVdlYkJyb3dzZXJQcmludDsKIGludGVyZmFj
ZSBuc0lWYXJpYW50OwogaW50ZXJmYWNlIG5zSVByaXZhY3lUcmFuc2l0aW9uT2JzZXJ2ZXI7CiAK
LVtzY3JpcHRhYmxlLCB1dWlkKDZmNjBhYzk2LWZhMmMtNDFhNS05MmI0LTI5YWFhZGJkN2E3Yild
Citbc2NyaXB0YWJsZSwgdXVpZCg5YjI4MzMzNy0wOTdkLTRmYTgtYTJkYS05MTYzMThlYWY4Mjgp
XQogaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKIHsKICAgLyoqCiAgICAqIExv
YWRzIGEgZ2l2ZW4gVVJJLiAgVGhpcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gbG9hZGluZyB0aGUg
cmVxdWVzdGVkIFVSSQogICAgKiBpbiB0aGUgb2JqZWN0IGltcGxlbWVudGluZwl0aGlzIGludGVy
ZmFjZS4gIElmIGl0IGNhbid0IGJlIGxvYWRlZCBoZXJlCiAgICAqIGhvd2V2ZXIsIHRoZSBVUkwg
ZGlzcGF0Y2hlciB3aWxsIGdvIHRocm91Z2ggaXRzIG5vcm1hbCBwcm9jZXNzIG9mIGNvbnRlbnQK
ICAgICogbG9hZGluZy4KICAgICoKQEAgLTU4OCw5ICs1ODgsMjMgQEAgaW50ZXJmYWNlIG5zSURv
Y1NoZWxsIDogbnNJU3VwcG9ydHMKICAgICovCiAgIGF0dHJpYnV0ZSBib29sIGlzQnJvd3NlckZy
YW1lOwogCiAgIC8qCiAgICAqIElzIHRoaXMgZG9jc2hlbGwgY29udGFpbmVkIGluIGFuIDxpZnJh
bWUgbW96YnJvd3Nlcj4sIGVpdGhlciBkaXJlY3RseSBvcgogICAgKiBpbmRpcmVjdGx5PwogICAg
Ki8KICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgY29udGFpbmVkSW5Ccm93c2VyRnJhbWU7CisK
KyAgLyoqCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2NzaGVsbC4gVGhlc2UgcmVm
bGVjdCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlIG9mIHRoZSBhc3Nv
Y2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYKKyAgICogZXhpc3Rl
bnQuIFNlZSB0aGUgSFRNTDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBUaGVzZSBmbGFn
cyBvbiB0aGUgZG9jc2hlbGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2FuZGJv
eAorICAgKiBhdHRyaWJ1dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuIFRoZXkgYXJlIG9ubHkgdXNl
ZCB3aGVuIGxvYWRpbmcgbmV3CisgICAqIGNvbnRlbnQsIHNhbmRib3ggZmxhZ3MgYXJlIGFsc28g
aW1tdXRhYmx5IHNldCBvbiB0aGUgZG9jdW1lbnQgd2hlbiBpdCBpcworICAgKiBsb2FkZWQuCisg
ICAqIFRoZSBzYW5kYm94IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94
IGZsYWdzIG9uIGl0cworICAgKiBkb2NzaGVsbCBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVudCwg
aWYgYW55LgorICAgKiBTZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdz
LgorICAgKi8KKyAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdzOwogfTsKZGlm
ZiAtLWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xvYmFs
V2luZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9tL2Jh
c2UvbnNHbG9iYWxXaW5kb3cuY3BwCkBAIC0yMTMsMTYgKzIxMywxNyBAQAogI2luY2x1ZGUgIm5z
UmVmcmVzaERyaXZlci5oIgogI2luY2x1ZGUgIm1vekF1dG9Eb2NVcGRhdGUuaCIKIAogI2luY2x1
ZGUgIm1vemlsbGEvVGVsZW1ldHJ5LmgiCiAjaW5jbHVkZSAibnNMb2NhdGlvbi5oIgogI2luY2x1
ZGUgIm5zV3JhcHBlckNhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIm5zRE9NRXZlbnRUYXJnZXRI
ZWxwZXIuaCIKICNpbmNsdWRlICJuc0lBcHBzU2VydmljZS5oIgorI2luY2x1ZGUgIm5zU2FuZGJv
eEZsYWdzLmgiCiAKICNpZmRlZiBBTkRST0lECiAjaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KICNl
bmRpZgogCiAjaWZkZWYgUFJfTE9HR0lORwogc3RhdGljIFBSTG9nTW9kdWxlSW5mbyogZ0RPTUxl
YWtQUkxvZzsKICNlbmRpZgpAQCAtODEzNSwxNiArODEzNiwyMiBAQCBuc0dsb2JhbFdpbmRvdzo6
R2V0U2Vzc2lvblN0b3JhZ2UobnNJRE9NCiAgIGlmICghbVNlc3Npb25TdG9yYWdlKSB7CiAgICAg
KmFTZXNzaW9uU3RvcmFnZSA9IG5zbnVsbDsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwog
ICAgIGlmIChtRG9jdW1lbnQpIHsKICAgICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9j
dW1lbnRVUkkpOwogICAgIH0KIAorICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRi
b3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAgICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxT
dG9yYWdlLgorICAgIGlmIChtRG9jICYmIChtRG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hF
RF9PUklHSU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAg
ICB9CisKICAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTZXNzaW9uU3RvcmFnZUZvclBy
aW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVm
cyhtU2Vzc2lvblN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAj
aWZkZWYgUFJfTE9HR0lORwogICAgIGlmIChQUl9MT0dfVEVTVChnRE9NTGVha1BSTG9nLCBQUl9M
T0dfREVCVUcpKSB7CkBAIC04MjAwLDE2ICs4MjA3LDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRM
b2NhbFN0b3JhZ2UobnNJRE9NU3QKICAgICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9k
b20vc3RvcmFnZW1hbmFnZXI7MSIsICZydik7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2
KTsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAg
ICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAorICAg
IC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAg
ICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9jICYm
IChtRG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1
cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBuc0lEb2NTaGVsbCog
ZG9jU2hlbGwgPSBHZXREb2NTaGVsbCgpOwogICAgIG5zQ09NUHRyPG5zSUxvYWRDb250ZXh0PiBs
b2FkQ29udGV4dCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGRvY1NoZWxsKTsKIAogICAgIHJ2ID0gc3Rv
cmFnZU1hbmFnZXItPkdldExvY2FsU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
VVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2FkQ29udGV4dCAmJiBsb2FkQ29udGV4dC0+VXNlUHJpdmF0ZUJyb3dzaW5nKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9B
ZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpk
aWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5p
ZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAotLS0g
YS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAorKysgYi9k
b20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbApAQCAtMTEsMzIg
KzExLDMyIEBACiAgKgogICogVGhpcyBpbnRlcmZhY2UgaXMgdHJ5aW5nIHRvIGZvbGxvdyB0aGUg
RE9NIExldmVsIDIgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53My5vcmcvVFIv
RE9NLUxldmVsLTItSFRNTC8KICAqCiAgKiB3aXRoIGNoYW5nZXMgZnJvbSB0aGUgd29yay1pbi1w
cm9ncmVzcyBXSEFUV0cgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53aGF0d2cu
b3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8KICAqLwogCi1bc2NyaXB0YWJsZSwgdXVp
ZCg5N0U0RjBFMS1CRDI3LTQwRUMtOTI4Ny01NjM0REFGMTVCNzMpXQorW3NjcmlwdGFibGUsIHV1
aWQoNTJmNjI0NGItYjFmNS00ZjRjLThmZjMtN2UxNDYzMTZmNDExKV0KIGludGVyZmFjZSBuc0lE
T01IVE1MSUZyYW1lRWxlbWVudCA6IG5zSURPTUhUTUxFbGVtZW50CiB7CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGFsaWduOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nICAgICAgICBmcmFtZUJvcmRlcjsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmlu
ZyAgICAgICAgaGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBs
b25nRGVzYzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luSGVp
Z2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5XaWR0aDsK
ICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFtZTsKICAgICAgICAgICAg
YXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc2Nyb2xsaW5nOwogICAgICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nICAgICAgICBzcmM7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcg
ICAgICAgIHdpZHRoOwogICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICByZWFkb25s
eSBhdHRyaWJ1dGUgbnNJRE9NRG9jdW1lbnQgICBjb250ZW50RG9jdW1lbnQ7CiAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBuc0lET01XaW5kb3cgICAgIGNvbnRlbnRXaW5kb3c7CiAKLQorICAgICAgICAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzYW5kYm94OwogICAvLyBNb3ppbGxhIGV4dGVu
c2lvbnMKICAgLy8gaWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1vekFsbG93RnVsbFNjcmVl
biBhdHRyaWJ1dGUgdG8gYmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3JlIHRvIGFsbG93IGNvbnRl
bnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxsLXNjcmVlbgogICAvLyBt
b2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBocD90aXRsZT1HZWNrbzpG
dWxsU2NyZWVuQVBJCiAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgIG1vekFs
bG93RnVsbFNjcmVlbjsKIH07CmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL01ha2VmaWxlLmlu
IGIvZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbgotLS0gYS9kb20vc3JjL2pzdXJsL01ha2VmaWxl
LmluCisrKyBiL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KQEAgLTI1LDE2ICsyNSwxNyBAQCBY
UElETFNSQ1MJPSBcCiBDUFBTUkNTCQk9IG5zSlNQcm90b2NvbEhhbmRsZXIuY3BwCiAKIEVYUE9S
VFMJCT0gJChzcmNkaXIpL25zSlNQcm90b2NvbEhhbmRsZXIuaAogCiBMT0NBTF9JTkNMVURFUyAr
PSBcCiAJCS1JJChzcmNkaXIpIFwKIAkJLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UgXAogCQktSSQo
dG9wc3JjZGlyKS9uZXR3ZXJrL2Jhc2Uvc3JjIFwKKwkJLUkkKHRvcHNyY2RpcikvY29udGVudC9i
YXNlL3NyYyBcCiAKIGlmZGVmIEJVSUxEX0RFQlVHX0dDCiBERUZJTkVTCQkrPSAtRERFQlVHX0dD
CiBlbmRpZgogCiBESVJTICAgICAgICAgICAgPSAkKE5VTEwpCiBURVNUX0RJUlMgKz0gdGVzdAog
CmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwIGIvZG9t
L3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcAotLS0gYS9kb20vc3JjL2pzdXJsL25z
SlNQcm90b2NvbEhhbmRsZXIuY3BwCisrKyBiL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFu
ZGxlci5jcHAKQEAgLTQwLDE2ICs0MCwxNyBAQAogI2luY2x1ZGUgIm5zVGhyZWFkVXRpbHMuaCIK
ICNpbmNsdWRlICJuc0lKU0NvbnRleHRTdGFjay5oIgogI2luY2x1ZGUgIm5zSVNjcmlwdENoYW5u
ZWwuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgogI2luY2x1ZGUgIm5zSU9iamVjdElucHV0
U3RyZWFtLmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0T3V0cHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAi
bnNJV3JpdGFibGVQcm9wZXJ0eUJhZzIuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQ
b2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBzdGF0aWMgTlNfREVGSU5F
X0NJRChrSlNVUklDSUQsIE5TX0pTVVJJX0NJRCk7CiAKIGNsYXNzIG5zSlNUaHVuayA6IHB1Ymxp
YyBuc0lJbnB1dFN0cmVhbQogewogcHVibGljOgogICAgIG5zSlNUaHVuaygpOwogCkBAIC0xODYs
MTYgKzE4NywyOCBAQCBuc3Jlc3VsdCBuc0pTVGh1bms6OkV2YWx1YXRlU2NyaXB0KG5zSUNoCiAg
ICAgLy8gR2V0IHRoZSBnbG9iYWwgb2JqZWN0IHdlIHNob3VsZCBiZSBydW5uaW5nIG9uLgogICAg
IG5zSVNjcmlwdEdsb2JhbE9iamVjdCogZ2xvYmFsID0gR2V0R2xvYmFsT2JqZWN0KGFDaGFubmVs
KTsKICAgICBpZiAoIWdsb2JhbCkgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsK
ICAgICB9CiAKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW4oZG9fUXVlcnlJbnRlcmZh
Y2UoZ2xvYmFsKSk7CiAKKyAgICAvLyBTYW5kYm94ZWQgZG9jdW1lbnQgY2hlY2s6IGphdmFzY3Jp
cHQ6IFVSSSdzIGFyZSBkaXNhYmxlZAorICAgIC8vIGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHVu
bGVzcyAnYWxsb3ctc2NyaXB0cycgd2FzIHNwZWNpZmllZAorCisgICAgLy8gUkVWSUVXIC0gaXQg
c2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgaW5uZXIgd2luZG93IHdvdWxkIGJlIHRoZSBvbmUKKyAg
ICAvLyB0aGF0IHdpbGwgZXhlY3V0ZSB0aGUgamF2YXNjcmlwdCB3aXRoIGl0cyBwcmluY2lwYWwg
LSBpcyB0aGlzCisgICAgLy8gYXNzdW1wdGlvbiBjb3JyZWN0ID8/IChhbmQgaXMgR2V0RXh0YW50
RG9jdW1lbnQoKSB0aGUgcmlnaHQgd2F5CisgICAgLy8gdG8gZ2V0IHRoZSByaWdodCBkb2N1bWVu
dCA/PworICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19RdWVyeUludGVyZmFjZShh
T3JpZ2luYWxJbm5lcldpbmRvdy0+R2V0RXh0YW50RG9jdW1lbnQoKSk7CisgICAgaWYgKGRvYyAm
JiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSkgeworICAgICAgcmV0
dXJuIE5TX0VSUk9SX0RPTV9SRVRWQUxfVU5ERUZJTkVEOworICAgIH0KKwogICAgIC8vIFB1c2gg
b3VyIHBvcHVwIGNvbnRyb2wgc3RhdGUKICAgICBuc0F1dG9Qb3B1cFN0YXRlUHVzaGVyIHBvcHVw
U3RhdGVQdXNoZXIod2luLCBhUG9wdXBTdGF0ZSk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2Ugc3Rp
bGwgaGF2ZSB0aGUgc2FtZSBpbm5lciB3aW5kb3cgYXMgd2UgdXNlZCB0by4KICAgICBuc1BJRE9N
V2luZG93ICppbm5lcldpbiA9IHdpbi0+R2V0Q3VycmVudElubmVyV2luZG93KCk7CiAKICAgICBp
ZiAoaW5uZXJXaW4gIT0gYU9yaWdpbmFsSW5uZXJXaW5kb3cpIHsKICAgICAgICAgcmV0dXJuIE5T
X0VSUk9SX1VORVhQRUNURUQ7CmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5k
b3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbiBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dh
dGNoZXIvc3JjL01ha2VmaWxlLmluCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dh
dGNoZXIvc3JjL01ha2VmaWxlLmluCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dh
dGNoZXIvc3JjL01ha2VmaWxlLmluCkBAIC0yNCwxMSArMjQsMTIgQEAgQ1BQU1JDUwkJKz0gbnNE
aWFsb2dQYXJhbUJsb2NrLmNwcCBcCiAJCSAgICQoTlVMTCkKIGVuZGlmCiAKICMgd2UgZG9uJ3Qg
d2FudCB0aGUgc2hhcmVkIGxpYiwgYnV0IHdlIHdhbnQgdG8gZm9yY2UgdGhlIGNyZWF0aW9uIG9m
IGEKICMgc3RhdGljIGxpYi4KIEZPUkNFX1NUQVRJQ19MSUIgPSAxCiAKICMgRm9yIG5zSlNVdGls
cwotTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UKK0xPQ0FMX0lOQ0xV
REVTICs9IC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKKwkJICAtSSQodG9wc3JjZGlyKS9jb250
ZW50L2Jhc2Uvc3JjIFwKIAogaW5jbHVkZSAkKHRvcHNyY2RpcikvY29uZmlnL3J1bGVzLm1rCmRp
ZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRv
d1dhdGNoZXIuY3BwIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNX
aW5kb3dXYXRjaGVyLmNwcAotLS0gYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVy
L3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRv
d3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKQEAgLTUzLDE2ICs1MywxNyBAQAogI2lu
Y2x1ZGUgIm5zUElET01TdG9yYWdlLmgiCiAjaW5jbHVkZSAibnNJV2lkZ2V0LmgiCiAjaW5jbHVk
ZSAibnNGb2N1c01hbmFnZXIuaCIKICNpbmNsdWRlICJuc0lQcmVzU2hlbGwuaCIKICNpbmNsdWRl
ICJuc1ByZXNDb250ZXh0LmgiCiAjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKICNpbmNsdWRl
ICJuc0lQcmVmQnJhbmNoLmgiCiAjaW5jbHVkZSAibnNJUHJlZlNlcnZpY2UuaCIKKyNpbmNsdWRl
ICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZkZWYgVVNFV0VBS1JFRlMKICNpbmNsdWRlICJuc0lX
ZWFrUmVmZXJlbmNlLmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiAKIHN0
YXRpYyBjb25zdCBjaGFyICpzSlNTdGFja0NvbnRyYWN0SUQ9IkBtb3ppbGxhLm9yZy9qcy94cGMv
Q29udGV4dFN0YWNrOzEiOwpAQCAtNTcwLDE2ICs1NzEsMzMgQEAgbnNXaW5kb3dXYXRjaGVyOjpP
cGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAgaWYgKCFuZXdEb2NTaGVsbEl0ZW0pIHsK
ICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3BlbiB1cCBhIG5ldyB3aW5kb3cgb3Vyc2Vs
dmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJvdmlkZXIgZm9yIG9uZS4gIEluIGVpdGhl
ciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmlnaHQKICAgICAvLyBuYW1lIG9uIGl0Lgog
ICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAgICAvLyBJZiB0aGUgcGFyZW50IHRyeWlu
ZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94ZWQsCisgICAgLy8gdGhpcyBpcyBub3Qg
YWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlmIChhUGFyZW50KSB7CisgICAgICBuc0NP
TVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAgICAgYVBhcmVudC0+R2V0RG9jdW1lbnQo
Z2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gZG9j
ID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKworICAgICAgaWYgKGRvYykgeworICAgICAg
ICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2Mt
PlNhbmRib3hGbGFncygpOworCisgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURf
TkFWSUdBVElPTikgeworICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAg
ICB9CisgICAgICB9CisgICAgfQorCiAgICAgLy8gTm93IGNoZWNrIHdoZXRoZXIgaXQncyBvayB0
byBhc2sgYSB3aW5kb3cgcHJvdmlkZXIgZm9yIGEgd2luZG93LiAgRG9uJ3QKICAgICAvLyBkbyBp
dCBpZiB3ZSdyZSBvcGVuaW5nIGEgZGlhbG9nIG9yIGlmIG91ciBwYXJlbnQgaXMgYSBjaHJvbWUg
d2luZG93IG9yCiAgICAgLy8gaWYgd2UncmUgb3BlbmluZyBzb21ldGhpbmcgdGhhdCBoYXMgbW9k
YWwsIGRpYWxvZywgb3IgY2hyb21lIGZsYWdzIHNldC4KICAgICBuc0NPTVB0cjxuc0lET01DaHJv
bWVXaW5kb3c+IGNocm9tZVdpbiA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFQYXJlbnQpOwogICAgIGlm
ICghYURpYWxvZyAmJiAhY2hyb21lV2luICYmCiAgICAgICAgICEoY2hyb21lRmxhZ3MgJiAobnNJ
V2ViQnJvd3NlckNocm9tZTo6Q0hST01FX01PREFMICAgICAgICAgfAogICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfRElBTE9HIHwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX09QRU5B
U19DSFJPTUUpKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>633639</attachid>
            <date>2012-06-15 13:10:12 -0700</date>
            <delta_ts>2012-08-08 17:18:17 -0700</delta_ts>
            <desc>iframe sandbox tests - navigation v7</desc>
            <filename>iframe_sandbox_tests_navigation</filename>
            <type>text/plain</type>
            <size>31386</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNjk3ZDg3NDExZjA2MDY2NTM4YzBmMGJhZjU3
NTI1ZjVhNTUzOThkMwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBuYXZpZ2F0aW9uCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFr
ZWZpbGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yNjUsMTYgKzI2NSw0
MSBAQCBfVEVTVF9GSUxFUyA9IFwKIAkJdGVzdF9idWc3NDI1NDkuaHRtbCBcCiAJCXRlc3RfYnVn
NzQ1Njg1Lmh0bWwgXAogCQl0ZXN0X2lucHV0X2ZpbGVfcGlja2VyLmh0bWwgXAogCQl0ZXN0X2J1
Zzc2MzYyNi5odG1sIFwKIAkJdGVzdF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdpbi5odG1sIFwK
IAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJv
eF9iX2lmMi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5odG1sIFwKKwkJdGVz
dF9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94
X2RfaWYxLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0bWwgXAorCQlmaWxl
X2lmcmFtZV9zYW5kYm94X2RfaWYzLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY0
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwgXAorCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWY2Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwg
XAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY4Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWY5Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMC5odG1sIFwKKwkJ
ZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTEuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hf
ZF9pZjEyLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMy5odG1sIFwKKwkJZmls
ZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9z
YW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZp
Z2F0aW9uX2ZhaWwuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjEuaHRtbCBcCisJ
CWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjIuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hf
ZV9pZjMuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjQuaHRtbCBcCisJCWZpbGVf
aWZyYW1lX3NhbmRib3hfZV9pZjUuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjYu
aHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fcGFzcy5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9mYWlsLmh0bWwgXAogCQl0ZXN0
X2lmcmFtZV9zYW5kYm94X3BsdWdpbnMuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZl9p
ZjEuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbCBcCiAJCWZpbGVfaWZy
YW1lX3NhbmRib3hfZl9pZjIuaHRtbF5oZWFkZXJzXiBcCiAJCXRlc3RfaWZyYW1lX3NhbmRib3hf
d29ya2Vycy5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9nX2lmMS5odG1sIFwKIAkJZmls
ZV9pZnJhbWVfc2FuZGJveF93b3JrZXIuanMgXAogCQkkKE5VTEwpCmRpZmYgLS1naXQgYS9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEuaHRtbCBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxLmh0bWwKQEAgLTAsMCArMSwxOSBAQAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3Mi
Lz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRl
c3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxp
Y2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBzZW5kTW91c2VFdmVu
dCh7dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9
ImRvVGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycKKworICA8
YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sP2lmXzEiIHRh
cmdldD0iX3NlbGYiIGlkPSdhbmNob3InPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMC5odG1s
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMC5odG1sCkBAIC0wLDAgKzEs
MTcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rl
c3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9T
aW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCB0eXBl
PSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgd2luZG93
LnBhcmVudC5wb3N0TWVzc2FnZSh7dGVzdDonaWZfMTAnfSwgIioiKTsKK30KKzwvc2NyaXB0Pgor
PGJvZHkgb25sb2FkPSdkb1Rlc3QoKSc+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNj
cmlwdHMnCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjExLmh0bWwgYi9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjExLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfZF9pZjExLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5U
ZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBl
PSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGls
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgeworICAvLyB0aGlzIHNob3VsZCBmYWlsIHRoZSBm
aXJzdCB0aW1lLCBidXQgd29yayB0aGUgc2Vjb25kCisgIHRyeSB7CisgICAgd2luZG93LnBhcmVu
dC5va193cmFwcGVyKHRydWUsICJhIGRvY3VtZW50IHRoYXQgd2FzIGxvYWRlZCwgbmF2aWdhdGVk
IHRvIGFub3RoZXIgZG9jdW1lbnQsIGhhZCAnYWxsb3ctc2FtZS1vcmlnaW4nIGFkZGVkIGFuZCB0
aGVuIHdhcyIgKworICAgICAgIiBuYXZpZ2F0ZWQgYmFjayBzaG91bGQgYmUgc2FtZS1vcmlnaW4g
d2l0aCBpdHMgcGFyZW50Iik7CisgIH0gCisgIGNhdGNoIChlKSB7CisgICAgc2VuZE1vdXNlRXZl
bnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsKKyAgfQorfQorCis8L3NjcmlwdD4KKzxib2R5
IG9ubG9hZD0nZG9UZXN0KCknPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRz
JworICA8YSBocmVmPSdmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMi5odG1sJyBpZD0nYW5jaG9y
Jz5DTElDSyBNRTwvYT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTIuaHRtbCBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTIuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTIuaHRtbApAQCAtMCwwICsxLDE2IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgor
PC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9u
IGRvVGVzdCgpIHsKKyAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7dGVzdDonaWZfMTEnfSwg
IioiKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSdkb1Rlc3QoKSc+CisgIEkgYW0gc2Fu
ZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEzLmh0
bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEzLmh0bWwKQEAgLTAsMCAr
MSwzNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0
PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3Rz
L1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5
cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1l
c3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOworCitmdW5jdGlvbiByZWNlaXZlTWVzc2Fn
ZShldmVudCkgeworICAvLyB0aGlzIG1lc3NhZ2UgaXMgcGFydCBvZiBpZl8xMSdzIHRlc3QKKyAg
aWYgKGV2ZW50LmRhdGEudGVzdCA9PSAnaWZfMTEnKSB7CisgICAgZG9JZjExVGVzdFBhcnQyKCk7
CisgICAgcmV0dXJuOworICB9Cit9CisKK2Z1bmN0aW9uIG9rX3dyYXBwZXIocmVzdWx0LCBtc2cp
IHsKKyAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZSh7b2s6IHJlc3VsdCwgZGVzYzogbXNnfSwg
IioiKTsKKyAgd2luZG93LmNsb3NlKCk7Cit9CisKK2Z1bmN0aW9uIGRvSWYxMVRlc3RQYXJ0Migp
IHsKKyAgdmFyIGlmXzExID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmXzExJyk7CisgIGlm
XzExLnNhbmRib3ggPSAnYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbic7CisgIGlmXzEx
LmNvbnRlbnRXaW5kb3cuaGlzdG9yeS5iYWNrKCk7Cit9IAorPC9zY3JpcHQ+Cis8Ym9keT4KKyAg
PGlmcmFtZSBzYW5kYm94PSdhbGxvdy1zY3JpcHRzJyBpZD0iaWZfMTEiIHNyYz0iZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmMTEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjIuaHRtbApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1
ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3Nz
IiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+Cisv
LyBuZWVkZWQgdG8gZm9yd2FyZCB0aGUgbWVzc2FnZSB0byB0aGUgbWFpbiB0ZXN0IHBhZ2UKK3dp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTsK
KworZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpIHsgCisgIHdpbmRvdy5wYXJlbnQucG9z
dE1lc3NhZ2Uoe29rOiBldmVudC5kYXRhLm9rLCBkZXNjOiBldmVudC5kYXRhLmRlc2N9LCAiKiIp
OworfQorCitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGlj
ayd9LCAnYW5jaG9yJyk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPgor
ICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworCisgIDxpZnJhbWUgbmFtZT0i
Zm9vIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1sIiBoZWln
aHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorCisgIDxhIGhyZWY9ImZpbGVfaWZyYW1lX3Nh
bmRib3hfbmF2aWdhdGlvbl9wYXNzLmh0bWw/aWYyIiB0YXJnZXQ9J2ZvbycgaWQ9J2FuY2hvcic+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjMuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0t
LSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2RfaWYzLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBC
dWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2Nz
cyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5Pgor
ICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworCisgIDxpZnJhbWUgc2FuZGJv
eD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzQiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
NC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWY0Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1s
CkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+
CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9T
aW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgp
IHsKKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsKK30KKzwvc2Ny
aXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2Fs
bG93LXNjcmlwdHMnCisKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9u
X2ZhaWwuaHRtbCIgdGFyZ2V0PSdfcGFyZW50JyBpZD0nYW5jaG9yJz4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmNS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2RfaWY1Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRt
bApAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxt
ZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxl
PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMv
U2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
KzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1Rlc3Qo
KSB7CisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYW5jaG9yJyk7Cit9Cis8L3Nj
cmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdh
bGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luJworCisgIDxhIGhyZWY9ImZpbGVfaWZyYW1l
X3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwiIHRhcmdldD0nc2libGluZycgaWQ9J2FuY2hv
cic+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjYuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWY2Lmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8
aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZv
ciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0
L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQi
PgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwg
J2FuY2hvcicpOworfQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKyAgSSBh
bSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycKKworICA8YSBocmVmPSJmaWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWY3Lmh0bWwiIHRhcmdldD0nX3NlbGYnIGlkPSdhbmNob3InPgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfZF9pZjcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9u
dWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9k
X2lmNy5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxo
ZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAz
NDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIg
aHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdCB0
eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICB3
aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIoZmFsc2UsICJhIHNhbmRib3hlZCBkb2N1bWVudCB3aGVu
IG5hdmlnYXRlZCBzaG91bGQgc3RpbGwgTk9UIGJlIHNhbWUtb3JpZ2luIHdpdGggaXRzIHBhcmVu
dCIpOw0KK30NCis8L3NjcmlwdD4NCis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4NCisgIEkgYW0g
c2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnDQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9p
ZjguaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9k
X2lmOC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY4Lmh0bWwKQEAgLTAs
MCArMSwxNiBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQor
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2lt
cGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9u
L2phdmFzY3JpcHQiPg0KK2Z1bmN0aW9uIGRvVGVzdCgpIHsNCisgIHdpbmRvdy5wYXJlbnQubW9k
aWZ5X2lmXzgoKTsNCit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+DQor
ICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJyBhbmQgJ2FsbG93LXNhbWUtb3Jp
Z2luJyB0aGUgZmlyc3QgdGltZSBJIGFtIGxvYWRlZCwgYW5kIHdpdGggJ2FsbG93LXNjcmlwdHMn
IHRoZSBzZWNvbmQgdGltZQ0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY5Lmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjkuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOS5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzwh
RE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
Pg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5j
c3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4N
CitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICB3aW5kb3cucGFyZW50Lm1vZGlmeV9pZl85KCk7DQor
fQ0KKzwvc2NyaXB0Pg0KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPg0KKyAgSSBhbSBzYW5kYm94
ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycgYW5kICdhbGxvdy1zYW1lLW9yaWdpbicgdGhlIGZpcnN0
IHRpbWUgSSBhbSBsb2FkZWQsIGFuZCB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgdGhlIHNlY29u
ZCB0aW1lDQorPC9ib2R5Pg0KKzwvaHRtbD4NCisNCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjEuaHRtbCBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2VfaWYxLmh0bWwKQEAgLTAsMCArMSwyNCBAQAorPCFET0NUWVBF
IEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8
dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0K
KyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1w
bGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8Ym9keT4NCisgIDxz
Y3JpcHQ+DQorICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1l
c3NhZ2UsIGZhbHNlKTsNCisNCisgICAgZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpDQor
ICAgIHsNCisgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKCJjbG9zZSIsICIqIik7DQor
DQorICAgICAgU2ltcGxlVGVzdC5leGVjdXRlU29vbihmdW5jdGlvbigpIHsNCisgICAgICAgIHdp
bmRvdy5jbG9zZSgpOw0KKyAgICAgIH0pOyANCisgICAgfQ0KKyAgPC9zY3JpcHQ+DQorICA8aWZy
YW1lIHNhbmRib3g9J2FsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4nIGlkPSdpZl82JyBz
cmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjYuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEw
Ij48L2lmcmFtZT4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMi5odG1sIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWYyLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjIuaHRtbApAQCAtMCwwICsxLDIyIEBACis8IURPQ1RZ
UEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisg
IDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+
DQorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1Np
bXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+DQorPC9oZWFkPg0KKzxib2R5Pg0KKyAg
PHNjcmlwdD4NCisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZl
TWVzc2FnZSwgZmFsc2UpOw0KKw0KKyAgICBmdW5jdGlvbiByZWNlaXZlTWVzc2FnZShldmVudCkN
CisgICAgew0KKyAgICAgIFNpbXBsZVRlc3QuZXhlY3V0ZVNvb24oZnVuY3Rpb24oKSB7DQorICAg
ICAgICB3aW5kb3cuY2xvc2UoKTsNCisgICAgICB9KTsNCisgICAgfQ0KKyAgPC9zY3JpcHQ+DQor
ICA8aWZyYW1lIHNhbmRib3g9J2FsbG93LXNjcmlwdHMgYWxsb3ctdG9wLW5hdmlnYXRpb24gYWxs
b3ctc2FtZS1vcmlnaW4nIGlkPSdpZl8xJyBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjEu
aHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8L2JvZHk+DQorPC9odG1s
Pg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9lX2lmMy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2VfaWYzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjMuaHRt
bApAQCAtMCwwICsxLDExIEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisg
IDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90
aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90
ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxib2R5Pg0KKyAgPGlmcmFt
ZSBzYW5kYm94PSdhbGxvdy1zY3JpcHRzIGFsbG93LXRvcC1uYXZpZ2F0aW9uJyBpZD0naWZfNScg
c3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY1Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIx
MCI+PC9pZnJhbWU+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjQuaHRtbCBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWY0Lmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPCFET0NU
WVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQor
ICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxl
c2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIv
Pg0KKzwvaGVhZD4NCis8Ym9keT4NCisgIDxpZnJhbWUgc2FuZGJveD0nYWxsb3ctc2NyaXB0cyBh
bGxvdy10b3AtbmF2aWdhdGlvbicgaWQ9J2lmXzMnIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9l
X2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvYm9keT4NCis8
L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2VfaWY1Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZV9pZjUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxs
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lm
NS5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFk
Pg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2
MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJl
Zj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCisgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0
Pg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KK2Z1
bmN0aW9uIGRvVGVzdCgpIHsNCisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYW5j
aG9yJyk7DQorfQ0KKzwvc2NyaXB0Pg0KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPg0KKyAgSSBh
bSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cyBhbmQgYWxsb3ctdG9wLW5hdmlnYXRpb24n
DQorDQorICA8YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X3RvcF9uYXZpZ2F0aW9uX3Bhc3Mu
aHRtbCIgdGFyZ2V0PSdfdG9wJyBpZD0nYW5jaG9yJz4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9l
X2lmNi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2VfaWY2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjYuaHRtbApAQCAt
MCwwICsxLDI0IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4N
CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9T
aW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4NCisgIDxzY3Jp
cHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9T
aW1wbGVUZXN0LmpzIj48L3NjcmlwdD4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0Ij4NCitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICBzZW5kTW91c2VFdmVu
dCh7dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOw0KKw0KKyAgIFNpbXBsZVRlc3QuZXhlY3V0ZVNv
b24oZnVuY3Rpb24oKSB7DQorICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKCJjbG9zZSIs
ICIqIik7DQorICAgfSk7DQorfQ0KKzwvc2NyaXB0Pg0KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCki
Pg0KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycNCisNCisgIDxhIGhyZWY9
ImZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fZmFpbC5odG1sIiB0YXJnZXQ9J190
b3AnIGlkPSdhbmNob3InPg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fZmFpbC5o
dG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmln
YXRpb25fZmFpbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25f
ZmFpbC5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxo
ZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAz
NDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIg
aHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPGJvZHkgb25M
b2FkPSJkb1N0dWZmKCkiPg0KK0ZBSUwNCis8L2JvZHk+DQorPHNjcmlwdD4NCisgIGZ1bmN0aW9u
IGRvU3R1ZmYoKSB7DQorICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiBmYWxzZSwg
ZGVzYzogInRoaXMgbmF2aWdhdGlvbiBzaG91bGQgTk9UIGJlIGFsbG93ZWQgYnkgYSBzYW5kYm94
ZWQgZG9jdW1lbnQifSwgIioiKTsNCisgIH0NCis8L3NjcmlwdD4NCis8L2h0bWw+DQpkaWZmIC0t
Z2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmln
YXRpb25fcGFzcy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X25hdmlnYXRpb25fcGFzcy5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MPg0K
KzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRl
c3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBl
PSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+
DQorPHNjcmlwdD4NCitmdW5jdGlvbiBkb1N0dWZmKCkgew0KKyAgd2luZG93LnBhcmVudC5wb3N0
TWVzc2FnZSh7b2s6IHRydWUsIGRlc2M6ICJ0aGlzIG5hdmlnYXRpb24gc2hvdWxkIGJlIGFsbG93
ZWQgYnkgYSBzYW5kYm94ZWQgZG9jdW1lbnQifSwgIioiKTsNCit9DQorPC9zY3JpcHQ+DQorPGJv
ZHkgb25Mb2FkPSJkb1N0dWZmKCkiPg0KK1BBU1MNCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAt
LWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZp
Z2F0aW9uX3N0YXJ0Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X25hdmlnYXRpb25fc3RhcnQuaHRtbApAQCAtMCwwICsxLDExIEBACis8IURPQ1RZUEUgSFRN
TD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
dHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9o
ZWFkPg0KKzxib2R5Pg0KK0kgYW0ganVzdCBhIG5vcm1hbCBIVE1MIGRvY3VtZW50LCBwcm9iYWJs
eSBjb250YWluZWQgaW4gYSBzYW5kYm94ZWQgaWZyYW1lDQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
dG9wX25hdmlnYXRpb25fZmFpbC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X3RvcF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9mYWlsLmh0bWwKQEAgLTAsMCArMSwxNyBAQAor
PCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9
InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0
LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0Pg0KK2Z1bmN0aW9uIGRvU3R1ZmYoKSB7DQorCXdp
bmRvdy5vcGVuZXIucG9zdE1lc3NhZ2Uoe29rOiBmYWxzZSwgZGVzYzogICJ0b3AgbmF2aWdhdGlv
biBzaG91bGQgTk9UIGJlIGFsbG93ZWQgYnkgYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aG91dCAn
YWxsb3ctdG9wLW5hdmlnYXRpb24nIn0sICIqIik7DQorCXdpbmRvdy5jbG9zZSgpOw0KK30NCis8
L3NjcmlwdD4NCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+DQorRkFJTFwNCis8L2JvZHk+DQor
PC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9wYXNzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fcGFzcy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3RvcF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbApAQCAtMCww
ICsxLDE3IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisg
IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1w
bGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxzY3JpcHQ+DQorZnVuY3Rpb24gZG9TdHVm
ZigpIHsNCisJd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZSh7b2s6IHRydWUsIGRlc2M6ICAidG9w
IG5hdmlnYXRpb24gc2hvdWxkIGJlIGFsbG93ZWQgYnkgYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0
aCAnYWxsb3ctdG9wLW5hdmlnYXRpb24nIn0sICIqIik7DQorCXdpbmRvdy5jbG9zZSgpOw0KK30N
Cis8L3NjcmlwdD4NCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+DQorUEFTUw0KKzwvYm9keT4N
Cis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lm
cmFtZV9zYW5kYm94X25hdmlnYXRpb24uaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
dGVzdF9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
LS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1l
X3NhbmRib3hfbmF2aWdhdGlvbi5odG1sCkBAIC0wLDAgKzEsMjI5IEBACis8IURPQ1RZUEUgSFRN
TD4NCis8aHRtbD4NCis8IS0tDQoraHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzQxNjA0DQ0KK0ltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3Ig
SUZSQU1Fcw0KKy0tPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRp
dGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQgLSBuYXZpZ2F0aW9uPC90aXRsZT4NCisgIDxzY3JpcHQg
dHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1w
bGVUZXN0LmpzIj48L3NjcmlwdD4NCisJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+DQorICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90
ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3Jp
cHQiPg0KKy8qKiBUZXN0IGZvciBCdWcgMzQxNjA0IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3gg
YXR0cmlidXRlIGZvciBJRlJBTUVzICoqLw0KKy8qKiBOYXZpZ2F0aW9uIHRlc3RzICoqLw0KKw0K
K1NpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0RmluaXNoKCk7DQorLy8gYSBwb3N0TWVzc2FnZSBo
YW5kbGVyIHRoYXQgaXMgdXNlZCBieSBzYW5kYm94ZWQgaWZyYW1lcyB3aXRob3V0DQorLy8gJ2Fs
bG93LXNhbWUtb3JpZ2luJy9vdGhlciB3aW5kb3dzIHRvIGNvbW11bmljYXRlIHBhc3MvZmFpbCBi
YWNrIHRvIHRoaXMgbWFpbiBwYWdlLg0KKy8vIGl0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGgg
YW4gb2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNjOg0KKy8vIDxkZXNjcmlwdGlvbiBv
ZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0byBvaygpDQord2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOw0KKw0KK3ZhciB0
ZXN0UGFzc2VzUmVjZWl2ZWQgPSAwOw0KKw0KK2Z1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50
KSB7DQorICAvLyB0aGlzIG1lc3NhZ2UgaXMgcGFydCBvZiBpZl8xMCdzIHRlc3QNCisgIGlmIChl
dmVudC5kYXRhLnRlc3QgPT0gJ2lmXzEwJykgew0KKyAgICBkb0lmMTBUZXN0UGFydDIoKTsNCisg
ICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgb2tfd3JhcHBlcihldmVudC5kYXRhLm9rLCBldmVudC5k
YXRhLmRlc2MpOw0KK30NCisNCit2YXIgY29tcGxldGVkVGVzdHMgPSAwOw0KK3ZhciBwYXNzZWRU
ZXN0cyA9IDA7DQorDQorZnVuY3Rpb24gb2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpIHsNCisgIG9r
KHJlc3VsdCwgZGVzYyk7DQorDQorICBjb21wbGV0ZWRUZXN0cysrOw0KKw0KKyAgaWYgKHJlc3Vs
dCkgew0KKyAgICBwYXNzZWRUZXN0cysrOw0KKyAgfQ0KKw0KKyAgaWYgKGNvbXBsZXRlZFRlc3Rz
ID09IDYpIHsNCisgICAgaXMocGFzc2VkVGVzdHMsIDYsICJUaGVyZSBhcmUgNiBuYXZpZ2F0aW9u
IHRlc3RzIHRoYXQgc2hvdWxkIHBhc3MiKTsNCisNCisgICAgU2ltcGxlVGVzdC5maW5pc2goKTsN
CisgIH0NCit9DQorDQorZnVuY3Rpb24gZG9UZXN0KCkgew0KKyAgLy8gcGFzc2VzIGlmIGdvb2QN
CisgIC8vIDEpIEEgc2FuZGJveGVkIGlmcmFtZSBpcyBhbGxvd2VkIHRvIG5hdmlnYXRlIGl0c2Vs
Zg0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sIHdoaWNoIGhh
cyAnYWxsb3ctc2NyaXB0cycgYW5kIG5hdmlnYXRlcyB0bw0KKyAgLy8gZmlsZV9pZnJhbWVfc2Fu
ZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbCkuDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAg
Ly8gMikgQSBzYW5kYm94ZWQgaWZyYW1lIGlzIGFsbG93ZWQgdG8gbmF2aWdhdGUgaXRzIGNoaWxk
cmVuLCBldmVuIGlmIHRoZXkgYXJlIHNhbmRib3hlZA0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJh
bWVfc2FuZGJveF9kX2lmMi5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycsIGl0IG5hdmln
YXRlcyBhIGNoaWxkDQorICAvLyBpZnJhbWUgY29udGFpbmluZyBmaWxlX2lmcmFtZV9zYW5kYm94
X25hdmlnYXRpb25fc3RhcnQuaHRtbCB0byBmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25f
cGFzcy5odG1sKS4NCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gMykgQSBzYW5kYm94ZWQg
aWZyYW1lIGlzIG5vdCBhbGxvd2VkIHRvIG5hdmlnYXRlIGl0cyBhbmNlc3Rvcg0KKyAgLy8gKGRv
bmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sLA0KKyAgLy8gaXQgYXR0ZW1wdHMgdG8gbmF2aWdh
dGUgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sIHRvIGZpbGVfaWZyYW1lX3NhbmRib3hf
bmF2aWdhdGlvbl9mYWlsLmh0bWwpLg0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA0KSBB
IHNhbmRib3hlZCBpZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8gbmF2aWdhdGUgaXRzIHNpYmxpbmcN
CisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRtbCB3aGljaCBoYXMg
J2FsbG93IHNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4nDQorICAvLyBhbmQgYXR0ZW1wdHMgdG8g
bmF2aWdhdGUgZmlsZV9pZnJhbWVfbmF2aWdhdGlvbl9zdGFydC5odG1sIGNvbnRhaW5lZCBpbiBp
Zl9zaWJsaW5nIG9uIHRoaXMNCisgIC8vIHBhZ2UgdG8gZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZp
Z2F0aW9uX2ZhaWwuaHRtbCkuDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDUpIFdoZW4g
YSBsaW5rIGlzIGNsaWNrZWQgaW4gYSBzYW5kYm94ZWQgaWZyYW1lLCB0aGUgZG9jdW1lbnQgbmF2
aWdhdGVkIHRvIGlzIHNhbmRib3hlZA0KKyAgLy8gdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGRv
Y3VtZW50IGFuZCBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBwYXJlbnQgZG9jdW1lbnQNCisgIC8v
IChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjYuaHRtbCB3aGljaCBzaW11bGF0ZXMg
YSBsaW5rIGNsaWNrIGFuZCBuYXZpZ2F0ZXMNCisgIC8vIHRvIGZpbGVfaWZyYW1lX3NhbmRib3hf
ZF9pZjcuaHRtbCB3aGljaCBhdHRlbXB0cyB0byBjYWxsIGJhY2sgaW50byBpdHMgcGFyZW50KS4N
CisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gNikgQW4gaWZyYW1lIChpZl84KSBoYXMgc2Fu
ZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyIsIHRoZSBzYW5kYm94ZWQgZG9j
dW1lbnQNCisgIC8vIChmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWZfOC5odG1sKSB0aGF0IGl0IGNv
bnRhaW5zIGFjY2Vzc2VzIGl0cyBwYXJlbnQgKHRoaXMgZmlsZSkgYW5kIHJlbW92ZXMNCisgIC8v
ICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kIHRoZW4gdHJpZ2dlcnMgYSByZWxvYWQuDQorICAvLyBU
aGUgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyBpdHMgcGFyZW50ICh0aGlz
IGZpbGUpLg0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA3KSBBbiBpZnJhbWUgKGlmXzkp
IGhhcyBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiwgdGhlIHNhbmRi
b3hlZCBkb2N1bWVudA0KKyAgLy8gKGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZl85Lmh0bWwpIHRo
YXQgaXQgY29udGFpbnMgYWNjZXNzZXMgaXRzIHBhcmVudCAodGhpcyBmaWxlKSBhbmQgcmVtb3Zl
cw0KKyAgLy8gJ2FsbG93LXNjcmlwdHMnIGFuZCB0aGVuIHRyaWdnZXJzIGEgcmVsb2FkLg0KKyAg
Ly8gVGhlIGRvY3VtZW50IHNob3VsZCBub3QgYmUgYWJsZSB0byBydW4gYSBzY3JpcHQgYW5kIGFj
Y2VzcyBpdHMgcGFyZW50ICh0aGlzIGZpbGUpLg0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisg
IC8vIDgpIGEgZG9jdW1lbnQgaW4gYW4gaWZyYW1lIHdpdGggc2FuZGJveD0nYWxsb3ctc2NyaXB0
cycgc2hvdWxkIGhhdmUgYSBkaWZmZXJlbnQgbnVsbA0KKyAgLy8gcHJpbmNpcGFsIGluIGl0cyBv
cmlnaW5hbCBkb2N1bWVudCB0aGFuIGEgZG9jdW1lbnQgdG8gd2hpY2ggaXQgbmF2aWdhdGVzIGl0
c2VsZg0KKyAgLy8gZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmXzEwLmh0bWwgZG9lcyB0aGlzLCBj
by1vcmRpbmF0aW5nIHdpdGggdGhpcyBwYWdlIHZpYSBwb3N0TWVzc2FnZQ0KKyAgDQorICAvLyBw
YXNzZXMgaWYgZ29vZA0KKyAgLy8gOSkgYSBkb2N1bWVudCAoZmlsZV9pZnJhbWVfc2FuZGJveF9k
X2lmMTEuaHRtbCBpbiBhbiBpZnJhbWUgKGlmXzExKSB3aXRoIHNhbmRib3g9J2FsbG93LXNjcmlw
dHMnDQorICAvLyBpcyBuYXZpZ2F0ZWQgdG8gZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTIuaHRt
bCAtIHdoZW4gdGhhdCBkb2N1bWVudCBsb2Fkcw0KKyAgLy8gYSBtZXNzYWdlIGlzIHNlbnQgYmFj
ayB0byB0aGlzIGRvY3VtZW50LCB3aGljaCBhZGRzICdhbGxvdy1zYW1lLW9yaWdpbicgdG8gaWZf
MTEgYW5kIHRoZW4NCisgIC8vIGNhbGxzIC5iYWNrIG9uIGl0IC0gZmlsZV9pZnJhbWVfc2FuZGJv
eF9pZjEyLmh0bWwgc2hvdWxkIGJlIGFibGUgdG8gY2FsbCBiYWNrIGludG8gdGhpcw0KKyAgLy8g
ZG9jdW1lbnQgLSB0aGlzIGlzIGFsbCBjb250YWluZWQgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9k
X2lmMTMuaHRtbCB3aGljaCBpcyBvcGVuZWQgaW4gYW5vdGhlcg0KKyAgLy8gdGFiIHNvIGl0IGhh
cyBpdHMgb3duIGlzb2xhdGVkIHNlc3Npb24gaGlzdG9yeQ0KKyAgd2luZG93Lm9wZW4oImZpbGVf
aWZyYW1lX3NhbmRib3hfZF9pZjEzLmh0bWwiKTsNCisgIA0KKyAgLy8gb3BlbiB1cCB0aGUgdG9w
IG5hdmlnYXRpb24gdGVzdHMNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gMTApIGlmcmFt
ZSB3aXRoIHNhbmRib3g9J2FsbG93LXNjcmlwdHMnIGNhbiBOT1QgbmF2aWdhdGUgdG9wDQorICAv
LyBmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYxLmh0bWwgY29udGFpbnMgZmlsZV9pZnJhbWVfc2Fu
ZGJveF9lX2lmNi5odG1sIHdoaWNoDQorICAvLyBhdHRlbXB0cyB0byBuYXZpZ2F0ZSB0b3ANCisg
IHdpbmRvdy5vcGVuKCJmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYxLmh0bWwiKTsNCisNCisgIC8v
IGZhaWxzIGlmIGJhZA0KKyAgLy8gMTEpIGlmcmFtZSB3aXRoIHNhbmRib3g9J2FsbG93LXNjcmlw
dHMnIG5lc3RlZCBpbnNpZGUgaWZyYW1lIHdpdGgNCisgIC8vICdhbGxvdy10b3AtbmF2aWdhdGlv
biBhbGxvdy1zY3JpcHRzJyBjYW4gTk9UIG5hdmlnYXRlIHRvcA0KKyAgLy8gZmlsZV9pZnJhbWVf
c2FuZGJveF9lX2lmMi5odG1sIGNvbnRhaW5zIGZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjEuaHRt
bCB3aGljaA0KKyAgLy8gY29udGFpbnMgZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNi5odG1sIHdo
aWNoIGF0dGVtcHRzIHRvIG5hdmlnYXRlIHRvcA0KKyAgd2luZG93Lm9wZW4oImZpbGVfaWZyYW1l
X3NhbmRib3hfZV9pZjIuaHRtbCIpOw0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDEy
KSBpZnJhbWUgd2l0aCBzYW5kYm94PSdhbGxvdy10b3AtbmF2aWdhdGlvbiBhbGxvdy1zY3JpcHRz
JyBjYW4gbmF2aWdhdGUgdG9wDQorICAvLyBmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwg
Y29udGFpbnMgZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNS5odG1sIHdoaWNoIG5hdmlnYXRlcyB0
b3ANCisgIHdpbmRvdy5vcGVuKCJmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwiKTsNCisN
CisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAxMzEpIGlmcmFtZSB3aXRoIHNhbmRib3g9J2Fs
bG93LXRvcC1uYXZpZ2F0aW9uIGFsbG93LXNjcmlwdHMnIG5lc3RlZCBpbnNpZGUgYW4gaWZyYW1l
IHdpdGgNCisgIC8vICdhbGxvdy10b3AtbmF2aWdhdGlvbiBhbGxvdy1zY3JpcHRzJyBjYW4gbmF2
aWdhdGUgdG9wDQorICAvLyBmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY0Lmh0bWwgY29udGFpbnMg
ZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMy5odG1sIHdoaWNoIGNvbnRhaW5zDQorICAvLyBmaWxl
X2lmcmFtZV9zYW5kYm94X2VfaWY1Lmh0bWwgd2hpY2ggbmF2aWdhdGVzIHRvcA0KKyAgd2luZG93
Lm9wZW4oImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjQuaHRtbCIpOw0KK30NCisNCithZGRMb2Fk
RXZlbnQoZG9UZXN0KTsNCisNCit3aW5kb3cubW9kaWZpZWRfaWZfOCA9IGZhbHNlOw0KKw0KK2Z1
bmN0aW9uIHJlbG9hZF9pZl84KCkgew0KKyAgdmFyIGlmXzggPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnaWZfOCcpOw0KKyAgaWZfOC5zcmMgPSAnZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5o
dG1sJzsNCit9DQorDQorZnVuY3Rpb24gbW9kaWZ5X2lmXzgoKSB7DQorICAvLyBJZiB0aGlzIGlz
IHRoZSBzZWNvbmQgdGltZSB0aGlzIGhhcyBiZWVuIGNhbGxlZA0KKyAgLy8gdGhhdCdzIGEgZmFp
bGVkIHRlc3QgKGFsbG93LXNhbWUtb3JpZ2luIHdhcyByZW1vdmVkDQorICAvLyB0aGUgZmlyc3Qg
dGltZSkuDQorICBpZiAod2luZG93Lm1vZGlmaWVkX2lmXzgpIHsNCisgICAgb2tfd3JhcHBlcihm
YWxzZSwgImFuIHNhbmRib3hlZCBpZnJhbWUgZnJvbSB3aGljaCAnYWxsb3ctc2FtZS1vcmlnaW4n
IHdhcyByZW1vdmVkIHNob3VsZCBub3QgYmUgYWJsZSB0byBhY2Nlc3MgaXRzIHBhcmVudCIpOw0K
Kw0KKyAgICAvLyBuZWVkIHRvIHJldHVybiBoZXJlIHNpbmNlIHdlIGVuZCB1cCBpbiBhbiBpbmZp
bml0ZSBsb29wIG90aGVyd2lzZQ0KKyAgICByZXR1cm47DQorICB9DQorDQorICB2YXIgaWZfOCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl84Jyk7DQorICB3aW5kb3cubW9kaWZpZWRfaWZf
OCA9IHRydWU7DQorDQorICBpZl84LnNhbmRib3ggPSAnYWxsb3ctc2NyaXB0cyc7DQorICBzZW5k
TW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FfYnV0dG9uJyk7DQorfQ0KKw0KK3dpbmRvdy5t
b2RpZmllZF9pZl85ID0gZmFsc2U7DQorDQorZnVuY3Rpb24gcmVsb2FkX2lmXzkoKSB7DQorICB2
YXIgaWZfOSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl85Jyk7DQorICBpZl85LnNyYyA9
ICdmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY5Lmh0bWwnOw0KK30NCisNCitmdW5jdGlvbiBtb2Rp
ZnlfaWZfOSgpIHsNCisgIC8vIElmIHRoaXMgaXMgdGhlIHNlY29uZCB0aW1lIHRoaXMgaGFzIGJl
ZW4gY2FsbGVkDQorICAvLyB0aGF0J3MgYSBmYWlsZWQgdGVzdCAoYWxsb3ctc2NyaXB0cyB3YXMg
cmVtb3ZlZA0KKyAgLy8gdGhlIGZpcnN0IHRpbWUpLg0KKyAgaWYgKHdpbmRvdy5tb2RpZmllZF9p
Zl85KSB7DQorICAgIG9rX3dyYXBwZXIoZmFsc2UsICJhbiBzYW5kYm94ZWQgaWZyYW1lIGZyb20g
d2hpY2ggJ2FsbG93LXNjcmlwdHMnIHNob3VsZCBiZSByZW1vdmVkIHNob3VsZCBub3QgYmUgYWJs
ZSB0byBhY2Nlc3MgaXRzIHBhcmVudCB2aWEgYSBzY3JpcHQiKTsNCisNCisgICAgLy8gbmVlZCB0
byByZXR1cm4gaGVyZSBzaW5jZSB3ZSBlbmQgdXAgaW4gYW4gaW5maW5pdGUgbG9vcCBvdGhlcndp
c2UNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgdmFyIGlmXzkgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnaWZfOScpOw0KKyAgd2luZG93Lm1vZGlmaWVkX2lmXzkgPSB0cnVlOw0KKw0KKyAg
aWZfOS5zYW5kYm94ID0gJ2FsbG93LXNhbWUtb3JpZ2luJzsNCisNCisgIHNlbmRNb3VzZUV2ZW50
KHt0eXBlOidjbGljayd9LCAnYV9idXR0b24yJyk7DQorfQ0KKw0KK3ZhciBmaXJzdFByaW5jaXBh
bCA9ICIiOw0KK3ZhciBzZWNvbmRQcmluY2lwYWw7DQorDQorZnVuY3Rpb24gZG9JZjEwVGVzdFBh
cnQxKCkgew0KKyAgaWYgKGZpcnN0UHJpbmNpcGFsICE9ICIiKQ0KKyAgICByZXR1cm47DQorDQor
ICAvLyB1c2UgU3BlY2lhbFBvd2VycyB0byBnZXQgdGhlIHByaW5jaXBhbCBvZiBpZl8xMA0KKyAg
dmFyIGlmXzEwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmXzEwJyk7DQorICBmaXJzdFBy
aW5jaXBhbCA9IFNwZWNpYWxQb3dlcnMuZ2V0Tm9kZVByaW5jaXBhbChpZl8xMC5jb250ZW50RG9j
dW1lbnQpOw0KKyAgaWZfMTAuc3JjID0gJ2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEwLmh0bWwn
Ow0KKw0KK30NCitmdW5jdGlvbiBkb0lmMTBUZXN0UGFydDIoKSB7DQorICB2YXIgaWZfMTAgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMTAnKTsNCisgIC8vIHVzZSBTcGVjaWFsUG93ZXJz
IHRvIGdldCB0aGUgcHJpbmNpcGFsIG9mIGlmXzEwDQorICBzZWNvbmRQcmluY2lwYWwgPSBTcGVj
aWFsUG93ZXJzLmdldE5vZGVQcmluY2lwYWwoaWZfMTAuY29udGVudERvY3VtZW50KTsNCisgIG9r
X3dyYXBwZXIoZmlyc3RQcmluY2lwYWwgIT0gc2Vjb25kUHJpbmNpcGFsLCAiZG9jdW1lbnRzIHNo
b3VsZCBOT1QgaGF2ZSB0aGUgc2FtZSBwcmluY2lwYWwgaWYgdGhleSBhcmUgc2FuZGJveGVkIHdp
dGhvdXQiICsNCisgICAgIiBhbGxvdy1zYW1lLW9yaWdpbiBhbmQgdGhlIGZpcnN0IGRvY3VtZW50
IGlzIG5hdmlnYXRlZCB0byB0aGUgc2Vjb25kIik7DQorfQ0KKzwvc2NyaXB0Pg0KKzxib2R5Pg0K
KzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJbXBsZW1lbnQg
SFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMNCis8cCBpZD0iZGlzcGxheSI+PC9w
Pg0KKzxkaXYgaWQ9ImNvbnRlbnQiPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIg
aWQ9ImlmXzEiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sIiBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIg
aWQ9ImlmXzIiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIiBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIg
aWQ9ImlmXzMiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sIiBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3dfc2NyaXB0cyBh
bGxvdy1zYW1lLW9yaWdpbiIgaWQ9ImlmXzUiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
NS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgaWQ9Imlm
X3NpYmxpbmciIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwi
IGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxv
d19zY3JpcHRzIiBpZD0iaWZfNiIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwi
IGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxv
dy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfOCIgc3JjPSJmaWxlX2lmcmFtZV9z
YW5kYm94X2RfaWY4Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlm
cmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfOSIg
c3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY5Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIx
MCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMTAi
IHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwiIG9ubG9hZD0n
ZG9JZjEwVGVzdFBhcnQxKCknIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPC9k
aXY+DQorPGlucHV0IHR5cGU9J2J1dHRvbicgaWQ9ImFfYnV0dG9uIiBvbmNsaWNrPSdyZWxvYWRf
aWZfOCgpJz4NCis8aW5wdXQgdHlwZT0nYnV0dG9uJyBpZD0iYV9idXR0b24yIiBvbmNsaWNrPSdy
ZWxvYWRfaWZfOSgpJz4NCis8L2JvZHk+DQorPC9odG1sPg0K
</data>
<flag name="review"
          id="525942"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>633652</attachid>
            <date>2012-06-15 13:32:40 -0700</date>
            <delta_ts>2012-08-04 09:14:27 -0700</delta_ts>
            <desc>iframe sandbox tests - general v8</desc>
            <filename>iframe_sandbox_tests_general</filename>
            <type>text/plain</type>
            <size>20732</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYTBiMDUyNDU3ZWE5YWVhNWVhMThhYmY1ZDRh
ZTE3NmU3ZTM2NmE5OQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KQEAgLTI3NSwxNiArMjc1LDI4IEBAIF9URVNUX0ZJTEVTID0gXAogCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2FfaWY2Lmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY3Lmh0bWwg
XAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY4Lmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5k
Ym94X2FfaWY5Lmh0bWwgXAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X3NhbWVfb3JpZ2luLmh0bWwg
XAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2JfaWYxLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5k
Ym94X2JfaWYyLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2JfaWYzLmh0bWwgXAorCQl0
ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hf
Y19pZjEuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCBcCisJCWZpbGVf
aWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQu
aHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjUuaHRtbCBcCisJCWZpbGVfaWZyYW1l
X3NhbmRib3hfY19pZjYuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0
bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1sIFwKKwkJZmlsZV9pZnJh
bWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWlsLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94
X3Bhc3MuanMgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMgXAogCQl0ZXN0X2lmcmFt
ZV9zYW5kYm94X25hdmlnYXRpb24uaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEu
aHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjIuaHRtbCBcCiAJCWZpbGVfaWZyYW1l
X3NhbmRib3hfZF9pZjMuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjQuaHRtbCBc
CiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfZF9pZjYuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjcuaHRtbCBcCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19p
ZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9j
X2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwKQEAgLTAs
MCArMSwzNSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRV
dGlscy5qcyI+PC9zY3JpcHQ+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9j
c3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hlYWQ+Cis8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVzYykgewor
ICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiByZXN1bHQsIGRlc2M6IGRlc2N9LCAi
KiIpOworICB9CisKKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICBvayh0cnVlLCAiZG9jdW1l
bnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMgc2hvdWxkIGJlIGFibGUgdG8gcnVuIGlu
bGluZSBzY3JpcHRzIik7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYV9mb3JtJyku
c3VibWl0KCk7CisKKyAgICAvLyB0cmlnZ2VyIHRoZSBqYXZhc2NyaXB0OiB1cmwgdGVzdAorICAg
IHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYV9saW5rJyk7CisgIH0KKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9J2ZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcyc+PC9zY3JpcHQ+Cis8
Ym9keSBvbkxvYWQ9J29rKHRydWUsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2Ny
aXB0cyBzaG91bGQgYmUgYWJsZSB0byBydW4gc2NyaXB0IGZyb20gZXZlbnQgbGlzdGVuZXJzIik7
ZG9TdHVmZigpOyc+CisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zY3JpcHRzIgor
CisgIDxmb3JtIG1ldGhvZD0iZ2V0IiBhY3Rpb249ImZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9m
YWlsLmh0bWwiIGlkPSJhX2Zvcm0iPgorICAgIEZpcnN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0
IiBuYW1lPSJmaXJzdG5hbWUiPgorICAgIExhc3QgbmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5h
bWU9Imxhc3RuYW1lIj4KKyAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBvbmNsaWNrPSJkb1N1Ym1p
dCgpIiBpZD0iYV9idXR0b24iPgorICA8L2Zvcm0+CisKKyAgPGEgaHJlZiA9ICdqYXZhc2NyaXB0
Om9rKHRydWUsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0cyBzaG91bGQg
YmUgYWJsZSB0byBydW4gc2NyaXB0IGZyb20gamF2YXNjcmlwdDogVVJMcyIpOycgaWQ9J2FfbGlu
ayc+Y2xpY2sgbWU8L2E+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwKQEAgLTAsMCArMSwyMyBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0
aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKwor
PC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhy
ZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHtvazogcmVzdWx0
LCBkZXNjOiBtZXNzYWdlfSwgIioiKTsKKyAgfQorCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7Cisg
ICAgb2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2NyaXB0cyBz
aG91bGQgTk9UIGJlIGFibGUgdG8gcnVuIGlubGluZSBzY3JpcHRzIik7CisgIH0KKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9J2ZpbGVfaWZyYW1lX3NhbmRib3hfZmFpbC5qcyc+PC9zY3JpcHQ+Cis8
Ym9keSBvbkxvYWQ9J3dpbmRvdy5wYXJlbnQucG9zdG1lc3NhZ2Uoe29rOiBmYWxzZSwgZGVzYzog
ImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aG91dCBhbGxvdy1zY3JpcHRzIHNob3VsZCBOT1QgYmUg
YWJsZSB0byBydW4gc2NyaXB0IGZyb20gZXZlbnQgaGFuZGxlcnMifSwgIioiKTtkb1N0dWZmKCk7
Jz4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCBubyBwZXJtaXNzaW9ucworICA8aW1nIHNyYz0iYWJv
dXQ6YmxhbmsiIG9uZXJyb3I9J29rKGZhbHNlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRob3V0
IGFsbG93LXNjcmlwdHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIHJ1biBzY3JpcHQgZnJvbSBldmVu
dCBoYW5kbGVycyIpOycpPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sCkBAIC0wLDAgKzEsMjUgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8
dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0
PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMv
U2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgLy8gdHJ5IGFuZCBzdWJtaXQg
dGhlIGZvcm0gLSB0aGlzIHNob3VsZCBzdWNjZWVkCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2FfZm9ybScpLnN1Ym1pdCgpOworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9T
dHVmZigpIj4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ct
Zm9ybXMiCisKKyAgPGZvcm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iZmlsZV9pZnJhbWVfc2FuZGJv
eF9mb3JtX3Bhc3MuaHRtbCIgaWQ9ImFfZm9ybSI+CisgICAgRmlyc3QgbmFtZTogPGlucHV0IHR5
cGU9InRleHQiIG5hbWU9ImZpcnN0bmFtZSI+CisgICAgTGFzdCBuYW1lOiA8aW5wdXQgdHlwZT0i
dGV4dCIgbmFtZT0ibGFzdG5hbWUiPgorICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG9uY2xpY2s9
ImRvU3VibWl0KCkiIGlkPSJhX2J1dHRvbiI+CisgIDwvZm9ybT4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmNC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2NfaWY0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbApA
QCAtMCwwICsxLDQ0IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgor
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9F
dmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0
ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKworPC9oZWFkPgor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRl
c2MpIHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKTsKKyAgfQor
CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgLy8gdHJ5IHRvIG9wZW4gYSBuZXcgd2luZG93
IHZpYSB0YXJnZXQ9Il9ibGFuayIsIHdpbmRvdy5vcGVuKCksIGFuZCBzaG93TW9kYWxEaWFsb2co
KQorICAgIC8vIHRoZSB3aW5kb3cgd2UgdHJ5IHRvIG9wZW4gY2xvc2VzIGl0c2VsZiBvbmNlIGl0
IG9wZW5zCisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICd0YXJnZXRfYmxhbmsn
KTsKKworICAgIHZhciB0aHJldyA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICB3aW5kb3cub3Bl
bigiYWJvdXQ6YmxhbmsiKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgdGhyZXcgPSB0
cnVlOworICAgIH0KKyAgICAKKyAgICBvayh0aHJldywgIndpbmRvdy5vcGVuIHRocmV3IGEgSlMg
ZXhjZXB0aW9uIGFuZCB3YXMgbm90IGFsbG93ZWQiKTsKKworICAgIHRocmV3ID0gZmFsc2U7Cisg
ICAgdHJ5IHsKKyAgICAgIHdpbmRvdy5zaG93TW9kYWxEaWFsb2coImFib3V0OmJsYW5rIik7Cisg
ICAgfSBjYXRjaChlcnJvcikgeworICAgICAgdGhyZXcgPSB0cnVlOworICAgIH0KKyAgICAKKyAg
ICBvayh0aHJldywgIndpbmRvdy5zaG93TW9kYWxEaWFsb2cgdGhyZXcgYSBKUyBleGNlcHRpb24g
YW5kIHdhcyBub3QgYWxsb3dlZCIpOworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9T
dHVmZigpIj4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ct
c2FtZS1vcmlnaW4iCisKKyAgPGEgaHJlZj0iZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRv
d19mYWlsLmh0bWwiIHRhcmdldD0iX2JsYW5rIiBpZD0idGFyZ2V0X2JsYW5rIj5vcGVuIHdpbmRv
dzwvYT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5odG1sIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfY19pZjUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3Qg
Zm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4KKworPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
ICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBw
ZXIocmVzdWx0LCBkZXNjKTsKKyAgfQorPC9zY3JpcHQ+Cis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYo
KSI+CisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zYW1lLW9yaWdpbiIKKworICA8
YSBocmVmID0gJ2phdmFzY3JpcHQ6b2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhv
dXQgYWxsb3ctc2NyaXB0cyBzaG91bGQgbm90IGJlIGFibGUgdG8gcnVuIHNjcmlwdCB3aXRoIGph
dmFzY3JpcHQ6IFVSTHMiKTsnIGlkPSdhX2xpbmsnPmNsaWNrIG1lPC9hPgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2NfaWY2Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfY19pZjYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5o
dG1sCkBAIC0wLDAgKzEsMjQgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0K
KyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8
L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1Np
bXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+DQorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0K
Kw0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQorICBmdW5jdGlv
biBvayhyZXN1bHQsIGRlc2MpIHsNCisgICAgd2luZG93LnBhcmVudC5va193cmFwcGVyKHJlc3Vs
dCwgZGVzYyk7DQorICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiByZXN1bHQsIGRl
c2M6IGRlc2N9LCAiKiIpOw0KKyAgfQ0KKyAgDQorICBmdW5jdGlvbiBkb1N0dWZmKCkgew0KKyAg
ICBvayh0cnVlLCAiYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zYW1lLW9yaWdpbiBh
bmQgYWxsb3ctc2NyaXB0cyBzaG91bGQgYmUgc2FtZSBvcmlnaW4gd2l0aCBpdHMgcGFyZW50IGFu
ZCBhYmxlIHRvIHJ1biBzY3JpcHRzICIgKw0KKyAgICAgICAicmVnYXJkbGVzcyBvZiB3aGF0IGtp
bmQgb2Ygd2hpdGVzcGFjZSB3YXMgdXNlZCBpbiBpdHMgc2FuZGJveCBhdHRyaWJ1dGUiKTsNCisg
IH0NCis8L3NjcmlwdD4NCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+DQorICBJIGFtIHNhbmRi
b3hlZCBidXQgd2l0aCAiYWxsb3ctc2FtZS1vcmlnaW4iIGFuZCAiYWxsb3ctc2NyaXB0cyINCis8
L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYv
bnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
ZmFpbC5qcwpAQCAtMCwwICsxLDEgQEAKK29rKGZhbHNlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3
aXRoIGFsbG93LXNjcmlwdHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIHJ1biA8c2NyaXB0IHNyYz0u
Li4+Iik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5odG1sIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5odG1sCkBAIC0wLDAgKzEs
MTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQg
dHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1w
bGVUZXN0LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0
L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKworPGJv
ZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIHNob3VsZCBOT1QgYmUgbG9hZGVkIGJ5IGEgZm9y
bSBzdWJtaXQgZnJvbSBhIHNhbmRib3ggd2l0aG91dCAnYWxsb3ctZm9ybXMnCis8L2JvZHk+Cis8
L2h0bWw+CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgd2luZG93LnBh
cmVudC5wb3N0TWVzc2FnZSh7b2s6IGZhbHNlLCBkZXNjOiAiZG9jdW1lbnRzIHNhbmRib3hlZCB3
aXRob3V0IGFsbG93LWZvcm1zIHNob3VsZCBOT1QgYmUgYWJsZSB0byBzdWJtaXQgZm9ybXMifSwg
IioiKTsKKyAgfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1f
cGFzcy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2Zvcm1fcGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5o
dG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0
bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMv
U2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4K
KzwvaGVhZD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIHNob3VsZCBiZSBsb2Fk
ZWQgYnkgYSBmb3JtIHN1Ym1pdCBmcm9tIGEgc2FuZGJveCB3aXRoICdhbGxvdy1mb3JtcycKKzwv
Ym9keT4KKzwvaHRtbD4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICB3
aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHtvazogdHJ1ZSwgZGVzYzogImRvY3VtZW50cyBzYW5k
Ym94ZWQgd2l0aCBhbGxvdy1mb3JtcyBzaG91bGQgYmUgYWJsZSB0byBzdWJtaXQgZm9ybXMifSwg
IioiKTsKKyAgfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X29wZW5f
d2luZG93X2ZhaWwuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9vcGVuX3dpbmRvd19mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfb3Blbl93aW5kb3dfZmFpbC5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1M
PgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVz
dCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2
YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4K
KyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1Np
bXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCki
PgorICBJIHNob3VsZCBOT1QgYmUgb3BlbmVkIGJ5IGEgc2FuZGJveGVkIGlmcmFtZSB2aWEgYW55
IG1ldGhvZAorPC9ib2R5PgorPC9odG1sPgorCis8c2NyaXB0PgorICBmdW5jdGlvbiBkb1N0dWZm
KCkgeworICAgIGNvbnNvbGUubG9nKCJmaWxlX2lmcmFtZV9zYW5kYm94X3dpbmRvd19vcGVuX2Zh
aWwuaHRtbCIpOworICAgIHdpbmRvdy5vcGVuZXIub2soZmFsc2UsICJzYW5kYm94ZWQgZG9jdW1l
bnRzIHNob3VsZCBOT1QgYmUgYWJsZSB0byBvcGVuIHdpbmRvd3MiKTsKKyAgICBzZWxmLmNsb3Nl
KCk7CisgIH0KKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9wYXNzLmpz
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3Bhc3MuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcwpAQCAtMCwwICsxLDEgQEAKK29r
KHRydWUsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0cyBzaG91bGQgYmUg
YWJsZSB0byBydW4gPHNjcmlwdCBzcmM9Li4uPiIpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2Fu
ZGJveF9nZW5lcmFsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1l
X3NhbmRib3hfZ2VuZXJhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwK
KysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVy
YWwuaHRtbApAQCAtMCwwICsxLDE2NiBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPCEt
LQ0KK2h0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNA0K
K0ltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAtIGdlbmVyYWwg
dGVzdHMNCistLT4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRp
b24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3Nj
cmlwdD4NCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1w
bGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0Pg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8
L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCisvKiogVGVz
dCBmb3IgQnVnIDM0MTYwNCAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3Ig
SUZSQU1FcyAtIGdlbmVyYWwgdGVzdHMgKiovDQorDQorU2ltcGxlVGVzdC53YWl0Rm9yRXhwbGlj
aXRGaW5pc2goKTsNCisNCisvLyBhIHBvc3RNZXNzYWdlIGhhbmRsZXIgdGhhdCBpcyB1c2VkIGJ5
IHNhbmRib3hlZCBpZnJhbWVzIHdpdGhvdXQNCisvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIHRvIGNv
bW11bmljYXRlIHBhc3MvZmFpbCBiYWNrIHRvIHRoaXMgbWFpbiBwYWdlLg0KKy8vIGl0IGV4cGVj
dHMgdG8gYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNj
Og0KKy8vIDxkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0
byBvaygpDQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2Fn
ZSwgZmFsc2UpOw0KKw0KK2Z1bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KQ0KK3sNCisgIG9r
X3dyYXBwZXIoZXZlbnQuZGF0YS5vaywgZXZlbnQuZGF0YS5kZXNjKTsNCit9DQorDQordmFyIGNv
bXBsZXRlZFRlc3RzID0gMDsNCit2YXIgcGFzc2VkVGVzdHMgPSAwOw0KKw0KK2Z1bmN0aW9uIG9r
X3dyYXBwZXIocmVzdWx0LCBkZXNjKSB7DQorICBvayhyZXN1bHQsIGRlc2MpOw0KKw0KKyAgY29t
cGxldGVkVGVzdHMrKzsNCisNCisgIGlmIChyZXN1bHQpIHsNCisgICAgcGFzc2VkVGVzdHMrKzsN
CisgIH0NCisNCisgIGlmIChjb21wbGV0ZWRUZXN0cyA9PSAxOSkgew0KKyAgICBpcyhwYXNzZWRU
ZXN0cywgMTksICJUaGVyZSBhcmUgMTkgZ2VuZXJhbCB0ZXN0cyB0aGF0IHNob3VsZCBwYXNzIik7
DQorICAgIFNpbXBsZVRlc3QuZmluaXNoKCk7DQorICB9DQorfQ0KKw0KK2Z1bmN0aW9uIGRvVGVz
dCgpIHsNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAxKSB0ZXN0IHRoYXQgaW5saW5lIHNj
cmlwdHMgKDxzY3JpcHQ+KSBjYW4gcnVuIGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxs
b3ctc2NyaXB0cyINCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRt
bCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnKQ0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisg
IC8vIDIpIHRlc3QgdGhhdCA8c2NyaXB0IHNyYz0uLi4+IGNhbiBydW4gaW4gYW4gaWZyYW1lIHNh
bmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQorDQorICAvLyBw
YXNzZXMgaWYgZ29vZA0KKyAgLy8gMykgdGVzdCB0aGF0IHNjcmlwdCBpbiBhbiBldmVudCBsaXN0
ZW5lciAoYm9keSBvbmxvYWQpIGNhbiBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoICJh
bGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5o
dG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0K
KyAgLy8gNCkgdGVzdCB0aGF0IHNjcmlwdCBpbiBhbiBqYXZhc2NyaXB0OnVybCBjYW4gcnVuIGlu
IGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25lIGlu
IGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMn
KQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA1KSB0ZXN0IHRoYXQgaW5saW5lIHNjcmlw
dHMgY2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFsbG93LXNjcmlw
dHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgd2hpY2gg
aGFzIHNhbmRib3g9JycpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDYpIHRlc3QgdGhh
dCA8c2NyaXB0IHNyYz0uLi4+IGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRo
b3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9j
X2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94PScnKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQor
ICAvLyA3KSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFuIGV2ZW50IGxpc3RlbmVyIChib2R5IG9ubG9h
ZCkgY2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFsbG93LXNjcmlw
dHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgd2hpY2gg
aGFzIHNhbmRib3g9JycpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDgpIHRlc3QgdGhh
dCBzY3JpcHQgaW4gYW4gZXZlbnQgbGlzdGVuZXIgKGltZyBvbmVycm9yKSBjYW5ub3QgcnVuIGlu
IGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25l
IGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0nJykN
CisgIA0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA5KSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFu
IGphdmFzY3JpcHQ6dXJsIGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0
ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lm
XzUuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0nYWxsb3ctc2FtZS1vcmlnaW4nKQ0KKyAgdmFyIGlm
X3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfNScpLmNvbnRlbnRXaW5kb3c7DQorICBz
ZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FfbGluaycsIGlmX3cpOw0KKw0KKyAgLy8g
cGFzc2VzIGlmIGdvb2QNCisgIC8vIDEwKSB0ZXN0IHRoYXQgYSBuZXcgaWZyYW1lIGhhcyBzYW5k
Ym94IGF0dHJpYnV0ZQ0KKyAgdmFyIGlmciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFt
ZSIpOw0KKyAgb2tfd3JhcHBlcigic2FuZGJveCIgaW4gaWZyLCAiYSBuZXcgaWZyYW1lIHNob3Vs
ZCBoYXZlIGEgc2FuZGJveCBhdHRyaWJ1dGUiKTsNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQor
ICAvLyAxMSkgdGVzdCB0aGF0IHRoZSBzYW5kYm94IGF0dHJpYnV0ZSdzIGRlZmF1bHQgdmFsdWUg
aXMgYW4gZW1wdHkgc3RyaW5nDQorICBva193cmFwcGVyKGlmci5zYW5kYm94ID09PSAiIiwgImRl
ZmF1bHQgc2FuZGJveCBhdHRyaWJ1dGUgc2hvdWxkIGJlIGFuIGVtcHR5IHN0cmluZyIpOw0KKw0K
KyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDEyKSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZy
YW1lIHdpdGggJ2FsbG93LWZvcm1zJyBjYW4gc3VibWl0IGZvcm1zDQorICAvLyAoZG9uZSBpbiBm
aWxlX2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1mb3JtcycgYW5k
ICdhbGxvdy1zY3JpcHRzJykNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gMTMpIHRlc3Qg
dGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aG91dCAnYWxsb3ctZm9ybXMnIGNhbiBOT1Qgc3Vi
bWl0IGZvcm1zDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwg
d2hpY2ggb25seSBoYXMgJ2FsbG93LXNjcmlwdHMnKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQor
ICAvLyAxNCkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdp
bmRvdyB1c2luZyB0aGUgdGFyZ2V0LmF0dHJpYnV0ZQ0KKyAgLy8gdGhpcyBpcyBkb25lIHZpYSBm
aWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggImFs
bG93LXNjcmlwdHMiIGFuZCAiYWxsb3ctc2FtZS1vcmlnaW4iDQorICAvLyB0aGUgd2luZG93IGl0
IGF0dGVtcHRzIHRvIG9wZW4gY2FsbHMgd2luZG93Lm9wZW5lci5vayhmYWxzZSwgLi4uKSBhbmQg
ZmlsZV9pZnJhbWVfY19pZjQuaHRtbCBoYXMgYW4gb2soKQ0KKyAgLy8gZnVuY3Rpb24gdGhhdCBj
YWxscyB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXINCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQor
ICAvLyAxNSkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdp
bmRvdyB1c2luZyB3aW5kb3cub3Blbg0KKyAgLy8gdGhpcyBpcyBkb25lIHZpYSBmaWxlX2lmcmFt
ZV9zYW5kYm94X2NfaWY0Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlw
dHMiIGFuZCAiYWxsb3ctc2FtZS1vcmlnaW4iDQorICAvLyB0aGUgd2luZG93IGl0IGF0dGVtcHRz
IHRvIG9wZW4gY2FsbHMgd2luZG93Lm9wZW5lci5vayhmYWxzZSwgLi4uKSBhbmQgZmlsZV9pZnJh
bWVfY19pZjQuaHRtbCBoYXMgYW4gb2soKQ0KKyAgLy8gZnVuY3Rpb24gdGhhdCBjYWxscyB3aW5k
b3cucGFyZW50Lm9rX3dyYXBwZXINCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAxNikg
dGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4ndCBvcGVuIGEgbmV3IHdpbmRvdyB1c2lu
ZyB3aW5kb3cuU2hvd01vZGFsRGlhbG9nDQorICAvLyB0aGlzIGlzIGRvbmUgdmlhIGZpbGVfaWZy
YW1lX3NhbmRib3hfY19pZjQuaHRtbCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2Ny
aXB0cyIgYW5kICJhbGxvdy1zYW1lLW9yaWdpbiINCisgIC8vIHRoZSB3aW5kb3cgaXQgYXR0ZW1w
dHMgdG8gb3BlbiBjYWxscyB3aW5kb3cub3BlbmVyLm9rKGZhbHNlLCAuLi4pIGFuZCBmaWxlX2lm
cmFtZV9jX2lmNC5odG1sIGhhcyBhbiBvaygpDQorICAvLyBmdW5jdGlvbiB0aGF0IGNhbGxzIHdp
bmRvdy5wYXJlbnQub2tfd3JhcHBlcg0KKyAgDQorICAvLyBwYXNzZXMgdHdpY2UgaWYgZ29vZA0K
KyAgLy8gMTcpIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgY2FuIGFjY2VzcyBzYW1lLW9y
aWdpbiBkb2N1bWVudHMgYW5kIHJ1biBzY3JpcHRzIHdoZW4gaXRzIHNhbmRib3ggYXR0cmlidXRl
DQorICAvLyBpcyBzZXBhcmF0ZWQgd2l0aCB0d28gc3BhY2VzIA0KKyAgLy8gZG9uZSB2aWEgZmls
ZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICIgIGFs
bG93LXNjcmlwdHMgIGFsbG93LXNhbWUtb3JpZ2luICAiDQorICANCisgIC8vIHBhc3NlcyB0d2lj
ZSBpZiBnb29kDQorICAvLyAxOCkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4gYWNj
ZXNzIHNhbWUtb3JpZ2luIGRvY3VtZW50cyBhbmQgcnVuIHNjcmlwdHMgd2hlbiBpdHMgc2FuZGJv
eCBhdHRyaWJ1dGUNCisgIC8vIGlzIHNlcGFyYXRlZCB3aXRoIHRhYnMNCisgIC8vIGRvbmUgdmlh
IGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAi
JiN4MDk7YWxsb3ctc2NyaXB0cyYjeDA5O2FsbG93LXNhbWUtb3JpZ2luJiN4MDk7Ig0KKyAgDQor
ICAvLyBwYXNzZXMgdHdpY2UgaWYgZ29vZA0KKyAgLy8gMTkpIHRlc3QgdGhhdCBhIHNhbmRib3hl
ZCBpZnJhbWUgY2FuIGFjY2VzcyBzYW1lLW9yaWdpbiBkb2N1bWVudHMgYW5kIHJ1biBzY3JpcHRz
IHdoZW4gaXRzIHNhbmRib3ggYXR0cmlidXRlDQorICAvLyBpcyBzZXBhcmF0ZWQgd2l0aCBsaW5l
IGZlZWRzDQorICAvLyBkb25lIHZpYSBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwgd2hp
Y2ggaXMgc2FuZGJveGVkIHdpdGggIiYjeDBhO2FsbG93LXNjcmlwdHMmI3gwYTthbGxvdy1zYW1l
LW9yaWdpbiYjeDBhOyINCisgIA0KKyAgLy8gcGFzc2VzIHR3aWNlIGlmIGdvb2QNCisgIC8vIDIw
KSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNhbiBhY2Nlc3Mgc2FtZS1vcmlnaW4gZG9j
dW1lbnRzIGFuZCBydW4gc2NyaXB0cyB3aGVuIGl0cyBzYW5kYm94IGF0dHJpYnV0ZQ0KKyAgLy8g
aXMgc2VwYXJhdGVkIHdpdGggZm9ybSBmZWVkcw0KKyAgLy8gZG9uZSB2aWEgZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmNi5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICImI3gwYzthbGxvdy1z
Y3JpcHRzJiN4MGM7YWxsb3ctc2FtZS1vcmlnaW4mI3gwYzsiDQorICANCisgIC8vIHBhc3NlcyB0
d2ljZSBpZiBnb29kDQorICAvLyAyMSkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4g
YWNjZXNzIHNhbWUtb3JpZ2luIGRvY3VtZW50cyBhbmQgcnVuIHNjcmlwdHMgd2hlbiBpdHMgc2Fu
ZGJveCBhdHRyaWJ1dGUNCisgIC8vIGlzIHNlcGFyYXRlZCB3aXRoIGNhcnJpYWdlIHJldHVybnMN
CisgIC8vIGRvbmUgdmlhIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCB3aGljaCBpcyBz
YW5kYm94ZWQgd2l0aCAiJiN4MGQ7YWxsb3ctc2NyaXB0cyYjeDBkO2FsbG93LXNhbWUtb3JpZ2lu
JiN4MGQ7Ig0KK30NCisNCithZGRMb2FkRXZlbnQoZG9UZXN0KTsNCis8L3NjcmlwdD4NCis8Ym9k
eT4NCis8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVt
ZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzDQorPHAgaWQ9ImRpc3BsYXki
PjwvcD4NCis8ZGl2IGlkPSJjb250ZW50Ij4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUt
b3JpZ2luIGFsbG93LXNjcmlwdHMiIGlkPSJpZl8xIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hf
Y19pZjEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNh
bmRib3g9IiIgaWQ9ImlmXzIiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sIiBo
ZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ct
Zm9ybXMgYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzMiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9j
X2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2Fu
ZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzQiIHNyYz0iZmls
ZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZy
YW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4iIGlkPSJpZl81IiBzcmM9
ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjUuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48
L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9IiAgYWxsb3ctc2FtZS1vcmlnaW4gIGFsbG93LXNj
cmlwdHMgICIgaWQ9ImlmXzZfYSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwi
IGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSImI3gw
OTthbGxvdy1zYW1lLW9yaWdpbiYjeDA5O2FsbG93LXNjcmlwdHMmI3gwOTsiIGlkPSJpZl82X2Ii
IHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0i
MTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iJiN4MGE7YWxsb3ctc2FtZS1vcmlnaW4m
I3gwYTthbGxvdy1zY3JpcHRzJiN4MGE7IiBpZD0iaWZfNl9jIiBzcmM9ImZpbGVfaWZyYW1lX3Nh
bmRib3hfY19pZjYuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZy
YW1lIHNhbmRib3g9IiYjeDBjO2FsbG93LXNhbWUtb3JpZ2luJiN4MGM7YWxsb3ctc2NyaXB0cyYj
eDBjOyIgaWQ9ImlmXzZfZCIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwiIGhl
aWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSImI3gwZDth
bGxvdy1zYW1lLW9yaWdpbiYjeDBkO2FsbG93LXNjcmlwdHMmI3gwZDsiIGlkPSJpZl82X2UiIHNy
Yz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAi
PjwvaWZyYW1lPg0KKzwvZGl2Pg0KKzwvYm9keT4NCis8L2h0bWw+DQo=
</data>
<flag name="review"
          id="525951"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>633731</attachid>
            <date>2012-06-15 17:25:36 -0700</date>
            <delta_ts>2012-08-08 17:14:35 -0700</delta_ts>
            <desc>iframe sandbox tests - inheritance v5</desc>
            <filename>iframe_sandbox_tests_inheritance</filename>
            <type>text/plain</type>
            <size>14770</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNTI0MWYwNGY5NDQ2MmU3N2M3NjUxOGMxNWZj
MzgzMDkzNzRhYmUzZAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KdGVz
dHMgZm9yIGlmcmFtZSBzYW5kYm94IC0gaW5oZXJpdGFuY2UKCmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmlu
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KQEAgLTI2MSwxNiAr
MjYxLDI2IEBAIF9URVNUX0ZJTEVTID0gXAogCQl0ZXN0X2J1ZzY1MTk1Ni5odG1sIFwKIAkJdGVz
dF9idWc2OTQ1MDMuaHRtbCBcCiAJCXRlc3Rfb2JqZWN0X3BsdWdpbl9uYXYuaHRtbCBcCiAJCXRl
c3RfYnVnNzQyMDMwLmh0bWwgXAogCQl0ZXN0X2J1Zzc0MjU0OS5odG1sIFwKIAkJdGVzdF9idWc3
NDU2ODUuaHRtbCBcCiAJCXRlc3RfaW5wdXRfZmlsZV9waWNrZXIuaHRtbCBcCiAJCXRlc3RfYnVn
NzYzNjI2Lmh0bWwgXAorCQl0ZXN0X2lmcmFtZV9zYW5kYm94X2luaGVyaXRhbmNlLmh0bWwgXAor
CQlmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYxLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94
X2FfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwgXAorCQlmaWxl
X2lmcmFtZV9zYW5kYm94X2FfaWY0Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY1
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY2Lmh0bWwgXAorCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2FfaWY3Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY4Lmh0bWwg
XAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY5Lmh0bWwgXAogCQl0ZXN0X2lmcmFtZV9zYW5k
Ym94X3NhbWVfb3JpZ2luLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2JfaWYxLmh0bWwg
XAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2JfaWYyLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5k
Ym94X2JfaWYzLmh0bWwgXAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb24uaHRtbCBc
CiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfZF9pZjIuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjMuaHRtbCBcCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9p
ZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9h
X2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYxLmh0bWwKQEAgLTAs
MCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRl
c3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5PgorICBJIGFtIHNhbmRib3hlZCB3aXRob3V0
IGFueSBwZXJtaXNzaW9ucworICA8aWZyYW1lIGlkPSJpZl8yYSIgc3JjPSJmaWxlX2lmcmFtZV9z
YW5kYm94X2FfaWYyLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+CisgIDxp
ZnJhbWUgaWQ9ImlmXzJiIiBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiBzcmM9ImZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjIuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfYV9pZjIuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAz
NDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBkb1N0dWZmKCkgeworICAvLyBzaG91bGQg
Tk9UIGJlIGFibGUgdG8gZXhlY3V0ZSBzY3JpcHRzCisgIHdpbmRvdy5wYXJlbnQucGFyZW50LnBv
c3RNZXNzYWdlKHtvazogZmFsc2UsIGRlc2M6ICJhIGRvY3VtZW50IHdpdGhpbiBhbiBpZnJhbWUg
c2FuZGJveGVkIHdpdGggc2FuZGJveD0nJyBzaG91bGQgTk9UIGJlIGFibGUgdG8gZXhlY3V0ZSBz
Y3JpcHRzIn0sICIqIik7Cit9Cis8L3NjcmlwdD4KKworPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCki
PgorICBJIGFtIE5PVCBzYW5kYm94ZWQgb3IgYW0gc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlw
dHMiIGJ1dCBhbSBjb250YWluZWQgd2l0aGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCBzYW5k
Ym94ID0gIiIKKyAgb3IgYW0gc2FuZGJveGVkIHdpdGggc2FuZGJveD0nJyBpbnNpZGUgYW4gaWZy
YW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIgorPC9ib2R5PgorPC9odG1sPgorCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
YV9pZjMuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwKQEAg
LTAsMCArMSwyNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBs
ZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
L3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgZnVuY3Rpb24gb2tfd3JhcHBlcihjb25k
aXRpb24sIG1zZykgeworICAgIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihjb25kaXRpb24sIG1z
Zyk7CisgIH0KKzwvc2NyaXB0PgorCis8Ym9keT4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGgg
ImFsbG93LXNjcmlwdHMiCisKKyAgPGlmcmFtZSBpZD0naWZfNCcgc3JjPSdmaWxlX2lmcmFtZV9z
YW5kYm94X2FfaWY0Lmh0bWwnIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+CisgIDxp
ZnJhbWUgaWQ9J2lmXzcnIHNyYz0nZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNy5odG1sJyBoZWln
aHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorICA8aWZyYW1lIGlkPSdpZl8yJyBzYW5kYm94
PScnIHNyYz0nZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sJyBoZWlnaHQ9IjEwIiB3aWR0
aD0iMTAiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjQuaHRtbCBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY0Lmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cisg
IDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4K
KyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3Qv
RXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvU3R1ZmYoKSB7CisgIHRyeSB7CisgICAgd2luZG93LnBh
cmVudC5va193cmFwcGVyKGZhbHNlLCAiYSBkb2N1bWVudCBjb250YWluZWQgd2l0aGluIGEgc2Fu
ZGJveGVkIGRvY3VtZW50IHdpdGhvdXQgJ2FsbG93LXNhbWUtb3JpZ2luJyBzaG91bGQgTk9UIGJl
IHNhbWUgZG9tYWluIHdpdGggaXRzIHBhcmVudCIpOworICB9IGNhdGNoKGUpIHsKKyAgfQorCisg
IHRyeSB7CisgICAgd2luZG93LnBhcmVudC5wYXJlbnQub2tfd3JhcHBlcihmYWxzZSwgImEgZG9j
dW1lbnQgY29udGFpbmVkIHdpdGhpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB3aXRob3V0ICdhbGxv
dy1zYW1lLW9yaWdpbicgc2hvdWxkIE5PVCBiZSBzYW1lIGRvbWFpbiB3aXRoIHRoZSB0b3AgbGV2
ZWwiKTsKKyAgfSBjYXRjaChlKSB7CisgIH0KK30KKzwvc2NyaXB0PgorCis8Ym9keSBvbkxvYWQ9
ImRvU3R1ZmYoKSI+CisgIEkgYW0gbm90IHNhbmRib3hlZCBidXQgY29udGFpbmVkIHdpdGhpbiBh
IHNhbmRib3hlZCBkb2N1bWVudCB3aXRoICdhbGxvdy1zY3JpcHRzJworPC9ib2R5PgorPC9odG1s
PgorCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfYV9pZjUuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9hX2lmNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY1Lmh0
bWwKQEAgLTAsMCArMSwyMiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRs
ZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3Rz
L1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgZnVuY3Rpb24gb2tfd3JhcHBl
cihyZXN1bHQsIGRlc2MpIHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVzdWx0LCBk
ZXNjKTsKKyAgfQorPC9zY3JpcHQ+CisKKzxib2R5PgorICBJIGFtIHNhbmRib3hlZCBidXQgd2l0
aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIKKworICA8aWZyYW1lIHNhbmRib3g9
J2FsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4nIGlkPSdpZl82JyBzcmM9J2ZpbGVfaWZy
YW1lX3NhbmRib3hfYV9pZjYuaHRtbCcgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4K
KzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY2Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAot
LS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9hX2lmNi5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0
bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3Ig
QnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9j
c3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5j
dGlvbiBkb1N0dWZmKCkgeworICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIodHJ1ZSwgImEgZG9j
dW1lbnQgc2FuZGJveGVkIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyBhbmQgY29udGFpbmVkIHdp
dGhpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgc2hvdWxk
IGJlIHNhbWUgZG9tYWluIHdpdGggaXRzIHBhcmVudCIpOworICB3aW5kb3cucGFyZW50LnBhcmVu
dC5va193cmFwcGVyKHRydWUsICJhIGRvY3VtZW50IHNhbmRib3hlZCB3aXRoICdhbGxvdy1zYW1l
LW9yaWdpbicgY29udGFpbmVkIHdpdGhpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB3aXRoICdhbGxv
dy1zYW1lLW9yaWdpbicgc2hvdWxkIGJlIHNhbWUgZG9tYWluIHdpdGggdGhlIHRvcCBsZXZlbCIp
OworfQorPC9zY3JpcHQ+CisKKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBzYW5k
Ym94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicgYW5kIGNvbnRhaW5l
ZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aCAnYWxsb3ctc2NyaXB0cyBhbGxvdy1z
YW1lLW9yaWdpbicKKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY3Lmh0bWwgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjcuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNy5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0
bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
dHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+Cis8L2hl
YWQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvU3R1ZmYo
KSB7CisgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGV4ZWN1dGUgc2NyaXB0cworICB3aW5kb3cucGFy
ZW50LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHRydWUsIGRlc2M6ICJhIGRvY3VtZW50IGNvbnRh
aW5lZCB3aXRoaW4gYW4gaWZyYW1lIGNvbnRhaW5lZCB3aXRoaW4gYW4gaWZyYW1lIHNhbmRib3hl
ZCB3aXRoICdhbGxvdy1zY3JpcHRzJyBzaG91bGQgYmUgYWJsZSB0byBleGVjdXRlIHNjcmlwdHMi
fSwgIioiKTsKK30KKzwvc2NyaXB0PgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkg
YW0gTk9UIHNhbmRib3hlZCBidXQgYW0gY29udGFpbmVkIHdpdGhpbiBhbiBpZnJhbWUgY29udGFp
bmVkIHdpdGhpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggc2FuZGJveCA9ICJhbGxvdy1zY3Jp
cHRzIgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjguaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2FfaWY4Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0
IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0
ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gZG9TdWJsb2FkKCkgewor
ICB2YXIgaWZfOSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl85Jyk7CisgIGlmXzkuc3Jj
ID0gJ2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjkuaHRtbCc7Cit9CisKK3dpbmRvdy5kb1N1Ymxv
YWQgPSBkb1N1YmxvYWQ7CisKKzwvc2NyaXB0PgorPGJvZHk+CisgIEkgYW0gc2FuZGJveGVkIGJ1
dCB3aXRoICJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIi4gQWZ0ZXIgbXkgaW5pdGlh
bCBsb2FkLCAiYWxsb3ctc2FtZS1vcmlnaW4iIGlzIHJlbW92ZWQKKyAgYW5kIHRoZW4gSSBsb2Fk
IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjkuaHRtbCwgd2hpY2ggYXR0ZW1wcyB0byBjYWxsIGEg
ZnVuY3Rpb24gaW4gd2luZG93LnRvcC4gVGhpcyBzaG91bGQKKyAgc3VjY2VlZCBzaW5jZSB0aGUg
bmV3IHNhbmRib3ggZmxhZ3Mgc2hvdWxkbid0IGhhdmUgdGFrZW4gYWZmZWN0IG9uIG1lIHVudGls
IEknbSByZWxvYWRlZC4KKworICA8aWZyYW1lIGlkPSdpZl85JyBzcmM9J2Fib3V0OmJsYW5rJyBo
ZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9p
ZjkuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9h
X2lmOS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY5Lmh0bWwKQEAgLTAs
MCArMSwxOCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRl
c3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBkb1N0dWZmKCkgewor
ICB3aW5kb3cucGFyZW50LnBhcmVudC5va193cmFwcGVyKHRydWUsICJhIHN1YmxvYWRlZCBkb2N1
bWVudCBzaG91bGQgaW5oZXJpdCB0aGUgZmxhZ3Mgb2YgdGhlIGRvY3VtZW50LCBub3Qgb2YgdGhl
IGRvY3NoZWxsL3NhbmRib3ggYXR0cmlidXRlIik7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9h
ZD0nZG9TdHVmZigpJz4KKyAgSSdtIGEgc3VibG9hZGVkIGRvY3VtZW50IG9mIGZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjguaHRtbC4gSSBzaG91bGQgYmUgYWJsZSB0byBjYWxsIGEgZnVuY3Rpb24g
aW4gd2luZG93LnRvcAorICBiZWNhdXNlIEkgc2hvdWxkIGJlIHNhbWUtb3JpZ2luIHdpdGggaXQu
Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvdGVzdF9pZnJhbWVfc2FuZGJveF9pbmhlcml0YW5jZS5odG1sIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2luaGVyaXRhbmNlLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L3Rlc3RfaWZyYW1lX3NhbmRib3hfaW5oZXJpdGFuY2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAor
PCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPCEtLQ0KK2h0dHBzOi8vYnVnemlsbGEubW96aWxs
YS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNA0KK0ltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0
dHJpYnV0ZSBmb3IgSUZSQU1FcyAtIGluaGVyaXRhbmNlIHRlc3RzDQorLS0+DQorPGhlYWQ+DQor
ICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwv
dGl0bGU+DQorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rl
c3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9zY3JpcHQ+DQorICA8bGluayByZWw9InN0
eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNz
cyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0K
Ky8qKiBUZXN0IGZvciBCdWcgMzQxNjA0IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmli
dXRlIGZvciBJRlJBTUVzICoqLw0KKy8qKiBJbmhlcml0YW5jZSBUZXN0cyAqKi8NCisNCitTaW1w
bGVUZXN0LndhaXRGb3JFeHBsaWNpdEZpbmlzaCgpOw0KKyAgDQorLy8gQSBwb3N0TWVzc2FnZSBo
YW5kbGVyIHRoYXQgaXMgdXNlZCBieSBzYW5kYm94ZWQgaWZyYW1lcyB3aXRob3V0DQorLy8gJ2Fs
bG93LXNhbWUtb3JpZ2luJyB0byBjb21tdW5pY2F0ZSBwYXNzL2ZhaWwgYmFjayB0byB0aGlzIG1h
aW4gcGFnZS4NCisvLyBJdCBleHBlY3RzIHRvIGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCBsaWtl
IHtvazogdHJ1ZS9mYWxzZSwgZGVzYzoNCisvLyA8ZGVzY3JpcHRpb24gb2YgdGhlIHRlc3Q+IHdo
aWNoIGl0IHRoZW4gZm9yd2FyZHMgdG8gb2soKS4NCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
bWVzc2FnZSIsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7DQorDQordmFyIGNvbXBsZXRlZFRlc3Rz
ID0gMDsNCit2YXIgcGFzc2VkVGVzdHMgPSAwOw0KKw0KK2Z1bmN0aW9uIHJlY2VpdmVNZXNzYWdl
KGV2ZW50KQ0KK3sNCisgIG9rX3dyYXBwZXIoZXZlbnQuZGF0YS5vaywgZXZlbnQuZGF0YS5kZXNj
KTsNCit9DQorDQorZnVuY3Rpb24gb2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpIHsNCisgIG9rKHJl
c3VsdCwgZGVzYyk7DQorDQorICBjb21wbGV0ZWRUZXN0cysrOw0KKw0KKyAgaWYgKHJlc3VsdCkg
ew0KKwkgIHBhc3NlZFRlc3RzKys7DQorICB9IA0KKyAgICAgDQorICBpZiAoY29tcGxldGVkVGVz
dHMgPT0gNCkgew0KKyAgICBpcyhwYXNzZWRUZXN0cywgNCwgInRoZXJlIHNob3VsZCBiZSAzIHBh
c3NlZCBpbmhlcml0YW5jZSB0ZXN0cyIpOw0KKyAgICBTaW1wbGVUZXN0LmZpbmlzaCgpOw0KKyAg
fQ0KK30NCisNCitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8v
IDEpIGFuIGlmcmFtZSB3aXRoIG5vIHNhbmRib3ggYXR0cmlidXRlIGluc2lkZSBhbiBpZnJhbWUg
dGhhdCBoYXMgc2FuZGJveCA9ICIiDQorICAvLyBzaG91bGQgbm90IGJlIGFibGUgdG8gZXhlY3V0
ZSBzY3JpcHRzIChjYW5ub3QgZXZlciBsb29zZW4gcGVybWlzc2lvbnMpDQorICAvLyAoZG9uZSBi
eSBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwgY29udGFpbmVkIHdpdGhpbiBmaWxlX2lm
cmFtZV9zYW5kYm94X2FfaWYxLmh0bWwpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDIp
IGFuIGlmcmFtZSB3aXRoIHNhbmRib3ggPSAiYWxsb3ctc2NyaXB0cyIgaW5zaWRlIGFuIGlmcmFt
ZSB0aGF0IGhhcyBzYW5kYm94ID0gIiINCisgIC8vIHNob3VsZCBub3QgYmUgYWJsZSB0byBleGVj
dXRlIHNjcmlwdHMgKGNhbm5vdCBldmVyIGxvb3NlbiBwZXJtaXNzaW9ucykNCisgIC8vIChkb25l
IGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCBjb250YWluZWQgd2l0aGluIGZpbGVf
aWZyYW1lX3NhbmRib3hfYV9pZjEuaHRtbCkNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8g
MykgYW4gaWZyYW1lIHdpdGggbm8gc2FuZGJveCBhdHRyaWJ1dGUgaW5zaWRlIGFuIGlmcmFtZSB0
aGF0IGhhcyBzYW5kYm94ID0gImFsbG93LXNjcmlwdHMiDQorICAvLyBzaG91bGQgbm90IGJlIHNh
bWUgb3JpZ2luIHdpdGggdGhlIHRvcCB3aW5kb3cNCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjQuaHRtbCBjb250YWluZWQgd2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hf
YV9pZjMuaHRtbCkNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gNCkgYW4gaWZyYW1lIHdp
dGggbm8gc2FuZGJveCBhdHRyaWJ1dGUgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhhcyBzYW5kYm94
ID0gImFsbG93LXNjcmlwdHMiDQorICAvLyBzaG91bGQgbm90IGJlIHNhbWUgb3JpZ2luIHdpdGgg
aXRzIHBhcmVudA0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1s
IGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sKQ0KKw0KKyAg
Ly8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDUpIGFuIGlmcmFtZSB3aXRoICdhbGxvdy1zYW1lLW9y
aWdpbicgYW5kICdhbGxvdy1zY3JpcHRzJyBpbnNpZGUgYW4gaWZyYW1lIHdpdGggJ2FsbG93LXNh
bWUtb3JpZ2luJw0KKyAgLy8gYW5kICdhbGxvdy1zY3JpcHRzJyBzaG91bGQgYmUgc2FtZSBvcmln
aW4gd2l0aCB0aGUgdG9wIHdpbmRvdw0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmNi5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNS5o
dG1sKQ0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDYpIGFuIGlmcmFtZSB3aXRoICdh
bGxvdy1zYW1lLW9yaWdpbicgYW5kICdhbGxvdy1zY3JpcHRzJyBpbnNpZGUgYW4gaWZyYW1lIHdp
dGggJ2FsbG93LXNhbWUtb3JpZ2luJw0KKyAgLy8gYW5kICdhbGxvdy1zY3JpcHRzJyBzaG91bGQg
YmUgc2FtZSBvcmlnaW4gd2l0aCBpdHMgcGFyZW50DQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFt
ZV9zYW5kYm94X2FfaWY2Lmh0bWwgY29udGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9zYW5kYm94
X2FfaWY1Lmh0bWwpDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gNykgYW4gaWZyYW1l
IHdpdGggbm8gc2FuZGJveCBhdHRyaWJ1dGUgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhhcyBzYW5k
Ym94ID0gImFsbG93LXNjcmlwdHMiDQorICAvLyBzaG91bGQgYmUgYWJsZSB0byBleGVjdXRlIHNj
cmlwdHMNCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjcuaHRtbCBjb250
YWluZWQgd2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbCkNCisNCisgIC8vIGZh
aWxzIGlmIGJhZA0KKyAgLy8gOCkgYW4gaWZyYW1lIHdpdGggc2FuZGJveD0iIiBpbnNpZGUgYW4g
aWZyYW1lIHRoYXQgaGFzIGFsbG93LXNjcmlwdHMgc2hvdWxkIG5vdCBiZSBhYmxlDQorICAvLyB0
byBleGVjdXRlIHNjcmlwdHMNCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9p
ZjIuaHRtbCBjb250YWluZWQgd2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbCkN
CisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyA5KSBtYWtlIHN1cmUgdGhhdCBjaGFuZ2lu
ZyB0aGUgc2FuZGJveCBmbGFncyBvbiBhbiBpZnJhbWUgKGlmXzgpIGRvZXNuJ3QgYWZmZWN0DQor
ICAvLyB0aGUgc2FuZGJveGluZyBvZiBzdWJsb2FkcyBvZiBjb250ZW50IHdpdGhpbiB0aGF0IGlm
cmFtZQ0KKyAgdmFyIGlmXzggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfOCcpOw0KKyAg
aWZfOC5zYW5kYm94ID0gJ2FsbG93LXNjcmlwdHMnOw0KKyAgaWZfOC5jb250ZW50V2luZG93LmRv
U3VibG9hZCgpOyANCit9DQorDQorYWRkTG9hZEV2ZW50KGRvVGVzdCk7DQorPC9zY3JpcHQ+DQor
PGJvZHk+DQorPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vYnVnemlsbGEubW96aWxs
YS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNCI+TW96aWxsYSBCdWcgMzQxNjA0PC9hPiAtIElt
cGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1Fcw0KKzxwIGlkPSJkaXNw
bGF5Ij48L3A+DQorPGRpdiBpZD0iY29udGVudCI+DQorPGlmcmFtZSBzYW5kYm94PSIiIGlkPSJp
Zl8xIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lk
dGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIGlkPSJp
Zl8zIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjMuaHRtbCIgaGVpZ2h0PSIxMCIgd2lk
dGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMgYWxsb3ct
c2FtZS1vcmlnaW4iIGlkPSJpZl81IiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjUuaHRt
bCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFs
bG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4iIGlkPSJpZl84IiBzcmM9ImZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjguaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8
L2Rpdj4NCg==
</data>
<flag name="review"
          id="526026"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>633735</attachid>
            <date>2012-06-15 17:38:43 -0700</date>
            <delta_ts>2012-06-19 14:12:36 -0700</delta_ts>
            <desc>iframe sandbox v17</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>51753</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOGNmNTQyM2IwMjEzOTZlOTZjMDk2NDQzNDMx
ZTBlMGIwZjBjNmQ2OQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgx
NiwxNiArODE2LDI3IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhU2FuZGJveEF0dHIp
OworCisKKyAgLyoqCiAgICAqIEZpbGwgKHdpdGggdGhlIHBhcmFtZXRlcnMgZ2l2ZW4pIHRoZSBs
b2NhbGl6ZWQgc3RyaW5nIG5hbWVkIHxhS2V5fCBpbgogICAgKiBwcm9wZXJ0aWVzIGZpbGUgfGFG
aWxlfC4KICAgICovCiBwcml2YXRlOgogICBzdGF0aWMgbnNyZXN1bHQgRm9ybWF0TG9jYWxpemVk
U3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiogYVBhcmFtcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhUGFyYW1zTGVuZ3RoLApAQCAtMTkz
NSw0MiArMTk0Niw0NCBAQCBwdWJsaWM6CiAgICAqIGZyb20gdGhlIGRvY3VtZW50IGl0IGNvbWVz
IGZyb20uCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQgVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRl
eHQobnNJVVJJICphVVJJLCBib29sICphUmVzdWx0KTsKIAogICAvKioKICAgICogU2V0IHRoZSBn
aXZlbiBwcmluY2lwYWwgYXMgdGhlIG93bmVyIG9mIHRoZSBnaXZlbiBjaGFubmVsLCBpZgogICAg
KiBuZWVkZWQuICBhVVJJIG11c3QgYmUgdGhlIFVSSSBvZiBhQ2hhbm5lbC4gIGFQcmluY2lwYWwg
bWF5IGJlCiAgICAqIG51bGwuICBJZiBhU2V0VXBGb3JBYm91dEJsYW5rIGlzIHRydWUsIHRoZW4g
YWJvdXQ6Ymxhbmsgd2lsbCBnZXQKLSAgICogdGhlIHByaW5jaXBhbCBzZXQgdXAgb24gaXQuCi0g
ICAqCisgICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LiBJZiBhRm9yY2VPd25lciBpcyB0
cnVlLCB0aGUgb3duZXIKKyAgICogd2lsbCBiZSBzZXQgb24gdGhlIGNoYW5uZWwsIGV2ZW4gaWYg
dGhlIHByaW5jaXBhbCBjYW4gYmUgZGV0ZXJtaW5lZAorICAgKiBmcm9tIHRoZSBjaGFubmVsLgog
ICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHdoZXRoZXIgdGhlIHByaW5jaXBhbCB3YXMgc2V0IHVw
IGFzIHRoZSBvd25lcgogICAgKiBvZiB0aGUgY2hhbm5lbC4KICAgICovCiAgIHN0YXRpYyBib29s
IFNldFVwQ2hhbm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lciA9IGZhbHNlKTsKIAogICBzdGF0
aWMgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhLAogICAgICAgICAg
ICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFBc2NpaUJhc2U2NFN0cmluZyk7CiAKICAgc3RhdGlj
IG5zcmVzdWx0IEF0b2IoY29uc3QgbnNBU3RyaW5nJiBhQXNjaWlTdHJpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG5zQVN0cmluZyYgYUJpbmFyeURhdGEpOwogCiAgIC8qKiBJZiBhSlNBcnJh
eSBpcyBhIEphdmFzY3JpcHQgYXJyYXksIHRoaXMgbWV0aG9kIGl0ZXJhdGVzIG92ZXIgaXRzCiAg
ICAqICBlbGVtZW50cyBhbmQgYXBwZW5kcyB2YWx1ZXMgdG8gYVJldFZhbCBhcyBuc0lBdG9tcy4K
ICAgICogIEB0aHJvdyBOU19FUlJPUl9JTExFR0FMX1ZBTFVFIGlmIGFKU0FycmF5IGlzbid0IGEg
SlMgYXJyYXkuCiAgICAqLyAKICAgc3RhdGljIG5zcmVzdWx0IEpTQXJyYXlUb0F0b21BcnJheShK
U0NvbnRleHQqIGFDeCwgY29uc3QgSlM6OlZhbHVlJiBhSlNBcnJheSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0NPTUFycmF5PG5zSUF0b20+JiBhUmV0VmFsKTsKIAog
ICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IHBhc3NlZCBpbiBw
YXJhbWV0ZXIgaGFzIHRoZSBhdXRvY29tcGxldGUKLSAgICogZnVuY3Rpb25uYWxpdHkgZW5hYmxl
ZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9ybSBvd25lci4KKyAgICogZnVuY3Rp
b25hbGl0eSBlbmFibGVkLiBJdCBpcyB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmb3JtIG93bmVy
LgogICAgKiBOT1RFOiB0aGUgY2FsbGVyIGhhcyB0byBtYWtlIHN1cmUgYXV0b2NvbXBsZXRlIG1h
a2VzIHNlbnNlIGZvciB0aGUKICAgICogZWxlbWVudCdzIHR5cGUuCiAgICAqCiAgICAqIEBwYXJh
bSBhSW5wdXQgdGhlIGlucHV0IGVsZW1lbnQgdG8gY2hlY2suIE5PVEU6IGFJbnB1dCBjYW4ndCBi
ZSBudWxsLgogICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGlucHV0IGVsZW1lbnQgaGFzIGF1dG9j
b21wbGV0ZSBlbmFibGVkLgogICAgKi8KICAgc3RhdGljIGJvb2wgSXNBdXRvY29tcGxldGVFbmFi
bGVkKG5zSURPTUhUTUxJbnB1dEVsZW1lbnQqIGFJbnB1dCk7CiAKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaCBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9j
dW1lbnQuaAotLS0gYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKKysrIGIvY29u
dGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCkBAIC04NywxOCArODcsMTggQEAgY2xhc3Mg
TG9hZGVyOwogCiBuYW1lc3BhY2UgZG9tIHsKIGNsYXNzIExpbms7CiBjbGFzcyBFbGVtZW50Owog
fSAvLyBuYW1lc3BhY2UgZG9tCiB9IC8vIG5hbWVzcGFjZSBtb3ppbGxhCiAKICNkZWZpbmUgTlNf
SURPQ1VNRU5UX0lJRCBcCi17IDB4MDc3ZGNmZjAsIDB4NDAwZCwgMHg0ZDNjLCBcCi0gIHsgMHhi
ZCwgMHg0ZCwgMHg1ZiwgMHhkNSwgMHhlMSwgMHhhNiwgMHg2MywgMHgwNyB9IH0KK3sgMHg1N2Zl
NDRhZSwgMHg2NjU2LCAweDQ0YjgsIFwKKyAgeyAweDhkLCAweGMwLCAweGZjLCAweGE3LCAweDQz
LCAweDI4LCAweGJlLCAweDg2IH0gfQogCiAvLyBGbGFnIGZvciBBZGRTdHlsZVNoZWV0KCkuCiAj
ZGVmaW5lIE5TX1NUWUxFU0hFRVRfRlJPTV9DQVRBTE9HICAgICAgICAgICAgICAgICgxIDw8IDAp
CiAKIC8vIEVudW0gZm9yIHJlcXVlc3RpbmcgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgZG9jdW1lbnQg
d2hlbiBjcmVhdGluZyBhIGRvYwogZW51bSBEb2N1bWVudEZsYXZvciB7CiAgIERvY3VtZW50Rmxh
dm9yTGVnYWN5R3Vlc3MsIC8vIGNvbXBhdCB3aXRoIG9sZCBjb2RlIHVudGlsIG1hZGUgSFRNTDUt
Y29tcGxpYW50CiAgIERvY3VtZW50Rmxhdm9ySFRNTCwgLy8gSFRNTERvY3VtZW50IHdpdGggSFRN
TG5lc3MgYml0IHNldCB0byB0cnVlCkBAIC00MjYsMTcgKzQyNiwyNiBAQCBwdWJsaWM6CiAgICAq
IGNhbGxlcnMgYXJlIGV4cGVjdGVkIHRvIHRha2UgYWN0aW9uIGFzIG5lZWRlZCBpZiB0aGV5IHdh
bnQgdGhpcwogICAgKiBjaGFuZ2UgdG8gYWN0dWFsbHkgY2hhbmdlIGFueXRoaW5nIGltbWVkaWF0
ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0aWxzLmgKICAgICovCiAgIHZvaWQgU2V0QmlkaU9wdGlv
bnMoUFJVaW50MzIgYUJpZGlPcHRpb25zKQogICB7CiAgICAgbUJpZGlPcHRpb25zID0gYUJpZGlP
cHRpb25zOwogICB9Ci0gIAorCisgIC8qKgorICAgKiBHZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9y
IHRoaXMgZG9jdW1lbnQuCisgICAqIEBzZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBvc3Np
YmxlIGZsYWdzCisgICAqLworICBQUlVpbnQzMiBTYW5kYm94RmxhZ3MoKSBjb25zdAorICB7Cisg
ICAgcmV0dXJuIG1TYW5kYm94RmxhZ3M7CisgIH0KKwogICAvKioKICAgICogQWNjZXNzIEhUVFAg
aGVhZGVyIGRhdGEgKHRoaXMgbWF5IGFsc28gZ2V0IHNldCBmcm9tIG90aGVyCiAgICAqIHNvdXJj
ZXMsIGxpa2UgSFRNTCBNRVRBIHRhZ3MpLgogICAgKi8KICAgdmlydHVhbCB2b2lkIEdldEhlYWRl
ckRhdGEobnNJQXRvbSogYUhlYWRlckZpZWxkLCBuc0FTdHJpbmcmIGFEYXRhKSBjb25zdCA9IDA7
CiAgIHZpcnR1YWwgdm9pZCBTZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFoZWFkZXJGaWVsZCwgY29u
c3QgbnNBU3RyaW5nJiBhRGF0YSkgPSAwOwogCiAgIC8qKgpAQCAtMTg0MSwxNiArMTg1MCwyMSBA
QCBwcm90ZWN0ZWQ6CiAgIC8vIElmIG1Jc1N0YXRpY0RvY3VtZW50IGlzIHRydWUsIG1PcmlnaW5h
bERvY3VtZW50IHBvaW50cyB0byB0aGUgb3JpZ2luYWwKICAgLy8gZG9jdW1lbnQuCiAgIG5zQ09N
UHRyPG5zSURvY3VtZW50PiBtT3JpZ2luYWxEb2N1bWVudDsKIAogICAvLyBUaGUgYmlkaSBvcHRp
b25zIGZvciB0aGlzIGRvY3VtZW50LiAgV2hhdCB0aGlzIGJpdGZpZWxkIG1lYW5zIGlzCiAgIC8v
IGRlZmluZWQgaW4gbnNCaWRpVXRpbHMuaAogICBQUlVpbnQzMiBtQmlkaU9wdGlvbnM7CiAKKyAg
Ly8gVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3VtZW50LiBUaGVzZSByZWZsZWN0IHRoZSB2
YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2YgdGhlCisgIC8vIGFzc29jaWF0ZWQgSUZS
QU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZiBleGlzdGVudC4gVGhlc2UgYXJlIHNl
dCBhdCBsb2FkIHRpbWUgYW5kCisgIC8vIGFyZSBpbW11dGFibGUgLSBzZWUgbnNTYW5kYm94Rmxh
Z3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICBQUlVpbnQzMiBtU2FuZGJveEZsYWdzOwor
CiAgIG5zQ1N0cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnNDU3RyaW5nIG1D
b250ZW50VHlwZTsKIHByb3RlY3RlZDoKIAogICAvLyBUaGUgZG9jdW1lbnQncyBzZWN1cml0eSBp
bmZvCiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VjdXJpdHlJbmZvOwogCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMv
bnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMu
Y3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC0xNzYsMTYg
KzE3NiwxNyBAQCBzdGF0aWMgTlNfREVGSU5FX0NJRChrWFRGU2VydmljZUNJRCwgTlNfCiAKICNp
bmNsdWRlICJuc1dyYXBwZXJDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJuc0lET01Eb2N1bWVu
dFR5cGUuaCIKICNpbmNsdWRlICJuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXIuaCIKIAogI2luY2x1
ZGUgIm5zSUNoYXJzZXREZXRlY3Rvci5oIgogI2luY2x1ZGUgIm5zSUNoYXJzZXREZXRlY3Rpb25P
YnNlcnZlci5oIgogI2luY2x1ZGUgIm5zSVBsYXRmb3JtQ2hhcnNldC5oIgorI2luY2x1ZGUgIm5z
U2FuZGJveEZsYWdzLmgiCiAKIGV4dGVybiAiQyIgaW50IE1PWl9YTUxUcmFuc2xhdGVFbnRpdHko
Y29uc3QgY2hhciogcHRyLCBjb25zdCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBuZXh0LCBQUlVuaWNoYXIqIHJlc3VsdCk7CiBl
eHRlcm4gIkMiIGludCBNT1pfWE1MQ2hlY2tRTmFtZShjb25zdCBjaGFyKiBwdHIsIGNvbnN0IGNo
YXIqIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuc19hd2FyZSwg
Y29uc3QgY2hhcioqIGNvbG9uKTsKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVz
aW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CkBAIC04ODIsMTYgKzg4Myw2NCBAQCBuc0Nv
bnRlbnRVdGlsczo6R2V0UGFyc2VyU2VydmljZSgpCiAgICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0
U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwgJnNQYXJzZXJTZXJ2aWNlKTsKICAgICBpZiAoTlNf
RkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNlclNlcnZpY2UgPSBuc251bGw7CiAgICAgfQogICB9
CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNlOwogfQorLyoqCisgKiBBIGhlbHBlciBmdW5jdGlv
biB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmlidXRlIChvZiBhbiA8aWZyYW1lPiBvcgorICog
YSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFncyB1c2Vk
IGludGVybmFsbHkuCisgKgorICogQHBhcmFtIGFBdHRyaWJ1dGUgICAgdGhlIHZhbHVlIG9mIHRo
ZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJldHVybiAgICAgICAgICAgICAgdGhlIHNldCBvZiBm
bGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0
ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBhU2FuZGJveEF0dHJWYWx1ZSkKK3sKKyAgLy8gSWYg
dGhlcmUncyBhIHNhbmRib3ggYXR0cmlidXRlIGF0IGFsbCAoYW5kIHRoZXJlIGlzIGlmIHRoaXMg
aXMgYmVpbmcKKyAgLy8gY2FsbGVkKSwgc3RhcnQgb2ZmIGJ5IHNldHRpbmcgYWxsIHRoZSByZXN0
cmljdGlvbiBmbGFncy4KKyAgUFJVaW50MzIgb3V0ID0gU0FOREJPWEVEX05BVklHQVRJT04gfAor
ICAgICAgICAgICAgICAgICBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiB8CisgICAgICAg
ICAgICAgICAgIFNBTkRCT1hFRF9QTFVHSU5TIHwgCisgICAgICAgICAgICAgICAgIFNBTkRCT1hF
RF9PUklHSU4gfAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURfRk9STVMgfCAKKyAgICAgICAg
ICAgICAgICAgU0FOREJPWEVEX1NDUklQVFMgfAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURf
QVVUT01BVElDX0ZFQVRVUkVTOworCisgIGlmICghYVNhbmRib3hBdHRyVmFsdWUuSXNFbXB0eSgp
KSB7CisgICAgLy8gVGhlIHNlcGFyYXRvciBvcHRpb25hbCBmbGFnIGlzIHVzZWQgYmVjYXVzZSB0
aGUgSFRNTDUgc3BlYyBzYXlzIGFueQorICAgIC8vIHdoaXRlc3BhY2UgaXMgb2sgYXMgYSBzZXBh
cmF0b3IsIHdoaWNoIGlzIHdoYXQgdGhpcyBkb2VzLgorICAgIEhUTUxTcGxpdE9uU3BhY2VzVG9r
ZW5pemVyIHRva2VuaXplcihhU2FuZGJveEF0dHJWYWx1ZSwgJyAnLAorICAgICAgbnNDaGFyU2Vw
YXJhdGVkVG9rZW5pemVyVGVtcGxhdGU8bnNDb250ZW50VXRpbHM6OklzSFRNTFdoaXRlc3BhY2U+
OjpTRVBBUkFUT1JfT1BUSU9OQUwpOworCisgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9r
ZW5zKCkpIHsKKyAgICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nIHRva2VuID0gdG9rZW5pemVyLm5l
eHRUb2tlbigpOworCisgICAgICBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxs
b3ctc2NyaXB0cyIpKSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX1NDUklQVFM7CisgICAg
ICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXNhbWUtb3Jp
Z2luIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfT1JJR0lOOworICAgICAgfSBlbHNl
IGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1mb3JtcyIpKSB7CisgICAg
ICAgIG91dCAmPSB+U0FOREJPWEVEX0ZPUk1TOworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dl
ckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRzIikpIHsKKyAgICAgICAgLy8gYWxsb3ct
c2NyaXB0cyByZW1vdmVzIGJvdGggU0FOREJPWEVEX1NDUklQVFMgYW5kCisgICAgICAgIC8vIFNB
TkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMuCisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX1ND
UklQVFM7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUzsKKyAg
ICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctdG9wLW5h
dmlnYXRpb24iKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FU
SU9OOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBvdXQ7Cit9CiAKICNpZmRlZiBN
T1pfWFRGCiBuc0lYVEZTZXJ2aWNlKgogbnNDb250ZW50VXRpbHM6OkdldFhURlNlcnZpY2UoKQog
ewogICBpZiAoIXNYVEZTZXJ2aWNlKSB7CiAgICAgbnNyZXN1bHQgcnYgPSBDYWxsR2V0U2Vydmlj
ZShrWFRGU2VydmljZUNJRCwgJnNYVEZTZXJ2aWNlKTsKICAgICBpZiAoTlNfRkFJTEVEKHJ2KSkg
ewpAQCAtNjUzOCwxNyArNjU4NywxOCBAQCBuc0NvbnRlbnRVdGlsczo6VVJJSW5oZXJpdHNTZWN1
cml0eUNvbnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZXN1bHQpOwogfQogCiAv
LyBzdGF0aWMKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmlu
Y2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFTZXRVcEZvckFib3V0QmxhbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYUZvcmNlT3duZXIpCiB7CiAgIC8vCiAgIC8vIFNldCB0aGUgb3duZXIgb2YgdGhl
IGNoYW5uZWwsIGJ1dCBvbmx5IGZvciBjaGFubmVscyB0aGF0IGNhbid0CiAgIC8vIHByb3ZpZGUg
dGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQuCiAgIC8vCiAgIC8vIFhYWDogSXQgc2VlbXMgd3Jv
bmcgdGhhdCB0aGUgb3duZXIgaXMgaWdub3JlZCAtIGV2ZW4gaWYgb25lIGlzCiAgIC8vICAgICAg
c3VwcGxpZWQpIHVubGVzcyB0aGUgVVJJIGlzIGphdmFzY3JpcHQgb3IgZGF0YSBvciBhYm91dDpi
bGFuay4KICAgLy8gWFhYOiBJZiB0aGlzIGlzIGV2ZXIgY2hhbmdlZCwgY2hlY2sgYWxsIGNhbGxl
cnMgZm9yIHdoYXQgb3duZXJzCkBAIC02NTU2LDIzICs2NjA2LDM1IEBAIG5zQ29udGVudFV0aWxz
OjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmkKICAgLy8gICAgICBjb21tZW50cyBpbiBuc0RvY1No
ZWxsOjpMb2FkVVJJIHdoZXJlIHdlIGZhbGwgYmFjayBvbgogICAvLyAgICAgIGluaGVyaXRpbmcg
dGhlIG93bmVyIGlmIGNhbGxlZCBmcm9tIGNocm9tZS4gIFRoYXQgd291bGQgYmUKICAgLy8gICAg
ICB2ZXJ5IHdyb25nIGlmIHRoaXMgY29kZSBjaGFuZ2VkIGFueXRoaW5nIGJ1dCBjaGFubmVscyB0
aGF0CiAgIC8vICAgICAgY2FuJ3QgcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dCEK
ICAgLy8KICAgLy8gICAgICAoQ3VycmVudGx5IGNocm9tZSBVUklzIHNldCB0aGUgb3duZXIgd2hl
biB0aGV5IGFyZSBjcmVhdGVkIQogICAvLyAgICAgIFNvIHNldHRpbmcgYSBOVUxMIG93bmVyIHdv
dWxkIGJlIGJhZCEpCiAgIC8vCisgIC8vIElmIGFGb3JjZU93bmVyIGlzIHRydWUsIHRoZSBvd25l
ciB3aWxsIGJlIHNldCwgZXZlbiBmb3IgYSBjaGFubmVsIHRoYXQKKyAgLy8gY2FuIHByb3ZpZGUg
aXRzIG93biBzZWN1cml0eSBjb250ZXh0LiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBIVE1MNSBJRlJB
TUUKKyAgLy8gc2FuZGJveCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiBmb3JjZSB0aGUgY2hhbm5lbCAo
YW5kIGl0cyBkb2N1bWVudCkgdG8KKyAgLy8gZXhwbGljaXRseSBoYXZlIGEgbnVsbCBwcmluY2lw
YWwuCiAgIGJvb2wgaW5oZXJpdDsKICAgLy8gV2UgZXhwZWN0IFVSSUluaGVyaXRzU2VjdXJpdHlD
b250ZXh0IHRvIHJldHVybiBzdWNjZXNzIGZvciBhbgogICAvLyBhYm91dDpibGFuayBVUkksIHNv
IGRvbid0IGNhbGwgTlNfSXNBYm91dEJsYW5rKCkgaWYgdGhpcyBjYWxsIGZhaWxzLgogICAvLyBU
aGlzIGNvbmRpdGlvbiBuZWVkcyB0byBtYXRjaCB0aGUgb25lIGluIG5zRG9jU2hlbGw6OkludGVy
bmFsTG9hZCB3aGVyZQogICAvLyB3ZSdyZSBjaGVja2luZyBmb3IgdGhpbmdzIHRoYXQgd2lsbCB1
c2UgdGhlIG93bmVyLgotICBpZiAoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250
ZXh0KGFVUkksICZpbmhlcml0KSkgJiYKLSAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91
dEJsYW5rICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSB7CisgIGlmIChhRm9yY2VPd25lciB8
fCAoKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJp
dCkpICYmCisgICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fi
b3V0QmxhbmsoYVVSSSkpKSkpKSB7CisjaWZkZWYgREVCVUcKKyAgICAvLyBBc3NlcnQgdGhhdCBh
Rm9yY2VPd25lciBpcyBvbmx5IHNldCBmb3IgbnVsbCBwcmluY2lwYWxzCisgICAgaWYgKGFGb3Jj
ZU93bmVyKSB7CisgICAgICBuc0NPTVB0cjxuc0lVUkk+IG93bmVyVVJJOworICAgICAgbnNyZXN1
bHQgcnYgPSBhTG9hZGluZ1ByaW5jaXBhbC0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKG93bmVyVVJJ
KSk7CisgICAgICBNT1pfQVNTRVJUKE5TX1NVQ0NFRURFRChydikgJiYgU2NoZW1lSXMob3duZXJV
UkksIE5TX05VTExQUklOQ0lQQUxfU0NIRU1FKSk7CisgICAgfQorI2VuZGlmCiAgICAgYUNoYW5u
ZWwtPlNldE93bmVyKGFMb2FkaW5nUHJpbmNpcGFsKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQog
CiAgIC8vCiAgIC8vIGZpbGU6IHVyaSBzcGVjaWFsLWNhc2luZwogICAvLwogICAvLyBJZiB0aGlz
IGlzIGEgZmlsZTogbG9hZCBvcGVuZWQgZnJvbSBhbm90aGVyIGZpbGU6IHRoZW4gaXQgbWF5IG5l
ZWQKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAgYi9jb250ZW50
L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVu
dC5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcApAQCAtMjM2MywxNiAr
MjM2MywyNSBAQCBuc0RvY3VtZW50OjpTdGFydERvY3VtZW50TG9hZChjb25zdCBjaGFyCiAgICAg
RmluZENoYXJJblJlYWRhYmxlKCc7Jywgc2VtaWNvbG9uLCBlbmQpOwogICAgIFNldENvbnRlbnRU
eXBlSW50ZXJuYWwoU3Vic3RyaW5nKHN0YXJ0LCBzZW1pY29sb24pKTsKICAgfQogCiAgIFJldHJp
ZXZlUmVsZXZhbnRIZWFkZXJzKGFDaGFubmVsKTsKIAogICBtQ2hhbm5lbCA9IGFDaGFubmVsOwog
CisgIC8vIElmIHRoaXMgZG9jdW1lbnQgaXMgYmVpbmcgbG9hZGVkIGJ5IGEgZG9jc2hlbGwsIGNv
cHkgaXRzIHNhbmRib3ggZmxhZ3MKKyAgLy8gdG8gdGhlIGRvY3VtZW50LiBUaGVzZSBhcmUgaW1t
dXRhYmxlIGFmdGVyIGJlaW5nIHNldCBoZXJlLgorICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9j
U2hlbGwgPSBkb19RdWVyeUludGVyZmFjZShhQ29udGFpbmVyKTsKKworICBpZiAoZG9jU2hlbGwp
IHsKKyAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTYW5kYm94RmxhZ3MoJm1TYW5kYm94
RmxhZ3MpOworICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgIH0KKwogICBuc3Jlc3Vs
dCBydiA9IEluaXRDU1AoKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICByZXR1
cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0RvY3VtZW50OjpJbml0Q1NQKCkKZGlmZiAtLWdp
dCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAgYi9jb250ZW50L2Jhc2Uvc3Jj
L25zRnJhbWVMb2FkZXIuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5j
cHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcApAQCAtNzcsMTYgKzc3
LDE5IEBACiAjaW5jbHVkZSAibW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNsdWRlICJtb3pp
bGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIKICNpbmNsdWRl
ICJtb3ppbGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlvdXQvUmVuZGVy
RnJhbWVQYXJlbnQuaCIKIAogI2luY2x1ZGUgImpzYXBpLmgiCiAKKyNpbmNsdWRlICJuc0hUTUxJ
RnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKKwogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE6OmxheWVyczsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXlvdXQ7
CiB0eXBlZGVmIEZyYW1lTWV0cmljczo6Vmlld0lEIFZpZXdJRDsKIAogY2xhc3MgbnNBc3luY0Rv
Y1NoZWxsRGVzdHJveWVyIDogcHVibGljIG5zUnVubmFibGUKIHsKQEAgLTQzOCwxNiArNDQxLDQ1
IEBAIG5zRnJhbWVMb2FkZXI6OlJlYWxseVN0YXJ0TG9hZGluZ0ludGVybmEKICAgLy8gSnVzdCB0
byBiZSBzYWZlLCByZWNoZWNrIHVyaS4KICAgcnYgPSBDaGVja1VSSUxvYWQobVVSSVRvTG9hZCk7
CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbnNDT01QdHI8bnNJRG9jU2hlbGxM
b2FkSW5mbz4gbG9hZEluZm87CiAgIG1Eb2NTaGVsbC0+Q3JlYXRlTG9hZEluZm8oZ2V0dGVyX0Fk
ZFJlZnMobG9hZEluZm8pKTsKICAgTlNfRU5TVVJFX1RSVUUobG9hZEluZm8sIE5TX0VSUk9SX0ZB
SUxVUkUpOwogCisgIC8vIElzIHRoaXMgYW4gPGlmcmFtZT4gd2l0aCBhIHNhbmRib3ggYXR0cmli
dXRlIG9yIGEgcGFyZW50IHdoaWNoIGlzCisgIC8vIHNhbmRib3hlZCA/CisgIG5zSFRNTElGcmFt
ZUVsZW1lbnQqIGlmcmFtZSA9CisgICAgbnNIVE1MSUZyYW1lRWxlbWVudDo6RnJvbUNvbnRlbnQo
bU93bmVyQ29udGVudCk7CisKKyAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICBpZiAo
aWZyYW1lKSB7CisgICAgc2FuZGJveEZsYWdzID0gaWZyYW1lLT5HZXRTYW5kYm94RmxhZ3MoKTsK
KworICAgIFBSVWludDMyIHBhcmVudFNhbmRib3hGbGFncyA9IGlmcmFtZS0+T3duZXJEb2MoKS0+
U2FuZGJveEZsYWdzKCk7CisKKyAgICBpZiAoc2FuZGJveEZsYWdzIHx8IHBhcmVudFNhbmRib3hG
bGFncykgeworICAgICAgLy8gVGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0cmljdGlvbnMsIG5v
dCByZW1vdmUgdGhlbS4KKyAgICAgIHNhbmRib3hGbGFncyB8PSBwYXJlbnRTYW5kYm94RmxhZ3M7
CisKKyAgICAgIG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFncyk7CisKKyAg
ICAgIC8vIFNldCB1cCB0aGUgYWN0dWFsIHNhbmRib3hpbmcgZm9yIHBsdWdpbnMgYXMgc3BlY2lm
aWVkLgorICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9QTFVHSU5TKSB7CisgICAg
ICAgIG1Eb2NTaGVsbC0+U2V0QWxsb3dQbHVnaW5zKGZhbHNlKTsKKyAgICAgIH0KKyAgICB9Cisg
IH0KKworICAvLyBJZiB0aGlzIGlzIGFuIDxpZnJhbWU+IGFuZCBpdCdzIHNhbmRib3hlZCB3aXRo
IHJlc3BlY3QgdG8gb3JpZ2luCisgIC8vIHdlIHdpbGwgc2V0IGl0IHVwIHdpdGggYSBudWxsIHBy
aW5jaXBhbCBsYXRlciBpbiBuc0RvY1NoZWxsOjpEb1VSSUxvYWQuCisgIC8vIFdlIGRvIGl0IHRo
ZXJlIHRvIGNvcnJlY3RseSBzYW5kYm94IGNvbnRlbnQgdGhhdCB3YXMgbG9hZGVkIGludG8KKyAg
Ly8gdGhlIGlmcmFtZSB2aWEgb3RoZXIgbWV0aG9kcyB0aGFuIHRoZSBzcmMgYXR0cmlidXRlLgog
ICAvLyBXZSdsbCB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRoYXQgb2YgdGhlIGRvY3VtZW50IGxv
YWRlZCBpbnNpZGUgdXMuICBUaGlzCiAgIC8vIGlzIHZlcnkgaW1wb3J0YW50OyBuZWVkZWQgdG8g
cHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9hZGVkIGluCiAgIC8vIHN1YmZyYW1l
cyEKICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKSk7
CiAKICAgbnNDT01QdHI8bnNJVVJJPiByZWZlcnJlcjsKICAgcnYgPSBtT3duZXJDb250ZW50LT5O
b2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhyZWZlcnJlcikpOwogICBOU19F
TlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0dr
QXRvbUxpc3QuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKLS0tIGEvY29udGVu
dC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9t
TGlzdC5oCkBAIC02MiwxNyArNjIsMjEgQEAgR0tfQVRPTShhY3R1YXRlLCAiYWN0dWF0ZSIpCiBH
S19BVE9NKGFkZHJlc3MsICJhZGRyZXNzIikKIEdLX0FUT00oYWZ0ZXIsICJhZnRlciIpCiBHS19B
VE9NKGFmdGVyX2VuZCwgImFmdGVyX2VuZCIpCiBHS19BVE9NKGFmdGVyX3N0YXJ0LCAiYWZ0ZXJf
c3RhcnQiKQogR0tfQVRPTShhbGlnbiwgImFsaWduIikKIEdLX0FUT00oYWxpbmssICJhbGluayIp
CiBHS19BVE9NKGFsbCwgImFsbCIpCiBHS19BVE9NKGFsbG93ZXZlbnRzLCAiYWxsb3dldmVudHMi
KQorR0tfQVRPTShhbGxvd2Zvcm1zLCAiYWxsb3ctZm9ybXMiKQogR0tfQVRPTShhbGxvd25lZ2F0
aXZlYXNzZXJ0aW9ucywgImFsbG93bmVnYXRpdmVhc3NlcnRpb25zIikKK0dLX0FUT00oYWxsb3dz
YW1lb3JpZ2luLCAiYWxsb3ctc2FtZS1vcmlnaW4iKQorR0tfQVRPTShhbGxvd3NjcmlwdHMsICJh
bGxvdy1zY3JpcHRzIikKK0dLX0FUT00oYWxsb3d0b3BuYXZpZ2F0aW9uLCAiYWxsb3ctdG9wLW5h
dmlnYXRpb24iKQogR0tfQVRPTShhbGxvd3VudHJ1c3RlZCwgImFsbG93dW50cnVzdGVkIikKIEdL
X0FUT00oYWx0LCAiYWx0IikKIEdLX0FUT00oYWx0ZXJuYXRlLCAiYWx0ZXJuYXRlIikKIEdLX0FU
T00oYWx3YXlzLCAiYWx3YXlzIikKIEdLX0FUT00oYW5jZXN0b3IsICJhbmNlc3RvciIpCiBHS19B
VE9NKGFuY2VzdG9yT3JTZWxmLCAiYW5jZXN0b3Itb3Itc2VsZiIpCiBHS19BVE9NKF9hbmQsICJh
bmQiKQogR0tfQVRPTShhbnksICJhbnkiKQpAQCAtODM3LDE2ICs4NDEsMTcgQEAgR0tfQVRPTShy
b3dzcGFuLCAicm93c3BhbiIpCiBHS19BVE9NKHJwLCAicnAiKQogR0tfQVRPTShydCwgInJ0IikK
IEdLX0FUT00ocnRsLCAicnRsIikKIEdLX0FUT00ocnVieSwgInJ1YnkiKQogR0tfQVRPTShydWxl
LCAicnVsZSIpCiBHS19BVE9NKHJ1bGVzLCAicnVsZXMiKQogR0tfQVRPTShzLCAicyIpCiBHS19B
VE9NKHNhbXAsICJzYW1wIikKK0dLX0FUT00oc2FuZGJveCwgInNhbmRib3giKQogR0tfQVRPTShz
YmF0dHIsICJzYmF0dHIiKQogR0tfQVRPTShzY2FsZSwgInNjYWxlIikKIEdLX0FUT00oc2Nhbiwg
InNjYW4iKQogR0tfQVRPTShzY2hlbWUsICJzY2hlbWUiKQogR0tfQVRPTShzY29wZSwgInNjb3Bl
IikKIEdLX0FUT00oc2NvcGVkLCAic2NvcGVkIikKIEdLX0FUT00oc2NyZWVuLCAic2NyZWVuIikK
IEdLX0FUT00oc2NyZWVuWCwgInNjcmVlblgiKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3Ny
Yy9uc1NhbmRib3hGbGFncy5oIGIvY29udGVudC9iYXNlL3NyYy9uc1NhbmRib3hGbGFncy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9iYXNlL3NyYy9u
c1NhbmRib3hGbGFncy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13
aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8N
CisvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhl
IE1vemlsbGEgUHVibGljDQorICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1Q
TCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLA0KKyAqIFlvdSBjYW4gb2J0YWlu
IG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovDQorDQorLyoNCisgKiBDb25z
dGFudCBmbGFncyB0aGF0IGRlc2NyaWJlIGhvdyBhIGRvY3VtZW50IGlzIHNhbmRib3hlZCBhY2Nv
cmRpbmcgdG8gdGhlDQorICogSFRNTDUgc3BlYy4NCisgKi8NCisNCisjaWZuZGVmIG5zU2FuZGJv
eEZsYWdzX2hfX18NCisjZGVmaW5lIG5zU2FuZGJveEZsYWdzX2hfX18NCisNCisvKioNCisgKiBU
aGlzIGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgYnJvd3NpbmcgY29udGV4
dHMgb3RoZXIgdGhhbg0KKyAqIHRoZSBzYW5kYm94ZWQgYnJvd3NpbmcgY29udGV4dCBpdHNlbGYg
KG9yIGJyb3dzaW5nIGNvbnRleHRzIGZ1cnRoZXINCisgKiBuZXN0ZWQgaW5zaWRlIGl0KSwgYW5k
IHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBs
b25nIFNBTkRCT1hFRF9OQVZJR0FUSU9OICA9IDB4MTsNCisNCisvKioNCisgKiBUaGlzIGZsYWcg
cHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgdGhlaXIgdG9wLWxldmVsIGJyb3dzaW5n
DQorICogY29udGV4dC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9UT1BM
RVZFTF9OQVZJR0FUSU9OID0gMHgyOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBj
b250ZW50IGZyb20gaW5zdGFudGlhdGluZyBwbHVnaW5zLCB3aGV0aGVyIHVzaW5nIHRoZQ0KKyAq
IGVtYmVkIGVsZW1lbnQsIHRoZSBvYmplY3QgZWxlbWVudCwgdGhlIGFwcGxldCBlbGVtZW50LCBv
ciB0aHJvdWdoDQorICogbmF2aWdhdGlvbiBvZiBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCB1
bmxlc3MgdGhvc2UgcGx1Z2lucyBjYW4gYmUNCisgKiBzZWN1cmVkLg0KKyAqLw0KK2NvbnN0IHVu
c2lnbmVkIGxvbmcgU0FOREJPWEVEX1BMVUdJTlMgPSAweDQ7DQorDQorLyoqDQorICogVGhpcyBm
bGFnIGZvcmNlcyBjb250ZW50IGludG8gYSB1bmlxdWUgb3JpZ2luLCB0aHVzIHByZXZlbnRpbmcg
aXQgZnJvbQ0KKyAqIGFjY2Vzc2luZyBvdGhlciBjb250ZW50IGZyb20gdGhlIHNhbWUgb3JpZ2lu
Lg0KKyAqIFRoaXMgZmxhZyBhbHNvIHByZXZlbnRzIHNjcmlwdCBmcm9tIHJlYWRpbmcgZnJvbSBv
ciB3cml0aW5nIHRvIHRoZQ0KKyAqIGRvY3VtZW50LmNvb2tpZSBJREwgYXR0cmlidXRlLCBhbmQg
YmxvY2tzIGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9u
ZyBTQU5EQk9YRURfT1JJR0lOID0gMHg4Ow0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3Mg
Zm9ybSBzdWJtaXNzaW9uLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX0ZP
Uk1TID0gMHgxMDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIHNjcmlwdCBleGVjdXRp
b24uDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfU0NSSVBUUyA9IDB4MjA7
DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBmZWF0dXJlcyB0aGF0IHRyaWdnZXIgYXV0
b21hdGljYWxseSwgc3VjaCBhcw0KKyAqIGF1dG9tYXRpY2FsbHkgcGxheWluZyBhIHZpZGVvIG9y
IGF1dG9tYXRpY2FsbHkgZm9jdXNpbmcgYSBmb3JtIGNvbnRyb2wuDQorICovDQorY29uc3QgdW5z
aWduZWQgbG9uZyBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTID0gMHg0MDsNCisjZW5kaWYN
CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcCBiL2NvbnRl
bnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNT
Y3JpcHRMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3Bw
CkBAIC0zNywxNiArMzcsMTcgQEAKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3ku
aCIKICNpbmNsdWRlICJwcmxvZy5oIgogI2luY2x1ZGUgIm5zSUNoYW5uZWxQb2xpY3kuaCIKICNp
bmNsdWRlICJuc0NoYW5uZWxQb2xpY3kuaCIKICNpbmNsdWRlICJuc0NSVC5oIgogI2luY2x1ZGUg
Im5zQ29udGVudENyZWF0b3JGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJuc0dlbmVyaWNFbGVtZW50
LmgiCiAjaW5jbHVkZSAibnNDcm9zc1NpdGVMaXN0ZW5lclByb3h5LmgiCisjaW5jbHVkZSAibnNT
YW5kYm94RmxhZ3MuaCIKIAogI2luY2x1ZGUgIm1vemlsbGEvRnVuY3Rpb25UaW1lci5oIgogI2lu
Y2x1ZGUgIm1vemlsbGEvQ09SU01vZGUuaCIKIAogI2lmZGVmIFBSX0xPR0dJTkcKIHN0YXRpYyBQ
UkxvZ01vZHVsZUluZm8qIGdDc3BQUkxvZzsKICNlbmRpZgogCkBAIC0yNzIsMTYgKzI3MywyMiBA
QCBuc1NjcmlwdExvYWRlcjo6U3RhcnRMb2FkKG5zU2NyaXB0TG9hZFJlCiAgIGlmICghd2luZG93
KSB7CiAgICAgcmV0dXJuIE5TX0VSUk9SX05VTExfUE9JTlRFUjsKICAgfQogCiAgIG5zSURvY1No
ZWxsICpkb2NzaGVsbCA9IHdpbmRvdy0+R2V0RG9jU2hlbGwoKTsKIAogICBuc0NPTVB0cjxuc0lJ
bnRlcmZhY2VSZXF1ZXN0b3I+IHByb21wdGVyKGRvX1F1ZXJ5SW50ZXJmYWNlKGRvY3NoZWxsKSk7
CiAKKyAgLy8gSWYgdGhpcyBkb2N1bWVudCBpcyBzYW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctc2Ny
aXB0cycsIGFib3J0LgorICBpZiAobURvY3VtZW50LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hF
RF9TQ1JJUFRTKSB7CisgICAgLy8gUkVWSUVXIDogdGhpcyBwcm9iYWJseSBpc24ndCB0aGUgcmln
aHQgZXJyb3IuLgorICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICB9CisK
ICAgLy8gY2hlY2sgZm9yIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdG8gcGFzcyBkb3duIHRv
IHRoZSBjaGFubmVsCiAgIC8vIHRoYXQgd2lsbCBiZSBjcmVhdGVkIHRvIGxvYWQgdGhlIHNjcmlw
dAogICBuc0NPTVB0cjxuc0lDaGFubmVsUG9saWN5PiBjaGFubmVsUG9saWN5OwogICBuc0NPTVB0
cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQ
cmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICBOU19FTlNVUkVfU1VD
Q0VTUyhydiwgcnYpOwogICBpZiAoY3NwKSB7CiAgICAgY2hhbm5lbFBvbGljeSA9IGRvX0NyZWF0
ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnNjaGFubmVscG9saWN5OzEiKTsKQEAgLTYyOSwxNiAr
NjM2LDIxIEBAIG5zU2NyaXB0TG9hZGVyOjpQcm9jZXNzU2NyaXB0RWxlbWVudChuc0kKICAgICAg
ICAgIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwYXJzZXItYmxvY2tpbmcgc2NyaXB0IGF0IGEgdGlt
ZSIpOwogICAgIE5TX0FTU0VSVElPTihtWFNMVFJlcXVlc3RzLklzRW1wdHkoKSwKICAgICAgICAg
IlBhcnNlci1ibG9ja2luZyBzY3JpcHRzIGFuZCBYU0xUIHNjcmlwdHMgaW4gdGhlIHNhbWUgZG9j
ISIpOwogICAgIG1QYXJzZXJCbG9ja2luZ1JlcXVlc3QgPSByZXF1ZXN0OwogICAgIHJldHVybiB0
cnVlOwogICB9CiAKICAgLy8gaW5saW5lIHNjcmlwdAorICAvLyBJcyB0aGlzIGRvY3VtZW50IHNh
bmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJz8KKyAgaWYgKG1Eb2N1bWVudC0+U2FuZGJv
eEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQor
CiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3NwOwogICBydiA9IG1Eb2N1
bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgIE5T
X0VOU1VSRV9TVUNDRVNTKHJ2LCBmYWxzZSk7CiAKICAgaWYgKGNzcCkgewogICAgIFBSX0xPRyhn
Q3NwUFJMb2csIFBSX0xPR19ERUJVRywgKCJOZXcgU2NyaXB0TG9hZGVyIGkgKioqKndpdGggQ1NQ
KioqKiIpKTsKICAgICBib29sIGlubGluZU9LOwogICAgIHJ2ID0gY3NwLT5HZXRBbGxvd3NJbmxp
bmVTY3JpcHQoJmlubGluZU9LKTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2
ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcCBiL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVu
ZXJNYW5hZ2VyLmNwcAotLS0gYS9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFu
YWdlci5jcHAKKysrIGIvY29udGVudC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIu
Y3BwCkBAIC01MCwxNiArNTAsMTcgQEAKICNpbmNsdWRlICJuc0RPTUpTVXRpbHMuaCIKICNpbmNs
dWRlICJuc0RPTVNjcmlwdE9iamVjdEhvbGRlci5oIgogI2luY2x1ZGUgIm5zRGF0YUhhc2h0YWJs
ZS5oIgogI2luY2x1ZGUgIm5zQ09NQXJyYXkuaCIKICNpbmNsdWRlICJuc0V2ZW50TGlzdGVuZXJT
ZXJ2aWNlLmgiCiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVk
ZSAibnNKU0Vudmlyb25tZW50LmgiCiAjaW5jbHVkZSAieHBjcHVibGljLmgiCisjaW5jbHVkZSAi
bnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5n
IG5hbWVzcGFjZSBtb3ppbGxhOjpoYWw7CiAKICNkZWZpbmUgRVZFTlRfVFlQRV9FUVVBTFMoIGxz
LCB0eXBlLCB1c2VyVHlwZSApIFwKICAgKGxzLT5tRXZlbnRUeXBlID09IHR5cGUgJiYgXAogICAo
bHMtPm1FdmVudFR5cGUgIT0gTlNfVVNFUl9ERUZJTkVEX0VWRU5UIHx8IGxzLT5tVHlwZUF0b20g
PT0gdXNlclR5cGUpKQogCkBAIC01NjEsMTYgKzU2MiwyMiBAQCBuc0V2ZW50TGlzdGVuZXJNYW5h
Z2VyOjpBZGRTY3JpcHRFdmVudExpCiAgICAgLy8gbG9hZGVkIGFzIGRhdGEuCiAgICAgcmV0dXJu
IE5TX09LOwogICB9CiAKICAgbnNyZXN1bHQgcnYgPSBOU19PSzsKICAgLy8gcmV0dXJuIGVhcmx5
IHByZXZlbnRpbmcgdGhlIGV2ZW50IGxpc3RlbmVyIGZyb20gYmVpbmcgYWRkZWQKICAgLy8gJ2Rv
YycgaXMgZmV0Y2hlZCBhYm92ZQogICBpZiAoZG9jKSB7CisgICAgLy8gRG9uJ3QgYWxsb3cgYWRk
aW5nIGFuIGV2ZW50IGxpc3RlbmVyIGlmIHRoZSBkb2N1bWVudCBpcyBzYW5kYm94ZWQKKyAgICAv
LyB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJy4KKyAgICBpZiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAm
IFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZ
X0VSUjsKKyAgICB9CisKICAgICBuc0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNz
cDsKICAgICBydiA9IGRvYy0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMo
Y3NwKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICAgIGlmIChjc3ApIHsK
ICAgICAgIGJvb2wgaW5saW5lT0s7CiAgICAgICBydiA9IGNzcC0+R2V0QWxsb3dzSW5saW5lU2Ny
aXB0KCZpbmxpbmVPSyk7CiAgICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0t
Z2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcCBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKLS0tIGEvY29udGVu
dC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC00OCwxNiArNDgsMTcgQEAK
IAogI2luY2x1ZGUgIm1vekF1dG9Eb2NVcGRhdGUuaCIKICNpbmNsdWRlICJuc0lIVE1MQ29sbGVj
dGlvbi5oIgogCiAjaW5jbHVkZSAibnNJQ29uc3RyYWludFZhbGlkYXRpb24uaCIKIAogI2luY2x1
ZGUgIm5zSURPTUhUTUxCdXR0b25FbGVtZW50LmgiCiAjaW5jbHVkZSAiZG9tYmluZGluZ3MuaCIK
KyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6
ZG9tOwogCiBzdGF0aWMgY29uc3QgaW50IE5TX0ZPUk1fQ09OVFJPTF9MSVNUX0hBU0hUQUJMRV9T
SVpFID0gMTY7CiAKIHN0YXRpYyBjb25zdCBQUlVpbnQ4IE5TX0ZPUk1fQVVUT0NPTVBMRVRFX09O
ICA9IDE7CiBzdGF0aWMgY29uc3QgUFJVaW50OCBOU19GT1JNX0FVVE9DT01QTEVURV9PRkYgPSAw
OwogCkBAIC02NDgsMTcgKzY0OSwxOSBAQCBuc0hUTUxGb3JtRWxlbWVudDo6RG9TdWJtaXRPclJl
c2V0KG5zRXZlCiAgICAgcmV0dXJuIERvUmVzZXQoKTsKICAgfQogCiAgIGlmIChOU19GT1JNX1NV
Qk1JVCA9PSBhTWVzc2FnZSkgewogICAgIC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdyZSBub3QgaW4g
YSBkb2N1bWVudC4KICAgICBpZiAoIWRvYykgewogICAgICAgcmV0dXJuIE5TX09LOwogICAgIH0K
LSAgICByZXR1cm4gRG9TdWJtaXQoYUV2ZW50KTsKKyAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2Un
cmUgaW4gYSBzYW5kYm94ZWQgZnJhbWUgYW5kIGZvcm0gc3VibWl0CisgICAgLy8gaXMgZGlzYWJs
ZWQuCisgICAgcmV0dXJuIChkb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX0ZPUk1TKSA/
IE5TX09LIDogRG9TdWJtaXQoYUV2ZW50KTsKICAgfQogCiAgIE1PWl9BU1NFUlQoZmFsc2UpOwog
ICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0hUTUxGb3JtRWxlbWVudDo6RG9SZXNl
dCgpCkBAIC0xNjQ5LDE2ICsxNjUyLDI0IEBAIG5zSFRNTEZvcm1FbGVtZW50OjpDaGVja1ZhbGlk
Rm9ybVN1Ym1pc3MKICAgICogVE9ETzogdGhlIGNoZWNrIGZvciBvYnNlcnZlciBzaG91bGQgYmUg
cmVtb3ZlZCBsYXRlciB3aGVuIEhUTUw1IEZvcm1zIHdpbGwKICAgICogYmUgc3ByZWFkIGVub3Vn
aCBhbmQgYXV0aG9ycyB3aWxsIGFzc3VtZSBmb3JtcyBjYW4ndCBiZSBzdWJtaXR0ZWQgd2hlbgog
ICAgKiBpbnZhbGlkLiBTZWUgYnVnIDU4NzY3MS4KICAgICovCiAKICAgTlNfQVNTRVJUSU9OKCFI
YXNBdHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6Om5vdmFsaWRhdGUpLAogICAgICAg
ICAgICAgICAgIldlIHNob3VsZG4ndCBiZSB0aGVyZSBpZiBub3ZhbGlkYXRlIGlzIHNldCEiKTsK
IAorICAvLyBEb24ndCBkbyB2YWxpZGF0aW9uIGZvciBhIGZvcm0gc3VibWl0IGRvbmUgYnkgYSBz
YW5kYm94ZWQgZG9jdW1lbnQgdGhhdAorICAvLyBkb2Vzbid0IGhhdmUgJ2FsbG93LWZvcm1zJywg
dGhlIHN1Ym1pdCB3aWxsIGhhdmUgYmVlbiBibG9ja2VkIGFuZCB0aGUKKyAgLy8gSFRNTDUgc3Bl
YyBzYXlzIHdlIHNob3VsZG4ndCB2YWxpZGF0ZSBpbiB0aGlzIGNhc2UuCisgIG5zSURvY3VtZW50
KiBkb2MgPSBHZXRDdXJyZW50RG9jKCk7CisgIGlmIChkb2MgJiYgKGRvYy0+U2FuZGJveEZsYWdz
KCkgJiBTQU5EQk9YRURfRk9STVMpKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCiAgIC8v
IFdoZW4gLnN1Ym1pdCgpIGlzIGNhbGxlZCBhRXZlbnQgPSBuc251bGwgc28gd2UgY2FuIHJlbHkg
b24gdGhhdCB0byBrbm93IGlmCiAgIC8vIHdlIGhhdmUgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9m
IHRoZSBmb3JtLgogICBuc0NPTVB0cjxuc0lPYnNlcnZlclNlcnZpY2U+IHNlcnZpY2UgPQogICAg
IG1vemlsbGE6OnNlcnZpY2VzOjpHZXRPYnNlcnZlclNlcnZpY2UoKTsKICAgaWYgKCFzZXJ2aWNl
KSB7CiAgICAgTlNfV0FSTklORygiTm8gb2JzZXJ2ZXIgc2VydmljZSBhdmFpbGFibGUhIik7CiAg
ICAgcmV0dXJuIHRydWU7CiAgIH0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Ny
Yy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxJRnJhbWVFbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1M
SUZyYW1lRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElG
cmFtZUVsZW1lbnQuY3BwCkBAIC0xLDI0ICsxLDE2IEBACiAvKiAtKi0gTW9kZTogQysrOyB0YWIt
d2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICov
CiAvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhl
IE1vemlsbGEgUHVibGljCiAgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBM
IHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCiAgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBv
bmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwogCiAjaW5jbHVkZSAibW96aWxs
YS9VdGlsLmgiCiAKICNpbmNsdWRlICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAi
bnNJRE9NRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0lET01TVkdEb2N1bWVudC5oIgotI2luY2x1
ZGUgIm5zR2tBdG9tcy5oIgotI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNN
YXBwZWRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAibnNET01FcnJvci5oIgotI2luY2x1ZGUgIm5z
UnVsZURhdGEuaCIKLSNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIAogTlNfSU1QTF9OU19O
RVdfSFRNTF9FTEVNRU5UX0NIRUNLX1BBUlNFUihJRnJhbWUpCiAKIG5zSFRNTElGcmFtZUVsZW1l
bnQ6Om5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lOb2RlSW5mbz4gYU5v
ZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9tUGFy
c2VyIGFGcm9tUGFyc2VyKQpAQCAtNTMsMTYgKzQ1LDE3IEBAIE5TX0lNUExfU1RSSU5HX0FUVFIo
bnNIVE1MSUZyYW1lRWxlbWVudCwKIE5TX0lNUExfVVJJX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVu
dCwgTG9uZ0Rlc2MsIGxvbmdkZXNjKQogTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVF
bGVtZW50LCBNYXJnaW5IZWlnaHQsIG1hcmdpbmhlaWdodCkKIE5TX0lNUExfU1RSSU5HX0FUVFIo
bnNIVE1MSUZyYW1lRWxlbWVudCwgTWFyZ2luV2lkdGgsIG1hcmdpbndpZHRoKQogTlNfSU1QTF9T
VFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBOYW1lLCBuYW1lKQogTlNfSU1QTF9TVFJJ
TkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBTY3JvbGxpbmcsIHNjcm9sbGluZykKIE5TX0lN
UExfVVJJX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU3JjLCBzcmMpCiBOU19JTVBMX1NUUklO
R19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFdpZHRoLCB3aWR0aCkKIE5TX0lNUExfQk9PTF9B
VFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE1vekFsbG93RnVsbFNjcmVlbiwgbW96YWxsb3dmdWxs
c2NyZWVuKQorTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBTYW5kYm94
LCBzYW5kYm94KQogCiB2b2lkCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRJdGVtVmFsdWVUZXh0
KG5zQVN0cmluZyYgYVZhbHVlKQogewogICBHZXRTcmMoYVZhbHVlKTsKIH0KIAogdm9pZApAQCAt
MjAyLDggKzE5NSw0MCBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpJc0F0dHJpYnV0ZU1hcHBlZChj
CiAKIAogbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYwogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0
QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3QKIHsKICAgcmV0dXJuICZNYXBBdHRyaWJ1
dGVzSW50b1J1bGU7CiB9CiAKK25zcmVzdWx0Cituc0hUTUxJRnJhbWVFbGVtZW50OjpBZnRlclNl
dEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBdHRyVmFsdWUqIGFWYWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYU5vdGlmeSkKK3sKKyAgaWYgKGFO
YW1lID09IG5zR2tBdG9tczo6c2FuZGJveCAmJiBhTmFtZVNwYWNlSUQgPT0ga05hbWVTcGFjZUlE
X05vbmUpIHsKKyAgICAvLyBQYXJzZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJp
YnV0ZSwgYW5kIGlmIHdlIGhhdmUgYSBkb2NzaGVsbAorICAgIC8vIHNldCBpdHMgc2FuZGJveCBm
bGFncyBhcHByb3ByaWF0ZWx5LgorICAgIGlmIChtRnJhbWVMb2FkZXIpIHsKKyAgICAgIG5zQ09N
UHRyPG5zSURvY1NoZWxsPiBkb2NzaGVsbCA9IG1GcmFtZUxvYWRlci0+R2V0RXhpc3RpbmdEb2NT
aGVsbCgpOworCisgICAgICBpZiAoZG9jc2hlbGwpIHsKKyAgICAgICAgUFJVaW50MzIgbmV3Rmxh
Z3MgPSAwOworICAgICAgICAvLyBJZiBhIE5VTEwgYVZhbHVlIGlzIHBhc3NlZCBpbiwgd2Ugd2Fu
dCB0byBjbGVhciB0aGUgc2FuZGJveCBmbGFncworICAgICAgICAvLyB3aGljaCB3ZSB3aWxsIGRv
IGJ5IHNldHRpbmcgdGhlbSB0byAwLgorICAgICAgICBpZiAoYVZhbHVlKSB7CisgICAgICAgICAg
bnNBdXRvU3RyaW5nIHN0clZhbHVlOworICAgICAgICAgIGFWYWx1ZS0+VG9TdHJpbmcoc3RyVmFs
dWUpOworICAgICAgICAgIG5ld0ZsYWdzID0gbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0
dHJpYnV0ZVRvRmxhZ3MoCisgICAgICAgICAgICBzdHJWYWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHBsdWdpbnMgaGVyZSBiZWNhdXNlIHRoZSBj
aGFuZ2UgaW4gdGhlCisgICAgICAgIC8vIHNhbmRib3ggYXR0cmlidXRlIGlzIG5vdCBzdXBwb3Nl
ZCB0byB0YWtlIGVmZmVjdCB1bnRpbCB0aGUKKyAgICAgICAgLy8gbmV4dCBkb2N1bWVudCBpcyBs
b2FkZWQuCisgICAgICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3RmxhZ3MpOworICAg
ICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6OkFmdGVyU2V0
QXR0cihhTmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFOb3RpZnkpOworCit9CmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaAotLS0gYS9jb250ZW50L2h0bWwvY29udGVu
dC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Ny
Yy9uc0hUTUxJRnJhbWVFbGVtZW50LmgKQEAgLTEsMTYgKzEsMjQgQEAKIC8qIC0qLSBNb2RlOiBD
Kys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDog
MiAtKi0gKi8KIC8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJt
cyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKICAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9m
IHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKICAqIGZpbGUsIFlvdSBjYW4g
b2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCiAKICNpbmNsdWRl
ICJuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFt
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUg
Im5zSURPTVNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAibnNHa0F0b21zLmgiCisjaW5jbHVkZSAi
bnNJRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRl
ICJuc0RPTUVycm9yLmgiCisjaW5jbHVkZSAibnNSdWxlRGF0YS5oIgorI2luY2x1ZGUgIm5zU3R5
bGVDb25zdHMuaCIKKyNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogCiBjbGFzcyBuc0hUTUxJ
RnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKIHsKIHB1
YmxpYzoKICAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZv
PiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFy
c2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOwpAQCAtNDEs
MTIgKzQ5LDM2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNB
dHRyVmFsdWUmIGFSZXN1bHQpOwogICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBl
ZChjb25zdCBuc0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsKICAgdmlydHVhbCBuc01hcFJ1bGVU
b0F0dHJpYnV0ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OwogCiAg
IHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAq
KmFSZXN1bHQpIGNvbnN0OwogICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8o
KTsKICAgdmlydHVhbCBuc0lET01Ob2RlKiBBc0RPTU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAK
KyAgdmlydHVhbCBuc3Jlc3VsdCBBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5z
SUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F0
dHJWYWx1ZSogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFO
b3RpZnkpOworCisgIFBSVWludDMyIEdldFNhbmRib3hGbGFncygpCisgIHsKKyAgICBuc0F1dG9T
dHJpbmcgc2FuZGJveEF0dHI7CisKKyAgICBpZiAoR2V0QXR0cihrTmFtZVNwYWNlSURfTm9uZSwg
bnNHa0F0b21zOjpzYW5kYm94LCBzYW5kYm94QXR0cikpIHsKKyAgICAgIHJldHVybiBuc0NvbnRl
bnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhzYW5kYm94QXR0cik7CisgICAg
fQorCisgICAgLy8gTm8gc2FuZGJveCBhdHRyaWJ1dGUsIG5vIHNhbmRib3ggZmxhZ3MuCisgICAg
cmV0dXJuIDA7CisgIH0KKworICBzdGF0aWMgbnNIVE1MSUZyYW1lRWxlbWVudCogRnJvbUNvbnRl
bnQobnNJQ29udGVudCAqYUNvbnRlbnQpCisgIHsKKyAgICBpZiAoYUNvbnRlbnQtPklzSFRNTChu
c0drQXRvbXM6OmlmcmFtZSkpIHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxuc0hUTUxJRnJh
bWVFbGVtZW50Kj4oYUNvbnRlbnQpOworICAgIH0KKyAgICByZXR1cm4gbnNudWxsOworICB9CisK
IHByb3RlY3RlZDoKICAgdmlydHVhbCB2b2lkIEdldEl0ZW1WYWx1ZVRleHQobnNBU3RyaW5nJiB0
ZXh0KTsKICAgdmlydHVhbCB2b2lkIFNldEl0ZW1WYWx1ZVRleHQoY29uc3QgbnNBU3RyaW5nJiB0
ZXh0KTsKIH07CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERv
Y3VtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3Bw
Ci0tLSBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCisrKyBi
L2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCkBAIC05NywxNiAr
OTcsMTcgQEAKICNpbmNsdWRlICJwcnByZi5oIgogI2luY2x1ZGUgIm1vemlsbGEvZG9tL0VsZW1l
bnQuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibnNNaW1l
VHlwZXMuaCIKICNpbmNsdWRlICJuc0lSZXF1ZXN0LmgiCiAjaW5jbHVkZSAibnNIdG1sNVRyZWVP
cEV4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibnNIdG1sNVBhcnNlci5oIgogI2luY2x1ZGUgIm5zSURP
TUpTV2luZG93LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiAjZGVmaW5lIE5T
X01BWF9ET0NVTUVOVF9XUklURV9ERVBUSCAyMAogCiAjaW5jbHVkZSAicHJtZW0uaCIKICNpbmNs
dWRlICJwcnRpbWUuaCIKQEAgLTEyMTUsMTYgKzEyMTYsMjIgQEAgbnNIVE1MRG9jdW1lbnQ6Okdl
dENvb2tpZShuc0FTdHJpbmcmIGFDbwogewogICBhQ29va2llLlRydW5jYXRlKCk7IC8vIGNsZWFy
IGN1cnJlbnQgY29va2llIGluIGNhc2Ugc2VydmljZSBmYWlsczsKICAgICAgICAgICAgICAgICAg
ICAgICAvLyBubyBjb29raWUgaXNuJ3QgYW4gZXJyb3IgY29uZGl0aW9uLgogCiAgIGlmIChtRGlz
YWJsZUNvb2tpZUFjY2VzcykgewogICAgIHJldHVybiBOU19PSzsKICAgfQogCisgIC8vIElmIHRo
ZSBkb2N1bWVudCdzIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBpcyBzZXQsIGFjY2VzcyB0byByZWFk
IGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5E
Qk9YRURfT1JJR0lOKSB7CisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7Cisg
IH0KKyAgCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgog
ICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19D
T09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSkgewogICAgIC8vIEdldCBh
IFVSSSBmcm9tIHRoZSBkb2N1bWVudCBwcmluY2lwYWwuIFdlIHVzZSB0aGUgb3JpZ2luYWwKICAg
ICAvLyBjb2RlYmFzZSBpbiBjYXNlIHRoZSBjb2RlYmFzZSB3YXMgY2hhbmdlZCBieSBTZXREb21h
aW4KICAgICBuc0NPTVB0cjxuc0lVUkk+IGNvZGViYXNlVVJJOwogICAgIE5vZGVQcmluY2lwYWwo
KS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKGNvZGViYXNlVVJJKSk7CiAKQEAgLTEyNDUsMTYgKzEy
NTIsMjIgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwogCiBOU19J
TUVUSE9ESU1QCiBuc0hUTUxEb2N1bWVudDo6U2V0Q29va2llKGNvbnN0IG5zQVN0cmluZyYgYUNv
b2tpZSkKIHsKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09L
OwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlz
IHNldCwgYWNjZXNzIHRvIHdyaXRlIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYg
KG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSB7CisgICAgcmV0dXJuIE5TX0VSUk9S
X0RPTV9TRUNVUklUWV9FUlI7CisgIH0KKwogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZp
Y2UgaXNuJ3QgYW4gZXJyb3IKICAgbnNDT01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9
IGRvX0dldFNlcnZpY2UoTlNfQ09PS0lFU0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZp
Y2UgJiYgbURvY3VtZW50VVJJKSB7CiAgICAgbnNDT01QdHI8bnNJUHJvbXB0PiBwcm9tcHQ7CiAg
ICAgbnNDT01QdHI8bnNQSURPTVdpbmRvdz4gd2luZG93ID0gR2V0V2luZG93KCk7CiAgICAgaWYg
KHdpbmRvdykgewogICAgICAgd2luZG93LT5HZXRQcm9tcHRlcihnZXR0ZXJfQWRkUmVmcyhwcm9t
cHQpKTsKICAgICB9CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluIGIvZG9j
c2hlbGwvYmFzZS9NYWtlZmlsZS5pbgotLS0gYS9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCisr
KyBiL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4KQEAgLTg1LDkgKzg1LDEwIEBAIGluY2x1ZGUg
JCh0b3BzcmNkaXIpL2NvbmZpZy9jb25maWcubWsKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2lwYy9j
aHJvbWl1bS9jaHJvbWl1bS1jb25maWcubWsKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9y
dWxlcy5tawogCiBMT0NBTF9JTkNMVURFUyArPSBcCiAgIC1JJChzcmNkaXIpLy4uL3NoaXN0b3J5
L3NyYyBcCiAgIC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKICAgLUkkKHRvcHNyY2RpcikvbGF5
b3V0L2Jhc2UgXAogICAtSSQodG9wc3JjZGlyKS94cGNvbS9kcyBcCisgIC1JJCh0b3BzcmNkaXIp
L2NvbnRlbnQvYmFzZS9zcmMgXAogICAkKE5VTEwpCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNl
L25zRG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9kb2Nz
aGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5j
cHAKQEAgLTE3NywxNiArMTc3LDE3IEBACiAjaW5jbHVkZSAibnNJV2ViQnJvd3NlclByaW50Lmgi
CiAjZW5kaWYKIAogI2luY2x1ZGUgIm5zUGx1Z2luRXJyb3IuaCIKICNpbmNsdWRlICJuc0NvbnRl
bnRVdGlscy5oIgogI2luY2x1ZGUgIm5zQ29udGVudEVycm9ycy5oIgogI2luY2x1ZGUgIm5zSUNo
YW5uZWxQb2xpY3kuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNp
bmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNYVUxBcHBBUEkuaCIKIAog
I2luY2x1ZGUgIm5zRE9NTmF2aWdhdGlvblRpbWluZy5oIgogI2luY2x1ZGUgIm5zSVRpbWVkQ2hh
bm5lbC5oIgogI2luY2x1ZGUgIm1vemlsbGEvU3RhcnR1cFRpbWVsaW5lLmgiCiAjaW5jbHVkZSAi
bnNJRnJhbWVNZXNzYWdlTWFuYWdlci5oIgogCkBAIC03MjgsMTYgKzcyOSwxNyBAQCBuc0RvY1No
ZWxsOjpuc0RvY1NoZWxsKCk6CiAgICAgbUJ1c3lGbGFncyhCVVNZX0ZMQUdTX05PTkUpLAogICAg
IG1BcHBUeXBlKG5zSURvY1NoZWxsOjpBUFBfVFlQRV9VTktOT1dOKSwKICAgICBtTG9hZFR5cGUo
MCksCiAgICAgbU1hcmdpbldpZHRoKC0xKSwKICAgICBtTWFyZ2luSGVpZ2h0KC0xKSwKICAgICBt
SXRlbVR5cGUodHlwZUNvbnRlbnQpLAogICAgIG1QcmV2aW91c1RyYW5zSW5kZXgoLTEpLAogICAg
IG1Mb2FkZWRUcmFuc0luZGV4KC0xKSwKKyAgICBtU2FuZGJveEZsYWdzKDApLAogICAgIG1DcmVh
dGVkKGZhbHNlKSwKICAgICBtQWxsb3dTdWJmcmFtZXModHJ1ZSksCiAgICAgbUFsbG93UGx1Z2lu
cyh0cnVlKSwKICAgICBtQWxsb3dKYXZhc2NyaXB0KHRydWUpLAogICAgIG1BbGxvd01ldGFSZWRp
cmVjdHModHJ1ZSksCiAgICAgbUFsbG93SW1hZ2VzKHRydWUpLAogICAgIG1BbGxvd0ROU1ByZWZl
dGNoKHRydWUpLAogICAgIG1BbGxvd1dpbmRvd0NvbnRyb2wodHJ1ZSksCkBAIC0yOTcyLDE2ICsy
OTc0LDczIEBAIG5zRG9jU2hlbGw6OkZpbmRJdGVtV2l0aE5hbWUoY29uc3QgUFJVbmkKICAgICAg
ICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChmb3Vu
ZEl0ZW0pIHsKICAgICAgICAgICAgIC8vIFdlIHJldHVybiBmb3VuZEl0ZW0gaGVyZSBldmVuIGlm
IGl0J3Mgbm90IGFuIGFjdGl2ZQogICAgICAgICAgICAgLy8gaXRlbSBzaW5jZSBhbGwgdGhlIG5h
bWVzIHdlJ3ZlIGRlYWx0IHdpdGggc28gZmFyIGFyZQogICAgICAgICAgICAgLy8gc3BlY2lhbCBj
YXNlcyB0aGF0IHdlIHdvbid0IGJvdGhlciBsb29raW5nIGZvciBmdXJ0aGVyLgogCisgICAgICAg
ICAgICAvLyBJZiBvdXIgZG9jdW1lbnQgaXMgc2FuZGJveGVkLCB3ZSBuZWVkIHRvIGRvIHNvbWUg
ZXh0cmEgY2hlY2tzLgorICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKwor
ICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX0dldEludGVyZmFjZShh
T3JpZ2luYWxSZXF1ZXN0b3IpOworCisgICAgICAgICAgICBpZiAoZG9jKSB7CisgICAgICAgICAg
ICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncykgeworICAgICAgICAgICAgICAgIG5zQ09N
UHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHJvb3Q7CisgICAgICAgICAgICAgICAgR2V0U2FtZVR5
cGVSb290VHJlZUl0ZW0oZ2V0dGVyX0FkZFJlZnMocm9vdCkpOworCisgICAgICAgICAgICAgICAg
Ly8gSXMgdGhlIGZvdW5kIGl0ZW0gbm90IGEgdG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgYW5k
IG5vdCBvdXJzZWxmID8KKyAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJ
dGVtPiBzZWxmQXNJdGVtID0gc3RhdGljX2Nhc3Q8bnNJRG9jU2hlbGxUcmVlSXRlbSAqPih0aGlz
KTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRJdGVtICE9IHJvb3QgJiYgZm91bmRJdGVtICE9
IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXJlIHdlIGFuIGFuY2VzdG9y
IG9mIHRoZSBmb3VuZEl0ZW0gPworICAgICAgICAgICAgICAgICAgICBib29sIGlzQW5jZXN0b3Ig
PSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJ
dGVtPiBwYXJlbnRBc0l0ZW07CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50
KGdldHRlcl9BZGRSZWZzKHBhcmVudEFzSXRlbSkpOworCisgICAgICAgICAgICAgICAgICAgIHdo
aWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5z
SURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFz
SXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNBbmNlc3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJlbnRBc0l0ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlzQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE5vLCB3ZSBhcmUgbm90IGFuIGFuY2VzdG9yIGFuZCBvdXIgZG9jdW1lbnQgaXMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNhbmRib3hlZCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0IC0gaXMgaXQgYW4gYW5jZXN0b3Igb2Ygb3VycyA/
CisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsK
KyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1w
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRtcCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gZm91bmRJdGVtKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhbmNlc3RvciwgYW5kIHdlIGFyZSBzYW5kYm94ZWQu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIGFsbG93LXRvcC1uYXZpZ2F0
aW9uIGlzIHNldCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0
bXAtPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZm91bmRJ
dGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAgICAgICAgcmV0dXJuIE5TX09LOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29raW5nCiAgICAgICAgIAogICAgIC8vIEZpcnN0IHdl
IGNoZWNrIG91ciBuYW1lLgpAQCAtNTAxMiwxNiArNTA3MSwzMCBAQCBuc0RvY1NoZWxsOjpTZXRJ
c0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OkdldElz
QXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0FwcFRhYjsKICAg
cmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpTZXRTYW5kYm94
RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sKKyAgICBtU2FuZGJveEZsYWdzID0gYVNh
bmRib3hGbGFnczsKKyAgICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zRG9j
U2hlbGw6OkdldFNhbmRib3hGbGFncyhQUlVpbnQzMiAgKmFTYW5kYm94RmxhZ3MpCit7CisgICAg
KmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOworICAgIHJldHVybiBOU19PSzsKK30KKwor
TlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6U2V0VmlzaWJpbGl0eShib29sIGFWaXNpYmlsaXR5
KQogewogICAgIGlmICghbUNvbnRlbnRWaWV3ZXIpCiAgICAgICAgIHJldHVybiBOU19PSzsKICAg
ICBpZiAoYVZpc2liaWxpdHkpIHsKICAgICAgICAgbUNvbnRlbnRWaWV3ZXItPlNob3coKTsKICAg
ICB9CiAgICAgZWxzZSB7CkBAIC04MjUwLDE2ICs4MzIzLDI5IEBAIG5zRG9jU2hlbGw6OkludGVy
bmFsTG9hZChuc0lVUkkgKiBhVVJJLAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJ
dGVtPiB0YXJnZXRJdGVtOwogICAgICAgICBGaW5kSXRlbVdpdGhOYW1lKGFXaW5kb3dUYXJnZXQs
IG5zbnVsbCwgdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyh0
YXJnZXRJdGVtKSk7CiAKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IHRhcmdldERvY1No
ZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UodGFyZ2V0SXRlbSk7CiAgICAgICAgIAogICAgICAgICBi
b29sIGlzTmV3V2luZG93ID0gZmFsc2U7CiAgICAgICAgIGlmICghdGFyZ2V0RG9jU2hlbGwpIHsK
KyAgICAgICAgICAgIC8vIElmIHRoZSBkb2NzaGVsbCdzIGRvY3VtZW50IGlzIHNhbmRib3hlZCBh
bmQgd2FzIHRyeWluZyB0bworICAgICAgICAgICAgLy8gbmF2aWdhdGUvbG9hZCBhIGZyYW1lIGl0
IHdhc24ndCBhbGxvd2VkIHRvIGFjY2VzcywgdGhlCisgICAgICAgICAgICAvLyBGaW5kSXRlbVdp
dGhOYW1lIGFib3ZlIHdpbGwgaGF2ZSByZXR1cm5lZCBudWxsIGZvciB0aGUgdGFyZ2V0CisgICAg
ICAgICAgICAvLyBpdGVtIC0gd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBvcGVuIGEgbmV3IHdp
bmRvdyBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgIC8vIHRob3VnaC4gQ2hlY2sgaWYgd2UgYXJl
IHNhbmRib3hlZCBhbmQgYmFpbCBvdXQgaGVyZSBpZiBzby4KKyAgICAgICAgICAgIE5TX0VOU1VS
RV9UUlVFKG1Db250ZW50Vmlld2VyLCBOU19FUlJPUl9GQUlMVVJFKTsKKyAgICAgICAgICAgIG5z
SURvY3VtZW50KiBkb2MgPSBtQ29udGVudFZpZXdlci0+R2V0RG9jdW1lbnQoKTsKKyAgICAgICAg
ICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgICAgICBzYW5kYm94RmxhZ3Mg
PSBkb2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNB
TkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZB
SUxVUkU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRv
dz4gd2luID0KICAgICAgICAgICAgICAgICBkb19HZXRJbnRlcmZhY2UoR2V0QXNTdXBwb3J0cyh0
aGlzKSk7CiAgICAgICAgICAgICBOU19FTlNVUkVfVFJVRSh3aW4sIE5TX0VSUk9SX05PVF9BVkFJ
TEFCTEUpOwogCiAgICAgICAgICAgICBuc0RlcGVuZGVudFN0cmluZyBuYW1lKGFXaW5kb3dUYXJn
ZXQpOwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiBuZXdXaW47CiAgICAgICAg
ICAgICBydiA9IHdpbi0+T3BlbihFbXB0eVN0cmluZygpLCAvLyBVUkwgdG8gbG9hZAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSwgICAgICAgICAgLy8gd2luZG93IG5hbWUKQEAgLTkw
NjEsMTggKzkxNDcsMzEgQEAgbnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVSSSAqIGFVUkksCiAg
ICAgICAgIH0KICAgICAgICAgLy8gU2V0IHRoZSByZWZlcnJlciBleHBsaWNpdGx5CiAgICAgICAg
IGlmIChhUmVmZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJlcikgewogICAgICAgICAgICAgLy8gUmVm
ZXJyZXIgaXMgY3VycmVubHkgb25seSBzZXQgZm9yIGxpbmsgY2xpY2tzIGhlcmUuCiAgICAgICAg
ICAgICBodHRwQ2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJlZmVycmVyVVJJKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWwoZG9fUXVl
cnlJbnRlcmZhY2UoYU93bmVyKSk7Ci0gICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93
bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlKTsKKyAgICBuc0NPTVB0cjxu
c0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFsOworCisgICAgLy8gSWYgdGhlIGNvbnRlbnQgYmVp
bmcgbG9hZGVkIHNob3VsZCBiZSBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9yaWdpbgorICAg
IC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG51bGwgcHJpbmNpcGFsIGhlcmUsIGFuZCB0aGVu
IHRlbGwKKyAgICAvLyBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIgdG8gZm9yY2Ug
aXQgdG8gYmUgc2V0IGFzIHRoZQorICAgIC8vIGNoYW5uZWwgb3duZXIuCisgICAgaWYgKG1TYW5k
Ym94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSB7CisgICAgICAgIG93bmVyUHJpbmNpcGFsID0g
ZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9udWxscHJpbmNpcGFsOzEiKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBOb3Qgc2FuZGJveGVkIC0gd2UgYWxsb3cgdGhlIGNvbnRlbnQg
dG8gYXNzdW1lIGl0cyBuYXR1cmFsIG93bmVyLgorICAgICAgICBvd25lclByaW5jaXBhbCA9IGRv
X1F1ZXJ5SW50ZXJmYWNlKGFPd25lcik7CisgICAgfQorCisgICAgbnNDb250ZW50VXRpbHM6OlNl
dFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVNhbmRib3hGbGFncyAmIFNBTkRC
T1hFRF9PUklHSU4pKTsKIAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENoYW5uZWw+IHNjcmlwdENo
YW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShjaGFubmVsKTsKICAgICBpZiAoc2NyaXB0Q2hhbm5l
bCkgewogICAgICAgICAvLyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBvdXIgY29udGV4dCBpZiB0
aGUgcHJpbmNpcGFscyBtYXRjaAogICAgICAgICBzY3JpcHRDaGFubmVsLT4KICAgICAgICAgICAg
IFNldEV4ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05PUk1BTCk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaCBiL2RvY3NoZWxs
L2Jhc2UvbnNEb2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCisrKyBi
L2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03NTUsMTYgKzc1NSwxOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgLy8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBpcyBub3QgZXhwZWN0ZWQg
dG8gY2hhbmdlLgogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1JdGVtVHlwZTsKIAog
ICAgIC8vIEluZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwgaW5kaWNhdGluZyB0aGUg
cHJldmlvdXMgYW5kIGN1cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBhdCB0aGUgdGltZSB0aGF0
IHRoaXMgRG9jU2hlbGwgYmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMyICAgICAgICAgICAgICAg
ICAgICBtUHJldmlvdXNUcmFuc0luZGV4OwogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAg
IG1Mb2FkZWRUcmFuc0luZGV4OwogCisgICAgUFJVaW50MzIgICAgICAgICAgICAgICAgICAgbVNh
bmRib3hGbGFnczsKKwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1DcmVhdGVkOwog
ICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1N1YmZyYW1lczsKICAgICBib29s
ICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dQbHVnaW5zOwogICAgIGJvb2wgICAgICAgICAg
ICAgICAgICAgICAgIG1BbGxvd0phdmFzY3JpcHQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAg
ICAgICAgbUFsbG93TWV0YVJlZGlyZWN0czsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAg
ICBtQWxsb3dJbWFnZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93RE5T
UHJlZmV0Y2g7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93V2luZG93Q29u
dHJvbDsKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsIGIvZG9jc2hl
bGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5p
ZGwKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAgLTM0LDE3ICszNCwxNyBA
QCBpbnRlcmZhY2UgbnNJU0hFbnRyeTsKIGludGVyZmFjZSBuc0lMYXlvdXRIaXN0b3J5U3RhdGU7
CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJvd3NlclVJOwogaW50ZXJmYWNlIG5zSURPTVN0b3JhZ2U7
CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsOwogaW50ZXJmYWNlIG5zSVdlYkJyb3dzZXJQcmludDsK
IGludGVyZmFjZSBuc0lWYXJpYW50OwogaW50ZXJmYWNlIG5zSVByaXZhY3lUcmFuc2l0aW9uT2Jz
ZXJ2ZXI7CiAKLVtzY3JpcHRhYmxlLCB1dWlkKDZmNjBhYzk2LWZhMmMtNDFhNS05MmI0LTI5YWFh
ZGJkN2E3YildCitbc2NyaXB0YWJsZSwgdXVpZCg5YjI4MzMzNy0wOTdkLTRmYTgtYTJkYS05MTYz
MThlYWY4MjgpXQogaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKIHsKICAgLyoq
CiAgICAqIExvYWRzIGEgZ2l2ZW4gVVJJLiAgVGhpcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gbG9h
ZGluZyB0aGUgcmVxdWVzdGVkIFVSSQogICAgKiBpbiB0aGUgb2JqZWN0IGltcGxlbWVudGluZwl0
aGlzIGludGVyZmFjZS4gIElmIGl0IGNhbid0IGJlIGxvYWRlZCBoZXJlCiAgICAqIGhvd2V2ZXIs
IHRoZSBVUkwgZGlzcGF0Y2hlciB3aWxsIGdvIHRocm91Z2ggaXRzIG5vcm1hbCBwcm9jZXNzIG9m
IGNvbnRlbnQKICAgICogbG9hZGluZy4KICAgICoKQEAgLTU4OCw5ICs1ODgsMjMgQEAgaW50ZXJm
YWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKICAgICovCiAgIGF0dHJpYnV0ZSBib29sIGlz
QnJvd3NlckZyYW1lOwogCiAgIC8qCiAgICAqIElzIHRoaXMgZG9jc2hlbGwgY29udGFpbmVkIGlu
IGFuIDxpZnJhbWUgbW96YnJvd3Nlcj4sIGVpdGhlciBkaXJlY3RseSBvcgogICAgKiBpbmRpcmVj
dGx5PwogICAgKi8KICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgY29udGFpbmVkSW5Ccm93c2Vy
RnJhbWU7CisKKyAgLyoqCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2NzaGVsbC4g
VGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlIG9m
IHRoZSBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYKKyAg
ICogZXhpc3RlbnQuIFNlZSB0aGUgSFRNTDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBU
aGVzZSBmbGFncyBvbiB0aGUgZG9jc2hlbGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0
aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuIFRoZXkgYXJl
IG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcgbmV3CisgICAqIGNvbnRlbnQsIHNhbmRib3ggZmxhZ3Mg
YXJlIGFsc28gaW1tdXRhYmx5IHNldCBvbiB0aGUgZG9jdW1lbnQgd2hlbiBpdCBpcworICAgKiBs
b2FkZWQuCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRo
ZSBzYW5kYm94IGZsYWdzIG9uIGl0cworICAgKiBkb2NzaGVsbCBhbmQgb2YgaXRzIHBhcmVudCBk
b2N1bWVudCwgaWYgYW55LgorICAgKiBTZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBvc3Np
YmxlIGZsYWdzLgorICAgKi8KKyAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdz
OwogfTsKZGlmZiAtLWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNl
L25zR2xvYmFsV2luZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysr
IGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCkBAIC0yMTMsMTYgKzIxMywxNyBAQAogI2lu
Y2x1ZGUgIm5zUmVmcmVzaERyaXZlci5oIgogI2luY2x1ZGUgIm1vekF1dG9Eb2NVcGRhdGUuaCIK
IAogI2luY2x1ZGUgIm1vemlsbGEvVGVsZW1ldHJ5LmgiCiAjaW5jbHVkZSAibnNMb2NhdGlvbi5o
IgogI2luY2x1ZGUgIm5zV3JhcHBlckNhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIm5zRE9NRXZl
bnRUYXJnZXRIZWxwZXIuaCIKICNpbmNsdWRlICJuc0lBcHBzU2VydmljZS5oIgorI2luY2x1ZGUg
Im5zU2FuZGJveEZsYWdzLmgiCiAKICNpZmRlZiBBTkRST0lECiAjaW5jbHVkZSA8YW5kcm9pZC9s
b2cuaD4KICNlbmRpZgogCiAjaWZkZWYgUFJfTE9HR0lORwogc3RhdGljIFBSTG9nTW9kdWxlSW5m
byogZ0RPTUxlYWtQUkxvZzsKICNlbmRpZgpAQCAtODEzNSwxNiArODEzNiwyMiBAQCBuc0dsb2Jh
bFdpbmRvdzo6R2V0U2Vzc2lvblN0b3JhZ2UobnNJRE9NCiAgIGlmICghbVNlc3Npb25TdG9yYWdl
KSB7CiAgICAgKmFTZXNzaW9uU3RvcmFnZSA9IG5zbnVsbDsKIAogICAgIG5zU3RyaW5nIGRvY3Vt
ZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAgICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1l
bnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAorICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMg
dGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAgICAvLyBkb24ndCBhbGxvdyBhY2Nlc3Mg
dG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9jICYmIChtRG9jLT5TYW5kYm94RmxhZ3MoKSAm
IFNBTkRCT1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZ
X0VSUjsKKyAgICB9CisKICAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTZXNzaW9uU3Rv
cmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0
ZXJfQWRkUmVmcyhtU2Vzc2lvblN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwg
cnYpOwogCiAjaWZkZWYgUFJfTE9HR0lORwogICAgIGlmIChQUl9MT0dfVEVTVChnRE9NTGVha1BS
TG9nLCBQUl9MT0dfREVCVUcpKSB7CkBAIC04MjAwLDE2ICs4MjA3LDIyIEBAIG5zR2xvYmFsV2lu
ZG93OjpHZXRMb2NhbFN0b3JhZ2UobnNJRE9NU3QKICAgICAgIGRvX0dldFNlcnZpY2UoIkBtb3pp
bGxhLm9yZy9kb20vc3RvcmFnZW1hbmFnZXI7MSIsICZydik7CiAgICAgTlNfRU5TVVJFX1NVQ0NF
U1MocnYsIHJ2KTsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1l
bnQpIHsKICAgICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAg
IH0KIAorICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxh
ZyBzZXQKKyAgICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlm
IChtRG9jICYmIChtRG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9PUklHSU4pKSB7Cisg
ICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBuc0lE
b2NTaGVsbCogZG9jU2hlbGwgPSBHZXREb2NTaGVsbCgpOwogICAgIG5zQ09NUHRyPG5zSUxvYWRD
b250ZXh0PiBsb2FkQ29udGV4dCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGRvY1NoZWxsKTsKIAogICAg
IHJ2ID0gc3RvcmFnZU1hbmFnZXItPkdldExvY2FsU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lw
YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvY3VtZW50VVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2FkQ29udGV4dCAmJiBsb2FkQ29udGV4dC0+VXNlUHJpdmF0ZUJyb3dzaW5n
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldHRlcl9BZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhy
diwgcnYpOwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZyYW1l
RWxlbWVudC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50
LmlkbAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50Lmlk
bAorKysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbApA
QCAtMTEsMzIgKzExLDMyIEBACiAgKgogICogVGhpcyBpbnRlcmZhY2UgaXMgdHJ5aW5nIHRvIGZv
bGxvdyB0aGUgRE9NIExldmVsIDIgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53
My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC8KICAqCiAgKiB3aXRoIGNoYW5nZXMgZnJvbSB0aGUg
d29yay1pbi1wcm9ncmVzcyBXSEFUV0cgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3
dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8KICAqLwogCi1bc2NyaXB0
YWJsZSwgdXVpZCg5N0U0RjBFMS1CRDI3LTQwRUMtOTI4Ny01NjM0REFGMTVCNzMpXQorW3Njcmlw
dGFibGUsIHV1aWQoNTJmNjI0NGItYjFmNS00ZjRjLThmZjMtN2UxNDYzMTZmNDExKV0KIGludGVy
ZmFjZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCA6IG5zSURPTUhUTUxFbGVtZW50CiB7CiAgICAg
ICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGFsaWduOwogICAgICAgICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nICAgICAgICBmcmFtZUJvcmRlcjsKICAgICAgICAgICAgYXR0cmlidXRl
IERPTVN0cmluZyAgICAgICAgaGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5n
ICAgICAgICBsb25nRGVzYzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAg
bWFyZ2luSGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJn
aW5XaWR0aDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFtZTsKICAg
ICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc2Nyb2xsaW5nOwogICAgICAgICAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzcmM7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmcgICAgICAgIHdpZHRoOwogICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgog
ICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRG9jdW1lbnQgICBjb250ZW50RG9jdW1lbnQ7CiAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01XaW5kb3cgICAgIGNvbnRlbnRXaW5kb3c7CiAKLQor
ICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzYW5kYm94OwogICAvLyBNb3pp
bGxhIGV4dGVuc2lvbnMKICAgLy8gaWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1vekFsbG93
RnVsbFNjcmVlbiBhdHRyaWJ1dGUgdG8gYmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3JlIHRvIGFs
bG93IGNvbnRlbnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxsLXNjcmVl
bgogICAvLyBtb2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBocD90aXRs
ZT1HZWNrbzpGdWxsU2NyZWVuQVBJCiAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAg
ICAgIG1vekFsbG93RnVsbFNjcmVlbjsKIH07CmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL01h
a2VmaWxlLmluIGIvZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbgotLS0gYS9kb20vc3JjL2pzdXJs
L01ha2VmaWxlLmluCisrKyBiL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KQEAgLTI1LDE2ICsy
NSwxNyBAQCBYUElETFNSQ1MJPSBcCiBDUFBTUkNTCQk9IG5zSlNQcm90b2NvbEhhbmRsZXIuY3Bw
CiAKIEVYUE9SVFMJCT0gJChzcmNkaXIpL25zSlNQcm90b2NvbEhhbmRsZXIuaAogCiBMT0NBTF9J
TkNMVURFUyArPSBcCiAJCS1JJChzcmNkaXIpIFwKIAkJLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2Ug
XAogCQktSSQodG9wc3JjZGlyKS9uZXR3ZXJrL2Jhc2Uvc3JjIFwKKwkJLUkkKHRvcHNyY2Rpcikv
Y29udGVudC9iYXNlL3NyYyBcCiAKIGlmZGVmIEJVSUxEX0RFQlVHX0dDCiBERUZJTkVTCQkrPSAt
RERFQlVHX0dDCiBlbmRpZgogCiBESVJTICAgICAgICAgICAgPSAkKE5VTEwpCiBURVNUX0RJUlMg
Kz0gdGVzdAogCmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIu
Y3BwIGIvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcAotLS0gYS9kb20vc3Jj
L2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwCisrKyBiL2RvbS9zcmMvanN1cmwvbnNKU1By
b3RvY29sSGFuZGxlci5jcHAKQEAgLTQwLDE2ICs0MCwxNyBAQAogI2luY2x1ZGUgIm5zVGhyZWFk
VXRpbHMuaCIKICNpbmNsdWRlICJuc0lKU0NvbnRleHRTdGFjay5oIgogI2luY2x1ZGUgIm5zSVNj
cmlwdENoYW5uZWwuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgogI2luY2x1ZGUgIm5zSU9i
amVjdElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0T3V0cHV0U3RyZWFtLmgiCiAj
aW5jbHVkZSAibnNJV3JpdGFibGVQcm9wZXJ0eUJhZzIuaCIKICNpbmNsdWRlICJuc0lDb250ZW50
U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBzdGF0aWMg
TlNfREVGSU5FX0NJRChrSlNVUklDSUQsIE5TX0pTVVJJX0NJRCk7CiAKIGNsYXNzIG5zSlNUaHVu
ayA6IHB1YmxpYyBuc0lJbnB1dFN0cmVhbQogewogcHVibGljOgogICAgIG5zSlNUaHVuaygpOwog
CkBAIC0xODYsMTYgKzE4NywyMyBAQCBuc3Jlc3VsdCBuc0pTVGh1bms6OkV2YWx1YXRlU2NyaXB0
KG5zSUNoCiAgICAgLy8gR2V0IHRoZSBnbG9iYWwgb2JqZWN0IHdlIHNob3VsZCBiZSBydW5uaW5n
IG9uLgogICAgIG5zSVNjcmlwdEdsb2JhbE9iamVjdCogZ2xvYmFsID0gR2V0R2xvYmFsT2JqZWN0
KGFDaGFubmVsKTsKICAgICBpZiAoIWdsb2JhbCkgewogICAgICAgICByZXR1cm4gTlNfRVJST1Jf
RkFJTFVSRTsKICAgICB9CiAKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW4oZG9fUXVl
cnlJbnRlcmZhY2UoZ2xvYmFsKSk7CiAKKyAgICAvLyBTYW5kYm94ZWQgZG9jdW1lbnQgY2hlY2s6
IGphdmFzY3JpcHQ6IFVSSSdzIGFyZSBkaXNhYmxlZAorICAgIC8vIGluIGEgc2FuZGJveGVkIGRv
Y3VtZW50IHVubGVzcyAnYWxsb3ctc2NyaXB0cycgd2FzIHNwZWNpZmllZC4KKyAgICBuc0NPTVB0
cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoYU9yaWdpbmFsSW5uZXJXaW5k
b3ctPkdldEV4dGFudERvY3VtZW50KCkpOworICAgIGlmIChkb2MgJiYgKGRvYy0+U2FuZGJveEZs
YWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01f
UkVUVkFMX1VOREVGSU5FRDsKKyAgICB9CisKICAgICAvLyBQdXNoIG91ciBwb3B1cCBjb250cm9s
IHN0YXRlCiAgICAgbnNBdXRvUG9wdXBTdGF0ZVB1c2hlciBwb3B1cFN0YXRlUHVzaGVyKHdpbiwg
YVBvcHVwU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgdGhlIHNhbWUg
aW5uZXIgd2luZG93IGFzIHdlIHVzZWQgdG8uCiAgICAgbnNQSURPTVdpbmRvdyAqaW5uZXJXaW4g
PSB3aW4tPkdldEN1cnJlbnRJbm5lcldpbmRvdygpOwogCiAgICAgaWYgKGlubmVyV2luICE9IGFP
cmlnaW5hbElubmVyV2luZG93KSB7CiAgICAgICAgIHJldHVybiBOU19FUlJPUl9VTkVYUEVDVEVE
OwpkaWZmIC0tZ2l0IGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFr
ZWZpbGUuaW4gYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmls
ZS5pbgotLS0gYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmls
ZS5pbgorKysgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmls
ZS5pbgpAQCAtMjQsMTEgKzI0LDEyIEBAIENQUFNSQ1MJCSs9IG5zRGlhbG9nUGFyYW1CbG9jay5j
cHAgXAogCQkgICAkKE5VTEwpCiBlbmRpZgogCiAjIHdlIGRvbid0IHdhbnQgdGhlIHNoYXJlZCBs
aWIsIGJ1dCB3ZSB3YW50IHRvIGZvcmNlIHRoZSBjcmVhdGlvbiBvZiBhCiAjIHN0YXRpYyBsaWIu
CiBGT1JDRV9TVEFUSUNfTElCID0gMQogCiAjIEZvciBuc0pTVXRpbHMKLUxPQ0FMX0lOQ0xVREVT
ICs9IC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlCitMT0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3Jj
ZGlyKS9kb20vYmFzZSBcCisJCSAgLUkkKHRvcHNyY2RpcikvY29udGVudC9iYXNlL3NyYyBcCiAK
IGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawpkaWZmIC0tZ2l0IGEvZW1iZWRk
aW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcCBiL2Vt
YmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAK
LS0tIGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRj
aGVyLmNwcAorKysgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dp
bmRvd1dhdGNoZXIuY3BwCkBAIC01MywxNiArNTMsMTcgQEAKICNpbmNsdWRlICJuc1BJRE9NU3Rv
cmFnZS5oIgogI2luY2x1ZGUgIm5zSVdpZGdldC5oIgogI2luY2x1ZGUgIm5zRm9jdXNNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAibnNJUHJlc1NoZWxsLmgiCiAjaW5jbHVkZSAibnNQcmVzQ29udGV4dC5o
IgogI2luY2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCiAjaW5jbHVkZSAibnNJUHJlZkJyYW5jaC5o
IgogI2luY2x1ZGUgIm5zSVByZWZTZXJ2aWNlLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3Mu
aCIKIAogI2lmZGVmIFVTRVdFQUtSRUZTCiAjaW5jbHVkZSAibnNJV2Vha1JlZmVyZW5jZS5oIgog
I2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogCiBzdGF0aWMgY29uc3QgY2hhciAq
c0pTU3RhY2tDb250cmFjdElEPSJAbW96aWxsYS5vcmcvanMveHBjL0NvbnRleHRTdGFjazsxIjsK
QEAgLTU3MCwxNiArNTcxLDMzIEBAIG5zV2luZG93V2F0Y2hlcjo6T3BlbldpbmRvd0pTSW50ZXJu
YWwobnMKICAgfQogCiAgIGlmICghbmV3RG9jU2hlbGxJdGVtKSB7CiAgICAgLy8gV2UncmUgZ29p
bmcgdG8gZWl0aGVyIG9wZW4gdXAgYSBuZXcgd2luZG93IG91cnNlbHZlcyBvciBhc2sgYQogICAg
IC8vIG5zSVdpbmRvd1Byb3ZpZGVyIGZvciBvbmUuICBJbiBlaXRoZXIgY2FzZSwgd2UnbGwgd2Fu
dCB0byBzZXQgdGhlIHJpZ2h0CiAgICAgLy8gbmFtZSBvbiBpdC4KICAgICB3aW5kb3dOZWVkc05h
bWUgPSB0cnVlOwogCisgICAgLy8gSWYgdGhlIHBhcmVudCB0cnlpbmcgdG8gb3BlbiBhIG5ldyB3
aW5kb3cgaXMgc2FuZGJveGVkLAorICAgIC8vIHRoaXMgaXMgbm90IGFsbG93ZWQgYW5kIHdlIGZh
aWwgaGVyZS4KKyAgICBpZiAoYVBhcmVudCkgeworICAgICAgbnNDT01QdHI8bnNJRE9NRG9jdW1l
bnQ+IGRvbWRvYzsKKyAgICAgIGFQYXJlbnQtPkdldERvY3VtZW50KGdldHRlcl9BZGRSZWZzKGRv
bWRvYykpOworICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJm
YWNlKGRvbWRvYyk7CisKKyAgICAgIGlmIChkb2MpIHsKKyAgICAgICAgUFJVaW50MzIgc2FuZGJv
eEZsYWdzID0gMDsKKyAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsK
KworICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAg
ICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH0KKwogICAgIC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHBy
b3ZpZGVyIGZvciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3Blbmlu
ZyBhIGRpYWxvZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8v
IGlmIHdlJ3JlIG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNo
cm9tZSBmbGFncyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVX
aW4gPSBkb19RdWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNo
cm9tZVdpbiAmJgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6
OkNIUk9NRV9NT0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJC
cm93c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>
<flag name="review"
          id="526030"
          type_id="937"
          status="-"
          setter="smaug"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>634584</attachid>
            <date>2012-06-19 14:12:36 -0700</date>
            <delta_ts>2012-07-02 17:03:11 -0700</delta_ts>
            <desc>iframe sandbox v18</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>51598</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZDI5YWY3MDhlYzNjOGQyNmJiNWJjYzk1YzUx
ZTI1YjEzZjc5ODA3MgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgx
NiwxNiArODE2LDI2IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYgYVNhbmRi
b3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVu
KSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAgICogcHJvcGVydGllcyBm
aWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5zcmVzdWx0IEZvcm1hdExv
Y2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQYXJhbXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVBhcmFtc0xlbmd0aCwK
QEAgLTE5MzUsNDIgKzE5NDUsNDQgQEAgcHVibGljOgogICAgKiBmcm9tIHRoZSBkb2N1bWVudCBp
dCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAKICAgLyoqCiAgICAqIFNl
dCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUgZ2l2ZW4gY2hhbm5lbCwg
aWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2YgYUNoYW5uZWwuICBhUHJp
bmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJvdXRCbGFuayBpcyB0cnVl
LCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBpdC4gSWYgYUZvcmNlT3du
ZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9uIHRoZSBjaGFubmVsLCBl
dmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAgICogZnJvbSB0aGUgY2hh
bm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRoZSBwcmluY2lwYWwgd2Fz
IHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwuCiAgICAqLwogICBzdGF0
aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIgPSBmYWxzZSk7CiAK
ICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNlNjRTdHJpbmcpOwogCiAg
IHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFzY2lpU3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhKTsKIAogICAvKiogSWYg
YUpTQXJyYXkgaXMgYSBKYXZhc2NyaXB0IGFycmF5LCB0aGlzIG1ldGhvZCBpdGVyYXRlcyBvdmVy
IGl0cwogICAgKiAgZWxlbWVudHMgYW5kIGFwcGVuZHMgdmFsdWVzIHRvIGFSZXRWYWwgYXMgbnNJ
QXRvbXMuCiAgICAqICBAdGhyb3cgTlNfRVJST1JfSUxMRUdBTF9WQUxVRSBpZiBhSlNBcnJheSBp
c24ndCBhIEpTIGFycmF5LgogICAgKi8gCiAgIHN0YXRpYyBuc3Jlc3VsdCBKU0FycmF5VG9BdG9t
QXJyYXkoSlNDb250ZXh0KiBhQ3gsIGNvbnN0IEpTOjpWYWx1ZSYgYUpTQXJyYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01BcnJheTxuc0lBdG9tPiYgYVJldFZh
bCk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBwYXNz
ZWQgaW4gcGFyYW1ldGVyIGhhcyB0aGUgYXV0b2NvbXBsZXRlCi0gICAqIGZ1bmN0aW9ubmFsaXR5
IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIuCisgICAq
IGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9y
bSBvd25lci4KICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFrZSBzdXJlIGF1dG9jb21w
bGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0eXBlLgogICAgKgogICAg
KiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNrLiBOT1RFOiBhSW5wdXQg
Y2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IGhh
cyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBib29sIElzQXV0b2NvbXBs
ZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQpOwogCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGlj
L25zSURvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisr
KyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaApAQCAtODcsMTggKzg3LDE4IEBA
IGNsYXNzIExvYWRlcjsKIAogbmFtZXNwYWNlIGRvbSB7CiBjbGFzcyBMaW5rOwogY2xhc3MgRWxl
bWVudDsKIH0gLy8gbmFtZXNwYWNlIGRvbQogfSAvLyBuYW1lc3BhY2UgbW96aWxsYQogCiAjZGVm
aW5lIE5TX0lET0NVTUVOVF9JSUQgXAoteyAweDhjNmExZTYyLCAweGQ1YWQsIDB4NDI5NywgXAot
ICB7IDB4YjksIDB4NDEsIDB4NjQsIDB4NDksIDB4MjIsIDB4MmUsIDB4YzQsIDB4ZjAgfSB9Cit7
IDB4NTdmZTQ0YWUsIDB4NjY1NiwgMHg0NGI4LCBcCisgIHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhh
NywgMHg0MywgMHgyOCwgMHhiZSwgMHg4NiB9IH0KIAogLy8gRmxhZyBmb3IgQWRkU3R5bGVTaGVl
dCgpLgogI2RlZmluZSBOU19TVFlMRVNIRUVUX0ZST01fQ0FUQUxPRyAgICAgICAgICAgICAgICAo
MSA8PCAwKQogCiAvLyBFbnVtIGZvciByZXF1ZXN0aW5nIGEgcGFydGljdWxhciB0eXBlIG9mIGRv
Y3VtZW50IHdoZW4gY3JlYXRpbmcgYSBkb2MKIGVudW0gRG9jdW1lbnRGbGF2b3IgewogICBEb2N1
bWVudEZsYXZvckxlZ2FjeUd1ZXNzLCAvLyBjb21wYXQgd2l0aCBvbGQgY29kZSB1bnRpbCBtYWRl
IEhUTUw1LWNvbXBsaWFudAogICBEb2N1bWVudEZsYXZvckhUTUwsIC8vIEhUTUxEb2N1bWVudCB3
aXRoIEhUTUxuZXNzIGJpdCBzZXQgdG8gdHJ1ZQpAQCAtNDI2LDE3ICs0MjYsMjYgQEAgcHVibGlj
OgogICAgKiBjYWxsZXJzIGFyZSBleHBlY3RlZCB0byB0YWtlIGFjdGlvbiBhcyBuZWVkZWQgaWYg
dGhleSB3YW50IHRoaXMKICAgICogY2hhbmdlIHRvIGFjdHVhbGx5IGNoYW5nZSBhbnl0aGluZyBp
bW1lZGlhdGVseS4KICAgICogQHNlZSBuc0JpZGlVdGlscy5oCiAgICAqLwogICB2b2lkIFNldEJp
ZGlPcHRpb25zKFBSVWludDMyIGFCaWRpT3B0aW9ucykKICAgewogICAgIG1CaWRpT3B0aW9ucyA9
IGFCaWRpT3B0aW9uczsKICAgfQotICAKKworICAvKioKKyAgICogR2V0IHRoZSBzYW5kYm94IGZs
YWdzIGZvciB0aGlzIGRvY3VtZW50LgorICAgKiBAc2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRo
ZSBwb3NzaWJsZSBmbGFncworICAgKi8KKyAgUFJVaW50MzIgU2FuZGJveEZsYWdzKCkgY29uc3QK
KyAgeworICAgIHJldHVybiBtU2FuZGJveEZsYWdzOworICB9CisKICAgLyoqCiAgICAqIEFjY2Vz
cyBIVFRQIGhlYWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAg
KiBzb3VyY2VzLCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCiAgIHZpcnR1YWwgdm9pZCBH
ZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFIZWFkZXJGaWVsZCwgbnNBU3RyaW5nJiBhRGF0YSkgY29u
c3QgPSAwOwogICB2aXJ0dWFsIHZvaWQgU2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhaGVhZGVyRmll
bGQsIGNvbnN0IG5zQVN0cmluZyYgYURhdGEpID0gMDsKIAogICAvKioKQEAgLTE4NDcsMTYgKzE4
NTYsMjEgQEAgcHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1bWVudCBpcyB0cnVlLCBt
T3JpZ2luYWxEb2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAgIC8vIGRvY3VtZW50Lgog
ICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7CiAKICAgLy8gVGhlIGJp
ZGkgb3B0aW9ucyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBiaXRmaWVsZCBtZWFucyBp
cwogICAvLyBkZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50MzIgbUJpZGlPcHRpb25z
OwogCisgIC8vIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVudC4gVGhlc2UgcmVmbGVj
dCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRoZQorICAvLyBhc3NvY2lh
dGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3RlbnQuIFRoZXNl
IGFyZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRhYmxlIC0gc2VlIG5zU2Fu
ZGJveEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgUFJVaW50MzIgbVNhbmRib3hG
bGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0
cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhlIGRvY3VtZW50J3Mgc2Vj
dXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZm
IC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAgYi9jb250ZW50L2Jh
c2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVu
dFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcApAQCAt
MTc2LDE2ICsxNzYsMTcgQEAgc3RhdGljIE5TX0RFRklORV9DSUQoa1hURlNlcnZpY2VDSUQsIE5T
XwogCiAjaW5jbHVkZSAibnNXcmFwcGVyQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAibnNJRE9N
RG9jdW1lbnRUeXBlLmgiCiAjaW5jbHVkZSAibnNDaGFyU2VwYXJhdGVkVG9rZW5pemVyLmgiCiAK
ICNpbmNsdWRlICJuc0lDaGFyc2V0RGV0ZWN0b3IuaCIKICNpbmNsdWRlICJuc0lDaGFyc2V0RGV0
ZWN0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJuc0lQbGF0Zm9ybUNoYXJzZXQuaCIKKyNpbmNs
dWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBleHRlcm4gIkMiIGludCBNT1pfWE1MVHJhbnNsYXRl
RW50aXR5KGNvbnN0IGNoYXIqIHB0ciwgY29uc3QgY2hhciogZW5kLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogbmV4dCwgUFJVbmljaGFyKiByZXN1
bHQpOwogZXh0ZXJuICJDIiBpbnQgTU9aX1hNTENoZWNrUU5hbWUoY29uc3QgY2hhciogcHRyLCBj
b25zdCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnNf
YXdhcmUsIGNvbnN0IGNoYXIqKiBjb2xvbik7CiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpk
b207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwpAQCAtODgyLDE2ICs4ODMsNjIg
QEAgbnNDb250ZW50VXRpbHM6OkdldFBhcnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0g
Q2FsbEdldFNlcnZpY2Uoa1BhcnNlclNlcnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAg
aWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAg
IH0KICAgfQogCiAgIHJldHVybiBzUGFyc2VyU2VydmljZTsKIH0KKy8qKgorICogQSBoZWxwZXIg
ZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4g
b3IKKyAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxh
Z3MgdXNlZCBpbnRlcm5hbGx5LgorICoKKyAqIEBwYXJhbSBhQXR0cmlidXRlICAgIHRoZSB2YWx1
ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBz
ZXQgb2YgZmxhZ3MKKyAqLworUFJVaW50MzIKK25zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hB
dHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYgYVNhbmRib3hBdHRyVmFsdWUpCit7Cisg
IC8vIElmIHRoZXJlJ3MgYSBzYW5kYm94IGF0dHJpYnV0ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBp
ZiB0aGlzIGlzIGJlaW5nCisgIC8vIGNhbGxlZCksIHN0YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0
aGUgcmVzdHJpY3Rpb24gZmxhZ3MuCisgIFBSVWludDMyIG91dCA9IFNBTkRCT1hFRF9OQVZJR0FU
SU9OIHwKKyAgICAgICAgICAgICAgICAgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gfAor
ICAgICAgICAgICAgICAgICBTQU5EQk9YRURfUExVR0lOUyB8CisgICAgICAgICAgICAgICAgIFNB
TkRCT1hFRF9PUklHSU4gfAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURfRk9STVMgfAorICAg
ICAgICAgICAgICAgICBTQU5EQk9YRURfU0NSSVBUUyB8CisgICAgICAgICAgICAgICAgIFNBTkRC
T1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisKKyAgaWYgKCFhU2FuZGJveEF0dHJWYWx1ZS5Jc0Vt
cHR5KCkpIHsKKyAgICAvLyBUaGUgc2VwYXJhdG9yIG9wdGlvbmFsIGZsYWcgaXMgdXNlZCBiZWNh
dXNlIHRoZSBIVE1MNSBzcGVjIHNheXMgYW55CisgICAgLy8gd2hpdGVzcGFjZSBpcyBvayBhcyBh
IHNlcGFyYXRvciwgd2hpY2ggaXMgd2hhdCB0aGlzIGRvZXMuCisgICAgSFRNTFNwbGl0T25TcGFj
ZXNUb2tlbml6ZXIgdG9rZW5pemVyKGFTYW5kYm94QXR0clZhbHVlLCAnICcsCisgICAgICBuc0No
YXJTZXBhcmF0ZWRUb2tlbml6ZXJUZW1wbGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hpdGVz
cGFjZT46OlNFUEFSQVRPUl9PUFRJT05BTCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVyLmhhc01v
cmVUb2tlbnMoKSkgeworICAgICAgbnNEZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0b2tlbml6
ZXIubmV4dFRva2VuKCk7CisKKyAgICAgIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFs
KCJhbGxvdy1zYW1lLW9yaWdpbiIpKSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX09SSUdJ
TjsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ct
Zm9ybXMiKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9GT1JNUzsKKyAgICAgIH0gZWxz
ZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7Cisg
ICAgICAgIC8vIGFsbG93LXNjcmlwdHMgcmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRTIGFu
ZAorICAgICAgICAvLyBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBvdXQg
Jj0gflNBTkRCT1hFRF9TQ1JJUFRTOworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9BVVRPTUFU
SUNfRkVBVFVSRVM7CisgICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVy
YWwoImFsbG93LXRvcC1uYXZpZ2F0aW9uIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURf
VE9QTEVWRUxfTkFWSUdBVElPTjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb3V0
OworfQogCiAjaWZkZWYgTU9aX1hURgogbnNJWFRGU2VydmljZSoKIG5zQ29udGVudFV0aWxzOjpH
ZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFzWFRGU2VydmljZSkgewogICAgIG5zcmVzdWx0IHJ2
ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZzWFRGU2VydmljZSk7CiAgICAgaWYg
KE5TX0ZBSUxFRChydikpIHsKQEAgLTY1MzgsMTcgKzY1ODUsMTggQEAgbnNDb250ZW50VXRpbHM6
OlVSSUluaGVyaXRzU2VjdXJpdHlDb250ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
UmVzdWx0KTsKIH0KIAogLy8gc3RhdGljCiBib29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFu
bmVsT3duZXIobnNJUHJpbmNpcGFsKiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFGb3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQg
dGhlIG93bmVyIG9mIHRoZSBjaGFubmVsLCBidXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4n
dAogICAvLyBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBY
WFg6IEl0IHNlZW1zIHdyb25nIHRoYXQgdGhlIG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9u
ZSBpcwogICAvLyAgICAgIHN1cHBsaWVkKSB1bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9y
IGRhdGEgb3IgYWJvdXQ6YmxhbmsuCiAgIC8vIFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQs
IGNoZWNrIGFsbCBjYWxsZXJzIGZvciB3aGF0IG93bmVycwpAQCAtNjU1NiwyMyArNjYwNCwzNSBA
QCBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29t
bWVudHMgaW4gbnNEb2NTaGVsbDo6TG9hZFVSSSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8g
ICAgICBpbmhlcml0aW5nIHRoZSBvd25lciBpZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdv
dWxkIGJlCiAgIC8vICAgICAgdmVyeSB3cm9uZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGlu
ZyBidXQgY2hhbm5lbHMgdGhhdAogICAvLyAgICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNl
Y3VyaXR5IGNvbnRleHQhCiAgIC8vCiAgIC8vICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBz
ZXQgdGhlIG93bmVyIHdoZW4gdGhleSBhcmUgY3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5n
IGEgTlVMTCBvd25lciB3b3VsZCBiZSBiYWQhKQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBp
cyB0cnVlLCB0aGUgb3duZXIgd2lsbCBiZSBzZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0Cisg
IC8vIGNhbiBwcm92aWRlIGl0cyBvd24gc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB1c2VkIGZv
ciB0aGUgSFRNTDUgSUZSQU1FCisgIC8vIHNhbmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9y
Y2UgdGhlIGNoYW5uZWwgKGFuZCBpdHMgZG9jdW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2
ZSBhIG51bGwgcHJpbmNpcGFsLgogICBib29sIGluaGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJ
bmhlcml0c1NlY3VyaXR5Q29udGV4dCB0byByZXR1cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJv
dXQ6YmxhbmsgVVJJLCBzbyBkb24ndCBjYWxsIE5TX0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2Fs
bCBmYWlscy4KICAgLy8gVGhpcyBjb25kaXRpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBu
c0RvY1NoZWxsOjpJbnRlcm5hbExvYWQgd2hlcmUKICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRo
aW5ncyB0aGF0IHdpbGwgdXNlIHRoZSBvd25lci4KLSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhl
cml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8
fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBp
ZiAoYUZvcmNlT3duZXIgfHwgKChOU19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRl
eHQoYVVSSSwgJmluaGVyaXQpKSAmJgorICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0
QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpKSkgeworI2lmZGVmIERFQlVHCisgICAg
Ly8gQXNzZXJ0IHRoYXQgYUZvcmNlT3duZXIgaXMgb25seSBzZXQgZm9yIG51bGwgcHJpbmNpcGFs
cworICAgIGlmIChhRm9yY2VPd25lcikgeworICAgICAgbnNDT01QdHI8bnNJVVJJPiBvd25lclVS
STsKKyAgICAgIG5zcmVzdWx0IHJ2ID0gYUxvYWRpbmdQcmluY2lwYWwtPkdldFVSSShnZXR0ZXJf
QWRkUmVmcyhvd25lclVSSSkpOworICAgICAgTU9aX0FTU0VSVChOU19TVUNDRUVERUQocnYpICYm
IFNjaGVtZUlzKG93bmVyVVJJLCBOU19OVUxMUFJJTkNJUEFMX1NDSEVNRSkpOworICAgIH0KKyNl
bmRpZgogICAgIGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0
dXJuIHRydWU7CiAgIH0KIAogICAvLwogICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcKICAg
Ly8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBmaWxl
OiB0aGVuIGl0IG1heSBuZWVkCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1l
bnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2Jh
c2Uvc3JjL25zRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5j
cHAKQEAgLTIzNjksMTYgKzIzNjksMjUgQEAgbnNEb2N1bWVudDo6U3RhcnREb2N1bWVudExvYWQo
Y29uc3QgY2hhcgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgnOycsIHNlbWljb2xvbiwgZW5kKTsK
ICAgICBTZXRDb250ZW50VHlwZUludGVybmFsKFN1YnN0cmluZyhzdGFydCwgc2VtaWNvbG9uKSk7
CiAgIH0KIAogICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhhQ2hhbm5lbCk7CiAKICAgbUNoYW5u
ZWwgPSBhQ2hhbm5lbDsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlzIGJlaW5nIGxvYWRlZCBi
eSBhIGRvY3NoZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdzCisgIC8vIHRvIHRoZSBkb2N1bWVu
dC4gVGhlc2UgYXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgaGVyZS4KKyAgbnNDT01QdHI8
bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNvbnRhaW5lcik7CisK
KyAgaWYgKGRvY1NoZWxsKSB7CisgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2FuZGJv
eEZsYWdzKCZtU2FuZGJveEZsYWdzKTsKKyAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwor
ICB9CisKICAgbnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2
LCBydik7CiAKICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNEb2N1bWVudDo6SW5p
dENTUCgpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwIGIv
Y29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3Jj
L25zRnJhbWVMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5j
cHAKQEAgLTc3LDE2ICs3NywxOSBAQAogI2luY2x1ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgi
CiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIm1vemlsbGEvdW51
c2VkLmgiCiAjaW5jbHVkZSAibW96aWxsYS9kb20vRWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemls
bGEvbGF5b3V0L1JlbmRlckZyYW1lUGFyZW50LmgiCiAKICNpbmNsdWRlICJqc2FwaS5oIgogCisj
aW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdz
LmgiCisKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6
OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CiB1c2luZyBuYW1lc3BhY2Ug
bW96aWxsYTo6bGF5b3V0OwogdHlwZWRlZiBGcmFtZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7CiAK
IGNsYXNzIG5zQXN5bmNEb2NTaGVsbERlc3Ryb3llciA6IHB1YmxpYyBuc1J1bm5hYmxlCiB7CkBA
IC00MzgsMTYgKzQ0MSw0NSBAQCBuc0ZyYW1lTG9hZGVyOjpSZWFsbHlTdGFydExvYWRpbmdJbnRl
cm5hCiAgIC8vIEp1c3QgdG8gYmUgc2FmZSwgcmVjaGVjayB1cmkuCiAgIHJ2ID0gQ2hlY2tVUklM
b2FkKG1VUklUb0xvYWQpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG5zQ09N
UHRyPG5zSURvY1NoZWxsTG9hZEluZm8+IGxvYWRJbmZvOwogICBtRG9jU2hlbGwtPkNyZWF0ZUxv
YWRJbmZvKGdldHRlcl9BZGRSZWZzKGxvYWRJbmZvKSk7CiAgIE5TX0VOU1VSRV9UUlVFKGxvYWRJ
bmZvLCBOU19FUlJPUl9GQUlMVVJFKTsKIAorICAvLyBJcyB0aGlzIGFuIDxpZnJhbWU+IHdpdGgg
YSBzYW5kYm94IGF0dHJpYnV0ZSBvciBhIHBhcmVudCB3aGljaCBpcworICAvLyBzYW5kYm94ZWQg
PworICBuc0hUTUxJRnJhbWVFbGVtZW50KiBpZnJhbWUgPQorICAgIG5zSFRNTElGcmFtZUVsZW1l
bnQ6OkZyb21Db250ZW50KG1Pd25lckNvbnRlbnQpOworCisgIFBSVWludDMyIHNhbmRib3hGbGFn
cyA9IDA7CisKKyAgaWYgKGlmcmFtZSkgeworICAgIHNhbmRib3hGbGFncyA9IGlmcmFtZS0+R2V0
U2FuZGJveEZsYWdzKCk7CisKKyAgICBQUlVpbnQzMiBwYXJlbnRTYW5kYm94RmxhZ3MgPSBpZnJh
bWUtPk93bmVyRG9jKCktPlNhbmRib3hGbGFncygpOworCisgICAgaWYgKHNhbmRib3hGbGFncyB8
fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsKKyAgICAgIC8vIFRoZSBjaGlsZCBjYW4gb25seSBhZGQg
cmVzdHJpY3Rpb25zLCBub3QgcmVtb3ZlIHRoZW0uCisgICAgICBzYW5kYm94RmxhZ3MgfD0gcGFy
ZW50U2FuZGJveEZsYWdzOworCisgICAgICBtRG9jU2hlbGwtPlNldFNhbmRib3hGbGFncyhzYW5k
Ym94RmxhZ3MpOworCisgICAgICAvLyBTZXQgdXAgdGhlIGFjdHVhbCBzYW5kYm94aW5nIGZvciBw
bHVnaW5zIGFzIHNwZWNpZmllZC4KKyAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURf
UExVR0lOUykgeworICAgICAgICBtRG9jU2hlbGwtPlNldEFsbG93UGx1Z2lucyhmYWxzZSk7Cisg
ICAgICB9CisgICAgfQorICB9CisKKyAgLy8gSWYgdGhpcyBpcyBhbiA8aWZyYW1lPiBhbmQgaXQn
cyBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9yaWdpbgorICAvLyB3ZSB3aWxsIHNldCBpdCB1
cCB3aXRoIGEgbnVsbCBwcmluY2lwYWwgbGF0ZXIgaW4gbnNEb2NTaGVsbDo6RG9VUklMb2FkLgor
ICAvLyBXZSBkbyBpdCB0aGVyZSB0byBjb3JyZWN0bHkgc2FuZGJveCBjb250ZW50IHRoYXQgd2Fz
IGxvYWRlZCBpbnRvCisgIC8vIHRoZSBpZnJhbWUgdmlhIG90aGVyIG1ldGhvZHMgdGhhbiB0aGUg
c3JjIGF0dHJpYnV0ZS4KICAgLy8gV2UnbGwgdXNlIG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9m
IHRoZSBkb2N1bWVudCBsb2FkZWQgaW5zaWRlIHVzLiAgVGhpcwogICAvLyBpcyB2ZXJ5IGltcG9y
dGFudDsgbmVlZGVkIHRvIHByZXZlbnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBp
bgogICAvLyBzdWJmcmFtZXMhCiAgIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5O
b2RlUHJpbmNpcGFsKCkpOwogCiAgIG5zQ09NUHRyPG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0g
bU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVm
ZXJyZXIpKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlz
dC5oCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKKysrIGIvY29udGVudC9i
YXNlL3NyYy9uc0drQXRvbUxpc3QuaApAQCAtNjIsMTcgKzYyLDIxIEBAIEdLX0FUT00oYWN0dWF0
ZSwgImFjdHVhdGUiKQogR0tfQVRPTShhZGRyZXNzLCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVy
LCAiYWZ0ZXIiKQogR0tfQVRPTShhZnRlcl9lbmQsICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRl
cl9zdGFydCwgImFmdGVyX3N0YXJ0IikKIEdLX0FUT00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9N
KGFsaW5rLCAiYWxpbmsiKQogR0tfQVRPTShhbGwsICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50
cywgImFsbG93ZXZlbnRzIikKK0dLX0FUT00oYWxsb3dmb3JtcywgImFsbG93LWZvcm1zIikKIEdL
X0FUT00oYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMsICJhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucyIp
CitHS19BVE9NKGFsbG93c2FtZW9yaWdpbiwgImFsbG93LXNhbWUtb3JpZ2luIikKK0dLX0FUT00o
YWxsb3dzY3JpcHRzLCAiYWxsb3ctc2NyaXB0cyIpCitHS19BVE9NKGFsbG93dG9wbmF2aWdhdGlv
biwgImFsbG93LXRvcC1uYXZpZ2F0aW9uIikKIEdLX0FUT00oYWxsb3d1bnRydXN0ZWQsICJhbGxv
d3VudHJ1c3RlZCIpCiBHS19BVE9NKGFsdCwgImFsdCIpCiBHS19BVE9NKGFsdGVybmF0ZSwgImFs
dGVybmF0ZSIpCiBHS19BVE9NKGFsd2F5cywgImFsd2F5cyIpCiBHS19BVE9NKGFuY2VzdG9yLCAi
YW5jZXN0b3IiKQogR0tfQVRPTShhbmNlc3Rvck9yU2VsZiwgImFuY2VzdG9yLW9yLXNlbGYiKQog
R0tfQVRPTShfYW5kLCAiYW5kIikKIEdLX0FUT00oYW55LCAiYW55IikKQEAgLTgzNywxNiArODQx
LDE3IEBAIEdLX0FUT00ocm93c3BhbiwgInJvd3NwYW4iKQogR0tfQVRPTShycCwgInJwIikKIEdL
X0FUT00ocnQsICJydCIpCiBHS19BVE9NKHJ0bCwgInJ0bCIpCiBHS19BVE9NKHJ1YnksICJydWJ5
IikKIEdLX0FUT00ocnVsZSwgInJ1bGUiKQogR0tfQVRPTShydWxlcywgInJ1bGVzIikKIEdLX0FU
T00ocywgInMiKQogR0tfQVRPTShzYW1wLCAic2FtcCIpCitHS19BVE9NKHNhbmRib3gsICJzYW5k
Ym94IikKIEdLX0FUT00oc2JhdHRyLCAic2JhdHRyIikKIEdLX0FUT00oc2NhbGUsICJzY2FsZSIp
CiBHS19BVE9NKHNjYW4sICJzY2FuIikKIEdLX0FUT00oc2NoZW1lLCAic2NoZW1lIikKIEdLX0FU
T00oc2NvcGUsICJzY29wZSIpCiBHS19BVE9NKHNjb3BlZCwgInNjb3BlZCIpCiBHS19BVE9NKHNj
cmVlbiwgInNjcmVlbiIpCiBHS19BVE9NKHNjcmVlblgsICJzY3JlZW5YIikKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3MuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNT
YW5kYm94RmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2Nv
bnRlbnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3MuaApAQCAtMCwwICsxLDU4IEBACisvKiAtKi0g
TW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1v
ZmZzZXQ6IDIgLSotICovDQorLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8g
dGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYw0KKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYg
YSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwNCisg
KiBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLw0K
Kw0KKy8qDQorICogQ29uc3RhbnQgZmxhZ3MgdGhhdCBkZXNjcmliZSBob3cgYSBkb2N1bWVudCBp
cyBzYW5kYm94ZWQgYWNjb3JkaW5nIHRvIHRoZQ0KKyAqIEhUTUw1IHNwZWMuDQorICovDQorDQor
I2lmbmRlZiBuc1NhbmRib3hGbGFnc19oX19fDQorI2RlZmluZSBuc1NhbmRib3hGbGFnc19oX19f
DQorDQorLyoqDQorICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5n
IGJyb3dzaW5nIGNvbnRleHRzIG90aGVyIHRoYW4NCisgKiB0aGUgc2FuZGJveGVkIGJyb3dzaW5n
IGNvbnRleHQgaXRzZWxmIChvciBicm93c2luZyBjb250ZXh0cyBmdXJ0aGVyDQorICogbmVzdGVk
IGluc2lkZSBpdCksIGFuZCB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQuDQorICovDQor
Y29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfTkFWSUdBVElPTiAgPSAweDE7DQorDQorLyoq
DQorICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWlyIHRv
cC1sZXZlbCBicm93c2luZw0KKyAqIGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9u
ZyBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiA9IDB4MjsNCisNCisvKioNCisgKiBUaGlz
IGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIGluc3RhbnRpYXRpbmcgcGx1Z2lucywgd2hldGhl
ciB1c2luZyB0aGUNCisgKiBlbWJlZCBlbGVtZW50LCB0aGUgb2JqZWN0IGVsZW1lbnQsIHRoZSBh
cHBsZXQgZWxlbWVudCwgb3IgdGhyb3VnaA0KKyAqIG5hdmlnYXRpb24gb2YgYSBuZXN0ZWQgYnJv
d3NpbmcgY29udGV4dCwgdW5sZXNzIHRob3NlIHBsdWdpbnMgY2FuIGJlDQorICogc2VjdXJlZC4N
CisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5TID0gMHg0Ow0KKw0K
Ky8qKg0KKyAqIFRoaXMgZmxhZyBmb3JjZXMgY29udGVudCBpbnRvIGEgdW5pcXVlIG9yaWdpbiwg
dGh1cyBwcmV2ZW50aW5nIGl0IGZyb20NCisgKiBhY2Nlc3Npbmcgb3RoZXIgY29udGVudCBmcm9t
IHRoZSBzYW1lIG9yaWdpbi4NCisgKiBUaGlzIGZsYWcgYWxzbyBwcmV2ZW50cyBzY3JpcHQgZnJv
bSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byB0aGUNCisgKiBkb2N1bWVudC5jb29raWUgSURM
IGF0dHJpYnV0ZSwgYW5kIGJsb2NrcyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLg0KKyAqLw0KK2Nv
bnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX09SSUdJTiA9IDB4ODsNCisNCisvKioNCisgKiBU
aGlzIGZsYWcgYmxvY2tzIGZvcm0gc3VibWlzc2lvbi4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBs
b25nIFNBTkRCT1hFRF9GT1JNUyA9IDB4MTA7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2Nr
cyBzY3JpcHQgZXhlY3V0aW9uLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVE
X1NDUklQVFMgPSAweDIwOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3MgZmVhdHVyZXMg
dGhhdCB0cmlnZ2VyIGF1dG9tYXRpY2FsbHksIHN1Y2ggYXMNCisgKiBhdXRvbWF0aWNhbGx5IHBs
YXlpbmcgYSB2aWRlbyBvciBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIGEgZm9ybSBjb250cm9sLg0K
KyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUyA9
IDB4NDA7DQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExv
YWRlci5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcAotLS0gYS9jb250
ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25z
U2NyaXB0TG9hZGVyLmNwcApAQCAtMzcsMTYgKzM3LDE3IEBACiAjaW5jbHVkZSAibnNJQ29udGVu
dFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAicHJsb2cuaCIKICNpbmNsdWRlICJuc0lDaGFu
bmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnND
UlQuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRDcmVhdG9yRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAi
bnNHZW5lcmljRWxlbWVudC5oIgogI2luY2x1ZGUgIm5zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5o
IgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL0Z1bmN0
aW9uVGltZXIuaCIKICNpbmNsdWRlICJtb3ppbGxhL0NPUlNNb2RlLmgiCiAKICNpZmRlZiBQUl9M
T0dHSU5HCiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnQ3NwUFJMb2c7CiAjZW5kaWYKIApAQCAt
MjcyLDE2ICsyNzMsMjIgQEAgbnNTY3JpcHRMb2FkZXI6OlN0YXJ0TG9hZChuc1NjcmlwdExvYWRS
ZQogICBpZiAoIXdpbmRvdykgewogICAgIHJldHVybiBOU19FUlJPUl9OVUxMX1BPSU5URVI7CiAg
IH0KIAogICBuc0lEb2NTaGVsbCAqZG9jc2hlbGwgPSB3aW5kb3ctPkdldERvY1NoZWxsKCk7CiAK
ICAgbnNDT01QdHI8bnNJSW50ZXJmYWNlUmVxdWVzdG9yPiBwcm9tcHRlcihkb19RdWVyeUludGVy
ZmFjZShkb2NzaGVsbCkpOwogCisgIC8vIElmIHRoaXMgZG9jdW1lbnQgaXMgc2FuZGJveGVkIHdp
dGhvdXQgJ2FsbG93LXNjcmlwdHMnLCBhYm9ydC4KKyAgaWYgKG1Eb2N1bWVudC0+U2FuZGJveEZs
YWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgIC8vIFJFVklFVyA6IHRoaXMgcHJvYmFi
bHkgaXNuJ3QgdGhlIHJpZ2h0IGVycm9yLi4KKyAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VS
SVRZX0VSUjsKKyAgfQorCiAgIC8vIGNoZWNrIGZvciBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5
IHRvIHBhc3MgZG93biB0byB0aGUgY2hhbm5lbAogICAvLyB0aGF0IHdpbGwgYmUgY3JlYXRlZCB0
byBsb2FkIHRoZSBzY3JpcHQKICAgbnNDT01QdHI8bnNJQ2hhbm5lbFBvbGljeT4gY2hhbm5lbFBv
bGljeTsKICAgbnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5PiBjc3A7CiAgIHJ2ID0g
bURvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldENzcChnZXR0ZXJfQWRkUmVmcyhjc3ApKTsK
ICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgaWYgKGNzcCkgewogICAgIGNoYW5uZWxQ
b2xpY3kgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL25zY2hhbm5lbHBvbGljeTsx
Iik7CkBAIC02MjksMTYgKzYzNiwyMSBAQCBuc1NjcmlwdExvYWRlcjo6UHJvY2Vzc1NjcmlwdEVs
ZW1lbnQobnNJCiAgICAgICAgICJUaGVyZSBjYW4gYmUgb25seSBvbmUgcGFyc2VyLWJsb2NraW5n
IHNjcmlwdCBhdCBhIHRpbWUiKTsKICAgICBOU19BU1NFUlRJT04obVhTTFRSZXF1ZXN0cy5Jc0Vt
cHR5KCksCiAgICAgICAgICJQYXJzZXItYmxvY2tpbmcgc2NyaXB0cyBhbmQgWFNMVCBzY3JpcHRz
IGluIHRoZSBzYW1lIGRvYyEiKTsKICAgICBtUGFyc2VyQmxvY2tpbmdSZXF1ZXN0ID0gcmVxdWVz
dDsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8vIGlubGluZSBzY3JpcHQKKyAgLy8gSXMg
dGhpcyBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctc2NyaXB0cyc/CisgIGlmICht
RG9jdW1lbnQtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKwogICBuc0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNz
cDsKICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRS
ZWZzKGNzcCkpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgZmFsc2UpOwogCiAgIGlmIChjc3Ap
IHsKICAgICBQUl9MT0coZ0NzcFBSTG9nLCBQUl9MT0dfREVCVUcsICgiTmV3IFNjcmlwdExvYWRl
ciBpICoqKip3aXRoIENTUCoqKioiKSk7CiAgICAgYm9vbCBpbmxpbmVPSzsKICAgICBydiA9IGNz
cC0+R2V0QWxsb3dzSW5saW5lU2NyaXB0KCZpbmxpbmVPSyk7CmRpZmYgLS1naXQgYS9jb250ZW50
L2V2ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAgYi9jb250ZW50L2V2ZW50cy9z
cmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAKLS0tIGEvY29udGVudC9ldmVudHMvc3JjL25z
RXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCisrKyBiL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50
TGlzdGVuZXJNYW5hZ2VyLmNwcApAQCAtNTAsMTYgKzUwLDE3IEBACiAjaW5jbHVkZSAibnNET01K
U1V0aWxzLmgiCiAjaW5jbHVkZSAibnNET01TY3JpcHRPYmplY3RIb2xkZXIuaCIKICNpbmNsdWRl
ICJuc0RhdGFIYXNodGFibGUuaCIKICNpbmNsdWRlICJuc0NPTUFycmF5LmgiCiAjaW5jbHVkZSAi
bnNFdmVudExpc3RlbmVyU2VydmljZS5oIgogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBv
bGljeS5oIgogI2luY2x1ZGUgIm5zSlNFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgInhwY3B1Ymxp
Yy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3pp
bGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6aGFsOwogCiAjZGVmaW5lIEVWRU5U
X1RZUEVfRVFVQUxTKCBscywgdHlwZSwgdXNlclR5cGUgKSBcCiAgIChscy0+bUV2ZW50VHlwZSA9
PSB0eXBlICYmIFwKICAgKGxzLT5tRXZlbnRUeXBlICE9IE5TX1VTRVJfREVGSU5FRF9FVkVOVCB8
fCBscy0+bVR5cGVBdG9tID09IHVzZXJUeXBlKSkKIApAQCAtNTYxLDE2ICs1NjIsMjIgQEAgbnNF
dmVudExpc3RlbmVyTWFuYWdlcjo6QWRkU2NyaXB0RXZlbnRMaQogICAgIC8vIGxvYWRlZCBhcyBk
YXRhLgogICAgIHJldHVybiBOU19PSzsKICAgfQogCiAgIG5zcmVzdWx0IHJ2ID0gTlNfT0s7CiAg
IC8vIHJldHVybiBlYXJseSBwcmV2ZW50aW5nIHRoZSBldmVudCBsaXN0ZW5lciBmcm9tIGJlaW5n
IGFkZGVkCiAgIC8vICdkb2MnIGlzIGZldGNoZWQgYWJvdmUKICAgaWYgKGRvYykgeworICAgIC8v
IERvbid0IGFsbG93IGFkZGluZyBhbiBldmVudCBsaXN0ZW5lciBpZiB0aGUgZG9jdW1lbnQgaXMg
c2FuZGJveGVkCisgICAgLy8gd2l0aG91dCAnYWxsb3ctc2NyaXB0cycuCisgICAgaWYgKGRvYy0+
U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgICAgcmV0dXJuIE5TX0VS
Uk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAgbnNDT01QdHI8bnNJQ29udGVudFNl
Y3VyaXR5UG9saWN5PiBjc3A7CiAgICAgcnYgPSBkb2MtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3Nw
KGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAK
ICAgICBpZiAoY3NwKSB7CiAgICAgICBib29sIGlubGluZU9LOwogICAgICAgcnYgPSBjc3AtPkdl
dEFsbG93c0lubGluZVNjcmlwdCgmaW5saW5lT0spOwogICAgICAgTlNfRU5TVVJFX1NVQ0NFU1Mo
cnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3Jt
RWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQu
Y3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAK
KysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcApAQCAt
NDgsMTYgKzQ4LDE3IEBACiAKICNpbmNsdWRlICJtb3pBdXRvRG9jVXBkYXRlLmgiCiAjaW5jbHVk
ZSAibnNJSFRNTENvbGxlY3Rpb24uaCIKIAogI2luY2x1ZGUgIm5zSUNvbnN0cmFpbnRWYWxpZGF0
aW9uLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MQnV0dG9uRWxlbWVudC5oIgogI2luY2x1ZGUg
ImRvbWJpbmRpbmdzLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE6OmRvbTsKIAogc3RhdGljIGNvbnN0IGludCBOU19GT1JNX0NPTlRST0xf
TElTVF9IQVNIVEFCTEVfU0laRSA9IDE2OwogCiBzdGF0aWMgY29uc3QgUFJVaW50OCBOU19GT1JN
X0FVVE9DT01QTEVURV9PTiAgPSAxOwogc3RhdGljIGNvbnN0IFBSVWludDggTlNfRk9STV9BVVRP
Q09NUExFVEVfT0ZGID0gMDsKIApAQCAtNjQ4LDE3ICs2NDksMTkgQEAgbnNIVE1MRm9ybUVsZW1l
bnQ6OkRvU3VibWl0T3JSZXNldChuc0V2ZQogICAgIHJldHVybiBEb1Jlc2V0KCk7CiAgIH0KIAog
ICBpZiAoTlNfRk9STV9TVUJNSVQgPT0gYU1lc3NhZ2UpIHsKICAgICAvLyBEb24ndCBzdWJtaXQg
aWYgd2UncmUgbm90IGluIGEgZG9jdW1lbnQuCiAgICAgaWYgKCFkb2MpIHsKICAgICAgIHJldHVy
biBOU19PSzsKICAgICB9Ci0gICAgcmV0dXJuIERvU3VibWl0KGFFdmVudCk7CisgICAgLy8gRG9u
J3Qgc3VibWl0IGlmIHdlJ3JlIGluIGEgc2FuZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1Ym1pdAor
ICAgIC8vIGlzIGRpc2FibGVkLgorICAgIHJldHVybiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNB
TkRCT1hFRF9GT1JNUykgPyBOU19PSyA6IERvU3VibWl0KGFFdmVudCk7CiAgIH0KIAogICBNT1pf
QVNTRVJUKGZhbHNlKTsKICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNIVE1MRm9y
bUVsZW1lbnQ6OkRvUmVzZXQoKQpAQCAtMTY0OSwxNiArMTY1MiwyNCBAQCBuc0hUTUxGb3JtRWxl
bWVudDo6Q2hlY2tWYWxpZEZvcm1TdWJtaXNzCiAgICAqIFRPRE86IHRoZSBjaGVjayBmb3Igb2Jz
ZXJ2ZXIgc2hvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBIVE1MNSBGb3JtcyB3aWxsCiAgICAq
IGJlIHNwcmVhZCBlbm91Z2ggYW5kIGF1dGhvcnMgd2lsbCBhc3N1bWUgZm9ybXMgY2FuJ3QgYmUg
c3VibWl0dGVkIHdoZW4KICAgICogaW52YWxpZC4gU2VlIGJ1ZyA1ODc2NzEuCiAgICAqLwogCiAg
IE5TX0FTU0VSVElPTighSGFzQXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpub3Zh
bGlkYXRlKSwKICAgICAgICAgICAgICAgICJXZSBzaG91bGRuJ3QgYmUgdGhlcmUgaWYgbm92YWxp
ZGF0ZSBpcyBzZXQhIik7CiAKKyAgLy8gRG9uJ3QgZG8gdmFsaWRhdGlvbiBmb3IgYSBmb3JtIHN1
Ym1pdCBkb25lIGJ5IGEgc2FuZGJveGVkIGRvY3VtZW50IHRoYXQKKyAgLy8gZG9lc24ndCBoYXZl
ICdhbGxvdy1mb3JtcycsIHRoZSBzdWJtaXQgd2lsbCBoYXZlIGJlZW4gYmxvY2tlZCBhbmQgdGhl
CisgIC8vIEhUTUw1IHNwZWMgc2F5cyB3ZSBzaG91bGRuJ3QgdmFsaWRhdGUgaW4gdGhpcyBjYXNl
LgorICBuc0lEb2N1bWVudCogZG9jID0gR2V0Q3VycmVudERvYygpOworICBpZiAoZG9jICYmIChk
b2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX0ZPUk1TKSkgeworICAgICAgcmV0dXJuIHRy
dWU7CisgIH0KKwogICAvLyBXaGVuIC5zdWJtaXQoKSBpcyBjYWxsZWQgYUV2ZW50ID0gbnNudWxs
IHNvIHdlIGNhbiByZWx5IG9uIHRoYXQgdG8ga25vdyBpZgogICAvLyB3ZSBoYXZlIHRvIGNoZWNr
IHRoZSB2YWxpZGl0eSBvZiB0aGUgZm9ybS4KICAgbnNDT01QdHI8bnNJT2JzZXJ2ZXJTZXJ2aWNl
PiBzZXJ2aWNlID0KICAgICBtb3ppbGxhOjpzZXJ2aWNlczo6R2V0T2JzZXJ2ZXJTZXJ2aWNlKCk7
CiAgIGlmICghc2VydmljZSkgewogICAgIE5TX1dBUk5JTkcoIk5vIG9ic2VydmVyIHNlcnZpY2Ug
YXZhaWxhYmxlISIpOwogICAgIHJldHVybiB0cnVlOwogICB9CmRpZmYgLS1naXQgYS9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwv
Y29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2Nv
bnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAtMSwyNCArMSwxNiBAQAogLyogLSot
IE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLSAqLwogLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8g
dGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwogICogTGljZW5zZSwgdi4gMi4wLiBJZiBh
IGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICogZmlsZSwg
WW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KIAog
I2luY2x1ZGUgIm1vemlsbGEvVXRpbC5oIgogCiAjaW5jbHVkZSAibnNIVE1MSUZyYW1lRWxlbWVu
dC5oIgotI2luY2x1ZGUgIm5zSURPTURvY3VtZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NU1ZHRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRlICJuc0lEb2N1bWVudC5o
IgotI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIm5zRE9NRXJyb3Iu
aCIKLSNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgog
CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207
CiAKIE5TX0lNUExfTlNfTkVXX0hUTUxfRUxFTUVOVF9DSEVDS19QQVJTRVIoSUZyYW1lKQogCiBu
c0hUTUxJRnJhbWVFbGVtZW50Ojpuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8
bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRnJvbVBhcnNlciBhRnJvbVBhcnNlcikKQEAgLTUzLDE2ICs0NSwxNyBAQCBOU19J
TVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsCiBOU19JTVBMX1VSSV9BVFRSKG5z
SFRNTElGcmFtZUVsZW1lbnQsIExvbmdEZXNjLCBsb25nZGVzYykKIE5TX0lNUExfU1RSSU5HX0FU
VFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTWFyZ2luSGVpZ2h0LCBtYXJnaW5oZWlnaHQpCiBOU19J
TVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE1hcmdpbldpZHRoLCBtYXJnaW53
aWR0aCkKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTmFtZSwgbmFt
ZSkKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU2Nyb2xsaW5nLCBz
Y3JvbGxpbmcpCiBOU19JTVBMX1VSSV9BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNyYywgc3Jj
KQogTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBXaWR0aCwgd2lkdGgp
CiBOU19JTVBMX0JPT0xfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBNb3pBbGxvd0Z1bGxTY3Jl
ZW4sIG1vemFsbG93ZnVsbHNjcmVlbikKK05TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1l
RWxlbWVudCwgU2FuZGJveCwgc2FuZGJveCkKIAogdm9pZAogbnNIVE1MSUZyYW1lRWxlbWVudDo6
R2V0SXRlbVZhbHVlVGV4dChuc0FTdHJpbmcmIGFWYWx1ZSkKIHsKICAgR2V0U3JjKGFWYWx1ZSk7
CiB9CiAKIHZvaWQKQEAgLTIwMiw4ICsxOTUsNDAgQEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6SXNB
dHRyaWJ1dGVNYXBwZWQoYwogCiAKIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMKIG5zSFRNTElG
cmFtZUVsZW1lbnQ6OkdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0CiB7CiAgIHJl
dHVybiAmTWFwQXR0cmlidXRlc0ludG9SdWxlOwogfQogCituc3Jlc3VsdAorbnNIVE1MSUZyYW1l
RWxlbWVudDo6QWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQXR0clZhbHVl
KiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3Rp
ZnkpCit7CisgIGlmIChhTmFtZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5hbWVTcGFjZUlE
ID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2YWx1ZSBvZiB0
aGUgc2FuZGJveCBhdHRyaWJ1dGUsIGFuZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwKKyAgICAvLyBz
ZXQgaXRzIHNhbmRib3ggZmxhZ3MgYXBwcm9wcmlhdGVseS4KKyAgICBpZiAobUZyYW1lTG9hZGVy
KSB7CisgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jc2hlbGwgPSBtRnJhbWVMb2FkZXIt
PkdldEV4aXN0aW5nRG9jU2hlbGwoKTsKKworICAgICAgaWYgKGRvY3NoZWxsKSB7CisgICAgICAg
IFBSVWludDMyIG5ld0ZsYWdzID0gMDsKKyAgICAgICAgLy8gSWYgYSBOVUxMIGFWYWx1ZSBpcyBw
YXNzZWQgaW4sIHdlIHdhbnQgdG8gY2xlYXIgdGhlIHNhbmRib3ggZmxhZ3MKKyAgICAgICAgLy8g
d2hpY2ggd2Ugd2lsbCBkbyBieSBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAgaWYgKGFWYWx1
ZSkgeworICAgICAgICAgIG5zQXV0b1N0cmluZyBzdHJWYWx1ZTsKKyAgICAgICAgICBhVmFsdWUt
PlRvU3RyaW5nKHN0clZhbHVlKTsKKyAgICAgICAgICBuZXdGbGFncyA9IG5zQ29udGVudFV0aWxz
OjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKAorICAgICAgICAgICAgc3RyVmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBwbHVnaW5zIGhl
cmUgYmVjYXVzZSB0aGUgY2hhbmdlIGluIHRoZQorICAgICAgICAvLyBzYW5kYm94IGF0dHJpYnV0
ZSBpcyBub3Qgc3VwcG9zZWQgdG8gdGFrZSBlZmZlY3QgdW50aWwgdGhlCisgICAgICAgIC8vIG5l
eHQgZG9jdW1lbnQgaXMgbG9hZGVkLgorICAgICAgICBkb2NzaGVsbC0+U2V0U2FuZGJveEZsYWdz
KG5ld0ZsYWdzKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIG5zR2VuZXJpY0hUTUxF
bGVtZW50OjpBZnRlclNldEF0dHIoYU5hbWVTcGFjZUlELCBhTmFtZSwgYVZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTm90aWZ5KTsKKworfQpkaWZm
IC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaCBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmgKLS0tIGEvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaAorKysgYi9jb250ZW50
L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCkBAIC0xLDE2ICsxLDI0IEBA
CiAvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsg
Yy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCiAvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3Vi
amVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgKiBMaWNlbnNlLCB2LiAy
LjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCiAg
KiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAv
LiAqLwogCiAjaW5jbHVkZSAibnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUg
Im5zSURPTUhUTUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJuc0lET01TVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zR2tBdG9t
cy5oIgorI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCisjaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1
dGVzLmgiCisjaW5jbHVkZSAibnNET01FcnJvci5oIgorI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIK
KyNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIK
IAogY2xhc3MgbnNIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJhbWVF
bGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUhUTUxJRnJh
bWVFbGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUdldFNW
R0RvY3VtZW50CiB7CiBwdWJsaWM6CiAgIG5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRS
ZWZlZDxuc0lOb2RlSW5mbz4gYU5vZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgIG1vemls
bGE6OmRvbTo6RnJvbVBhcnNlciBhRnJvbVBhcnNlciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZST01f
UEFSU0VSKTsKQEAgLTQxLDEyICs0OSwzNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KTsKICAgTlNfSU1FVEhPRF8oYm9vbCkg
SXNBdHRyaWJ1dGVNYXBwZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CiAgIHZp
cnR1YWwgbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rp
b24oKSBjb25zdDsKIAogICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9k
ZUluZm8sIG5zSU5vZGUgKiphUmVzdWx0KSBjb25zdDsKICAgdmlydHVhbCBuc1hQQ0NsYXNzSW5m
byogR2V0Q2xhc3NJbmZvKCk7CiAgIHZpcnR1YWwgbnNJRE9NTm9kZSogQXNET01Ob2RlKCkgeyBy
ZXR1cm4gdGhpczsgfQogCisgIHZpcnR1YWwgbnNyZXN1bHQgQWZ0ZXJTZXRBdHRyKFBSSW50MzIg
YU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbnNBdHRyVmFsdWUqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhTm90aWZ5KTsKKworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKQor
ICB7CisgICAgbnNBdXRvU3RyaW5nIHNhbmRib3hBdHRyOworCisgICAgaWYgKEdldEF0dHIoa05h
bWVTcGFjZUlEX05vbmUsIG5zR2tBdG9tczo6c2FuZGJveCwgc2FuZGJveEF0dHIpKSB7CisgICAg
ICByZXR1cm4gbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2Fu
ZGJveEF0dHIpOworICAgIH0KKworICAgIC8vIE5vIHNhbmRib3ggYXR0cmlidXRlLCBubyBzYW5k
Ym94IGZsYWdzLgorICAgIHJldHVybiAwOworICB9CisKKyAgc3RhdGljIG5zSFRNTElGcmFtZUVs
ZW1lbnQqIEZyb21Db250ZW50KG5zSUNvbnRlbnQgKmFDb250ZW50KQorICB7CisgICAgaWYgKGFD
b250ZW50LT5Jc0hUTUwobnNHa0F0b21zOjppZnJhbWUpKSB7CisgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8bnNIVE1MSUZyYW1lRWxlbWVudCo+KGFDb250ZW50KTsKKyAgICB9CisgICAgcmV0dXJu
IG5zbnVsbDsKKyAgfQorCiBwcm90ZWN0ZWQ6CiAgIHZpcnR1YWwgdm9pZCBHZXRJdGVtVmFsdWVU
ZXh0KG5zQVN0cmluZyYgdGV4dCk7CiAgIHZpcnR1YWwgdm9pZCBTZXRJdGVtVmFsdWVUZXh0KGNv
bnN0IG5zQVN0cmluZyYgdGV4dCk7CiB9OwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2RvY3Vt
ZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25z
SFRNTERvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERv
Y3VtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50
LmNwcApAQCAtOTgsMTYgKzk4LDE3IEBACiAjaW5jbHVkZSAicHJwcmYuaCIKICNpbmNsdWRlICJt
b3ppbGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNlcy5oIgog
I2luY2x1ZGUgIm5zTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAibnNJUmVxdWVzdC5oIgogI2luY2x1
ZGUgIm5zSHRtbDVUcmVlT3BFeGVjdXRvci5oIgogI2luY2x1ZGUgIm5zSHRtbDVQYXJzZXIuaCIK
ICNpbmNsdWRlICJuc0lET01KU1dpbmRvdy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRv
bTsKIAogI2RlZmluZSBOU19NQVhfRE9DVU1FTlRfV1JJVEVfREVQVEggMjAKIAogI2luY2x1ZGUg
InBybWVtLmgiCiAjaW5jbHVkZSAicHJ0aW1lLmgiCkBAIC0xMjE2LDE2ICsxMjE3LDIyIEBAIG5z
SFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3RyaW5nJiBhQ28KIHsKICAgYUNvb2tpZS5UcnVu
Y2F0ZSgpOyAvLyBjbGVhciBjdXJyZW50IGNvb2tpZSBpbiBjYXNlIHNlcnZpY2UgZmFpbHM7CiAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbm8gY29va2llIGlzbid0IGFuIGVycm9yIGNvbmRpdGlv
bi4KIAogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAg
IH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0
LCBhY2Nlc3MgdG8gcmVhZCBjb29raWVzCisgIC8vIGlzIHByb2hpYml0ZWQuCisgIGlmIChtU2Fu
ZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikgeworICAgIHJldHVybiBOU19FUlJPUl9ET01f
U0VDVVJJVFlfRVJSOworICB9CisgIAogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZpY2Ug
aXNuJ3QgYW4gZXJyb3IKICAgbnNDT01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9IGRv
X0dldFNlcnZpY2UoTlNfQ09PS0lFU0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZpY2Up
IHsKICAgICAvLyBHZXQgYSBVUkkgZnJvbSB0aGUgZG9jdW1lbnQgcHJpbmNpcGFsLiBXZSB1c2Ug
dGhlIG9yaWdpbmFsCiAgICAgLy8gY29kZWJhc2UgaW4gY2FzZSB0aGUgY29kZWJhc2Ugd2FzIGNo
YW5nZWQgYnkgU2V0RG9tYWluCiAgICAgbnNDT01QdHI8bnNJVVJJPiBjb2RlYmFzZVVSSTsKICAg
ICBOb2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhjb2RlYmFzZVVSSSkpOwog
CkBAIC0xMjQ2LDE2ICsxMjUzLDIyIEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3Ry
aW5nJiBhQ28KIAogTlNfSU1FVEhPRElNUAogbnNIVE1MRG9jdW1lbnQ6OlNldENvb2tpZShjb25z
dCBuc0FTdHJpbmcmIGFDb29raWUpCiB7CiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2Vzcykgewog
ICAgIHJldHVybiBOU19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRib3hl
ZCBvcmlnaW4gZmxhZyBpcyBzZXQsIGFjY2VzcyB0byB3cml0ZSBjb29raWVzCisgIC8vIGlzIHBy
b2hpYml0ZWQuCisgIGlmIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikgeworICAg
IHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICB9CisKICAgLy8gbm90IGhhdmlu
ZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNl
cnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJ
RCk7CiAgIGlmIChzZXJ2aWNlICYmIG1Eb2N1bWVudFVSSSkgewogICAgIG5zQ09NUHRyPG5zSVBy
b21wdD4gcHJvbXB0OwogICAgIG5zQ09NUHRyPG5zUElET01XaW5kb3c+IHdpbmRvdyA9IEdldFdp
bmRvdygpOwogICAgIGlmICh3aW5kb3cpIHsKICAgICAgIHdpbmRvdy0+R2V0UHJvbXB0ZXIoZ2V0
dGVyX0FkZFJlZnMocHJvbXB0KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9N
YWtlZmlsZS5pbiBiL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4KLS0tIGEvZG9jc2hlbGwvYmFz
ZS9NYWtlZmlsZS5pbgorKysgYi9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCkBAIC04NSw5ICs4
NSwxMCBAQCBpbmNsdWRlICQodG9wc3JjZGlyKS9jb25maWcvY29uZmlnLm1rCiBpbmNsdWRlICQo
dG9wc3JjZGlyKS9pcGMvY2hyb21pdW0vY2hyb21pdW0tY29uZmlnLm1rCiBpbmNsdWRlICQodG9w
c3JjZGlyKS9jb25maWcvcnVsZXMubWsKIAogTE9DQUxfSU5DTFVERVMgKz0gXAogICAtSSQoc3Jj
ZGlyKS8uLi9zaGlzdG9yeS9zcmMgXAogICAtSSQodG9wc3JjZGlyKS9kb20vYmFzZSBcCiAgIC1J
JCh0b3BzcmNkaXIpL2xheW91dC9iYXNlIFwKICAgLUkkKHRvcHNyY2RpcikveHBjb20vZHMgXAor
ICAtSSQodG9wc3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKICAgJChOVUxMKQpkaWZmIC0tZ2l0
IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVs
bC5jcHAKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAorKysgYi9kb2NzaGVsbC9i
YXNlL25zRG9jU2hlbGwuY3BwCkBAIC0xNzcsMTYgKzE3NywxNyBAQAogI2luY2x1ZGUgIm5zSVdl
YkJyb3dzZXJQcmludC5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJuc1BsdWdpbkVycm9yLmgiCiAj
aW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRFcnJvcnMuaCIK
ICNpbmNsdWRlICJuc0lDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3Vy
aXR5UG9saWN5LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2luY2x1ZGUgIm5z
WFVMQXBwQVBJLmgiCiAKICNpbmNsdWRlICJuc0RPTU5hdmlnYXRpb25UaW1pbmcuaCIKICNpbmNs
dWRlICJuc0lUaW1lZENoYW5uZWwuaCIKICNpbmNsdWRlICJtb3ppbGxhL1N0YXJ0dXBUaW1lbGlu
ZS5oIgogI2luY2x1ZGUgIm5zSUZyYW1lTWVzc2FnZU1hbmFnZXIuaCIKIApAQCAtNzI4LDE2ICs3
MjksMTcgQEAgbnNEb2NTaGVsbDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVTWV9G
TEFHU19OT05FKSwKICAgICBtQXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9XTiks
CiAgICAgbUxvYWRUeXBlKDApLAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdpbkhl
aWdodCgtMSksCiAgICAgbUl0ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNUcmFu
c0luZGV4KC0xKSwKICAgICBtTG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hGbGFn
cygwKSwKICAgICBtQ3JlYXRlZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUpLAog
ICAgIG1BbGxvd1BsdWdpbnModHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwKICAg
ICBtQWxsb3dNZXRhUmVkaXJlY3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwKICAg
ICBtQWxsb3dETlNQcmVmZXRjaCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRydWUp
LApAQCAtMjk3MiwxNiArMjk3NCw3MyBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1lKGNv
bnN0IFBSVW5pCiAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoZm91bmRJdGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91bmRJ
dGVtIGhlcmUgZXZlbiBpZiBpdCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0ZW0g
c2luY2UgYWxsIHRoZSBuYW1lcyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAgICAg
ICAgIC8vIHNwZWNpYWwgY2FzZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3IgZnVy
dGhlci4KIAorICAgICAgICAgICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwgd2Ug
bmVlZCB0byBkbyBzb21lIGV4dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRi
b3hGbGFncyA9IDA7CisKKyAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBk
b19HZXRJbnRlcmZhY2UoYU9yaWdpbmFsUmVxdWVzdG9yKTsKKworICAgICAgICAgICAgaWYgKGRv
YykgeworICAgICAgICAgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MpIHsKKyAgICAg
ICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiByb290OworICAgICAgICAg
ICAgICAgIEdldFNhbWVUeXBlUm9vdFRyZWVJdGVtKGdldHRlcl9BZGRSZWZzKHJvb3QpKTsKKwor
ICAgICAgICAgICAgICAgIC8vIElzIHRoZSBmb3VuZCBpdGVtIG5vdCBhIHRvcCBsZXZlbCBicm93
c2luZyBjb250ZXh0IGFuZCBub3Qgb3Vyc2VsZiA/CisgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gc2VsZkFzSXRlbSA9IHN0YXRpY19jYXN0PG5zSURvY1NoZWxs
VHJlZUl0ZW0gKj4odGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kSXRlbSAhPSByb290
ICYmIGZvdW5kSXRlbSAhPSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFy
ZSB3ZSBhbiBhbmNlc3RvciBvZiB0aGUgZm91bmRJdGVtID8KKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc0FuY2VzdG9yID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gcGFyZW50QXNJdGVtOworICAgICAgICAgICAgICAgICAgICBH
ZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJlbnRBc0l0ZW0pKTsKKworICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAocGFyZW50QXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0bXA7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnRBc0l0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gc2VsZkFzSXRlbSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5jZXN0b3IgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50QXNJdGVtID0gdG1wOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FuY2VzdG9yKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBObywgd2UgYXJlIG5vdCBhbiBhbmNlc3RvciBhbmQgb3VyIGRv
Y3VtZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW5kYm94ZWQsIHdlIGNhbid0
IGFsbG93IHRoaXMuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAvLyBUb3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAtIGlzIGl0IGFuIGFu
Y2VzdG9yIG9mIG91cnMgPworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVs
bFRyZWVJdGVtPiB0bXA7CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdl
dHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0bXApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgdG1wID09IGZvdW5kSXRlbSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYW5jZXN0b3IsIGFuZCB3
ZSBhcmUgc2FuZGJveGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBh
bGxvdy10b3AtbmF2aWdhdGlvbiBpcyBzZXQsIHdlIGNhbid0IGFsbG93IHRoaXMuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9UT1BMRVZF
TF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0g
PSBuc251bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgdG1wLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgIGZvdW5kSXRlbS5zd2FwKCpfcmV0dmFsKTsKICAgICAgICAgICAgIHJldHVybiBO
U19PSzsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEtlZXAgbG9va2luZwogICAgICAgICAK
ICAgICAvLyBGaXJzdCB3ZSBjaGVjayBvdXIgbmFtZS4KQEAgLTUwMTIsMTYgKzUwNzEsMzAgQEAg
bnNEb2NTaGVsbDo6U2V0SXNBcHBUYWIoYm9vbCBhSXNBcHBUYWIpCiBOU19JTUVUSE9ESU1QCiBu
c0RvY1NoZWxsOjpHZXRJc0FwcFRhYihib29sICphSXNBcHBUYWIpCiB7CiAgICphSXNBcHBUYWIg
PSBtSXNBcHBUYWI7CiAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAorbnNEb2NT
aGVsbDo6U2V0U2FuZGJveEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCit7CisgICAgbVNh
bmRib3hGbGFncyA9IGFTYW5kYm94RmxhZ3M7CisgICAgcmV0dXJuIE5TX09LOworfQorCitOU19J
TUVUSE9ESU1QCituc0RvY1NoZWxsOjpHZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgICphU2FuZGJv
eEZsYWdzKQoreworICAgICphU2FuZGJveEZsYWdzID0gbVNhbmRib3hGbGFnczsKKyAgICByZXR1
cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHko
Ym9vbCBhVmlzaWJpbGl0eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICBy
ZXR1cm4gTlNfT0s7CiAgICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmll
d2VyLT5TaG93KCk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtODI1MCwxNiArODMyMywyOSBAQCBu
c0RvY1NoZWxsOjpJbnRlcm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGxUcmVlSXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFt
ZShhV2luZG93VGFyZ2V0LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0dGVyX0FkZFJlZnModGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1No
ZWxsPiB0YXJnZXREb2NTaGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAg
ICAgICAKICAgICAgICAgYm9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRh
cmdldERvY1NoZWxsKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVu
dCBpcyBzYW5kYm94ZWQgYW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRl
L2xvYWQgYSBmcmFtZSBpdCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAg
ICAgLy8gRmluZEl0ZW1XaXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3Ig
dGhlIHRhcmdldAorICAgICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFs
bHkgb3BlbiBhIG5ldyB3aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0aG91Z2gu
IENoZWNrIGlmIHdlIGFyZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYgc28uCisgICAg
ICAgICAgICBOU19FTlNVUkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1JfRkFJTFVSRSk7
CisgICAgICAgICAgICBuc0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3Vt
ZW50KCk7CisgICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICAg
ICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIGlmIChz
YW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgICAgICAgIHJl
dHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBuc0NP
TVB0cjxuc0lET01XaW5kb3c+IHdpbiA9CiAgICAgICAgICAgICAgICAgZG9fR2V0SW50ZXJmYWNl
KEdldEFzU3VwcG9ydHModGhpcykpOwogICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUod2luLCBO
U19FUlJPUl9OT1RfQVZBSUxBQkxFKTsKIAogICAgICAgICAgICAgbnNEZXBlbmRlbnRTdHJpbmcg
bmFtZShhV2luZG93VGFyZ2V0KTsKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4g
bmV3V2luOwogICAgICAgICAgICAgcnYgPSB3aW4tPk9wZW4oRW1wdHlTdHJpbmcoKSwgLy8gVVJM
IHRvIGxvYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsICAgICAgICAgIC8vIHdp
bmRvdyBuYW1lCkBAIC05MDYxLDE4ICs5MTQ3LDMxIEBAIG5zRG9jU2hlbGw6OkRvVVJJTG9hZChu
c0lVUkkgKiBhVVJJLAogICAgICAgICB9CiAgICAgICAgIC8vIFNldCB0aGUgcmVmZXJyZXIgZXhw
bGljaXRseQogICAgICAgICBpZiAoYVJlZmVycmVyVVJJICYmIGFTZW5kUmVmZXJyZXIpIHsKICAg
ICAgICAgICAgIC8vIFJlZmVycmVyIGlzIGN1cnJlbmx5IG9ubHkgc2V0IGZvciBsaW5rIGNsaWNr
cyBoZXJlLgogICAgICAgICAgICAgaHR0cENoYW5uZWwtPlNldFJlZmVycmVyKGFSZWZlcnJlclVS
SSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVy
UHJpbmNpcGFsKGRvX1F1ZXJ5SW50ZXJmYWNlKGFPd25lcikpOwotICAgIG5zQ29udGVudFV0aWxz
OjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSk7
CisgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbDsKKworICAgIC8vIElm
IHRoZSBjb250ZW50IGJlaW5nIGxvYWRlZCBzaG91bGQgYmUgc2FuZGJveGVkIHdpdGggcmVzcGVj
dCB0byBvcmlnaW4KKyAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBudWxsIHByaW5jaXBh
bCBoZXJlLCBhbmQgdGhlbiB0ZWxsCisgICAgLy8gbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5l
bE93bmVyIHRvIGZvcmNlIGl0IHRvIGJlIHNldCBhcyB0aGUKKyAgICAvLyBjaGFubmVsIG93bmVy
LgorICAgIGlmIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikgeworICAgICAgICBv
d25lclByaW5jaXBhbCA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnVsbHByaW5j
aXBhbDsxIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHNhbmRib3hlZCAtIHdlIGFs
bG93IHRoZSBjb250ZW50IHRvIGFzc3VtZSBpdHMgbmF0dXJhbCBvd25lci4KKyAgICAgICAgb3du
ZXJQcmluY2lwYWwgPSBkb19RdWVyeUludGVyZmFjZShhT3duZXIpOworICAgIH0KKworICAgIG5z
Q29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwg
YVVSSSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TYW5k
Ym94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSk7CiAKICAgICBuc0NPTVB0cjxuc0lTY3JpcHRD
aGFubmVsPiBzY3JpcHRDaGFubmVsID0gZG9fUXVlcnlJbnRlcmZhY2UoY2hhbm5lbCk7CiAgICAg
aWYgKHNjcmlwdENoYW5uZWwpIHsKICAgICAgICAgLy8gQWxsb3cgZXhlY3V0aW9uIGFnYWluc3Qg
b3VyIGNvbnRleHQgaWYgdGhlIHByaW5jaXBhbHMgbWF0Y2gKICAgICAgICAgc2NyaXB0Q2hhbm5l
bC0+CiAgICAgICAgICAgICBTZXRFeGVjdXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhF
Q1VURV9OT1JNQUwpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1No
ZWxsLmggYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAotLS0gYS9kb2NzaGVsbC9iYXNlL25z
RG9jU2hlbGwuaAorKysgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaApAQCAtNzU1LDE2ICs3
NTUsMTggQEAgcHJvdGVjdGVkOgogICAgIC8vIENyZWF0ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUg
aXMgbm90IGV4cGVjdGVkIHRvIGNoYW5nZS4KICAgICBQUkludDMyICAgICAgICAgICAgICAgICAg
ICBtSXRlbVR5cGU7CiAKICAgICAvLyBJbmRleCBpbnRvIHRoZSBTSFRyYW5zYWN0aW9uIGxpc3Qs
IGluZGljYXRpbmcgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50CiAgICAgLy8gdHJhbnNhY3Rpb24g
YXQgdGhlIHRpbWUgdGhhdCB0aGlzIERvY1NoZWxsIGJlZ2lucyB0byBsb2FkCiAgICAgUFJJbnQz
MiAgICAgICAgICAgICAgICAgICAgbVByZXZpb3VzVHJhbnNJbmRleDsKICAgICBQUkludDMyICAg
ICAgICAgICAgICAgICAgICBtTG9hZGVkVHJhbnNJbmRleDsKIAorICAgIFBSVWludDMyICAgICAg
ICAgICAgICAgICAgIG1TYW5kYm94RmxhZ3M7CisKICAgICBib29sICAgICAgICAgICAgICAgICAg
ICAgICBtQ3JlYXRlZDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJm
cmFtZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wg
ICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAg
ICAgICAgICAgICAgICAgICAgbUFsbG93SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAg
ICAgICAgIG1BbGxvd0ROU1ByZWZldGNoOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAg
IG1BbGxvd1dpbmRvd0NvbnRyb2w7CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zSURvY1No
ZWxsLmlkbCBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCi0tLSBhL2RvY3NoZWxsL2Jh
c2UvbnNJRG9jU2hlbGwuaWRsCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsCkBA
IC0zNCwxNyArMzQsMTcgQEAgaW50ZXJmYWNlIG5zSVNIRW50cnk7CiBpbnRlcmZhY2UgbnNJTGF5
b3V0SGlzdG9yeVN0YXRlOwogaW50ZXJmYWNlIG5zSVNlY3VyZUJyb3dzZXJVSTsKIGludGVyZmFj
ZSBuc0lET01TdG9yYWdlOwogaW50ZXJmYWNlIG5zSVByaW5jaXBhbDsKIGludGVyZmFjZSBuc0lX
ZWJCcm93c2VyUHJpbnQ7CiBpbnRlcmZhY2UgbnNJVmFyaWFudDsKIGludGVyZmFjZSBuc0lQcml2
YWN5VHJhbnNpdGlvbk9ic2VydmVyOwogCi1bc2NyaXB0YWJsZSwgdXVpZCg2ZjYwYWM5Ni1mYTJj
LTQxYTUtOTJiNC0yOWFhYWRiZDdhN2IpXQorW3NjcmlwdGFibGUsIHV1aWQoOWIyODMzMzctMDk3
ZC00ZmE4LWEyZGEtOTE2MzE4ZWFmODI4KV0KIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1
cHBvcnRzCiB7CiAgIC8qKgogICAgKiBMb2FkcyBhIGdpdmVuIFVSSS4gIFRoaXMgd2lsbCBnaXZl
IHByaW9yaXR5IHRvIGxvYWRpbmcgdGhlIHJlcXVlc3RlZCBVUkkKICAgICogaW4gdGhlIG9iamVj
dCBpbXBsZW1lbnRpbmcJdGhpcyBpbnRlcmZhY2UuICBJZiBpdCBjYW4ndCBiZSBsb2FkZWQgaGVy
ZQogICAgKiBob3dldmVyLCB0aGUgVVJMIGRpc3BhdGNoZXIgd2lsbCBnbyB0aHJvdWdoIGl0cyBu
b3JtYWwgcHJvY2VzcyBvZiBjb250ZW50CiAgICAqIGxvYWRpbmcuCiAgICAqCkBAIC01ODgsOSAr
NTg4LDIzIEBAIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiAgICAqLwogICBh
dHRyaWJ1dGUgYm9vbCBpc0Jyb3dzZXJGcmFtZTsKIAogICAvKgogICAgKiBJcyB0aGlzIGRvY3No
ZWxsIGNvbnRhaW5lZCBpbiBhbiA8aWZyYW1lIG1vemJyb3dzZXI+LCBlaXRoZXIgZGlyZWN0bHkg
b3IKICAgICogaW5kaXJlY3RseT8KICAgICovCiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sIGNv
bnRhaW5lZEluQnJvd3NlckZyYW1lOworCisgIC8qKgorICAgKiBUaGUgc2FuZGJveCBmbGFncyBv
biB0aGUgZG9jc2hlbGwuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94Cisg
ICAqIGF0dHJpYnV0ZSBvZiB0aGUgYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxl
IGNvbnRlbnQsIGlmCisgICAqIGV4aXN0ZW50LiBTZWUgdGhlIEhUTUw1IHNwZWMgZm9yIG1vcmUg
ZGV0YWlscy4KKyAgICogVGhlc2UgZmxhZ3Mgb24gdGhlIGRvY3NoZWxsIHJlZmxlY3QgdGhlIGN1
cnJlbnQgc3RhdGUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlLCB3aGljaCBpcyBtb2Rp
ZmlhYmxlLiBUaGV5IGFyZSBvbmx5IHVzZWQgd2hlbiBsb2FkaW5nIG5ldworICAgKiBjb250ZW50
LCBzYW5kYm94IGZsYWdzIGFyZSBhbHNvIGltbXV0YWJseSBzZXQgb24gdGhlIGRvY3VtZW50IHdo
ZW4gaXQgaXMKKyAgICogbG9hZGVkLgorICAgKiBUaGUgc2FuZGJveCBmbGFncyBvZiBhIGRvY3Vt
ZW50IGRlcGVuZCBvbiB0aGUgc2FuZGJveCBmbGFncyBvbiBpdHMKKyAgICogZG9jc2hlbGwgYW5k
IG9mIGl0cyBwYXJlbnQgZG9jdW1lbnQsIGlmIGFueS4KKyAgICogU2VlIG5zU2FuZGJveEZsYWdz
LmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgICovCisgIGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIHNhbmRib3hGbGFnczsKIH07CmRpZmYgLS1naXQgYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRv
dy5jcHAgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKLS0tIGEvZG9tL2Jhc2UvbnNHbG9i
YWxXaW5kb3cuY3BwCisrKyBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcApAQCAtMjE1LDE2
ICsyMTUsMTcgQEAKICNpbmNsdWRlICJuc1JlZnJlc2hEcml2ZXIuaCIKICNpbmNsdWRlICJtb3pB
dXRvRG9jVXBkYXRlLmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL1RlbGVtZXRyeS5oIgogI2luY2x1
ZGUgIm5zTG9jYXRpb24uaCIKICNpbmNsdWRlICJuc1dyYXBwZXJDYWNoZUlubGluZXMuaCIKICNp
bmNsdWRlICJuc0RPTUV2ZW50VGFyZ2V0SGVscGVyLmgiCiAjaW5jbHVkZSAibnNJQXBwc1NlcnZp
Y2UuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZkZWYgQU5EUk9JRAogI2lu
Y2x1ZGUgPGFuZHJvaWQvbG9nLmg+CiAjZW5kaWYKIAogI2lmZGVmIFBSX0xPR0dJTkcKIHN0YXRp
YyBQUkxvZ01vZHVsZUluZm8qIGdET01MZWFrUFJMb2c7CiAjZW5kaWYKQEAgLTgxNDksMTYgKzgx
NTAsMjIgQEAgbnNHbG9iYWxXaW5kb3c6OkdldFNlc3Npb25TdG9yYWdlKG5zSURPTQogICBpZiAo
IW1TZXNzaW9uU3RvcmFnZSkgewogICAgICphU2Vzc2lvblN0b3JhZ2UgPSBuc251bGw7CiAKICAg
ICBuc1N0cmluZyBkb2N1bWVudFVSSTsKICAgICBpZiAobURvY3VtZW50KSB7CiAgICAgICBtRG9j
dW1lbnQtPkdldERvY3VtZW50VVJJKGRvY3VtZW50VVJJKTsKICAgICB9CiAKKyAgICAvLyBJZiB0
aGUgZG9jdW1lbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgLy8gZG9u
J3QgYWxsb3cgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAgICBpZiAobURvYyAmJiAobURvYy0+
U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfT1JJR0lOKSkgeworICAgICAgcmV0dXJuIE5TX0VS
Uk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVs
bC0+R2V0U2Vzc2lvblN0b3JhZ2VGb3JQcmluY2lwYWwocHJpbmNpcGFsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50VVJJ
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobVNlc3Npb25TdG9yYWdlKSk7CiAgICAgTlNfRU5T
VVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogI2lmZGVmIFBSX0xPR0dJTkcKICAgICBpZiAoUFJfTE9H
X1RFU1QoZ0RPTUxlYWtQUkxvZywgUFJfTE9HX0RFQlVHKSkgewpAQCAtODIxNCwxNiArODIyMSwy
MiBAQCBuc0dsb2JhbFdpbmRvdzo6R2V0TG9jYWxTdG9yYWdlKG5zSURPTVN0CiAgICAgICBkb19H
ZXRTZXJ2aWNlKCJAbW96aWxsYS5vcmcvZG9tL3N0b3JhZ2VtYW5hZ2VyOzEiLCAmcnYpOwogICAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgICBuc1N0cmluZyBkb2N1bWVudFVSSTsK
ICAgICBpZiAobURvY3VtZW50KSB7CiAgICAgICBtRG9jdW1lbnQtPkdldERvY3VtZW50VVJJKGRv
Y3VtZW50VVJJKTsKICAgICB9CiAKKyAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaGFzIHRoZSBzYW5k
Ym94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAgLy8gZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIGxvY2Fs
U3RvcmFnZS4KKyAgICBpZiAobURvYyAmJiAobURvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9Y
RURfT1JJR0lOKSkgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7Cisg
ICAgfQorCiAgICAgbnNJRG9jU2hlbGwqIGRvY1NoZWxsID0gR2V0RG9jU2hlbGwoKTsKICAgICBu
c0NPTVB0cjxuc0lMb2FkQ29udGV4dD4gbG9hZENvbnRleHQgPSBkb19RdWVyeUludGVyZmFjZShk
b2NTaGVsbCk7CiAKICAgICBydiA9IHN0b3JhZ2VNYW5hZ2VyLT5HZXRMb2NhbFN0b3JhZ2VGb3JQ
cmluY2lwYWwocHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudFVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZENvbnRleHQgJiYgbG9hZENvbnRleHQtPlVz
ZVByaXZhdGVCcm93c2luZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhtTG9jYWxTdG9yYWdlKSk7CiAgICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZhY2VzL2h0bWwv
bnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01I
VE1MSUZyYW1lRWxlbWVudC5pZGwKLS0tIGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1M
SUZyYW1lRWxlbWVudC5pZGwKKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZy
YW1lRWxlbWVudC5pZGwKQEAgLTExLDMyICsxMSwzMiBAQAogICoKICAqIFRoaXMgaW50ZXJmYWNl
IGlzIHRyeWluZyB0byBmb2xsb3cgdGhlIERPTSBMZXZlbCAyIEhUTUwgc3BlY2lmaWNhdGlvbjoK
ICAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvCiAgKgogICogd2l0aCBj
aGFuZ2VzIGZyb20gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgV0hBVFdHIEhUTUwgc3BlY2lmaWNhdGlv
bjoKICAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsv
CiAgKi8KIAotW3NjcmlwdGFibGUsIHV1aWQoOTdFNEYwRTEtQkQyNy00MEVDLTkyODctNTYzNERB
RjE1QjczKV0KK1tzY3JpcHRhYmxlLCB1dWlkKDUyZjYyNDRiLWIxZjUtNGY0Yy04ZmYzLTdlMTQ2
MzE2ZjQxMSldCiBpbnRlcmZhY2UgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQgOiBuc0lET01IVE1M
RWxlbWVudAogewogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBhbGlnbjsK
ICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgZnJhbWVCb3JkZXI7CiAgICAg
ICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGhlaWdodDsKICAgICAgICAgICAgYXR0
cmlidXRlIERPTVN0cmluZyAgICAgICAgbG9uZ0Rlc2M7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmcgICAgICAgIG1hcmdpbkhlaWdodDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0
cmluZyAgICAgICAgbWFyZ2luV2lkdGg7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcg
ICAgICAgIG5hbWU7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNjcm9s
bGluZzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc3JjOwogICAgICAg
ICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICB3aWR0aDsKICAgLy8gSW50cm9kdWNlZCBp
biBET00gTGV2ZWwgMjoKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTURvY3VtZW50ICAgY29u
dGVudERvY3VtZW50OwogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NV2luZG93ICAgICBjb250
ZW50V2luZG93OwogCi0KKyAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc2Fu
ZGJveDsKICAgLy8gTW96aWxsYSBleHRlbnNpb25zCiAgIC8vIGlmcmFtZSBlbGVtZW50cyByZXF1
aXJlIHRoZSBtb3pBbGxvd0Z1bGxTY3JlZW4gYXR0cmlidXRlIHRvIGJlIHByZXNlbnQKICAgLy8g
aWYgdGhleSdyZSB0byBhbGxvdyBjb250ZW50IGluIHRoZSBzdWIgZG9jdW1lbnQgdG8gZ28gaW50
byBET00gZnVsbC1zY3JlZW4KICAgLy8gbW9kZS4gU2VlIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9y
Zy9pbmRleC5waHA/dGl0bGU9R2Vja286RnVsbFNjcmVlbkFQSQogICAgICAgICAgICBhdHRyaWJ1
dGUgYm9vbGVhbiAgICAgICAgICBtb3pBbGxvd0Z1bGxTY3JlZW47CiB9OwpkaWZmIC0tZ2l0IGEv
ZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbiBiL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KLS0t
IGEvZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbgorKysgYi9kb20vc3JjL2pzdXJsL01ha2VmaWxl
LmluCkBAIC0yNSwxNiArMjUsMTcgQEAgWFBJRExTUkNTCT0gXAogQ1BQU1JDUwkJPSBuc0pTUHJv
dG9jb2xIYW5kbGVyLmNwcAogCiBFWFBPUlRTCQk9ICQoc3JjZGlyKS9uc0pTUHJvdG9jb2xIYW5k
bGVyLmgKIAogTE9DQUxfSU5DTFVERVMgKz0gXAogCQktSSQoc3JjZGlyKSBcCiAJCS1JJCh0b3Bz
cmNkaXIpL2RvbS9iYXNlIFwKIAkJLUkkKHRvcHNyY2RpcikvbmV0d2Vyay9iYXNlL3NyYyBcCisJ
CS1JJCh0b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9zcmMgXAogCiBpZmRlZiBCVUlMRF9ERUJVR19H
QwogREVGSU5FUwkJKz0gLURERUJVR19HQwogZW5kaWYKIAogRElSUyAgICAgICAgICAgID0gJChO
VUxMKQogVEVTVF9ESVJTICs9IHRlc3QKIApkaWZmIC0tZ2l0IGEvZG9tL3NyYy9qc3VybC9uc0pT
UHJvdG9jb2xIYW5kbGVyLmNwcCBiL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5j
cHAKLS0tIGEvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcAorKysgYi9kb20v
c3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwCkBAIC00MCwxNiArNDAsMTcgQEAKICNp
bmNsdWRlICJuc1RocmVhZFV0aWxzLmgiCiAjaW5jbHVkZSAibnNJSlNDb250ZXh0U3RhY2suaCIK
ICNpbmNsdWRlICJuc0lTY3JpcHRDaGFubmVsLmgiCiAjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJuc0lPYmplY3RJbnB1dFN0cmVhbS5oIgogI2luY2x1ZGUgIm5zSU9iamVjdE91
dHB1dFN0cmVhbS5oIgogI2luY2x1ZGUgIm5zSVdyaXRhYmxlUHJvcGVydHlCYWcyLmgiCiAjaW5j
bHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSAibnNTYW5kYm94Rmxh
Z3MuaCIKIAogc3RhdGljIE5TX0RFRklORV9DSUQoa0pTVVJJQ0lELCBOU19KU1VSSV9DSUQpOwog
CiBjbGFzcyBuc0pTVGh1bmsgOiBwdWJsaWMgbnNJSW5wdXRTdHJlYW0KIHsKIHB1YmxpYzoKICAg
ICBuc0pTVGh1bmsoKTsKIApAQCAtMTg2LDE2ICsxODcsMjMgQEAgbnNyZXN1bHQgbnNKU1RodW5r
OjpFdmFsdWF0ZVNjcmlwdChuc0lDaAogICAgIC8vIEdldCB0aGUgZ2xvYmFsIG9iamVjdCB3ZSBz
aG91bGQgYmUgcnVubmluZyBvbi4KICAgICBuc0lTY3JpcHRHbG9iYWxPYmplY3QqIGdsb2JhbCA9
IEdldEdsb2JhbE9iamVjdChhQ2hhbm5lbCk7CiAgICAgaWYgKCFnbG9iYWwpIHsKICAgICAgICAg
cmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAgICAgfQogCiAgICAgbnNDT01QdHI8bnNQSURPTVdp
bmRvdz4gd2luKGRvX1F1ZXJ5SW50ZXJmYWNlKGdsb2JhbCkpOwogCisgICAgLy8gU2FuZGJveGVk
IGRvY3VtZW50IGNoZWNrOiBqYXZhc2NyaXB0OiBVUkkncyBhcmUgZGlzYWJsZWQKKyAgICAvLyBp
biBhIHNhbmRib3hlZCBkb2N1bWVudCB1bmxlc3MgJ2FsbG93LXNjcmlwdHMnIHdhcyBzcGVjaWZp
ZWQuCisgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFP
cmlnaW5hbElubmVyV2luZG93LT5HZXRFeHRhbnREb2N1bWVudCgpKTsKKyAgICBpZiAoZG9jICYm
IChkb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpKSB7CisgICAgICByZXR1
cm4gTlNfRVJST1JfRE9NX1JFVFZBTF9VTkRFRklORUQ7CisgICAgfQorCiAgICAgLy8gUHVzaCBv
dXIgcG9wdXAgY29udHJvbCBzdGF0ZQogICAgIG5zQXV0b1BvcHVwU3RhdGVQdXNoZXIgcG9wdXBT
dGF0ZVB1c2hlcih3aW4sIGFQb3B1cFN0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdGls
bCBoYXZlIHRoZSBzYW1lIGlubmVyIHdpbmRvdyBhcyB3ZSB1c2VkIHRvLgogICAgIG5zUElET01X
aW5kb3cgKmlubmVyV2luID0gd2luLT5HZXRDdXJyZW50SW5uZXJXaW5kb3coKTsKIAogICAgIGlm
IChpbm5lcldpbiAhPSBhT3JpZ2luYWxJbm5lcldpbmRvdykgewogICAgICAgICByZXR1cm4gTlNf
RVJST1JfVU5FWFBFQ1RFRDsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRv
d3dhdGNoZXIvc3JjL01ha2VmaWxlLmluIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0
Y2hlci9zcmMvTWFrZWZpbGUuaW4KLS0tIGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0
Y2hlci9zcmMvTWFrZWZpbGUuaW4KKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0
Y2hlci9zcmMvTWFrZWZpbGUuaW4KQEAgLTI0LDExICsyNCwxMiBAQCBDUFBTUkNTCQkrPSBuc0Rp
YWxvZ1BhcmFtQmxvY2suY3BwIFwKIAkJICAgJChOVUxMKQogZW5kaWYKIAogIyB3ZSBkb24ndCB3
YW50IHRoZSBzaGFyZWQgbGliLCBidXQgd2Ugd2FudCB0byBmb3JjZSB0aGUgY3JlYXRpb24gb2Yg
YQogIyBzdGF0aWMgbGliLgogRk9SQ0VfU1RBVElDX0xJQiA9IDEKIAogIyBGb3IgbnNKU1V0aWxz
Ci1MT0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3JjZGlyKS9kb20vYmFzZQorTE9DQUxfSU5DTFVE
RVMgKz0gLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UgXAorCQkgIC1JJCh0b3BzcmNkaXIpL2NvbnRl
bnQvYmFzZS9zcmMgXAogCiBpbmNsdWRlICQodG9wc3JjZGlyKS9jb25maWcvcnVsZXMubWsKZGlm
ZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93
V2F0Y2hlci5jcHAgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dp
bmRvd1dhdGNoZXIuY3BwCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIv
c3JjL25zV2luZG93V2F0Y2hlci5jcHAKKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93
d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcApAQCAtNTMsMTYgKzUzLDE3IEBACiAjaW5j
bHVkZSAibnNQSURPTVN0b3JhZ2UuaCIKICNpbmNsdWRlICJuc0lXaWRnZXQuaCIKICNpbmNsdWRl
ICJuc0ZvY3VzTWFuYWdlci5oIgogI2luY2x1ZGUgIm5zSVByZXNTaGVsbC5oIgogI2luY2x1ZGUg
Im5zUHJlc0NvbnRleHQuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogI2luY2x1ZGUg
Im5zSVByZWZCcmFuY2guaCIKICNpbmNsdWRlICJuc0lQcmVmU2VydmljZS5oIgorI2luY2x1ZGUg
Im5zU2FuZGJveEZsYWdzLmgiCiAKICNpZmRlZiBVU0VXRUFLUkVGUwogI2luY2x1ZGUgIm5zSVdl
YWtSZWZlcmVuY2UuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIAogc3Rh
dGljIGNvbnN0IGNoYXIgKnNKU1N0YWNrQ29udHJhY3RJRD0iQG1vemlsbGEub3JnL2pzL3hwYy9D
b250ZXh0U3RhY2s7MSI7CkBAIC01NzAsMTYgKzU3MSwzMyBAQCBuc1dpbmRvd1dhdGNoZXI6Ok9w
ZW5XaW5kb3dKU0ludGVybmFsKG5zCiAgIH0KIAogICBpZiAoIW5ld0RvY1NoZWxsSXRlbSkgewog
ICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGVpdGhlciBvcGVuIHVwIGEgbmV3IHdpbmRvdyBvdXJzZWx2
ZXMgb3IgYXNrIGEKICAgICAvLyBuc0lXaW5kb3dQcm92aWRlciBmb3Igb25lLiAgSW4gZWl0aGVy
IGNhc2UsIHdlJ2xsIHdhbnQgdG8gc2V0IHRoZSByaWdodAogICAgIC8vIG5hbWUgb24gaXQuCiAg
ICAgd2luZG93TmVlZHNOYW1lID0gdHJ1ZTsKIAorICAgIC8vIElmIHRoZSBwYXJlbnQgdHJ5aW5n
IHRvIG9wZW4gYSBuZXcgd2luZG93IGlzIHNhbmRib3hlZCwKKyAgICAvLyB0aGlzIGlzIG5vdCBh
bGxvd2VkIGFuZCB3ZSBmYWlsIGhlcmUuCisgICAgaWYgKGFQYXJlbnQpIHsKKyAgICAgIG5zQ09N
UHRyPG5zSURPTURvY3VtZW50PiBkb21kb2M7CisgICAgICBhUGFyZW50LT5HZXREb2N1bWVudChn
ZXR0ZXJfQWRkUmVmcyhkb21kb2MpKTsKKyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2Mg
PSBkb19RdWVyeUludGVyZmFjZShkb21kb2MpOworCisgICAgICBpZiAoZG9jKSB7CisgICAgICAg
IFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+
U2FuZGJveEZsYWdzKCk7CisKKyAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9O
QVZJR0FUSU9OKSB7CisgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9CisKICAgICAvLyBOb3cgY2hlY2sgd2hldGhlciBpdCdzIG9rIHRv
IGFzayBhIHdpbmRvdyBwcm92aWRlciBmb3IgYSB3aW5kb3cuICBEb24ndAogICAgIC8vIGRvIGl0
IGlmIHdlJ3JlIG9wZW5pbmcgYSBkaWFsb2cgb3IgaWYgb3VyIHBhcmVudCBpcyBhIGNocm9tZSB3
aW5kb3cgb3IKICAgICAvLyBpZiB3ZSdyZSBvcGVuaW5nIHNvbWV0aGluZyB0aGF0IGhhcyBtb2Rh
bCwgZGlhbG9nLCBvciBjaHJvbWUgZmxhZ3Mgc2V0LgogICAgIG5zQ09NUHRyPG5zSURPTUNocm9t
ZVdpbmRvdz4gY2hyb21lV2luID0gZG9fUXVlcnlJbnRlcmZhY2UoYVBhcmVudCk7CiAgICAgaWYg
KCFhRGlhbG9nICYmICFjaHJvbWVXaW4gJiYKICAgICAgICAgIShjaHJvbWVGbGFncyAmIChuc0lX
ZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfTU9EQUwgICAgICAgICB8CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX09QRU5BU19ESUFMT0cgfCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFT
X0NIUk9NRSkpKSB7Cg==
</data>
<flag name="review"
          id="526710"
          type_id="937"
          status="-"
          setter="smaug"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>634620</attachid>
            <date>2012-06-19 15:22:30 -0700</date>
            <delta_ts>2012-07-02 16:56:54 -0700</delta_ts>
            <desc>workaround for workers needing a string origin v2</desc>
            <filename>iframe_sandbox_worker_string_origin_workaround</filename>
            <type>text/plain</type>
            <size>2127</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMDg0NzNmZTU3OGU3M2VjZTM5NmIwYzc4ODdi
Mzg3YTAyOWIwNzMwNAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KYWxs
b3cgd29ya2VycyB0byBoYXZlIGEgbnVsbCBwcmluY2lwYWwKCmRpZmYgLS1naXQgYS9kb20vd29y
a2Vycy9Xb3JrZXJQcml2YXRlLmNwcCBiL2RvbS93b3JrZXJzL1dvcmtlclByaXZhdGUuY3BwCi0t
LSBhL2RvbS93b3JrZXJzL1dvcmtlclByaXZhdGUuY3BwCisrKyBiL2RvbS93b3JrZXJzL1dvcmtl
clByaXZhdGUuY3BwCkBAIC02LDE2ICs2LDE3IEBACiAKICNpbmNsdWRlICJXb3JrZXJQcml2YXRl
LmgiCiAKICNpbmNsdWRlICJtb3pJVGhpcmRQYXJ0eVV0aWwuaCIKICNpbmNsdWRlICJuc0lDbGFz
c0luZm8uaCIKICNpbmNsdWRlICJuc0lDb25zb2xlU2VydmljZS5oIgogI2luY2x1ZGUgIm5zSURP
TUZpbGUuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURvY1NoZWxs
LmgiCiAjaW5jbHVkZSAibnNJSlNDb250ZXh0U3RhY2suaCIKICNpbmNsdWRlICJuc0lNZW1vcnlS
ZXBvcnRlci5oIgogI2luY2x1ZGUgIm5zSVNjcmlwdEVycm9yLmgiCiAjaW5jbHVkZSAibnNJU2Ny
aXB0R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAibnNQSURPTVdpbmRvdy5oIgogI2luY2x1ZGUgIm5zSVRleHRUb1N1YlVSSS5o
IgogI2luY2x1ZGUgIm5zSVRpbWVyLmgiCkBAIC0zMiwxNiArMzMsMTcgQEAKICNpbmNsdWRlICJu
c0FsZ29yaXRobS5oIgogI2luY2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCiAjaW5jbHVkZSAibnNE
T01DbGFzc0luZm8uaCIKICNpbmNsdWRlICJuc0RPTUpTVXRpbHMuaCIKICNpbmNsdWRlICJuc0dV
SUV2ZW50LmgiCiAjaW5jbHVkZSAibnNKU0Vudmlyb25tZW50LmgiCiAjaW5jbHVkZSAibnNKU1V0
aWxzLmgiCiAjaW5jbHVkZSAibnNOZXRVdGlsLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3Mu
aCIKICNpbmNsdWRlICJuc1RocmVhZFV0aWxzLmgiCiAjaW5jbHVkZSAieHBjcHVibGljLmgiCiAj
aW5jbHVkZSAibW96aWxsYS9BdHRyaWJ1dGVzLmgiCiAKICNpZmRlZiBBTkRST0lECiAjaW5jbHVk
ZSA8YW5kcm9pZC9sb2cuaD4KICNlbmRpZgogCkBAIC0yNTUxLDE2ICsyNTUzLDI0IEBAIFdvcmtl
clByaXZhdGU6OkNyZWF0ZShKU0NvbnRleHQqIGFDeCwgSlMKICAgICAgICAgICBKU19SZXBvcnRF
cnJvcihhQ3gsICJDb3VsZCBub3QgZGV0ZXJtaW5lIGlmIGNvZGViYXNlIGlzIGZpbGUhIik7CiAg
ICAgICAgICAgcmV0dXJuIG5zbnVsbDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc0ZpbGUp
IHsKICAgICAgICAgICAvLyBYWFggRml4IHRoaXMsIG5lZWQgYSByZWFsIGRvbWFpbiBoZXJlLgog
ICAgICAgICAgIGRvbWFpbiA9IGZpbGU7CiAgICAgICAgIH0KKyAgICAgICAgLy8gV29ya2Fyb3Vu
ZCBmb3Igd29ya2VycyBuZWVkaW5nIGEgc3RyaW5nIGRvbWFpbiAtIHdpbGwgYmUgZml4ZWQKKyAg
ICAgICAgLy8gaW4gYSBmb2xsb3d1cCBhZnRlciB0aGlzIGxhbmRzLgorICAgICAgICBlbHNlIGlm
IChkb2N1bWVudC0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfT1JJR0lOKSB7CisgICAgICAg
ICAgaWYgKE5TX0ZBSUxFRChjb2RlYmFzZS0+R2V0QXNjaWlTcGVjKGRvbWFpbikpKSB7CisgICAg
ICAgICAgICBKU19SZXBvcnRFcnJvcihhQ3gsICJDb3VsZCBub3QgZ2V0IFVSSSdzIHNwZWMgZm9y
IHNhbmRib3hlZCBkb2N1bWVudCEiKTsKKyAgICAgICAgICAgIHJldHVybiBuc251bGw7CisgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgIG5zQ09NUHRyPG1v
eklUaGlyZFBhcnR5VXRpbD4gdGhpcmRQYXJ0eVV0aWwgPQogICAgICAgICAgICAgZG9fR2V0U2Vy
dmljZShUSElSRFBBUlRZVVRJTF9DT05UUkFDVElEKTsKICAgICAgICAgICBpZiAoIXRoaXJkUGFy
dHlVdGlsKSB7CiAgICAgICAgICAgICBKU19SZXBvcnRFcnJvcihhQ3gsICJDb3VsZCBub3QgZ2V0
IHRoaXJkIHBhcnR5IGhlbHBlciBzZXJ2aWNlISIpOwogICAgICAgICAgICAgcmV0dXJuIG5zbnVs
bDsKICAgICAgICAgICB9CiAK
</data>
<flag name="review"
          id="526747"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>638540</attachid>
            <date>2012-07-02 16:56:54 -0700</date>
            <delta_ts>2012-08-04 09:09:09 -0700</delta_ts>
            <desc>workaround for workers needing a string origin v3</desc>
            <filename>iframe_sandbox_worker_string_origin_workaround</filename>
            <type>text/plain</type>
            <size>2129</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZmFmZjk1YmI5OWI0NWQ2ODE4MGY0MmFhZWI5
MDIzMDc5NGU5OWFmMwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KYWxs
b3cgd29ya2VycyB0byBoYXZlIGEgbnVsbCBwcmluY2lwYWwKCmRpZmYgLS1naXQgYS9kb20vd29y
a2Vycy9Xb3JrZXJQcml2YXRlLmNwcCBiL2RvbS93b3JrZXJzL1dvcmtlclByaXZhdGUuY3BwCi0t
LSBhL2RvbS93b3JrZXJzL1dvcmtlclByaXZhdGUuY3BwCisrKyBiL2RvbS93b3JrZXJzL1dvcmtl
clByaXZhdGUuY3BwCkBAIC02LDE2ICs2LDE3IEBACiAKICNpbmNsdWRlICJXb3JrZXJQcml2YXRl
LmgiCiAKICNpbmNsdWRlICJtb3pJVGhpcmRQYXJ0eVV0aWwuaCIKICNpbmNsdWRlICJuc0lDbGFz
c0luZm8uaCIKICNpbmNsdWRlICJuc0lDb25zb2xlU2VydmljZS5oIgogI2luY2x1ZGUgIm5zSURP
TUZpbGUuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURvY1NoZWxs
LmgiCiAjaW5jbHVkZSAibnNJSlNDb250ZXh0U3RhY2suaCIKICNpbmNsdWRlICJuc0lNZW1vcnlS
ZXBvcnRlci5oIgogI2luY2x1ZGUgIm5zSVNjcmlwdEVycm9yLmgiCiAjaW5jbHVkZSAibnNJU2Ny
aXB0R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAibnNQSURPTVdpbmRvdy5oIgogI2luY2x1ZGUgIm5zSVRleHRUb1N1YlVSSS5o
IgogI2luY2x1ZGUgIm5zSVRpbWVyLmgiCkBAIC0zMSwxNiArMzIsMTcgQEAKICNpbmNsdWRlICJq
cy9NZW1vcnlNZXRyaWNzLmgiCiAjaW5jbHVkZSAibnNBbGdvcml0aG0uaCIKICNpbmNsdWRlICJu
c0NvbnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zRE9NSlNVdGlscy5oIgogI2luY2x1ZGUgIm5z
R1VJRXZlbnQuaCIKICNpbmNsdWRlICJuc0pTRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJuc0pT
VXRpbHMuaCIKICNpbmNsdWRlICJuc05ldFV0aWwuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFn
cy5oIgogI2luY2x1ZGUgIm5zVGhyZWFkVXRpbHMuaCIKICNpbmNsdWRlICJ4cGNwdWJsaWMuaCIK
ICNpbmNsdWRlICJtb3ppbGxhL0F0dHJpYnV0ZXMuaCIKIAogI2lmZGVmIEFORFJPSUQKICNpbmNs
dWRlIDxhbmRyb2lkL2xvZy5oPgogI2VuZGlmCiAKQEAgLTI1NTAsMTYgKzI1NTIsMjQgQEAgV29y
a2VyUHJpdmF0ZTo6Q3JlYXRlKEpTQ29udGV4dCogYUN4LCBKUwogICAgICAgICAgIEpTX1JlcG9y
dEVycm9yKGFDeCwgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaWYgY29kZWJhc2UgaXMgZmlsZSEiKTsK
ICAgICAgICAgICByZXR1cm4gbnNudWxsOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzRmls
ZSkgewogICAgICAgICAgIC8vIFhYWCBGaXggdGhpcywgbmVlZCBhIHJlYWwgZG9tYWluIGhlcmUu
CiAgICAgICAgICAgZG9tYWluID0gZmlsZTsKICAgICAgICAgfQorICAgICAgICAvLyBXb3JrYXJv
dW5kIGZvciB3b3JrZXJzIG5lZWRpbmcgYSBzdHJpbmcgZG9tYWluIC0gd2lsbCBiZSBmaXhlZAor
ICAgICAgICAvLyBpbiBhIGZvbGxvd3VwIGFmdGVyIHRoaXMgbGFuZHMuCisgICAgICAgIGVsc2Ug
aWYgKGRvY3VtZW50LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICAg
ICAgICBpZiAoTlNfRkFJTEVEKGNvZGViYXNlLT5HZXRBc2NpaVNwZWMoZG9tYWluKSkpIHsKKyAg
ICAgICAgICAgIEpTX1JlcG9ydEVycm9yKGFDeCwgIkNvdWxkIG5vdCBnZXQgVVJJJ3Mgc3BlYyBm
b3Igc2FuZGJveGVkIGRvY3VtZW50ISIpOworICAgICAgICAgICAgcmV0dXJuIG5zbnVsbDsKKyAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgbnNDT01QdHI8
bW96SVRoaXJkUGFydHlVdGlsPiB0aGlyZFBhcnR5VXRpbCA9CiAgICAgICAgICAgICBkb19HZXRT
ZXJ2aWNlKFRISVJEUEFSVFlVVElMX0NPTlRSQUNUSUQpOwogICAgICAgICAgIGlmICghdGhpcmRQ
YXJ0eVV0aWwpIHsKICAgICAgICAgICAgIEpTX1JlcG9ydEVycm9yKGFDeCwgIkNvdWxkIG5vdCBn
ZXQgdGhpcmQgcGFydHkgaGVscGVyIHNlcnZpY2UhIik7CiAgICAgICAgICAgICByZXR1cm4gbnNu
dWxsOwogICAgICAgICAgIH0KIAo=
</data>
<flag name="review"
          id="529811"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>638541</attachid>
            <date>2012-07-02 17:03:11 -0700</date>
            <delta_ts>2012-07-05 18:37:13 -0700</delta_ts>
            <desc>iframe sandbox v19</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>54740</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOTAxN2IyOTcwMzAyNzczNzA4NDY0MjFlY2E4
MTMwNDI3YjU1N2Q3ZAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgx
NiwxNiArODE2LDI2IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYgYVNhbmRi
b3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVu
KSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAgICogcHJvcGVydGllcyBm
aWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5zcmVzdWx0IEZvcm1hdExv
Y2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQYXJhbXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVBhcmFtc0xlbmd0aCwK
QEAgLTE5MzYsNDIgKzE5NDYsNDQgQEAgcHVibGljOgogICAgKiBmcm9tIHRoZSBkb2N1bWVudCBp
dCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAKICAgLyoqCiAgICAqIFNl
dCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUgZ2l2ZW4gY2hhbm5lbCwg
aWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2YgYUNoYW5uZWwuICBhUHJp
bmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJvdXRCbGFuayBpcyB0cnVl
LCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBpdC4gSWYgYUZvcmNlT3du
ZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9uIHRoZSBjaGFubmVsLCBl
dmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAgICogZnJvbSB0aGUgY2hh
bm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRoZSBwcmluY2lwYWwgd2Fz
IHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwuCiAgICAqLwogICBzdGF0
aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIgPSBmYWxzZSk7CiAK
ICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNlNjRTdHJpbmcpOwogCiAg
IHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFzY2lpU3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhKTsKIAogICAvKiogSWYg
YUpTQXJyYXkgaXMgYSBKYXZhc2NyaXB0IGFycmF5LCB0aGlzIG1ldGhvZCBpdGVyYXRlcyBvdmVy
IGl0cwogICAgKiAgZWxlbWVudHMgYW5kIGFwcGVuZHMgdmFsdWVzIHRvIGFSZXRWYWwgYXMgbnNJ
QXRvbXMuCiAgICAqICBAdGhyb3cgTlNfRVJST1JfSUxMRUdBTF9WQUxVRSBpZiBhSlNBcnJheSBp
c24ndCBhIEpTIGFycmF5LgogICAgKi8gCiAgIHN0YXRpYyBuc3Jlc3VsdCBKU0FycmF5VG9BdG9t
QXJyYXkoSlNDb250ZXh0KiBhQ3gsIGNvbnN0IEpTOjpWYWx1ZSYgYUpTQXJyYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01BcnJheTxuc0lBdG9tPiYgYVJldFZh
bCk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBwYXNz
ZWQgaW4gcGFyYW1ldGVyIGhhcyB0aGUgYXV0b2NvbXBsZXRlCi0gICAqIGZ1bmN0aW9ubmFsaXR5
IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIuCisgICAq
IGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9y
bSBvd25lci4KICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFrZSBzdXJlIGF1dG9jb21w
bGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0eXBlLgogICAgKgogICAg
KiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNrLiBOT1RFOiBhSW5wdXQg
Y2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IGhh
cyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBib29sIElzQXV0b2NvbXBs
ZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQpOwogCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGlj
L25zSURvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisr
KyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaApAQCAtODgsMTggKzg4LDE4IEBA
IGNsYXNzIExvYWRlcjsKIAogbmFtZXNwYWNlIGRvbSB7CiBjbGFzcyBMaW5rOwogY2xhc3MgRWxl
bWVudDsKIH0gLy8gbmFtZXNwYWNlIGRvbQogfSAvLyBuYW1lc3BhY2UgbW96aWxsYQogCiAjZGVm
aW5lIE5TX0lET0NVTUVOVF9JSUQgXAoteyAweDhjNmExZTYyLCAweGQ1YWQsIDB4NDI5NywgXAot
ICB7IDB4YjksIDB4NDEsIDB4NjQsIDB4NDksIDB4MjIsIDB4MmUsIDB4YzQsIDB4ZjAgfSB9Cit7
IDB4NTdmZTQ0YWUsIDB4NjY1NiwgMHg0NGI4LCBcCisgIHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhh
NywgMHg0MywgMHgyOCwgMHhiZSwgMHg4NiB9IH0KIAogLy8gRmxhZyBmb3IgQWRkU3R5bGVTaGVl
dCgpLgogI2RlZmluZSBOU19TVFlMRVNIRUVUX0ZST01fQ0FUQUxPRyAgICAgICAgICAgICAgICAo
MSA8PCAwKQogCiAvLyBFbnVtIGZvciByZXF1ZXN0aW5nIGEgcGFydGljdWxhciB0eXBlIG9mIGRv
Y3VtZW50IHdoZW4gY3JlYXRpbmcgYSBkb2MKIGVudW0gRG9jdW1lbnRGbGF2b3IgewogICBEb2N1
bWVudEZsYXZvckxlZ2FjeUd1ZXNzLCAvLyBjb21wYXQgd2l0aCBvbGQgY29kZSB1bnRpbCBtYWRl
IEhUTUw1LWNvbXBsaWFudAogICBEb2N1bWVudEZsYXZvckhUTUwsIC8vIEhUTUxEb2N1bWVudCB3
aXRoIEhUTUxuZXNzIGJpdCBzZXQgdG8gdHJ1ZQpAQCAtNDI3LDE3ICs0MjcsMjYgQEAgcHVibGlj
OgogICAgKiBjYWxsZXJzIGFyZSBleHBlY3RlZCB0byB0YWtlIGFjdGlvbiBhcyBuZWVkZWQgaWYg
dGhleSB3YW50IHRoaXMKICAgICogY2hhbmdlIHRvIGFjdHVhbGx5IGNoYW5nZSBhbnl0aGluZyBp
bW1lZGlhdGVseS4KICAgICogQHNlZSBuc0JpZGlVdGlscy5oCiAgICAqLwogICB2b2lkIFNldEJp
ZGlPcHRpb25zKFBSVWludDMyIGFCaWRpT3B0aW9ucykKICAgewogICAgIG1CaWRpT3B0aW9ucyA9
IGFCaWRpT3B0aW9uczsKICAgfQotICAKKworICAvKioKKyAgICogR2V0IHRoZSBzYW5kYm94IGZs
YWdzIGZvciB0aGlzIGRvY3VtZW50LgorICAgKiBAc2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRo
ZSBwb3NzaWJsZSBmbGFncworICAgKi8KKyAgUFJVaW50MzIgU2FuZGJveEZsYWdzKCkgY29uc3QK
KyAgeworICAgIHJldHVybiBtU2FuZGJveEZsYWdzOworICB9CisKICAgLyoqCiAgICAqIEFjY2Vz
cyBIVFRQIGhlYWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAg
KiBzb3VyY2VzLCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCiAgIHZpcnR1YWwgdm9pZCBH
ZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFIZWFkZXJGaWVsZCwgbnNBU3RyaW5nJiBhRGF0YSkgY29u
c3QgPSAwOwogICB2aXJ0dWFsIHZvaWQgU2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhaGVhZGVyRmll
bGQsIGNvbnN0IG5zQVN0cmluZyYgYURhdGEpID0gMDsKIAogICAvKioKQEAgLTE4NjEsMTYgKzE4
NzAsMjEgQEAgcHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1bWVudCBpcyB0cnVlLCBt
T3JpZ2luYWxEb2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAgIC8vIGRvY3VtZW50Lgog
ICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7CiAKICAgLy8gVGhlIGJp
ZGkgb3B0aW9ucyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBiaXRmaWVsZCBtZWFucyBp
cwogICAvLyBkZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50MzIgbUJpZGlPcHRpb25z
OwogCisgIC8vIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVudC4gVGhlc2UgcmVmbGVj
dCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRoZQorICAvLyBhc3NvY2lh
dGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3RlbnQuIFRoZXNl
IGFyZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRhYmxlIC0gc2VlIG5zU2Fu
ZGJveEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgUFJVaW50MzIgbVNhbmRib3hG
bGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0
cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhlIGRvY3VtZW50J3Mgc2Vj
dXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZm
IC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAgYi9jb250ZW50L2Jh
c2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVu
dFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcApAQCAt
MTc1LDE2ICsxNzUsMTcgQEAgc3RhdGljIE5TX0RFRklORV9DSUQoa1hURlNlcnZpY2VDSUQsIE5T
XwogI2luY2x1ZGUgIm5zRE9NTXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIm5zSURPTURv
Y3VtZW50VHlwZS5oIgogI2luY2x1ZGUgIm5zQ2hhclNlcGFyYXRlZFRva2VuaXplci5oIgogI2lu
Y2x1ZGUgIm5zSUNoYXJzZXREZXRlY3Rvci5oIgogI2luY2x1ZGUgIm5zSUNoYXJzZXREZXRlY3Rp
b25PYnNlcnZlci5oIgogI2luY2x1ZGUgIm5zSVBsYXRmb3JtQ2hhcnNldC5oIgogI2luY2x1ZGUg
Im5zSUVkaXRvci5oIgogI2luY2x1ZGUgIm5zSUVkaXRvckRvY1NoZWxsLmgiCisjaW5jbHVkZSAi
bnNTYW5kYm94RmxhZ3MuaCIKICNpbmNsdWRlICJtb3ppbGxhL0F0dHJpYnV0ZXMuaCIKIAogI2lu
Y2x1ZGUgIm5zV3JhcHBlckNhY2hlSW5saW5lcy5oIgogCiBleHRlcm4gIkMiIGludCBNT1pfWE1M
VHJhbnNsYXRlRW50aXR5KGNvbnN0IGNoYXIqIHB0ciwgY29uc3QgY2hhciogZW5kLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogbmV4dCwgUFJVbmlj
aGFyKiByZXN1bHQpOwogZXh0ZXJuICJDIiBpbnQgTU9aX1hNTENoZWNrUU5hbWUoY29uc3QgY2hh
ciogcHRyLCBjb25zdCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbnNfYXdhcmUsIGNvbnN0IGNoYXIqKiBjb2xvbik7CkBAIC04ODQsMTYgKzg4NSw2MiBA
QCBuc0NvbnRlbnRVdGlsczo6R2V0UGFyc2VyU2VydmljZSgpCiAgICAgbnNyZXN1bHQgcnYgPSBD
YWxsR2V0U2VydmljZShrUGFyc2VyU2VydmljZUNJRCwgJnNQYXJzZXJTZXJ2aWNlKTsKICAgICBp
ZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgICAgc1BhcnNlclNlcnZpY2UgPSBuc251bGw7CiAgICAg
fQogICB9CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2aWNlOwogfQorLyoqCisgKiBBIGhlbHBlciBm
dW5jdGlvbiB0aGF0IHBhcnNlcyBhIHNhbmRib3ggYXR0cmlidXRlIChvZiBhbiA8aWZyYW1lPiBv
cgorICogYSBDU1AgZGlyZWN0aXZlKSBhbmQgY29udmVydHMgaXQgdG8gdGhlIHNldCBvZiBmbGFn
cyB1c2VkIGludGVybmFsbHkuCisgKgorICogQHBhcmFtIGFBdHRyaWJ1dGUgICAgdGhlIHZhbHVl
IG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZQorICogQHJldHVybiAgICAgICAgICAgICAgdGhlIHNl
dCBvZiBmbGFncworICovCitQUlVpbnQzMgorbnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0
dHJpYnV0ZVRvRmxhZ3MoY29uc3QgbnNBU3RyaW5nJiBhU2FuZGJveEF0dHJWYWx1ZSkKK3sKKyAg
Ly8gSWYgdGhlcmUncyBhIHNhbmRib3ggYXR0cmlidXRlIGF0IGFsbCAoYW5kIHRoZXJlIGlzIGlm
IHRoaXMgaXMgYmVpbmcKKyAgLy8gY2FsbGVkKSwgc3RhcnQgb2ZmIGJ5IHNldHRpbmcgYWxsIHRo
ZSByZXN0cmljdGlvbiBmbGFncy4KKyAgUFJVaW50MzIgb3V0ID0gU0FOREJPWEVEX05BVklHQVRJ
T04gfAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiB8Cisg
ICAgICAgICAgICAgICAgIFNBTkRCT1hFRF9QTFVHSU5TIHwKKyAgICAgICAgICAgICAgICAgU0FO
REJPWEVEX09SSUdJTiB8CisgICAgICAgICAgICAgICAgIFNBTkRCT1hFRF9GT1JNUyB8CisgICAg
ICAgICAgICAgICAgIFNBTkRCT1hFRF9TQ1JJUFRTIHwKKyAgICAgICAgICAgICAgICAgU0FOREJP
WEVEX0FVVE9NQVRJQ19GRUFUVVJFUzsKKworICBpZiAoIWFTYW5kYm94QXR0clZhbHVlLklzRW1w
dHkoKSkgeworICAgIC8vIFRoZSBzZXBhcmF0b3Igb3B0aW9uYWwgZmxhZyBpcyB1c2VkIGJlY2F1
c2UgdGhlIEhUTUw1IHNwZWMgc2F5cyBhbnkKKyAgICAvLyB3aGl0ZXNwYWNlIGlzIG9rIGFzIGEg
c2VwYXJhdG9yLCB3aGljaCBpcyB3aGF0IHRoaXMgZG9lcy4KKyAgICBIVE1MU3BsaXRPblNwYWNl
c1Rva2VuaXplciB0b2tlbml6ZXIoYVNhbmRib3hBdHRyVmFsdWUsICcgJywKKyAgICAgIG5zQ2hh
clNlcGFyYXRlZFRva2VuaXplclRlbXBsYXRlPG5zQ29udGVudFV0aWxzOjpJc0hUTUxXaGl0ZXNw
YWNlPjo6U0VQQVJBVE9SX09QVElPTkFMKTsKKworICAgIHdoaWxlICh0b2tlbml6ZXIuaGFzTW9y
ZVRva2VucygpKSB7CisgICAgICBuc0RlcGVuZGVudFN1YnN0cmluZyB0b2tlbiA9IHRva2VuaXpl
ci5uZXh0VG9rZW4oKTsKKworICAgICAgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwo
ImFsbG93LXNhbWUtb3JpZ2luIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfT1JJR0lO
OworICAgICAgfSBlbHNlIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1m
b3JtcyIpKSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX0ZPUk1TOworICAgICAgfSBlbHNl
IGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zY3JpcHRzIikpIHsKKyAg
ICAgICAgLy8gYWxsb3ctc2NyaXB0cyByZW1vdmVzIGJvdGggU0FOREJPWEVEX1NDUklQVFMgYW5k
CisgICAgICAgIC8vIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMuCisgICAgICAgIG91dCAm
PSB+U0FOREJPWEVEX1NDUklQVFM7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX0FVVE9NQVRJ
Q19GRUFUVVJFUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJh
bCgiYWxsb3ctdG9wLW5hdmlnYXRpb24iKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9U
T1BMRVZFTF9OQVZJR0FUSU9OOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBvdXQ7
Cit9CiAKICNpZmRlZiBNT1pfWFRGCiBuc0lYVEZTZXJ2aWNlKgogbnNDb250ZW50VXRpbHM6Okdl
dFhURlNlcnZpY2UoKQogewogICBpZiAoIXNYVEZTZXJ2aWNlKSB7CiAgICAgbnNyZXN1bHQgcnYg
PSBDYWxsR2V0U2VydmljZShrWFRGU2VydmljZUNJRCwgJnNYVEZTZXJ2aWNlKTsKICAgICBpZiAo
TlNfRkFJTEVEKHJ2KSkgewpAQCAtNjU1MywxNyArNjYwMCwxOCBAQCBuc0NvbnRlbnRVdGlsczo6
VVJJSW5oZXJpdHNTZWN1cml0eUNvbnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFS
ZXN1bHQpOwogfQogCiAvLyBzdGF0aWMKIGJvb2wKIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5u
ZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5rLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIpCiB7CiAgIC8vCiAgIC8vIFNldCB0
aGUgb3duZXIgb2YgdGhlIGNoYW5uZWwsIGJ1dCBvbmx5IGZvciBjaGFubmVscyB0aGF0IGNhbid0
CiAgIC8vIHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQuCiAgIC8vCiAgIC8vIFhY
WDogSXQgc2VlbXMgd3JvbmcgdGhhdCB0aGUgb3duZXIgaXMgaWdub3JlZCAtIGV2ZW4gaWYgb25l
IGlzCiAgIC8vICAgICAgc3VwcGxpZWQpIHVubGVzcyB0aGUgVVJJIGlzIGphdmFzY3JpcHQgb3Ig
ZGF0YSBvciBhYm91dDpibGFuay4KICAgLy8gWFhYOiBJZiB0aGlzIGlzIGV2ZXIgY2hhbmdlZCwg
Y2hlY2sgYWxsIGNhbGxlcnMgZm9yIHdoYXQgb3duZXJzCkBAIC02NTcxLDIzICs2NjE5LDM1IEBA
IG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lcihuc0lQcmkKICAgLy8gICAgICBjb21t
ZW50cyBpbiBuc0RvY1NoZWxsOjpMb2FkVVJJIHdoZXJlIHdlIGZhbGwgYmFjayBvbgogICAvLyAg
ICAgIGluaGVyaXRpbmcgdGhlIG93bmVyIGlmIGNhbGxlZCBmcm9tIGNocm9tZS4gIFRoYXQgd291
bGQgYmUKICAgLy8gICAgICB2ZXJ5IHdyb25nIGlmIHRoaXMgY29kZSBjaGFuZ2VkIGFueXRoaW5n
IGJ1dCBjaGFubmVscyB0aGF0CiAgIC8vICAgICAgY2FuJ3QgcHJvdmlkZSB0aGVpciBvd24gc2Vj
dXJpdHkgY29udGV4dCEKICAgLy8KICAgLy8gICAgICAoQ3VycmVudGx5IGNocm9tZSBVUklzIHNl
dCB0aGUgb3duZXIgd2hlbiB0aGV5IGFyZSBjcmVhdGVkIQogICAvLyAgICAgIFNvIHNldHRpbmcg
YSBOVUxMIG93bmVyIHdvdWxkIGJlIGJhZCEpCiAgIC8vCisgIC8vIElmIGFGb3JjZU93bmVyIGlz
IHRydWUsIHRoZSBvd25lciB3aWxsIGJlIHNldCwgZXZlbiBmb3IgYSBjaGFubmVsIHRoYXQKKyAg
Ly8gY2FuIHByb3ZpZGUgaXRzIG93biBzZWN1cml0eSBjb250ZXh0LiBUaGlzIGlzIHVzZWQgZm9y
IHRoZSBIVE1MNSBJRlJBTUUKKyAgLy8gc2FuZGJveCBhdHRyaWJ1dGUsIHNvIHdlIGNhbiBmb3Jj
ZSB0aGUgY2hhbm5lbCAoYW5kIGl0cyBkb2N1bWVudCkgdG8KKyAgLy8gZXhwbGljaXRseSBoYXZl
IGEgbnVsbCBwcmluY2lwYWwuCiAgIGJvb2wgaW5oZXJpdDsKICAgLy8gV2UgZXhwZWN0IFVSSUlu
aGVyaXRzU2VjdXJpdHlDb250ZXh0IHRvIHJldHVybiBzdWNjZXNzIGZvciBhbgogICAvLyBhYm91
dDpibGFuayBVUkksIHNvIGRvbid0IGNhbGwgTlNfSXNBYm91dEJsYW5rKCkgaWYgdGhpcyBjYWxs
IGZhaWxzLgogICAvLyBUaGlzIGNvbmRpdGlvbiBuZWVkcyB0byBtYXRjaCB0aGUgb25lIGluIG5z
RG9jU2hlbGw6OkludGVybmFsTG9hZCB3aGVyZQogICAvLyB3ZSdyZSBjaGVja2luZyBmb3IgdGhp
bmdzIHRoYXQgd2lsbCB1c2UgdGhlIG93bmVyLgotICBpZiAoTlNfU1VDQ0VFREVEKFVSSUluaGVy
aXRzU2VjdXJpdHlDb250ZXh0KGFVUkksICZpbmhlcml0KSkgJiYKLSAgICAgIChpbmhlcml0IHx8
IChhU2V0VXBGb3JBYm91dEJsYW5rICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSB7CisgIGlm
IChhRm9yY2VPd25lciB8fCAoKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4
dChhVVJJLCAmaW5oZXJpdCkpICYmCisgICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRC
bGFuayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkpKSB7CisjaWZkZWYgREVCVUcKKyAgICAv
LyBBc3NlcnQgdGhhdCBhRm9yY2VPd25lciBpcyBvbmx5IHNldCBmb3IgbnVsbCBwcmluY2lwYWxz
CisgICAgaWYgKGFGb3JjZU93bmVyKSB7CisgICAgICBuc0NPTVB0cjxuc0lVUkk+IG93bmVyVVJJ
OworICAgICAgbnNyZXN1bHQgcnYgPSBhTG9hZGluZ1ByaW5jaXBhbC0+R2V0VVJJKGdldHRlcl9B
ZGRSZWZzKG93bmVyVVJJKSk7CisgICAgICBNT1pfQVNTRVJUKE5TX1NVQ0NFRURFRChydikgJiYg
U2NoZW1lSXMob3duZXJVUkksIE5TX05VTExQUklOQ0lQQUxfU0NIRU1FKSk7CisgICAgfQorI2Vu
ZGlmCiAgICAgYUNoYW5uZWwtPlNldE93bmVyKGFMb2FkaW5nUHJpbmNpcGFsKTsKICAgICByZXR1
cm4gdHJ1ZTsKICAgfQogCiAgIC8vCiAgIC8vIGZpbGU6IHVyaSBzcGVjaWFsLWNhc2luZwogICAv
LwogICAvLyBJZiB0aGlzIGlzIGEgZmlsZTogbG9hZCBvcGVuZWQgZnJvbSBhbm90aGVyIGZpbGU6
IHRoZW4gaXQgbWF5IG5lZWQKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVu
dC5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvYmFz
ZS9zcmMvbnNEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNw
cApAQCAtMjM3NywxNiArMjM3NywzNSBAQCBuc0RvY3VtZW50OjpTdGFydERvY3VtZW50TG9hZChj
b25zdCBjaGFyCiAgICAgRmluZENoYXJJblJlYWRhYmxlKCc7Jywgc2VtaWNvbG9uLCBlbmQpOwog
ICAgIFNldENvbnRlbnRUeXBlSW50ZXJuYWwoU3Vic3RyaW5nKHN0YXJ0LCBzZW1pY29sb24pKTsK
ICAgfQogCiAgIFJldHJpZXZlUmVsZXZhbnRIZWFkZXJzKGFDaGFubmVsKTsKIAogICBtQ2hhbm5l
bCA9IGFDaGFubmVsOwogCisgIC8vIElmIHRoaXMgZG9jdW1lbnQgaXMgYmVpbmcgbG9hZGVkIGJ5
IGEgZG9jc2hlbGwsIGNvcHkgaXRzIHNhbmRib3ggZmxhZ3MKKyAgLy8gdG8gdGhlIGRvY3VtZW50
LiBUaGVzZSBhcmUgaW1tdXRhYmxlIGFmdGVyIGJlaW5nIHNldCBoZXJlLgorICBuc0NPTVB0cjxu
c0lEb2NTaGVsbD4gZG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFjZShhQ29udGFpbmVyKTsKKwor
ICBpZiAoZG9jU2hlbGwpIHsKKyAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTYW5kYm94
RmxhZ3MoJm1TYW5kYm94RmxhZ3MpOworICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisK
KyAgICAvLyBBZGRpdGlvbmFsbHksIGlmIHRoaXMgZG9jc2hlbGwgaGFkIGl0cyBkb2N1bWVudCdz
IHNhbmRib3gKKyAgICAvLyBhdHRyaWJ1dGUgcmVtb3ZlZCBwcmlvciB0byB0aGlzIGxvYWQsIHdl
IG5lZWQgdG8gcmUtZW5hYmxlCisgICAgLy8gcGx1Z2lucyBmb3IgdGhpcyBkb2NzaGVsbC4KKyAg
ICBib29sIHNhbmRib3hDbGVhcmVkOworICAgIGlmIChOU19TVUNDRUVERUQoZG9jU2hlbGwtPkdl
dFNhbmRib3hDbGVhcmVkKCZzYW5kYm94Q2xlYXJlZCkpICYmCisgICAgICAgICBzYW5kYm94Q2xl
YXJlZCkgeworICAgICAgZG9jU2hlbGwtPlNldEFsbG93UGx1Z2lucyh0cnVlKTsKKyAgICAgIGRv
Y1NoZWxsLT5TZXRTYW5kYm94Q2xlYXJlZChmYWxzZSk7CisgICAgfQorICB9CisKICAgbnNyZXN1
bHQgcnYgPSBJbml0Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgcmV0
dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNEb2N1bWVudDo6SW5pdENTUCgpCmRpZmYgLS1n
aXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9iYXNlL3Ny
Yy9uc0ZyYW1lTG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIu
Y3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTc4LDE2ICs3
OCwxOSBAQAogI2luY2x1ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96
aWxsYS9QcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIm1vemlsbGEvdW51c2VkLmgiCiAjaW5jbHVk
ZSAibW96aWxsYS9kb20vRWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvbGF5b3V0L1JlbmRl
ckZyYW1lUGFyZW50LmgiCiAKICNpbmNsdWRlICJqc2FwaS5oIgogCisjaW5jbHVkZSAibnNIVE1M
SUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCisKIHVzaW5nIG5h
bWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5h
bWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5b3V0
OwogdHlwZWRlZiBGcmFtZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7CiAKIGNsYXNzIG5zQXN5bmNE
b2NTaGVsbERlc3Ryb3llciA6IHB1YmxpYyBuc1J1bm5hYmxlCiB7CkBAIC00MzksMTYgKzQ0Miw0
NSBAQCBuc0ZyYW1lTG9hZGVyOjpSZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3Qg
dG8gYmUgc2FmZSwgcmVjaGVjayB1cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQp
OwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
TG9hZEluZm8+IGxvYWRJbmZvOwogICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9B
ZGRSZWZzKGxvYWRJbmZvKSk7CiAgIE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9G
QUlMVVJFKTsKIAorICAvLyBJcyB0aGlzIGFuIDxpZnJhbWU+IHdpdGggYSBzYW5kYm94IGF0dHJp
YnV0ZSBvciBhIHBhcmVudCB3aGljaCBpcworICAvLyBzYW5kYm94ZWQgPworICBuc0hUTUxJRnJh
bWVFbGVtZW50KiBpZnJhbWUgPQorICAgIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkZyb21Db250ZW50
KG1Pd25lckNvbnRlbnQpOworCisgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisKKyAgaWYg
KGlmcmFtZSkgeworICAgIHNhbmRib3hGbGFncyA9IGlmcmFtZS0+R2V0U2FuZGJveEZsYWdzKCk7
CisKKyAgICBQUlVpbnQzMiBwYXJlbnRTYW5kYm94RmxhZ3MgPSBpZnJhbWUtPk93bmVyRG9jKCkt
PlNhbmRib3hGbGFncygpOworCisgICAgaWYgKHNhbmRib3hGbGFncyB8fCBwYXJlbnRTYW5kYm94
RmxhZ3MpIHsKKyAgICAgIC8vIFRoZSBjaGlsZCBjYW4gb25seSBhZGQgcmVzdHJpY3Rpb25zLCBu
b3QgcmVtb3ZlIHRoZW0uCisgICAgICBzYW5kYm94RmxhZ3MgfD0gcGFyZW50U2FuZGJveEZsYWdz
OworCisgICAgICBtRG9jU2hlbGwtPlNldFNhbmRib3hGbGFncyhzYW5kYm94RmxhZ3MpOworCisg
ICAgICAvLyBTZXQgdXAgdGhlIGFjdHVhbCBzYW5kYm94aW5nIGZvciBwbHVnaW5zIGFzIHNwZWNp
ZmllZC4KKyAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfUExVR0lOUykgeworICAg
ICAgICBtRG9jU2hlbGwtPlNldEFsbG93UGx1Z2lucyhmYWxzZSk7CisgICAgICB9CisgICAgfQor
ICB9CisKKyAgLy8gSWYgdGhpcyBpcyBhbiA8aWZyYW1lPiBhbmQgaXQncyBzYW5kYm94ZWQgd2l0
aCByZXNwZWN0IHRvIG9yaWdpbgorICAvLyB3ZSB3aWxsIHNldCBpdCB1cCB3aXRoIGEgbnVsbCBw
cmluY2lwYWwgbGF0ZXIgaW4gbnNEb2NTaGVsbDo6RG9VUklMb2FkLgorICAvLyBXZSBkbyBpdCB0
aGVyZSB0byBjb3JyZWN0bHkgc2FuZGJveCBjb250ZW50IHRoYXQgd2FzIGxvYWRlZCBpbnRvCisg
IC8vIHRoZSBpZnJhbWUgdmlhIG90aGVyIG1ldGhvZHMgdGhhbiB0aGUgc3JjIGF0dHJpYnV0ZS4K
ICAgLy8gV2UnbGwgdXNlIG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZSBkb2N1bWVudCBs
b2FkZWQgaW5zaWRlIHVzLiAgVGhpcwogICAvLyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRv
IHByZXZlbnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbgogICAvLyBzdWJmcmFt
ZXMhCiAgIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkp
OwogCiAgIG5zQ09NUHRyPG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVudC0+
Tm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNH
a0F0b21MaXN0LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCi0tLSBhL2NvbnRl
bnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRv
bUxpc3QuaApAQCAtNjIsMTcgKzYyLDIxIEBAIEdLX0FUT00oYWN0dWF0ZSwgImFjdHVhdGUiKQog
R0tfQVRPTShhZGRyZXNzLCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVyLCAiYWZ0ZXIiKQogR0tf
QVRPTShhZnRlcl9lbmQsICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRlcl9zdGFydCwgImFmdGVy
X3N0YXJ0IikKIEdLX0FUT00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9NKGFsaW5rLCAiYWxpbmsi
KQogR0tfQVRPTShhbGwsICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50cywgImFsbG93ZXZlbnRz
IikKK0dLX0FUT00oYWxsb3dmb3JtcywgImFsbG93LWZvcm1zIikKIEdLX0FUT00oYWxsb3duZWdh
dGl2ZWFzc2VydGlvbnMsICJhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucyIpCitHS19BVE9NKGFsbG93
c2FtZW9yaWdpbiwgImFsbG93LXNhbWUtb3JpZ2luIikKK0dLX0FUT00oYWxsb3dzY3JpcHRzLCAi
YWxsb3ctc2NyaXB0cyIpCitHS19BVE9NKGFsbG93dG9wbmF2aWdhdGlvbiwgImFsbG93LXRvcC1u
YXZpZ2F0aW9uIikKIEdLX0FUT00oYWxsb3d1bnRydXN0ZWQsICJhbGxvd3VudHJ1c3RlZCIpCiBH
S19BVE9NKGFsdCwgImFsdCIpCiBHS19BVE9NKGFsdGVybmF0ZSwgImFsdGVybmF0ZSIpCiBHS19B
VE9NKGFsd2F5cywgImFsd2F5cyIpCiBHS19BVE9NKGFuY2VzdG9yLCAiYW5jZXN0b3IiKQogR0tf
QVRPTShhbmNlc3Rvck9yU2VsZiwgImFuY2VzdG9yLW9yLXNlbGYiKQogR0tfQVRPTShfYW5kLCAi
YW5kIikKIEdLX0FUT00oYW55LCAiYW55IikKQEAgLTgzOCwxNiArODQyLDE3IEBAIEdLX0FUT00o
cm93c3BhbiwgInJvd3NwYW4iKQogR0tfQVRPTShycCwgInJwIikKIEdLX0FUT00ocnQsICJydCIp
CiBHS19BVE9NKHJ0bCwgInJ0bCIpCiBHS19BVE9NKHJ1YnksICJydWJ5IikKIEdLX0FUT00ocnVs
ZSwgInJ1bGUiKQogR0tfQVRPTShydWxlcywgInJ1bGVzIikKIEdLX0FUT00ocywgInMiKQogR0tf
QVRPTShzYW1wLCAic2FtcCIpCitHS19BVE9NKHNhbmRib3gsICJzYW5kYm94IikKIEdLX0FUT00o
c2JhdHRyLCAic2JhdHRyIikKIEdLX0FUT00oc2NhbGUsICJzY2FsZSIpCiBHS19BVE9NKHNjYW4s
ICJzY2FuIikKIEdLX0FUT00oc2NoZW1lLCAic2NoZW1lIikKIEdLX0FUT00oc2NvcGUsICJzY29w
ZSIpCiBHS19BVE9NKHNjb3BlZCwgInNjb3BlZCIpCiBHS19BVE9NKHNjcmVlbiwgInNjcmVlbiIp
CiBHS19BVE9NKHNjcmVlblgsICJzY3JlZW5YIikKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9z
cmMvbnNTYW5kYm94RmxhZ3MuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3MuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMv
bnNTYW5kYm94RmxhZ3MuaApAQCAtMCwwICsxLDU4IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWIt
d2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICov
DQorLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRo
ZSBNb3ppbGxhIFB1YmxpYw0KKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBN
UEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwNCisgKiBZb3UgY2FuIG9idGFp
biBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLw0KKw0KKy8qDQorICogQ29u
c3RhbnQgZmxhZ3MgdGhhdCBkZXNjcmliZSBob3cgYSBkb2N1bWVudCBpcyBzYW5kYm94ZWQgYWNj
b3JkaW5nIHRvIHRoZQ0KKyAqIEhUTUw1IHNwZWMuDQorICovDQorDQorI2lmbmRlZiBuc1NhbmRi
b3hGbGFnc19oX19fDQorI2RlZmluZSBuc1NhbmRib3hGbGFnc19oX19fDQorDQorLyoqDQorICog
VGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIGJyb3dzaW5nIGNvbnRl
eHRzIG90aGVyIHRoYW4NCisgKiB0aGUgc2FuZGJveGVkIGJyb3dzaW5nIGNvbnRleHQgaXRzZWxm
IChvciBicm93c2luZyBjb250ZXh0cyBmdXJ0aGVyDQorICogbmVzdGVkIGluc2lkZSBpdCksIGFu
ZCB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWduZWQg
bG9uZyBTQU5EQk9YRURfTkFWSUdBVElPTiAgPSAweDE7DQorDQorLyoqDQorICogVGhpcyBmbGFn
IHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWlyIHRvcC1sZXZlbCBicm93c2lu
Zw0KKyAqIGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfVE9Q
TEVWRUxfTkFWSUdBVElPTiA9IDB4MjsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgcHJldmVudHMg
Y29udGVudCBmcm9tIGluc3RhbnRpYXRpbmcgcGx1Z2lucywgd2hldGhlciB1c2luZyB0aGUNCisg
KiBlbWJlZCBlbGVtZW50LCB0aGUgb2JqZWN0IGVsZW1lbnQsIHRoZSBhcHBsZXQgZWxlbWVudCwg
b3IgdGhyb3VnaA0KKyAqIG5hdmlnYXRpb24gb2YgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwg
dW5sZXNzIHRob3NlIHBsdWdpbnMgY2FuIGJlDQorICogc2VjdXJlZC4NCisgKi8NCitjb25zdCB1
bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5TID0gMHg0Ow0KKw0KKy8qKg0KKyAqIFRoaXMg
ZmxhZyBmb3JjZXMgY29udGVudCBpbnRvIGEgdW5pcXVlIG9yaWdpbiwgdGh1cyBwcmV2ZW50aW5n
IGl0IGZyb20NCisgKiBhY2Nlc3Npbmcgb3RoZXIgY29udGVudCBmcm9tIHRoZSBzYW1lIG9yaWdp
bi4NCisgKiBUaGlzIGZsYWcgYWxzbyBwcmV2ZW50cyBzY3JpcHQgZnJvbSByZWFkaW5nIGZyb20g
b3Igd3JpdGluZyB0byB0aGUNCisgKiBkb2N1bWVudC5jb29raWUgSURMIGF0dHJpYnV0ZSwgYW5k
IGJsb2NrcyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxv
bmcgU0FOREJPWEVEX09SSUdJTiA9IDB4ODsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tz
IGZvcm0gc3VibWlzc2lvbi4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9G
T1JNUyA9IDB4MTA7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBzY3JpcHQgZXhlY3V0
aW9uLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1NDUklQVFMgPSAweDIw
Ow0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3MgZmVhdHVyZXMgdGhhdCB0cmlnZ2VyIGF1
dG9tYXRpY2FsbHksIHN1Y2ggYXMNCisgKiBhdXRvbWF0aWNhbGx5IHBsYXlpbmcgYSB2aWRlbyBv
ciBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIGEgZm9ybSBjb250cm9sLg0KKyAqLw0KK2NvbnN0IHVu
c2lnbmVkIGxvbmcgU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUyA9IDB4NDA7DQorI2VuZGlm
DQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAgYi9jb250
ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25z
U2NyaXB0TG9hZGVyLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNw
cApAQCAtMzcsMTYgKzM3LDE3IEBACiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5
LmgiCiAjaW5jbHVkZSAicHJsb2cuaCIKICNpbmNsdWRlICJuc0lDaGFubmVsUG9saWN5LmgiCiAj
aW5jbHVkZSAibnNDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNDUlQuaCIKICNpbmNsdWRl
ICJuc0NvbnRlbnRDcmVhdG9yRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAibnNHZW5lcmljRWxlbWVu
dC5oIgogI2luY2x1ZGUgIm5zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUgIm5z
U2FuZGJveEZsYWdzLmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL0Z1bmN0aW9uVGltZXIuaCIKICNp
bmNsdWRlICJtb3ppbGxhL0NPUlNNb2RlLmgiCiAjaW5jbHVkZSAibW96aWxsYS9BdHRyaWJ1dGVz
LmgiCiAKICNpZmRlZiBQUl9MT0dHSU5HCiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnQ3NwUFJM
b2c7CiAjZW5kaWYKQEAgLTI3MywxNiArMjc0LDIxIEBAIG5zU2NyaXB0TG9hZGVyOjpTdGFydExv
YWQobnNTY3JpcHRMb2FkUmUKICAgaWYgKCF3aW5kb3cpIHsKICAgICByZXR1cm4gTlNfRVJST1Jf
TlVMTF9QT0lOVEVSOwogICB9CiAKICAgbnNJRG9jU2hlbGwgKmRvY3NoZWxsID0gd2luZG93LT5H
ZXREb2NTaGVsbCgpOwogCiAgIG5zQ09NUHRyPG5zSUludGVyZmFjZVJlcXVlc3Rvcj4gcHJvbXB0
ZXIoZG9fUXVlcnlJbnRlcmZhY2UoZG9jc2hlbGwpKTsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50
IGlzIHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJywgYWJvcnQuCisgIGlmIChtRG9j
dW1lbnQtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICByZXR1cm4g
TlNfT0s7CisgIH0KKwogICAvLyBjaGVjayBmb3IgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0
byBwYXNzIGRvd24gdG8gdGhlIGNoYW5uZWwKICAgLy8gdGhhdCB3aWxsIGJlIGNyZWF0ZWQgdG8g
bG9hZCB0aGUgc2NyaXB0CiAgIG5zQ09NUHRyPG5zSUNoYW5uZWxQb2xpY3k+IGNoYW5uZWxQb2xp
Y3k7CiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3NwOwogICBydiA9IG1E
b2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgIGlmIChjc3ApIHsKICAgICBjaGFubmVsUG9s
aWN5ID0gZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9uc2NoYW5uZWxwb2xpY3k7MSIp
OwpAQCAtNjMwLDE2ICs2MzYsMjEgQEAgbnNTY3JpcHRMb2FkZXI6OlByb2Nlc3NTY3JpcHRFbGVt
ZW50KG5zSQogICAgICAgICAiVGhlcmUgY2FuIGJlIG9ubHkgb25lIHBhcnNlci1ibG9ja2luZyBz
Y3JpcHQgYXQgYSB0aW1lIik7CiAgICAgTlNfQVNTRVJUSU9OKG1YU0xUUmVxdWVzdHMuSXNFbXB0
eSgpLAogICAgICAgICAiUGFyc2VyLWJsb2NraW5nIHNjcmlwdHMgYW5kIFhTTFQgc2NyaXB0cyBp
biB0aGUgc2FtZSBkb2MhIik7CiAgICAgbVBhcnNlckJsb2NraW5nUmVxdWVzdCA9IHJlcXVlc3Q7
CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLyBpbmxpbmUgc2NyaXB0CisgIC8vIElzIHRo
aXMgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMnPworICBpZiAobURv
Y3VtZW50LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgcmV0dXJu
IGZhbHNlOworICB9CisKICAgbnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5PiBjc3A7
CiAgIHJ2ID0gbURvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldENzcChnZXR0ZXJfQWRkUmVm
cyhjc3ApKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIGZhbHNlKTsKIAogICBpZiAoY3NwKSB7
CiAgICAgUFJfTE9HKGdDc3BQUkxvZywgUFJfTE9HX0RFQlVHLCAoIk5ldyBTY3JpcHRMb2FkZXIg
aSAqKioqd2l0aCBDU1AqKioqIikpOwogICAgIGJvb2wgaW5saW5lT0s7CiAgICAgcnYgPSBjc3At
PkdldEFsbG93c0lubGluZVNjcmlwdCgmaW5saW5lT0spOwpkaWZmIC0tZ2l0IGEvY29udGVudC9l
dmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwIGIvY29udGVudC9ldmVudHMvc3Jj
L25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCi0tLSBhL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2
ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcAorKysgYi9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExp
c3RlbmVyTWFuYWdlci5jcHAKQEAgLTUwLDE2ICs1MCwxNyBAQAogI2luY2x1ZGUgIm5zRE9NSlNV
dGlscy5oIgogI2luY2x1ZGUgIm5zRE9NU2NyaXB0T2JqZWN0SG9sZGVyLmgiCiAjaW5jbHVkZSAi
bnNEYXRhSGFzaHRhYmxlLmgiCiAjaW5jbHVkZSAibnNDT01BcnJheS5oIgogI2luY2x1ZGUgIm5z
RXZlbnRMaXN0ZW5lclNlcnZpY2UuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKICNpbmNsdWRlICJuc0pTRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJ4cGNwdWJsaWMu
aCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxs
YTo6ZG9tOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmhhbDsKIAogI2RlZmluZSBFVkVOVF9U
WVBFX0VRVUFMUyggbHMsIHR5cGUsIHVzZXJUeXBlICkgXAogICAobHMtPm1FdmVudFR5cGUgPT0g
dHlwZSAmJiBcCiAgIChscy0+bUV2ZW50VHlwZSAhPSBOU19VU0VSX0RFRklORURfRVZFTlQgfHwg
bHMtPm1UeXBlQXRvbSA9PSB1c2VyVHlwZSkpCiAKQEAgLTU2MSwxNiArNTYyLDIyIEBAIG5zRXZl
bnRMaXN0ZW5lck1hbmFnZXI6OkFkZFNjcmlwdEV2ZW50TGkKICAgICAvLyBsb2FkZWQgYXMgZGF0
YS4KICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAogICBuc3Jlc3VsdCBydiA9IE5TX09LOwogICAv
LyByZXR1cm4gZWFybHkgcHJldmVudGluZyB0aGUgZXZlbnQgbGlzdGVuZXIgZnJvbSBiZWluZyBh
ZGRlZAogICAvLyAnZG9jJyBpcyBmZXRjaGVkIGFib3ZlCiAgIGlmIChkb2MpIHsKKyAgICAvLyBE
b24ndCBhbGxvdyBhZGRpbmcgYW4gZXZlbnQgbGlzdGVuZXIgaWYgdGhlIGRvY3VtZW50IGlzIHNh
bmRib3hlZAorICAgIC8vIHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMnLgorICAgIGlmIChkb2MtPlNh
bmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICAgIHJldHVybiBOU19FUlJP
Ul9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1
cml0eVBvbGljeT4gY3NwOwogICAgIHJ2ID0gZG9jLT5Ob2RlUHJpbmNpcGFsKCktPkdldENzcChn
ZXR0ZXJfQWRkUmVmcyhjc3ApKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAg
ICAgaWYgKGNzcCkgewogICAgICAgYm9vbCBpbmxpbmVPSzsKICAgICAgIHJ2ID0gY3NwLT5HZXRB
bGxvd3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsKICAgICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2
LCBydik7CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVs
ZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNw
cAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTQ4
LDE2ICs0OCwxNyBAQAogCiAjaW5jbHVkZSAibW96QXV0b0RvY1VwZGF0ZS5oIgogI2luY2x1ZGUg
Im5zSUhUTUxDb2xsZWN0aW9uLmgiCiAKICNpbmNsdWRlICJuc0lDb25zdHJhaW50VmFsaWRhdGlv
bi5oIgogCiAjaW5jbHVkZSAibnNJRE9NSFRNTEJ1dHRvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJk
b21iaW5kaW5ncy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBtb3ppbGxhOjpkb207CiAKIHN0YXRpYyBjb25zdCBpbnQgTlNfRk9STV9DT05UUk9MX0xJ
U1RfSEFTSFRBQkxFX1NJWkUgPSAxNjsKIAogc3RhdGljIGNvbnN0IFBSVWludDggTlNfRk9STV9B
VVRPQ09NUExFVEVfT04gID0gMTsKIHN0YXRpYyBjb25zdCBQUlVpbnQ4IE5TX0ZPUk1fQVVUT0NP
TVBMRVRFX09GRiA9IDA7CiAKQEAgLTY0OCwxNyArNjQ5LDE5IEBAIG5zSFRNTEZvcm1FbGVtZW50
OjpEb1N1Ym1pdE9yUmVzZXQobnNFdmUKICAgICByZXR1cm4gRG9SZXNldCgpOwogICB9CiAKICAg
aWYgKE5TX0ZPUk1fU1VCTUlUID09IGFNZXNzYWdlKSB7CiAgICAgLy8gRG9uJ3Qgc3VibWl0IGlm
IHdlJ3JlIG5vdCBpbiBhIGRvY3VtZW50LgogICAgIGlmICghZG9jKSB7CiAgICAgICByZXR1cm4g
TlNfT0s7CiAgICAgfQotICAgIHJldHVybiBEb1N1Ym1pdChhRXZlbnQpOworICAgIC8vIERvbid0
IHN1Ym1pdCBpZiB3ZSdyZSBpbiBhIHNhbmRib3hlZCBmcmFtZSBhbmQgZm9ybSBzdWJtaXQKKyAg
ICAvLyBpcyBkaXNhYmxlZC4KKyAgICByZXR1cm4gKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5E
Qk9YRURfRk9STVMpID8gTlNfT0sgOiBEb1N1Ym1pdChhRXZlbnQpOwogICB9CiAKICAgTU9aX0FT
U0VSVChmYWxzZSk7CiAgIHJldHVybiBOU19PSzsKIH0KIAogbnNyZXN1bHQKIG5zSFRNTEZvcm1F
bGVtZW50OjpEb1Jlc2V0KCkKQEAgLTE2NDksMTYgKzE2NTIsMjQgQEAgbnNIVE1MRm9ybUVsZW1l
bnQ6OkNoZWNrVmFsaWRGb3JtU3VibWlzcwogICAgKiBUT0RPOiB0aGUgY2hlY2sgZm9yIG9ic2Vy
dmVyIHNob3VsZCBiZSByZW1vdmVkIGxhdGVyIHdoZW4gSFRNTDUgRm9ybXMgd2lsbAogICAgKiBi
ZSBzcHJlYWQgZW5vdWdoIGFuZCBhdXRob3JzIHdpbGwgYXNzdW1lIGZvcm1zIGNhbid0IGJlIHN1
Ym1pdHRlZCB3aGVuCiAgICAqIGludmFsaWQuIFNlZSBidWcgNTg3NjcxLgogICAgKi8KIAogICBO
U19BU1NFUlRJT04oIUhhc0F0dHIoa05hbWVTcGFjZUlEX05vbmUsIG5zR2tBdG9tczo6bm92YWxp
ZGF0ZSksCiAgICAgICAgICAgICAgICAiV2Ugc2hvdWxkbid0IGJlIHRoZXJlIGlmIG5vdmFsaWRh
dGUgaXMgc2V0ISIpOwogCisgIC8vIERvbid0IGRvIHZhbGlkYXRpb24gZm9yIGEgZm9ybSBzdWJt
aXQgZG9uZSBieSBhIHNhbmRib3hlZCBkb2N1bWVudCB0aGF0CisgIC8vIGRvZXNuJ3QgaGF2ZSAn
YWxsb3ctZm9ybXMnLCB0aGUgc3VibWl0IHdpbGwgaGF2ZSBiZWVuIGJsb2NrZWQgYW5kIHRoZQor
ICAvLyBIVE1MNSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IHZhbGlkYXRlIGluIHRoaXMgY2FzZS4K
KyAgbnNJRG9jdW1lbnQqIGRvYyA9IEdldEN1cnJlbnREb2MoKTsKKyAgaWYgKGRvYyAmJiAoZG9j
LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9GT1JNUykpIHsKKyAgICAgIHJldHVybiB0cnVl
OworICB9CisKICAgLy8gV2hlbiAuc3VibWl0KCkgaXMgY2FsbGVkIGFFdmVudCA9IG5zbnVsbCBz
byB3ZSBjYW4gcmVseSBvbiB0aGF0IHRvIGtub3cgaWYKICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0
aGUgdmFsaWRpdHkgb2YgdGhlIGZvcm0uCiAgIG5zQ09NUHRyPG5zSU9ic2VydmVyU2VydmljZT4g
c2VydmljZSA9CiAgICAgbW96aWxsYTo6c2VydmljZXM6OkdldE9ic2VydmVyU2VydmljZSgpOwog
ICBpZiAoIXNlcnZpY2UpIHsKICAgICBOU19XQVJOSU5HKCJObyBvYnNlcnZlciBzZXJ2aWNlIGF2
YWlsYWJsZSEiKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVu
dC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTEsMjQgKzEsMTYgQEAKIC8qIC0qLSBN
b2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9m
ZnNldDogMiAtKi0gKi8KIC8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRo
ZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKICAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBj
b3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKICAqIGZpbGUsIFlv
dSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCiAKICNp
bmNsdWRlICJtb3ppbGxhL1V0aWwuaCIKIAogI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJuc0lET01Eb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zSURPTVNWR0RvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAibnNHa0F0b21zLmgiCi0jaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJuc0RPTUVycm9yLmgi
Ci0jaW5jbHVkZSAibnNSdWxlRGF0YS5oIgotI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwog
CiBOU19JTVBMX05TX05FV19IVE1MX0VMRU1FTlRfQ0hFQ0tfUEFSU0VSKElGcmFtZSkKIAogbnNI
VE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5z
SU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJzZXIpCkBAIC01MywxNiArNDUsMTcgQEAgTlNfSU1Q
TF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LAogTlNfSU1QTF9VUklfQVRUUihuc0hU
TUxJRnJhbWVFbGVtZW50LCBMb25nRGVzYywgbG9uZ2Rlc2MpCiBOU19JTVBMX1NUUklOR19BVFRS
KG5zSFRNTElGcmFtZUVsZW1lbnQsIE1hcmdpbkhlaWdodCwgbWFyZ2luaGVpZ2h0KQogTlNfSU1Q
TF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBNYXJnaW5XaWR0aCwgbWFyZ2lud2lk
dGgpCiBOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE5hbWUsIG5hbWUp
CiBOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNjcm9sbGluZywgc2Ny
b2xsaW5nKQogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBTcmMsIHNyYykK
IE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgV2lkdGgsIHdpZHRoKQog
TlNfSU1QTF9CT09MX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTW96QWxsb3dGdWxsU2NyZWVu
LCBtb3phbGxvd2Z1bGxzY3JlZW4pCitOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVs
ZW1lbnQsIFNhbmRib3gsIHNhbmRib3gpCiAKIHZvaWQKIG5zSFRNTElGcmFtZUVsZW1lbnQ6Okdl
dEl0ZW1WYWx1ZVRleHQobnNBU3RyaW5nJiBhVmFsdWUpCiB7CiAgIEdldFNyYyhhVmFsdWUpOwog
fQogCiB2b2lkCkBAIC0yMDIsOCArMTk1LDQzIEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OklzQXR0
cmlidXRlTWFwcGVkKGMKIAogCiBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jCiBuc0hUTUxJRnJh
bWVFbGVtZW50OjpHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdAogewogICByZXR1
cm4gJk1hcEF0dHJpYnV0ZXNJbnRvUnVsZTsKIH0KIAorbnNyZXN1bHQKK25zSFRNTElGcmFtZUVs
ZW1lbnQ6OkFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSog
YVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhTm90aWZ5
KQoreworICBpZiAoYU5hbWUgPT0gbnNHa0F0b21zOjpzYW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9
PSBrTmFtZVNwYWNlSURfTm9uZSkgeworICAgIC8vIFBhcnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhl
IHNhbmRib3ggYXR0cmlidXRlLCBhbmQgaWYgd2UgaGF2ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0
IGl0cyBzYW5kYm94IGZsYWdzIGFwcHJvcHJpYXRlbHkuCisgICAgaWYgKG1GcmFtZUxvYWRlcikg
eworICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY3NoZWxsID0gbUZyYW1lTG9hZGVyLT5H
ZXRFeGlzdGluZ0RvY1NoZWxsKCk7CisKKyAgICAgIGlmIChkb2NzaGVsbCkgeworICAgICAgICBQ
UlVpbnQzMiBuZXdGbGFncyA9IDA7CisgICAgICAgIC8vIElmIGEgTlVMTCBhVmFsdWUgaXMgcGFz
c2VkIGluLCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBzYW5kYm94IGZsYWdzCisgICAgICAgIC8vIHdo
aWNoIHdlIHdpbGwgZG8gYnkgc2V0dGluZyB0aGVtIHRvIDAuCisgICAgICAgIGlmIChhVmFsdWUp
IHsKKyAgICAgICAgICBuc0F1dG9TdHJpbmcgc3RyVmFsdWU7CisgICAgICAgICAgYVZhbHVlLT5U
b1N0cmluZyhzdHJWYWx1ZSk7CisgICAgICAgICAgbmV3RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6
UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncygKKyAgICAgICAgICAgIHN0clZhbHVlKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAvLyBJZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgd2Fz
IHJlbW92ZWQsIG5vdCBvbmx5IGRvIHRoZSBmbGFncyBuZWVkCisgICAgICAgICAgLy8gdG8gYmUg
Y2xlYXJlZCwgYnV0IG9uIHRoZSBuZXh0IGRvY3VtZW50IGxvYWQsIHdlIG5lZWQgdG8KKyAgICAg
ICAgICAvLyByZS1lbmFibGUgcGx1Z2lucyBmb3IgdGhpcyBkb2NzaGVsbC4gV2Ugc2V0IGEgZmxh
ZyBoZXJlIGZvcgorICAgICAgICAgIC8vIHRoaXMgcHVycG9zZS4KKyAgICAgICAgICBkb2NzaGVs
bC0+U2V0U2FuZGJveENsZWFyZWQodHJ1ZSk7CisgICAgICAgIH0gICAgICAgCisgICAgICAgIGRv
Y3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3RmxhZ3MpOworICAgICAgfQorICAgIH0KKyAgfQor
ICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6OkFmdGVyU2V0QXR0cihhTmFtZVNwYWNlSUQs
IGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFOb3RpZnkpOworCit9CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMv
bnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElG
cmFtZUVsZW1lbnQuaAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1l
RWxlbWVudC5oCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVt
ZW50LmgKQEAgLTEsMTYgKzEsMjQgQEAKIC8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsg
aW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KIC8qIFRoaXMg
U291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQ
dWJsaWMKICAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBk
aXN0cmlidXRlZCB3aXRoIHRoaXMKICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRw
Oi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCiAKICNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRnJh
bWVFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50
LmgiCisjaW5jbHVkZSAibnNHa0F0b21zLmgiCisjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJuc0RPTUVycm9yLmgiCisj
aW5jbHVkZSAibnNSdWxlRGF0YS5oIgorI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNs
dWRlICJuc0NvbnRlbnRVdGlscy5oIgogCiBjbGFzcyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVi
bGljIG5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCBwdWJsaWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCBwdWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKIHsKIHB1YmxpYzoKICAgbnNIVE1MSUZy
YW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAg
ICAgICAgICAgICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0g
bW96aWxsYTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOwpAQCAtNDEsMTIgKzQ5LDM2IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQp
OwogICBOU19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBh
QXR0cmlidXRlKSBjb25zdDsKICAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdl
dEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OwogCiAgIHZpcnR1YWwgbnNyZXN1bHQg
Q2xvbmUobnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0Owog
ICB2aXJ0dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKICAgdmlydHVhbCBuc0lE
T01Ob2RlKiBBc0RPTU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKKyAgdmlydHVhbCBuc3Jlc3Vs
dCBBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpOworCisgIFBSVWlu
dDMyIEdldFNhbmRib3hGbGFncygpCisgIHsKKyAgICBuc0F1dG9TdHJpbmcgc2FuZGJveEF0dHI7
CisKKyAgICBpZiAoR2V0QXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpzYW5kYm94
LCBzYW5kYm94QXR0cikpIHsKKyAgICAgIHJldHVybiBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5k
Ym94QXR0cmlidXRlVG9GbGFncyhzYW5kYm94QXR0cik7CisgICAgfQorCisgICAgLy8gTm8gc2Fu
ZGJveCBhdHRyaWJ1dGUsIG5vIHNhbmRib3ggZmxhZ3MuCisgICAgcmV0dXJuIDA7CisgIH0KKwor
ICBzdGF0aWMgbnNIVE1MSUZyYW1lRWxlbWVudCogRnJvbUNvbnRlbnQobnNJQ29udGVudCAqYUNv
bnRlbnQpCisgIHsKKyAgICBpZiAoYUNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6OmlmcmFtZSkp
IHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxuc0hUTUxJRnJhbWVFbGVtZW50Kj4oYUNvbnRl
bnQpOworICAgIH0KKyAgICByZXR1cm4gbnNudWxsOworICB9CisKIHByb3RlY3RlZDoKICAgdmly
dHVhbCB2b2lkIEdldEl0ZW1WYWx1ZVRleHQobnNBU3RyaW5nJiB0ZXh0KTsKICAgdmlydHVhbCB2
b2lkIFNldEl0ZW1WYWx1ZVRleHQoY29uc3QgbnNBU3RyaW5nJiB0ZXh0KTsKIH07CmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcCBiL2NvbnRl
bnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRt
bC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9kb2N1
bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCkBAIC05OCwxNiArOTgsMTcgQEAKICNpbmNsdWRl
ICJwcnByZi5oIgogI2luY2x1ZGUgIm1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNpbmNsdWRlICJt
b3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibnNNaW1lVHlwZXMuaCIKICNpbmNsdWRl
ICJuc0lSZXF1ZXN0LmgiCiAjaW5jbHVkZSAibnNIdG1sNVRyZWVPcEV4ZWN1dG9yLmgiCiAjaW5j
bHVkZSAibnNIdG1sNVBhcnNlci5oIgogI2luY2x1ZGUgIm5zSURPTUpTV2luZG93LmgiCisjaW5j
bHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2lu
ZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiAjZGVmaW5lIE5TX01BWF9ET0NVTUVOVF9XUklU
RV9ERVBUSCAyMAogCiAjaW5jbHVkZSAicHJtZW0uaCIKICNpbmNsdWRlICJwcnRpbWUuaCIKQEAg
LTEyMTYsMTYgKzEyMTcsMjIgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcm
IGFDbwogewogICBhQ29va2llLlRydW5jYXRlKCk7IC8vIGNsZWFyIGN1cnJlbnQgY29va2llIGlu
IGNhc2Ugc2VydmljZSBmYWlsczsKICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBjb29raWUg
aXNuJ3QgYW4gZXJyb3IgY29uZGl0aW9uLgogCiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2Vzcykg
ewogICAgIHJldHVybiBOU19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRi
b3hlZCBvcmlnaW4gZmxhZyBpcyBzZXQsIGFjY2VzcyB0byByZWFkIGNvb2tpZXMKKyAgLy8gaXMg
cHJvaGliaXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSB7Cisg
ICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgIH0KKyAgCiAgIC8vIG5vdCBo
YXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29r
aWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRS
QUNUSUQpOwogICBpZiAoc2VydmljZSkgewogICAgIC8vIEdldCBhIFVSSSBmcm9tIHRoZSBkb2N1
bWVudCBwcmluY2lwYWwuIFdlIHVzZSB0aGUgb3JpZ2luYWwKICAgICAvLyBjb2RlYmFzZSBpbiBj
YXNlIHRoZSBjb2RlYmFzZSB3YXMgY2hhbmdlZCBieSBTZXREb21haW4KICAgICBuc0NPTVB0cjxu
c0lVUkk+IGNvZGViYXNlVVJJOwogICAgIE5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9B
ZGRSZWZzKGNvZGViYXNlVVJJKSk7CiAKQEAgLTEyNDYsMTYgKzEyNTMsMjIgQEAgbnNIVE1MRG9j
dW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwogCiBOU19JTUVUSE9ESU1QCiBuc0hUTUxE
b2N1bWVudDo6U2V0Q29va2llKGNvbnN0IG5zQVN0cmluZyYgYUNvb2tpZSkKIHsKICAgaWYgKG1E
aXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKKyAgLy8gSWYg
dGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNldCwgYWNjZXNzIHRvIHdy
aXRlIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBT
QU5EQk9YRURfT1JJR0lOKSB7CisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7
CisgIH0KKwogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZpY2UgaXNuJ3QgYW4gZXJyb3IK
ICAgbnNDT01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9IGRvX0dldFNlcnZpY2UoTlNf
Q09PS0lFU0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZpY2UgJiYgbURvY3VtZW50VVJJ
KSB7CiAgICAgbnNDT01QdHI8bnNJUHJvbXB0PiBwcm9tcHQ7CiAgICAgbnNDT01QdHI8bnNQSURP
TVdpbmRvdz4gd2luZG93ID0gR2V0V2luZG93KCk7CiAgICAgaWYgKHdpbmRvdykgewogICAgICAg
d2luZG93LT5HZXRQcm9tcHRlcihnZXR0ZXJfQWRkUmVmcyhwcm9tcHQpKTsKICAgICB9CmRpZmYg
LS1naXQgYS9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluIGIvZG9jc2hlbGwvYmFzZS9NYWtlZmls
ZS5pbgotLS0gYS9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCisrKyBiL2RvY3NoZWxsL2Jhc2Uv
TWFrZWZpbGUuaW4KQEAgLTg1LDkgKzg1LDEwIEBAIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZp
Zy9jb25maWcubWsKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2lwYy9jaHJvbWl1bS9jaHJvbWl1bS1j
b25maWcubWsKIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawogCiBMT0NBTF9J
TkNMVURFUyArPSBcCiAgIC1JJChzcmNkaXIpLy4uL3NoaXN0b3J5L3NyYyBcCiAgIC1JJCh0b3Bz
cmNkaXIpL2RvbS9iYXNlIFwKICAgLUkkKHRvcHNyY2RpcikvbGF5b3V0L2Jhc2UgXAogICAtSSQo
dG9wc3JjZGlyKS94cGNvbS9kcyBcCisgIC1JJCh0b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9zcmMg
XAogICAkKE5VTEwpCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwIGIv
ZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hl
bGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKQEAgLTE3NywxNiArMTc3
LDE3IEBACiAjaW5jbHVkZSAibnNJV2ViQnJvd3NlclByaW50LmgiCiAjZW5kaWYKIAogI2luY2x1
ZGUgIm5zUGx1Z2luRXJyb3IuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogI2luY2x1
ZGUgIm5zQ29udGVudEVycm9ycy5oIgogI2luY2x1ZGUgIm5zSUNoYW5uZWxQb2xpY3kuaCIKICNp
bmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hG
bGFncy5oIgogCiAjaW5jbHVkZSAibnNYVUxBcHBBUEkuaCIKIAogI2luY2x1ZGUgIm5zRE9NTmF2
aWdhdGlvblRpbWluZy5oIgogI2luY2x1ZGUgIm5zSVRpbWVkQ2hhbm5lbC5oIgogI2luY2x1ZGUg
Im1vemlsbGEvU3RhcnR1cFRpbWVsaW5lLmgiCiAjaW5jbHVkZSAibnNJRnJhbWVNZXNzYWdlTWFu
YWdlci5oIgogCkBAIC03MjksMTYgKzczMCwxNyBAQCBuc0RvY1NoZWxsOjpuc0RvY1NoZWxsKCk6
CiAgICAgbUJ1c3lGbGFncyhCVVNZX0ZMQUdTX05PTkUpLAogICAgIG1BcHBUeXBlKG5zSURvY1No
ZWxsOjpBUFBfVFlQRV9VTktOT1dOKSwKICAgICBtTG9hZFR5cGUoMCksCiAgICAgbU1hcmdpbldp
ZHRoKC0xKSwKICAgICBtTWFyZ2luSGVpZ2h0KC0xKSwKICAgICBtSXRlbVR5cGUodHlwZUNvbnRl
bnQpLAogICAgIG1QcmV2aW91c1RyYW5zSW5kZXgoLTEpLAogICAgIG1Mb2FkZWRUcmFuc0luZGV4
KC0xKSwKKyAgICBtU2FuZGJveEZsYWdzKDApLAogICAgIG1DcmVhdGVkKGZhbHNlKSwKICAgICBt
QWxsb3dTdWJmcmFtZXModHJ1ZSksCiAgICAgbUFsbG93UGx1Z2lucyh0cnVlKSwKICAgICBtQWxs
b3dKYXZhc2NyaXB0KHRydWUpLAogICAgIG1BbGxvd01ldGFSZWRpcmVjdHModHJ1ZSksCiAgICAg
bUFsbG93SW1hZ2VzKHRydWUpLAogICAgIG1BbGxvd0ROU1ByZWZldGNoKHRydWUpLAogICAgIG1B
bGxvd1dpbmRvd0NvbnRyb2wodHJ1ZSksCkBAIC03NTQsMTYgKzc1NiwxNyBAQCBuc0RvY1NoZWxs
Ojpuc0RvY1NoZWxsKCk6CiAgICAgbUluUHJpdmF0ZUJyb3dzaW5nKGZhbHNlKSwKICAgICBtRmly
ZWRVbmxvYWRFdmVudChmYWxzZSksCiAgICAgbUVPREZvckN1cnJlbnREb2N1bWVudChmYWxzZSks
CiAgICAgbVVSSVJlc3VsdGVkSW5Eb2N1bWVudChmYWxzZSksCiAgICAgbUlzQmVpbmdEZXN0cm95
ZWQoZmFsc2UpLAogICAgIG1Jc0V4ZWN1dGluZ09uTG9hZEhhbmRsZXIoZmFsc2UpLAogICAgIG1J
c1ByaW50aW5nT3JQUChmYWxzZSksCiAgICAgbVNhdmluZ09sZFZpZXdlcihmYWxzZSksCisgICAg
bVNhbmRib3hDbGVhcmVkKGZhbHNlKSwKICNpZmRlZiBERUJVRwogICAgIG1JbkVuc3VyZVNjcmlw
dEVudihmYWxzZSksCiAjZW5kaWYKICAgICBtUGFyZW50Q2hhcnNldFNvdXJjZSgwKQogewogICAg
IG1IaXN0b3J5SUQgPSArK2dEb2NzaGVsbElEQ291bnRlcjsKICAgICBpZiAoZ0RvY1NoZWxsQ291
bnQrKyA9PSAwKSB7CiAgICAgICAgIE5TX0FTU0VSVElPTihzVVJJRml4dXAgPT0gbnNudWxsLApA
QCAtMjA3MSwxNiArMjA3NCwyOSBAQCBuc0RvY1NoZWxsOjpTZXRVc2VQcml2YXRlQnJvd3Npbmco
Ym9vbCBhCiAgICAgICAgICAgICAgICAgb2JzLT5Qcml2YXRlTW9kZUNoYW5nZWQoYVVzZVByaXZh
dGVCcm93c2luZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJu
IE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpHZXRTYW5kYm94Q2xlYXJl
ZChib29sICogYVNhbmRib3hDbGVhcmVkKQoreworICAgICphU2FuZGJveENsZWFyZWQgPSBtU2Fu
ZGJveENsZWFyZWQ7CisgICAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCituc0Rv
Y1NoZWxsOjpTZXRTYW5kYm94Q2xlYXJlZChib29sIGFTYW5kYm94Q2xlYXJlZCkKK3sKKyAgICBt
U2FuZGJveENsZWFyZWQgPSBhU2FuZGJveENsZWFyZWQ7CisgICAgcmV0dXJuIE5TX09LOworfQor
TlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6QWRkV2Vha1ByaXZhY3lUcmFuc2l0aW9uT2JzZXJ2
ZXIobnNJUHJpdmFjeVRyYW5zaXRpb25PYnNlcnZlciogYU9ic2VydmVyKQogewogICAgIG5zV2Vh
a1B0ciB3ZWFrT2JzID0gZG9fR2V0V2Vha1JlZmVyZW5jZShhT2JzZXJ2ZXIpOwogICAgIGlmICgh
d2Vha09icykgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfTk9UX0FWQUlMQUJMRTsKICAgICB9
CiAgICAgcmV0dXJuIG1Qcml2YWN5T2JzZXJ2ZXJzLkFwcGVuZEVsZW1lbnQod2Vha09icykgPyBO
U19PSyA6IE5TX0VSUk9SX0ZBSUxVUkU7CiB9CkBAIC0yOTc5LDE2ICsyOTk1LDczIEBAIG5zRG9j
U2hlbGw6OkZpbmRJdGVtV2l0aE5hbWUoY29uc3QgUFJVbmkKICAgICAgICAgICAgIGZvdW5kSXRl
bSA9IG5zbnVsbDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChmb3VuZEl0ZW0pIHsKICAgICAg
ICAgICAgIC8vIFdlIHJldHVybiBmb3VuZEl0ZW0gaGVyZSBldmVuIGlmIGl0J3Mgbm90IGFuIGFj
dGl2ZQogICAgICAgICAgICAgLy8gaXRlbSBzaW5jZSBhbGwgdGhlIG5hbWVzIHdlJ3ZlIGRlYWx0
IHdpdGggc28gZmFyIGFyZQogICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlcyB0aGF0IHdlIHdv
bid0IGJvdGhlciBsb29raW5nIGZvciBmdXJ0aGVyLgogCisgICAgICAgICAgICAvLyBJZiBvdXIg
ZG9jdW1lbnQgaXMgc2FuZGJveGVkLCB3ZSBuZWVkIHRvIGRvIHNvbWUgZXh0cmEgY2hlY2tzLgor
ICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICAgICAgICAgICAgbnND
T01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX0dldEludGVyZmFjZShhT3JpZ2luYWxSZXF1ZXN0
b3IpOworCisgICAgICAgICAgICBpZiAoZG9jKSB7CisgICAgICAgICAgICAgICAgc2FuZGJveEZs
YWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHNhbmRib3hGbGFncykgeworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
VHJlZUl0ZW0+IHJvb3Q7CisgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVSb290VHJlZUl0ZW0o
Z2V0dGVyX0FkZFJlZnMocm9vdCkpOworCisgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGZvdW5k
IGl0ZW0gbm90IGEgdG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgYW5kIG5vdCBvdXJzZWxmID8K
KyAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBzZWxmQXNJdGVt
ID0gc3RhdGljX2Nhc3Q8bnNJRG9jU2hlbGxUcmVlSXRlbSAqPih0aGlzKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZm91bmRJdGVtICE9IHJvb3QgJiYgZm91bmRJdGVtICE9IHNlbGZBc0l0ZW0pIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gQXJlIHdlIGFuIGFuY2VzdG9yIG9mIHRoZSBmb3VuZEl0
ZW0gPworICAgICAgICAgICAgICAgICAgICBib29sIGlzQW5jZXN0b3IgPSBmYWxzZTsKKworICAg
ICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0
ZW07CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRSZWZz
KHBhcmVudEFzSXRlbSkpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRBc0l0
ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0
ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbS0+R2V0UGFyZW50
KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1w
ICYmIHRtcCA9PSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNB
bmNlc3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0
ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vLCB3ZSBhcmUg
bm90IGFuIGFuY2VzdG9yIGFuZCBvdXIgZG9jdW1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHNhbmRib3hlZCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRvcCBsZXZlbCBicm93
c2luZyBjb250ZXh0IC0gaXMgaXQgYW4gYW5jZXN0b3Igb2Ygb3VycyA/CisgICAgICAgICAgICAg
ICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAg
ICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKHRtcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRt
cCAmJiB0bXAgPT0gZm91bmRJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhbiBhbmNlc3RvciwgYW5kIHdlIGFyZSBzYW5kYm94ZWQuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVW5sZXNzIGFsbG93LXRvcC1uYXZpZ2F0aW9uIGlzIHNldCwgd2Ug
Y2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2FuZGJv
eEZsYWdzICYgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAtPkdldFBhcmVudChn
ZXR0ZXJfQWRkUmVmcyh0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2
YWwpOwogICAgICAgICAgICAgcmV0dXJuIE5TX09LOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
Ly8gS2VlcCBsb29raW5nCiAgICAgICAgIAogICAgIC8vIEZpcnN0IHdlIGNoZWNrIG91ciBuYW1l
LgpAQCAtNTAxOSwxNiArNTA5MiwzMCBAQCBuc0RvY1NoZWxsOjpTZXRJc0FwcFRhYihib29sIGFJ
c0FwcFRhYikKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OkdldElzQXBwVGFiKGJvb2wgKmFJ
c0FwcFRhYikKIHsKICAgKmFJc0FwcFRhYiA9IG1Jc0FwcFRhYjsKICAgcmV0dXJuIE5TX09LOwog
fQogCiBOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpTZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIg
YVNhbmRib3hGbGFncykKK3sKKyAgICBtU2FuZGJveEZsYWdzID0gYVNhbmRib3hGbGFnczsKKyAg
ICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6OkdldFNhbmRi
b3hGbGFncyhQUlVpbnQzMiAgKmFTYW5kYm94RmxhZ3MpCit7CisgICAgKmFTYW5kYm94RmxhZ3Mg
PSBtU2FuZGJveEZsYWdzOworICAgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAog
bnNEb2NTaGVsbDo6U2V0VmlzaWJpbGl0eShib29sIGFWaXNpYmlsaXR5KQogewogICAgIGlmICgh
bUNvbnRlbnRWaWV3ZXIpCiAgICAgICAgIHJldHVybiBOU19PSzsKICAgICBpZiAoYVZpc2liaWxp
dHkpIHsKICAgICAgICAgbUNvbnRlbnRWaWV3ZXItPlNob3coKTsKICAgICB9CiAgICAgZWxzZSB7
CkBAIC04MjU4LDE2ICs4MzQ1LDI5IEBAIG5zRG9jU2hlbGw6OkludGVybmFsTG9hZChuc0lVUkkg
KiBhVVJJLAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0YXJnZXRJdGVt
OwogICAgICAgICBGaW5kSXRlbVdpdGhOYW1lKGFXaW5kb3dUYXJnZXQsIG5zbnVsbCwgdGhpcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyh0YXJnZXRJdGVtKSk7CiAK
ICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IHRhcmdldERvY1NoZWxsID0gZG9fUXVlcnlJ
bnRlcmZhY2UodGFyZ2V0SXRlbSk7CiAgICAgICAgIAogICAgICAgICBib29sIGlzTmV3V2luZG93
ID0gZmFsc2U7CiAgICAgICAgIGlmICghdGFyZ2V0RG9jU2hlbGwpIHsKKyAgICAgICAgICAgIC8v
IElmIHRoZSBkb2NzaGVsbCdzIGRvY3VtZW50IGlzIHNhbmRib3hlZCBhbmQgd2FzIHRyeWluZyB0
bworICAgICAgICAgICAgLy8gbmF2aWdhdGUvbG9hZCBhIGZyYW1lIGl0IHdhc24ndCBhbGxvd2Vk
IHRvIGFjY2VzcywgdGhlCisgICAgICAgICAgICAvLyBGaW5kSXRlbVdpdGhOYW1lIGFib3ZlIHdp
bGwgaGF2ZSByZXR1cm5lZCBudWxsIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAvLyBpdGVt
IC0gd2UgZG9uJ3Qgd2FudCB0byBhY3R1YWxseSBvcGVuIGEgbmV3IHdpbmRvdyBpbiB0aGlzIGNh
c2UKKyAgICAgICAgICAgIC8vIHRob3VnaC4gQ2hlY2sgaWYgd2UgYXJlIHNhbmRib3hlZCBhbmQg
YmFpbCBvdXQgaGVyZSBpZiBzby4KKyAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKG1Db250ZW50
Vmlld2VyLCBOU19FUlJPUl9GQUlMVVJFKTsKKyAgICAgICAgICAgIG5zSURvY3VtZW50KiBkb2Mg
PSBtQ29udGVudFZpZXdlci0+R2V0RG9jdW1lbnQoKTsKKyAgICAgICAgICAgIFBSVWludDMyIHNh
bmRib3hGbGFncyA9IDA7CisgICAgICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hG
bGFncygpOworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9OQVZJR0FU
SU9OKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gd2luID0KICAgICAg
ICAgICAgICAgICBkb19HZXRJbnRlcmZhY2UoR2V0QXNTdXBwb3J0cyh0aGlzKSk7CiAgICAgICAg
ICAgICBOU19FTlNVUkVfVFJVRSh3aW4sIE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpOwogCiAgICAg
ICAgICAgICBuc0RlcGVuZGVudFN0cmluZyBuYW1lKGFXaW5kb3dUYXJnZXQpOwogICAgICAgICAg
ICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiBuZXdXaW47CiAgICAgICAgICAgICBydiA9IHdpbi0+
T3BlbihFbXB0eVN0cmluZygpLCAvLyBVUkwgdG8gbG9hZAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSwgICAgICAgICAgLy8gd2luZG93IG5hbWUKQEAgLTkwNjksMTggKzkxNjksMzEg
QEAgbnNEb2NTaGVsbDo6RG9VUklMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIH0KICAgICAg
ICAgLy8gU2V0IHRoZSByZWZlcnJlciBleHBsaWNpdGx5CiAgICAgICAgIGlmIChhUmVmZXJyZXJV
UkkgJiYgYVNlbmRSZWZlcnJlcikgewogICAgICAgICAgICAgLy8gUmVmZXJyZXIgaXMgY3VycmVu
bHkgb25seSBzZXQgZm9yIGxpbmsgY2xpY2tzIGhlcmUuCiAgICAgICAgICAgICBodHRwQ2hhbm5l
bC0+U2V0UmVmZXJyZXIoYVJlZmVycmVyVVJJKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG5z
Q09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWwoZG9fUXVlcnlJbnRlcmZhY2UoYU93
bmVyKSk7Ci0gICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNp
cGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlKTsKKyAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93
bmVyUHJpbmNpcGFsOworCisgICAgLy8gSWYgdGhlIGNvbnRlbnQgYmVpbmcgbG9hZGVkIHNob3Vs
ZCBiZSBzYW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9yaWdpbgorICAgIC8vIHdlIG5lZWQgdG8g
Y3JlYXRlIGEgbmV3IG51bGwgcHJpbmNpcGFsIGhlcmUsIGFuZCB0aGVuIHRlbGwKKyAgICAvLyBu
c0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIgdG8gZm9yY2UgaXQgdG8gYmUgc2V0IGFz
IHRoZQorICAgIC8vIGNoYW5uZWwgb3duZXIuCisgICAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5E
Qk9YRURfT1JJR0lOKSB7CisgICAgICAgIG93bmVyUHJpbmNpcGFsID0gZG9fQ3JlYXRlSW5zdGFu
Y2UoIkBtb3ppbGxhLm9yZy9udWxscHJpbmNpcGFsOzEiKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBOb3Qgc2FuZGJveGVkIC0gd2UgYWxsb3cgdGhlIGNvbnRlbnQgdG8gYXNzdW1lIGl0cyBu
YXR1cmFsIG93bmVyLgorICAgICAgICBvd25lclByaW5jaXBhbCA9IGRvX1F1ZXJ5SW50ZXJmYWNl
KGFPd25lcik7CisgICAgfQorCisgICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVy
KG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJLCB0cnVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pKTsK
IAogICAgIG5zQ09NUHRyPG5zSVNjcmlwdENoYW5uZWw+IHNjcmlwdENoYW5uZWwgPSBkb19RdWVy
eUludGVyZmFjZShjaGFubmVsKTsKICAgICBpZiAoc2NyaXB0Q2hhbm5lbCkgewogICAgICAgICAv
LyBBbGxvdyBleGVjdXRpb24gYWdhaW5zdCBvdXIgY29udGV4dCBpZiB0aGUgcHJpbmNpcGFscyBt
YXRjaAogICAgICAgICBzY3JpcHRDaGFubmVsLT4KICAgICAgICAgICAgIFNldEV4ZWN1dGlvblBv
bGljeShuc0lTY3JpcHRDaGFubmVsOjpFWEVDVVRFX05PUk1BTCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVs
bC5oCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCisrKyBiL2RvY3NoZWxsL2Jhc2Uv
bnNEb2NTaGVsbC5oCkBAIC03NTUsMTYgKzc1NSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gQ3Jl
YXRlKCkgaXMgY2FsbGVkLCB0aGUgdHlwZSBpcyBub3QgZXhwZWN0ZWQgdG8gY2hhbmdlLgogICAg
IFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1JdGVtVHlwZTsKIAogICAgIC8vIEluZGV4IGlu
dG8gdGhlIFNIVHJhbnNhY3Rpb24gbGlzdCwgaW5kaWNhdGluZyB0aGUgcHJldmlvdXMgYW5kIGN1
cnJlbnQKICAgICAvLyB0cmFuc2FjdGlvbiBhdCB0aGUgdGltZSB0aGF0IHRoaXMgRG9jU2hlbGwg
YmVnaW5zIHRvIGxvYWQKICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtUHJldmlvdXNU
cmFuc0luZGV4OwogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1Mb2FkZWRUcmFuc0lu
ZGV4OwogCisgICAgUFJVaW50MzIgICAgICAgICAgICAgICAgICAgbVNhbmRib3hGbGFnczsKKwog
ICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1DcmVhdGVkOwogICAgIGJvb2wgICAgICAg
ICAgICAgICAgICAgICAgIG1BbGxvd1N1YmZyYW1lczsKICAgICBib29sICAgICAgICAgICAgICAg
ICAgICAgICBtQWxsb3dQbHVnaW5zOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1B
bGxvd0phdmFzY3JpcHQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93TWV0
YVJlZGlyZWN0czsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dJbWFnZXM7
CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93RE5TUHJlZmV0Y2g7CiAgICAg
Ym9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93V2luZG93Q29udHJvbDsKQEAgLTc5OCwx
NiArODAwLDIxIEBAIHByb3RlY3RlZDoKIAogICAgIC8vIEluZGljYXRlcyB0aGF0IGEgRG9jU2hl
bGwgaW4gdGhpcyAiZG9jc2hlbGwgdHJlZSIgaXMgcHJpbnRpbmcKICAgICBib29sICAgICAgICAg
ICAgICAgICAgICAgICBtSXNQcmludGluZ09yUFA7CiAKICAgICAvLyBJbmRpY2F0ZXMgdG8gQ3Jl
YXRlQ29udGVudFZpZXdlcigpIHRoYXQgaXQgaXMgc2FmZSB0byBjYWNoZSB0aGUgb2xkCiAgICAg
Ly8gcHJlc2VudGF0aW9uIG9mIHRoZSBwYWdlLCBhbmQgdG8gU2V0dXBOZXdWaWV3ZXIoKSB0aGF0
IHRoZSBvbGQgdmlld2VyCiAgICAgLy8gc2hvdWxkIGJlIHBhc3NlZCBhIFNIRW50cnkgdG8gc2F2
ZSBpdHNlbGYgaW50by4KICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtU2F2aW5nT2xk
Vmlld2VyOworICAgIAorICAgIC8vIElmIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSB3YXMgcmVtb3Zl
ZCBmcm9tIGNvbnRlbnQgY29udGFpbmVkIGluIHRoaXMKKyAgICAvLyBkb2NzaGVsbCwgb24gdGhl
IG5leHQgZG9jdW1lbnQgbG9hZCwgd2UgbmVlZCB0byByZS1lbmFibGUgcGx1Z2lucy4KKyAgICAv
LyBXZSB1c2UgdGhpcyBmbGFnIHRvIHRyYWNrIG5lZWRpbmcgdG8gZG8gdGhpcy4KKyAgICBib29s
ICAgICAgICAgICAgICAgICAgICAgICBtU2FuZGJveENsZWFyZWQ7CiAKICAgICAvLyBAc2VlIG5z
SURvY1NoZWxsSGlzdG9yeTo6Y3JlYXRlZER5bmFtaWNhbGx5CiAgICAgYm9vbCAgICAgICAgICAg
ICAgICAgICAgICAgbUR5bmFtaWNhbGx5Q3JlYXRlZDsKICNpZmRlZiBERUJVRwogICAgIGJvb2wg
ICAgICAgICAgICAgICAgICAgICAgIG1JbkVuc3VyZVNjcmlwdEVudjsKICNlbmRpZgogICAgIFBS
VWludDY0ICAgICAgICAgICAgICAgICAgIG1IaXN0b3J5SUQ7CiAKZGlmZiAtLWdpdCBhL2RvY3No
ZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwK
LS0tIGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKKysrIGIvZG9jc2hlbGwvYmFzZS9u
c0lEb2NTaGVsbC5pZGwKQEAgLTM0LDE3ICszNCwxNyBAQCBpbnRlcmZhY2UgbnNJU0hFbnRyeTsK
IGludGVyZmFjZSBuc0lMYXlvdXRIaXN0b3J5U3RhdGU7CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJv
d3NlclVJOwogaW50ZXJmYWNlIG5zSURPTVN0b3JhZ2U7CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFs
OwogaW50ZXJmYWNlIG5zSVdlYkJyb3dzZXJQcmludDsKIGludGVyZmFjZSBuc0lWYXJpYW50Owog
aW50ZXJmYWNlIG5zSVByaXZhY3lUcmFuc2l0aW9uT2JzZXJ2ZXI7CiAKLVtzY3JpcHRhYmxlLCB1
dWlkKDZmNjBhYzk2LWZhMmMtNDFhNS05MmI0LTI5YWFhZGJkN2E3YildCitbc2NyaXB0YWJsZSwg
dXVpZCg5YjI4MzMzNy0wOTdkLTRmYTgtYTJkYS05MTYzMThlYWY4MjgpXQogaW50ZXJmYWNlIG5z
SURvY1NoZWxsIDogbnNJU3VwcG9ydHMKIHsKICAgLyoqCiAgICAqIExvYWRzIGEgZ2l2ZW4gVVJJ
LiAgVGhpcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gbG9hZGluZyB0aGUgcmVxdWVzdGVkIFVSSQog
ICAgKiBpbiB0aGUgb2JqZWN0IGltcGxlbWVudGluZwl0aGlzIGludGVyZmFjZS4gIElmIGl0IGNh
bid0IGJlIGxvYWRlZCBoZXJlCiAgICAqIGhvd2V2ZXIsIHRoZSBVUkwgZGlzcGF0Y2hlciB3aWxs
IGdvIHRocm91Z2ggaXRzIG5vcm1hbCBwcm9jZXNzIG9mIGNvbnRlbnQKICAgICogbG9hZGluZy4K
ICAgICoKQEAgLTU4OCw5ICs1ODgsMzEgQEAgaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3Vw
cG9ydHMKICAgICovCiAgIGF0dHJpYnV0ZSBib29sIGlzQnJvd3NlckZyYW1lOwogCiAgIC8qCiAg
ICAqIElzIHRoaXMgZG9jc2hlbGwgY29udGFpbmVkIGluIGFuIDxpZnJhbWUgbW96YnJvd3Nlcj4s
IGVpdGhlciBkaXJlY3RseSBvcgogICAgKiBpbmRpcmVjdGx5PwogICAgKi8KICAgcmVhZG9ubHkg
YXR0cmlidXRlIGJvb2wgY29udGFpbmVkSW5Ccm93c2VyRnJhbWU7CisKKyAgLyoqCisgICAqIFRo
ZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2NzaGVsbC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlIG9mIHRoZSBhc3NvY2lhdGVkIElGUkFNRSBv
ciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYKKyAgICogZXhpc3RlbnQuIFNlZSB0aGUgSFRN
TDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBUaGVzZSBmbGFncyBvbiB0aGUgZG9jc2hl
bGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1
dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuIFRoZXkgYXJlIG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcg
bmV3CisgICAqIGNvbnRlbnQsIHNhbmRib3ggZmxhZ3MgYXJlIGFsc28gaW1tdXRhYmx5IHNldCBv
biB0aGUgZG9jdW1lbnQgd2hlbiBpdCBpcworICAgKiBsb2FkZWQuCisgICAqIFRoZSBzYW5kYm94
IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94IGZsYWdzIG9uIGl0cwor
ICAgKiBkb2NzaGVsbCBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVudCwgaWYgYW55LgorICAgKiBT
ZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICAgKi8KKyAgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdzOworICAKKyAgLyoqCisgICAqIElmIGEg
c2FuZGJveCBhdHRyaWJ1dGUgaXMgcmVtb3ZlZCBmcm9tIGEgZG9jdW1lbnQgY29udGFpbmVkIGlu
IGFuIGlmcmFtZSdzCisgICAqIGRvY3NoZWxsLCB0aGUgc2FuZGJveCBmbGFncyBhcmUgY2xlYXJl
ZC4gVGhpcyBjaGFuZ2Ugc2hvdWxkIG5vdCB0YWtlIGVmZmVjdCB1bnRpbCB0aGUKKyAgICogbmV4
dCBsb2FkIG9mIGEgZG9jdW1lbnQgaW50byB0aGUgZG9jc2hlbGwsIHRoaXMgZmxhZyBpcyB1c2Vk
IHRvIHRyYWNrIHRoYXQgd2UgbmVlZAorICAgKiB0byByZS1lbmFibGUgcGx1Z2lucyBmb3IgdGhl
IGRvY3NoZWxsIHdoZW4gdGhhdCBuZXh0IGxvYWQgb2NjdXJzLgorICAgKi8KKyAgYXR0cmlidXRl
IGJvb2xlYW4gc2FuZGJveENsZWFyZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2Jhc2UvbnNHbG9i
YWxXaW5kb3cuY3BwIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCi0tLSBhL2RvbS9iYXNl
L25zR2xvYmFsV2luZG93LmNwcAorKysgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKQEAg
LTIxNSwxNiArMjE1LDE3IEBACiAjaW5jbHVkZSAibnNSZWZyZXNoRHJpdmVyLmgiCiAjaW5jbHVk
ZSAibW96QXV0b0RvY1VwZGF0ZS5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9UZWxlbWV0cnkuaCIK
ICNpbmNsdWRlICJuc0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAibnNXcmFwcGVyQ2FjaGVJbmxpbmVz
LmgiCiAjaW5jbHVkZSAibnNET01FdmVudFRhcmdldEhlbHBlci5oIgogI2luY2x1ZGUgIm5zSUFw
cHNTZXJ2aWNlLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2lmZGVmIEFORFJP
SUQKICNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgogI2VuZGlmCiAKICNpZmRlZiBQUl9MT0dHSU5H
CiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnRE9NTGVha1BSTG9nOwogI2VuZGlmCkBAIC04MTUw
LDE2ICs4MTUxLDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRTZXNzaW9uU3RvcmFnZShuc0lET00K
ICAgaWYgKCFtU2Vzc2lvblN0b3JhZ2UpIHsKICAgICAqYVNlc3Npb25TdG9yYWdlID0gbnNudWxs
OwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAg
ICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAg
Ly8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAg
IC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYg
KG1Eb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVy
biBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zcmVzdWx0IHJ2ID0g
ZG9jU2hlbGwtPkdldFNlc3Npb25TdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudFVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1TZXNzaW9uU3RvcmFnZSkpOwogICAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICNpZmRlZiBQUl9MT0dHSU5HCiAgICAgaWYg
KFBSX0xPR19URVNUKGdET01MZWFrUFJMb2csIFBSX0xPR19ERUJVRykpIHsKQEAgLTgyMTUsMTYg
KzgyMjIsMjIgQEAgbnNHbG9iYWxXaW5kb3c6OkdldExvY2FsU3RvcmFnZShuc0lET01TdAogICAg
ICAgZG9fR2V0U2VydmljZSgiQG1vemlsbGEub3JnL2RvbS9zdG9yYWdlbWFuYWdlcjsxIiwgJnJ2
KTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgbnNTdHJpbmcgZG9jdW1l
bnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVu
dFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0
aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0
byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYg
U0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlf
RVJSOworICAgIH0KKwogICAgIG5zSURvY1NoZWxsKiBkb2NTaGVsbCA9IEdldERvY1NoZWxsKCk7
CiAgICAgbnNDT01QdHI8bnNJTG9hZENvbnRleHQ+IGxvYWRDb250ZXh0ID0gZG9fUXVlcnlJbnRl
cmZhY2UoZG9jU2hlbGwpOwogCiAgICAgcnYgPSBzdG9yYWdlTWFuYWdlci0+R2V0TG9jYWxTdG9y
YWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRDb250ZXh0ICYmIGxvYWRDb250
ZXh0LT5Vc2VQcml2YXRlQnJvd3NpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobUxvY2FsU3RvcmFnZSkpOwog
ICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQgYS9kb20vaW50ZXJmYWNl
cy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwv
bnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJ
RE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9N
SFRNTElGcmFtZUVsZW1lbnQuaWRsCkBAIC0xMSwzMiArMTEsMzIgQEAKICAqCiAgKiBUaGlzIGlu
dGVyZmFjZSBpcyB0cnlpbmcgdG8gZm9sbG93IHRoZSBET00gTGV2ZWwgMiBIVE1MIHNwZWNpZmlj
YXRpb246CiAgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1MLwogICoKICAq
IHdpdGggY2hhbmdlcyBmcm9tIHRoZSB3b3JrLWluLXByb2dyZXNzIFdIQVRXRyBIVE1MIHNwZWNp
ZmljYXRpb246CiAgKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVu
dC13b3JrLwogICovCiAKLVtzY3JpcHRhYmxlLCB1dWlkKDk3RTRGMEUxLUJEMjctNDBFQy05Mjg3
LTU2MzREQUYxNUI3MyldCitbc2NyaXB0YWJsZSwgdXVpZCg1MmY2MjQ0Yi1iMWY1LTRmNGMtOGZm
My03ZTE0NjMxNmY0MTEpXQogaW50ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDogbnNJ
RE9NSFRNTEVsZW1lbnQKIHsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAg
YWxpZ247CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGZyYW1lQm9yZGVy
OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBoZWlnaHQ7CiAgICAgICAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGxvbmdEZXNjOwogICAgICAgICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5IZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0
ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbldpZHRoOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nICAgICAgICBuYW1lOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBzY3JvbGxpbmc7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNyYzsK
ICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgd2lkdGg7CiAgIC8vIEludHJv
ZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01Eb2N1bWVu
dCAgIGNvbnRlbnREb2N1bWVudDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVdpbmRvdyAg
ICAgY29udGVudFdpbmRvdzsKIAotCisgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIHNhbmRib3g7CiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBpZnJhbWUgZWxlbWVu
dHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0byBiZSBwcmVzZW50
CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3ViIGRvY3VtZW50IHRv
IGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRwczovL3dpa2kubW96
aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkKICAgICAgICAgICAg
YXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVuOwogfTsKZGlmZiAt
LWdpdCBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4gYi9kb20vc3JjL2pzdXJsL01ha2VmaWxl
LmluCi0tLSBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KKysrIGIvZG9tL3NyYy9qc3VybC9N
YWtlZmlsZS5pbgpAQCAtMjUsMTYgKzI1LDE3IEBAIFhQSURMU1JDUwk9IFwKIENQUFNSQ1MJCT0g
bnNKU1Byb3RvY29sSGFuZGxlci5jcHAKIAogRVhQT1JUUwkJPSAkKHNyY2RpcikvbnNKU1Byb3Rv
Y29sSGFuZGxlci5oCiAKIExPQ0FMX0lOQ0xVREVTICs9IFwKIAkJLUkkKHNyY2RpcikgXAogCQkt
SSQodG9wc3JjZGlyKS9kb20vYmFzZSBcCiAJCS1JJCh0b3BzcmNkaXIpL25ldHdlcmsvYmFzZS9z
cmMgXAorCQktSSQodG9wc3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKIAogaWZkZWYgQlVJTERf
REVCVUdfR0MKIERFRklORVMJCSs9IC1EREVCVUdfR0MKIGVuZGlmCiAKIERJUlMgICAgICAgICAg
ICA9ICQoTlVMTCkKIFRFU1RfRElSUyArPSB0ZXN0CiAKZGlmZiAtLWdpdCBhL2RvbS9zcmMvanN1
cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAgYi9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhh
bmRsZXIuY3BwCi0tLSBhL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAKKysr
IGIvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcApAQCAtNDAsMTYgKzQwLDE3
IEBACiAjaW5jbHVkZSAibnNUaHJlYWRVdGlscy5oIgogI2luY2x1ZGUgIm5zSUpTQ29udGV4dFN0
YWNrLmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIm5zSURvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0SW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lP
YmplY3RPdXRwdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lXcml0YWJsZVByb3BlcnR5QmFnMi5o
IgogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIm5zU2Fu
ZGJveEZsYWdzLmgiCiAKIHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtKU1VSSUNJRCwgTlNfSlNVUklf
Q0lEKTsKIAogY2xhc3MgbnNKU1RodW5rIDogcHVibGljIG5zSUlucHV0U3RyZWFtCiB7CiBwdWJs
aWM6CiAgICAgbnNKU1RodW5rKCk7CiAKQEAgLTE4NiwxNiArMTg3LDIzIEBAIG5zcmVzdWx0IG5z
SlNUaHVuazo6RXZhbHVhdGVTY3JpcHQobnNJQ2gKICAgICAvLyBHZXQgdGhlIGdsb2JhbCBvYmpl
Y3Qgd2Ugc2hvdWxkIGJlIHJ1bm5pbmcgb24uCiAgICAgbnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBn
bG9iYWwgPSBHZXRHbG9iYWxPYmplY3QoYUNoYW5uZWwpOwogICAgIGlmICghZ2xvYmFsKSB7CiAg
ICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAogICAgIG5zQ09NUHRyPG5z
UElET01XaW5kb3c+IHdpbihkb19RdWVyeUludGVyZmFjZShnbG9iYWwpKTsKIAorICAgIC8vIFNh
bmRib3hlZCBkb2N1bWVudCBjaGVjazogamF2YXNjcmlwdDogVVJJJ3MgYXJlIGRpc2FibGVkCisg
ICAgLy8gaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgdW5sZXNzICdhbGxvdy1zY3JpcHRzJyB3YXMg
c3BlY2lmaWVkLgorICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19RdWVyeUludGVy
ZmFjZShhT3JpZ2luYWxJbm5lcldpbmRvdy0+R2V0RXh0YW50RG9jdW1lbnQoKSk7CisgICAgaWYg
KGRvYyAmJiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSkgeworICAg
ICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9SRVRWQUxfVU5ERUZJTkVEOworICAgIH0KKwogICAgIC8v
IFB1c2ggb3VyIHBvcHVwIGNvbnRyb2wgc3RhdGUKICAgICBuc0F1dG9Qb3B1cFN0YXRlUHVzaGVy
IHBvcHVwU3RhdGVQdXNoZXIod2luLCBhUG9wdXBTdGF0ZSk7CiAKICAgICAvLyBNYWtlIHN1cmUg
d2Ugc3RpbGwgaGF2ZSB0aGUgc2FtZSBpbm5lciB3aW5kb3cgYXMgd2UgdXNlZCB0by4KICAgICBu
c1BJRE9NV2luZG93ICppbm5lcldpbiA9IHdpbi0+R2V0Q3VycmVudElubmVyV2luZG93KCk7CiAK
ICAgICBpZiAoaW5uZXJXaW4gIT0gYU9yaWdpbmFsSW5uZXJXaW5kb3cpIHsKICAgICAgICAgcmV0
dXJuIE5TX0VSUk9SX1VORVhQRUNURUQ7CmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50
cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbiBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dp
bmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dp
bmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dp
bmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCkBAIC0yNCwxMSArMjQsMTIgQEAgQ1BQU1JDUwkJ
Kz0gbnNEaWFsb2dQYXJhbUJsb2NrLmNwcCBcCiAJCSAgICQoTlVMTCkKIGVuZGlmCiAKICMgd2Ug
ZG9uJ3Qgd2FudCB0aGUgc2hhcmVkIGxpYiwgYnV0IHdlIHdhbnQgdG8gZm9yY2UgdGhlIGNyZWF0
aW9uIG9mIGEKICMgc3RhdGljIGxpYi4KIEZPUkNFX1NUQVRJQ19MSUIgPSAxCiAKICMgRm9yIG5z
SlNVdGlscwotTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UKK0xPQ0FM
X0lOQ0xVREVTICs9IC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKKwkJICAtSSQodG9wc3JjZGly
KS9jb250ZW50L2Jhc2Uvc3JjIFwKIAogaW5jbHVkZSAkKHRvcHNyY2RpcikvY29uZmlnL3J1bGVz
Lm1rCmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9u
c1dpbmRvd1dhdGNoZXIuY3BwIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9z
cmMvbnNXaW5kb3dXYXRjaGVyLmNwcAotLS0gYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3
YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRz
L3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKQEAgLTUzLDE2ICs1MywxNyBA
QAogI2luY2x1ZGUgIm5zUElET01TdG9yYWdlLmgiCiAjaW5jbHVkZSAibnNJV2lkZ2V0LmgiCiAj
aW5jbHVkZSAibnNGb2N1c01hbmFnZXIuaCIKICNpbmNsdWRlICJuc0lQcmVzU2hlbGwuaCIKICNp
bmNsdWRlICJuc1ByZXNDb250ZXh0LmgiCiAjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKICNp
bmNsdWRlICJuc0lQcmVmQnJhbmNoLmgiCiAjaW5jbHVkZSAibnNJUHJlZlNlcnZpY2UuaCIKKyNp
bmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZkZWYgVVNFV0VBS1JFRlMKICNpbmNsdWRl
ICJuc0lXZWFrUmVmZXJlbmNlLmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7
CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzSlNTdGFja0NvbnRyYWN0SUQ9IkBtb3ppbGxhLm9yZy9q
cy94cGMvQ29udGV4dFN0YWNrOzEiOwpAQCAtNTcwLDE2ICs1NzEsMzMgQEAgbnNXaW5kb3dXYXRj
aGVyOjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAgaWYgKCFuZXdEb2NTaGVsbEl0
ZW0pIHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3BlbiB1cCBhIG5ldyB3aW5kb3cg
b3Vyc2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJvdmlkZXIgZm9yIG9uZS4gIElu
IGVpdGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmlnaHQKICAgICAvLyBuYW1lIG9u
IGl0LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAgICAvLyBJZiB0aGUgcGFyZW50
IHRyeWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94ZWQsCisgICAgLy8gdGhpcyBp
cyBub3QgYWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlmIChhUGFyZW50KSB7CisgICAg
ICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAgICAgYVBhcmVudC0+R2V0RG9j
dW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVu
dD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKworICAgICAgaWYgKGRvYykgewor
ICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICBzYW5kYm94RmxhZ3Mg
PSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5E
Qk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwor
ICAgICAgICB9CisgICAgICB9CisgICAgfQorCiAgICAgLy8gTm93IGNoZWNrIHdoZXRoZXIgaXQn
cyBvayB0byBhc2sgYSB3aW5kb3cgcHJvdmlkZXIgZm9yIGEgd2luZG93LiAgRG9uJ3QKICAgICAv
LyBkbyBpdCBpZiB3ZSdyZSBvcGVuaW5nIGEgZGlhbG9nIG9yIGlmIG91ciBwYXJlbnQgaXMgYSBj
aHJvbWUgd2luZG93IG9yCiAgICAgLy8gaWYgd2UncmUgb3BlbmluZyBzb21ldGhpbmcgdGhhdCBo
YXMgbW9kYWwsIGRpYWxvZywgb3IgY2hyb21lIGZsYWdzIHNldC4KICAgICBuc0NPTVB0cjxuc0lE
T01DaHJvbWVXaW5kb3c+IGNocm9tZVdpbiA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFQYXJlbnQpOwog
ICAgIGlmICghYURpYWxvZyAmJiAhY2hyb21lV2luICYmCiAgICAgICAgICEoY2hyb21lRmxhZ3Mg
JiAobnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX01PREFMICAgICAgICAgfAogICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfRElBTE9H
IHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01F
X09QRU5BU19DSFJPTUUpKSkgewo=
</data>
<flag name="review"
          id="529812"
          type_id="937"
          status="-"
          setter="smaug"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>638547</attachid>
            <date>2012-07-02 17:32:06 -0700</date>
            <delta_ts>2012-07-03 11:55:22 -0700</delta_ts>
            <desc>iframe sandbox tests - plugins v3</desc>
            <filename>iframe_sandbox_tests_plugins</filename>
            <type>text/plain</type>
            <size>7958</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOGJkOGQ3YjYzNTI1YjYxZTRlZmE3ZjZiOTZl
OTc2NjZiZjE4ZjBhYQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBwbHVnaW5zCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yNjUsMTYgKzI2NSwyMCBA
QCBfVEVTVF9GSUxFUyA9IFwKIAkJdGVzdF9idWc3NDI1NDkuaHRtbCBcCiAJCXRlc3RfYnVnNzQ1
Njg1Lmh0bWwgXAogCQl0ZXN0X2lucHV0X2ZpbGVfcGlja2VyLmh0bWwgXAogCQl0ZXN0X2J1Zzc2
MzYyNi5odG1sIFwKIAkJdGVzdF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdpbi5odG1sIFwKIAkJ
ZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9i
X2lmMi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5odG1sIFwKKwkJdGVzdF9p
ZnJhbWVfc2FuZGJveF9wbHVnaW5zLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYx
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2ZfaWYyLmh0bWxeaGVhZGVyc14gXAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X3dv
cmtlcnMuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZ19pZjEuaHRtbCBcCiAJCWZpbGVf
aWZyYW1lX3NhbmRib3hfd29ya2VyLmpzIFwKIAkJJChOVUxMKQogCiBfQlJPV1NFUl9URVNUX0ZJ
TEVTID0gXAogCQlicm93c2VyX2J1ZzY0OTc3OC5qcyBcCiAJCWZpbGVfYnVnNjQ5Nzc4Lmh0bWwg
XApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2ZfaWYxLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfZl9pZjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMS5odG1s
CkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3Rp
dGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rl
c3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPGJvZHk+DQorSSBoYXZlIDIg
cGx1Z2luIGluc3RhbmNlcyBlbWJlZGRlZCBpbiBtZS4NCis8ZW1iZWQgaWQ9InBsdWdpbjEiIHR5
cGU9ImFwcGxpY2F0aW9uL3gtdGVzdCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjwvZW1iZWQ+
DQorPG9iamVjdCB0eXBlPSJhcHBsaWNhdGlvbi94LXRlc3QiIHdpZHRoPSIyMDAiIGhlaWdodD0i
MjAwIj48L29iamVjdD4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbApAQCAtMCwwICsxLDExIEBACis8IURP
Q1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4N
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3Nz
Ii8+DQorPC9oZWFkPg0KKzxib2R5Pg0KKyAgSSBhbSBhIGRvY3VtZW50IHRoYXQgc2hvdWxkIGJl
IGhhbmRsZWQgYnkgYSBwbHVnaW4gbG9hZC4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5o
dG1sXmhlYWRlcnNeIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2ZfaWYyLmh0bWxeaGVhZGVyc14KbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9p
ZjIuaHRtbF5oZWFkZXJzXgpAQCAtMCwwICsxLDEgQEAKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRp
b24veC10ZXN0DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lm
cmFtZV9zYW5kYm94X3BsdWdpbnMuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVz
dF9pZnJhbWVfc2FuZGJveF9wbHVnaW5zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRi
b3hfcGx1Z2lucy5odG1sCkBAIC0wLDAgKzEsMTM3IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRt
bD4NCis8IS0tDQoraHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzDQor
LS0+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBm
b3IgQnVnIDM0MTYwNCAtIHBsdWdpbnM8L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwv
c2NyaXB0Pg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i
L3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJh
cHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCisvKiogVGVzdCBmb3IgQnVnIDM0MTYwNCAtIEltcGxl
bWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAqKi8NCisvKiogUGx1Z2lu
IHRlc3RzICoqLw0KK1NpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0RmluaXNoKCk7DQorICANCitm
dW5jdGlvbiBkb1Rlc3QoKSB7IA0KKwkvLyAxKSB0ZXN0IHRoYXQgYSBwbHVnaW4gY2FuJ3QgYmUg
bG9hZGVkIHdpdGggPGVtYmVkPiBpbnNpZGUgYSBzYW5kYm94ZWQgPGlmcmFtZT4NCisJLy8gKGRv
bmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMS5odG1sIGxvYWRlZCBpbiBpZjEgYmVsb3cp
DQorCS8vIDIpIHRlc3QgdGhhdCBhIHBsdWdpbiBjYW4ndCBiZSBsb2FkZWQgd2l0aCA8b2JqZWN0
PiBpbnNpZGUgYSBzYW5kYm94ZWQgPGlmcmFtZT4NCisJLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVf
c2FuZGJveF9mX2lmMS5odG1sIGxvYWRlZCBpbiBpZjEgYmVsb3cpDQorCS8vIDMpIHRlc3QgdGhh
dCBwbHVnaW4gY2FuJ3QgYmUgbG9hZGVkIGJ5IGEgc2FuZGJveGVkIDxpZnJhbWU+IHdpdGggc3Jj
IHBvaW50aW5nIHRvDQorCS8vIGEgZG9jdW1lbnQgdGhhdCBpcyBoYW5kbGVkIGJ5IGEgcGx1Z2lu
IChkb25lIGJ5IGlmXzIgYmVsb3cpDQorICAvLyA0KSB0ZXN0IHRoYXQgd2hlbiBhIHBsdWdpbiBp
cyBsb2FkZWQgaW4gYW4gdW5zYW5kYm94ZWQgaWZyYW1lLCBhIHNhbmRib3ggYXR0cmlidXRlDQor
ICAvLyBpcyB0aGVuIGFkZGVkIHRvIHRoZSBpZnJhbWUgYW5kIHRoZSBkb2N1bWVudCBjb250YWlu
aW5nIHRoZSBwbHVnaW4gaXMgcmVsb2FkZWQsDQorICAvLyB0aGUgcGx1Z2luIGRvZXMgbm90IGxv
YWQgaW4gdGhlIHNhbmRib3hlZCBpZnJhbWUgKGRvbmUgd2l0aCBpZl8zIGJlbG93KQ0KKyAgLy8g
NSkgdGVzdCB0aGF0IHdoZW4gd2hlbiBhIHNhbmRib3hlZCBpZnJhbWUncyBzYW5kYm94IGF0dHJp
YnV0ZSBpcyByZW1vdmVkLA0KKyAgLy8gYW5kIGEgbmV3IGRvY3VtZW50IGlzIGxvYWRlZCBpbnRv
IHRoZSBpZnJhbWUsIHRoZSBwbHVnaW4gbG9hZHMgDQorICAvLyAoZG9uZSB3aXRoIGlmXzQgYmVs
b3cpDQorCQ0KKwkvLyB0aGVzZSBhcmUgYWxsIGhhbmRsZWQgYnkgY2hlY2tpbmcgaG93IG1hbnkg
aW5zdGFuY2VzIG9mIHRoZSB0ZXN0IHBsdWdpbiBhcmUgbG9hZGVkDQorCS8vIHdoZW4gdGhpcyBz
Y3JpcHQgcnVucyBhcyB0aGUgb25sb2FkIGhhbmRsZXIgLSB0aGVyZSBzaG91bGQgYmUgdHdvIGlu
c3RhbmNlcywNCisgIC8vIGluaXRpYWxseSB0aGUgb25lIGxvYWRlZCBkaXJlY3RseSBieSB0aGlz
IHBhZ2UgaXRzZWxmLCBhbmQgdGhlIG9uZSBsb2FkZWQgZHVyaW5nDQorICAvLyB0ZXN0ICM0IGFi
b3ZlLiANCisJdmFyIHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGx1Z2luMScpOw0KKyAg
dmFyIGlmXzEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMScpOw0KKwlwLnN0YXJ0V2F0
Y2hpbmdJbnN0YW5jZUNvdW50KCk7DQorDQorCWlmXzEuc3JjID0gJ2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZl9pZjEuaHRtbCc7DQorfQ0KKw0KK2Z1bmN0aW9uIGlmXzFfbG9hZCgpIHsgDQorICB2YXIg
aWZfMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl8xJyk7DQorDQorCWlmIChpZl8xLnNy
YyA9PSAiYWJvdXQ6YmxhbmsiKQ0KKwkJcmV0dXJuOw0KKw0KKwkvLyBuZWVkIHRvIHdhaXQgZm9y
IHBsdWdpbiB0byBsb2FkLCBpZiB0aGUgdGVzdCBmYWlscy4uLg0KKyAgU2ltcGxlVGVzdC5leGVj
dXRlU29vbihpZl8xX2NvbnRpbnVlKTsNCit9DQorDQorZnVuY3Rpb24gaWZfMV9jb250aW51ZSgp
IHsNCisJLy8gaW5zdGFuY2UgY291bnQgc2hvdWxkIGJlIDAgKHRlc3RzICMxIGFuZCAjMiBhYm92
ZSkgDQorCXZhciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsdWdpbjEnKTsNCisJaXMo
cC5nZXRJbnN0YW5jZUNvdW50KCksIDAsICJwbHVnaW5zIHNob3VsZCBub3QgYmUgbG9hZGVkIHZp
YSA8b2JqZWN0PiBvciA8ZW1iZWQ+IGJ5IGEgc2FuZGJveGVkIGlmcmFtZSIpOw0KKw0KKyAgdmFy
IGlmXzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMicpOw0KKwlpZl8yLnNyYyA9ICdm
aWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWwnOw0KKwkNCisJU2ltcGxlVGVzdC5leGVjdXRl
U29vbihpZl8yX2NvbnRpbnVlKTsNCit9DQorDQorZnVuY3Rpb24gaWZfMl9jb250aW51ZSgpIHsN
CisJLy8gaW5zdGFuY2UgY291bnQgc2hvdWxkIGJlIDAgKHRlc3QgIzMgYWJvdmUpIA0KKwl2YXIg
cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbHVnaW4xJyk7DQorCQ0KKwlpcyhwLmdldElu
c3RhbmNlQ291bnQoKSwgMCwgInBsdWdpbnMgc2hvdWxkIG5vdCBiZSBsb2FkZWQgdmlhIGEgZG9j
dW1lbnQgb2YgYSB0eXBlIHRoYXQgcmVxdWlyZXMgYSBwbHVnaW4gZW1iZWRkZWQgaW4gYSBzYW5k
Ym94ZWQgaWZyYW1lIik7DQorCQ0KKyAgU2ltcGxlVGVzdC5leGVjdXRlU29vbihpZl8zX3Rlc3Qp
Ow0KK30NCisNCitmdW5jdGlvbiBpZl8zX3Rlc3QoKSB7DQorICB2YXIgaWZfMyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpZl8zJyk7DQorICAvLyBhZGQgc2FuZGJveCBhdHRyaWJ1dGUNCisg
IGlmXzMuc2FuZGJveCA9ICcnOw0KKwlpZl8zLnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5kYm94X2Zf
aWYxLmh0bWwnOw0KK30NCisgIA0KK2Z1bmN0aW9uIGlmXzNfbG9hZCgpIHsgDQorICBpZiAoaWZf
My5zcmMgPT0gImFib3V0OmJsYW5rIikNCisJCXJldHVybjsNCisNCisgIFNpbXBsZVRlc3QuZXhl
Y3V0ZVNvb24oaWZfM19jb250aW51ZSk7DQorfQ0KKyAgDQorZnVuY3Rpb24gaWZfM19jb250aW51
ZSgpIHsNCisgIHZhciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsdWdpbjEnKTsNCisJ
aXMocC5nZXRJbnN0YW5jZUNvdW50KCksIDAsICJwbHVnaW5zIHNob3VsZCBub3QgYmUgbG9hZGVk
IHdoZW4gYSBzYW5kYm94IGF0dHJpYnV0ZSBpcyBhZGRlZCIgKw0KKyAgICAgInRvIGFuIGlmcmFt
ZSBhbmQgYSBkb2N1bWVudCBjb250YWluaW5nIGEgcGx1Z2luIGlzIHRoZW4gbG9hZGVkIGludG8g
dGhlIGlmcmFtZSIpOw0KKyAgICAgDQorCVNpbXBsZVRlc3QuZXhlY3V0ZVNvb24oaWZfNF90ZXN0
KTsNCit9DQorDQorZnVuY3Rpb24gaWZfNF90ZXN0KCkgew0KKyAgdmFyIGlmXzQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnaWZfNCcpOw0KKyAgLy8gcmVtb3ZlIHNhbmRib3ggYXR0cmlidXRl
DQorICBpZl80LnJlbW92ZUF0dHJpYnV0ZSgnc2FuZGJveCcpOw0KKwlpZl80LnNyYyA9ICdmaWxl
X2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwnOw0KK30NCisNCitmdW5jdGlvbiBpZl80X2xvYWQo
KSB7DQorICBpZiAoaWZfNC5zcmMgPT0gImFib3V0OmJsYW5rIikNCisJCXJldHVybjsNCisNCisg
IFNpbXBsZVRlc3QuZXhlY3V0ZVNvb24oaWZfNF9jb250aW51ZSk7DQorfSAgDQorDQorZnVuY3Rp
b24gaWZfNF9jb250aW51ZSgpIHsNCisgIHZhciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3BsdWdpbjEnKTsNCisgIC8vIHRoZXJlIGFyZSAyIHBsdWdpbiBpbnN0YW5jZXMgaW4gZmlsZV9p
ZnJhbWVfc2FuZGJveF9pZjEuaHRtbCBsb2FkZWQgYnkNCisgIC8vIGlmXzEsIHRoZXkgc2hvdWxk
IHN1Y2Nlc3NmdWxseSBsb2FkLg0KKyAgaXMocC5nZXRJbnN0YW5jZUNvdW50KCksIDIsICJwbHVn
aW5zIHNob3VsZCBiZSBsb2FkZWQgd2hlbiBhIHNhbmRib3ggYXR0cmlidXRlIGlzIHJlbW92ZWQg
IiArDQorICAgICAiZnJvbSBhbiBpZnJhbWUgYW5kIGEgZG9jdW1lbnQgY29udGFpbmluZyBhIHBs
dWdpbiBpcyB0aGVuIGxvYWRlZCBpbnRvIHRoZSBpZnJhbWUiKTsNCisgICANCisJcC5zdG9wV2F0
Y2hpbmdJbnN0YW5jZUNvdW50KCk7DQorICBTaW1wbGVUZXN0LmV4ZWN1dGVTb29uKGZpbmlzaF90
ZXN0KTsNCit9DQorDQorZnVuY3Rpb24gZmluaXNoX3Rlc3QoKSB7DQorCVNpbXBsZVRlc3QuZmlu
aXNoKCk7DQorfQ0KKw0KK2FkZExvYWRFdmVudChkb1Rlc3QpOw0KKzwvc2NyaXB0Pg0KKzxib2R5
Pg0KKzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJbXBsZW1l
bnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMNCis8cCBpZD0iZGlzcGxheSI+
PC9wPg0KKzxkaXYgaWQ9ImNvbnRlbnQiPg0KKzxlbWJlZCBpZD0icGx1Z2luMSIgdHlwZT0iYXBw
bGljYXRpb24veC10ZXN0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PC9lbWJlZD4NCis8aWZy
YW1lIGlkPSJpZl8xIiBzYW5kYm94PSdhbGxvdy1zYW1lLW9yaWdpbicgb25Mb2FkPSdpZl8xX2xv
YWQoKScgc3JjPSJhYm91dDpibGFuayIgaGVpZ2h0PSI0MDAiIHdpZHRoPSI0MDAiPjwvaWZyYW1l
Pg0KKzxpZnJhbWUgaWQ9ImlmXzIiIHNhbmRib3g9J2FsbG93LXNhbWUtb3JpZ2luJyBzcmM9ImFi
b3V0OmJsYW5rIiBoZWlnaHQ9IjQwMCIgd2lkdGg9IjQwMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBp
ZD0iaWZfMyIgc3JjPSJhYm91dDpibGFuayIgb25sb2FkPSdpZl8zX2xvYWQoKScgaGVpZ2h0PSI0
MDAiIHdpZHRoPSI0MDAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgaWQ9ImlmXzQiIHNhbmRib3g9J2Fs
bG93LXNhbWUtb3JpZ2luJyBvbmxvYWQ9J2lmXzRfbG9hZCgpJyBzcmM9ImFib3V0OmJsYW5rIiBo
ZWlnaHQ9IjQwMCIgd2lkdGg9IjQwMCI+PC9pZnJhbWU+DQorPC9kaXY+DQorPC9ib2R5Pg0KKzwv
aHRtbD4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>638823</attachid>
            <date>2012-07-03 11:55:22 -0700</date>
            <delta_ts>2012-07-17 11:29:12 -0700</delta_ts>
            <desc>iframe sandbox tests - plugins v4</desc>
            <filename>iframe_sandbox_tests_plugins</filename>
            <type>text/plain</type>
            <size>9163</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOGJkOGQ3YjYzNTI1YjYxZTRlZmE3ZjZiOTZl
OTc2NjZiZjE4ZjBhYQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBwbHVnaW5zCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yNjUsMTYgKzI2NSwyMCBA
QCBfVEVTVF9GSUxFUyA9IFwKIAkJdGVzdF9idWc3NDI1NDkuaHRtbCBcCiAJCXRlc3RfYnVnNzQ1
Njg1Lmh0bWwgXAogCQl0ZXN0X2lucHV0X2ZpbGVfcGlja2VyLmh0bWwgXAogCQl0ZXN0X2J1Zzc2
MzYyNi5odG1sIFwKIAkJdGVzdF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdpbi5odG1sIFwKIAkJ
ZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9i
X2lmMi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5odG1sIFwKKwkJdGVzdF9p
ZnJhbWVfc2FuZGJveF9wbHVnaW5zLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYx
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2ZfaWYyLmh0bWxeaGVhZGVyc14gXAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X3dv
cmtlcnMuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZ19pZjEuaHRtbCBcCiAJCWZpbGVf
aWZyYW1lX3NhbmRib3hfd29ya2VyLmpzIFwKIAkJJChOVUxMKQogCiBfQlJPV1NFUl9URVNUX0ZJ
TEVTID0gXAogCQlicm93c2VyX2J1ZzY0OTc3OC5qcyBcCiAJCWZpbGVfYnVnNjQ5Nzc4Lmh0bWwg
XApkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2ZfaWYxLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfZl9pZjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMS5odG1s
CkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3Rp
dGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rl
c3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPGJvZHk+DQorSSBoYXZlIDIg
cGx1Z2luIGluc3RhbmNlcyBlbWJlZGRlZCBpbiBtZS4NCis8ZW1iZWQgaWQ9InBsdWdpbjEiIHR5
cGU9ImFwcGxpY2F0aW9uL3gtdGVzdCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjwvZW1iZWQ+
DQorPG9iamVjdCB0eXBlPSJhcHBsaWNhdGlvbi94LXRlc3QiIHdpZHRoPSIyMDAiIGhlaWdodD0i
MjAwIj48L29iamVjdD4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbApAQCAtMCwwICsxLDExIEBACis8IURP
Q1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4N
CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3Nz
Ii8+DQorPC9oZWFkPg0KKzxib2R5Pg0KKyAgSSBhbSBhIGRvY3VtZW50IHRoYXQgc2hvdWxkIGJl
IGhhbmRsZWQgYnkgYSBwbHVnaW4gbG9hZC4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5o
dG1sXmhlYWRlcnNeIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2ZfaWYyLmh0bWxeaGVhZGVyc14KbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9p
ZjIuaHRtbF5oZWFkZXJzXgpAQCAtMCwwICsxLDEgQEAKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRp
b24veC10ZXN0DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lm
cmFtZV9zYW5kYm94X3BsdWdpbnMuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVz
dF9pZnJhbWVfc2FuZGJveF9wbHVnaW5zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRi
b3hfcGx1Z2lucy5odG1sCkBAIC0wLDAgKzEsMTM3IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRt
bD4NCis8IS0tDQoraHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzDQor
LS0+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBm
b3IgQnVnIDM0MTYwNCAtIHBsdWdpbnM8L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwv
c2NyaXB0Pg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i
L3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJh
cHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCisvKiogVGVzdCBmb3IgQnVnIDM0MTYwNCAtIEltcGxl
bWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAqKi8NCisvKiogUGx1Z2lu
IHRlc3RzICoqLw0KK1NpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0RmluaXNoKCk7DQorICANCitm
dW5jdGlvbiBkb1Rlc3QoKSB7IA0KKwkvLyAxKSB0ZXN0IHRoYXQgYSBwbHVnaW4gY2FuJ3QgYmUg
bG9hZGVkIHdpdGggPGVtYmVkPiBpbnNpZGUgYSBzYW5kYm94ZWQgPGlmcmFtZT4NCisJLy8gKGRv
bmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMS5odG1sIGxvYWRlZCBpbiBpZjEgYmVsb3cp
DQorCS8vIDIpIHRlc3QgdGhhdCBhIHBsdWdpbiBjYW4ndCBiZSBsb2FkZWQgd2l0aCA8b2JqZWN0
PiBpbnNpZGUgYSBzYW5kYm94ZWQgPGlmcmFtZT4NCisJLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVf
c2FuZGJveF9mX2lmMS5odG1sIGxvYWRlZCBpbiBpZjEgYmVsb3cpDQorCS8vIDMpIHRlc3QgdGhh
dCBwbHVnaW4gY2FuJ3QgYmUgbG9hZGVkIGJ5IGEgc2FuZGJveGVkIDxpZnJhbWU+IHdpdGggc3Jj
IHBvaW50aW5nIHRvDQorCS8vIGEgZG9jdW1lbnQgdGhhdCBpcyBoYW5kbGVkIGJ5IGEgcGx1Z2lu
IChkb25lIGJ5IGlmXzIgYmVsb3cpDQorICAvLyA0KSB0ZXN0IHRoYXQgd2hlbiBhIHBsdWdpbiBp
cyBsb2FkZWQgaW4gYW4gdW5zYW5kYm94ZWQgaWZyYW1lLCBhIHNhbmRib3ggYXR0cmlidXRlDQor
ICAvLyBpcyB0aGVuIGFkZGVkIHRvIHRoZSBpZnJhbWUgYW5kIHRoZSBkb2N1bWVudCBjb250YWlu
aW5nIHRoZSBwbHVnaW4gaXMgcmVsb2FkZWQsDQorICAvLyB0aGUgcGx1Z2luIGRvZXMgbm90IGxv
YWQgaW4gdGhlIHNhbmRib3hlZCBpZnJhbWUgKGRvbmUgd2l0aCBpZl8zIGJlbG93KQ0KKyAgLy8g
NSkgdGVzdCB0aGF0IHdoZW4gd2hlbiBhIHNhbmRib3hlZCBpZnJhbWUncyBzYW5kYm94IGF0dHJp
YnV0ZSBpcyByZW1vdmVkLA0KKyAgLy8gYW5kIGEgbmV3IGRvY3VtZW50IGlzIGxvYWRlZCBpbnRv
IHRoZSBpZnJhbWUsIHRoZSBwbHVnaW4gbG9hZHMgDQorICAvLyAoZG9uZSB3aXRoIGlmXzQgYmVs
b3cpDQorCQ0KKwkvLyB0aGVzZSBhcmUgYWxsIGhhbmRsZWQgYnkgY2hlY2tpbmcgaG93IG1hbnkg
aW5zdGFuY2VzIG9mIHRoZSB0ZXN0IHBsdWdpbiBhcmUgbG9hZGVkDQorCS8vIHdoZW4gdGhpcyBz
Y3JpcHQgcnVucyBhcyB0aGUgb25sb2FkIGhhbmRsZXIgLSB0aGVyZSBzaG91bGQgYmUgdHdvIGlu
c3RhbmNlcywNCisgIC8vIGluaXRpYWxseSB0aGUgb25lIGxvYWRlZCBkaXJlY3RseSBieSB0aGlz
IHBhZ2UgaXRzZWxmLCBhbmQgdGhlIG9uZSBsb2FkZWQgZHVyaW5nDQorICAvLyB0ZXN0ICM0IGFi
b3ZlLiANCisJdmFyIHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGx1Z2luMScpOw0KKyAg
dmFyIGlmXzEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMScpOw0KKwlwLnN0YXJ0V2F0
Y2hpbmdJbnN0YW5jZUNvdW50KCk7DQorDQorCWlmXzEuc3JjID0gJ2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZl9pZjEuaHRtbCc7DQorfQ0KKw0KK2Z1bmN0aW9uIGlmXzFfbG9hZCgpIHsgDQorICB2YXIg
aWZfMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl8xJyk7DQorDQorCWlmIChpZl8xLnNy
YyA9PSAiYWJvdXQ6YmxhbmsiKQ0KKwkJcmV0dXJuOw0KKw0KKwkvLyBuZWVkIHRvIHdhaXQgZm9y
IHBsdWdpbiB0byBsb2FkLCBpZiB0aGUgdGVzdCBmYWlscy4uLg0KKyAgU2ltcGxlVGVzdC5leGVj
dXRlU29vbihpZl8xX2NvbnRpbnVlKTsNCit9DQorDQorZnVuY3Rpb24gaWZfMV9jb250aW51ZSgp
IHsNCisJLy8gaW5zdGFuY2UgY291bnQgc2hvdWxkIGJlIDAgKHRlc3RzICMxIGFuZCAjMiBhYm92
ZSkgDQorCXZhciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsdWdpbjEnKTsNCisJaXMo
cC5nZXRJbnN0YW5jZUNvdW50KCksIDAsICJwbHVnaW5zIHNob3VsZCBub3QgYmUgbG9hZGVkIHZp
YSA8b2JqZWN0PiBvciA8ZW1iZWQ+IGJ5IGEgc2FuZGJveGVkIGlmcmFtZSIpOw0KKw0KKyAgdmFy
IGlmXzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMicpOw0KKwlpZl8yLnNyYyA9ICdm
aWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWwnOw0KKwkNCisJU2ltcGxlVGVzdC5leGVjdXRl
U29vbihpZl8yX2NvbnRpbnVlKTsNCit9DQorDQorZnVuY3Rpb24gaWZfMl9jb250aW51ZSgpIHsN
CisJLy8gaW5zdGFuY2UgY291bnQgc2hvdWxkIGJlIDAgKHRlc3QgIzMgYWJvdmUpIA0KKwl2YXIg
cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbHVnaW4xJyk7DQorCQ0KKwlpcyhwLmdldElu
c3RhbmNlQ291bnQoKSwgMCwgInBsdWdpbnMgc2hvdWxkIG5vdCBiZSBsb2FkZWQgdmlhIGEgZG9j
dW1lbnQgb2YgYSB0eXBlIHRoYXQgcmVxdWlyZXMgYSBwbHVnaW4gZW1iZWRkZWQgaW4gYSBzYW5k
Ym94ZWQgaWZyYW1lIik7DQorCQ0KKyAgU2ltcGxlVGVzdC5leGVjdXRlU29vbihpZl8zX3Rlc3Qp
Ow0KK30NCisNCitmdW5jdGlvbiBpZl8zX3Rlc3QoKSB7DQorICB2YXIgaWZfMyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpZl8zJyk7DQorICAvLyBhZGQgc2FuZGJveCBhdHRyaWJ1dGUNCisg
IGlmXzMuc2FuZGJveCA9ICcnOw0KKwlpZl8zLnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5kYm94X2Zf
aWYxLmh0bWwnOw0KK30NCisgIA0KK2Z1bmN0aW9uIGlmXzNfbG9hZCgpIHsgDQorICBpZiAoaWZf
My5zcmMgPT0gImFib3V0OmJsYW5rIikNCisJCXJldHVybjsNCisNCisgIFNpbXBsZVRlc3QuZXhl
Y3V0ZVNvb24oaWZfM19jb250aW51ZSk7DQorfQ0KKyAgDQorZnVuY3Rpb24gaWZfM19jb250aW51
ZSgpIHsNCisgIHZhciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsdWdpbjEnKTsNCisJ
aXMocC5nZXRJbnN0YW5jZUNvdW50KCksIDAsICJwbHVnaW5zIHNob3VsZCBub3QgYmUgbG9hZGVk
IHdoZW4gYSBzYW5kYm94IGF0dHJpYnV0ZSBpcyBhZGRlZCIgKw0KKyAgICAgInRvIGFuIGlmcmFt
ZSBhbmQgYSBkb2N1bWVudCBjb250YWluaW5nIGEgcGx1Z2luIGlzIHRoZW4gbG9hZGVkIGludG8g
dGhlIGlmcmFtZSIpOw0KKyAgICAgDQorCVNpbXBsZVRlc3QuZXhlY3V0ZVNvb24oaWZfNF90ZXN0
KTsNCit9DQorDQorZnVuY3Rpb24gaWZfNF90ZXN0KCkgew0KKyAgdmFyIGlmXzQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnaWZfNCcpOw0KKyAgLy8gcmVtb3ZlIHNhbmRib3ggYXR0cmlidXRl
DQorICBpZl80LnJlbW92ZUF0dHJpYnV0ZSgnc2FuZGJveCcpOw0KKwlpZl80LnNyYyA9ICdmaWxl
X2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwnOw0KK30NCisNCitmdW5jdGlvbiBpZl80X2xvYWQo
KSB7DQorICBpZiAoaWZfNC5zcmMgPT0gImFib3V0OmJsYW5rIikNCisJCXJldHVybjsNCisNCisg
IFNpbXBsZVRlc3QuZXhlY3V0ZVNvb24oaWZfNF9jb250aW51ZSk7DQorfSAgDQorDQorZnVuY3Rp
b24gaWZfNF9jb250aW51ZSgpIHsNCisgIHZhciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3BsdWdpbjEnKTsNCisgIC8vIHRoZXJlIGFyZSAyIHBsdWdpbiBpbnN0YW5jZXMgaW4gZmlsZV9p
ZnJhbWVfc2FuZGJveF9pZjEuaHRtbCBsb2FkZWQgYnkNCisgIC8vIGlmXzEsIHRoZXkgc2hvdWxk
IHN1Y2Nlc3NmdWxseSBsb2FkLg0KKyAgaXMocC5nZXRJbnN0YW5jZUNvdW50KCksIDIsICJwbHVn
aW5zIHNob3VsZCBiZSBsb2FkZWQgd2hlbiBhIHNhbmRib3ggYXR0cmlidXRlIGlzIHJlbW92ZWQg
IiArDQorICAgICAiZnJvbSBhbiBpZnJhbWUgYW5kIGEgZG9jdW1lbnQgY29udGFpbmluZyBhIHBs
dWdpbiBpcyB0aGVuIGxvYWRlZCBpbnRvIHRoZSBpZnJhbWUiKTsNCisgICANCisJcC5zdG9wV2F0
Y2hpbmdJbnN0YW5jZUNvdW50KCk7DQorICBTaW1wbGVUZXN0LmV4ZWN1dGVTb29uKGZpbmlzaF90
ZXN0KTsNCit9DQorDQorZnVuY3Rpb24gZmluaXNoX3Rlc3QoKSB7DQorCVNpbXBsZVRlc3QuZmlu
aXNoKCk7DQorfQ0KKw0KK2FkZExvYWRFdmVudChkb1Rlc3QpOw0KKzwvc2NyaXB0Pg0KKzxib2R5
Pg0KKzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJbXBsZW1l
bnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMNCis8cCBpZD0iZGlzcGxheSI+
PC9wPg0KKzxkaXYgaWQ9ImNvbnRlbnQiPg0KKzxlbWJlZCBpZD0icGx1Z2luMSIgdHlwZT0iYXBw
bGljYXRpb24veC10ZXN0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PC9lbWJlZD4NCis8aWZy
YW1lIGlkPSJpZl8xIiBzYW5kYm94PSdhbGxvdy1zYW1lLW9yaWdpbicgb25Mb2FkPSdpZl8xX2xv
YWQoKScgc3JjPSJhYm91dDpibGFuayIgaGVpZ2h0PSI0MDAiIHdpZHRoPSI0MDAiPjwvaWZyYW1l
Pg0KKzxpZnJhbWUgaWQ9ImlmXzIiIHNhbmRib3g9J2FsbG93LXNhbWUtb3JpZ2luJyBzcmM9ImFi
b3V0OmJsYW5rIiBoZWlnaHQ9IjQwMCIgd2lkdGg9IjQwMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBp
ZD0iaWZfMyIgc3JjPSJhYm91dDpibGFuayIgb25sb2FkPSdpZl8zX2xvYWQoKScgaGVpZ2h0PSI0
MDAiIHdpZHRoPSI0MDAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgaWQ9ImlmXzQiIHNhbmRib3g9J2Fs
bG93LXNhbWUtb3JpZ2luJyBvbmxvYWQ9J2lmXzRfbG9hZCgpJyBzcmM9ImFib3V0OmJsYW5rIiBo
ZWlnaHQ9IjQwMCIgd2lkdGg9IjQwMCI+PC9pZnJhbWU+DQorPC9kaXY+DQorPC9ib2R5Pg0KKzwv
aHRtbD4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9t
b2NoaXRlc3QvYW5kcm9pZC5qc29uIGIvdGVzdGluZy9tb2NoaXRlc3QvYW5kcm9pZC5qc29uCi0t
LSBhL3Rlc3RpbmcvbW9jaGl0ZXN0L2FuZHJvaWQuanNvbgorKysgYi90ZXN0aW5nL21vY2hpdGVz
dC9hbmRyb2lkLmpzb24KQEAgLTc2LDE2ICs3NiwxNyBAQAogICJjb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L3Rlc3RfYnVnNDgxMzM1LnhodG1sIjogIlRJTUVEX09VVCIsCiAgImNvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvdGVzdF9idWc1MTQ4NTYuaHRtbCI6ICIiLAogICJjb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L3Rlc3RfYnVnNTU3MDg3LTIuaHRtbCI6ICJUSU1FRF9PVVQiLAogICJjb250
ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfYnVnNjEyNzMwLmh0bWwiOiAiIiwKICAiY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2J1ZzYxNTgzMy5odG1sIjogIlRJTUVEX09VVCIsCiAg
ImNvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9mb3JtU3VibWlzc2lvbi5odG1sIjogIlRJ
TUVEX09VVCIsCiAgImNvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9mb3JtU3VibWlzc2lv
bjIuaHRtbCI6ICIiLAogICJjb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfZnVsbHNjcmVl
bi1hcGkuaHRtbCI6ICJUSU1FRF9PVVQiLAorICJjb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rl
c3RfaWZyYW1lX3NhbmRib3hfcGx1Z2lucy5odG1sIjogIiIsCiAgImNvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvdGVzdF9vYmplY3RfcGx1Z2luX25hdi5odG1sIjogIlRJTUVEX09VVCIsCiAgImNv
bnRlbnQvaHRtbC9kb2N1bWVudC90ZXN0L3Rlc3RfYnVnMzY5MzcwLmh0bWwiOiAiIiwKICAiY29u
dGVudC9odG1sL2RvY3VtZW50L3Rlc3QvdGVzdF9idWczOTE3NzcuaHRtbCI6ICIiLAogICJjb250
ZW50L2h0bWwvZG9jdW1lbnQvdGVzdC90ZXN0X2J1ZzQ0NTAwNC5odG1sIjogIiIsCiAgImNvbnRl
bnQvaHRtbC9kb2N1bWVudC90ZXN0L3Rlc3RfYnVnNDQ2NDgzLmh0bWwiOiAiIiwKICAiY29udGVu
dC9odG1sL2RvY3VtZW50L3Rlc3QvdGVzdF9idWc3NDEyNjYuaHRtbCI6ICIiLAogICJjb250ZW50
L21lZGlhL3Rlc3QvdGVzdF9hdXRvcGxheV9jb250ZW50RWRpdGFibGUuaHRtbCI6ICIiLAogICJj
b250ZW50L21lZGlhL3Rlc3QvdGVzdF9idWZmZXJlZC5odG1sIjogIiIsCg==
</data>
<flag name="review"
          id="530017"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>639552</attachid>
            <date>2012-07-05 18:37:13 -0700</date>
            <delta_ts>2012-07-13 13:36:47 -0700</delta_ts>
            <desc>iframe sandbox v20</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>54821</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZTBmNjRjNzE0ODE0OTFkNjBjNGFkM2UzZDlm
OGJmMjNhZmZiOGI4MwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgx
MiwxNiArODEyLDI2IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYgYVNhbmRi
b3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVu
KSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAgICogcHJvcGVydGllcyBm
aWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5zcmVzdWx0IEZvcm1hdExv
Y2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQYXJhbXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVBhcmFtc0xlbmd0aCwK
QEAgLTE5MzcsNDIgKzE5NDcsNDQgQEAgcHVibGljOgogICAgKiBmcm9tIHRoZSBkb2N1bWVudCBp
dCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAKICAgLyoqCiAgICAqIFNl
dCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUgZ2l2ZW4gY2hhbm5lbCwg
aWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2YgYUNoYW5uZWwuICBhUHJp
bmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJvdXRCbGFuayBpcyB0cnVl
LCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBpdC4gSWYgYUZvcmNlT3du
ZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9uIHRoZSBjaGFubmVsLCBl
dmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAgICogZnJvbSB0aGUgY2hh
bm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRoZSBwcmluY2lwYWwgd2Fz
IHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwuCiAgICAqLwogICBzdGF0
aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIgPSBmYWxzZSk7CiAK
ICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNlNjRTdHJpbmcpOwogCiAg
IHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFzY2lpU3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhKTsKIAogICAvKiogSWYg
YUpTQXJyYXkgaXMgYSBKYXZhc2NyaXB0IGFycmF5LCB0aGlzIG1ldGhvZCBpdGVyYXRlcyBvdmVy
IGl0cwogICAgKiAgZWxlbWVudHMgYW5kIGFwcGVuZHMgdmFsdWVzIHRvIGFSZXRWYWwgYXMgbnNJ
QXRvbXMuCiAgICAqICBAdGhyb3cgTlNfRVJST1JfSUxMRUdBTF9WQUxVRSBpZiBhSlNBcnJheSBp
c24ndCBhIEpTIGFycmF5LgogICAgKi8gCiAgIHN0YXRpYyBuc3Jlc3VsdCBKU0FycmF5VG9BdG9t
QXJyYXkoSlNDb250ZXh0KiBhQ3gsIGNvbnN0IEpTOjpWYWx1ZSYgYUpTQXJyYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01BcnJheTxuc0lBdG9tPiYgYVJldFZh
bCk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBwYXNz
ZWQgaW4gcGFyYW1ldGVyIGhhcyB0aGUgYXV0b2NvbXBsZXRlCi0gICAqIGZ1bmN0aW9ubmFsaXR5
IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIuCisgICAq
IGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9y
bSBvd25lci4KICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFrZSBzdXJlIGF1dG9jb21w
bGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0eXBlLgogICAgKgogICAg
KiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNrLiBOT1RFOiBhSW5wdXQg
Y2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IGhh
cyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBib29sIElzQXV0b2NvbXBs
ZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQpOwogCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGlj
L25zSURvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisr
KyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaApAQCAtODgsMTggKzg4LDE4IEBA
IGNsYXNzIExvYWRlcjsKIAogbmFtZXNwYWNlIGRvbSB7CiBjbGFzcyBMaW5rOwogY2xhc3MgRWxl
bWVudDsKIH0gLy8gbmFtZXNwYWNlIGRvbQogfSAvLyBuYW1lc3BhY2UgbW96aWxsYQogCiAjZGVm
aW5lIE5TX0lET0NVTUVOVF9JSUQgXAoteyAweDhjNmExZTYyLCAweGQ1YWQsIDB4NDI5NywgXAot
ICB7IDB4YjksIDB4NDEsIDB4NjQsIDB4NDksIDB4MjIsIDB4MmUsIDB4YzQsIDB4ZjAgfSB9Cit7
IDB4NTdmZTQ0YWUsIDB4NjY1NiwgMHg0NGI4LCBcCisgIHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhh
NywgMHg0MywgMHgyOCwgMHhiZSwgMHg4NiB9IH0KIAogLy8gRmxhZyBmb3IgQWRkU3R5bGVTaGVl
dCgpLgogI2RlZmluZSBOU19TVFlMRVNIRUVUX0ZST01fQ0FUQUxPRyAgICAgICAgICAgICAgICAo
MSA8PCAwKQogCiAvLyBFbnVtIGZvciByZXF1ZXN0aW5nIGEgcGFydGljdWxhciB0eXBlIG9mIGRv
Y3VtZW50IHdoZW4gY3JlYXRpbmcgYSBkb2MKIGVudW0gRG9jdW1lbnRGbGF2b3IgewogICBEb2N1
bWVudEZsYXZvckxlZ2FjeUd1ZXNzLCAvLyBjb21wYXQgd2l0aCBvbGQgY29kZSB1bnRpbCBtYWRl
IEhUTUw1LWNvbXBsaWFudAogICBEb2N1bWVudEZsYXZvckhUTUwsIC8vIEhUTUxEb2N1bWVudCB3
aXRoIEhUTUxuZXNzIGJpdCBzZXQgdG8gdHJ1ZQpAQCAtNDI3LDE3ICs0MjcsMjYgQEAgcHVibGlj
OgogICAgKiBjYWxsZXJzIGFyZSBleHBlY3RlZCB0byB0YWtlIGFjdGlvbiBhcyBuZWVkZWQgaWYg
dGhleSB3YW50IHRoaXMKICAgICogY2hhbmdlIHRvIGFjdHVhbGx5IGNoYW5nZSBhbnl0aGluZyBp
bW1lZGlhdGVseS4KICAgICogQHNlZSBuc0JpZGlVdGlscy5oCiAgICAqLwogICB2b2lkIFNldEJp
ZGlPcHRpb25zKFBSVWludDMyIGFCaWRpT3B0aW9ucykKICAgewogICAgIG1CaWRpT3B0aW9ucyA9
IGFCaWRpT3B0aW9uczsKICAgfQotICAKKworICAvKioKKyAgICogR2V0IHRoZSBzYW5kYm94IGZs
YWdzIGZvciB0aGlzIGRvY3VtZW50LgorICAgKiBAc2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRo
ZSBwb3NzaWJsZSBmbGFncworICAgKi8KKyAgUFJVaW50MzIgU2FuZGJveEZsYWdzKCkgY29uc3QK
KyAgeworICAgIHJldHVybiBtU2FuZGJveEZsYWdzOworICB9CisKICAgLyoqCiAgICAqIEFjY2Vz
cyBIVFRQIGhlYWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAg
KiBzb3VyY2VzLCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCiAgIHZpcnR1YWwgdm9pZCBH
ZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFIZWFkZXJGaWVsZCwgbnNBU3RyaW5nJiBhRGF0YSkgY29u
c3QgPSAwOwogICB2aXJ0dWFsIHZvaWQgU2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhaGVhZGVyRmll
bGQsIGNvbnN0IG5zQVN0cmluZyYgYURhdGEpID0gMDsKIAogICAvKioKQEAgLTE4NjEsMTYgKzE4
NzAsMjEgQEAgcHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1bWVudCBpcyB0cnVlLCBt
T3JpZ2luYWxEb2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAgIC8vIGRvY3VtZW50Lgog
ICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7CiAKICAgLy8gVGhlIGJp
ZGkgb3B0aW9ucyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBiaXRmaWVsZCBtZWFucyBp
cwogICAvLyBkZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50MzIgbUJpZGlPcHRpb25z
OwogCisgIC8vIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVudC4gVGhlc2UgcmVmbGVj
dCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRoZQorICAvLyBhc3NvY2lh
dGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3RlbnQuIFRoZXNl
IGFyZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRhYmxlIC0gc2VlIG5zU2Fu
ZGJveEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgUFJVaW50MzIgbVNhbmRib3hG
bGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHByaXZhdGU6CiAgIG5zQ1N0
cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhlIGRvY3VtZW50J3Mgc2Vj
dXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3VyaXR5SW5mbzsKIApkaWZm
IC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAgYi9jb250ZW50L2Jh
c2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVu
dFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcApAQCAt
MTU1LDE2ICsxNTUsMTcgQEAgc3RhdGljIE5TX0RFRklORV9DSUQoa1hURlNlcnZpY2VDSUQsIE5T
XwogI2luY2x1ZGUgIm5zSUNoYXJzZXREZXRlY3Rvci5oIgogI2luY2x1ZGUgIm5zSUNoYXJzZXRE
ZXRlY3Rpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIm5zSVBsYXRmb3JtQ2hhcnNldC5oIgogI2lu
Y2x1ZGUgIm5zSUVkaXRvci5oIgogI2luY2x1ZGUgIm5zSUVkaXRvckRvY1NoZWxsLmgiCiAjaW5j
bHVkZSAibW96aWxsYS9BdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAibnNJUGFyc2VyU2VydmljZS5o
IgogI2luY2x1ZGUgIm5zSURPTVNjcmlwdE9iamVjdEZhY3RvcnkuaCIKKyNpbmNsdWRlICJuc1Nh
bmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNXcmFwcGVyQ2FjaGVJbmxpbmVzLmgiCiAKIGV4
dGVybiAiQyIgaW50IE1PWl9YTUxUcmFuc2xhdGVFbnRpdHkoY29uc3QgY2hhciogcHRyLCBjb25z
dCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqKiBuZXh0LCBQUlVuaWNoYXIqIHJlc3VsdCk7CiBleHRlcm4gIkMiIGludCBNT1pfWE1M
Q2hlY2tRTmFtZShjb25zdCBjaGFyKiBwdHIsIGNvbnN0IGNoYXIqIGVuZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBuc19hd2FyZSwgY29uc3QgY2hhcioqIGNvbG9uKTsK
IApAQCAtODgyLDE2ICs4ODMsNjIgQEAgbnNDb250ZW50VXRpbHM6OkdldFBhcnNlclNlcnZpY2Uo
KQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1BhcnNlclNlcnZpY2VDSUQsICZz
UGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIHNQYXJzZXJT
ZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVybiBzUGFyc2VyU2VydmljZTsK
IH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJp
YnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5kIGNvbnZlcnRz
IGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICoKKyAqIEBwYXJhbSBh
QXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAqIEByZXR1
cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLworUFJVaW50MzIKK25zQ29udGVu
dFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYgYVNh
bmRib3hBdHRyVmFsdWUpCit7CisgIC8vIElmIHRoZXJlJ3MgYSBzYW5kYm94IGF0dHJpYnV0ZSBh
dCBhbGwgKGFuZCB0aGVyZSBpcyBpZiB0aGlzIGlzIGJlaW5nCisgIC8vIGNhbGxlZCksIHN0YXJ0
IG9mZiBieSBzZXR0aW5nIGFsbCB0aGUgcmVzdHJpY3Rpb24gZmxhZ3MuCisgIFBSVWludDMyIG91
dCA9IFNBTkRCT1hFRF9OQVZJR0FUSU9OIHwKKyAgICAgICAgICAgICAgICAgU0FOREJPWEVEX1RP
UExFVkVMX05BVklHQVRJT04gfAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURfUExVR0lOUyB8
CisgICAgICAgICAgICAgICAgIFNBTkRCT1hFRF9PUklHSU4gfAorICAgICAgICAgICAgICAgICBT
QU5EQk9YRURfRk9STVMgfAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURfU0NSSVBUUyB8Cisg
ICAgICAgICAgICAgICAgIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisKKyAgaWYgKCFh
U2FuZGJveEF0dHJWYWx1ZS5Jc0VtcHR5KCkpIHsKKyAgICAvLyBUaGUgc2VwYXJhdG9yIG9wdGlv
bmFsIGZsYWcgaXMgdXNlZCBiZWNhdXNlIHRoZSBIVE1MNSBzcGVjIHNheXMgYW55CisgICAgLy8g
d2hpdGVzcGFjZSBpcyBvayBhcyBhIHNlcGFyYXRvciwgd2hpY2ggaXMgd2hhdCB0aGlzIGRvZXMu
CisgICAgSFRNTFNwbGl0T25TcGFjZXNUb2tlbml6ZXIgdG9rZW5pemVyKGFTYW5kYm94QXR0clZh
bHVlLCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXJUZW1wbGF0ZTxuc0NvbnRl
bnRVdGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9PUFRJT05BTCk7CisKKyAgICB3
aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAgICAgbnNEZXBlbmRlbnRTdWJz
dHJpbmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKyAgICAgIGlmICh0b2tlbi5M
b3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zYW1lLW9yaWdpbiIpKSB7CisgICAgICAgIG91
dCAmPSB+U0FOREJPWEVEX09SSUdJTjsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNl
RXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9ybXMiKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hF
RF9GT1JNUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgi
YWxsb3ctc2NyaXB0cyIpKSB7CisgICAgICAgIC8vIGFsbG93LXNjcmlwdHMgcmVtb3ZlcyBib3Ro
IFNBTkRCT1hFRF9TQ1JJUFRTIGFuZAorICAgICAgICAvLyBTQU5EQk9YRURfQVVUT01BVElDX0ZF
QVRVUkVTLgorICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9TQ1JJUFRTOworICAgICAgICBvdXQg
Jj0gflNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisgICAgICB9IGVsc2UgaWYgKHRva2Vu
Lkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXRvcC1uYXZpZ2F0aW9uIikpIHsKKyAgICAg
ICAgb3V0ICY9IH5TQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTjsKKyAgICAgIH0KKyAgICB9
CisgIH0KKworICByZXR1cm4gb3V0OworfQogCiAjaWZkZWYgTU9aX1hURgogbnNJWFRGU2Vydmlj
ZSoKIG5zQ29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFzWFRGU2Vydmlj
ZSkgewogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZz
WFRGU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKQEAgLTY1NTEsMTcgKzY1OTgs
MTggQEAgbnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJpdHlDb250ZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8gc3RhdGljCiBib29sCiBuc0Nv
bnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFsKiBhTG9hZGluZ1ByaW5j
aXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hh
bm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lVUkkqIGFVUkksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBGb3JBYm91dEJsYW5r
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRC
bGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFGb3JjZU93bmVy
KQogewogICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBjaGFubmVsLCBidXQgb25seSBm
b3IgY2hhbm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRoZWlyIG93biBzZWN1cml0eSBj
b250ZXh0LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25nIHRoYXQgdGhlIG93bmVyIGlz
IGlnbm9yZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1cHBsaWVkKSB1bmxlc3MgdGhl
IFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6YmxhbmsuCiAgIC8vIFhYWDogSWYg
dGhpcyBpcyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJzIGZvciB3aGF0IG93bmVycwpA
QCAtNjU2OSwyMyArNjYxNywzNSBAQCBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIo
bnNJUHJpCiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVsbDo6TG9hZFVSSSB3aGVyZSB3
ZSBmYWxsIGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRoZSBvd25lciBpZiBjYWxsZWQg
ZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAgdmVyeSB3cm9uZyBpZiB0aGlz
IGNvZGUgY2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhhdAogICAvLyAgICAgIGNhbid0
IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAgIC8vCiAgIC8vICAgICAgKEN1
cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4gdGhleSBhcmUgY3JlYXRlZCEK
ICAgLy8gICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3VsZCBiZSBiYWQhKQogICAvLwor
ICAvLyBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIgd2lsbCBiZSBzZXQsIGV2ZW4g
Zm9yIGEgY2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0cyBvd24gc2VjdXJpdHkgY29u
dGV4dC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1FCisgIC8vIHNhbmRib3ggYXR0
cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFuZCBpdHMgZG9jdW1lbnQpIHRv
CisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFsLgogICBib29sIGluaGVyaXQ7
CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dCB0byByZXR1cm4gc3Vj
Y2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24ndCBjYWxsIE5TX0lzQWJv
dXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBjb25kaXRpb24gbmVlZHMg
dG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQgd2hlcmUKICAgLy8g
d2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRoZSBvd25lci4KLSAgaWYg
KE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJLCAmaW5oZXJpdCkp
ICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAmJiBOU19Jc0Fib3V0
QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChOU19TVUNDRUVERUQoVVJJ
SW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgorICAgICAgKGluaGVy
aXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpKSkg
eworI2lmZGVmIERFQlVHCisgICAgLy8gQXNzZXJ0IHRoYXQgYUZvcmNlT3duZXIgaXMgb25seSBz
ZXQgZm9yIG51bGwgcHJpbmNpcGFscworICAgIGlmIChhRm9yY2VPd25lcikgeworICAgICAgbnND
T01QdHI8bnNJVVJJPiBvd25lclVSSTsKKyAgICAgIG5zcmVzdWx0IHJ2ID0gYUxvYWRpbmdQcmlu
Y2lwYWwtPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhvd25lclVSSSkpOworICAgICAgTU9aX0FTU0VS
VChOU19TVUNDRUVERUQocnYpICYmIFNjaGVtZUlzKG93bmVyVVJJLCBOU19OVUxMUFJJTkNJUEFM
X1NDSEVNRSkpOworICAgIH0KKyNlbmRpZgogICAgIGFDaGFubmVsLT5TZXRPd25lcihhTG9hZGlu
Z1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLwogICAvLyBmaWxlOiB1
cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6IGxvYWQgb3Bl
bmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCmRpZmYgLS1naXQgYS9jb250
ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50
LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTIzNzYsMTYgKzIzNzYsMzUgQEAgbnNEb2N1bWVu
dDo6U3RhcnREb2N1bWVudExvYWQoY29uc3QgY2hhcgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgn
OycsIHNlbWljb2xvbiwgZW5kKTsKICAgICBTZXRDb250ZW50VHlwZUludGVybmFsKFN1YnN0cmlu
ZyhzdGFydCwgc2VtaWNvbG9uKSk7CiAgIH0KIAogICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhh
Q2hhbm5lbCk7CiAKICAgbUNoYW5uZWwgPSBhQ2hhbm5lbDsKIAorICAvLyBJZiB0aGlzIGRvY3Vt
ZW50IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRvY3NoZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdz
CisgIC8vIHRvIHRoZSBkb2N1bWVudC4gVGhlc2UgYXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBz
ZXQgaGVyZS4KKyAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRl
cmZhY2UoYUNvbnRhaW5lcik7CisKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgbnNyZXN1bHQgcnYg
PSBkb2NTaGVsbC0+R2V0U2FuZGJveEZsYWdzKCZtU2FuZGJveEZsYWdzKTsKKyAgICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOworCisgICAgLy8gQWRkaXRpb25hbGx5LCBpZiB0aGlzIGRvY3No
ZWxsIGhhZCBpdHMgZG9jdW1lbnQncyBzYW5kYm94CisgICAgLy8gYXR0cmlidXRlIHJlbW92ZWQg
cHJpb3IgdG8gdGhpcyBsb2FkLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZQorICAgIC8vIHBsdWdpbnMg
Zm9yIHRoaXMgZG9jc2hlbGwuCisgICAgYm9vbCBzYW5kYm94Q2xlYXJlZDsKKyAgICBpZiAoTlNf
U1VDQ0VFREVEKGRvY1NoZWxsLT5HZXRTYW5kYm94Q2xlYXJlZCgmc2FuZGJveENsZWFyZWQpKSAm
JgorICAgICAgICAgc2FuZGJveENsZWFyZWQpIHsKKyAgICAgIGRvY1NoZWxsLT5TZXRBbGxvd1Bs
dWdpbnModHJ1ZSk7CisgICAgICBkb2NTaGVsbC0+U2V0U2FuZGJveENsZWFyZWQoZmFsc2UpOwor
ICAgIH0KKyAgfQorCiAgIG5zcmVzdWx0IHJ2ID0gSW5pdENTUCgpOwogICBOU19FTlNVUkVfU1VD
Q0VTUyhydiwgcnYpOwogCiAgIHJldHVybiBOU19PSzsKIH0KIAogbnNyZXN1bHQKIG5zRG9jdW1l
bnQ6OkluaXRDU1AoKQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVy
LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKLS0tIGEvY29udGVudC9i
YXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVM
b2FkZXIuY3BwCkBAIC03OCwxNiArNzgsMTkgQEAKICNpbmNsdWRlICJtb3ppbGxhL0d1YXJkT2Jq
ZWN0cy5oIgogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJtb3pp
bGxhL3VudXNlZC5oIgogI2luY2x1ZGUgIm1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJtb3ppbGxhL2xheW91dC9SZW5kZXJGcmFtZVBhcmVudC5oIgogCiAjaW5jbHVkZSAianNhcGku
aCIKIAorI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc1NhbmRi
b3hGbGFncy5oIgorCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBt
b3ppbGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE6OmxheW91dDsKIHR5cGVkZWYgRnJhbWVNZXRyaWNzOjpWaWV3SUQgVmll
d0lEOwogCiBjbGFzcyBuc0FzeW5jRG9jU2hlbGxEZXN0cm95ZXIgOiBwdWJsaWMgbnNSdW5uYWJs
ZQogewpAQCAtNDM5LDE2ICs0NDIsNDUgQEAgbnNGcmFtZUxvYWRlcjo6UmVhbGx5U3RhcnRMb2Fk
aW5nSW50ZXJuYQogICAvLyBKdXN0IHRvIGJlIHNhZmUsIHJlY2hlY2sgdXJpLgogICBydiA9IENo
ZWNrVVJJTG9hZChtVVJJVG9Mb2FkKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAog
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbExvYWRJbmZvPiBsb2FkSW5mbzsKICAgbURvY1NoZWxsLT5D
cmVhdGVMb2FkSW5mbyhnZXR0ZXJfQWRkUmVmcyhsb2FkSW5mbykpOwogICBOU19FTlNVUkVfVFJV
RShsb2FkSW5mbywgTlNfRVJST1JfRkFJTFVSRSk7CiAKKyAgLy8gSXMgdGhpcyBhbiA8aWZyYW1l
PiB3aXRoIGEgc2FuZGJveCBhdHRyaWJ1dGUgb3IgYSBwYXJlbnQgd2hpY2ggaXMKKyAgLy8gc2Fu
ZGJveGVkID8KKyAgbnNIVE1MSUZyYW1lRWxlbWVudCogaWZyYW1lID0KKyAgICBuc0hUTUxJRnJh
bWVFbGVtZW50OjpGcm9tQ29udGVudChtT3duZXJDb250ZW50KTsKKworICBQUlVpbnQzMiBzYW5k
Ym94RmxhZ3MgPSAwOworCisgIGlmIChpZnJhbWUpIHsKKyAgICBzYW5kYm94RmxhZ3MgPSBpZnJh
bWUtPkdldFNhbmRib3hGbGFncygpOworCisgICAgUFJVaW50MzIgcGFyZW50U2FuZGJveEZsYWdz
ID0gaWZyYW1lLT5Pd25lckRvYygpLT5TYW5kYm94RmxhZ3MoKTsKKworICAgIGlmIChzYW5kYm94
RmxhZ3MgfHwgcGFyZW50U2FuZGJveEZsYWdzKSB7CisgICAgICAvLyBUaGUgY2hpbGQgY2FuIG9u
bHkgYWRkIHJlc3RyaWN0aW9ucywgbm90IHJlbW92ZSB0aGVtLgorICAgICAgc2FuZGJveEZsYWdz
IHw9IHBhcmVudFNhbmRib3hGbGFnczsKKworICAgICAgbURvY1NoZWxsLT5TZXRTYW5kYm94Rmxh
Z3Moc2FuZGJveEZsYWdzKTsKKworICAgICAgLy8gU2V0IHVwIHRoZSBhY3R1YWwgc2FuZGJveGlu
ZyBmb3IgcGx1Z2lucyBhcyBzcGVjaWZpZWQuCisgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FO
REJPWEVEX1BMVUdJTlMpIHsKKyAgICAgICAgbURvY1NoZWxsLT5TZXRBbGxvd1BsdWdpbnMoZmFs
c2UpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIElmIHRoaXMgaXMgYW4gPGlmcmFtZT4g
YW5kIGl0J3Mgc2FuZGJveGVkIHdpdGggcmVzcGVjdCB0byBvcmlnaW4KKyAgLy8gd2Ugd2lsbCBz
ZXQgaXQgdXAgd2l0aCBhIG51bGwgcHJpbmNpcGFsIGxhdGVyIGluIG5zRG9jU2hlbGw6OkRvVVJJ
TG9hZC4KKyAgLy8gV2UgZG8gaXQgdGhlcmUgdG8gY29ycmVjdGx5IHNhbmRib3ggY29udGVudCB0
aGF0IHdhcyBsb2FkZWQgaW50bworICAvLyB0aGUgaWZyYW1lIHZpYSBvdGhlciBtZXRob2RzIHRo
YW4gdGhlIHNyYyBhdHRyaWJ1dGUuCiAgIC8vIFdlJ2xsIHVzZSBvdXIgcHJpbmNpcGFsLCBub3Qg
dGhhdCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVkIGluc2lkZSB1cy4gIFRoaXMKICAgLy8gaXMgdmVy
eSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBs
b2FkZWQgaW4KICAgLy8gc3ViZnJhbWVzIQogICBsb2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29u
dGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKIAogICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwog
ICBydiA9IG1Pd25lckNvbnRlbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRS
ZWZzKHJlZmVycmVyKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0dr
QXRvbUxpc3QuaAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCisrKyBiL2Nv
bnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKQEAgLTYzLDE3ICs2MywyMSBAQCBHS19BVE9N
KGFjdHVhdGUsICJhY3R1YXRlIikKIEdLX0FUT00oYWRkcmVzcywgImFkZHJlc3MiKQogR0tfQVRP
TShhZnRlciwgImFmdGVyIikKIEdLX0FUT00oYWZ0ZXJfZW5kLCAiYWZ0ZXJfZW5kIikKIEdLX0FU
T00oYWZ0ZXJfc3RhcnQsICJhZnRlcl9zdGFydCIpCiBHS19BVE9NKGFsaWduLCAiYWxpZ24iKQog
R0tfQVRPTShhbGluaywgImFsaW5rIikKIEdLX0FUT00oYWxsLCAiYWxsIikKIEdLX0FUT00oYWxs
b3dldmVudHMsICJhbGxvd2V2ZW50cyIpCitHS19BVE9NKGFsbG93Zm9ybXMsICJhbGxvdy1mb3Jt
cyIpCiBHS19BVE9NKGFsbG93bmVnYXRpdmVhc3NlcnRpb25zLCAiYWxsb3duZWdhdGl2ZWFzc2Vy
dGlvbnMiKQorR0tfQVRPTShhbGxvd3NhbWVvcmlnaW4sICJhbGxvdy1zYW1lLW9yaWdpbiIpCitH
S19BVE9NKGFsbG93c2NyaXB0cywgImFsbG93LXNjcmlwdHMiKQorR0tfQVRPTShhbGxvd3RvcG5h
dmlnYXRpb24sICJhbGxvdy10b3AtbmF2aWdhdGlvbiIpCiBHS19BVE9NKGFsbG93dW50cnVzdGVk
LCAiYWxsb3d1bnRydXN0ZWQiKQogR0tfQVRPTShhbHQsICJhbHQiKQogR0tfQVRPTShhbHRlcm5h
dGUsICJhbHRlcm5hdGUiKQogR0tfQVRPTShhbHdheXMsICJhbHdheXMiKQogR0tfQVRPTShhbmNl
c3RvciwgImFuY2VzdG9yIikKIEdLX0FUT00oYW5jZXN0b3JPclNlbGYsICJhbmNlc3Rvci1vci1z
ZWxmIikKIEdLX0FUT00oX2FuZCwgImFuZCIpCiBHS19BVE9NKGFueSwgImFueSIpCkBAIC04Mzks
MTYgKzg0MywxNyBAQCBHS19BVE9NKHJvd3NwYW4sICJyb3dzcGFuIikKIEdLX0FUT00ocnAsICJy
cCIpCiBHS19BVE9NKHJ0LCAicnQiKQogR0tfQVRPTShydGwsICJydGwiKQogR0tfQVRPTShydWJ5
LCAicnVieSIpCiBHS19BVE9NKHJ1bGUsICJydWxlIikKIEdLX0FUT00ocnVsZXMsICJydWxlcyIp
CiBHS19BVE9NKHMsICJzIikKIEdLX0FUT00oc2FtcCwgInNhbXAiKQorR0tfQVRPTShzYW5kYm94
LCAic2FuZGJveCIpCiBHS19BVE9NKHNiYXR0ciwgInNiYXR0ciIpCiBHS19BVE9NKHNjYWxlLCAi
c2NhbGUiKQogR0tfQVRPTShzY2FuLCAic2NhbiIpCiBHS19BVE9NKHNjaGVtZSwgInNjaGVtZSIp
CiBHS19BVE9NKHNjb3BlLCAic2NvcGUiKQogR0tfQVRPTShzY29wZWQsICJzY29wZWQiKQogR0tf
QVRPTShzY3JlZW4sICJzY3JlZW4iKQogR0tfQVRPTShzY3JlZW5YLCAic2NyZWVuWCIpCmRpZmYg
LS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmggYi9jb250ZW50L2Jhc2Uv
c3JjL25zU2FuZGJveEZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAor
KysgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmgKQEAgLTAsMCArMSw1OCBAQAor
LyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMt
YmFzaWMtb2Zmc2V0OiAyIC0qLSAqLw0KKy8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJq
ZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMNCisgKiBMaWNlbnNlLCB2LiAy
LjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIGZp
bGUsDQorICogWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4w
Ly4gKi8NCisNCisvKg0KKyAqIENvbnN0YW50IGZsYWdzIHRoYXQgZGVzY3JpYmUgaG93IGEgZG9j
dW1lbnQgaXMgc2FuZGJveGVkIGFjY29yZGluZyB0byB0aGUNCisgKiBIVE1MNSBzcGVjLg0KKyAq
Lw0KKw0KKyNpZm5kZWYgbnNTYW5kYm94RmxhZ3NfaF9fXw0KKyNkZWZpbmUgbnNTYW5kYm94Rmxh
Z3NfaF9fXw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2
aWdhdGluZyBicm93c2luZyBjb250ZXh0cyBvdGhlciB0aGFuDQorICogdGhlIHNhbmRib3hlZCBi
cm93c2luZyBjb250ZXh0IGl0c2VsZiAob3IgYnJvd3NpbmcgY29udGV4dHMgZnVydGhlcg0KKyAq
IG5lc3RlZCBpbnNpZGUgaXQpLCBhbmQgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0Lg0K
KyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX05BVklHQVRJT04gID0gMHgxOw0K
Kw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyB0
aGVpciB0b3AtbGV2ZWwgYnJvd3NpbmcNCisgKiBjb250ZXh0Lg0KKyAqLw0KK2NvbnN0IHVuc2ln
bmVkIGxvbmcgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gPSAweDI7DQorDQorLyoqDQor
ICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBpbnN0YW50aWF0aW5nIHBsdWdpbnMs
IHdoZXRoZXIgdXNpbmcgdGhlDQorICogZW1iZWQgZWxlbWVudCwgdGhlIG9iamVjdCBlbGVtZW50
LCB0aGUgYXBwbGV0IGVsZW1lbnQsIG9yIHRocm91Z2gNCisgKiBuYXZpZ2F0aW9uIG9mIGEgbmVz
dGVkIGJyb3dzaW5nIGNvbnRleHQsIHVubGVzcyB0aG9zZSBwbHVnaW5zIGNhbiBiZQ0KKyAqIHNl
Y3VyZWQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfUExVR0lOUyA9IDB4
NDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgZm9yY2VzIGNvbnRlbnQgaW50byBhIHVuaXF1ZSBv
cmlnaW4sIHRodXMgcHJldmVudGluZyBpdCBmcm9tDQorICogYWNjZXNzaW5nIG90aGVyIGNvbnRl
bnQgZnJvbSB0aGUgc2FtZSBvcmlnaW4uDQorICogVGhpcyBmbGFnIGFsc28gcHJldmVudHMgc2Ny
aXB0IGZyb20gcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gdGhlDQorICogZG9jdW1lbnQuY29v
a2llIElETCBhdHRyaWJ1dGUsIGFuZCBibG9ja3MgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4NCisg
Ki8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9PUklHSU4gPSAweDg7DQorDQorLyoq
DQorICogVGhpcyBmbGFnIGJsb2NrcyBmb3JtIHN1Ym1pc3Npb24uDQorICovDQorY29uc3QgdW5z
aWduZWQgbG9uZyBTQU5EQk9YRURfRk9STVMgPSAweDEwOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxh
ZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlvbi4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNB
TkRCT1hFRF9TQ1JJUFRTID0gMHgyMDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIGZl
YXR1cmVzIHRoYXQgdHJpZ2dlciBhdXRvbWF0aWNhbGx5LCBzdWNoIGFzDQorICogYXV0b21hdGlj
YWxseSBwbGF5aW5nIGEgdmlkZW8gb3IgYXV0b21hdGljYWxseSBmb2N1c2luZyBhIGZvcm0gY29u
dHJvbC4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVB
VFVSRVMgPSAweDQwOw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNT
Y3JpcHRMb2FkZXIuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAKLS0t
IGEvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNl
L3NyYy9uc1NjcmlwdExvYWRlci5jcHAKQEAgLTM3LDE2ICszNywxNyBAQAogI2luY2x1ZGUgIm5z
SUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgInBybG9nLmgiCiAjaW5jbHVkZSAi
bnNJQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1ZGUgIm5zQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1
ZGUgIm5zQ1JULmgiCiAjaW5jbHVkZSAibnNDb250ZW50Q3JlYXRvckZ1bmN0aW9ucy5oIgogI2lu
Y2x1ZGUgIm5zR2VuZXJpY0VsZW1lbnQuaCIKICNpbmNsdWRlICJuc0Nyb3NzU2l0ZUxpc3RlbmVy
UHJveHkuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibW96aWxs
YS9GdW5jdGlvblRpbWVyLmgiCiAjaW5jbHVkZSAibW96aWxsYS9DT1JTTW9kZS5oIgogI2luY2x1
ZGUgIm1vemlsbGEvQXR0cmlidXRlcy5oIgogCiAjaWZkZWYgUFJfTE9HR0lORwogc3RhdGljIFBS
TG9nTW9kdWxlSW5mbyogZ0NzcFBSTG9nOwogI2VuZGlmCkBAIC0yNzMsMTYgKzI3NCwyMSBAQCBu
c1NjcmlwdExvYWRlcjo6U3RhcnRMb2FkKG5zU2NyaXB0TG9hZFJlCiAgIGlmICghd2luZG93KSB7
CiAgICAgcmV0dXJuIE5TX0VSUk9SX05VTExfUE9JTlRFUjsKICAgfQogCiAgIG5zSURvY1NoZWxs
ICpkb2NzaGVsbCA9IHdpbmRvdy0+R2V0RG9jU2hlbGwoKTsKIAogICBuc0NPTVB0cjxuc0lJbnRl
cmZhY2VSZXF1ZXN0b3I+IHByb21wdGVyKGRvX1F1ZXJ5SW50ZXJmYWNlKGRvY3NoZWxsKSk7CiAK
KyAgLy8gSWYgdGhpcyBkb2N1bWVudCBpcyBzYW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctc2NyaXB0
cycsIGFib3J0LgorICBpZiAobURvY3VtZW50LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9T
Q1JJUFRTKSB7CisgICAgcmV0dXJuIE5TX09LOworICB9CisKICAgLy8gY2hlY2sgZm9yIGEgQ29u
dGVudCBTZWN1cml0eSBQb2xpY3kgdG8gcGFzcyBkb3duIHRvIHRoZSBjaGFubmVsCiAgIC8vIHRo
YXQgd2lsbCBiZSBjcmVhdGVkIHRvIGxvYWQgdGhlIHNjcmlwdAogICBuc0NPTVB0cjxuc0lDaGFu
bmVsUG9saWN5PiBjaGFubmVsUG9saWN5OwogICBuc0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQ
b2xpY3k+IGNzcDsKICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdl
dHRlcl9BZGRSZWZzKGNzcCkpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICBpZiAo
Y3NwKSB7CiAgICAgY2hhbm5lbFBvbGljeSA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5v
cmcvbnNjaGFubmVscG9saWN5OzEiKTsKQEAgLTYzMCwxNiArNjM2LDIxIEBAIG5zU2NyaXB0TG9h
ZGVyOjpQcm9jZXNzU2NyaXB0RWxlbWVudChuc0kKICAgICAgICAgIlRoZXJlIGNhbiBiZSBvbmx5
IG9uZSBwYXJzZXItYmxvY2tpbmcgc2NyaXB0IGF0IGEgdGltZSIpOwogICAgIE5TX0FTU0VSVElP
TihtWFNMVFJlcXVlc3RzLklzRW1wdHkoKSwKICAgICAgICAgIlBhcnNlci1ibG9ja2luZyBzY3Jp
cHRzIGFuZCBYU0xUIHNjcmlwdHMgaW4gdGhlIHNhbWUgZG9jISIpOwogICAgIG1QYXJzZXJCbG9j
a2luZ1JlcXVlc3QgPSByZXF1ZXN0OwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8gaW5s
aW5lIHNjcmlwdAorICAvLyBJcyB0aGlzIGRvY3VtZW50IHNhbmRib3hlZCB3aXRob3V0ICdhbGxv
dy1zY3JpcHRzJz8KKyAgaWYgKG1Eb2N1bWVudC0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURf
U0NSSVBUUykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIG5zQ09NUHRyPG5zSUNvbnRl
bnRTZWN1cml0eVBvbGljeT4gY3NwOwogICBydiA9IG1Eb2N1bWVudC0+Tm9kZVByaW5jaXBhbCgp
LT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBm
YWxzZSk7CiAKICAgaWYgKGNzcCkgewogICAgIFBSX0xPRyhnQ3NwUFJMb2csIFBSX0xPR19ERUJV
RywgKCJOZXcgU2NyaXB0TG9hZGVyIGkgKioqKndpdGggQ1NQKioqKiIpKTsKICAgICBib29sIGlu
bGluZU9LOwogICAgIHJ2ID0gY3NwLT5HZXRBbGxvd3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsK
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNw
cCBiL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcAotLS0gYS9j
b250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAKKysrIGIvY29udGVu
dC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCkBAIC01MCwxNiArNTAsMTcg
QEAKICNpbmNsdWRlICJuc0RPTUpTVXRpbHMuaCIKICNpbmNsdWRlICJuc0RPTVNjcmlwdE9iamVj
dEhvbGRlci5oIgogI2luY2x1ZGUgIm5zRGF0YUhhc2h0YWJsZS5oIgogI2luY2x1ZGUgIm5zQ09N
QXJyYXkuaCIKICNpbmNsdWRlICJuc0V2ZW50TGlzdGVuZXJTZXJ2aWNlLmgiCiAjaW5jbHVkZSAi
bnNJQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAibnNKU0Vudmlyb25tZW50Lmgi
CiAjaW5jbHVkZSAieHBjcHVibGljLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpo
YWw7CiAKICNkZWZpbmUgRVZFTlRfVFlQRV9FUVVBTFMoIGxzLCB0eXBlLCB1c2VyVHlwZSApIFwK
ICAgKGxzLT5tRXZlbnRUeXBlID09IHR5cGUgJiYgXAogICAobHMtPm1FdmVudFR5cGUgIT0gTlNf
VVNFUl9ERUZJTkVEX0VWRU5UIHx8IGxzLT5tVHlwZUF0b20gPT0gdXNlclR5cGUpKQogCkBAIC01
NjgsMTYgKzU2OSwyMiBAQCBuc0V2ZW50TGlzdGVuZXJNYW5hZ2VyOjpBZGRTY3JpcHRFdmVudExp
CiAgICAgLy8gbG9hZGVkIGFzIGRhdGEuCiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKICAgbnNy
ZXN1bHQgcnYgPSBOU19PSzsKICAgLy8gcmV0dXJuIGVhcmx5IHByZXZlbnRpbmcgdGhlIGV2ZW50
IGxpc3RlbmVyIGZyb20gYmVpbmcgYWRkZWQKICAgLy8gJ2RvYycgaXMgZmV0Y2hlZCBhYm92ZQog
ICBpZiAoZG9jKSB7CisgICAgLy8gRG9uJ3QgYWxsb3cgYWRkaW5nIGFuIGV2ZW50IGxpc3RlbmVy
IGlmIHRoZSBkb2N1bWVudCBpcyBzYW5kYm94ZWQKKyAgICAvLyB3aXRob3V0ICdhbGxvdy1zY3Jp
cHRzJy4KKyAgICBpZiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7
CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBu
c0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgICBydiA9IGRvYy0+Tm9k
ZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgICAgTlNfRU5TVVJF
X1NVQ0NFU1MocnYsIHJ2KTsKIAogICAgIGlmIChjc3ApIHsKICAgICAgIGJvb2wgaW5saW5lT0s7
CiAgICAgICBydiA9IGNzcC0+R2V0QWxsb3dzSW5saW5lU2NyaXB0KCZpbmxpbmVPSyk7CiAgICAg
ICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Ny
Yy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
SFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1M
Rm9ybUVsZW1lbnQuY3BwCkBAIC00OCwxNiArNDgsMTcgQEAKIAogI2luY2x1ZGUgIm1vekF1dG9E
b2NVcGRhdGUuaCIKICNpbmNsdWRlICJuc0lIVE1MQ29sbGVjdGlvbi5oIgogCiAjaW5jbHVkZSAi
bnNJQ29uc3RyYWludFZhbGlkYXRpb24uaCIKIAogI2luY2x1ZGUgIm5zSURPTUhUTUxCdXR0b25F
bGVtZW50LmgiCiAjaW5jbHVkZSAiZG9tYmluZGluZ3MuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hG
bGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiBzdGF0aWMgY29uc3Qg
aW50IE5TX0ZPUk1fQ09OVFJPTF9MSVNUX0hBU0hUQUJMRV9TSVpFID0gMTY7CiAKIHN0YXRpYyBj
b25zdCBQUlVpbnQ4IE5TX0ZPUk1fQVVUT0NPTVBMRVRFX09OICA9IDE7CiBzdGF0aWMgY29uc3Qg
UFJVaW50OCBOU19GT1JNX0FVVE9DT01QTEVURV9PRkYgPSAwOwogCkBAIC02NDksMTcgKzY1MCwx
OSBAQCBuc0hUTUxGb3JtRWxlbWVudDo6RG9TdWJtaXRPclJlc2V0KG5zRXZlCiAgICAgcmV0dXJu
IERvUmVzZXQoKTsKICAgfQogCiAgIGlmIChOU19GT1JNX1NVQk1JVCA9PSBhTWVzc2FnZSkgewog
ICAgIC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdyZSBub3QgaW4gYSBkb2N1bWVudC4KICAgICBpZiAo
IWRvYykgewogICAgICAgcmV0dXJuIE5TX09LOwogICAgIH0KLSAgICByZXR1cm4gRG9TdWJtaXQo
YUV2ZW50KTsKKyAgICAvLyBEb24ndCBzdWJtaXQgaWYgd2UncmUgaW4gYSBzYW5kYm94ZWQgZnJh
bWUgYW5kIGZvcm0gc3VibWl0CisgICAgLy8gaXMgZGlzYWJsZWQuCisgICAgcmV0dXJuIChkb2Mt
PlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX0ZPUk1TKSA/IE5TX09LIDogRG9TdWJtaXQoYUV2
ZW50KTsKICAgfQogCiAgIE1PWl9BU1NFUlQoZmFsc2UpOwogICByZXR1cm4gTlNfT0s7CiB9CiAK
IG5zcmVzdWx0CiBuc0hUTUxGb3JtRWxlbWVudDo6RG9SZXNldCgpCkBAIC0xNjUwLDE2ICsxNjUz
LDI0IEBAIG5zSFRNTEZvcm1FbGVtZW50OjpDaGVja1ZhbGlkRm9ybVN1Ym1pc3MKICAgICogVE9E
TzogdGhlIGNoZWNrIGZvciBvYnNlcnZlciBzaG91bGQgYmUgcmVtb3ZlZCBsYXRlciB3aGVuIEhU
TUw1IEZvcm1zIHdpbGwKICAgICogYmUgc3ByZWFkIGVub3VnaCBhbmQgYXV0aG9ycyB3aWxsIGFz
c3VtZSBmb3JtcyBjYW4ndCBiZSBzdWJtaXR0ZWQgd2hlbgogICAgKiBpbnZhbGlkLiBTZWUgYnVn
IDU4NzY3MS4KICAgICovCiAKICAgTlNfQVNTRVJUSU9OKCFIYXNBdHRyKGtOYW1lU3BhY2VJRF9O
b25lLCBuc0drQXRvbXM6Om5vdmFsaWRhdGUpLAogICAgICAgICAgICAgICAgIldlIHNob3VsZG4n
dCBiZSB0aGVyZSBpZiBub3ZhbGlkYXRlIGlzIHNldCEiKTsKIAorICAvLyBEb24ndCBkbyB2YWxp
ZGF0aW9uIGZvciBhIGZvcm0gc3VibWl0IGRvbmUgYnkgYSBzYW5kYm94ZWQgZG9jdW1lbnQgdGhh
dAorICAvLyBkb2Vzbid0IGhhdmUgJ2FsbG93LWZvcm1zJywgdGhlIHN1Ym1pdCB3aWxsIGhhdmUg
YmVlbiBibG9ja2VkIGFuZCB0aGUKKyAgLy8gSFRNTDUgc3BlYyBzYXlzIHdlIHNob3VsZG4ndCB2
YWxpZGF0ZSBpbiB0aGlzIGNhc2UuCisgIG5zSURvY3VtZW50KiBkb2MgPSBHZXRDdXJyZW50RG9j
KCk7CisgIGlmIChkb2MgJiYgKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfRk9STVMp
KSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCiAgIC8vIFdoZW4gLnN1Ym1pdCgpIGlzIGNh
bGxlZCBhRXZlbnQgPSBuc251bGwgc28gd2UgY2FuIHJlbHkgb24gdGhhdCB0byBrbm93IGlmCiAg
IC8vIHdlIGhhdmUgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBmb3JtLgogICBuc0NPTVB0
cjxuc0lPYnNlcnZlclNlcnZpY2U+IHNlcnZpY2UgPQogICAgIG1vemlsbGE6OnNlcnZpY2VzOjpH
ZXRPYnNlcnZlclNlcnZpY2UoKTsKICAgaWYgKCFzZXJ2aWNlKSB7CiAgICAgTlNfV0FSTklORygi
Tm8gb2JzZXJ2ZXIgc2VydmljZSBhdmFpbGFibGUhIik7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0K
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50
LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcAot
LS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC0x
LDIyICsxLDE2IEBACiAvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJz
LW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCiAvKiBUaGlzIFNvdXJjZSBDb2Rl
IEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgKiBM
aWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQg
d2l0aCB0aGlzCiAgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEu
b3JnL01QTC8yLjAvLiAqLwogCiAjaW5jbHVkZSAibW96aWxsYS9VdGlsLmgiCiAKICNpbmNsdWRl
ICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJuc0drQXRvbXMuaCIKLSNpbmNsdWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIK
LSNpbmNsdWRlICJuc0RPTUVycm9yLmgiCi0jaW5jbHVkZSAibnNSdWxlRGF0YS5oIgotI2luY2x1
ZGUgIm5zU3R5bGVDb25zdHMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBu
YW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiBOU19JTVBMX05TX05FV19IVE1MX0VMRU1FTlRfQ0hF
Q0tfUEFSU0VSKElGcmFtZSkKIAogbnNIVE1MSUZyYW1lRWxlbWVudDo6bnNIVE1MSUZyYW1lRWxl
bWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb21QYXJzZXIgYUZyb21QYXJzZXIpCkBA
IC01MSwxNiArNDUsMTcgQEAgTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50
LAogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBMb25nRGVzYywgbG9uZ2Rl
c2MpCiBOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE1hcmdpbkhlaWdo
dCwgbWFyZ2luaGVpZ2h0KQogTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50
LCBNYXJnaW5XaWR0aCwgbWFyZ2lud2lkdGgpCiBOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElG
cmFtZUVsZW1lbnQsIE5hbWUsIG5hbWUpCiBOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFt
ZUVsZW1lbnQsIFNjcm9sbGluZywgc2Nyb2xsaW5nKQogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxJ
RnJhbWVFbGVtZW50LCBTcmMsIHNyYykKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1l
RWxlbWVudCwgV2lkdGgsIHdpZHRoKQogTlNfSU1QTF9CT09MX0FUVFIobnNIVE1MSUZyYW1lRWxl
bWVudCwgTW96QWxsb3dGdWxsU2NyZWVuLCBtb3phbGxvd2Z1bGxzY3JlZW4pCitOU19JTVBMX1NU
UklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNhbmRib3gsIHNhbmRib3gpCiAKIHZvaWQK
IG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEl0ZW1WYWx1ZVRleHQobnNBU3RyaW5nJiBhVmFsdWUp
CiB7CiAgIEdldFNyYyhhVmFsdWUpOwogfQogCiB2b2lkCkBAIC0yMDAsOCArMTk1LDQ3IEBAIG5z
SFRNTElGcmFtZUVsZW1lbnQ6OklzQXR0cmlidXRlTWFwcGVkKGMKIAogCiBuc01hcFJ1bGVUb0F0
dHJpYnV0ZXNGdW5jCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRBdHRyaWJ1dGVNYXBwaW5nRnVu
Y3Rpb24oKSBjb25zdAogewogICByZXR1cm4gJk1hcEF0dHJpYnV0ZXNJbnRvUnVsZTsKIH0KIAor
bnNyZXN1bHQKK25zSFRNTElGcmFtZUVsZW1lbnQ6OkFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1l
U3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhTm90aWZ5KQoreworICBpZiAoYU5hbWUgPT0gbnNHa0F0b21zOjpz
YW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFtZVNwYWNlSURfTm9uZSkgeworICAgIC8vIFBh
cnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlLCBhbmQgaWYgd2UgaGF2
ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0IGl0cyBzYW5kYm94IGZsYWdzIGFwcHJvcHJpYXRlbHku
CisgICAgaWYgKG1GcmFtZUxvYWRlcikgeworICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRv
Y3NoZWxsID0gbUZyYW1lTG9hZGVyLT5HZXRFeGlzdGluZ0RvY1NoZWxsKCk7CisKKyAgICAgIGlm
IChkb2NzaGVsbCkgeworICAgICAgICBQUlVpbnQzMiBuZXdGbGFncyA9IDA7CisgICAgICAgIC8v
IElmIGEgTlVMTCBhVmFsdWUgaXMgcGFzc2VkIGluLCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBzYW5k
Ym94IGZsYWdzCisgICAgICAgIC8vIHdoaWNoIHdlIHdpbGwgZG8gYnkgc2V0dGluZyB0aGVtIHRv
IDAuCisgICAgICAgIGlmIChhVmFsdWUpIHsKKyAgICAgICAgICBuc0F1dG9TdHJpbmcgc3RyVmFs
dWU7CisgICAgICAgICAgYVZhbHVlLT5Ub1N0cmluZyhzdHJWYWx1ZSk7CisgICAgICAgICAgbmV3
RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncygKKyAg
ICAgICAgICAgIHN0clZhbHVlKTsKKworICAgICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZXJlIHNh
bmRib3ggYXR0cmlidXRlIGlzIHJlbW92ZWQsIHRoZW4gcmUtYWRkZWQKKyAgICAgICAgICAvLyBh
bmQgdGhlbiBmcmFtZSBpcyBuYXZpZ2F0ZWQgdG8gYSBuZXcgZG9jdW1lbnQuCisgICAgICAgICAg
ZG9jc2hlbGwtPlNldFNhbmRib3hDbGVhcmVkKGZhbHNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAvLyBJZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgd2FzIHJlbW92ZWQsIG5vdCBvbmx5
IGRvIHRoZSBmbGFncyBuZWVkCisgICAgICAgICAgLy8gdG8gYmUgY2xlYXJlZCwgYnV0IG9uIHRo
ZSBuZXh0IGRvY3VtZW50IGxvYWQsIHdlIG5lZWQgdG8KKyAgICAgICAgICAvLyByZS1lbmFibGUg
cGx1Z2lucyBmb3IgdGhpcyBkb2NzaGVsbC4gV2Ugc2V0IGEgZmxhZyBoZXJlIGZvcgorICAgICAg
ICAgIC8vIHRoaXMgcHVycG9zZS4KKyAgICAgICAgICBkb2NzaGVsbC0+U2V0U2FuZGJveENsZWFy
ZWQodHJ1ZSk7CisgICAgICAgIH0gICAgICAgCisgICAgICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94
RmxhZ3MobmV3RmxhZ3MpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbnNHZW5lcmlj
SFRNTEVsZW1lbnQ6OkFmdGVyU2V0QXR0cihhTmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOb3RpZnkpOworCit9
CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVu
dC5oIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaAotLS0g
YS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCisrKyBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmgKQEAgLTEsMTYgKzEs
MjQgQEAKIC8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTog
bmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KIC8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBp
cyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKICAqIExpY2Vuc2Us
IHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRo
aXMKICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBM
LzIuMC8uICovCiAKICNpbmNsdWRlICJuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50LmgiCiAjaW5j
bHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJuc0lET01HZXRTVkdE
b2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAibnNH
a0F0b21zLmgiCisjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc01hcHBlZEF0
dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJuc0RPTUVycm9yLmgiCisjaW5jbHVkZSAibnNSdWxlRGF0
YS5oIgorI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKKyNpbmNsdWRlICJuc0NvbnRlbnRVdGls
cy5oIgogCiBjbGFzcyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5zR2VuZXJpY0hUTUxG
cmFtZUVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9NSFRN
TElGcmFtZUVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgbnNJRE9N
R2V0U1ZHRG9jdW1lbnQKIHsKIHB1YmxpYzoKICAgbnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5
X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAg
bW96aWxsYTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxsYTo6ZG9tOjpOT1Rf
RlJPTV9QQVJTRVIpOwpAQCAtNDEsMTIgKzQ5LDM2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpOwogICBOU19JTUVUSE9EXyhi
b29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBhQXR0cmlidXRlKSBjb25zdDsK
ICAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdldEF0dHJpYnV0ZU1hcHBpbmdG
dW5jdGlvbigpIGNvbnN0OwogCiAgIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJTm9kZUluZm8g
KmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0OwogICB2aXJ0dWFsIG5zWFBDQ2xh
c3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKICAgdmlydHVhbCBuc0lET01Ob2RlKiBBc0RPTU5vZGUo
KSB7IHJldHVybiB0aGlzOyB9CiAKKyAgdmlydHVhbCBuc3Jlc3VsdCBBZnRlclNldEF0dHIoUFJJ
bnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGFOb3RpZnkpOworCisgIFBSVWludDMyIEdldFNhbmRib3hGbGFn
cygpCisgIHsKKyAgICBuc0F1dG9TdHJpbmcgc2FuZGJveEF0dHI7CisKKyAgICBpZiAoR2V0QXR0
cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpzYW5kYm94LCBzYW5kYm94QXR0cikpIHsK
KyAgICAgIHJldHVybiBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFn
cyhzYW5kYm94QXR0cik7CisgICAgfQorCisgICAgLy8gTm8gc2FuZGJveCBhdHRyaWJ1dGUsIG5v
IHNhbmRib3ggZmxhZ3MuCisgICAgcmV0dXJuIDA7CisgIH0KKworICBzdGF0aWMgbnNIVE1MSUZy
YW1lRWxlbWVudCogRnJvbUNvbnRlbnQobnNJQ29udGVudCAqYUNvbnRlbnQpCisgIHsKKyAgICBp
ZiAoYUNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6OmlmcmFtZSkpIHsKKyAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxuc0hUTUxJRnJhbWVFbGVtZW50Kj4oYUNvbnRlbnQpOworICAgIH0KKyAgICBy
ZXR1cm4gbnNudWxsOworICB9CisKIHByb3RlY3RlZDoKICAgdmlydHVhbCB2b2lkIEdldEl0ZW1W
YWx1ZVRleHQobnNBU3RyaW5nJiB0ZXh0KTsKICAgdmlydHVhbCB2b2lkIFNldEl0ZW1WYWx1ZVRl
eHQoY29uc3QgbnNBU3RyaW5nJiB0ZXh0KTsKIH07CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
ZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9z
cmMvbnNIVE1MRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNI
VE1MRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9j
dW1lbnQuY3BwCkBAIC05OCwxNiArOTgsMTcgQEAKICNpbmNsdWRlICJwcnByZi5oIgogI2luY2x1
ZGUgIm1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2Vz
LmgiCiAjaW5jbHVkZSAibnNNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJuc0lSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAibnNIdG1sNVRyZWVPcEV4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibnNIdG1sNVBhcnNl
ci5oIgogI2luY2x1ZGUgIm5zSURPTUpTV2luZG93LmgiCisjaW5jbHVkZSAibnNTYW5kYm94Rmxh
Z3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxs
YTo6ZG9tOwogCiAjZGVmaW5lIE5TX01BWF9ET0NVTUVOVF9XUklURV9ERVBUSCAyMAogCiAjaW5j
bHVkZSAicHJtZW0uaCIKICNpbmNsdWRlICJwcnRpbWUuaCIKQEAgLTEyMTYsMTYgKzEyMTcsMjIg
QEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwogewogICBhQ29va2ll
LlRydW5jYXRlKCk7IC8vIGNsZWFyIGN1cnJlbnQgY29va2llIGluIGNhc2Ugc2VydmljZSBmYWls
czsKICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBjb29raWUgaXNuJ3QgYW4gZXJyb3IgY29u
ZGl0aW9uLgogCiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2VzcykgewogICAgIHJldHVybiBOU19P
SzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBp
cyBzZXQsIGFjY2VzcyB0byByZWFkIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYg
KG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSB7CisgICAgcmV0dXJuIE5TX0VSUk9S
X0RPTV9TRUNVUklUWV9FUlI7CisgIH0KKyAgCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2Vy
dmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNl
ID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2Vy
dmljZSkgewogICAgIC8vIEdldCBhIFVSSSBmcm9tIHRoZSBkb2N1bWVudCBwcmluY2lwYWwuIFdl
IHVzZSB0aGUgb3JpZ2luYWwKICAgICAvLyBjb2RlYmFzZSBpbiBjYXNlIHRoZSBjb2RlYmFzZSB3
YXMgY2hhbmdlZCBieSBTZXREb21haW4KICAgICBuc0NPTVB0cjxuc0lVUkk+IGNvZGViYXNlVVJJ
OwogICAgIE5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKGNvZGViYXNlVVJJ
KSk7CiAKQEAgLTEyNDYsMTYgKzEyNTMsMjIgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShu
c0FTdHJpbmcmIGFDbwogCiBOU19JTUVUSE9ESU1QCiBuc0hUTUxEb2N1bWVudDo6U2V0Q29va2ll
KGNvbnN0IG5zQVN0cmluZyYgYUNvb2tpZSkKIHsKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNz
KSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2Fu
ZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNldCwgYWNjZXNzIHRvIHdyaXRlIGNvb2tpZXMKKyAgLy8g
aXMgcHJvaGliaXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSB7
CisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgIH0KKwogICAvLyBub3Qg
aGF2aW5nIGEgY29va2llIHNlcnZpY2UgaXNuJ3QgYW4gZXJyb3IKICAgbnNDT01QdHI8bnNJQ29v
a2llU2VydmljZT4gc2VydmljZSA9IGRvX0dldFNlcnZpY2UoTlNfQ09PS0lFU0VSVklDRV9DT05U
UkFDVElEKTsKICAgaWYgKHNlcnZpY2UgJiYgbURvY3VtZW50VVJJKSB7CiAgICAgbnNDT01QdHI8
bnNJUHJvbXB0PiBwcm9tcHQ7CiAgICAgbnNDT01QdHI8bnNQSURPTVdpbmRvdz4gd2luZG93ID0g
R2V0V2luZG93KCk7CiAgICAgaWYgKHdpbmRvdykgewogICAgICAgd2luZG93LT5HZXRQcm9tcHRl
cihnZXR0ZXJfQWRkUmVmcyhwcm9tcHQpKTsKICAgICB9CmRpZmYgLS1naXQgYS9kb2NzaGVsbC9i
YXNlL01ha2VmaWxlLmluIGIvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbgotLS0gYS9kb2NzaGVs
bC9iYXNlL01ha2VmaWxlLmluCisrKyBiL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4KQEAgLTg1
LDkgKzg1LDEwIEBAIGluY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9jb25maWcubWsKIGluY2x1
ZGUgJCh0b3BzcmNkaXIpL2lwYy9jaHJvbWl1bS9jaHJvbWl1bS1jb25maWcubWsKIGluY2x1ZGUg
JCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawogCiBMT0NBTF9JTkNMVURFUyArPSBcCiAgIC1J
JChzcmNkaXIpLy4uL3NoaXN0b3J5L3NyYyBcCiAgIC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwK
ICAgLUkkKHRvcHNyY2RpcikvbGF5b3V0L2Jhc2UgXAogICAtSSQodG9wc3JjZGlyKS94cGNvbS9k
cyBcCisgIC1JJCh0b3BzcmNkaXIpL2NvbnRlbnQvYmFzZS9zcmMgXAogICAkKE5VTEwpCmRpZmYg
LS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0Rv
Y1NoZWxsLmNwcAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3No
ZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKQEAgLTE3NywxNiArMTc3LDE3IEBACiAjaW5jbHVkZSAi
bnNJV2ViQnJvd3NlclByaW50LmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgIm5zUGx1Z2luRXJyb3Iu
aCIKICNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zQ29udGVudEVycm9y
cy5oIgogI2luY2x1ZGUgIm5zSUNoYW5uZWxQb2xpY3kuaCIKICNpbmNsdWRlICJuc0lDb250ZW50
U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVk
ZSAibnNYVUxBcHBBUEkuaCIKIAogI2luY2x1ZGUgIm5zRE9NTmF2aWdhdGlvblRpbWluZy5oIgog
I2luY2x1ZGUgIm5zSVRpbWVkQ2hhbm5lbC5oIgogI2luY2x1ZGUgIm1vemlsbGEvU3RhcnR1cFRp
bWVsaW5lLmgiCiAjaW5jbHVkZSAibnNJRnJhbWVNZXNzYWdlTWFuYWdlci5oIgogCkBAIC03Mjks
MTYgKzczMCwxNyBAQCBuc0RvY1NoZWxsOjpuc0RvY1NoZWxsKCk6CiAgICAgbUJ1c3lGbGFncyhC
VVNZX0ZMQUdTX05PTkUpLAogICAgIG1BcHBUeXBlKG5zSURvY1NoZWxsOjpBUFBfVFlQRV9VTktO
T1dOKSwKICAgICBtTG9hZFR5cGUoMCksCiAgICAgbU1hcmdpbldpZHRoKC0xKSwKICAgICBtTWFy
Z2luSGVpZ2h0KC0xKSwKICAgICBtSXRlbVR5cGUodHlwZUNvbnRlbnQpLAogICAgIG1QcmV2aW91
c1RyYW5zSW5kZXgoLTEpLAogICAgIG1Mb2FkZWRUcmFuc0luZGV4KC0xKSwKKyAgICBtU2FuZGJv
eEZsYWdzKDApLAogICAgIG1DcmVhdGVkKGZhbHNlKSwKICAgICBtQWxsb3dTdWJmcmFtZXModHJ1
ZSksCiAgICAgbUFsbG93UGx1Z2lucyh0cnVlKSwKICAgICBtQWxsb3dKYXZhc2NyaXB0KHRydWUp
LAogICAgIG1BbGxvd01ldGFSZWRpcmVjdHModHJ1ZSksCiAgICAgbUFsbG93SW1hZ2VzKHRydWUp
LAogICAgIG1BbGxvd0ROU1ByZWZldGNoKHRydWUpLAogICAgIG1BbGxvd1dpbmRvd0NvbnRyb2wo
dHJ1ZSksCkBAIC03NTQsMTYgKzc1NiwxNyBAQCBuc0RvY1NoZWxsOjpuc0RvY1NoZWxsKCk6CiAg
ICAgbUluUHJpdmF0ZUJyb3dzaW5nKGZhbHNlKSwKICAgICBtRmlyZWRVbmxvYWRFdmVudChmYWxz
ZSksCiAgICAgbUVPREZvckN1cnJlbnREb2N1bWVudChmYWxzZSksCiAgICAgbVVSSVJlc3VsdGVk
SW5Eb2N1bWVudChmYWxzZSksCiAgICAgbUlzQmVpbmdEZXN0cm95ZWQoZmFsc2UpLAogICAgIG1J
c0V4ZWN1dGluZ09uTG9hZEhhbmRsZXIoZmFsc2UpLAogICAgIG1Jc1ByaW50aW5nT3JQUChmYWxz
ZSksCiAgICAgbVNhdmluZ09sZFZpZXdlcihmYWxzZSksCisgICAgbVNhbmRib3hDbGVhcmVkKGZh
bHNlKSwKICNpZmRlZiBERUJVRwogICAgIG1JbkVuc3VyZVNjcmlwdEVudihmYWxzZSksCiAjZW5k
aWYKICAgICBtUGFyZW50Q2hhcnNldFNvdXJjZSgwKQogewogICAgIG1IaXN0b3J5SUQgPSArK2dE
b2NzaGVsbElEQ291bnRlcjsKICAgICBpZiAoZ0RvY1NoZWxsQ291bnQrKyA9PSAwKSB7CiAgICAg
ICAgIE5TX0FTU0VSVElPTihzVVJJRml4dXAgPT0gbnNudWxsLApAQCAtMjA3MSwxNiArMjA3NCwy
OSBAQCBuc0RvY1NoZWxsOjpTZXRVc2VQcml2YXRlQnJvd3NpbmcoYm9vbCBhCiAgICAgICAgICAg
ICAgICAgb2JzLT5Qcml2YXRlTW9kZUNoYW5nZWQoYVVzZVByaXZhdGVCcm93c2luZyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19J
TUVUSE9ESU1QCituc0RvY1NoZWxsOjpHZXRTYW5kYm94Q2xlYXJlZChib29sICogYVNhbmRib3hD
bGVhcmVkKQoreworICAgICphU2FuZGJveENsZWFyZWQgPSBtU2FuZGJveENsZWFyZWQ7CisgICAg
cmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCituc0RvY1NoZWxsOjpTZXRTYW5kYm94
Q2xlYXJlZChib29sIGFTYW5kYm94Q2xlYXJlZCkKK3sKKyAgICBtU2FuZGJveENsZWFyZWQgPSBh
U2FuZGJveENsZWFyZWQ7CisgICAgcmV0dXJuIE5TX09LOworfQorTlNfSU1FVEhPRElNUAogbnNE
b2NTaGVsbDo6QWRkV2Vha1ByaXZhY3lUcmFuc2l0aW9uT2JzZXJ2ZXIobnNJUHJpdmFjeVRyYW5z
aXRpb25PYnNlcnZlciogYU9ic2VydmVyKQogewogICAgIG5zV2Vha1B0ciB3ZWFrT2JzID0gZG9f
R2V0V2Vha1JlZmVyZW5jZShhT2JzZXJ2ZXIpOwogICAgIGlmICghd2Vha09icykgewogICAgICAg
ICByZXR1cm4gTlNfRVJST1JfTk9UX0FWQUlMQUJMRTsKICAgICB9CiAgICAgcmV0dXJuIG1Qcml2
YWN5T2JzZXJ2ZXJzLkFwcGVuZEVsZW1lbnQod2Vha09icykgPyBOU19PSyA6IE5TX0VSUk9SX0ZB
SUxVUkU7CiB9CkBAIC0zMDEwLDE2ICszMDI2LDczIEBAIG5zRG9jU2hlbGw6OkZpbmRJdGVtV2l0
aE5hbWUoY29uc3QgUFJVbmkKICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChmb3VuZEl0ZW0pIHsKICAgICAgICAgICAgIC8vIFdlIHJldHVy
biBmb3VuZEl0ZW0gaGVyZSBldmVuIGlmIGl0J3Mgbm90IGFuIGFjdGl2ZQogICAgICAgICAgICAg
Ly8gaXRlbSBzaW5jZSBhbGwgdGhlIG5hbWVzIHdlJ3ZlIGRlYWx0IHdpdGggc28gZmFyIGFyZQog
ICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlcyB0aGF0IHdlIHdvbid0IGJvdGhlciBsb29raW5n
IGZvciBmdXJ0aGVyLgogCisgICAgICAgICAgICAvLyBJZiBvdXIgZG9jdW1lbnQgaXMgc2FuZGJv
eGVkLCB3ZSBuZWVkIHRvIGRvIHNvbWUgZXh0cmEgY2hlY2tzLgorICAgICAgICAgICAgUFJVaW50
MzIgc2FuZGJveEZsYWdzID0gMDsKKworICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+
IGRvYyA9IGRvX0dldEludGVyZmFjZShhT3JpZ2luYWxSZXF1ZXN0b3IpOworCisgICAgICAgICAg
ICBpZiAoZG9jKSB7CisgICAgICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94
RmxhZ3MoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncykg
eworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHJvb3Q7Cisg
ICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVSb290VHJlZUl0ZW0oZ2V0dGVyX0FkZFJlZnMocm9v
dCkpOworCisgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGZvdW5kIGl0ZW0gbm90IGEgdG9wIGxl
dmVsIGJyb3dzaW5nIGNvbnRleHQgYW5kIG5vdCBvdXJzZWxmID8KKyAgICAgICAgICAgICAgICBu
c0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBzZWxmQXNJdGVtID0gc3RhdGljX2Nhc3Q8bnNJ
RG9jU2hlbGxUcmVlSXRlbSAqPih0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRJdGVt
ICE9IHJvb3QgJiYgZm91bmRJdGVtICE9IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQXJlIHdlIGFuIGFuY2VzdG9yIG9mIHRoZSBmb3VuZEl0ZW0gPworICAgICAgICAgICAg
ICAgICAgICBib29sIGlzQW5jZXN0b3IgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBu
c0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0ZW07CisgICAgICAgICAgICAg
ICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudEFzSXRlbSkpOwor
CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRt
cCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBzZWxmQXNJ
dGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmNlc3RvciA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0gPSB0bXA7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQW5jZXN0b3IpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vLCB3ZSBhcmUgbm90IGFuIGFuY2VzdG9yIGFu
ZCBvdXIgZG9jdW1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbmRib3hlZCwg
d2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9
IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0IC0gaXMg
aXQgYW4gYW5jZXN0b3Igb2Ygb3VycyA/CisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5z
SURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQ
YXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KHRtcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gZm91bmRJ
dGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhbmNlc3Rv
ciwgYW5kIHdlIGFyZSBzYW5kYm94ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VW5sZXNzIGFsbG93LXRvcC1uYXZpZ2F0aW9uIGlzIHNldCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVE
X1RPUExFVkVMX05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
dW5kSXRlbSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0bXAtPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXAp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgZm91bmRJdGVtLnN3YXAoKl9yZXR2YWwpOwogICAgICAgICAgICAg
cmV0dXJuIE5TX09LOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gS2VlcCBsb29raW5nCiAg
ICAgICAgIAogICAgIC8vIEZpcnN0IHdlIGNoZWNrIG91ciBuYW1lLgpAQCAtNTA1MCwxNiArNTEy
MywzMCBAQCBuc0RvY1NoZWxsOjpTZXRJc0FwcFRhYihib29sIGFJc0FwcFRhYikKIE5TX0lNRVRI
T0RJTVAKIG5zRG9jU2hlbGw6OkdldElzQXBwVGFiKGJvb2wgKmFJc0FwcFRhYikKIHsKICAgKmFJ
c0FwcFRhYiA9IG1Jc0FwcFRhYjsKICAgcmV0dXJuIE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1Q
Cituc0RvY1NoZWxsOjpTZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgYVNhbmRib3hGbGFncykKK3sK
KyAgICBtU2FuZGJveEZsYWdzID0gYVNhbmRib3hGbGFnczsKKyAgICByZXR1cm4gTlNfT0s7Cit9
CisKK05TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6OkdldFNhbmRib3hGbGFncyhQUlVpbnQzMiAg
KmFTYW5kYm94RmxhZ3MpCit7CisgICAgKmFTYW5kYm94RmxhZ3MgPSBtU2FuZGJveEZsYWdzOwor
ICAgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6U2V0Vmlz
aWJpbGl0eShib29sIGFWaXNpYmlsaXR5KQogewogICAgIGlmICghbUNvbnRlbnRWaWV3ZXIpCiAg
ICAgICAgIHJldHVybiBOU19PSzsKICAgICBpZiAoYVZpc2liaWxpdHkpIHsKICAgICAgICAgbUNv
bnRlbnRWaWV3ZXItPlNob3coKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC04Mjg5LDE2ICs4Mzc2
LDI5IEBAIG5zRG9jU2hlbGw6OkludGVybmFsTG9hZChuc0lVUkkgKiBhVVJJLAogICAgICAgICBu
c0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0YXJnZXRJdGVtOwogICAgICAgICBGaW5kSXRl
bVdpdGhOYW1lKGFXaW5kb3dUYXJnZXQsIG5zbnVsbCwgdGhpcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICBnZXR0ZXJfQWRkUmVmcyh0YXJnZXRJdGVtKSk7CiAKICAgICAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGw+IHRhcmdldERvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UodGFyZ2V0SXRl
bSk7CiAgICAgICAgIAogICAgICAgICBib29sIGlzTmV3V2luZG93ID0gZmFsc2U7CiAgICAgICAg
IGlmICghdGFyZ2V0RG9jU2hlbGwpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBkb2NzaGVsbCdz
IGRvY3VtZW50IGlzIHNhbmRib3hlZCBhbmQgd2FzIHRyeWluZyB0bworICAgICAgICAgICAgLy8g
bmF2aWdhdGUvbG9hZCBhIGZyYW1lIGl0IHdhc24ndCBhbGxvd2VkIHRvIGFjY2VzcywgdGhlCisg
ICAgICAgICAgICAvLyBGaW5kSXRlbVdpdGhOYW1lIGFib3ZlIHdpbGwgaGF2ZSByZXR1cm5lZCBu
dWxsIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAvLyBpdGVtIC0gd2UgZG9uJ3Qgd2FudCB0
byBhY3R1YWxseSBvcGVuIGEgbmV3IHdpbmRvdyBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgIC8v
IHRob3VnaC4gQ2hlY2sgaWYgd2UgYXJlIHNhbmRib3hlZCBhbmQgYmFpbCBvdXQgaGVyZSBpZiBz
by4KKyAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKG1Db250ZW50Vmlld2VyLCBOU19FUlJPUl9G
QUlMVVJFKTsKKyAgICAgICAgICAgIG5zSURvY3VtZW50KiBkb2MgPSBtQ29udGVudFZpZXdlci0+
R2V0RG9jdW1lbnQoKTsKKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7Cisg
ICAgICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAg
ICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gd2luID0KICAgICAgICAgICAgICAgICBkb19HZXRJ
bnRlcmZhY2UoR2V0QXNTdXBwb3J0cyh0aGlzKSk7CiAgICAgICAgICAgICBOU19FTlNVUkVfVFJV
RSh3aW4sIE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpOwogCiAgICAgICAgICAgICBuc0RlcGVuZGVu
dFN0cmluZyBuYW1lKGFXaW5kb3dUYXJnZXQpOwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9N
V2luZG93PiBuZXdXaW47CiAgICAgICAgICAgICBydiA9IHdpbi0+T3BlbihFbXB0eVN0cmluZygp
LCAvLyBVUkwgdG8gbG9hZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgICAgICAg
ICAgLy8gd2luZG93IG5hbWUKQEAgLTkxMDAsMTggKzkyMDAsMzEgQEAgbnNEb2NTaGVsbDo6RG9V
UklMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIH0KICAgICAgICAgLy8gU2V0IHRoZSByZWZl
cnJlciBleHBsaWNpdGx5CiAgICAgICAgIGlmIChhUmVmZXJyZXJVUkkgJiYgYVNlbmRSZWZlcnJl
cikgewogICAgICAgICAgICAgLy8gUmVmZXJyZXIgaXMgY3VycmVubHkgb25seSBzZXQgZm9yIGxp
bmsgY2xpY2tzIGhlcmUuCiAgICAgICAgICAgICBodHRwQ2hhbm5lbC0+U2V0UmVmZXJyZXIoYVJl
ZmVycmVyVVJJKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG5zQ09NUHRyPG5zSVByaW5jaXBh
bD4gb3duZXJQcmluY2lwYWwoZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKSk7Ci0gICAgbnNDb250
ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBjaGFubmVsLCBhVVJJ
LCB0cnVlKTsKKyAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFsOworCisg
ICAgLy8gSWYgdGhlIGNvbnRlbnQgYmVpbmcgbG9hZGVkIHNob3VsZCBiZSBzYW5kYm94ZWQgd2l0
aCByZXNwZWN0IHRvIG9yaWdpbgorICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IG51bGwg
cHJpbmNpcGFsIGhlcmUsIGFuZCB0aGVuIHRlbGwKKyAgICAvLyBuc0NvbnRlbnRVdGlsczo6U2V0
VXBDaGFubmVsT3duZXIgdG8gZm9yY2UgaXQgdG8gYmUgc2V0IGFzIHRoZQorICAgIC8vIGNoYW5u
ZWwgb3duZXIuCisgICAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSB7Cisg
ICAgICAgIG93bmVyUHJpbmNpcGFsID0gZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9u
dWxscHJpbmNpcGFsOzEiKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBOb3Qgc2FuZGJveGVk
IC0gd2UgYWxsb3cgdGhlIGNvbnRlbnQgdG8gYXNzdW1lIGl0cyBuYXR1cmFsIG93bmVyLgorICAg
ICAgICBvd25lclByaW5jaXBhbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFPd25lcik7CisgICAgfQor
CisgICAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG93bmVyUHJpbmNpcGFsLCBj
aGFubmVsLCBhVVJJLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pKTsKIAogICAgIG5zQ09NUHRyPG5z
SVNjcmlwdENoYW5uZWw+IHNjcmlwdENoYW5uZWwgPSBkb19RdWVyeUludGVyZmFjZShjaGFubmVs
KTsKICAgICBpZiAoc2NyaXB0Q2hhbm5lbCkgewogICAgICAgICAvLyBBbGxvdyBleGVjdXRpb24g
YWdhaW5zdCBvdXIgY29udGV4dCBpZiB0aGUgcHJpbmNpcGFscyBtYXRjaAogICAgICAgICBzY3Jp
cHRDaGFubmVsLT4KICAgICAgICAgICAgIFNldEV4ZWN1dGlvblBvbGljeShuc0lTY3JpcHRDaGFu
bmVsOjpFWEVDVVRFX05PUk1BTCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNl
L25zRG9jU2hlbGwuaCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCi0tLSBhL2RvY3NoZWxs
L2Jhc2UvbnNEb2NTaGVsbC5oCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oCkBAIC03
NTUsMTYgKzc1NSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gQ3JlYXRlKCkgaXMgY2FsbGVkLCB0
aGUgdHlwZSBpcyBub3QgZXhwZWN0ZWQgdG8gY2hhbmdlLgogICAgIFBSSW50MzIgICAgICAgICAg
ICAgICAgICAgIG1JdGVtVHlwZTsKIAogICAgIC8vIEluZGV4IGludG8gdGhlIFNIVHJhbnNhY3Rp
b24gbGlzdCwgaW5kaWNhdGluZyB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQKICAgICAvLyB0cmFu
c2FjdGlvbiBhdCB0aGUgdGltZSB0aGF0IHRoaXMgRG9jU2hlbGwgYmVnaW5zIHRvIGxvYWQKICAg
ICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtUHJldmlvdXNUcmFuc0luZGV4OwogICAgIFBS
SW50MzIgICAgICAgICAgICAgICAgICAgIG1Mb2FkZWRUcmFuc0luZGV4OwogCisgICAgUFJVaW50
MzIgICAgICAgICAgICAgICAgICAgbVNhbmRib3hGbGFnczsKKwogICAgIGJvb2wgICAgICAgICAg
ICAgICAgICAgICAgIG1DcmVhdGVkOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1B
bGxvd1N1YmZyYW1lczsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dQbHVn
aW5zOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0phdmFzY3JpcHQ7CiAg
ICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93TWV0YVJlZGlyZWN0czsKICAgICBi
b29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dJbWFnZXM7CiAgICAgYm9vbCAgICAgICAg
ICAgICAgICAgICAgICAgbUFsbG93RE5TUHJlZmV0Y2g7CiAgICAgYm9vbCAgICAgICAgICAgICAg
ICAgICAgICAgbUFsbG93V2luZG93Q29udHJvbDsKQEAgLTc5OCwxNiArODAwLDIxIEBAIHByb3Rl
Y3RlZDoKIAogICAgIC8vIEluZGljYXRlcyB0aGF0IGEgRG9jU2hlbGwgaW4gdGhpcyAiZG9jc2hl
bGwgdHJlZSIgaXMgcHJpbnRpbmcKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtSXNQ
cmludGluZ09yUFA7CiAKICAgICAvLyBJbmRpY2F0ZXMgdG8gQ3JlYXRlQ29udGVudFZpZXdlcigp
IHRoYXQgaXQgaXMgc2FmZSB0byBjYWNoZSB0aGUgb2xkCiAgICAgLy8gcHJlc2VudGF0aW9uIG9m
IHRoZSBwYWdlLCBhbmQgdG8gU2V0dXBOZXdWaWV3ZXIoKSB0aGF0IHRoZSBvbGQgdmlld2VyCiAg
ICAgLy8gc2hvdWxkIGJlIHBhc3NlZCBhIFNIRW50cnkgdG8gc2F2ZSBpdHNlbGYgaW50by4KICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtU2F2aW5nT2xkVmlld2VyOworICAgIAorICAg
IC8vIElmIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSB3YXMgcmVtb3ZlZCBmcm9tIGNvbnRlbnQgY29u
dGFpbmVkIGluIHRoaXMKKyAgICAvLyBkb2NzaGVsbCwgb24gdGhlIG5leHQgZG9jdW1lbnQgbG9h
ZCwgd2UgbmVlZCB0byByZS1lbmFibGUgcGx1Z2lucy4KKyAgICAvLyBXZSB1c2UgdGhpcyBmbGFn
IHRvIHRyYWNrIG5lZWRpbmcgdG8gZG8gdGhpcy4KKyAgICBib29sICAgICAgICAgICAgICAgICAg
ICAgICBtU2FuZGJveENsZWFyZWQ7CiAKICAgICAvLyBAc2VlIG5zSURvY1NoZWxsSGlzdG9yeTo6
Y3JlYXRlZER5bmFtaWNhbGx5CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUR5bmFt
aWNhbGx5Q3JlYXRlZDsKICNpZmRlZiBERUJVRwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAg
ICAgIG1JbkVuc3VyZVNjcmlwdEVudjsKICNlbmRpZgogICAgIFBSVWludDY0ICAgICAgICAgICAg
ICAgICAgIG1IaXN0b3J5SUQ7CiAKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hl
bGwuaWRsIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFz
ZS9uc0lEb2NTaGVsbC5pZGwKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAg
LTM0LDE3ICszNCwxNyBAQCBpbnRlcmZhY2UgbnNJU0hFbnRyeTsKIGludGVyZmFjZSBuc0lMYXlv
dXRIaXN0b3J5U3RhdGU7CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJvd3NlclVJOwogaW50ZXJmYWNl
IG5zSURPTVN0b3JhZ2U7CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsOwogaW50ZXJmYWNlIG5zSVdl
YkJyb3dzZXJQcmludDsKIGludGVyZmFjZSBuc0lWYXJpYW50OwogaW50ZXJmYWNlIG5zSVByaXZh
Y3lUcmFuc2l0aW9uT2JzZXJ2ZXI7CiAKLVtzY3JpcHRhYmxlLCBidWlsdGluY2xhc3MsIHV1aWQo
ODllYTlmMzItMThlYy00MTNiLTllMmMtY2U5YTRjODUxYjFjKV0KK1tzY3JpcHRhYmxlLCBidWls
dGluY2xhc3MsIHV1aWQoOWIyODMzMzctMDk3ZC00ZmE4LWEyZGEtOTE2MzE4ZWFmODI4KV0KIGlu
dGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiB7CiAgIC8qKgogICAgKiBMb2FkcyBh
IGdpdmVuIFVSSS4gIFRoaXMgd2lsbCBnaXZlIHByaW9yaXR5IHRvIGxvYWRpbmcgdGhlIHJlcXVl
c3RlZCBVUkkKICAgICogaW4gdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcJdGhpcyBpbnRlcmZhY2Uu
ICBJZiBpdCBjYW4ndCBiZSBsb2FkZWQgaGVyZQogICAgKiBob3dldmVyLCB0aGUgVVJMIGRpc3Bh
dGNoZXIgd2lsbCBnbyB0aHJvdWdoIGl0cyBub3JtYWwgcHJvY2VzcyBvZiBjb250ZW50CiAgICAq
IGxvYWRpbmcuCiAgICAqCkBAIC02MDEsOSArNjAxLDMxIEBAIGludGVyZmFjZSBuc0lEb2NTaGVs
bCA6IG5zSVN1cHBvcnRzCiAgICAqLwogICBhdHRyaWJ1dGUgYm9vbCBpc0Jyb3dzZXJGcmFtZTsK
IAogICAvKgogICAgKiBJcyB0aGlzIGRvY3NoZWxsIGNvbnRhaW5lZCBpbiBhbiA8aWZyYW1lIG1v
emJyb3dzZXI+LCBlaXRoZXIgZGlyZWN0bHkgb3IKICAgICogaW5kaXJlY3RseT8KICAgICovCiAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sIGNvbnRhaW5lZEluQnJvd3NlckZyYW1lOworCisgIC8q
KgorICAgKiBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9jc2hlbGwuIFRoZXNlIHJlZmxlY3Qg
dGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94CisgICAqIGF0dHJpYnV0ZSBvZiB0aGUgYXNzb2NpYXRl
ZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNvbnRlbnQsIGlmCisgICAqIGV4aXN0ZW50LiBT
ZWUgdGhlIEhUTUw1IHNwZWMgZm9yIG1vcmUgZGV0YWlscy4KKyAgICogVGhlc2UgZmxhZ3Mgb24g
dGhlIGRvY3NoZWxsIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNhbmRib3gKKyAg
ICogYXR0cmlidXRlLCB3aGljaCBpcyBtb2RpZmlhYmxlLiBUaGV5IGFyZSBvbmx5IHVzZWQgd2hl
biBsb2FkaW5nIG5ldworICAgKiBjb250ZW50LCBzYW5kYm94IGZsYWdzIGFyZSBhbHNvIGltbXV0
YWJseSBzZXQgb24gdGhlIGRvY3VtZW50IHdoZW4gaXQgaXMKKyAgICogbG9hZGVkLgorICAgKiBU
aGUgc2FuZGJveCBmbGFncyBvZiBhIGRvY3VtZW50IGRlcGVuZCBvbiB0aGUgc2FuZGJveCBmbGFn
cyBvbiBpdHMKKyAgICogZG9jc2hlbGwgYW5kIG9mIGl0cyBwYXJlbnQgZG9jdW1lbnQsIGlmIGFu
eS4KKyAgICogU2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAg
ICovCisgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHNhbmRib3hGbGFnczsKKyAgCisgIC8qKgor
ICAgKiBJZiBhIHNhbmRib3ggYXR0cmlidXRlIGlzIHJlbW92ZWQgZnJvbSBhIGRvY3VtZW50IGNv
bnRhaW5lZCBpbiBhbiBpZnJhbWUncworICAgKiBkb2NzaGVsbCwgdGhlIHNhbmRib3ggZmxhZ3Mg
YXJlIGNsZWFyZWQuIFRoaXMgY2hhbmdlIHNob3VsZCBub3QgdGFrZSBlZmZlY3QgdW50aWwgdGhl
CisgICAqIG5leHQgbG9hZCBvZiBhIGRvY3VtZW50IGludG8gdGhlIGRvY3NoZWxsLCB0aGlzIGZs
YWcgaXMgdXNlZCB0byB0cmFjayB0aGF0IHdlIG5lZWQKKyAgICogdG8gcmUtZW5hYmxlIHBsdWdp
bnMgZm9yIHRoZSBkb2NzaGVsbCB3aGVuIHRoYXQgbmV4dCBsb2FkIG9jY3Vycy4KKyAgICovCisg
IGF0dHJpYnV0ZSBib29sZWFuIHNhbmRib3hDbGVhcmVkOwogfTsKZGlmZiAtLWdpdCBhL2RvbS9i
YXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcAotLS0g
YS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5k
b3cuY3BwCkBAIC0yMTcsMTYgKzIxNywxNyBAQAogI2luY2x1ZGUgIm1vekF1dG9Eb2NVcGRhdGUu
aCIKIAogI2luY2x1ZGUgIm1vemlsbGEvVGVsZW1ldHJ5LmgiCiAjaW5jbHVkZSAibnNMb2NhdGlv
bi5oIgogI2luY2x1ZGUgIm5zV3JhcHBlckNhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIm5zRE9N
RXZlbnRUYXJnZXRIZWxwZXIuaCIKICNpbmNsdWRlICJuc0lBcHBzU2VydmljZS5oIgogI2luY2x1
ZGUgInBycm5nLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2lmZGVmIEFORFJP
SUQKICNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgogI2VuZGlmCiAKICNpZmRlZiBQUl9MT0dHSU5H
CiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnRE9NTGVha1BSTG9nOwogI2VuZGlmCkBAIC04MjA1
LDE2ICs4MjA2LDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRTZXNzaW9uU3RvcmFnZShuc0lET00K
ICAgaWYgKCFtU2Vzc2lvblN0b3JhZ2UpIHsKICAgICAqYVNlc3Npb25TdG9yYWdlID0gbnNudWxs
OwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAg
ICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAg
Ly8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAg
IC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYg
KG1Eb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVy
biBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zcmVzdWx0IHJ2ID0g
ZG9jU2hlbGwtPkdldFNlc3Npb25TdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1
bWVudFVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1TZXNzaW9uU3RvcmFnZSkpOwogICAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICNpZmRlZiBQUl9MT0dHSU5HCiAgICAgaWYg
KFBSX0xPR19URVNUKGdET01MZWFrUFJMb2csIFBSX0xPR19ERUJVRykpIHsKQEAgLTgyNzAsMTYg
KzgyNzcsMjIgQEAgbnNHbG9iYWxXaW5kb3c6OkdldExvY2FsU3RvcmFnZShuc0lET01TdAogICAg
ICAgZG9fR2V0U2VydmljZSgiQG1vemlsbGEub3JnL2RvbS9zdG9yYWdlbWFuYWdlcjsxIiwgJnJ2
KTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgbnNTdHJpbmcgZG9jdW1l
bnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVu
dFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0
aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0
byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYg
U0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlf
RVJSOworICAgIH0KKwogICAgIG5zSURvY1NoZWxsKiBkb2NTaGVsbCA9IEdldERvY1NoZWxsKCk7
CiAgICAgbnNDT01QdHI8bnNJTG9hZENvbnRleHQ+IGxvYWRDb250ZXh0ID0gZG9fUXVlcnlJbnRl
cmZhY2UoZG9jU2hlbGwpOwogCiAgICAgcnYgPSBzdG9yYWdlTWFuYWdlci0+R2V0TG9jYWxTdG9y
YWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRDb250ZXh0ICYmIGxvYWRDb250
ZXh0LT5Vc2VQcml2YXRlQnJvd3NpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobUxvY2FsU3RvcmFnZSkpOwog
ICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQgYS9kb20vaW50ZXJmYWNl
cy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwv
bnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJ
RE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9N
SFRNTElGcmFtZUVsZW1lbnQuaWRsCkBAIC0xMSwzMiArMTEsMzIgQEAKICAqCiAgKiBUaGlzIGlu
dGVyZmFjZSBpcyB0cnlpbmcgdG8gZm9sbG93IHRoZSBET00gTGV2ZWwgMiBIVE1MIHNwZWNpZmlj
YXRpb246CiAgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1MLwogICoKICAq
IHdpdGggY2hhbmdlcyBmcm9tIHRoZSB3b3JrLWluLXByb2dyZXNzIFdIQVRXRyBIVE1MIHNwZWNp
ZmljYXRpb246CiAgKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVu
dC13b3JrLwogICovCiAKLVtzY3JpcHRhYmxlLCB1dWlkKDk3RTRGMEUxLUJEMjctNDBFQy05Mjg3
LTU2MzREQUYxNUI3MyldCitbc2NyaXB0YWJsZSwgdXVpZCg1MmY2MjQ0Yi1iMWY1LTRmNGMtOGZm
My03ZTE0NjMxNmY0MTEpXQogaW50ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDogbnNJ
RE9NSFRNTEVsZW1lbnQKIHsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAg
YWxpZ247CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGZyYW1lQm9yZGVy
OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBoZWlnaHQ7CiAgICAgICAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGxvbmdEZXNjOwogICAgICAgICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5IZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0
ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbldpZHRoOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nICAgICAgICBuYW1lOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBzY3JvbGxpbmc7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNyYzsK
ICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgd2lkdGg7CiAgIC8vIEludHJv
ZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01Eb2N1bWVu
dCAgIGNvbnRlbnREb2N1bWVudDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVdpbmRvdyAg
ICAgY29udGVudFdpbmRvdzsKIAotCisgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIHNhbmRib3g7CiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBpZnJhbWUgZWxlbWVu
dHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0byBiZSBwcmVzZW50
CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3ViIGRvY3VtZW50IHRv
IGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRwczovL3dpa2kubW96
aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkKICAgICAgICAgICAg
YXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVuOwogfTsKZGlmZiAt
LWdpdCBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4gYi9kb20vc3JjL2pzdXJsL01ha2VmaWxl
LmluCi0tLSBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KKysrIGIvZG9tL3NyYy9qc3VybC9N
YWtlZmlsZS5pbgpAQCAtMjUsMTYgKzI1LDE3IEBAIFhQSURMU1JDUwk9IFwKIENQUFNSQ1MJCT0g
bnNKU1Byb3RvY29sSGFuZGxlci5jcHAKIAogRVhQT1JUUwkJPSAkKHNyY2RpcikvbnNKU1Byb3Rv
Y29sSGFuZGxlci5oCiAKIExPQ0FMX0lOQ0xVREVTICs9IFwKIAkJLUkkKHNyY2RpcikgXAogCQkt
SSQodG9wc3JjZGlyKS9kb20vYmFzZSBcCiAJCS1JJCh0b3BzcmNkaXIpL25ldHdlcmsvYmFzZS9z
cmMgXAorCQktSSQodG9wc3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKIAogaWZkZWYgQlVJTERf
REVCVUdfR0MKIERFRklORVMJCSs9IC1EREVCVUdfR0MKIGVuZGlmCiAKIERJUlMgICAgICAgICAg
ICA9ICQoTlVMTCkKIFRFU1RfRElSUyArPSB0ZXN0CiAKZGlmZiAtLWdpdCBhL2RvbS9zcmMvanN1
cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAgYi9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhh
bmRsZXIuY3BwCi0tLSBhL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAKKysr
IGIvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcApAQCAtMzksMTYgKzM5LDE3
IEBACiAjaW5jbHVkZSAibnNUaHJlYWRVdGlscy5oIgogI2luY2x1ZGUgIm5zSUpTQ29udGV4dFN0
YWNrLmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIm5zSURvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0SW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lP
YmplY3RPdXRwdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lXcml0YWJsZVByb3BlcnR5QmFnMi5o
IgogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIm5zU2Fu
ZGJveEZsYWdzLmgiCiAKIHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtKU1VSSUNJRCwgTlNfSlNVUklf
Q0lEKTsKIAogY2xhc3MgbnNKU1RodW5rIDogcHVibGljIG5zSUlucHV0U3RyZWFtCiB7CiBwdWJs
aWM6CiAgICAgbnNKU1RodW5rKCk7CiAKQEAgLTE4NSwxNiArMTg2LDIzIEBAIG5zcmVzdWx0IG5z
SlNUaHVuazo6RXZhbHVhdGVTY3JpcHQobnNJQ2gKICAgICAvLyBHZXQgdGhlIGdsb2JhbCBvYmpl
Y3Qgd2Ugc2hvdWxkIGJlIHJ1bm5pbmcgb24uCiAgICAgbnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBn
bG9iYWwgPSBHZXRHbG9iYWxPYmplY3QoYUNoYW5uZWwpOwogICAgIGlmICghZ2xvYmFsKSB7CiAg
ICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAogICAgIG5zQ09NUHRyPG5z
UElET01XaW5kb3c+IHdpbihkb19RdWVyeUludGVyZmFjZShnbG9iYWwpKTsKIAorICAgIC8vIFNh
bmRib3hlZCBkb2N1bWVudCBjaGVjazogamF2YXNjcmlwdDogVVJJJ3MgYXJlIGRpc2FibGVkCisg
ICAgLy8gaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgdW5sZXNzICdhbGxvdy1zY3JpcHRzJyB3YXMg
c3BlY2lmaWVkLgorICAgIG5zSURvY3VtZW50KiBkb2MgPSBhT3JpZ2luYWxJbm5lcldpbmRvdy0+
R2V0RXh0YW50RG9jKCk7CisgICAgaWYgKGRvYyAmJiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNB
TkRCT1hFRF9TQ1JJUFRTKSkgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9SRVRWQUxfVU5E
RUZJTkVEOworICAgIH0KKwogICAgIC8vIFB1c2ggb3VyIHBvcHVwIGNvbnRyb2wgc3RhdGUKICAg
ICBuc0F1dG9Qb3B1cFN0YXRlUHVzaGVyIHBvcHVwU3RhdGVQdXNoZXIod2luLCBhUG9wdXBTdGF0
ZSk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2Ugc3RpbGwgaGF2ZSB0aGUgc2FtZSBpbm5lciB3aW5k
b3cgYXMgd2UgdXNlZCB0by4KICAgICBuc1BJRE9NV2luZG93ICppbm5lcldpbiA9IHdpbi0+R2V0
Q3VycmVudElubmVyV2luZG93KCk7CiAKICAgICBpZiAoaW5uZXJXaW4gIT0gYU9yaWdpbmFsSW5u
ZXJXaW5kb3cpIHsKICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX1VORVhQRUNURUQ7CmRpZmYgLS1n
aXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbiBi
L2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCi0tLSBh
L2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCisrKyBi
L2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCkBAIC0y
NCwxMSArMjQsMTIgQEAgQ1BQU1JDUwkJKz0gbnNEaWFsb2dQYXJhbUJsb2NrLmNwcCBcCiAJCSAg
ICQoTlVMTCkKIGVuZGlmCiAKICMgd2UgZG9uJ3Qgd2FudCB0aGUgc2hhcmVkIGxpYiwgYnV0IHdl
IHdhbnQgdG8gZm9yY2UgdGhlIGNyZWF0aW9uIG9mIGEKICMgc3RhdGljIGxpYi4KIEZPUkNFX1NU
QVRJQ19MSUIgPSAxCiAKICMgRm9yIG5zSlNVdGlscwotTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRv
cHNyY2RpcikvZG9tL2Jhc2UKK0xPQ0FMX0lOQ0xVREVTICs9IC1JJCh0b3BzcmNkaXIpL2RvbS9i
YXNlIFwKKwkJICAtSSQodG9wc3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKIAogaW5jbHVkZSAk
KHRvcHNyY2RpcikvY29uZmlnL3J1bGVzLm1rCmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9u
ZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwIGIvZW1iZWRkaW5nL2Nv
bXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcAotLS0gYS9lbWJl
ZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCisr
KyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hl
ci5jcHAKQEAgLTUzLDE2ICs1MywxNyBAQAogI2luY2x1ZGUgIm5zUElET01TdG9yYWdlLmgiCiAj
aW5jbHVkZSAibnNJV2lkZ2V0LmgiCiAjaW5jbHVkZSAibnNGb2N1c01hbmFnZXIuaCIKICNpbmNs
dWRlICJuc0lQcmVzU2hlbGwuaCIKICNpbmNsdWRlICJuc1ByZXNDb250ZXh0LmgiCiAjaW5jbHVk
ZSAibnNDb250ZW50VXRpbHMuaCIKICNpbmNsdWRlICJuc0lQcmVmQnJhbmNoLmgiCiAjaW5jbHVk
ZSAibnNJUHJlZlNlcnZpY2UuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZk
ZWYgVVNFV0VBS1JFRlMKICNpbmNsdWRlICJuc0lXZWFrUmVmZXJlbmNlLmgiCiAjZW5kaWYKIAog
dXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzSlNTdGFja0Nv
bnRyYWN0SUQ9IkBtb3ppbGxhLm9yZy9qcy94cGMvQ29udGV4dFN0YWNrOzEiOwpAQCAtNTcwLDE2
ICs1NzEsMzMgQEAgbnNXaW5kb3dXYXRjaGVyOjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9
CiAKICAgaWYgKCFuZXdEb2NTaGVsbEl0ZW0pIHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRo
ZXIgb3BlbiB1cCBhIG5ldyB3aW5kb3cgb3Vyc2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2lu
ZG93UHJvdmlkZXIgZm9yIG9uZS4gIEluIGVpdGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0
aGUgcmlnaHQKICAgICAvLyBuYW1lIG9uIGl0LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7
CiAKKyAgICAvLyBJZiB0aGUgcGFyZW50IHRyeWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBz
YW5kYm94ZWQsCisgICAgLy8gdGhpcyBpcyBub3QgYWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgor
ICAgIGlmIChhUGFyZW50KSB7CisgICAgICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9j
OworICAgICAgYVBhcmVudC0+R2V0RG9jdW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7Cisg
ICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9j
KTsKKworICAgICAgaWYgKGRvYykgeworICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAw
OworICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgICAg
IGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgIHJl
dHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCiAgICAg
Ly8gTm93IGNoZWNrIHdoZXRoZXIgaXQncyBvayB0byBhc2sgYSB3aW5kb3cgcHJvdmlkZXIgZm9y
IGEgd2luZG93LiAgRG9uJ3QKICAgICAvLyBkbyBpdCBpZiB3ZSdyZSBvcGVuaW5nIGEgZGlhbG9n
IG9yIGlmIG91ciBwYXJlbnQgaXMgYSBjaHJvbWUgd2luZG93IG9yCiAgICAgLy8gaWYgd2UncmUg
b3BlbmluZyBzb21ldGhpbmcgdGhhdCBoYXMgbW9kYWwsIGRpYWxvZywgb3IgY2hyb21lIGZsYWdz
IHNldC4KICAgICBuc0NPTVB0cjxuc0lET01DaHJvbWVXaW5kb3c+IGNocm9tZVdpbiA9IGRvX1F1
ZXJ5SW50ZXJmYWNlKGFQYXJlbnQpOwogICAgIGlmICghYURpYWxvZyAmJiAhY2hyb21lV2luICYm
CiAgICAgICAgICEoY2hyb21lRmxhZ3MgJiAobnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX01P
REFMICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJv
bWU6OkNIUk9NRV9PUEVOQVNfRElBTE9HIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
V2ViQnJvd3NlckNocm9tZTo6Q0hST01FX09QRU5BU19DSFJPTUUpKSkgewo=
</data>
<flag name="review"
          id="530693"
          type_id="937"
          status="-"
          setter="smaug"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>642024</attachid>
            <date>2012-07-13 13:36:47 -0700</date>
            <delta_ts>2012-07-18 13:29:04 -0700</delta_ts>
            <desc>iframe sandbox v21</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>60893</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZTQ4NTdlNWRmYjUxNWU2YTI1YjBkNjFmYTU1
MTA0NDMzNjEwOGJiZQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgx
MiwxNiArODEyLDI2IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYgYVNhbmRi
b3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVu
KSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAgICogcHJvcGVydGllcyBm
aWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5zcmVzdWx0IEZvcm1hdExv
Y2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQYXJhbXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVBhcmFtc0xlbmd0aCwK
QEAgLTE5MzksNDIgKzE5NDksNDQgQEAgcHVibGljOgogICAgKiBmcm9tIHRoZSBkb2N1bWVudCBp
dCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAKICAgLyoqCiAgICAqIFNl
dCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUgZ2l2ZW4gY2hhbm5lbCwg
aWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2YgYUNoYW5uZWwuICBhUHJp
bmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJvdXRCbGFuayBpcyB0cnVl
LCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBpdC4gSWYgYUZvcmNlT3du
ZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9uIHRoZSBjaGFubmVsLCBl
dmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAgICogZnJvbSB0aGUgY2hh
bm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRoZSBwcmluY2lwYWwgd2Fz
IHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwuCiAgICAqLwogICBzdGF0
aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIgPSBmYWxzZSk7CiAK
ICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNlNjRTdHJpbmcpOwogCiAg
IHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFzY2lpU3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhKTsKIAogICAvKiogSWYg
YUpTQXJyYXkgaXMgYSBKYXZhc2NyaXB0IGFycmF5LCB0aGlzIG1ldGhvZCBpdGVyYXRlcyBvdmVy
IGl0cwogICAgKiAgZWxlbWVudHMgYW5kIGFwcGVuZHMgdmFsdWVzIHRvIGFSZXRWYWwgYXMgbnNJ
QXRvbXMuCiAgICAqICBAdGhyb3cgTlNfRVJST1JfSUxMRUdBTF9WQUxVRSBpZiBhSlNBcnJheSBp
c24ndCBhIEpTIGFycmF5LgogICAgKi8gCiAgIHN0YXRpYyBuc3Jlc3VsdCBKU0FycmF5VG9BdG9t
QXJyYXkoSlNDb250ZXh0KiBhQ3gsIGNvbnN0IEpTOjpWYWx1ZSYgYUpTQXJyYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01BcnJheTxuc0lBdG9tPiYgYVJldFZh
bCk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBwYXNz
ZWQgaW4gcGFyYW1ldGVyIGhhcyB0aGUgYXV0b2NvbXBsZXRlCi0gICAqIGZ1bmN0aW9ubmFsaXR5
IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIuCisgICAq
IGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9y
bSBvd25lci4KICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFrZSBzdXJlIGF1dG9jb21w
bGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0eXBlLgogICAgKgogICAg
KiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNrLiBOT1RFOiBhSW5wdXQg
Y2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IGhh
cyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBib29sIElzQXV0b2NvbXBs
ZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQpOwogCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGlj
L25zSURvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisr
KyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaApAQCAtMjcsMTYgKzI3LDE3IEBA
CiAjaW5jbHVkZSAibnNQSURPTVdpbmRvdy5oIgogI2luY2x1ZGUgIm5zU01JTEFuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJuc0lTY3JpcHRHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJuc0lEb2N1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJuc0lGcmFtZVJlcXVlc3RDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIm5zRXZlbnRTdGF0ZXMuaCIKICNpbmNsdWRlICJuc0lTdHJ1Y3R1cmVk
Q2xvbmVDb250YWluZXIuaCIKICNpbmNsdWRlICJuc0lMb2FkQ29udGV4dC5oIgorI2luY2x1ZGUg
Im5zSURvY1NoZWxsLmgiCiAKIGNsYXNzIG5zSVJlcXVlc3Q7CiBjbGFzcyBuc1BJRE9NV2luZG93
OwogY2xhc3MgbnNJU3RyZWFtTGlzdGVuZXI7CiBjbGFzcyBuc0lCRkNhY2hlRW50cnk7CiBjbGFz
cyBuc0lDb250ZW50OwogY2xhc3MgbnNQcmVzQ29udGV4dDsKIGNsYXNzIG5zSVByZXNTaGVsbDsK
QEAgLTg4LDE4ICs4OSwxOCBAQCBjbGFzcyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xh
c3MgTGluazsKIGNsYXNzIEVsZW1lbnQ7CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNw
YWNlIG1vemlsbGEKIAogI2RlZmluZSBOU19JRE9DVU1FTlRfSUlEIFwKLXsgMHg4YzZhMWU2Miwg
MHhkNWFkLCAweDQyOTcsIFwKLSAgeyAweGI5LCAweDQxLCAweDY0LCAweDQ5LCAweDIyLCAweDJl
LCAweGM0LCAweGYwIH0gfQoreyAweDU3ZmU0NGFlLCAweDY2NTYsIDB4NDRiOCwgXAorICB7IDB4
OGQsIDB4YzAsIDB4ZmMsIDB4YTcsIDB4NDMsIDB4MjgsIDB4YmUsIDB4ODYgfSB9CiAKIC8vIEZs
YWcgZm9yIEFkZFN0eWxlU2hlZXQoKS4KICNkZWZpbmUgTlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFM
T0cgICAgICAgICAgICAgICAgKDEgPDwgMCkKIAogLy8gRW51bSBmb3IgcmVxdWVzdGluZyBhIHBh
cnRpY3VsYXIgdHlwZSBvZiBkb2N1bWVudCB3aGVuIGNyZWF0aW5nIGEgZG9jCiBlbnVtIERvY3Vt
ZW50Rmxhdm9yIHsKICAgRG9jdW1lbnRGbGF2b3JMZWdhY3lHdWVzcywgLy8gY29tcGF0IHdpdGgg
b2xkIGNvZGUgdW50aWwgbWFkZSBIVE1MNS1jb21wbGlhbnQKICAgRG9jdW1lbnRGbGF2b3JIVE1M
LCAvLyBIVE1MRG9jdW1lbnQgd2l0aCBIVE1MbmVzcyBiaXQgc2V0IHRvIHRydWUKQEAgLTQyNywx
NyArNDI4LDI2IEBAIHB1YmxpYzoKICAgICogY2FsbGVycyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBh
Y3Rpb24gYXMgbmVlZGVkIGlmIHRoZXkgd2FudCB0aGlzCiAgICAqIGNoYW5nZSB0byBhY3R1YWxs
eSBjaGFuZ2UgYW55dGhpbmcgaW1tZWRpYXRlbHkuCiAgICAqIEBzZWUgbnNCaWRpVXRpbHMuaAog
ICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9ucyhQUlVpbnQzMiBhQmlkaU9wdGlvbnMpCiAgIHsK
ICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9wdGlvbnM7CiAgIH0KLSAgCisKKyAgLyoqCisgICAq
IEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4KKyAgICogQHNlZSBuc1Nh
bmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIFNh
bmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAgfQor
CiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxzbyBnZXQg
c2V0IGZyb20gb3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncykuCiAgICAq
LwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmllbGQsIG5z
QVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRlckRhdGEo
bnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7CiAKICAg
LyoqCkBAIC00ODAsMTYgKzQ5MCwyMSBAQCBwdWJsaWM6CiAKICAgLyoqCiAgICAqIFNldCB0aGUg
cGFyZW50IGRvY3VtZW50IG9mIHRoaXMgZG9jdW1lbnQuCiAgICAqLwogICB2b2lkIFNldFBhcmVu
dERvY3VtZW50KG5zSURvY3VtZW50KiBhUGFyZW50KQogICB7CiAgICAgbVBhcmVudERvY3VtZW50
ID0gYVBhcmVudDsKICAgfQorICAKKyAgLyoqCisgICAqIEFyZSBwbHVnaW5zIGFsbG93ZWQgaW4g
dGhpcyBkb2N1bWVudCA/CisgICAqLworICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsbG93UGx1Z2lu
cyAoYm9vbCogYUFsbG93UGx1Z2lucykgPSAwOwogCiAgIC8qKgogICAgKiBTZXQgdGhlIHN1YiBk
b2N1bWVudCBmb3IgYUNvbnRlbnQgdG8gYVN1YkRvYy4KICAgICovCiAgIHZpcnR1YWwgbnNyZXN1
bHQgU2V0U3ViRG9jdW1lbnRGb3IoRWxlbWVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRG9jdW1lbnQqIGFTdWJEb2MpID0gMDsKIAogICAvKioK
QEAgLTE4NjEsMTYgKzE4NzYsMjEgQEAgcHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1
bWVudCBpcyB0cnVlLCBtT3JpZ2luYWxEb2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAg
IC8vIGRvY3VtZW50LgogICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7
CiAKICAgLy8gVGhlIGJpZGkgb3B0aW9ucyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBi
aXRmaWVsZCBtZWFucyBpcwogICAvLyBkZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50
MzIgbUJpZGlPcHRpb25zOwogCisgIC8vIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVu
dC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRo
ZQorICAvLyBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYg
ZXhpc3RlbnQuIFRoZXNlIGFyZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRh
YmxlIC0gc2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgUFJV
aW50MzIgbVNhbmRib3hGbGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHBy
aXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhl
IGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3Vy
aXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5j
cHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jh
c2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVu
dFV0aWxzLmNwcApAQCAtMTU1LDE2ICsxNTUsMTcgQEAgc3RhdGljIE5TX0RFRklORV9DSUQoa1hU
RlNlcnZpY2VDSUQsIE5TXwogI2luY2x1ZGUgIm5zSUNoYXJzZXREZXRlY3Rvci5oIgogI2luY2x1
ZGUgIm5zSUNoYXJzZXREZXRlY3Rpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIm5zSVBsYXRmb3Jt
Q2hhcnNldC5oIgogI2luY2x1ZGUgIm5zSUVkaXRvci5oIgogI2luY2x1ZGUgIm5zSUVkaXRvckRv
Y1NoZWxsLmgiCiAjaW5jbHVkZSAibW96aWxsYS9BdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAibnNJ
UGFyc2VyU2VydmljZS5oIgogI2luY2x1ZGUgIm5zSURPTVNjcmlwdE9iamVjdEZhY3RvcnkuaCIK
KyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNXcmFwcGVyQ2FjaGVJ
bmxpbmVzLmgiCiAKIGV4dGVybiAiQyIgaW50IE1PWl9YTUxUcmFuc2xhdGVFbnRpdHkoY29uc3Qg
Y2hhciogcHRyLCBjb25zdCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqKiBuZXh0LCBQUlVuaWNoYXIqIHJlc3VsdCk7CiBleHRlcm4g
IkMiIGludCBNT1pfWE1MQ2hlY2tRTmFtZShjb25zdCBjaGFyKiBwdHIsIGNvbnN0IGNoYXIqIGVu
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuc19hd2FyZSwgY29uc3Qg
Y2hhcioqIGNvbG9uKTsKIApAQCAtODgyLDE2ICs4ODMsNjIgQEAgbnNDb250ZW50VXRpbHM6Okdl
dFBhcnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1BhcnNl
clNlcnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsK
ICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVybiBz
UGFyc2VyU2VydmljZTsKIH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMg
YSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVjdGl2
ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5Lgor
ICoKKyAqIEBwYXJhbSBhQXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRy
aWJ1dGUKKyAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLworUFJV
aW50MzIKK25zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0
IG5zQVN0cmluZyYgYVNhbmRib3hBdHRyVmFsdWUpCit7CisgIC8vIElmIHRoZXJlJ3MgYSBzYW5k
Ym94IGF0dHJpYnV0ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBpZiB0aGlzIGlzIGJlaW5nCisgIC8v
IGNhbGxlZCksIHN0YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0aGUgcmVzdHJpY3Rpb24gZmxhZ3Mu
CisgIFBSVWludDMyIG91dCA9IFNBTkRCT1hFRF9OQVZJR0FUSU9OIHwKKyAgICAgICAgICAgICAg
ICAgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gfAorICAgICAgICAgICAgICAgICBTQU5E
Qk9YRURfUExVR0lOUyB8CisgICAgICAgICAgICAgICAgIFNBTkRCT1hFRF9PUklHSU4gfAorICAg
ICAgICAgICAgICAgICBTQU5EQk9YRURfRk9STVMgfAorICAgICAgICAgICAgICAgICBTQU5EQk9Y
RURfU0NSSVBUUyB8CisgICAgICAgICAgICAgICAgIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVS
RVM7CisKKyAgaWYgKCFhU2FuZGJveEF0dHJWYWx1ZS5Jc0VtcHR5KCkpIHsKKyAgICAvLyBUaGUg
c2VwYXJhdG9yIG9wdGlvbmFsIGZsYWcgaXMgdXNlZCBiZWNhdXNlIHRoZSBIVE1MNSBzcGVjIHNh
eXMgYW55CisgICAgLy8gd2hpdGVzcGFjZSBpcyBvayBhcyBhIHNlcGFyYXRvciwgd2hpY2ggaXMg
d2hhdCB0aGlzIGRvZXMuCisgICAgSFRNTFNwbGl0T25TcGFjZXNUb2tlbml6ZXIgdG9rZW5pemVy
KGFTYW5kYm94QXR0clZhbHVlLCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXJU
ZW1wbGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9PUFRJ
T05BTCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAgICAg
bnNEZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKyAg
ICAgIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zYW1lLW9yaWdpbiIp
KSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX09SSUdJTjsKKyAgICAgIH0gZWxzZSBpZiAo
dG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9ybXMiKSkgeworICAgICAgICBv
dXQgJj0gflNBTkRCT1hFRF9GT1JNUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNl
RXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7CisgICAgICAgIC8vIGFsbG93LXNjcmlw
dHMgcmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRTIGFuZAorICAgICAgICAvLyBTQU5EQk9Y
RURfQVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9TQ1JJUFRT
OworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisgICAgICB9
IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXRvcC1uYXZpZ2F0
aW9uIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTjsK
KyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb3V0OworfQogCiAjaWZkZWYgTU9aX1hU
RgogbnNJWFRGU2VydmljZSoKIG5zQ29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAg
aWYgKCFzWFRGU2VydmljZSkgewogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hU
RlNlcnZpY2VDSUQsICZzWFRGU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKQEAg
LTY1NjIsMTcgKzY2MDksMTggQEAgbnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJpdHlD
b250ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8gc3Rh
dGljCiBib29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFs
KiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lDaGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0
VXBGb3JBYm91dEJsYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFGb3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBjaGFu
bmVsLCBidXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRoZWly
IG93biBzZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25nIHRo
YXQgdGhlIG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1cHBs
aWVkKSB1bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6Ymxhbmsu
CiAgIC8vIFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJzIGZv
ciB3aGF0IG93bmVycwpAQCAtNjU4MCwyMyArNjYyOCwzNSBAQCBuc0NvbnRlbnRVdGlsczo6U2V0
VXBDaGFubmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVsbDo6
TG9hZFVSSSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRoZSBv
d25lciBpZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAgdmVy
eSB3cm9uZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhhdAog
ICAvLyAgICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAgIC8v
CiAgIC8vICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4gdGhl
eSBhcmUgY3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3VsZCBi
ZSBiYWQhKQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIgd2ls
bCBiZSBzZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0cyBv
d24gc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1FCisg
IC8vIHNhbmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFuZCBp
dHMgZG9jdW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFsLgog
ICBib29sIGluaGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4
dCB0byByZXR1cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24n
dCBjYWxsIE5TX0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBj
b25kaXRpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExv
YWQgd2hlcmUKICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRo
ZSBvd25lci4KLSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChh
VVJJLCAmaW5oZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFu
ayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChO
U19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAm
JgorICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJs
YW5rKGFVUkkpKSkpKSkgeworI2lmZGVmIERFQlVHCisgICAgLy8gQXNzZXJ0IHRoYXQgYUZvcmNl
T3duZXIgaXMgb25seSBzZXQgZm9yIG51bGwgcHJpbmNpcGFscworICAgIGlmIChhRm9yY2VPd25l
cikgeworICAgICAgbnNDT01QdHI8bnNJVVJJPiBvd25lclVSSTsKKyAgICAgIG5zcmVzdWx0IHJ2
ID0gYUxvYWRpbmdQcmluY2lwYWwtPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhvd25lclVSSSkpOwor
ICAgICAgTU9aX0FTU0VSVChOU19TVUNDRUVERUQocnYpICYmIFNjaGVtZUlzKG93bmVyVVJJLCBO
U19OVUxMUFJJTkNJUEFMX1NDSEVNRSkpOworICAgIH0KKyNlbmRpZgogICAgIGFDaGFubmVsLT5T
ZXRPd25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAv
LwogICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBh
IGZpbGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCmRp
ZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNl
L3NyYy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3Bw
CisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTE2MiwxNiArMTYyLDE3
IEBACiAjaW5jbHVkZSAibW96aWxsYS9kb20vTGluay5oIgogI2luY2x1ZGUgIm5zWFVMQXBwQVBJ
LmgiCiAjaW5jbHVkZSAibnNET01Ub3VjaEV2ZW50LmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL1By
ZWZlcmVuY2VzLmgiCiAKICNpbmNsdWRlICJpbWdJTG9hZGVyLmgiCiAjaW5jbHVkZSAibnNXcmFw
cGVyQ2FjaGVJbmxpbmVzLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiB0eXBl
ZGVmIG5zVEFycmF5PExpbmsqPiBMaW5rQXJyYXk7CiAKIC8vIFJlZmVyZW5jZSB0byB0aGUgZG9j
dW1lbnQgd2hpY2ggcmVxdWVzdGVkIERPTSBmdWxsLXNjcmVlbiBtb2RlLgogbnNXZWFrUHRyIG5z
RG9jdW1lbnQ6OnNGdWxsU2NyZWVuRG9jID0gbnNudWxsOwpAQCAtMjM3NiwxNiArMjM3NywyNSBA
QCBuc0RvY3VtZW50OjpTdGFydERvY3VtZW50TG9hZChjb25zdCBjaGFyCiAgICAgRmluZENoYXJJ
blJlYWRhYmxlKCc7Jywgc2VtaWNvbG9uLCBlbmQpOwogICAgIFNldENvbnRlbnRUeXBlSW50ZXJu
YWwoU3Vic3RyaW5nKHN0YXJ0LCBzZW1pY29sb24pKTsKICAgfQogCiAgIFJldHJpZXZlUmVsZXZh
bnRIZWFkZXJzKGFDaGFubmVsKTsKIAogICBtQ2hhbm5lbCA9IGFDaGFubmVsOwogCisgIC8vIElm
IHRoaXMgZG9jdW1lbnQgaXMgYmVpbmcgbG9hZGVkIGJ5IGEgZG9jc2hlbGwsIGNvcHkgaXRzIHNh
bmRib3ggZmxhZ3MKKyAgLy8gdG8gdGhlIGRvY3VtZW50LiBUaGVzZSBhcmUgaW1tdXRhYmxlIGFm
dGVyIGJlaW5nIHNldCBoZXJlLgorICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGwgPSBk
b19RdWVyeUludGVyZmFjZShhQ29udGFpbmVyKTsKKworICBpZiAoZG9jU2hlbGwpIHsKKyAgICBu
c3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTYW5kYm94RmxhZ3MoJm1TYW5kYm94RmxhZ3MpOwor
ICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgIH0KKwogICBuc3Jlc3VsdCBydiA9IElu
aXRDU1AoKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICByZXR1cm4gTlNfT0s7
CiB9CiAKIG5zcmVzdWx0CiBuc0RvY3VtZW50OjpJbml0Q1NQKCkKQEAgLTI2ODQsMTYgKzI2OTQs
MzQgQEAgbnNEb2N1bWVudDo6U2V0Q29udGVudFR5cGUoY29uc3QgbnNBU3RyaQogewogICBOU19B
U1NFUlRJT04oR2V0Q29udGVudFR5cGVJbnRlcm5hbCgpLklzRW1wdHkoKSB8fAogICAgICAgICAg
ICAgICAgR2V0Q29udGVudFR5cGVJbnRlcm5hbCgpLkVxdWFscyhOU19Db252ZXJ0VVRGMTZ0b1VU
RjgoYUNvbnRlbnRUeXBlKSksCiAgICAgICAgICAgICAgICAiRG8geW91IHJlYWxseSB3YW50IHRv
IGNoYW5nZSB0aGUgY29udGVudC10eXBlPyIpOwogCiAgIFNldENvbnRlbnRUeXBlSW50ZXJuYWwo
TlNfQ29udmVydFVURjE2dG9VVEY4KGFDb250ZW50VHlwZSkpOwogfQogCituc3Jlc3VsdAorbnNE
b2N1bWVudDo6R2V0QWxsb3dQbHVnaW5zKGJvb2wgKiBhQWxsb3dQbHVnaW5zKQoreworICAvLyBG
aXJzdCwgd2UgYXNrIG91ciBkb2NzaGVsbCBpZiBpdCBhbGxvd3MgcGx1Z2lucy4KKyAgbnNDT01Q
dHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlSZWZlcmVudChtRG9jdW1lbnRDb250
YWluZXIpOworCisgIGlmIChkb2NTaGVsbCkgeworICAgIGRvY1NoZWxsLT5HZXRBbGxvd1BsdWdp
bnMoYUFsbG93UGx1Z2lucyk7CisgICAgICAKKyAgICAvLyBJZiB0aGUgZG9jc2hlbGwgYWxsb3dz
IHBsdWdpbnMsIHdlIGNoZWNrIHdoZXRoZXIKKyAgICAvLyB3ZSBhcmUgc2FuZGJveGVkIGFuZCBw
bHVnaW5zIHNob3VsZCBub3QgYmUgYWxsb3dlZC4KKyAgICBpZiAoKmFBbGxvd1BsdWdpbnMpCisg
ICAgICAqYUFsbG93UGx1Z2lucyA9ICEobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9QTFVHSU5T
KTsKKyAgfQorCityZXR1cm4gTlNfT0s7Cit9CisKIC8qIFJldHVybiB0cnVlIGlmIHRoZSBkb2N1
bWVudCBpcyBpbiB0aGUgZm9jdXNlZCB0b3AtbGV2ZWwgd2luZG93LCBhbmQgaXMgYW4KICAqIGFu
Y2VzdG9yIG9mIHRoZSBmb2N1c2VkIERPTVdpbmRvdy4gKi8KIE5TX0lNRVRIT0RJTVAKIG5zRG9j
dW1lbnQ6Okhhc0ZvY3VzKGJvb2wqIGFSZXN1bHQpCiB7CiAgICphUmVzdWx0ID0gZmFsc2U7CiAK
ICAgbnNJRm9jdXNNYW5hZ2VyKiBmbSA9IG5zRm9jdXNNYW5hZ2VyOjpHZXRGb2N1c01hbmFnZXIo
KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5oIGIvY29udGVudC9i
YXNlL3NyYy9uc0RvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmgK
KysrIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmgKQEAgLTU2MiwxNiArNTYyLDE4IEBA
IHB1YmxpYzoKICAgICogc2hhcmVkIGFtb25nIG11bHRpcGxlIHByZXNlbnRhdGlvbiBzaGVsbCdz
KS4KICAgICovCiAgIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlU2hlbGwobnNQcmVzQ29udGV4dCog
YUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVmlld01hbmFnZXIq
IGFWaWV3TWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1N0eWxlU2V0
KiBhU3R5bGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxs
KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKICAgdmlydHVhbCB2b2lkIERlbGV0ZVNoZWxsKCk7CiAK
KyAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGxvd1BsdWdpbnMgKGJvb2wqIGFBbGxvd1BsdWdpbnMp
OworCiAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3ViRG9jdW1lbnRGb3IoRWxlbWVudCogYUNvbnRl
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRG9jdW1lbnQqIGFT
dWJEb2MpOwogICB2aXJ0dWFsIG5zSURvY3VtZW50KiBHZXRTdWJEb2N1bWVudEZvcihuc0lDb250
ZW50KiBhQ29udGVudCkgY29uc3Q7CiAgIHZpcnR1YWwgRWxlbWVudCogRmluZENvbnRlbnRGb3JT
dWJEb2N1bWVudChuc0lEb2N1bWVudCAqYURvY3VtZW50KSBjb25zdDsKICAgdmlydHVhbCBFbGVt
ZW50KiBHZXRSb290RWxlbWVudEludGVybmFsKCkgY29uc3Q7CiAKICAgLyoqCiAgICAqIEdldCB0
aGUgc3R5bGUgc2hlZXRzIG93bmVkIGJ5IHRoaXMgZG9jdW1lbnQuCmRpZmYgLS1naXQgYS9jb250
ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1l
TG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCisrKyBi
L2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKQEAgLTc4LDE2ICs3OCwxOSBAQAog
I2luY2x1ZGUgIm1vemlsbGEvR3VhcmRPYmplY3RzLmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVm
ZXJlbmNlcy5oIgogI2luY2x1ZGUgIm1vemlsbGEvdW51c2VkLmgiCiAjaW5jbHVkZSAibW96aWxs
YS9kb20vRWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvbGF5b3V0L1JlbmRlckZyYW1lUGFy
ZW50LmgiCiAKICNpbmNsdWRlICJqc2FwaS5oIgogCisjaW5jbHVkZSAibnNIVE1MSUZyYW1lRWxl
bWVudC5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCisKIHVzaW5nIG5hbWVzcGFjZSBt
b3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBt
b3ppbGxhOjpsYXllcnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5b3V0OwogdHlwZWRl
ZiBGcmFtZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7CiAKIGNsYXNzIG5zQXN5bmNEb2NTaGVsbERl
c3Ryb3llciA6IHB1YmxpYyBuc1J1bm5hYmxlCiB7CkBAIC00NDAsMTYgKzQ0Myw0MCBAQCBuc0Zy
YW1lTG9hZGVyOjpSZWFsbHlTdGFydExvYWRpbmdJbnRlcm5hCiAgIC8vIEp1c3QgdG8gYmUgc2Fm
ZSwgcmVjaGVjayB1cmkuCiAgIHJ2ID0gQ2hlY2tVUklMb2FkKG1VUklUb0xvYWQpOwogICBOU19F
TlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsTG9hZEluZm8+
IGxvYWRJbmZvOwogICBtRG9jU2hlbGwtPkNyZWF0ZUxvYWRJbmZvKGdldHRlcl9BZGRSZWZzKGxv
YWRJbmZvKSk7CiAgIE5TX0VOU1VSRV9UUlVFKGxvYWRJbmZvLCBOU19FUlJPUl9GQUlMVVJFKTsK
IAorICAvLyBJcyB0aGlzIGFuIDxpZnJhbWU+IHdpdGggYSBzYW5kYm94IGF0dHJpYnV0ZSBvciBh
IHBhcmVudCB3aGljaCBpcworICAvLyBzYW5kYm94ZWQgPworICBuc0hUTUxJRnJhbWVFbGVtZW50
KiBpZnJhbWUgPQorICAgIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkZyb21Db250ZW50KG1Pd25lckNv
bnRlbnQpOworCisgIFBSVWludDMyIHNhbmRib3hGbGFncyA9IDA7CisKKyAgaWYgKGlmcmFtZSkg
eworICAgIHNhbmRib3hGbGFncyA9IGlmcmFtZS0+R2V0U2FuZGJveEZsYWdzKCk7CisKKyAgICBQ
UlVpbnQzMiBwYXJlbnRTYW5kYm94RmxhZ3MgPSBpZnJhbWUtPk93bmVyRG9jKCktPlNhbmRib3hG
bGFncygpOworCisgICAgaWYgKHNhbmRib3hGbGFncyB8fCBwYXJlbnRTYW5kYm94RmxhZ3MpIHsK
KyAgICAgIC8vIFRoZSBjaGlsZCBjYW4gb25seSBhZGQgcmVzdHJpY3Rpb25zLCBub3QgcmVtb3Zl
IHRoZW0uCisgICAgICBzYW5kYm94RmxhZ3MgfD0gcGFyZW50U2FuZGJveEZsYWdzOworCisgICAg
ICBtRG9jU2hlbGwtPlNldFNhbmRib3hGbGFncyhzYW5kYm94RmxhZ3MpOworICAgIH0KKyAgfQor
CisgIC8vIElmIHRoaXMgaXMgYW4gPGlmcmFtZT4gYW5kIGl0J3Mgc2FuZGJveGVkIHdpdGggcmVz
cGVjdCB0byBvcmlnaW4KKyAgLy8gd2Ugd2lsbCBzZXQgaXQgdXAgd2l0aCBhIG51bGwgcHJpbmNp
cGFsIGxhdGVyIGluIG5zRG9jU2hlbGw6OkRvVVJJTG9hZC4KKyAgLy8gV2UgZG8gaXQgdGhlcmUg
dG8gY29ycmVjdGx5IHNhbmRib3ggY29udGVudCB0aGF0IHdhcyBsb2FkZWQgaW50bworICAvLyB0
aGUgaWZyYW1lIHZpYSBvdGhlciBtZXRob2RzIHRoYW4gdGhlIHNyYyBhdHRyaWJ1dGUuCiAgIC8v
IFdlJ2xsIHVzZSBvdXIgcHJpbmNpcGFsLCBub3QgdGhhdCBvZiB0aGUgZG9jdW1lbnQgbG9hZGVk
IGluc2lkZSB1cy4gIFRoaXMKICAgLy8gaXMgdmVyeSBpbXBvcnRhbnQ7IG5lZWRlZCB0byBwcmV2
ZW50IFhTUyBhdHRhY2tzIG9uIGRvY3VtZW50cyBsb2FkZWQgaW4KICAgLy8gc3ViZnJhbWVzIQog
ICBsb2FkSW5mby0+U2V0T3duZXIobU93bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpKTsKIAog
ICBuc0NPTVB0cjxuc0lVUkk+IHJlZmVycmVyOwogICBydiA9IG1Pd25lckNvbnRlbnQtPk5vZGVQ
cmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKHJlZmVycmVyKSk7CiAgIE5TX0VOU1VS
RV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9t
TGlzdC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAotLS0gYS9jb250ZW50L2Jh
c2Uvc3JjL25zR2tBdG9tTGlzdC5oCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0
LmgKQEAgLTYzLDE3ICs2MywyMSBAQCBHS19BVE9NKGFjdHVhdGUsICJhY3R1YXRlIikKIEdLX0FU
T00oYWRkcmVzcywgImFkZHJlc3MiKQogR0tfQVRPTShhZnRlciwgImFmdGVyIikKIEdLX0FUT00o
YWZ0ZXJfZW5kLCAiYWZ0ZXJfZW5kIikKIEdLX0FUT00oYWZ0ZXJfc3RhcnQsICJhZnRlcl9zdGFy
dCIpCiBHS19BVE9NKGFsaWduLCAiYWxpZ24iKQogR0tfQVRPTShhbGluaywgImFsaW5rIikKIEdL
X0FUT00oYWxsLCAiYWxsIikKIEdLX0FUT00oYWxsb3dldmVudHMsICJhbGxvd2V2ZW50cyIpCitH
S19BVE9NKGFsbG93Zm9ybXMsICJhbGxvdy1mb3JtcyIpCiBHS19BVE9NKGFsbG93bmVnYXRpdmVh
c3NlcnRpb25zLCAiYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMiKQorR0tfQVRPTShhbGxvd3NhbWVv
cmlnaW4sICJhbGxvdy1zYW1lLW9yaWdpbiIpCitHS19BVE9NKGFsbG93c2NyaXB0cywgImFsbG93
LXNjcmlwdHMiKQorR0tfQVRPTShhbGxvd3RvcG5hdmlnYXRpb24sICJhbGxvdy10b3AtbmF2aWdh
dGlvbiIpCiBHS19BVE9NKGFsbG93dW50cnVzdGVkLCAiYWxsb3d1bnRydXN0ZWQiKQogR0tfQVRP
TShhbHQsICJhbHQiKQogR0tfQVRPTShhbHRlcm5hdGUsICJhbHRlcm5hdGUiKQogR0tfQVRPTShh
bHdheXMsICJhbHdheXMiKQogR0tfQVRPTShhbmNlc3RvciwgImFuY2VzdG9yIikKIEdLX0FUT00o
YW5jZXN0b3JPclNlbGYsICJhbmNlc3Rvci1vci1zZWxmIikKIEdLX0FUT00oX2FuZCwgImFuZCIp
CiBHS19BVE9NKGFueSwgImFueSIpCkBAIC04MzksMTYgKzg0MywxNyBAQCBHS19BVE9NKHJvd3Nw
YW4sICJyb3dzcGFuIikKIEdLX0FUT00ocnAsICJycCIpCiBHS19BVE9NKHJ0LCAicnQiKQogR0tf
QVRPTShydGwsICJydGwiKQogR0tfQVRPTShydWJ5LCAicnVieSIpCiBHS19BVE9NKHJ1bGUsICJy
dWxlIikKIEdLX0FUT00ocnVsZXMsICJydWxlcyIpCiBHS19BVE9NKHMsICJzIikKIEdLX0FUT00o
c2FtcCwgInNhbXAiKQorR0tfQVRPTShzYW5kYm94LCAic2FuZGJveCIpCiBHS19BVE9NKHNiYXR0
ciwgInNiYXR0ciIpCiBHS19BVE9NKHNjYWxlLCAic2NhbGUiKQogR0tfQVRPTShzY2FuLCAic2Nh
biIpCiBHS19BVE9NKHNjaGVtZSwgInNjaGVtZSIpCiBHS19BVE9NKHNjb3BlLCAic2NvcGUiKQog
R0tfQVRPTShzY29wZWQsICJzY29wZWQiKQogR0tfQVRPTShzY3JlZW4sICJzY3JlZW4iKQogR0tf
QVRPTShzY3JlZW5YLCAic2NyZWVuWCIpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25z
U2FuZGJveEZsYWdzLmggYi9jb250ZW50L2Jhc2Uvc3JjL25zU2FuZGJveEZsYWdzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2Fu
ZGJveEZsYWdzLmgKQEAgLTAsMCArMSw1OCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRo
OiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLw0KKy8q
IFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96
aWxsYSBQdWJsaWMNCisgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdh
cyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIGZpbGUsDQorICogWW91IGNhbiBvYnRhaW4gb25l
IGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8NCisNCisvKg0KKyAqIENvbnN0YW50
IGZsYWdzIHRoYXQgZGVzY3JpYmUgaG93IGEgZG9jdW1lbnQgaXMgc2FuZGJveGVkIGFjY29yZGlu
ZyB0byB0aGUNCisgKiBIVE1MNSBzcGVjLg0KKyAqLw0KKw0KKyNpZm5kZWYgbnNTYW5kYm94Rmxh
Z3NfaF9fXw0KKyNkZWZpbmUgbnNTYW5kYm94RmxhZ3NfaF9fXw0KKw0KKy8qKg0KKyAqIFRoaXMg
ZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyBicm93c2luZyBjb250ZXh0cyBv
dGhlciB0aGFuDQorICogdGhlIHNhbmRib3hlZCBicm93c2luZyBjb250ZXh0IGl0c2VsZiAob3Ig
YnJvd3NpbmcgY29udGV4dHMgZnVydGhlcg0KKyAqIG5lc3RlZCBpbnNpZGUgaXQpLCBhbmQgdGhl
IHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0Lg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcg
U0FOREJPWEVEX05BVklHQVRJT04gID0gMHgxOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBwcmV2
ZW50cyBjb250ZW50IGZyb20gbmF2aWdhdGluZyB0aGVpciB0b3AtbGV2ZWwgYnJvd3NpbmcNCisg
KiBjb250ZXh0Lg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1RPUExFVkVM
X05BVklHQVRJT04gPSAweDI7DQorDQorLyoqDQorICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRl
bnQgZnJvbSBpbnN0YW50aWF0aW5nIHBsdWdpbnMsIHdoZXRoZXIgdXNpbmcgdGhlDQorICogZW1i
ZWQgZWxlbWVudCwgdGhlIG9iamVjdCBlbGVtZW50LCB0aGUgYXBwbGV0IGVsZW1lbnQsIG9yIHRo
cm91Z2gNCisgKiBuYXZpZ2F0aW9uIG9mIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIHVubGVz
cyB0aG9zZSBwbHVnaW5zIGNhbiBiZQ0KKyAqIHNlY3VyZWQuDQorICovDQorY29uc3QgdW5zaWdu
ZWQgbG9uZyBTQU5EQk9YRURfUExVR0lOUyA9IDB4NDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcg
Zm9yY2VzIGNvbnRlbnQgaW50byBhIHVuaXF1ZSBvcmlnaW4sIHRodXMgcHJldmVudGluZyBpdCBm
cm9tDQorICogYWNjZXNzaW5nIG90aGVyIGNvbnRlbnQgZnJvbSB0aGUgc2FtZSBvcmlnaW4uDQor
ICogVGhpcyBmbGFnIGFsc28gcHJldmVudHMgc2NyaXB0IGZyb20gcmVhZGluZyBmcm9tIG9yIHdy
aXRpbmcgdG8gdGhlDQorICogZG9jdW1lbnQuY29va2llIElETCBhdHRyaWJ1dGUsIGFuZCBibG9j
a3MgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNB
TkRCT1hFRF9PUklHSU4gPSAweDg7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBmb3Jt
IHN1Ym1pc3Npb24uDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfRk9STVMg
PSAweDEwOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3Mgc2NyaXB0IGV4ZWN1dGlvbi4N
CisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9TQ1JJUFRTID0gMHgyMDsNCisN
CisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIGZlYXR1cmVzIHRoYXQgdHJpZ2dlciBhdXRvbWF0
aWNhbGx5LCBzdWNoIGFzDQorICogYXV0b21hdGljYWxseSBwbGF5aW5nIGEgdmlkZW8gb3IgYXV0
b21hdGljYWxseSBmb2N1c2luZyBhIGZvcm0gY29udHJvbC4NCisgKi8NCitjb25zdCB1bnNpZ25l
ZCBsb25nIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVMgPSAweDQwOw0KKyNlbmRpZg0KZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwIGIvY29udGVudC9i
YXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc1Njcmlw
dExvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAKQEAg
LTM3LDE2ICszNywxNyBAQAogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgog
I2luY2x1ZGUgInBybG9nLmgiCiAjaW5jbHVkZSAibnNJQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1
ZGUgIm5zQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1ZGUgIm5zQ1JULmgiCiAjaW5jbHVkZSAibnND
b250ZW50Q3JlYXRvckZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIm5zR2VuZXJpY0VsZW1lbnQuaCIK
ICNpbmNsdWRlICJuc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRlICJuc1NhbmRi
b3hGbGFncy5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9GdW5jdGlvblRpbWVyLmgiCiAjaW5jbHVk
ZSAibW96aWxsYS9DT1JTTW9kZS5oIgogI2luY2x1ZGUgIm1vemlsbGEvQXR0cmlidXRlcy5oIgog
CiAjaWZkZWYgUFJfTE9HR0lORwogc3RhdGljIFBSTG9nTW9kdWxlSW5mbyogZ0NzcFBSTG9nOwog
I2VuZGlmCkBAIC0yNzMsMTYgKzI3NCwyMSBAQCBuc1NjcmlwdExvYWRlcjo6U3RhcnRMb2FkKG5z
U2NyaXB0TG9hZFJlCiAgIGlmICghd2luZG93KSB7CiAgICAgcmV0dXJuIE5TX0VSUk9SX05VTExf
UE9JTlRFUjsKICAgfQogCiAgIG5zSURvY1NoZWxsICpkb2NzaGVsbCA9IHdpbmRvdy0+R2V0RG9j
U2hlbGwoKTsKIAogICBuc0NPTVB0cjxuc0lJbnRlcmZhY2VSZXF1ZXN0b3I+IHByb21wdGVyKGRv
X1F1ZXJ5SW50ZXJmYWNlKGRvY3NoZWxsKSk7CiAKKyAgLy8gSWYgdGhpcyBkb2N1bWVudCBpcyBz
YW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctc2NyaXB0cycsIGFib3J0LgorICBpZiAobURvY3VtZW50
LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgcmV0dXJuIE5TX09L
OworICB9CisKICAgLy8gY2hlY2sgZm9yIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdG8gcGFz
cyBkb3duIHRvIHRoZSBjaGFubmVsCiAgIC8vIHRoYXQgd2lsbCBiZSBjcmVhdGVkIHRvIGxvYWQg
dGhlIHNjcmlwdAogICBuc0NPTVB0cjxuc0lDaGFubmVsUG9saWN5PiBjaGFubmVsUG9saWN5Owog
ICBuc0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgcnYgPSBtRG9jdW1l
bnQtPk5vZGVQcmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICBOU19F
TlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICBpZiAoY3NwKSB7CiAgICAgY2hhbm5lbFBvbGljeSA9
IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnNjaGFubmVscG9saWN5OzEiKTsKQEAg
LTYzMCwxNiArNjM2LDIxIEBAIG5zU2NyaXB0TG9hZGVyOjpQcm9jZXNzU2NyaXB0RWxlbWVudChu
c0kKICAgICAgICAgIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwYXJzZXItYmxvY2tpbmcgc2NyaXB0
IGF0IGEgdGltZSIpOwogICAgIE5TX0FTU0VSVElPTihtWFNMVFJlcXVlc3RzLklzRW1wdHkoKSwK
ICAgICAgICAgIlBhcnNlci1ibG9ja2luZyBzY3JpcHRzIGFuZCBYU0xUIHNjcmlwdHMgaW4gdGhl
IHNhbWUgZG9jISIpOwogICAgIG1QYXJzZXJCbG9ja2luZ1JlcXVlc3QgPSByZXF1ZXN0OwogICAg
IHJldHVybiB0cnVlOwogICB9CiAKICAgLy8gaW5saW5lIHNjcmlwdAorICAvLyBJcyB0aGlzIGRv
Y3VtZW50IHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJz8KKyAgaWYgKG1Eb2N1bWVu
dC0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykgeworICAgIHJldHVybiBmYWxz
ZTsKKyAgfQorCiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3NwOwogICBy
diA9IG1Eb2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3Nw
KSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBmYWxzZSk7CiAKICAgaWYgKGNzcCkgewogICAg
IFBSX0xPRyhnQ3NwUFJMb2csIFBSX0xPR19ERUJVRywgKCJOZXcgU2NyaXB0TG9hZGVyIGkgKioq
KndpdGggQ1NQKioqKiIpKTsKICAgICBib29sIGlubGluZU9LOwogICAgIHJ2ID0gY3NwLT5HZXRB
bGxvd3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvZXZlbnRz
L3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcCBiL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2
ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcAotLS0gYS9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExp
c3RlbmVyTWFuYWdlci5jcHAKKysrIGIvY29udGVudC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5l
ck1hbmFnZXIuY3BwCkBAIC01MCwxNiArNTAsMTcgQEAKICNpbmNsdWRlICJuc0RPTUpTVXRpbHMu
aCIKICNpbmNsdWRlICJuc0RPTVNjcmlwdE9iamVjdEhvbGRlci5oIgogI2luY2x1ZGUgIm5zRGF0
YUhhc2h0YWJsZS5oIgogI2luY2x1ZGUgIm5zQ09NQXJyYXkuaCIKICNpbmNsdWRlICJuc0V2ZW50
TGlzdGVuZXJTZXJ2aWNlLmgiCiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5Lmgi
CiAjaW5jbHVkZSAibnNKU0Vudmlyb25tZW50LmgiCiAjaW5jbHVkZSAieHBjcHVibGljLmgiCisj
aW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRv
bTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpoYWw7CiAKICNkZWZpbmUgRVZFTlRfVFlQRV9F
UVVBTFMoIGxzLCB0eXBlLCB1c2VyVHlwZSApIFwKICAgKGxzLT5tRXZlbnRUeXBlID09IHR5cGUg
JiYgXAogICAobHMtPm1FdmVudFR5cGUgIT0gTlNfVVNFUl9ERUZJTkVEX0VWRU5UIHx8IGxzLT5t
VHlwZUF0b20gPT0gdXNlclR5cGUpKQogCkBAIC01NjgsMTYgKzU2OSwyMiBAQCBuc0V2ZW50TGlz
dGVuZXJNYW5hZ2VyOjpBZGRTY3JpcHRFdmVudExpCiAgICAgLy8gbG9hZGVkIGFzIGRhdGEuCiAg
ICAgcmV0dXJuIE5TX09LOwogICB9CiAKICAgbnNyZXN1bHQgcnYgPSBOU19PSzsKICAgLy8gcmV0
dXJuIGVhcmx5IHByZXZlbnRpbmcgdGhlIGV2ZW50IGxpc3RlbmVyIGZyb20gYmVpbmcgYWRkZWQK
ICAgLy8gJ2RvYycgaXMgZmV0Y2hlZCBhYm92ZQogICBpZiAoZG9jKSB7CisgICAgLy8gRG9uJ3Qg
YWxsb3cgYWRkaW5nIGFuIGV2ZW50IGxpc3RlbmVyIGlmIHRoZSBkb2N1bWVudCBpcyBzYW5kYm94
ZWQKKyAgICAvLyB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJy4KKyAgICBpZiAoZG9jLT5TYW5kYm94
RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9N
X1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBuc0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQ
b2xpY3k+IGNzcDsKICAgICBydiA9IGRvYy0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVy
X0FkZFJlZnMoY3NwKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICAgIGlm
IChjc3ApIHsKICAgICAgIGJvb2wgaW5saW5lT0s7CiAgICAgICBydiA9IGNzcC0+R2V0QWxsb3dz
SW5saW5lU2NyaXB0KCZpbmxpbmVPSyk7CiAgICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYp
OwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50
LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKLS0t
IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC00OCwxNiAr
NDgsMTcgQEAKIAogI2luY2x1ZGUgIm1vekF1dG9Eb2NVcGRhdGUuaCIKICNpbmNsdWRlICJuc0lI
VE1MQ29sbGVjdGlvbi5oIgogCiAjaW5jbHVkZSAibnNJQ29uc3RyYWludFZhbGlkYXRpb24uaCIK
IAogI2luY2x1ZGUgIm5zSURPTUhUTUxCdXR0b25FbGVtZW50LmgiCiAjaW5jbHVkZSAiZG9tYmlu
ZGluZ3MuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
bW96aWxsYTo6ZG9tOwogCiBzdGF0aWMgY29uc3QgaW50IE5TX0ZPUk1fQ09OVFJPTF9MSVNUX0hB
U0hUQUJMRV9TSVpFID0gMTY7CiAKIHN0YXRpYyBjb25zdCBQUlVpbnQ4IE5TX0ZPUk1fQVVUT0NP
TVBMRVRFX09OICA9IDE7CiBzdGF0aWMgY29uc3QgUFJVaW50OCBOU19GT1JNX0FVVE9DT01QTEVU
RV9PRkYgPSAwOwogCkBAIC02NDksMTcgKzY1MCwxOSBAQCBuc0hUTUxGb3JtRWxlbWVudDo6RG9T
dWJtaXRPclJlc2V0KG5zRXZlCiAgICAgcmV0dXJuIERvUmVzZXQoKTsKICAgfQogCiAgIGlmIChO
U19GT1JNX1NVQk1JVCA9PSBhTWVzc2FnZSkgewogICAgIC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdy
ZSBub3QgaW4gYSBkb2N1bWVudC4KICAgICBpZiAoIWRvYykgewogICAgICAgcmV0dXJuIE5TX09L
OwogICAgIH0KLSAgICByZXR1cm4gRG9TdWJtaXQoYUV2ZW50KTsKKyAgICAvLyBEb24ndCBzdWJt
aXQgaWYgd2UncmUgaW4gYSBzYW5kYm94ZWQgZnJhbWUgYW5kIGZvcm0gc3VibWl0CisgICAgLy8g
aXMgZGlzYWJsZWQuCisgICAgcmV0dXJuIChkb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVE
X0ZPUk1TKSA/IE5TX09LIDogRG9TdWJtaXQoYUV2ZW50KTsKICAgfQogCiAgIE1PWl9BU1NFUlQo
ZmFsc2UpOwogICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zcmVzdWx0CiBuc0hUTUxGb3JtRWxlbWVu
dDo6RG9SZXNldCgpCkBAIC0xNjUwLDE2ICsxNjUzLDI0IEBAIG5zSFRNTEZvcm1FbGVtZW50OjpD
aGVja1ZhbGlkRm9ybVN1Ym1pc3MKICAgICogVE9ETzogdGhlIGNoZWNrIGZvciBvYnNlcnZlciBz
aG91bGQgYmUgcmVtb3ZlZCBsYXRlciB3aGVuIEhUTUw1IEZvcm1zIHdpbGwKICAgICogYmUgc3By
ZWFkIGVub3VnaCBhbmQgYXV0aG9ycyB3aWxsIGFzc3VtZSBmb3JtcyBjYW4ndCBiZSBzdWJtaXR0
ZWQgd2hlbgogICAgKiBpbnZhbGlkLiBTZWUgYnVnIDU4NzY3MS4KICAgICovCiAKICAgTlNfQVNT
RVJUSU9OKCFIYXNBdHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6Om5vdmFsaWRhdGUp
LAogICAgICAgICAgICAgICAgIldlIHNob3VsZG4ndCBiZSB0aGVyZSBpZiBub3ZhbGlkYXRlIGlz
IHNldCEiKTsKIAorICAvLyBEb24ndCBkbyB2YWxpZGF0aW9uIGZvciBhIGZvcm0gc3VibWl0IGRv
bmUgYnkgYSBzYW5kYm94ZWQgZG9jdW1lbnQgdGhhdAorICAvLyBkb2Vzbid0IGhhdmUgJ2FsbG93
LWZvcm1zJywgdGhlIHN1Ym1pdCB3aWxsIGhhdmUgYmVlbiBibG9ja2VkIGFuZCB0aGUKKyAgLy8g
SFRNTDUgc3BlYyBzYXlzIHdlIHNob3VsZG4ndCB2YWxpZGF0ZSBpbiB0aGlzIGNhc2UuCisgIG5z
SURvY3VtZW50KiBkb2MgPSBHZXRDdXJyZW50RG9jKCk7CisgIGlmIChkb2MgJiYgKGRvYy0+U2Fu
ZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfRk9STVMpKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
fQorCiAgIC8vIFdoZW4gLnN1Ym1pdCgpIGlzIGNhbGxlZCBhRXZlbnQgPSBuc251bGwgc28gd2Ug
Y2FuIHJlbHkgb24gdGhhdCB0byBrbm93IGlmCiAgIC8vIHdlIGhhdmUgdG8gY2hlY2sgdGhlIHZh
bGlkaXR5IG9mIHRoZSBmb3JtLgogICBuc0NPTVB0cjxuc0lPYnNlcnZlclNlcnZpY2U+IHNlcnZp
Y2UgPQogICAgIG1vemlsbGE6OnNlcnZpY2VzOjpHZXRPYnNlcnZlclNlcnZpY2UoKTsKICAgaWYg
KCFzZXJ2aWNlKSB7CiAgICAgTlNfV0FSTklORygiTm8gb2JzZXJ2ZXIgc2VydmljZSBhdmFpbGFi
bGUhIik7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9j
b250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9z
cmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC0xLDIyICsxLDE2IEBACiAvKiAtKi0gTW9kZTog
QysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6
IDIgLSotICovCiAvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVy
bXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBv
ZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCiAgKiBmaWxlLCBZb3UgY2Fu
IG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwogCiAjaW5jbHVk
ZSAibW96aWxsYS9VdGlsLmgiCiAKICNpbmNsdWRlICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCi0j
aW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0drQXRvbXMuaCIKLSNp
bmNsdWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJuc0RPTUVycm9yLmgiCi0j
aW5jbHVkZSAibnNSdWxlRGF0YS5oIgotI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiBO
U19JTVBMX05TX05FV19IVE1MX0VMRU1FTlRfQ0hFQ0tfUEFSU0VSKElGcmFtZSkKIAogbnNIVE1M
SUZyYW1lRWxlbWVudDo6bnNIVE1MSUZyYW1lRWxlbWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5v
ZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZyb21QYXJzZXIgYUZyb21QYXJzZXIpCkBAIC01MSwxNiArNDUsMTcgQEAgTlNfSU1QTF9T
VFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LAogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxJ
RnJhbWVFbGVtZW50LCBMb25nRGVzYywgbG9uZ2Rlc2MpCiBOU19JTVBMX1NUUklOR19BVFRSKG5z
SFRNTElGcmFtZUVsZW1lbnQsIE1hcmdpbkhlaWdodCwgbWFyZ2luaGVpZ2h0KQogTlNfSU1QTF9T
VFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBNYXJnaW5XaWR0aCwgbWFyZ2lud2lkdGgp
CiBOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE5hbWUsIG5hbWUpCiBO
U19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNjcm9sbGluZywgc2Nyb2xs
aW5nKQogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBTcmMsIHNyYykKIE5T
X0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgV2lkdGgsIHdpZHRoKQogTlNf
SU1QTF9CT09MX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTW96QWxsb3dGdWxsU2NyZWVuLCBt
b3phbGxvd2Z1bGxzY3JlZW4pCitOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1l
bnQsIFNhbmRib3gsIHNhbmRib3gpCiAKIHZvaWQKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEl0
ZW1WYWx1ZVRleHQobnNBU3RyaW5nJiBhVmFsdWUpCiB7CiAgIEdldFNyYyhhVmFsdWUpOwogfQog
CiB2b2lkCkBAIC0yMDAsOCArMTk1LDM3IEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OklzQXR0cmli
dXRlTWFwcGVkKGMKIAogCiBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jCiBuc0hUTUxJRnJhbWVF
bGVtZW50OjpHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdAogewogICByZXR1cm4g
Jk1hcEF0dHJpYnV0ZXNJbnRvUnVsZTsKIH0KIAorbnNyZXN1bHQKK25zSFRNTElGcmFtZUVsZW1l
bnQ6OkFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZh
bHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhTm90aWZ5KQor
eworICBpZiAoYU5hbWUgPT0gbnNHa0F0b21zOjpzYW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9PSBr
TmFtZVNwYWNlSURfTm9uZSkgeworICAgIC8vIFBhcnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNh
bmRib3ggYXR0cmlidXRlLCBhbmQgaWYgd2UgaGF2ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0IGl0
cyBzYW5kYm94IGZsYWdzIGFwcHJvcHJpYXRlbHkuCisgICAgaWYgKG1GcmFtZUxvYWRlcikgewor
ICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY3NoZWxsID0gbUZyYW1lTG9hZGVyLT5HZXRF
eGlzdGluZ0RvY1NoZWxsKCk7CisKKyAgICAgIGlmIChkb2NzaGVsbCkgeworICAgICAgICBQUlVp
bnQzMiBuZXdGbGFncyA9IDA7CisgICAgICAgIC8vIElmIGEgTlVMTCBhVmFsdWUgaXMgcGFzc2Vk
IGluLCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBzYW5kYm94IGZsYWdzCisgICAgICAgIC8vIHdoaWNo
IHdlIHdpbGwgZG8gYnkgc2V0dGluZyB0aGVtIHRvIDAuCisgICAgICAgIGlmIChhVmFsdWUpIHsK
KyAgICAgICAgICBuc0F1dG9TdHJpbmcgc3RyVmFsdWU7CisgICAgICAgICAgYVZhbHVlLT5Ub1N0
cmluZyhzdHJWYWx1ZSk7CisgICAgICAgICAgbmV3RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6UGFy
c2VTYW5kYm94QXR0cmlidXRlVG9GbGFncygKKyAgICAgICAgICAgIHN0clZhbHVlKTsKKyAgICAg
ICAgfSAgICAgICAKKyAgICAgICAgZG9jc2hlbGwtPlNldFNhbmRib3hGbGFncyhuZXdGbGFncyk7
CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBuc0dlbmVyaWNIVE1MRWxlbWVudDo6QWZ0
ZXJTZXRBdHRyKGFOYW1lU3BhY2VJRCwgYU5hbWUsIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5vdGlmeSk7CisKK30KZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmggYi9jb250ZW50L2h0
bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCi0tLSBhL2NvbnRlbnQvaHRtbC9j
b250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmgKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaApAQCAtMSwxNiArMSwyNCBAQAogLyogLSotIE1v
ZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zm
c2V0OiAyIC0qLSAqLwogLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhl
IHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwogICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNv
cHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICogZmlsZSwgWW91
IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KIAogI2lu
Y2x1ZGUgIm5zR2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJuc0lET01IVE1M
SUZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIm5zSURPTUdldFNWR0RvY3VtZW50LmgiCisjaW5j
bHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0drQXRvbXMuaCIKKyNpbmNs
dWRlICJuc0lEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgorI2lu
Y2x1ZGUgIm5zRE9NRXJyb3IuaCIKKyNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCisjaW5jbHVkZSAi
bnNTdHlsZUNvbnN0cy5oIgorI2luY2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCiAKIGNsYXNzIG5z
SFRNTElGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAog
ewogcHVibGljOgogICBuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9k
ZUluZm8+IGFOb2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZy
b21QYXJzZXIgYUZyb21QYXJzZXIgPSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7CkBA
IC00MSwxMiArNDksMzYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CiAgIE5TX0lNRVRIT0RfKGJvb2wpIElzQXR0cmlidXRl
TWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0OwogICB2aXJ0dWFsIG5zTWFw
UnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3Q7
CiAKICAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lO
b2RlICoqYVJlc3VsdCkgY29uc3Q7CiAgIHZpcnR1YWwgbnNYUENDbGFzc0luZm8qIEdldENsYXNz
SW5mbygpOwogICB2aXJ0dWFsIG5zSURPTU5vZGUqIEFzRE9NTm9kZSgpIHsgcmV0dXJuIHRoaXM7
IH0KIAorICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJ
RCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zQXR0clZhbHVlKiBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYU5vdGlmeSk7CisKKyAgUFJVaW50MzIgR2V0U2FuZGJveEZsYWdzKCkKKyAgeworICAgIG5z
QXV0b1N0cmluZyBzYW5kYm94QXR0cjsKKworICAgIGlmIChHZXRBdHRyKGtOYW1lU3BhY2VJRF9O
b25lLCBuc0drQXRvbXM6OnNhbmRib3gsIHNhbmRib3hBdHRyKSkgeworICAgICAgcmV0dXJuIG5z
Q29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKHNhbmRib3hBdHRyKTsK
KyAgICB9CisKKyAgICAvLyBObyBzYW5kYm94IGF0dHJpYnV0ZSwgbm8gc2FuZGJveCBmbGFncy4K
KyAgICByZXR1cm4gMDsKKyAgfQorCisgIHN0YXRpYyBuc0hUTUxJRnJhbWVFbGVtZW50KiBGcm9t
Q29udGVudChuc0lDb250ZW50ICphQ29udGVudCkKKyAgeworICAgIGlmIChhQ29udGVudC0+SXNI
VE1MKG5zR2tBdG9tczo6aWZyYW1lKSkgeworICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG5zSFRN
TElGcmFtZUVsZW1lbnQqPihhQ29udGVudCk7CisgICAgfQorICAgIHJldHVybiBuc251bGw7Cisg
IH0KKwogcHJvdGVjdGVkOgogICB2aXJ0dWFsIHZvaWQgR2V0SXRlbVZhbHVlVGV4dChuc0FTdHJp
bmcmIHRleHQpOwogICB2aXJ0dWFsIHZvaWQgU2V0SXRlbVZhbHVlVGV4dChjb25zdCBuc0FTdHJp
bmcmIHRleHQpOwogfTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNI
VE1MRG9jdW1lbnQuY3BwIGIvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVu
dC5jcHAKLS0tIGEvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAK
KysrIGIvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKQEAgLTk4
LDE2ICs5OCwxNyBAQAogI2luY2x1ZGUgInBycHJmLmgiCiAjaW5jbHVkZSAibW96aWxsYS9kb20v
RWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJu
c01pbWVUeXBlcy5oIgogI2luY2x1ZGUgIm5zSVJlcXVlc3QuaCIKICNpbmNsdWRlICJuc0h0bWw1
VHJlZU9wRXhlY3V0b3IuaCIKICNpbmNsdWRlICJuc0h0bWw1UGFyc2VyLmgiCiAjaW5jbHVkZSAi
bnNJRE9NSlNXaW5kb3cuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiB1c2luZyBu
YW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKICNkZWZp
bmUgTlNfTUFYX0RPQ1VNRU5UX1dSSVRFX0RFUFRIIDIwCiAKICNpbmNsdWRlICJwcm1lbS5oIgog
I2luY2x1ZGUgInBydGltZS5oIgpAQCAtMTIxNiwxNiArMTIxNywyMiBAQCBuc0hUTUxEb2N1bWVu
dDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiB7CiAgIGFDb29raWUuVHJ1bmNhdGUoKTsgLy8g
Y2xlYXIgY3VycmVudCBjb29raWUgaW4gY2FzZSBzZXJ2aWNlIGZhaWxzOwogICAgICAgICAgICAg
ICAgICAgICAgIC8vIG5vIGNvb2tpZSBpc24ndCBhbiBlcnJvciBjb25kaXRpb24uCiAKICAgaWYg
KG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKKyAgLy8g
SWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNldCwgYWNjZXNzIHRv
IHJlYWQgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAm
IFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VS
UjsKKyAgfQorICAKICAgLy8gbm90IGhhdmluZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVy
cm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNl
KE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlmIChzZXJ2aWNlKSB7CiAgICAgLy8g
R2V0IGEgVVJJIGZyb20gdGhlIGRvY3VtZW50IHByaW5jaXBhbC4gV2UgdXNlIHRoZSBvcmlnaW5h
bAogICAgIC8vIGNvZGViYXNlIGluIGNhc2UgdGhlIGNvZGViYXNlIHdhcyBjaGFuZ2VkIGJ5IFNl
dERvbWFpbgogICAgIG5zQ09NUHRyPG5zSVVSST4gY29kZWJhc2VVUkk7CiAgICAgTm9kZVByaW5j
aXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMoY29kZWJhc2VVUkkpKTsKIApAQCAtMTI0Niwx
NiArMTI1MywyMiBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiAK
IE5TX0lNRVRIT0RJTVAKIG5zSFRNTERvY3VtZW50OjpTZXRDb29raWUoY29uc3QgbnNBU3RyaW5n
JiBhQ29va2llKQogewogICBpZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4g
TlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZs
YWcgaXMgc2V0LCBhY2Nlc3MgdG8gd3JpdGUgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgor
ICBpZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICByZXR1cm4gTlNf
RVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgfQorCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUg
c2VydmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2
aWNlID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAo
c2VydmljZSAmJiBtRG9jdW1lbnRVUkkpIHsKICAgICBuc0NPTVB0cjxuc0lQcm9tcHQ+IHByb21w
dDsKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW5kb3cgPSBHZXRXaW5kb3coKTsKICAg
ICBpZiAod2luZG93KSB7CiAgICAgICB3aW5kb3ctPkdldFByb21wdGVyKGdldHRlcl9BZGRSZWZz
KHByb21wdCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4g
Yi9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCi0tLSBhL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUu
aW4KKysrIGIvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5pbgpAQCAtODUsOSArODUsMTAgQEAgaW5j
bHVkZSAkKHRvcHNyY2RpcikvY29uZmlnL2NvbmZpZy5tawogaW5jbHVkZSAkKHRvcHNyY2Rpcikv
aXBjL2Nocm9taXVtL2Nocm9taXVtLWNvbmZpZy5tawogaW5jbHVkZSAkKHRvcHNyY2RpcikvY29u
ZmlnL3J1bGVzLm1rCiAKIExPQ0FMX0lOQ0xVREVTICs9IFwKICAgLUkkKHNyY2RpcikvLi4vc2hp
c3Rvcnkvc3JjIFwKICAgLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UgXAogICAtSSQodG9wc3JjZGly
KS9sYXlvdXQvYmFzZSBcCiAgIC1JJCh0b3BzcmNkaXIpL3hwY29tL2RzIFwKKyAgLUkkKHRvcHNy
Y2RpcikvY29udGVudC9iYXNlL3NyYyBcCiAgICQoTlVMTCkKZGlmZiAtLWdpdCBhL2RvY3NoZWxs
L2Jhc2UvbnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCi0tLSBh
L2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1No
ZWxsLmNwcApAQCAtMTc3LDE2ICsxNzcsMTcgQEAKICNpbmNsdWRlICJuc0lXZWJCcm93c2VyUHJp
bnQuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAibnNQbHVnaW5FcnJvci5oIgogI2luY2x1ZGUgIm5z
Q29udGVudFV0aWxzLmgiCiAjaW5jbHVkZSAibnNDb250ZW50RXJyb3JzLmgiCiAjaW5jbHVkZSAi
bnNJQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5o
IgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpbmNsdWRlICJuc1hVTEFwcEFQSS5o
IgogCiAjaW5jbHVkZSAibnNET01OYXZpZ2F0aW9uVGltaW5nLmgiCiAjaW5jbHVkZSAibnNJVGlt
ZWRDaGFubmVsLmgiCiAjaW5jbHVkZSAibW96aWxsYS9TdGFydHVwVGltZWxpbmUuaCIKICNpbmNs
dWRlICJuc0lGcmFtZU1lc3NhZ2VNYW5hZ2VyLmgiCiAKQEAgLTcyOSwxNiArNzMwLDE3IEBAIG5z
RG9jU2hlbGw6Om5zRG9jU2hlbGwoKToKICAgICBtQnVzeUZsYWdzKEJVU1lfRkxBR1NfTk9ORSks
CiAgICAgbUFwcFR5cGUobnNJRG9jU2hlbGw6OkFQUF9UWVBFX1VOS05PV04pLAogICAgIG1Mb2Fk
VHlwZSgwKSwKICAgICBtTWFyZ2luV2lkdGgoLTEpLAogICAgIG1NYXJnaW5IZWlnaHQoLTEpLAog
ICAgIG1JdGVtVHlwZSh0eXBlQ29udGVudCksCiAgICAgbVByZXZpb3VzVHJhbnNJbmRleCgtMSks
CiAgICAgbUxvYWRlZFRyYW5zSW5kZXgoLTEpLAorICAgIG1TYW5kYm94RmxhZ3MoMCksCiAgICAg
bUNyZWF0ZWQoZmFsc2UpLAogICAgIG1BbGxvd1N1YmZyYW1lcyh0cnVlKSwKICAgICBtQWxsb3dQ
bHVnaW5zKHRydWUpLAogICAgIG1BbGxvd0phdmFzY3JpcHQodHJ1ZSksCiAgICAgbUFsbG93TWV0
YVJlZGlyZWN0cyh0cnVlKSwKICAgICBtQWxsb3dJbWFnZXModHJ1ZSksCiAgICAgbUFsbG93RE5T
UHJlZmV0Y2godHJ1ZSksCiAgICAgbUFsbG93V2luZG93Q29udHJvbCh0cnVlKSwKQEAgLTMwMTAs
MTYgKzMwMTIsNzMgQEAgbnNEb2NTaGVsbDo6RmluZEl0ZW1XaXRoTmFtZShjb25zdCBQUlVuaQog
ICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGZvdW5kSXRlbSkgewogICAgICAgICAgICAgLy8gV2UgcmV0dXJuIGZvdW5kSXRlbSBoZXJlIGV2
ZW4gaWYgaXQncyBub3QgYW4gYWN0aXZlCiAgICAgICAgICAgICAvLyBpdGVtIHNpbmNlIGFsbCB0
aGUgbmFtZXMgd2UndmUgZGVhbHQgd2l0aCBzbyBmYXIgYXJlCiAgICAgICAgICAgICAvLyBzcGVj
aWFsIGNhc2VzIHRoYXQgd2Ugd29uJ3QgYm90aGVyIGxvb2tpbmcgZm9yIGZ1cnRoZXIuCiAKKyAg
ICAgICAgICAgIC8vIElmIG91ciBkb2N1bWVudCBpcyBzYW5kYm94ZWQsIHdlIG5lZWQgdG8gZG8g
c29tZSBleHRyYSBjaGVja3MuCisgICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAw
OworCisgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fR2V0SW50ZXJm
YWNlKGFPcmlnaW5hbFJlcXVlc3Rvcik7CisKKyAgICAgICAgICAgIGlmIChkb2MpIHsKKyAgICAg
ICAgICAgICAgICBzYW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzKSB7CisgICAgICAgICAgICAgICAg
bnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gcm9vdDsKKyAgICAgICAgICAgICAgICBHZXRT
YW1lVHlwZVJvb3RUcmVlSXRlbShnZXR0ZXJfQWRkUmVmcyhyb290KSk7CisKKyAgICAgICAgICAg
ICAgICAvLyBJcyB0aGUgZm91bmQgaXRlbSBub3QgYSB0b3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4
dCBhbmQgbm90IG91cnNlbGYgPworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
VHJlZUl0ZW0+IHNlbGZBc0l0ZW0gPSBzdGF0aWNfY2FzdDxuc0lEb2NTaGVsbFRyZWVJdGVtICo+
KHRoaXMpOworICAgICAgICAgICAgICAgIGlmIChmb3VuZEl0ZW0gIT0gcm9vdCAmJiBmb3VuZEl0
ZW0gIT0gc2VsZkFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBBcmUgd2UgYW4gYW5j
ZXN0b3Igb2YgdGhlIGZvdW5kSXRlbSA/CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNBbmNl
c3RvciA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
VHJlZUl0ZW0+IHBhcmVudEFzSXRlbTsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQ
YXJlbnQoZ2V0dGVyX0FkZFJlZnMocGFyZW50QXNJdGVtKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKHBhcmVudEFzSXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01Q
dHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50QXNJdGVtLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0bXAgJiYgdG1wID09IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpc0FuY2VzdG9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudEFzSXRlbSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGlmICghaXNBbmNlc3RvcikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTm8sIHdlIGFyZSBub3QgYW4gYW5jZXN0b3IgYW5kIG91ciBkb2N1bWVudCBpcwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FuZGJveGVkLCB3ZSBjYW4ndCBhbGxvdyB0aGlz
LgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVG9wIGxldmVsIGJyb3dzaW5nIGNvbnRleHQgLSBpcyBpdCBhbiBhbmNlc3RvciBvZiBv
dXJzID8KKyAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4g
dG1wOworICAgICAgICAgICAgICAgICAgICBHZXRTYW1lVHlwZVBhcmVudChnZXR0ZXJfQWRkUmVm
cyh0bXApKTsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG1wKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBmb3VuZEl0ZW0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFuY2VzdG9yLCBhbmQgd2UgYXJlIHNhbmRi
b3hlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgYWxsb3ctdG9wLW5h
dmlnYXRpb24gaXMgc2V0LCB3ZSBjYW4ndCBhbGxvdyB0aGlzLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElP
TikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNudWxsOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRtcC0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBm
b3VuZEl0ZW0uc3dhcCgqX3JldHZhbCk7CiAgICAgICAgICAgICByZXR1cm4gTlNfT0s7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBLZWVwIGxvb2tpbmcKICAgICAgICAgCiAgICAgLy8gRmly
c3Qgd2UgY2hlY2sgb3VyIG5hbWUuCkBAIC01MDUwLDE2ICs1MTA5LDMwIEBAIG5zRG9jU2hlbGw6
OlNldElzQXBwVGFiKGJvb2wgYUlzQXBwVGFiKQogTlNfSU1FVEhPRElNUAogbnNEb2NTaGVsbDo6
R2V0SXNBcHBUYWIoYm9vbCAqYUlzQXBwVGFiKQogewogICAqYUlzQXBwVGFiID0gbUlzQXBwVGFi
OwogICByZXR1cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6OlNldFNh
bmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQoreworICAgIG1TYW5kYm94RmxhZ3Mg
PSBhU2FuZGJveEZsYWdzOworICAgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAor
bnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFncykKK3sK
KyAgICAqYVNhbmRib3hGbGFncyA9IG1TYW5kYm94RmxhZ3M7CisgICAgcmV0dXJuIE5TX09LOwor
fQorCitOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpTZXRWaXNpYmlsaXR5KGJvb2wgYVZpc2li
aWxpdHkpCiB7CiAgICAgaWYgKCFtQ29udGVudFZpZXdlcikKICAgICAgICAgcmV0dXJuIE5TX09L
OwogICAgIGlmIChhVmlzaWJpbGl0eSkgewogICAgICAgICBtQ29udGVudFZpZXdlci0+U2hvdygp
OwogICAgIH0KICAgICBlbHNlIHsKQEAgLTgyODksMTYgKzgzNjIsMjkgQEAgbnNEb2NTaGVsbDo6
SW50ZXJuYWxMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
VHJlZUl0ZW0+IHRhcmdldEl0ZW07CiAgICAgICAgIEZpbmRJdGVtV2l0aE5hbWUoYVdpbmRvd1Rh
cmdldCwgbnNudWxsLCB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRS
ZWZzKHRhcmdldEl0ZW0pKTsKIAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gdGFyZ2V0
RG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFjZSh0YXJnZXRJdGVtKTsKICAgICAgICAgCiAgICAg
ICAgIGJvb2wgaXNOZXdXaW5kb3cgPSBmYWxzZTsKICAgICAgICAgaWYgKCF0YXJnZXREb2NTaGVs
bCkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGRvY3NoZWxsJ3MgZG9jdW1lbnQgaXMgc2FuZGJv
eGVkIGFuZCB3YXMgdHJ5aW5nIHRvCisgICAgICAgICAgICAvLyBuYXZpZ2F0ZS9sb2FkIGEgZnJh
bWUgaXQgd2Fzbid0IGFsbG93ZWQgdG8gYWNjZXNzLCB0aGUKKyAgICAgICAgICAgIC8vIEZpbmRJ
dGVtV2l0aE5hbWUgYWJvdmUgd2lsbCBoYXZlIHJldHVybmVkIG51bGwgZm9yIHRoZSB0YXJnZXQK
KyAgICAgICAgICAgIC8vIGl0ZW0gLSB3ZSBkb24ndCB3YW50IHRvIGFjdHVhbGx5IG9wZW4gYSBu
ZXcgd2luZG93IGluIHRoaXMgY2FzZQorICAgICAgICAgICAgLy8gdGhvdWdoLiBDaGVjayBpZiB3
ZSBhcmUgc2FuZGJveGVkIGFuZCBiYWlsIG91dCBoZXJlIGlmIHNvLgorICAgICAgICAgICAgTlNf
RU5TVVJFX1RSVUUobUNvbnRlbnRWaWV3ZXIsIE5TX0VSUk9SX0ZBSUxVUkUpOworICAgICAgICAg
ICAgbnNJRG9jdW1lbnQqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICAg
ICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKyAgICAgICAgICAgIHNhbmRib3hG
bGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdz
ICYgU0FOREJPWEVEX05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNfRVJS
T1JfRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9N
V2luZG93PiB3aW4gPQogICAgICAgICAgICAgICAgIGRvX0dldEludGVyZmFjZShHZXRBc1N1cHBv
cnRzKHRoaXMpKTsKICAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKHdpbiwgTlNfRVJST1JfTk9U
X0FWQUlMQUJMRSk7CiAKICAgICAgICAgICAgIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUoYVdpbmRv
d1RhcmdldCk7CiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IG5ld1dpbjsKICAg
ICAgICAgICAgIHJ2ID0gd2luLT5PcGVuKEVtcHR5U3RyaW5nKCksIC8vIFVSTCB0byBsb2FkCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAvLyB3aW5kb3cgbmFtZQpA
QCAtOTEwMCwxOCArOTE4NiwzMSBAQCBuc0RvY1NoZWxsOjpEb1VSSUxvYWQobnNJVVJJICogYVVS
SSwKICAgICAgICAgfQogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkKICAg
ICAgICAgaWYgKGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAgICAv
LyBSZWZlcnJlciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4KICAg
ICAgICAgICAgIGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChk
b19RdWVyeUludGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFu
bmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUpOworICAgIG5zQ09N
UHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWw7CisKKyAgICAvLyBJZiB0aGUgY29udGVu
dCBiZWluZyBsb2FkZWQgc2hvdWxkIGJlIHNhbmRib3hlZCB3aXRoIHJlc3BlY3QgdG8gb3JpZ2lu
CisgICAgLy8gd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lwYWwgaGVyZSwgYW5k
IHRoZW4gdGVsbAorICAgIC8vIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lciB0byBm
b3JjZSBpdCB0byBiZSBzZXQgYXMgdGhlCisgICAgLy8gY2hhbm5lbCBvd25lci4KKyAgICBpZiAo
bVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICAgICAgb3duZXJQcmluY2lw
YWwgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL251bGxwcmluY2lwYWw7MSIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vdCBzYW5kYm94ZWQgLSB3ZSBhbGxvdyB0aGUgY29u
dGVudCB0byBhc3N1bWUgaXRzIG5hdHVyYWwgb3duZXIuCisgICAgICAgIG93bmVyUHJpbmNpcGFs
ID0gZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKTsKKyAgICB9CisKKyAgICBuc0NvbnRlbnRVdGls
czo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU2FuZGJveEZsYWdzICYg
U0FOREJPWEVEX09SSUdJTikpOwogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2Ny
aXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAgIGlmIChzY3JpcHRD
aGFubmVsKSB7CiAgICAgICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0
IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAg
ICAgICAgU2V0RXhlY3V0aW9uUG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFM
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5oIGIvZG9j
c2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgK
KysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKQEAgLTc1NSwxNiArNzU1LDE4IEBAIHBy
b3RlY3RlZDoKICAgICAvLyBDcmVhdGUoKSBpcyBjYWxsZWQsIHRoZSB0eXBlIGlzIG5vdCBleHBl
Y3RlZCB0byBjaGFuZ2UuCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUl0ZW1UeXBl
OwogCiAgICAgLy8gSW5kZXggaW50byB0aGUgU0hUcmFuc2FjdGlvbiBsaXN0LCBpbmRpY2F0aW5n
IHRoZSBwcmV2aW91cyBhbmQgY3VycmVudAogICAgIC8vIHRyYW5zYWN0aW9uIGF0IHRoZSB0aW1l
IHRoYXQgdGhpcyBEb2NTaGVsbCBiZWdpbnMgdG8gbG9hZAogICAgIFBSSW50MzIgICAgICAgICAg
ICAgICAgICAgIG1QcmV2aW91c1RyYW5zSW5kZXg7CiAgICAgUFJJbnQzMiAgICAgICAgICAgICAg
ICAgICAgbUxvYWRlZFRyYW5zSW5kZXg7CiAKKyAgICBQUlVpbnQzMiAgICAgICAgICAgICAgICAg
ICBtU2FuZGJveEZsYWdzOworCiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUNyZWF0
ZWQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93U3ViZnJhbWVzOwogICAg
IGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1BsdWdpbnM7CiAgICAgYm9vbCAgICAg
ICAgICAgICAgICAgICAgICAgbUFsbG93SmF2YXNjcmlwdDsKICAgICBib29sICAgICAgICAgICAg
ICAgICAgICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzOwogICAgIGJvb2wgICAgICAgICAgICAgICAg
ICAgICAgIG1BbGxvd0ltYWdlczsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxs
b3dETlNQcmVmZXRjaDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dXaW5k
b3dDb250cm9sOwpAQCAtNzk4LDE3ICs4MDAsMTcgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gSW5k
aWNhdGVzIHRoYXQgYSBEb2NTaGVsbCBpbiB0aGlzICJkb2NzaGVsbCB0cmVlIiBpcyBwcmludGlu
ZwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1Jc1ByaW50aW5nT3JQUDsKIAogICAg
IC8vIEluZGljYXRlcyB0byBDcmVhdGVDb250ZW50Vmlld2VyKCkgdGhhdCBpdCBpcyBzYWZlIHRv
IGNhY2hlIHRoZSBvbGQKICAgICAvLyBwcmVzZW50YXRpb24gb2YgdGhlIHBhZ2UsIGFuZCB0byBT
ZXR1cE5ld1ZpZXdlcigpIHRoYXQgdGhlIG9sZCB2aWV3ZXIKICAgICAvLyBzaG91bGQgYmUgcGFz
c2VkIGEgU0hFbnRyeSB0byBzYXZlIGl0c2VsZiBpbnRvLgogICAgIGJvb2wgICAgICAgICAgICAg
ICAgICAgICAgIG1TYXZpbmdPbGRWaWV3ZXI7Ci0KKyAgICAKICAgICAvLyBAc2VlIG5zSURvY1No
ZWxsSGlzdG9yeTo6Y3JlYXRlZER5bmFtaWNhbGx5CiAgICAgYm9vbCAgICAgICAgICAgICAgICAg
ICAgICAgbUR5bmFtaWNhbGx5Q3JlYXRlZDsKICNpZmRlZiBERUJVRwogICAgIGJvb2wgICAgICAg
ICAgICAgICAgICAgICAgIG1JbkVuc3VyZVNjcmlwdEVudjsKICNlbmRpZgogICAgIFBSVWludDY0
ICAgICAgICAgICAgICAgICAgIG1IaXN0b3J5SUQ7CiAKICAgICBzdGF0aWMgbnNJVVJJRml4dXAg
KnNVUklGaXh1cDsKZGlmZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNJRG9jU2hlbGwuaWRsIGIv
ZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NT
aGVsbC5pZGwKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKQEAgLTM0LDE3ICsz
NCwxNyBAQCBpbnRlcmZhY2UgbnNJU0hFbnRyeTsKIGludGVyZmFjZSBuc0lMYXlvdXRIaXN0b3J5
U3RhdGU7CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJvd3NlclVJOwogaW50ZXJmYWNlIG5zSURPTVN0
b3JhZ2U7CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsOwogaW50ZXJmYWNlIG5zSVdlYkJyb3dzZXJQ
cmludDsKIGludGVyZmFjZSBuc0lWYXJpYW50OwogaW50ZXJmYWNlIG5zSVByaXZhY3lUcmFuc2l0
aW9uT2JzZXJ2ZXI7CiAKLVtzY3JpcHRhYmxlLCBidWlsdGluY2xhc3MsIHV1aWQoODllYTlmMzIt
MThlYy00MTNiLTllMmMtY2U5YTRjODUxYjFjKV0KK1tzY3JpcHRhYmxlLCBidWlsdGluY2xhc3Ms
IHV1aWQoOWIyODMzMzctMDk3ZC00ZmE4LWEyZGEtOTE2MzE4ZWFmODI4KV0KIGludGVyZmFjZSBu
c0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiB7CiAgIC8qKgogICAgKiBMb2FkcyBhIGdpdmVuIFVS
SS4gIFRoaXMgd2lsbCBnaXZlIHByaW9yaXR5IHRvIGxvYWRpbmcgdGhlIHJlcXVlc3RlZCBVUkkK
ICAgICogaW4gdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcJdGhpcyBpbnRlcmZhY2UuICBJZiBpdCBj
YW4ndCBiZSBsb2FkZWQgaGVyZQogICAgKiBob3dldmVyLCB0aGUgVVJMIGRpc3BhdGNoZXIgd2ls
bCBnbyB0aHJvdWdoIGl0cyBub3JtYWwgcHJvY2VzcyBvZiBjb250ZW50CiAgICAqIGxvYWRpbmcu
CiAgICAqCkBAIC02MDEsOSArNjAxLDIzIEBAIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1
cHBvcnRzCiAgICAqLwogICBhdHRyaWJ1dGUgYm9vbCBpc0Jyb3dzZXJGcmFtZTsKIAogICAvKgog
ICAgKiBJcyB0aGlzIGRvY3NoZWxsIGNvbnRhaW5lZCBpbiBhbiA8aWZyYW1lIG1vemJyb3dzZXI+
LCBlaXRoZXIgZGlyZWN0bHkgb3IKICAgICogaW5kaXJlY3RseT8KICAgICovCiAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBib29sIGNvbnRhaW5lZEluQnJvd3NlckZyYW1lOworCisgIC8qKgorICAgKiBU
aGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9jc2hlbGwuIFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVl
IG9mIHRoZSBzYW5kYm94CisgICAqIGF0dHJpYnV0ZSBvZiB0aGUgYXNzb2NpYXRlZCBJRlJBTUUg
b3IgQ1NQLXByb3RlY3RhYmxlIGNvbnRlbnQsIGlmCisgICAqIGV4aXN0ZW50LiBTZWUgdGhlIEhU
TUw1IHNwZWMgZm9yIG1vcmUgZGV0YWlscy4KKyAgICogVGhlc2UgZmxhZ3Mgb24gdGhlIGRvY3No
ZWxsIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmli
dXRlLCB3aGljaCBpcyBtb2RpZmlhYmxlLiBUaGV5IGFyZSBvbmx5IHVzZWQgd2hlbiBsb2FkaW5n
IG5ldworICAgKiBjb250ZW50LCBzYW5kYm94IGZsYWdzIGFyZSBhbHNvIGltbXV0YWJseSBzZXQg
b24gdGhlIGRvY3VtZW50IHdoZW4gaXQgaXMKKyAgICogbG9hZGVkLgorICAgKiBUaGUgc2FuZGJv
eCBmbGFncyBvZiBhIGRvY3VtZW50IGRlcGVuZCBvbiB0aGUgc2FuZGJveCBmbGFncyBvbiBpdHMK
KyAgICogZG9jc2hlbGwgYW5kIG9mIGl0cyBwYXJlbnQgZG9jdW1lbnQsIGlmIGFueS4KKyAgICog
U2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgICovCisgIGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHNhbmRib3hGbGFnczsKIH07CmRpZmYgLS1naXQgYS9kb20v
YmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKLS0t
IGEvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCisrKyBiL2RvbS9iYXNlL25zR2xvYmFsV2lu
ZG93LmNwcApAQCAtMjE3LDE2ICsyMTcsMTcgQEAKICNpbmNsdWRlICJtb3pBdXRvRG9jVXBkYXRl
LmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL1RlbGVtZXRyeS5oIgogI2luY2x1ZGUgIm5zTG9jYXRp
b24uaCIKICNpbmNsdWRlICJuc1dyYXBwZXJDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJuc0RP
TUV2ZW50VGFyZ2V0SGVscGVyLmgiCiAjaW5jbHVkZSAibnNJQXBwc1NlcnZpY2UuaCIKICNpbmNs
dWRlICJwcnJuZy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpZmRlZiBBTkRS
T0lECiAjaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KICNlbmRpZgogCiAjaWZkZWYgUFJfTE9HR0lO
Rwogc3RhdGljIFBSTG9nTW9kdWxlSW5mbyogZ0RPTUxlYWtQUkxvZzsKICNlbmRpZgpAQCAtODIx
MywxNiArODIxNCwyMiBAQCBuc0dsb2JhbFdpbmRvdzo6R2V0U2Vzc2lvblN0b3JhZ2UobnNJRE9N
CiAgIGlmICghbVNlc3Npb25TdG9yYWdlKSB7CiAgICAgKmFTZXNzaW9uU3RvcmFnZSA9IG5zbnVs
bDsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAg
ICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAorICAg
IC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAg
ICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9jICYm
IChtRG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1
cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBuc3Jlc3VsdCBydiA9
IGRvY1NoZWxsLT5HZXRTZXNzaW9uU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9j
dW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhtU2Vzc2lvblN0b3JhZ2UpKTsKICAg
ICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAjaWZkZWYgUFJfTE9HR0lORwogICAgIGlm
IChQUl9MT0dfVEVTVChnRE9NTGVha1BSTG9nLCBQUl9MT0dfREVCVUcpKSB7CkBAIC04Mjc4LDE2
ICs4Mjg1LDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRMb2NhbFN0b3JhZ2UobnNJRE9NU3QKICAg
ICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9kb20vc3RvcmFnZW1hbmFnZXI7MSIsICZy
dik7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICAgIG5zU3RyaW5nIGRvY3Vt
ZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAgICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1l
bnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAorICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMg
dGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAgICAvLyBkb24ndCBhbGxvdyBhY2Nlc3Mg
dG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9jICYmIChtRG9jLT5TYW5kYm94RmxhZ3MoKSAm
IFNBTkRCT1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZ
X0VSUjsKKyAgICB9CisKICAgICBuc0lEb2NTaGVsbCogZG9jU2hlbGwgPSBHZXREb2NTaGVsbCgp
OwogICAgIG5zQ09NUHRyPG5zSUxvYWRDb250ZXh0PiBsb2FkQ29udGV4dCA9IGRvX1F1ZXJ5SW50
ZXJmYWNlKGRvY1NoZWxsKTsKIAogICAgIHJ2ID0gc3RvcmFnZU1hbmFnZXItPkdldExvY2FsU3Rv
cmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50VVJJLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkQ29udGV4dCAmJiBsb2FkQ29u
dGV4dC0+VXNlUHJpdmF0ZUJyb3dzaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsK
ICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0tZ2l0IGEvZG9tL2Jhc2UvbnNQ
bHVnaW5BcnJheS5jcHAgYi9kb20vYmFzZS9uc1BsdWdpbkFycmF5LmNwcAotLS0gYS9kb20vYmFz
ZS9uc1BsdWdpbkFycmF5LmNwcAorKysgYi9kb20vYmFzZS9uc1BsdWdpbkFycmF5LmNwcApAQCAt
MTAsMTYgKzEwLDE4IEBACiAjaW5jbHVkZSAibnNJRE9NTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAi
bnNJRE9NTWltZVR5cGUuaCIKICNpbmNsdWRlICJuc0lQbHVnaW5Ib3N0LmgiCiAjaW5jbHVkZSAi
bnNJRG9jU2hlbGwuaCIKICNpbmNsdWRlICJuc0lXZWJOYXZpZ2F0aW9uLmgiCiAjaW5jbHVkZSAi
bnNET01DbGFzc0luZm9JRC5oIgogI2luY2x1ZGUgIm5zUGx1Z2luRXJyb3IuaCIKICNpbmNsdWRl
ICJuc1BsdWdpbkhvc3QuaCIKKyNpbmNsdWRlICJuc0lDb250ZW50Vmlld2VyLmgiCisjaW5jbHVk
ZSAibnNJRG9jdW1lbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1l
c3BhY2UgbW96aWxsYTo6ZG9tOwogCiBuc1BsdWdpbkFycmF5Ojpuc1BsdWdpbkFycmF5KE5hdmln
YXRvciogbmF2aWdhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lEb2NTaGVs
bCAqYURvY1NoZWxsKQogICA6IG1OYXZpZ2F0b3IobmF2aWdhdG9yKSwKICAgICBtUGx1Z2luSG9z
dChkb19HZXRTZXJ2aWNlKE1PWl9QTFVHSU5fSE9TVF9DT05UUkFDVElEKSksCkBAIC02MywxOSAr
NjUsMjggQEAgbnNQbHVnaW5BcnJheTo6R2V0TGVuZ3RoKFBSVWludDMyKiBhTGVuZwogfQogCiBi
b29sCiBuc1BsdWdpbkFycmF5OjpBbGxvd1BsdWdpbnMoKQogewogICBib29sIGFsbG93UGx1Z2lu
cyA9IGZhbHNlOwogICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGwgPSBkb19RdWVyeVJl
ZmVyZW50KG1Eb2NTaGVsbCk7CiAKLSAgaWYgKGRvY1NoZWxsKQotICAgIGlmIChOU19GQUlMRUQo
ZG9jU2hlbGwtPkdldEFsbG93UGx1Z2lucygmYWxsb3dQbHVnaW5zKSkpCi0gICAgICBhbGxvd1Bs
dWdpbnMgPSBmYWxzZTsKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgbnNDT01QdHI8bnNJQ29udGVu
dFZpZXdlcj4gY3Y7CisgICAgZG9jU2hlbGwtPkdldENvbnRlbnRWaWV3ZXIoZ2V0dGVyX0FkZFJl
ZnMoY3YpKTsKKworICAgIGlmIChjdikgeworICAgICAgbnNJRG9jdW1lbnQgKiBkb2MgPSBjdi0+
R2V0RG9jdW1lbnQoKTsKKworICAgICAgaWYgKGRvYyAmJiAoTlNfRkFJTEVEKGRvYy0+R2V0QWxs
b3dQbHVnaW5zKCZhbGxvd1BsdWdpbnMpKSkpIHsKKyAgICAgICAgYWxsb3dQbHVnaW5zID0gZmFs
c2U7CisgICAgICB9CisgICAgfQorICB9CiAKICAgcmV0dXJuIGFsbG93UGx1Z2luczsKIH0KIAog
bnNJRE9NUGx1Z2luKgogbnNQbHVnaW5BcnJheTo6R2V0SXRlbUF0KFBSVWludDMyIGFJbmRleCwg
bnNyZXN1bHQqIGFSZXN1bHQpCiB7CiAgICphUmVzdWx0ID0gTlNfT0s7CmRpZmYgLS1naXQgYS9k
b20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbCBiL2RvbS9pbnRl
cmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZh
Y2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCisrKyBiL2RvbS9pbnRlcmZhY2Vz
L2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRsCkBAIC0xMSwzMiArMTEsMzIgQEAKICAq
CiAgKiBUaGlzIGludGVyZmFjZSBpcyB0cnlpbmcgdG8gZm9sbG93IHRoZSBET00gTGV2ZWwgMiBI
VE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1I
VE1MLwogICoKICAqIHdpdGggY2hhbmdlcyBmcm9tIHRoZSB3b3JrLWluLXByb2dyZXNzIFdIQVRX
RyBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2Vi
LWFwcHMvY3VycmVudC13b3JrLwogICovCiAKLVtzY3JpcHRhYmxlLCB1dWlkKDk3RTRGMEUxLUJE
MjctNDBFQy05Mjg3LTU2MzREQUYxNUI3MyldCitbc2NyaXB0YWJsZSwgdXVpZCg1MmY2MjQ0Yi1i
MWY1LTRmNGMtOGZmMy03ZTE0NjMxNmY0MTEpXQogaW50ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVF
bGVtZW50IDogbnNJRE9NSFRNTEVsZW1lbnQKIHsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0
cmluZyAgICAgICAgYWxpZ247CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAg
IGZyYW1lQm9yZGVyOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBoZWln
aHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGxvbmdEZXNjOwogICAg
ICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5IZWlnaHQ7CiAgICAgICAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1hcmdpbldpZHRoOwogICAgICAgICAgICBh
dHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBuYW1lOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nICAgICAgICBzY3JvbGxpbmc7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcg
ICAgICAgIHNyYzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgd2lkdGg7
CiAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBu
c0lET01Eb2N1bWVudCAgIGNvbnRlbnREb2N1bWVudDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIG5z
SURPTVdpbmRvdyAgICAgY29udGVudFdpbmRvdzsKIAotCisgICAgICAgICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmcgICAgICAgIHNhbmRib3g7CiAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwogICAvLyBp
ZnJhbWUgZWxlbWVudHMgcmVxdWlyZSB0aGUgbW96QWxsb3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0
byBiZSBwcmVzZW50CiAgIC8vIGlmIHRoZXkncmUgdG8gYWxsb3cgY29udGVudCBpbiB0aGUgc3Vi
IGRvY3VtZW50IHRvIGdvIGludG8gRE9NIGZ1bGwtc2NyZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRw
czovL3dpa2kubW96aWxsYS5vcmcvaW5kZXgucGhwP3RpdGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkK
ICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICAgbW96QWxsb3dGdWxsU2NyZWVu
OwogfTsKZGlmZiAtLWdpdCBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4gYi9kb20vc3JjL2pz
dXJsL01ha2VmaWxlLmluCi0tLSBhL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KKysrIGIvZG9t
L3NyYy9qc3VybC9NYWtlZmlsZS5pbgpAQCAtMjUsMTYgKzI1LDE3IEBAIFhQSURMU1JDUwk9IFwK
IENQUFNSQ1MJCT0gbnNKU1Byb3RvY29sSGFuZGxlci5jcHAKIAogRVhQT1JUUwkJPSAkKHNyY2Rp
cikvbnNKU1Byb3RvY29sSGFuZGxlci5oCiAKIExPQ0FMX0lOQ0xVREVTICs9IFwKIAkJLUkkKHNy
Y2RpcikgXAogCQktSSQodG9wc3JjZGlyKS9kb20vYmFzZSBcCiAJCS1JJCh0b3BzcmNkaXIpL25l
dHdlcmsvYmFzZS9zcmMgXAorCQktSSQodG9wc3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKIAog
aWZkZWYgQlVJTERfREVCVUdfR0MKIERFRklORVMJCSs9IC1EREVCVUdfR0MKIGVuZGlmCiAKIERJ
UlMgICAgICAgICAgICA9ICQoTlVMTCkKIFRFU1RfRElSUyArPSB0ZXN0CiAKZGlmZiAtLWdpdCBh
L2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAgYi9kb20vc3JjL2pzdXJsL25z
SlNQcm90b2NvbEhhbmRsZXIuY3BwCi0tLSBhL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFu
ZGxlci5jcHAKKysrIGIvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcApAQCAt
MzksMTYgKzM5LDE3IEBACiAjaW5jbHVkZSAibnNUaHJlYWRVdGlscy5oIgogI2luY2x1ZGUgIm5z
SUpTQ29udGV4dFN0YWNrLmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0Q2hhbm5lbC5oIgogI2luY2x1
ZGUgIm5zSURvY3VtZW50LmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0SW5wdXRTdHJlYW0uaCIKICNp
bmNsdWRlICJuc0lPYmplY3RPdXRwdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lXcml0YWJsZVBy
b3BlcnR5QmFnMi5oIgogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2lu
Y2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtKU1VSSUNJ
RCwgTlNfSlNVUklfQ0lEKTsKIAogY2xhc3MgbnNKU1RodW5rIDogcHVibGljIG5zSUlucHV0U3Ry
ZWFtCiB7CiBwdWJsaWM6CiAgICAgbnNKU1RodW5rKCk7CiAKQEAgLTE4NSwxNiArMTg2LDIzIEBA
IG5zcmVzdWx0IG5zSlNUaHVuazo6RXZhbHVhdGVTY3JpcHQobnNJQ2gKICAgICAvLyBHZXQgdGhl
IGdsb2JhbCBvYmplY3Qgd2Ugc2hvdWxkIGJlIHJ1bm5pbmcgb24uCiAgICAgbnNJU2NyaXB0R2xv
YmFsT2JqZWN0KiBnbG9iYWwgPSBHZXRHbG9iYWxPYmplY3QoYUNoYW5uZWwpOwogICAgIGlmICgh
Z2xvYmFsKSB7CiAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAogICAg
IG5zQ09NUHRyPG5zUElET01XaW5kb3c+IHdpbihkb19RdWVyeUludGVyZmFjZShnbG9iYWwpKTsK
IAorICAgIC8vIFNhbmRib3hlZCBkb2N1bWVudCBjaGVjazogamF2YXNjcmlwdDogVVJJJ3MgYXJl
IGRpc2FibGVkCisgICAgLy8gaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgdW5sZXNzICdhbGxvdy1z
Y3JpcHRzJyB3YXMgc3BlY2lmaWVkLgorICAgIG5zSURvY3VtZW50KiBkb2MgPSBhT3JpZ2luYWxJ
bm5lcldpbmRvdy0+R2V0RXh0YW50RG9jKCk7CisgICAgaWYgKGRvYyAmJiAoZG9jLT5TYW5kYm94
RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSkgeworICAgICAgcmV0dXJuIE5TX0VSUk9SX0RP
TV9SRVRWQUxfVU5ERUZJTkVEOworICAgIH0KKwogICAgIC8vIFB1c2ggb3VyIHBvcHVwIGNvbnRy
b2wgc3RhdGUKICAgICBuc0F1dG9Qb3B1cFN0YXRlUHVzaGVyIHBvcHVwU3RhdGVQdXNoZXIod2lu
LCBhUG9wdXBTdGF0ZSk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2Ugc3RpbGwgaGF2ZSB0aGUgc2Ft
ZSBpbm5lciB3aW5kb3cgYXMgd2UgdXNlZCB0by4KICAgICBuc1BJRE9NV2luZG93ICppbm5lcldp
biA9IHdpbi0+R2V0Q3VycmVudElubmVyV2luZG93KCk7CiAKICAgICBpZiAoaW5uZXJXaW4gIT0g
YU9yaWdpbmFsSW5uZXJXaW5kb3cpIHsKICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX1VORVhQRUNU
RUQ7CmRpZmYgLS1naXQgYS9lZGl0b3IvY29tcG9zZXIvc3JjL25zQ29tcG9zZXJEb2N1bWVudENv
bW1hbmRzLmNwcCBiL2VkaXRvci9jb21wb3Nlci9zcmMvbnNDb21wb3NlckRvY3VtZW50Q29tbWFu
ZHMuY3BwCi0tLSBhL2VkaXRvci9jb21wb3Nlci9zcmMvbnNDb21wb3NlckRvY3VtZW50Q29tbWFu
ZHMuY3BwCisrKyBiL2VkaXRvci9jb21wb3Nlci9zcmMvbnNDb21wb3NlckRvY3VtZW50Q29tbWFu
ZHMuY3BwCkBAIC0xMywxNiArMTMsMTcgQEAKIAogI2luY2x1ZGUgIm5zSURPTURvY3VtZW50Lmgi
CiAjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKICNpbmNsdWRlICJuc0lTZWxlY3Rpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAibnNJUHJlc1NoZWxsLmgiCiAjaW5jbHVkZSAibnNQcmVzQ29udGV4
dC5oIgogI2luY2x1ZGUgIm5zSURvY1NoZWxsLmgiCiAjaW5jbHVkZSAibnNJVVJJLmgiCisjaW5j
bHVkZSAibnNJQ29udGVudFZpZXdlci5oIgogCiAjaW5jbHVkZSAibnNDT01QdHIuaCIKIAogI2lu
Y2x1ZGUgIm5zQ29tcG9zZXJDb21tYW5kcy5oIgogI2luY2x1ZGUgIm5zSUNvbW1hbmRQYXJhbXMu
aCIKICNpbmNsdWRlICJuc0NSVC5oIgogCiAvL2RlZmluZXMKQEAgLTE1NSwxNyArMTU2LDI1IEBA
IG5zU2V0RG9jdW1lbnRPcHRpb25zQ29tbWFuZDo6R2V0Q29tbWFuZFMKICAgewogICAgIG5zQ09N
UHRyPG5zSVN1cHBvcnRzPiBjb250YWluZXIgPSBwcmVzQ29udGV4dC0+R2V0Q29udGFpbmVyKCk7
CiAgICAgTlNfRU5TVVJFX1RSVUUoY29udGFpbmVyLCBOU19FUlJPUl9GQUlMVVJFKTsKIAogICAg
IG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbChkb19RdWVyeUludGVyZmFjZShjb250YWlu
ZXIsICZydikpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgICAgTlNfRU5TVVJF
X1RSVUUoZG9jU2hlbGwsIE5TX0VSUk9SX0ZBSUxVUkUpOwogCi0gICAgcnYgPSBkb2NTaGVsbC0+
R2V0QWxsb3dQbHVnaW5zKCZhbGxvd1BsdWdpbnMpOworICAgIG5zQ09NUHRyPG5zSUNvbnRlbnRW
aWV3ZXI+IGN2OworICAgIGRvY1NoZWxsLT5HZXRDb250ZW50Vmlld2VyKGdldHRlcl9BZGRSZWZz
KGN2KSk7CisgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKyAgICBOU19FTlNVUkVfVFJV
RShjdiwgTlNfRVJST1JfRkFJTFVSRSk7CisKKyAgICBuc0lEb2N1bWVudCAqIGRvYyA9IGN2LT5H
ZXREb2N1bWVudCgpOworICAgIE5TX0VOU1VSRV9UUlVFKGRvYywgTlNfRVJST1JfRkFJTFVSRSk7
CisKKyAgICBydiA9IGRvYy0+R2V0QWxsb3dQbHVnaW5zKCZhbGxvd1BsdWdpbnMpOwogICAgIE5T
X0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgICBydiA9IGFQYXJhbXMtPlNldEJvb2xlYW5W
YWx1ZSgicGx1Z2lucyIsIGFsbG93UGx1Z2lucyk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYs
IHJ2KTsKICAgfQogCiAgIHJldHVybiBOU19PSzsKIH0KZGlmZiAtLWdpdCBhL2VkaXRvci9jb21w
b3Nlci9zcmMvbnNFZGl0aW5nU2Vzc2lvbi5jcHAgYi9lZGl0b3IvY29tcG9zZXIvc3JjL25zRWRp
dGluZ1Nlc3Npb24uY3BwCi0tLSBhL2VkaXRvci9jb21wb3Nlci9zcmMvbnNFZGl0aW5nU2Vzc2lv
bi5jcHAKKysrIGIvZWRpdG9yL2NvbXBvc2VyL3NyYy9uc0VkaXRpbmdTZXNzaW9uLmNwcApAQCAt
MTg4LDE3ICsxODgsMjUgQEAgbnNFZGl0aW5nU2Vzc2lvbjo6RGlzYWJsZUpTQW5kUGx1Z2lucyhu
cwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG1TY3JpcHRzRW5hYmxlZCA9IHRt
cDsKIAogICBydiA9IGRvY1NoZWxsLT5TZXRBbGxvd0phdmFzY3JpcHQoZmFsc2UpOwogICBOU19F
TlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIC8vIERpc2FibGUgcGx1Z2lucyBpbiB0aGlzIGRv
Y3VtZW50OgotICBydiA9IGRvY1NoZWxsLT5HZXRBbGxvd1BsdWdpbnMoJnRtcCk7CisgIG5zQ09N
UHRyPG5zSUNvbnRlbnRWaWV3ZXI+IGN2OworICBkb2NTaGVsbC0+R2V0Q29udGVudFZpZXdlcihn
ZXR0ZXJfQWRkUmVmcyhjdikpOworICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworICBOU19F
TlNVUkVfVFJVRShjdiwgTlNfRVJST1JfRkFJTFVSRSk7CisKKyAgbnNJRG9jdW1lbnQgKiBkb2Mg
PSBjdi0+R2V0RG9jdW1lbnQoKTsKKyAgTlNfRU5TVVJFX1RSVUUoZG9jLCBOU19FUlJPUl9GQUlM
VVJFKTsKKworICBydiA9IGRvYy0+R2V0QWxsb3dQbHVnaW5zKCZ0bXApOwogICBOU19FTlNVUkVf
U1VDQ0VTUyhydiwgcnYpOwogCiAgIG1QbHVnaW5zRW5hYmxlZCA9IHRtcDsKIAogICBydiA9IGRv
Y1NoZWxsLT5TZXRBbGxvd1BsdWdpbnMoZmFsc2UpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwg
cnYpOwogCiAgIG1EaXNhYmxlZEpTQW5kUGx1Z2lucyA9IHRydWU7CmRpZmYgLS1naXQgYS9lbWJl
ZGRpbmcvYnJvd3Nlci93ZWJCcm93c2VyL25zV2ViQnJvd3NlckNvbnRlbnRQb2xpY3kuY3BwIGIv
ZW1iZWRkaW5nL2Jyb3dzZXIvd2ViQnJvd3Nlci9uc1dlYkJyb3dzZXJDb250ZW50UG9saWN5LmNw
cAotLS0gYS9lbWJlZGRpbmcvYnJvd3Nlci93ZWJCcm93c2VyL25zV2ViQnJvd3NlckNvbnRlbnRQ
b2xpY3kuY3BwCisrKyBiL2VtYmVkZGluZy9icm93c2VyL3dlYkJyb3dzZXIvbnNXZWJCcm93c2Vy
Q29udGVudFBvbGljeS5jcHAKQEAgLTQsMTYgKzQsMTcgQEAKICAqIFRoaXMgU291cmNlIENvZGUg
Rm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKICAqIExp
Y2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3
aXRoIHRoaXMKICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5v
cmcvTVBMLzIuMC8uICovCiAKICNpbmNsdWRlICJuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5Lmgi
CiAjaW5jbHVkZSAibnNJRG9jU2hlbGwuaCIKICNpbmNsdWRlICJuc0NPTVB0ci5oIgogI2luY2x1
ZGUgIm5zQ29udGVudFBvbGljeVV0aWxzLmgiCisjaW5jbHVkZSAibnNJQ29udGVudFZpZXdlci5o
IgogCiBuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5Ojpuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5
KCkKIHsKICAgICBNT1pfQ09VTlRfQ1RPUihuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5KTsKIH0K
IAogbnNXZWJCcm93c2VyQ29udGVudFBvbGljeTo6fm5zV2ViQnJvd3NlckNvbnRlbnRQb2xpY3ko
KQogewpAQCAtMzMsMjAgKzM0LDI5IEBAIFBlcmZvcm1Qb2xpY3lDaGVjayhQUlVpbnQzMiAgICAg
Y29udGVudFQKIAogICAgIG5zSURvY1NoZWxsICpzaGVsbCA9IE5TX0NQX0dldERvY1NoZWxsRnJv
bUNvbnRleHQocmVxdWVzdGluZ0NvbnRleHQpOwogICAgIC8qIFdlJ3JlIGdvaW5nIHRvIGRlcmVm
ZXJlbmNlIHNoZWxsLCBzbyBtYWtlIHN1cmUgaXQgaXNuJ3QgbnVsbCAqLwogICAgIGlmICghc2hl
bGwpCiAgICAgICAgIHJldHVybiBOU19PSzsKIAogICAgIG5zcmVzdWx0IHJ2OwogICAgIGJvb2wg
YWxsb3dlZCA9IHRydWU7CisgICAgbnNDT01QdHI8bnNJQ29udGVudFZpZXdlcj4gY3Y7CiAKICAg
ICBzd2l0Y2ggKGNvbnRlbnRUeXBlKSB7CiAgICAgICBjYXNlIG5zSUNvbnRlbnRQb2xpY3k6OlRZ
UEVfT0JKRUNUOgotICAgICAgICBydiA9IHNoZWxsLT5HZXRBbGxvd1BsdWdpbnMoJmFsbG93ZWQp
OworICAgICAgICBydiA9IHNoZWxsLT5HZXRDb250ZW50Vmlld2VyKGdldHRlcl9BZGRSZWZzKGN2
KSk7CisKKyAgICAgICAgaWYgKGN2KSB7CisgICAgICAgICAgbnNJRG9jdW1lbnQgKiBkb2MgPSBj
di0+R2V0RG9jdW1lbnQoKTsKKworICAgICAgICAgIGlmIChkb2MpIHsgCisgICAgICAgICAgICBy
diA9IGRvYy0+R2V0QWxsb3dQbHVnaW5zKCZhbGxvd2VkKTsKKyAgICAgICAgICB9CisgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIG5zSUNvbnRlbnRQb2xpY3k6OlRZUEVfU0NS
SVBUOgogICAgICAgICBydiA9IHNoZWxsLT5HZXRBbGxvd0phdmFzY3JpcHQoJmFsbG93ZWQpOwog
ICAgICAgICBicmVhazsKICAgICAgIGNhc2UgbnNJQ29udGVudFBvbGljeTo6VFlQRV9TVUJET0NV
TUVOVDoKICAgICAgICAgcnYgPSBzaGVsbC0+R2V0QWxsb3dTdWJmcmFtZXMoJmFsbG93ZWQpOwog
ICAgICAgICBicmVhazsKICNpZiAwCmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93
aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbiBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRv
d3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRv
d3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRv
d3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCkBAIC0yNCwxMSArMjQsMTIgQEAgQ1BQU1JDUwkJKz0g
bnNEaWFsb2dQYXJhbUJsb2NrLmNwcCBcCiAJCSAgICQoTlVMTCkKIGVuZGlmCiAKICMgd2UgZG9u
J3Qgd2FudCB0aGUgc2hhcmVkIGxpYiwgYnV0IHdlIHdhbnQgdG8gZm9yY2UgdGhlIGNyZWF0aW9u
IG9mIGEKICMgc3RhdGljIGxpYi4KIEZPUkNFX1NUQVRJQ19MSUIgPSAxCiAKICMgRm9yIG5zSlNV
dGlscwotTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UKK0xPQ0FMX0lO
Q0xVREVTICs9IC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKKwkJICAtSSQodG9wc3JjZGlyKS9j
b250ZW50L2Jhc2Uvc3JjIFwKIAogaW5jbHVkZSAkKHRvcHNyY2RpcikvY29uZmlnL3J1bGVzLm1r
CmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dp
bmRvd1dhdGNoZXIuY3BwIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMv
bnNXaW5kb3dXYXRjaGVyLmNwcAotLS0gYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRj
aGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCisrKyBiL2VtYmVkZGluZy9jb21wb25lbnRzL3dp
bmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKQEAgLTUzLDE2ICs1MywxNyBAQAog
I2luY2x1ZGUgIm5zUElET01TdG9yYWdlLmgiCiAjaW5jbHVkZSAibnNJV2lkZ2V0LmgiCiAjaW5j
bHVkZSAibnNGb2N1c01hbmFnZXIuaCIKICNpbmNsdWRlICJuc0lQcmVzU2hlbGwuaCIKICNpbmNs
dWRlICJuc1ByZXNDb250ZXh0LmgiCiAjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKICNpbmNs
dWRlICJuc0lQcmVmQnJhbmNoLmgiCiAjaW5jbHVkZSAibnNJUHJlZlNlcnZpY2UuaCIKKyNpbmNs
dWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZkZWYgVVNFV0VBS1JFRlMKICNpbmNsdWRlICJu
c0lXZWFrUmVmZXJlbmNlLmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiAK
IHN0YXRpYyBjb25zdCBjaGFyICpzSlNTdGFja0NvbnRyYWN0SUQ9IkBtb3ppbGxhLm9yZy9qcy94
cGMvQ29udGV4dFN0YWNrOzEiOwpAQCAtNTcwLDE2ICs1NzEsMzMgQEAgbnNXaW5kb3dXYXRjaGVy
OjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAgaWYgKCFuZXdEb2NTaGVsbEl0ZW0p
IHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3BlbiB1cCBhIG5ldyB3aW5kb3cgb3Vy
c2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJvdmlkZXIgZm9yIG9uZS4gIEluIGVp
dGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmlnaHQKICAgICAvLyBuYW1lIG9uIGl0
LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAgICAvLyBJZiB0aGUgcGFyZW50IHRy
eWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94ZWQsCisgICAgLy8gdGhpcyBpcyBu
b3QgYWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlmIChhUGFyZW50KSB7CisgICAgICBu
c0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAgICAgYVBhcmVudC0+R2V0RG9jdW1l
bnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBuc0NPTVB0cjxuc0lEb2N1bWVudD4g
ZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKworICAgICAgaWYgKGRvYykgeworICAg
ICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICBzYW5kYm94RmxhZ3MgPSBk
b2MtPlNhbmRib3hGbGFncygpOworCisgICAgICAgIGlmIChzYW5kYm94RmxhZ3MgJiBTQU5EQk9Y
RURfTkFWSUdBVElPTikgeworICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAg
ICAgICB9CisgICAgICB9CisgICAgfQorCiAgICAgLy8gTm93IGNoZWNrIHdoZXRoZXIgaXQncyBv
ayB0byBhc2sgYSB3aW5kb3cgcHJvdmlkZXIgZm9yIGEgd2luZG93LiAgRG9uJ3QKICAgICAvLyBk
byBpdCBpZiB3ZSdyZSBvcGVuaW5nIGEgZGlhbG9nIG9yIGlmIG91ciBwYXJlbnQgaXMgYSBjaHJv
bWUgd2luZG93IG9yCiAgICAgLy8gaWYgd2UncmUgb3BlbmluZyBzb21ldGhpbmcgdGhhdCBoYXMg
bW9kYWwsIGRpYWxvZywgb3IgY2hyb21lIGZsYWdzIHNldC4KICAgICBuc0NPTVB0cjxuc0lET01D
aHJvbWVXaW5kb3c+IGNocm9tZVdpbiA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFQYXJlbnQpOwogICAg
IGlmICghYURpYWxvZyAmJiAhY2hyb21lV2luICYmCiAgICAgICAgICEoY2hyb21lRmxhZ3MgJiAo
bnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX01PREFMICAgICAgICAgfAogICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfRElBTE9HIHwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX09Q
RU5BU19DSFJPTUUpKSkgewo=
</data>
<flag name="review"
          id="532788"
          type_id="937"
          status="+"
          setter="smaug"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>643055</attachid>
            <date>2012-07-17 11:29:12 -0700</date>
            <delta_ts>2012-08-08 17:21:14 -0700</delta_ts>
            <desc>iframe sandbox tests - plugins v5</desc>
            <filename>iframe_sandbox_tests_plugins</filename>
            <type>text/plain</type>
            <size>9149</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYjM5YzRiYzEzNDQzNWYxMWQ1Mjc3MmY1ZTIy
NTUwM2Y0NDUxNjllZQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3ggdGVzdHMgLSBwbHVnaW5zCgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCkBAIC0yNjQsMTYgKzI2NCwyMCBA
QCBNT0NISVRFU1RfRklMRVMgPSBcCiAJCXRlc3RfYnVnNzQyNTQ5Lmh0bWwgXAogCQl0ZXN0X2J1
Zzc0NTY4NS5odG1sIFwKIAkJdGVzdF9pbnB1dF9maWxlX3BpY2tlci5odG1sIFwKIAkJdGVzdF9i
dWc3NjM2MjYuaHRtbCBcCiAJCXRlc3RfaWZyYW1lX3NhbmRib3hfc2FtZV9vcmlnaW4uaHRtbCBc
CiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjEuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfYl9pZjIuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjMuaHRtbCBcCisJCXRl
c3RfaWZyYW1lX3NhbmRib3hfcGx1Z2lucy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9m
X2lmMS5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5odG1sIFwKKwkJZmlsZV9p
ZnJhbWVfc2FuZGJveF9mX2lmMi5odG1sXmhlYWRlcnNeIFwKIAkJdGVzdF9pZnJhbWVfc2FuZGJv
eF93b3JrZXJzLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2dfaWYxLmh0bWwgXAogCQlm
aWxlX2lmcmFtZV9zYW5kYm94X3dvcmtlci5qcyBcCiAJCSQoTlVMTCkKIAogTU9DSElURVNUX0JS
T1dTRVJfRklMRVMgPSBcCiAJCWJyb3dzZXJfYnVnNjQ5Nzc4LmpzIFwKIAkJZmlsZV9idWc2NDk3
NzguaHRtbCBcCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZl9pZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9mX2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zf
aWYxLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhl
YWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8Ym9keT4NCitJ
IGhhdmUgMiBwbHVnaW4gaW5zdGFuY2VzIGVtYmVkZGVkIGluIG1lLg0KKzxlbWJlZCBpZD0icGx1
Z2luMSIgdHlwZT0iYXBwbGljYXRpb24veC10ZXN0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+
PC9lbWJlZD4NCis8b2JqZWN0IHR5cGU9ImFwcGxpY2F0aW9uL3gtdGVzdCIgd2lkdGg9IjIwMCIg
aGVpZ2h0PSIyMDAiPjwvb2JqZWN0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWwg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5odG1sCkBAIC0wLDAgKzEsMTEg
QEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPGJvZHk+DQorICBJIGFtIGEgZG9jdW1lbnQgdGhhdCBz
aG91bGQgYmUgaGFuZGxlZCBieSBhIHBsdWdpbiBsb2FkLg0KKzwvYm9keT4NCis8L2h0bWw+DQpk
aWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2ZfaWYyLmh0bWxeaGVhZGVyc14gYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZl9pZjIuaHRtbF5oZWFkZXJzXgpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0g
L2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9mX2lmMi5odG1sXmhlYWRlcnNeCkBAIC0wLDAgKzEsMSBAQAorQ29udGVudC1UeXBlOiBh
cHBsaWNhdGlvbi94LXRlc3QNCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L3Rlc3RfaWZyYW1lX3NhbmRib3hfcGx1Z2lucy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X3BsdWdpbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJh
bWVfc2FuZGJveF9wbHVnaW5zLmh0bWwKQEAgLTAsMCArMSwxMzcgQEAKKzwhRE9DVFlQRSBIVE1M
Pg0KKzxodG1sPg0KKzwhLS0NCitodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNDE2MDQNCitJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElG
UkFNRXMNCistLT4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0IC0gcGx1Z2luczwvdGl0bGU+DQorICA8c2NyaXB0IHR5cGU9
ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVz
dC5qcyI+PC9zY3JpcHQ+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3Nz
IiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0
IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KKy8qKiBUZXN0IGZvciBCdWcgMzQxNjA0
IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzICoqLw0KKy8q
KiBQbHVnaW4gdGVzdHMgKiovDQorU2ltcGxlVGVzdC53YWl0Rm9yRXhwbGljaXRGaW5pc2goKTsN
CisNCitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICAvLyAxKSB0ZXN0IHRoYXQgYSBwbHVnaW4gY2Fu
J3QgYmUgbG9hZGVkIHdpdGggPGVtYmVkPiBpbnNpZGUgYSBzYW5kYm94ZWQgPGlmcmFtZT4NCisg
IC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjEuaHRtbCBsb2FkZWQgaW4gaWYx
IGJlbG93KQ0KKyAgLy8gMikgdGVzdCB0aGF0IGEgcGx1Z2luIGNhbid0IGJlIGxvYWRlZCB3aXRo
IDxvYmplY3Q+IGluc2lkZSBhIHNhbmRib3hlZCA8aWZyYW1lPg0KKyAgLy8gKGRvbmUgYnkgZmls
ZV9pZnJhbWVfc2FuZGJveF9mX2lmMS5odG1sIGxvYWRlZCBpbiBpZjEgYmVsb3cpDQorICAvLyAz
KSB0ZXN0IHRoYXQgcGx1Z2luIGNhbid0IGJlIGxvYWRlZCBieSBhIHNhbmRib3hlZCA8aWZyYW1l
PiB3aXRoIHNyYyBwb2ludGluZyB0bw0KKyAgLy8gYSBkb2N1bWVudCB0aGF0IGlzIGhhbmRsZWQg
YnkgYSBwbHVnaW4gKGRvbmUgYnkgaWZfMiBiZWxvdykNCisgIC8vIDQpIHRlc3QgdGhhdCB3aGVu
IGEgcGx1Z2luIGlzIGxvYWRlZCBpbiBhbiB1bnNhbmRib3hlZCBpZnJhbWUsIGEgc2FuZGJveCBh
dHRyaWJ1dGUNCisgIC8vIGlzIHRoZW4gYWRkZWQgdG8gdGhlIGlmcmFtZSBhbmQgdGhlIGRvY3Vt
ZW50IGNvbnRhaW5pbmcgdGhlIHBsdWdpbiBpcyByZWxvYWRlZCwNCisgIC8vIHRoZSBwbHVnaW4g
ZG9lcyBub3QgbG9hZCBpbiB0aGUgc2FuZGJveGVkIGlmcmFtZSAoZG9uZSB3aXRoIGlmXzMgYmVs
b3cpDQorICAvLyA1KSB0ZXN0IHRoYXQgd2hlbiB3aGVuIGEgc2FuZGJveGVkIGlmcmFtZSdzIHNh
bmRib3ggYXR0cmlidXRlIGlzIHJlbW92ZWQsDQorICAvLyBhbmQgYSBuZXcgZG9jdW1lbnQgaXMg
bG9hZGVkIGludG8gdGhlIGlmcmFtZSwgdGhlIHBsdWdpbiBsb2Fkcw0KKyAgLy8gKGRvbmUgd2l0
aCBpZl80IGJlbG93KQ0KKw0KKyAgLy8gdGhlc2UgYXJlIGFsbCBoYW5kbGVkIGJ5IGNoZWNraW5n
IGhvdyBtYW55IGluc3RhbmNlcyBvZiB0aGUgdGVzdCBwbHVnaW4gYXJlIGxvYWRlZA0KKyAgLy8g
d2hlbiB0aGlzIHNjcmlwdCBydW5zIGFzIHRoZSBvbmxvYWQgaGFuZGxlciAtIHRoZXJlIHNob3Vs
ZCBiZSB0d28gaW5zdGFuY2VzLA0KKyAgLy8gaW5pdGlhbGx5IHRoZSBvbmUgbG9hZGVkIGRpcmVj
dGx5IGJ5IHRoaXMgcGFnZSBpdHNlbGYsIGFuZCB0aGUgb25lIGxvYWRlZCBkdXJpbmcNCisgIC8v
IHRlc3QgIzQgYWJvdmUuDQorICB2YXIgcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbHVn
aW4xJyk7DQorICB2YXIgaWZfMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl8xJyk7DQor
ICBwLnN0YXJ0V2F0Y2hpbmdJbnN0YW5jZUNvdW50KCk7DQorDQorICBpZl8xLnNyYyA9ICdmaWxl
X2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwnOw0KK30NCisNCitmdW5jdGlvbiBpZl8xX2xvYWQo
KSB7DQorICB2YXIgaWZfMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl8xJyk7DQorDQor
ICBpZiAoaWZfMS5zcmMgPT0gImFib3V0OmJsYW5rIikNCisgICAgcmV0dXJuOw0KKw0KKyAgLy8g
bmVlZCB0byB3YWl0IGZvciBwbHVnaW4gdG8gbG9hZCwgaWYgdGhlIHRlc3QgZmFpbHMuLi4NCisg
IFNpbXBsZVRlc3QuZXhlY3V0ZVNvb24oaWZfMV9jb250aW51ZSk7DQorfQ0KKw0KK2Z1bmN0aW9u
IGlmXzFfY29udGludWUoKSB7DQorICAvLyBpbnN0YW5jZSBjb3VudCBzaG91bGQgYmUgMCAodGVz
dHMgIzEgYW5kICMyIGFib3ZlKQ0KKyAgdmFyIHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
cGx1Z2luMScpOw0KKyAgaXMocC5nZXRJbnN0YW5jZUNvdW50KCksIDAsICJwbHVnaW5zIHNob3Vs
ZCBub3QgYmUgbG9hZGVkIHZpYSA8b2JqZWN0PiBvciA8ZW1iZWQ+IGJ5IGEgc2FuZGJveGVkIGlm
cmFtZSIpOw0KKw0KKyAgdmFyIGlmXzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMicp
Ow0KKyAgaWZfMi5zcmMgPSAnZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5odG1sJzsNCisNCisg
IFNpbXBsZVRlc3QuZXhlY3V0ZVNvb24oaWZfMl9jb250aW51ZSk7DQorfQ0KKw0KK2Z1bmN0aW9u
IGlmXzJfY29udGludWUoKSB7DQorICAvLyBpbnN0YW5jZSBjb3VudCBzaG91bGQgYmUgMCAodGVz
dCAjMyBhYm92ZSkNCisgIHZhciBwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsdWdpbjEn
KTsNCisNCisgIGlzKHAuZ2V0SW5zdGFuY2VDb3VudCgpLCAwLCAicGx1Z2lucyBzaG91bGQgbm90
IGJlIGxvYWRlZCB2aWEgYSBkb2N1bWVudCBvZiBhIHR5cGUgdGhhdCByZXF1aXJlcyBhIHBsdWdp
biBlbWJlZGRlZCBpbiBhIHNhbmRib3hlZCBpZnJhbWUiKTsNCisNCisgIFNpbXBsZVRlc3QuZXhl
Y3V0ZVNvb24oaWZfM190ZXN0KTsNCit9DQorDQorZnVuY3Rpb24gaWZfM190ZXN0KCkgew0KKyAg
dmFyIGlmXzMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMycpOw0KKyAgLy8gYWRkIHNh
bmRib3ggYXR0cmlidXRlDQorICBpZl8zLnNhbmRib3ggPSAnJzsNCisgIGlmXzMuc3JjID0gJ2Zp
bGVfaWZyYW1lX3NhbmRib3hfZl9pZjEuaHRtbCc7DQorfQ0KKw0KK2Z1bmN0aW9uIGlmXzNfbG9h
ZCgpIHsNCisgIGlmIChpZl8zLnNyYyA9PSAiYWJvdXQ6YmxhbmsiKQ0KKyAgICByZXR1cm47DQor
DQorICBTaW1wbGVUZXN0LmV4ZWN1dGVTb29uKGlmXzNfY29udGludWUpOw0KK30NCisNCitmdW5j
dGlvbiBpZl8zX2NvbnRpbnVlKCkgew0KKyAgdmFyIHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgncGx1Z2luMScpOw0KKyAgaXMocC5nZXRJbnN0YW5jZUNvdW50KCksIDAsICJwbHVnaW5zIHNo
b3VsZCBub3QgYmUgbG9hZGVkIHdoZW4gYSBzYW5kYm94IGF0dHJpYnV0ZSBpcyBhZGRlZCIgKw0K
KyAgICAgInRvIGFuIGlmcmFtZSBhbmQgYSBkb2N1bWVudCBjb250YWluaW5nIGEgcGx1Z2luIGlz
IHRoZW4gbG9hZGVkIGludG8gdGhlIGlmcmFtZSIpOw0KKw0KKyAgU2ltcGxlVGVzdC5leGVjdXRl
U29vbihpZl80X3Rlc3QpOw0KK30NCisNCitmdW5jdGlvbiBpZl80X3Rlc3QoKSB7DQorICB2YXIg
aWZfNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl80Jyk7DQorICAvLyByZW1vdmUgc2Fu
ZGJveCBhdHRyaWJ1dGUNCisgIGlmXzQucmVtb3ZlQXR0cmlidXRlKCdzYW5kYm94Jyk7DQorICBp
Zl80LnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwnOw0KK30NCisNCitmdW5j
dGlvbiBpZl80X2xvYWQoKSB7DQorICBpZiAoaWZfNC5zcmMgPT0gImFib3V0OmJsYW5rIikNCisg
ICAgcmV0dXJuOw0KKw0KKyAgU2ltcGxlVGVzdC5leGVjdXRlU29vbihpZl80X2NvbnRpbnVlKTsN
Cit9DQorDQorZnVuY3Rpb24gaWZfNF9jb250aW51ZSgpIHsNCisgIHZhciBwID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3BsdWdpbjEnKTsNCisgIC8vIHRoZXJlIGFyZSAyIHBsdWdpbiBpbnN0
YW5jZXMgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9pZjEuaHRtbCBsb2FkZWQgYnkNCisgIC8vIGlm
XzEsIHRoZXkgc2hvdWxkIHN1Y2Nlc3NmdWxseSBsb2FkLg0KKyAgaXMocC5nZXRJbnN0YW5jZUNv
dW50KCksIDIsICJwbHVnaW5zIHNob3VsZCBiZSBsb2FkZWQgd2hlbiBhIHNhbmRib3ggYXR0cmli
dXRlIGlzIHJlbW92ZWQgIiArDQorICAgICAiZnJvbSBhbiBpZnJhbWUgYW5kIGEgZG9jdW1lbnQg
Y29udGFpbmluZyBhIHBsdWdpbiBpcyB0aGVuIGxvYWRlZCBpbnRvIHRoZSBpZnJhbWUiKTsNCisN
CisgIHAuc3RvcFdhdGNoaW5nSW5zdGFuY2VDb3VudCgpOw0KKyAgU2ltcGxlVGVzdC5leGVjdXRl
U29vbihmaW5pc2hfdGVzdCk7DQorfQ0KKw0KK2Z1bmN0aW9uIGZpbmlzaF90ZXN0KCkgew0KKyAg
U2ltcGxlVGVzdC5maW5pc2goKTsNCit9DQorDQorYWRkTG9hZEV2ZW50KGRvVGVzdCk7DQorPC9z
Y3JpcHQ+DQorPGJvZHk+DQorPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vYnVnemls
bGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNCI+TW96aWxsYSBCdWcgMzQxNjA0
PC9hPiAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1Fcw0KKzxw
IGlkPSJkaXNwbGF5Ij48L3A+DQorPGRpdiBpZD0iY29udGVudCI+DQorPGVtYmVkIGlkPSJwbHVn
aW4xIiB0eXBlPSJhcHBsaWNhdGlvbi94LXRlc3QiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48
L2VtYmVkPg0KKzxpZnJhbWUgaWQ9ImlmXzEiIHNhbmRib3g9J2FsbG93LXNhbWUtb3JpZ2luJyBv
bkxvYWQ9J2lmXzFfbG9hZCgpJyBzcmM9ImFib3V0OmJsYW5rIiBoZWlnaHQ9IjQwMCIgd2lkdGg9
IjQwMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBpZD0iaWZfMiIgc2FuZGJveD0nYWxsb3ctc2FtZS1v
cmlnaW4nIHNyYz0iYWJvdXQ6YmxhbmsiIGhlaWdodD0iNDAwIiB3aWR0aD0iNDAwIj48L2lmcmFt
ZT4NCis8aWZyYW1lIGlkPSJpZl8zIiBzcmM9ImFib3V0OmJsYW5rIiBvbmxvYWQ9J2lmXzNfbG9h
ZCgpJyBoZWlnaHQ9IjQwMCIgd2lkdGg9IjQwMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBpZD0iaWZf
NCIgc2FuZGJveD0nYWxsb3ctc2FtZS1vcmlnaW4nIG9ubG9hZD0naWZfNF9sb2FkKCknIHNyYz0i
YWJvdXQ6YmxhbmsiIGhlaWdodD0iNDAwIiB3aWR0aD0iNDAwIj48L2lmcmFtZT4NCis8L2Rpdj4N
Cis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvbW9jaGl0ZXN0L2FuZHJv
aWQuanNvbiBiL3Rlc3RpbmcvbW9jaGl0ZXN0L2FuZHJvaWQuanNvbgotLS0gYS90ZXN0aW5nL21v
Y2hpdGVzdC9hbmRyb2lkLmpzb24KKysrIGIvdGVzdGluZy9tb2NoaXRlc3QvYW5kcm9pZC5qc29u
CkBAIC03NiwxNiArNzYsMTcgQEAKICAiY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2J1
ZzQ4MTMzNS54aHRtbCI6ICJUSU1FRF9PVVQiLAogICJjb250ZW50L2h0bWwvY29udGVudC90ZXN0
L3Rlc3RfYnVnNTE0ODU2Lmh0bWwiOiAiIiwKICAiY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90
ZXN0X2J1ZzU1NzA4Ny0yLmh0bWwiOiAiVElNRURfT1VUIiwKICAiY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC90ZXN0X2J1ZzYxMjczMC5odG1sIjogIiIsCiAgImNvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvdGVzdF9idWc2MTU4MzMuaHRtbCI6ICJUSU1FRF9PVVQiLAogICJjb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L3Rlc3RfZm9ybVN1Ym1pc3Npb24uaHRtbCI6ICJUSU1FRF9PVVQiLAogICJj
b250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfZm9ybVN1Ym1pc3Npb24yLmh0bWwiOiAiIiwK
ICAiY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2Z1bGxzY3JlZW4tYXBpLmh0bWwiOiAi
VElNRURfT1VUIiwKKyAiY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5k
Ym94X3BsdWdpbnMuaHRtbCI6ICIiLAogICJjb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3Rf
b2JqZWN0X3BsdWdpbl9uYXYuaHRtbCI6ICJUSU1FRF9PVVQiLAogICJjb250ZW50L2h0bWwvZG9j
dW1lbnQvdGVzdC90ZXN0X2J1ZzM2OTM3MC5odG1sIjogIiIsCiAgImNvbnRlbnQvaHRtbC9kb2N1
bWVudC90ZXN0L3Rlc3RfYnVnMzkxNzc3Lmh0bWwiOiAiIiwKICAiY29udGVudC9odG1sL2RvY3Vt
ZW50L3Rlc3QvdGVzdF9idWc0NDUwMDQuaHRtbCI6ICIiLAogICJjb250ZW50L2h0bWwvZG9jdW1l
bnQvdGVzdC90ZXN0X2J1ZzQ0NjQ4My5odG1sIjogIiIsCiAgImNvbnRlbnQvaHRtbC9kb2N1bWVu
dC90ZXN0L3Rlc3RfYnVnNzQxMjY2Lmh0bWwiOiAiIiwKICAiY29udGVudC9tZWRpYS90ZXN0L3Rl
c3RfYXV0b3BsYXlfY29udGVudEVkaXRhYmxlLmh0bWwiOiAiIiwKICAiY29udGVudC9tZWRpYS90
ZXN0L3Rlc3RfYnVmZmVyZWQuaHRtbCI6ICIiLAo=
</data>
<flag name="review"
          id="533716"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>643557</attachid>
            <date>2012-07-18 13:29:04 -0700</date>
            <delta_ts>2012-07-26 13:33:11 -0700</delta_ts>
            <desc>iframe sandbox v22</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>61307</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYmE4NDYzYmVhYjEzMmMyYzZiZTlhNTc2ZDdk
MjVkMDk0NjcxODQ0YQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgx
MiwxNiArODEyLDI2IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYgYVNhbmRi
b3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVu
KSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAgICogcHJvcGVydGllcyBm
aWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5zcmVzdWx0IEZvcm1hdExv
Y2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQYXJhbXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVBhcmFtc0xlbmd0aCwK
QEAgLTE5NDQsNDIgKzE5NTQsNDQgQEAgcHVibGljOgogICAgKiBmcm9tIHRoZSBkb2N1bWVudCBp
dCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAKICAgLyoqCiAgICAqIFNl
dCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUgZ2l2ZW4gY2hhbm5lbCwg
aWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2YgYUNoYW5uZWwuICBhUHJp
bmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJvdXRCbGFuayBpcyB0cnVl
LCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBpdC4gSWYgYUZvcmNlT3du
ZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9uIHRoZSBjaGFubmVsLCBl
dmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAgICogZnJvbSB0aGUgY2hh
bm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRoZSBwcmluY2lwYWwgd2Fz
IHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwuCiAgICAqLwogICBzdGF0
aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIgPSBmYWxzZSk7CiAK
ICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNlNjRTdHJpbmcpOwogCiAg
IHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFzY2lpU3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhKTsKIAogICAvKiogSWYg
YUpTQXJyYXkgaXMgYSBKYXZhc2NyaXB0IGFycmF5LCB0aGlzIG1ldGhvZCBpdGVyYXRlcyBvdmVy
IGl0cwogICAgKiAgZWxlbWVudHMgYW5kIGFwcGVuZHMgdmFsdWVzIHRvIGFSZXRWYWwgYXMgbnNJ
QXRvbXMuCiAgICAqICBAdGhyb3cgTlNfRVJST1JfSUxMRUdBTF9WQUxVRSBpZiBhSlNBcnJheSBp
c24ndCBhIEpTIGFycmF5LgogICAgKi8gCiAgIHN0YXRpYyBuc3Jlc3VsdCBKU0FycmF5VG9BdG9t
QXJyYXkoSlNDb250ZXh0KiBhQ3gsIGNvbnN0IEpTOjpWYWx1ZSYgYUpTQXJyYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01BcnJheTxuc0lBdG9tPiYgYVJldFZh
bCk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBwYXNz
ZWQgaW4gcGFyYW1ldGVyIGhhcyB0aGUgYXV0b2NvbXBsZXRlCi0gICAqIGZ1bmN0aW9ubmFsaXR5
IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIuCisgICAq
IGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9y
bSBvd25lci4KICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFrZSBzdXJlIGF1dG9jb21w
bGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0eXBlLgogICAgKgogICAg
KiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNrLiBOT1RFOiBhSW5wdXQg
Y2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IGhh
cyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBib29sIElzQXV0b2NvbXBs
ZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQpOwogCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGlj
L25zSURvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisr
KyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaApAQCAtMjcsMTYgKzI3LDE3IEBA
CiAjaW5jbHVkZSAibnNQSURPTVdpbmRvdy5oIgogI2luY2x1ZGUgIm5zU01JTEFuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJuc0lTY3JpcHRHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJuc0lEb2N1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJuc0lGcmFtZVJlcXVlc3RDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIm5zRXZlbnRTdGF0ZXMuaCIKICNpbmNsdWRlICJuc0lTdHJ1Y3R1cmVk
Q2xvbmVDb250YWluZXIuaCIKICNpbmNsdWRlICJuc0lMb2FkQ29udGV4dC5oIgorI2luY2x1ZGUg
Im5zSURvY1NoZWxsLmgiCiAKIGNsYXNzIG5zSVJlcXVlc3Q7CiBjbGFzcyBuc1BJRE9NV2luZG93
OwogY2xhc3MgbnNJU3RyZWFtTGlzdGVuZXI7CiBjbGFzcyBuc0lCRkNhY2hlRW50cnk7CiBjbGFz
cyBuc0lDb250ZW50OwogY2xhc3MgbnNQcmVzQ29udGV4dDsKIGNsYXNzIG5zSVByZXNTaGVsbDsK
QEAgLTg4LDE4ICs4OSwxOCBAQCBjbGFzcyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xh
c3MgTGluazsKIGNsYXNzIEVsZW1lbnQ7CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNw
YWNlIG1vemlsbGEKIAogI2RlZmluZSBOU19JRE9DVU1FTlRfSUlEIFwKLXsgMHg4YzZhMWU2Miwg
MHhkNWFkLCAweDQyOTcsIFwKLSAgeyAweGI5LCAweDQxLCAweDY0LCAweDQ5LCAweDIyLCAweDJl
LCAweGM0LCAweGYwIH0gfQoreyAweDU3ZmU0NGFlLCAweDY2NTYsIDB4NDRiOCwgXAorICB7IDB4
OGQsIDB4YzAsIDB4ZmMsIDB4YTcsIDB4NDMsIDB4MjgsIDB4YmUsIDB4ODYgfSB9CiAKIC8vIEZs
YWcgZm9yIEFkZFN0eWxlU2hlZXQoKS4KICNkZWZpbmUgTlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFM
T0cgICAgICAgICAgICAgICAgKDEgPDwgMCkKIAogLy8gRW51bSBmb3IgcmVxdWVzdGluZyBhIHBh
cnRpY3VsYXIgdHlwZSBvZiBkb2N1bWVudCB3aGVuIGNyZWF0aW5nIGEgZG9jCiBlbnVtIERvY3Vt
ZW50Rmxhdm9yIHsKICAgRG9jdW1lbnRGbGF2b3JMZWdhY3lHdWVzcywgLy8gY29tcGF0IHdpdGgg
b2xkIGNvZGUgdW50aWwgbWFkZSBIVE1MNS1jb21wbGlhbnQKICAgRG9jdW1lbnRGbGF2b3JIVE1M
LCAvLyBIVE1MRG9jdW1lbnQgd2l0aCBIVE1MbmVzcyBiaXQgc2V0IHRvIHRydWUKQEAgLTQyNywx
NyArNDI4LDI2IEBAIHB1YmxpYzoKICAgICogY2FsbGVycyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBh
Y3Rpb24gYXMgbmVlZGVkIGlmIHRoZXkgd2FudCB0aGlzCiAgICAqIGNoYW5nZSB0byBhY3R1YWxs
eSBjaGFuZ2UgYW55dGhpbmcgaW1tZWRpYXRlbHkuCiAgICAqIEBzZWUgbnNCaWRpVXRpbHMuaAog
ICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9ucyhQUlVpbnQzMiBhQmlkaU9wdGlvbnMpCiAgIHsK
ICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9wdGlvbnM7CiAgIH0KLSAgCisKKyAgLyoqCisgICAq
IEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4KKyAgICogQHNlZSBuc1Nh
bmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIFNh
bmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAgfQor
CiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxzbyBnZXQg
c2V0IGZyb20gb3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncykuCiAgICAq
LwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmllbGQsIG5z
QVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRlckRhdGEo
bnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7CiAKICAg
LyoqCkBAIC00ODAsMTYgKzQ5MCwyMSBAQCBwdWJsaWM6CiAKICAgLyoqCiAgICAqIFNldCB0aGUg
cGFyZW50IGRvY3VtZW50IG9mIHRoaXMgZG9jdW1lbnQuCiAgICAqLwogICB2b2lkIFNldFBhcmVu
dERvY3VtZW50KG5zSURvY3VtZW50KiBhUGFyZW50KQogICB7CiAgICAgbVBhcmVudERvY3VtZW50
ID0gYVBhcmVudDsKICAgfQorICAKKyAgLyoqCisgICAqIEFyZSBwbHVnaW5zIGFsbG93ZWQgaW4g
dGhpcyBkb2N1bWVudCA/CisgICAqLworICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsbG93UGx1Z2lu
cyAoYm9vbCogYUFsbG93UGx1Z2lucykgPSAwOwogCiAgIC8qKgogICAgKiBTZXQgdGhlIHN1YiBk
b2N1bWVudCBmb3IgYUNvbnRlbnQgdG8gYVN1YkRvYy4KICAgICovCiAgIHZpcnR1YWwgbnNyZXN1
bHQgU2V0U3ViRG9jdW1lbnRGb3IoRWxlbWVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRG9jdW1lbnQqIGFTdWJEb2MpID0gMDsKIAogICAvKioK
QEAgLTE4NjEsMTYgKzE4NzYsMjEgQEAgcHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1
bWVudCBpcyB0cnVlLCBtT3JpZ2luYWxEb2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAg
IC8vIGRvY3VtZW50LgogICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7
CiAKICAgLy8gVGhlIGJpZGkgb3B0aW9ucyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBi
aXRmaWVsZCBtZWFucyBpcwogICAvLyBkZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50
MzIgbUJpZGlPcHRpb25zOwogCisgIC8vIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVu
dC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRo
ZQorICAvLyBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYg
ZXhpc3RlbnQuIFRoZXNlIGFyZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRh
YmxlIC0gc2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgUFJV
aW50MzIgbVNhbmRib3hGbGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHBy
aXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhl
IGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3Vy
aXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5j
cHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jh
c2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVu
dFV0aWxzLmNwcApAQCAtMTU1LDE2ICsxNTUsMTcgQEAgc3RhdGljIE5TX0RFRklORV9DSUQoa1hU
RlNlcnZpY2VDSUQsIE5TXwogI2luY2x1ZGUgIm5zSUNoYXJzZXREZXRlY3Rvci5oIgogI2luY2x1
ZGUgIm5zSUNoYXJzZXREZXRlY3Rpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIm5zSVBsYXRmb3Jt
Q2hhcnNldC5oIgogI2luY2x1ZGUgIm5zSUVkaXRvci5oIgogI2luY2x1ZGUgIm5zSUVkaXRvckRv
Y1NoZWxsLmgiCiAjaW5jbHVkZSAibW96aWxsYS9BdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAibnNJ
UGFyc2VyU2VydmljZS5oIgogI2luY2x1ZGUgIm5zSURPTVNjcmlwdE9iamVjdEZhY3RvcnkuaCIK
KyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNXcmFwcGVyQ2FjaGVJ
bmxpbmVzLmgiCiAKIGV4dGVybiAiQyIgaW50IE1PWl9YTUxUcmFuc2xhdGVFbnRpdHkoY29uc3Qg
Y2hhciogcHRyLCBjb25zdCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqKiBuZXh0LCBQUlVuaWNoYXIqIHJlc3VsdCk7CiBleHRlcm4g
IkMiIGludCBNT1pfWE1MQ2hlY2tRTmFtZShjb25zdCBjaGFyKiBwdHIsIGNvbnN0IGNoYXIqIGVu
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuc19hd2FyZSwgY29uc3Qg
Y2hhcioqIGNvbG9uKTsKIApAQCAtODgyLDE2ICs4ODMsNjIgQEAgbnNDb250ZW50VXRpbHM6Okdl
dFBhcnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1BhcnNl
clNlcnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsK
ICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVybiBz
UGFyc2VyU2VydmljZTsKIH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMg
YSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVjdGl2
ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5Lgor
ICoKKyAqIEBwYXJhbSBhQXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRy
aWJ1dGUKKyAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLworUFJV
aW50MzIKK25zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0
IG5zQVN0cmluZyYgYVNhbmRib3hBdHRyVmFsdWUpCit7CisgIC8vIElmIHRoZXJlJ3MgYSBzYW5k
Ym94IGF0dHJpYnV0ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBpZiB0aGlzIGlzIGJlaW5nCisgIC8v
IGNhbGxlZCksIHN0YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0aGUgcmVzdHJpY3Rpb24gZmxhZ3Mu
CisgIFBSVWludDMyIG91dCA9IFNBTkRCT1hFRF9OQVZJR0FUSU9OIHwKKyAgICAgICAgICAgICAg
ICAgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gfAorICAgICAgICAgICAgICAgICBTQU5E
Qk9YRURfUExVR0lOUyB8CisgICAgICAgICAgICAgICAgIFNBTkRCT1hFRF9PUklHSU4gfAorICAg
ICAgICAgICAgICAgICBTQU5EQk9YRURfRk9STVMgfAorICAgICAgICAgICAgICAgICBTQU5EQk9Y
RURfU0NSSVBUUyB8CisgICAgICAgICAgICAgICAgIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVS
RVM7CisKKyAgaWYgKCFhU2FuZGJveEF0dHJWYWx1ZS5Jc0VtcHR5KCkpIHsKKyAgICAvLyBUaGUg
c2VwYXJhdG9yIG9wdGlvbmFsIGZsYWcgaXMgdXNlZCBiZWNhdXNlIHRoZSBIVE1MNSBzcGVjIHNh
eXMgYW55CisgICAgLy8gd2hpdGVzcGFjZSBpcyBvayBhcyBhIHNlcGFyYXRvciwgd2hpY2ggaXMg
d2hhdCB0aGlzIGRvZXMuCisgICAgSFRNTFNwbGl0T25TcGFjZXNUb2tlbml6ZXIgdG9rZW5pemVy
KGFTYW5kYm94QXR0clZhbHVlLCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXJU
ZW1wbGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9PUFRJ
T05BTCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAgICAg
bnNEZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKyAg
ICAgIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zYW1lLW9yaWdpbiIp
KSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX09SSUdJTjsKKyAgICAgIH0gZWxzZSBpZiAo
dG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9ybXMiKSkgeworICAgICAgICBv
dXQgJj0gflNBTkRCT1hFRF9GT1JNUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNl
RXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7CisgICAgICAgIC8vIGFsbG93LXNjcmlw
dHMgcmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRTIGFuZAorICAgICAgICAvLyBTQU5EQk9Y
RURfQVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9TQ1JJUFRT
OworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisgICAgICB9
IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXRvcC1uYXZpZ2F0
aW9uIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTjsK
KyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb3V0OworfQogCiAjaWZkZWYgTU9aX1hU
RgogbnNJWFRGU2VydmljZSoKIG5zQ29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAg
aWYgKCFzWFRGU2VydmljZSkgewogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hU
RlNlcnZpY2VDSUQsICZzWFRGU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKQEAg
LTY1NzksMTcgKzY2MjYsMTggQEAgbnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJpdHlD
b250ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8gc3Rh
dGljCiBib29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFs
KiBhTG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lDaGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lVUkkqIGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0
VXBGb3JBYm91dEJsYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YVNldFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFGb3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBjaGFu
bmVsLCBidXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRoZWly
IG93biBzZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25nIHRo
YXQgdGhlIG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1cHBs
aWVkKSB1bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6Ymxhbmsu
CiAgIC8vIFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJzIGZv
ciB3aGF0IG93bmVycwpAQCAtNjU5NywyMyArNjY0NSwzNSBAQCBuc0NvbnRlbnRVdGlsczo6U2V0
VXBDaGFubmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVsbDo6
TG9hZFVSSSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRoZSBv
d25lciBpZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAgdmVy
eSB3cm9uZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhhdAog
ICAvLyAgICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAgIC8v
CiAgIC8vICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4gdGhl
eSBhcmUgY3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3VsZCBi
ZSBiYWQhKQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIgd2ls
bCBiZSBzZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0cyBv
d24gc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1FCisg
IC8vIHNhbmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFuZCBp
dHMgZG9jdW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFsLgog
ICBib29sIGluaGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4
dCB0byByZXR1cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24n
dCBjYWxsIE5TX0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBj
b25kaXRpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExv
YWQgd2hlcmUKICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRo
ZSBvd25lci4KLSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChh
VVJJLCAmaW5oZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFu
ayAmJiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChO
U19TVUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAm
JgorICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJs
YW5rKGFVUkkpKSkpKSkgeworI2lmZGVmIERFQlVHCisgICAgLy8gQXNzZXJ0IHRoYXQgYUZvcmNl
T3duZXIgaXMgb25seSBzZXQgZm9yIG51bGwgcHJpbmNpcGFscworICAgIGlmIChhRm9yY2VPd25l
cikgeworICAgICAgbnNDT01QdHI8bnNJVVJJPiBvd25lclVSSTsKKyAgICAgIG5zcmVzdWx0IHJ2
ID0gYUxvYWRpbmdQcmluY2lwYWwtPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhvd25lclVSSSkpOwor
ICAgICAgTU9aX0FTU0VSVChOU19TVUNDRUVERUQocnYpICYmIFNjaGVtZUlzKG93bmVyVVJJLCBO
U19OVUxMUFJJTkNJUEFMX1NDSEVNRSkpOworICAgIH0KKyNlbmRpZgogICAgIGFDaGFubmVsLT5T
ZXRPd25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAv
LwogICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBh
IGZpbGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCmRp
ZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNl
L3NyYy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3Bw
CisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTE2MiwxNiArMTYyLDE3
IEBACiAjaW5jbHVkZSAibW96aWxsYS9kb20vTGluay5oIgogI2luY2x1ZGUgIm5zWFVMQXBwQVBJ
LmgiCiAjaW5jbHVkZSAibnNET01Ub3VjaEV2ZW50LmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL1By
ZWZlcmVuY2VzLmgiCiAKICNpbmNsdWRlICJpbWdJTG9hZGVyLmgiCiAjaW5jbHVkZSAibnNXcmFw
cGVyQ2FjaGVJbmxpbmVzLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiB0eXBl
ZGVmIG5zVEFycmF5PExpbmsqPiBMaW5rQXJyYXk7CiAKIC8vIFJlZmVyZW5jZSB0byB0aGUgZG9j
dW1lbnQgd2hpY2ggcmVxdWVzdGVkIERPTSBmdWxsLXNjcmVlbiBtb2RlLgogbnNXZWFrUHRyIG5z
RG9jdW1lbnQ6OnNGdWxsU2NyZWVuRG9jID0gbnNudWxsOwpAQCAtMjM3NiwxNiArMjM3NywyNSBA
QCBuc0RvY3VtZW50OjpTdGFydERvY3VtZW50TG9hZChjb25zdCBjaGFyCiAgICAgRmluZENoYXJJ
blJlYWRhYmxlKCc7Jywgc2VtaWNvbG9uLCBlbmQpOwogICAgIFNldENvbnRlbnRUeXBlSW50ZXJu
YWwoU3Vic3RyaW5nKHN0YXJ0LCBzZW1pY29sb24pKTsKICAgfQogCiAgIFJldHJpZXZlUmVsZXZh
bnRIZWFkZXJzKGFDaGFubmVsKTsKIAogICBtQ2hhbm5lbCA9IGFDaGFubmVsOwogCisgIC8vIElm
IHRoaXMgZG9jdW1lbnQgaXMgYmVpbmcgbG9hZGVkIGJ5IGEgZG9jc2hlbGwsIGNvcHkgaXRzIHNh
bmRib3ggZmxhZ3MKKyAgLy8gdG8gdGhlIGRvY3VtZW50LiBUaGVzZSBhcmUgaW1tdXRhYmxlIGFm
dGVyIGJlaW5nIHNldCBoZXJlLgorICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGwgPSBk
b19RdWVyeUludGVyZmFjZShhQ29udGFpbmVyKTsKKworICBpZiAoZG9jU2hlbGwpIHsKKyAgICBu
c3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTYW5kYm94RmxhZ3MoJm1TYW5kYm94RmxhZ3MpOwor
ICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgIH0KKwogICBuc3Jlc3VsdCBydiA9IElu
aXRDU1AoKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICByZXR1cm4gTlNfT0s7
CiB9CiAKIG5zcmVzdWx0CiBuc0RvY3VtZW50OjpJbml0Q1NQKCkKQEAgLTI2ODQsMTYgKzI2OTQs
MzQgQEAgbnNEb2N1bWVudDo6U2V0Q29udGVudFR5cGUoY29uc3QgbnNBU3RyaQogewogICBOU19B
U1NFUlRJT04oR2V0Q29udGVudFR5cGVJbnRlcm5hbCgpLklzRW1wdHkoKSB8fAogICAgICAgICAg
ICAgICAgR2V0Q29udGVudFR5cGVJbnRlcm5hbCgpLkVxdWFscyhOU19Db252ZXJ0VVRGMTZ0b1VU
RjgoYUNvbnRlbnRUeXBlKSksCiAgICAgICAgICAgICAgICAiRG8geW91IHJlYWxseSB3YW50IHRv
IGNoYW5nZSB0aGUgY29udGVudC10eXBlPyIpOwogCiAgIFNldENvbnRlbnRUeXBlSW50ZXJuYWwo
TlNfQ29udmVydFVURjE2dG9VVEY4KGFDb250ZW50VHlwZSkpOwogfQogCituc3Jlc3VsdAorbnNE
b2N1bWVudDo6R2V0QWxsb3dQbHVnaW5zKGJvb2wgKiBhQWxsb3dQbHVnaW5zKQoreworICAvLyBG
aXJzdCwgd2UgYXNrIG91ciBkb2NzaGVsbCBpZiBpdCBhbGxvd3MgcGx1Z2lucy4KKyAgbnNDT01Q
dHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlSZWZlcmVudChtRG9jdW1lbnRDb250
YWluZXIpOworCisgIGlmIChkb2NTaGVsbCkgeworICAgIGRvY1NoZWxsLT5HZXRBbGxvd1BsdWdp
bnMoYUFsbG93UGx1Z2lucyk7CisgICAgICAKKyAgICAvLyBJZiB0aGUgZG9jc2hlbGwgYWxsb3dz
IHBsdWdpbnMsIHdlIGNoZWNrIHdoZXRoZXIKKyAgICAvLyB3ZSBhcmUgc2FuZGJveGVkIGFuZCBw
bHVnaW5zIHNob3VsZCBub3QgYmUgYWxsb3dlZC4KKyAgICBpZiAoKmFBbGxvd1BsdWdpbnMpCisg
ICAgICAqYUFsbG93UGx1Z2lucyA9ICEobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9QTFVHSU5T
KTsKKyAgfQorCisgIHJldHVybiBOU19PSzsKK30KKwogLyogUmV0dXJuIHRydWUgaWYgdGhlIGRv
Y3VtZW50IGlzIGluIHRoZSBmb2N1c2VkIHRvcC1sZXZlbCB3aW5kb3csIGFuZCBpcyBhbgogICog
YW5jZXN0b3Igb2YgdGhlIGZvY3VzZWQgRE9NV2luZG93LiAqLwogTlNfSU1FVEhPRElNUAogbnNE
b2N1bWVudDo6SGFzRm9jdXMoYm9vbCogYVJlc3VsdCkKIHsKICAgKmFSZXN1bHQgPSBmYWxzZTsK
IAogICBuc0lGb2N1c01hbmFnZXIqIGZtID0gbnNGb2N1c01hbmFnZXI6OkdldEZvY3VzTWFuYWdl
cigpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmggYi9jb250ZW50
L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQu
aAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaApAQCAtNTYyLDE2ICs1NjIsMTgg
QEAgcHVibGljOgogICAgKiBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgcHJlc2VudGF0aW9uIHNoZWxs
J3MpLgogICAgKi8KICAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVTaGVsbChuc1ByZXNDb250ZXh0
KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3TWFuYWdl
ciogYVZpZXdNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3R5bGVT
ZXQqIGFTdHlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hl
bGwqKiBhSW5zdGFuY2VQdHJSZXN1bHQpOwogICB2aXJ0dWFsIHZvaWQgRGVsZXRlU2hlbGwoKTsK
IAorICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsbG93UGx1Z2lucyAoYm9vbCogYUFsbG93UGx1Z2lu
cyk7CisKICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdWJEb2N1bWVudEZvcihFbGVtZW50KiBhQ29u
dGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lEb2N1bWVudCog
YVN1YkRvYyk7CiAgIHZpcnR1YWwgbnNJRG9jdW1lbnQqIEdldFN1YkRvY3VtZW50Rm9yKG5zSUNv
bnRlbnQqIGFDb250ZW50KSBjb25zdDsKICAgdmlydHVhbCBFbGVtZW50KiBGaW5kQ29udGVudEZv
clN1YkRvY3VtZW50KG5zSURvY3VtZW50ICphRG9jdW1lbnQpIGNvbnN0OwogICB2aXJ0dWFsIEVs
ZW1lbnQqIEdldFJvb3RFbGVtZW50SW50ZXJuYWwoKSBjb25zdDsKIAogICAvKioKICAgICogR2V0
IHRoZSBzdHlsZSBzaGVldHMgb3duZWQgYnkgdGhpcyBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJh
bWVMb2FkZXIuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKKysr
IGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcApAQCAtNzgsMTYgKzc4LDE5IEBA
CiAjaW5jbHVkZSAibW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNsdWRlICJtb3ppbGxhL1By
ZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIKICNpbmNsdWRlICJtb3pp
bGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlvdXQvUmVuZGVyRnJhbWVQ
YXJlbnQuaCIKIAogI2luY2x1ZGUgImpzYXBpLmgiCiAKKyNpbmNsdWRlICJuc0hUTUxJRnJhbWVF
bGVtZW50LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKKwogdXNpbmcgbmFtZXNwYWNl
IG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNpbmcgbmFtZXNwYWNl
IG1vemlsbGE6OmxheWVyczsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpsYXlvdXQ7CiB0eXBl
ZGVmIEZyYW1lTWV0cmljczo6Vmlld0lEIFZpZXdJRDsKIAogY2xhc3MgbnNBc3luY0RvY1NoZWxs
RGVzdHJveWVyIDogcHVibGljIG5zUnVubmFibGUKIHsKQEAgLTQ0MCwxNiArNDQzLDQwIEBAIG5z
RnJhbWVMb2FkZXI6OlJlYWxseVN0YXJ0TG9hZGluZ0ludGVybmEKICAgLy8gSnVzdCB0byBiZSBz
YWZlLCByZWNoZWNrIHVyaS4KICAgcnYgPSBDaGVja1VSSUxvYWQobVVSSVRvTG9hZCk7CiAgIE5T
X0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbnNDT01QdHI8bnNJRG9jU2hlbGxMb2FkSW5m
bz4gbG9hZEluZm87CiAgIG1Eb2NTaGVsbC0+Q3JlYXRlTG9hZEluZm8oZ2V0dGVyX0FkZFJlZnMo
bG9hZEluZm8pKTsKICAgTlNfRU5TVVJFX1RSVUUobG9hZEluZm8sIE5TX0VSUk9SX0ZBSUxVUkUp
OwogCisgIC8vIElzIHRoaXMgYW4gPGlmcmFtZT4gd2l0aCBhIHNhbmRib3ggYXR0cmlidXRlIG9y
IGEgcGFyZW50IHdoaWNoIGlzCisgIC8vIHNhbmRib3hlZCA/CisgIG5zSFRNTElGcmFtZUVsZW1l
bnQqIGlmcmFtZSA9CisgICAgbnNIVE1MSUZyYW1lRWxlbWVudDo6RnJvbUNvbnRlbnQobU93bmVy
Q29udGVudCk7CisKKyAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICBpZiAoaWZyYW1l
KSB7CisgICAgc2FuZGJveEZsYWdzID0gaWZyYW1lLT5HZXRTYW5kYm94RmxhZ3MoKTsKKworICAg
IFBSVWludDMyIHBhcmVudFNhbmRib3hGbGFncyA9IGlmcmFtZS0+T3duZXJEb2MoKS0+U2FuZGJv
eEZsYWdzKCk7CisKKyAgICBpZiAoc2FuZGJveEZsYWdzIHx8IHBhcmVudFNhbmRib3hGbGFncykg
eworICAgICAgLy8gVGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0cmljdGlvbnMsIG5vdCByZW1v
dmUgdGhlbS4KKyAgICAgIHNhbmRib3hGbGFncyB8PSBwYXJlbnRTYW5kYm94RmxhZ3M7CisKKyAg
ICAgIG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFncyk7CisgICAgfQorICB9
CisKKyAgLy8gSWYgdGhpcyBpcyBhbiA8aWZyYW1lPiBhbmQgaXQncyBzYW5kYm94ZWQgd2l0aCBy
ZXNwZWN0IHRvIG9yaWdpbgorICAvLyB3ZSB3aWxsIHNldCBpdCB1cCB3aXRoIGEgbnVsbCBwcmlu
Y2lwYWwgbGF0ZXIgaW4gbnNEb2NTaGVsbDo6RG9VUklMb2FkLgorICAvLyBXZSBkbyBpdCB0aGVy
ZSB0byBjb3JyZWN0bHkgc2FuZGJveCBjb250ZW50IHRoYXQgd2FzIGxvYWRlZCBpbnRvCisgIC8v
IHRoZSBpZnJhbWUgdmlhIG90aGVyIG1ldGhvZHMgdGhhbiB0aGUgc3JjIGF0dHJpYnV0ZS4KICAg
Ly8gV2UnbGwgdXNlIG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZSBkb2N1bWVudCBsb2Fk
ZWQgaW5zaWRlIHVzLiAgVGhpcwogICAvLyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvIHBy
ZXZlbnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbgogICAvLyBzdWJmcmFtZXMh
CiAgIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOwog
CiAgIG5zQ09NUHRyPG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVudC0+Tm9k
ZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAgTlNfRU5T
VVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0
b21MaXN0LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCi0tLSBhL2NvbnRlbnQv
YmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxp
c3QuaApAQCAtNjUsMTcgKzY1LDIxIEBAIEdLX0FUT00oYWN0dWF0ZSwgImFjdHVhdGUiKQogR0tf
QVRPTShhZGRyZXNzLCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVyLCAiYWZ0ZXIiKQogR0tfQVRP
TShhZnRlcl9lbmQsICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRlcl9zdGFydCwgImFmdGVyX3N0
YXJ0IikKIEdLX0FUT00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9NKGFsaW5rLCAiYWxpbmsiKQog
R0tfQVRPTShhbGwsICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50cywgImFsbG93ZXZlbnRzIikK
K0dLX0FUT00oYWxsb3dmb3JtcywgImFsbG93LWZvcm1zIikKIEdLX0FUT00oYWxsb3duZWdhdGl2
ZWFzc2VydGlvbnMsICJhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucyIpCitHS19BVE9NKGFsbG93c2Ft
ZW9yaWdpbiwgImFsbG93LXNhbWUtb3JpZ2luIikKK0dLX0FUT00oYWxsb3dzY3JpcHRzLCAiYWxs
b3ctc2NyaXB0cyIpCitHS19BVE9NKGFsbG93dG9wbmF2aWdhdGlvbiwgImFsbG93LXRvcC1uYXZp
Z2F0aW9uIikKIEdLX0FUT00oYWxsb3d1bnRydXN0ZWQsICJhbGxvd3VudHJ1c3RlZCIpCiBHS19B
VE9NKGFsdCwgImFsdCIpCiBHS19BVE9NKGFsdGVybmF0ZSwgImFsdGVybmF0ZSIpCiBHS19BVE9N
KGFsd2F5cywgImFsd2F5cyIpCiBHS19BVE9NKGFuY2VzdG9yLCAiYW5jZXN0b3IiKQogR0tfQVRP
TShhbmNlc3Rvck9yU2VsZiwgImFuY2VzdG9yLW9yLXNlbGYiKQogR0tfQVRPTShfYW5kLCAiYW5k
IikKIEdLX0FUT00oYW55LCAiYW55IikKQEAgLTg0MSwxNiArODQ1LDE3IEBAIEdLX0FUT00ocm93
c3BhbiwgInJvd3NwYW4iKQogR0tfQVRPTShycCwgInJwIikKIEdLX0FUT00ocnQsICJydCIpCiBH
S19BVE9NKHJ0bCwgInJ0bCIpCiBHS19BVE9NKHJ1YnksICJydWJ5IikKIEdLX0FUT00ocnVsZSwg
InJ1bGUiKQogR0tfQVRPTShydWxlcywgInJ1bGVzIikKIEdLX0FUT00ocywgInMiKQogR0tfQVRP
TShzYW1wLCAic2FtcCIpCitHS19BVE9NKHNhbmRib3gsICJzYW5kYm94IikKIEdLX0FUT00oc2Jh
dHRyLCAic2JhdHRyIikKIEdLX0FUT00oc2NhbGUsICJzY2FsZSIpCiBHS19BVE9NKHNjYW4sICJz
Y2FuIikKIEdLX0FUT00oc2NoZW1lLCAic2NoZW1lIikKIEdLX0FUT00oc2NvcGUsICJzY29wZSIp
CiBHS19BVE9NKHNjb3BlZCwgInNjb3BlZCIpCiBHS19BVE9NKHNjcmVlbiwgInNjcmVlbiIpCiBH
S19BVE9NKHNjcmVlblgsICJzY3JlZW5YIikKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMv
bnNTYW5kYm94RmxhZ3MuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3MuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNT
YW5kYm94RmxhZ3MuaApAQCAtMCwwICsxLDU4IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lk
dGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovDQor
LyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBN
b3ppbGxhIFB1YmxpYw0KKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwg
d2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwNCisgKiBZb3UgY2FuIG9idGFpbiBv
bmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLw0KKw0KKy8qDQorICogQ29uc3Rh
bnQgZmxhZ3MgdGhhdCBkZXNjcmliZSBob3cgYSBkb2N1bWVudCBpcyBzYW5kYm94ZWQgYWNjb3Jk
aW5nIHRvIHRoZQ0KKyAqIEhUTUw1IHNwZWMuDQorICovDQorDQorI2lmbmRlZiBuc1NhbmRib3hG
bGFnc19oX19fDQorI2RlZmluZSBuc1NhbmRib3hGbGFnc19oX19fDQorDQorLyoqDQorICogVGhp
cyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIGJyb3dzaW5nIGNvbnRleHRz
IG90aGVyIHRoYW4NCisgKiB0aGUgc2FuZGJveGVkIGJyb3dzaW5nIGNvbnRleHQgaXRzZWxmIChv
ciBicm93c2luZyBjb250ZXh0cyBmdXJ0aGVyDQorICogbmVzdGVkIGluc2lkZSBpdCksIGFuZCB0
aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9u
ZyBTQU5EQk9YRURfTkFWSUdBVElPTiAgPSAweDE7DQorDQorLyoqDQorICogVGhpcyBmbGFnIHBy
ZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWlyIHRvcC1sZXZlbCBicm93c2luZw0K
KyAqIGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfVE9QTEVW
RUxfTkFWSUdBVElPTiA9IDB4MjsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgcHJldmVudHMgY29u
dGVudCBmcm9tIGluc3RhbnRpYXRpbmcgcGx1Z2lucywgd2hldGhlciB1c2luZyB0aGUNCisgKiBl
bWJlZCBlbGVtZW50LCB0aGUgb2JqZWN0IGVsZW1lbnQsIHRoZSBhcHBsZXQgZWxlbWVudCwgb3Ig
dGhyb3VnaA0KKyAqIG5hdmlnYXRpb24gb2YgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgdW5s
ZXNzIHRob3NlIHBsdWdpbnMgY2FuIGJlDQorICogc2VjdXJlZC4NCisgKi8NCitjb25zdCB1bnNp
Z25lZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5TID0gMHg0Ow0KKw0KKy8qKg0KKyAqIFRoaXMgZmxh
ZyBmb3JjZXMgY29udGVudCBpbnRvIGEgdW5pcXVlIG9yaWdpbiwgdGh1cyBwcmV2ZW50aW5nIGl0
IGZyb20NCisgKiBhY2Nlc3Npbmcgb3RoZXIgY29udGVudCBmcm9tIHRoZSBzYW1lIG9yaWdpbi4N
CisgKiBUaGlzIGZsYWcgYWxzbyBwcmV2ZW50cyBzY3JpcHQgZnJvbSByZWFkaW5nIGZyb20gb3Ig
d3JpdGluZyB0byB0aGUNCisgKiBkb2N1bWVudC5jb29raWUgSURMIGF0dHJpYnV0ZSwgYW5kIGJs
b2NrcyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcg
U0FOREJPWEVEX09SSUdJTiA9IDB4ODsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIGZv
cm0gc3VibWlzc2lvbi4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9GT1JN
UyA9IDB4MTA7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBzY3JpcHQgZXhlY3V0aW9u
Lg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1NDUklQVFMgPSAweDIwOw0K
Kw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3MgZmVhdHVyZXMgdGhhdCB0cmlnZ2VyIGF1dG9t
YXRpY2FsbHksIHN1Y2ggYXMNCisgKiBhdXRvbWF0aWNhbGx5IHBsYXlpbmcgYSB2aWRlbyBvciBh
dXRvbWF0aWNhbGx5IGZvY3VzaW5nIGEgZm9ybSBjb250cm9sLg0KKyAqLw0KK2NvbnN0IHVuc2ln
bmVkIGxvbmcgU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUyA9IDB4NDA7DQorI2VuZGlmDQpk
aWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAgYi9jb250ZW50
L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zU2Ny
aXB0TG9hZGVyLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcApA
QCAtMzcsMTYgKzM3LDE3IEBACiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5Lmgi
CiAjaW5jbHVkZSAicHJsb2cuaCIKICNpbmNsdWRlICJuc0lDaGFubmVsUG9saWN5LmgiCiAjaW5j
bHVkZSAibnNDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNDUlQuaCIKICNpbmNsdWRlICJu
c0NvbnRlbnRDcmVhdG9yRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAibnNHZW5lcmljRWxlbWVudC5o
IgogI2luY2x1ZGUgIm5zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUgIm5zU2Fu
ZGJveEZsYWdzLmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL0Z1bmN0aW9uVGltZXIuaCIKICNpbmNs
dWRlICJtb3ppbGxhL0NPUlNNb2RlLmgiCiAjaW5jbHVkZSAibW96aWxsYS9BdHRyaWJ1dGVzLmgi
CiAKICNpZmRlZiBQUl9MT0dHSU5HCiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnQ3NwUFJMb2c7
CiAjZW5kaWYKQEAgLTI3MywxNiArMjc0LDIxIEBAIG5zU2NyaXB0TG9hZGVyOjpTdGFydExvYWQo
bnNTY3JpcHRMb2FkUmUKICAgaWYgKCF3aW5kb3cpIHsKICAgICByZXR1cm4gTlNfRVJST1JfTlVM
TF9QT0lOVEVSOwogICB9CiAKICAgbnNJRG9jU2hlbGwgKmRvY3NoZWxsID0gd2luZG93LT5HZXRE
b2NTaGVsbCgpOwogCiAgIG5zQ09NUHRyPG5zSUludGVyZmFjZVJlcXVlc3Rvcj4gcHJvbXB0ZXIo
ZG9fUXVlcnlJbnRlcmZhY2UoZG9jc2hlbGwpKTsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlz
IHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJywgYWJvcnQuCisgIGlmIChtRG9jdW1l
bnQtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICByZXR1cm4gTlNf
T0s7CisgIH0KKwogICAvLyBjaGVjayBmb3IgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0byBw
YXNzIGRvd24gdG8gdGhlIGNoYW5uZWwKICAgLy8gdGhhdCB3aWxsIGJlIGNyZWF0ZWQgdG8gbG9h
ZCB0aGUgc2NyaXB0CiAgIG5zQ09NUHRyPG5zSUNoYW5uZWxQb2xpY3k+IGNoYW5uZWxQb2xpY3k7
CiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3NwOwogICBydiA9IG1Eb2N1
bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgIE5T
X0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgIGlmIChjc3ApIHsKICAgICBjaGFubmVsUG9saWN5
ID0gZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9uc2NoYW5uZWxwb2xpY3k7MSIpOwpA
QCAtNjMwLDE2ICs2MzYsMjEgQEAgbnNTY3JpcHRMb2FkZXI6OlByb2Nlc3NTY3JpcHRFbGVtZW50
KG5zSQogICAgICAgICAiVGhlcmUgY2FuIGJlIG9ubHkgb25lIHBhcnNlci1ibG9ja2luZyBzY3Jp
cHQgYXQgYSB0aW1lIik7CiAgICAgTlNfQVNTRVJUSU9OKG1YU0xUUmVxdWVzdHMuSXNFbXB0eSgp
LAogICAgICAgICAiUGFyc2VyLWJsb2NraW5nIHNjcmlwdHMgYW5kIFhTTFQgc2NyaXB0cyBpbiB0
aGUgc2FtZSBkb2MhIik7CiAgICAgbVBhcnNlckJsb2NraW5nUmVxdWVzdCA9IHJlcXVlc3Q7CiAg
ICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLyBpbmxpbmUgc2NyaXB0CisgIC8vIElzIHRoaXMg
ZG9jdW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMnPworICBpZiAobURvY3Vt
ZW50LT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgcmV0dXJuIGZh
bHNlOworICB9CisKICAgbnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5PiBjc3A7CiAg
IHJ2ID0gbURvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldENzcChnZXR0ZXJfQWRkUmVmcyhj
c3ApKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIGZhbHNlKTsKIAogICBpZiAoY3NwKSB7CiAg
ICAgUFJfTE9HKGdDc3BQUkxvZywgUFJfTE9HX0RFQlVHLCAoIk5ldyBTY3JpcHRMb2FkZXIgaSAq
Kioqd2l0aCBDU1AqKioqIikpOwogICAgIGJvb2wgaW5saW5lT0s7CiAgICAgcnYgPSBjc3AtPkdl
dEFsbG93c0lubGluZVNjcmlwdCgmaW5saW5lT0spOwpkaWZmIC0tZ2l0IGEvY29udGVudC9ldmVu
dHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwIGIvY29udGVudC9ldmVudHMvc3JjL25z
RXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCi0tLSBhL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2ZW50
TGlzdGVuZXJNYW5hZ2VyLmNwcAorKysgYi9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3Rl
bmVyTWFuYWdlci5jcHAKQEAgLTUwLDE2ICs1MCwxNyBAQAogI2luY2x1ZGUgIm5zRE9NSlNVdGls
cy5oIgogI2luY2x1ZGUgIm5zRE9NU2NyaXB0T2JqZWN0SG9sZGVyLmgiCiAjaW5jbHVkZSAibnNE
YXRhSGFzaHRhYmxlLmgiCiAjaW5jbHVkZSAibnNDT01BcnJheS5oIgogI2luY2x1ZGUgIm5zRXZl
bnRMaXN0ZW5lclNlcnZpY2UuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3ku
aCIKICNpbmNsdWRlICJuc0pTRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJ4cGNwdWJsaWMuaCIK
KyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6
ZG9tOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmhhbDsKIAogI2RlZmluZSBFVkVOVF9UWVBF
X0VRVUFMUyggbHMsIHR5cGUsIHVzZXJUeXBlICkgXAogICAobHMtPm1FdmVudFR5cGUgPT0gdHlw
ZSAmJiBcCiAgIChscy0+bUV2ZW50VHlwZSAhPSBOU19VU0VSX0RFRklORURfRVZFTlQgfHwgbHMt
Pm1UeXBlQXRvbSA9PSB1c2VyVHlwZSkpCiAKQEAgLTU3MCwxNiArNTcxLDIyIEBAIG5zRXZlbnRM
aXN0ZW5lck1hbmFnZXI6OkFkZFNjcmlwdEV2ZW50TGkKICAgICAvLyBsb2FkZWQgYXMgZGF0YS4K
ICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAogICBuc3Jlc3VsdCBydiA9IE5TX09LOwogICAvLyBy
ZXR1cm4gZWFybHkgcHJldmVudGluZyB0aGUgZXZlbnQgbGlzdGVuZXIgZnJvbSBiZWluZyBhZGRl
ZAogICAvLyAnZG9jJyBpcyBmZXRjaGVkIGFib3ZlCiAgIGlmIChkb2MpIHsKKyAgICAvLyBEb24n
dCBhbGxvdyBhZGRpbmcgYW4gZXZlbnQgbGlzdGVuZXIgaWYgdGhlIGRvY3VtZW50IGlzIHNhbmRi
b3hlZAorICAgIC8vIHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMnLgorICAgIGlmIChkb2MtPlNhbmRi
b3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9E
T01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0
eVBvbGljeT4gY3NwOwogICAgIHJ2ID0gZG9jLT5Ob2RlUHJpbmNpcGFsKCktPkdldENzcChnZXR0
ZXJfQWRkUmVmcyhjc3ApKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAg
aWYgKGNzcCkgewogICAgICAgYm9vbCBpbmxpbmVPSzsKICAgICAgIHJ2ID0gY3NwLT5HZXRBbGxv
d3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsKICAgICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBy
dik7CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1l
bnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50LmNwcAot
LS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTQ4LDE2
ICs0OCwxNyBAQAogCiAjaW5jbHVkZSAibW96QXV0b0RvY1VwZGF0ZS5oIgogI2luY2x1ZGUgIm5z
SUhUTUxDb2xsZWN0aW9uLmgiCiAKICNpbmNsdWRlICJuc0lDb25zdHJhaW50VmFsaWRhdGlvbi5o
IgogCiAjaW5jbHVkZSAibnNJRE9NSFRNTEJ1dHRvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJkb21i
aW5kaW5ncy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBtb3ppbGxhOjpkb207CiAKIHN0YXRpYyBjb25zdCBpbnQgTlNfRk9STV9DT05UUk9MX0xJU1Rf
SEFTSFRBQkxFX1NJWkUgPSAxNjsKIAogc3RhdGljIGNvbnN0IFBSVWludDggTlNfRk9STV9BVVRP
Q09NUExFVEVfT04gID0gMTsKIHN0YXRpYyBjb25zdCBQUlVpbnQ4IE5TX0ZPUk1fQVVUT0NPTVBM
RVRFX09GRiA9IDA7CiAKQEAgLTY0OSwxNyArNjUwLDE5IEBAIG5zSFRNTEZvcm1FbGVtZW50OjpE
b1N1Ym1pdE9yUmVzZXQobnNFdmUKICAgICByZXR1cm4gRG9SZXNldCgpOwogICB9CiAKICAgaWYg
KE5TX0ZPUk1fU1VCTUlUID09IGFNZXNzYWdlKSB7CiAgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdl
J3JlIG5vdCBpbiBhIGRvY3VtZW50LgogICAgIGlmICghZG9jKSB7CiAgICAgICByZXR1cm4gTlNf
T0s7CiAgICAgfQotICAgIHJldHVybiBEb1N1Ym1pdChhRXZlbnQpOworICAgIC8vIERvbid0IHN1
Ym1pdCBpZiB3ZSdyZSBpbiBhIHNhbmRib3hlZCBmcmFtZSBhbmQgZm9ybSBzdWJtaXQKKyAgICAv
LyBpcyBkaXNhYmxlZC4KKyAgICByZXR1cm4gKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9Y
RURfRk9STVMpID8gTlNfT0sgOiBEb1N1Ym1pdChhRXZlbnQpOwogICB9CiAKICAgTU9aX0FTU0VS
VChmYWxzZSk7CiAgIHJldHVybiBOU19PSzsKIH0KIAogbnNyZXN1bHQKIG5zSFRNTEZvcm1FbGVt
ZW50OjpEb1Jlc2V0KCkKQEAgLTE2NTAsMTYgKzE2NTMsMjQgQEAgbnNIVE1MRm9ybUVsZW1lbnQ6
OkNoZWNrVmFsaWRGb3JtU3VibWlzcwogICAgKiBUT0RPOiB0aGUgY2hlY2sgZm9yIG9ic2VydmVy
IHNob3VsZCBiZSByZW1vdmVkIGxhdGVyIHdoZW4gSFRNTDUgRm9ybXMgd2lsbAogICAgKiBiZSBz
cHJlYWQgZW5vdWdoIGFuZCBhdXRob3JzIHdpbGwgYXNzdW1lIGZvcm1zIGNhbid0IGJlIHN1Ym1p
dHRlZCB3aGVuCiAgICAqIGludmFsaWQuIFNlZSBidWcgNTg3NjcxLgogICAgKi8KIAogICBOU19B
U1NFUlRJT04oIUhhc0F0dHIoa05hbWVTcGFjZUlEX05vbmUsIG5zR2tBdG9tczo6bm92YWxpZGF0
ZSksCiAgICAgICAgICAgICAgICAiV2Ugc2hvdWxkbid0IGJlIHRoZXJlIGlmIG5vdmFsaWRhdGUg
aXMgc2V0ISIpOwogCisgIC8vIERvbid0IGRvIHZhbGlkYXRpb24gZm9yIGEgZm9ybSBzdWJtaXQg
ZG9uZSBieSBhIHNhbmRib3hlZCBkb2N1bWVudCB0aGF0CisgIC8vIGRvZXNuJ3QgaGF2ZSAnYWxs
b3ctZm9ybXMnLCB0aGUgc3VibWl0IHdpbGwgaGF2ZSBiZWVuIGJsb2NrZWQgYW5kIHRoZQorICAv
LyBIVE1MNSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IHZhbGlkYXRlIGluIHRoaXMgY2FzZS4KKyAg
bnNJRG9jdW1lbnQqIGRvYyA9IEdldEN1cnJlbnREb2MoKTsKKyAgaWYgKGRvYyAmJiAoZG9jLT5T
YW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9GT1JNUykpIHsKKyAgICAgIHJldHVybiB0cnVlOwor
ICB9CisKICAgLy8gV2hlbiAuc3VibWl0KCkgaXMgY2FsbGVkIGFFdmVudCA9IG5zbnVsbCBzbyB3
ZSBjYW4gcmVseSBvbiB0aGF0IHRvIGtub3cgaWYKICAgLy8gd2UgaGF2ZSB0byBjaGVjayB0aGUg
dmFsaWRpdHkgb2YgdGhlIGZvcm0uCiAgIG5zQ09NUHRyPG5zSU9ic2VydmVyU2VydmljZT4gc2Vy
dmljZSA9CiAgICAgbW96aWxsYTo6c2VydmljZXM6OkdldE9ic2VydmVyU2VydmljZSgpOwogICBp
ZiAoIXNlcnZpY2UpIHsKICAgICBOU19XQVJOSU5HKCJObyBvYnNlcnZlciBzZXJ2aWNlIGF2YWls
YWJsZSEiKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50
L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9z
cmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTEsMjIgKzEsMTYgQEAKIC8qIC0qLSBNb2Rl
OiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNl
dDogMiAtKi0gKi8KIC8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0
ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKICAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5
IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKICAqIGZpbGUsIFlvdSBj
YW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCiAKICNpbmNs
dWRlICJtb3ppbGxhL1V0aWwuaCIKIAogI2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJuc0lET01TVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIm5zR2tBdG9tcy5oIgot
I2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIm5zRE9NRXJyb3IuaCIK
LSNpbmNsdWRlICJuc1J1bGVEYXRhLmgiCi0jaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgogCiB1
c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAK
IE5TX0lNUExfTlNfTkVXX0hUTUxfRUxFTUVOVF9DSEVDS19QQVJTRVIoSUZyYW1lKQogCiBuc0hU
TUxJRnJhbWVFbGVtZW50Ojpuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJ
Tm9kZUluZm8+IGFOb2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRnJvbVBhcnNlciBhRnJvbVBhcnNlcikKQEAgLTUxLDE2ICs0NSwxNyBAQCBOU19JTVBM
X1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsCiBOU19JTVBMX1VSSV9BVFRSKG5zSFRN
TElGcmFtZUVsZW1lbnQsIExvbmdEZXNjLCBsb25nZGVzYykKIE5TX0lNUExfU1RSSU5HX0FUVFIo
bnNIVE1MSUZyYW1lRWxlbWVudCwgTWFyZ2luSGVpZ2h0LCBtYXJnaW5oZWlnaHQpCiBOU19JTVBM
X1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE1hcmdpbldpZHRoLCBtYXJnaW53aWR0
aCkKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTmFtZSwgbmFtZSkK
IE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU2Nyb2xsaW5nLCBzY3Jv
bGxpbmcpCiBOU19JTVBMX1VSSV9BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNyYywgc3JjKQog
TlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBXaWR0aCwgd2lkdGgpCiBO
U19JTVBMX0JPT0xfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBNb3pBbGxvd0Z1bGxTY3JlZW4s
IG1vemFsbG93ZnVsbHNjcmVlbikKK05TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxl
bWVudCwgU2FuZGJveCwgc2FuZGJveCkKIAogdm9pZAogbnNIVE1MSUZyYW1lRWxlbWVudDo6R2V0
SXRlbVZhbHVlVGV4dChuc0FTdHJpbmcmIGFWYWx1ZSkKIHsKICAgR2V0U3JjKGFWYWx1ZSk7CiB9
CiAKIHZvaWQKQEAgLTIwMCw4ICsxOTUsMzcgQEAgbnNIVE1MSUZyYW1lRWxlbWVudDo6SXNBdHRy
aWJ1dGVNYXBwZWQoYwogCiAKIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMKIG5zSFRNTElGcmFt
ZUVsZW1lbnQ6OkdldEF0dHJpYnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0CiB7CiAgIHJldHVy
biAmTWFwQXR0cmlidXRlc0ludG9SdWxlOwogfQogCituc3Jlc3VsdAorbnNIVE1MSUZyYW1lRWxl
bWVudDo6QWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQXR0clZhbHVlKiBh
VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkp
Cit7CisgIGlmIChhTmFtZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5hbWVTcGFjZUlEID09
IGtOYW1lU3BhY2VJRF9Ob25lKSB7CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2YWx1ZSBvZiB0aGUg
c2FuZGJveCBhdHRyaWJ1dGUsIGFuZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwKKyAgICAvLyBzZXQg
aXRzIHNhbmRib3ggZmxhZ3MgYXBwcm9wcmlhdGVseS4KKyAgICBpZiAobUZyYW1lTG9hZGVyKSB7
CisgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jc2hlbGwgPSBtRnJhbWVMb2FkZXItPkdl
dEV4aXN0aW5nRG9jU2hlbGwoKTsKKworICAgICAgaWYgKGRvY3NoZWxsKSB7CisgICAgICAgIFBS
VWludDMyIG5ld0ZsYWdzID0gMDsKKyAgICAgICAgLy8gSWYgYSBOVUxMIGFWYWx1ZSBpcyBwYXNz
ZWQgaW4sIHdlIHdhbnQgdG8gY2xlYXIgdGhlIHNhbmRib3ggZmxhZ3MKKyAgICAgICAgLy8gd2hp
Y2ggd2Ugd2lsbCBkbyBieSBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAgaWYgKGFWYWx1ZSkg
eworICAgICAgICAgIG5zQXV0b1N0cmluZyBzdHJWYWx1ZTsKKyAgICAgICAgICBhVmFsdWUtPlRv
U3RyaW5nKHN0clZhbHVlKTsKKyAgICAgICAgICBuZXdGbGFncyA9IG5zQ29udGVudFV0aWxzOjpQ
YXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKAorICAgICAgICAgICAgc3RyVmFsdWUpOworICAg
ICAgICB9ICAgICAgIAorICAgICAgICBkb2NzaGVsbC0+U2V0U2FuZGJveEZsYWdzKG5ld0ZsYWdz
KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIG5zR2VuZXJpY0hUTUxFbGVtZW50OjpB
ZnRlclNldEF0dHIoYU5hbWVTcGFjZUlELCBhTmFtZSwgYVZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTm90aWZ5KTsKKworfQpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaCBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmgKLS0tIGEvY29udGVudC9odG1s
L2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaAorKysgYi9jb250ZW50L2h0bWwvY29u
dGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCkBAIC0xLDE2ICsxLDI0IEBACiAvKiAtKi0g
TW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1v
ZmZzZXQ6IDIgLSotICovCiAvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0
aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEg
Y29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCiAgKiBmaWxlLCBZ
b3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwogCiAj
aW5jbHVkZSAibnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIm5zSURPTUhU
TUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJuc0lET01TVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zR2tBdG9tcy5oIgorI2lu
Y2x1ZGUgIm5zSURvY3VtZW50LmgiCisjaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVzLmgiCisj
aW5jbHVkZSAibnNET01FcnJvci5oIgorI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIKKyNpbmNsdWRl
ICJuc1N0eWxlQ29uc3RzLmgiCisjaW5jbHVkZSAibnNDb250ZW50VXRpbHMuaCIKIAogY2xhc3Mg
bnNIVE1MSUZyYW1lRWxlbWVudCA6IHB1YmxpYyBuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIG5zSURPTUdldFNWR0RvY3VtZW50
CiB7CiBwdWJsaWM6CiAgIG5zSFRNTElGcmFtZUVsZW1lbnQoYWxyZWFkeV9BZGRSZWZlZDxuc0lO
b2RlSW5mbz4gYU5vZGVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgIG1vemlsbGE6OmRvbTo6
RnJvbVBhcnNlciBhRnJvbVBhcnNlciA9IG1vemlsbGE6OmRvbTo6Tk9UX0ZST01fUEFSU0VSKTsK
QEAgLTQxLDEyICs0OSwzNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zQXR0clZhbHVlJiBhUmVzdWx0KTsKICAgTlNfSU1FVEhPRF8oYm9vbCkgSXNBdHRyaWJ1
dGVNYXBwZWQoY29uc3QgbnNJQXRvbSogYUF0dHJpYnV0ZSkgY29uc3Q7CiAgIHZpcnR1YWwgbnNN
YXBSdWxlVG9BdHRyaWJ1dGVzRnVuYyBHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25z
dDsKIAogICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5z
SU5vZGUgKiphUmVzdWx0KSBjb25zdDsKICAgdmlydHVhbCBuc1hQQ0NsYXNzSW5mbyogR2V0Q2xh
c3NJbmZvKCk7CiAgIHZpcnR1YWwgbnNJRE9NTm9kZSogQXNET01Ob2RlKCkgeyByZXR1cm4gdGhp
czsgfQogCisgIHZpcnR1YWwgbnNyZXN1bHQgQWZ0ZXJTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFj
ZUlELCBuc0lBdG9tKiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNBdHRyVmFsdWUqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhTm90aWZ5KTsKKworICBQUlVpbnQzMiBHZXRTYW5kYm94RmxhZ3MoKQorICB7CisgICAg
bnNBdXRvU3RyaW5nIHNhbmRib3hBdHRyOworCisgICAgaWYgKEdldEF0dHIoa05hbWVTcGFjZUlE
X05vbmUsIG5zR2tBdG9tczo6c2FuZGJveCwgc2FuZGJveEF0dHIpKSB7CisgICAgICByZXR1cm4g
bnNDb250ZW50VXRpbHM6OlBhcnNlU2FuZGJveEF0dHJpYnV0ZVRvRmxhZ3Moc2FuZGJveEF0dHIp
OworICAgIH0KKworICAgIC8vIE5vIHNhbmRib3ggYXR0cmlidXRlLCBubyBzYW5kYm94IGZsYWdz
LgorICAgIHJldHVybiAwOworICB9CisKKyAgc3RhdGljIG5zSFRNTElGcmFtZUVsZW1lbnQqIEZy
b21Db250ZW50KG5zSUNvbnRlbnQgKmFDb250ZW50KQorICB7CisgICAgaWYgKGFDb250ZW50LT5J
c0hUTUwobnNHa0F0b21zOjppZnJhbWUpKSB7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnNI
VE1MSUZyYW1lRWxlbWVudCo+KGFDb250ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIG5zbnVsbDsK
KyAgfQorCiBwcm90ZWN0ZWQ6CiAgIHZpcnR1YWwgdm9pZCBHZXRJdGVtVmFsdWVUZXh0KG5zQVN0
cmluZyYgdGV4dCk7CiAgIHZpcnR1YWwgdm9pZCBTZXRJdGVtVmFsdWVUZXh0KGNvbnN0IG5zQVN0
cmluZyYgdGV4dCk7CiB9OwpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9u
c0hUTUxEb2N1bWVudC5jcHAgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3Vt
ZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNw
cAorKysgYi9jb250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcApAQCAt
OTgsMTYgKzk4LDE3IEBACiAjaW5jbHVkZSAicHJwcmYuaCIKICNpbmNsdWRlICJtb3ppbGxhL2Rv
bS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUg
Im5zTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAibnNJUmVxdWVzdC5oIgogI2luY2x1ZGUgIm5zSHRt
bDVUcmVlT3BFeGVjdXRvci5oIgogI2luY2x1ZGUgIm5zSHRtbDVQYXJzZXIuaCIKICNpbmNsdWRl
ICJuc0lET01KU1dpbmRvdy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIAogI2Rl
ZmluZSBOU19NQVhfRE9DVU1FTlRfV1JJVEVfREVQVEggMjAKIAogI2luY2x1ZGUgInBybWVtLmgi
CiAjaW5jbHVkZSAicHJ0aW1lLmgiCkBAIC0xMjE3LDE2ICsxMjE4LDIyIEBAIG5zSFRNTERvY3Vt
ZW50OjpHZXRDb29raWUobnNBU3RyaW5nJiBhQ28KIHsKICAgYUNvb2tpZS5UcnVuY2F0ZSgpOyAv
LyBjbGVhciBjdXJyZW50IGNvb2tpZSBpbiBjYXNlIHNlcnZpY2UgZmFpbHM7CiAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbm8gY29va2llIGlzbid0IGFuIGVycm9yIGNvbmRpdGlvbi4KIAogICBp
ZiAobURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAv
LyBJZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3Mg
dG8gcmVhZCBjb29raWVzCisgIC8vIGlzIHByb2hpYml0ZWQuCisgIGlmIChtU2FuZGJveEZsYWdz
ICYgU0FOREJPWEVEX09SSUdJTikgeworICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlf
RVJSOworICB9CisgIAogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZpY2UgaXNuJ3QgYW4g
ZXJyb3IKICAgbnNDT01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9IGRvX0dldFNlcnZp
Y2UoTlNfQ09PS0lFU0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZpY2UpIHsKICAgICAv
LyBHZXQgYSBVUkkgZnJvbSB0aGUgZG9jdW1lbnQgcHJpbmNpcGFsLiBXZSB1c2UgdGhlIG9yaWdp
bmFsCiAgICAgLy8gY29kZWJhc2UgaW4gY2FzZSB0aGUgY29kZWJhc2Ugd2FzIGNoYW5nZWQgYnkg
U2V0RG9tYWluCiAgICAgbnNDT01QdHI8bnNJVVJJPiBjb2RlYmFzZVVSSTsKICAgICBOb2RlUHJp
bmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhjb2RlYmFzZVVSSSkpOwogCkBAIC0xMjQ3
LDE2ICsxMjU0LDIyIEBAIG5zSFRNTERvY3VtZW50OjpHZXRDb29raWUobnNBU3RyaW5nJiBhQ28K
IAogTlNfSU1FVEhPRElNUAogbnNIVE1MRG9jdW1lbnQ6OlNldENvb2tpZShjb25zdCBuc0FTdHJp
bmcmIGFDb29raWUpCiB7CiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2VzcykgewogICAgIHJldHVy
biBOU19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRib3hlZCBvcmlnaW4g
ZmxhZyBpcyBzZXQsIGFjY2VzcyB0byB3cml0ZSBjb29raWVzCisgIC8vIGlzIHByb2hpYml0ZWQu
CisgIGlmIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikgeworICAgIHJldHVybiBO
U19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICB9CisKICAgLy8gbm90IGhhdmluZyBhIGNvb2tp
ZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNl
cnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlm
IChzZXJ2aWNlICYmIG1Eb2N1bWVudFVSSSkgewogICAgIG5zQ09NUHRyPG5zSVByb21wdD4gcHJv
bXB0OwogICAgIG5zQ09NUHRyPG5zUElET01XaW5kb3c+IHdpbmRvdyA9IEdldFdpbmRvdygpOwog
ICAgIGlmICh3aW5kb3cpIHsKICAgICAgIHdpbmRvdy0+R2V0UHJvbXB0ZXIoZ2V0dGVyX0FkZFJl
ZnMocHJvbXB0KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9NYWtlZmlsZS5p
biBiL2RvY3NoZWxsL2Jhc2UvTWFrZWZpbGUuaW4KLS0tIGEvZG9jc2hlbGwvYmFzZS9NYWtlZmls
ZS5pbgorKysgYi9kb2NzaGVsbC9iYXNlL01ha2VmaWxlLmluCkBAIC04NSw5ICs4NSwxMCBAQCBp
bmNsdWRlICQodG9wc3JjZGlyKS9jb25maWcvY29uZmlnLm1rCiBpbmNsdWRlICQodG9wc3JjZGly
KS9pcGMvY2hyb21pdW0vY2hyb21pdW0tY29uZmlnLm1rCiBpbmNsdWRlICQodG9wc3JjZGlyKS9j
b25maWcvcnVsZXMubWsKIAogTE9DQUxfSU5DTFVERVMgKz0gXAogICAtSSQoc3JjZGlyKS8uLi9z
aGlzdG9yeS9zcmMgXAogICAtSSQodG9wc3JjZGlyKS9kb20vYmFzZSBcCiAgIC1JJCh0b3BzcmNk
aXIpL2xheW91dC9iYXNlIFwKICAgLUkkKHRvcHNyY2RpcikveHBjb20vZHMgXAorICAtSSQodG9w
c3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKICAgJChOVUxMKQpkaWZmIC0tZ2l0IGEvZG9jc2hl
bGwvYmFzZS9uc0RvY1NoZWxsLmNwcCBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKLS0t
IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAorKysgYi9kb2NzaGVsbC9iYXNlL25zRG9j
U2hlbGwuY3BwCkBAIC0xNzcsMTYgKzE3NywxNyBAQAogI2luY2x1ZGUgIm5zSVdlYkJyb3dzZXJQ
cmludC5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJuc1BsdWdpbkVycm9yLmgiCiAjaW5jbHVkZSAi
bnNDb250ZW50VXRpbHMuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRFcnJvcnMuaCIKICNpbmNsdWRl
ICJuc0lDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5
LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2luY2x1ZGUgIm5zWFVMQXBwQVBJ
LmgiCiAKICNpbmNsdWRlICJuc0RPTU5hdmlnYXRpb25UaW1pbmcuaCIKICNpbmNsdWRlICJuc0lU
aW1lZENoYW5uZWwuaCIKICNpbmNsdWRlICJtb3ppbGxhL1N0YXJ0dXBUaW1lbGluZS5oIgogI2lu
Y2x1ZGUgIm5zSUZyYW1lTWVzc2FnZU1hbmFnZXIuaCIKIApAQCAtNzI5LDE2ICs3MzAsMTcgQEAg
bnNEb2NTaGVsbDo6bnNEb2NTaGVsbCgpOgogICAgIG1CdXN5RmxhZ3MoQlVTWV9GTEFHU19OT05F
KSwKICAgICBtQXBwVHlwZShuc0lEb2NTaGVsbDo6QVBQX1RZUEVfVU5LTk9XTiksCiAgICAgbUxv
YWRUeXBlKDApLAogICAgIG1NYXJnaW5XaWR0aCgtMSksCiAgICAgbU1hcmdpbkhlaWdodCgtMSks
CiAgICAgbUl0ZW1UeXBlKHR5cGVDb250ZW50KSwKICAgICBtUHJldmlvdXNUcmFuc0luZGV4KC0x
KSwKICAgICBtTG9hZGVkVHJhbnNJbmRleCgtMSksCisgICAgbVNhbmRib3hGbGFncygwKSwKICAg
ICBtQ3JlYXRlZChmYWxzZSksCiAgICAgbUFsbG93U3ViZnJhbWVzKHRydWUpLAogICAgIG1BbGxv
d1BsdWdpbnModHJ1ZSksCiAgICAgbUFsbG93SmF2YXNjcmlwdCh0cnVlKSwKICAgICBtQWxsb3dN
ZXRhUmVkaXJlY3RzKHRydWUpLAogICAgIG1BbGxvd0ltYWdlcyh0cnVlKSwKICAgICBtQWxsb3dE
TlNQcmVmZXRjaCh0cnVlKSwKICAgICBtQWxsb3dXaW5kb3dDb250cm9sKHRydWUpLApAQCAtMzAx
MCwxNiArMzAxMiw3MyBAQCBuc0RvY1NoZWxsOjpGaW5kSXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5p
CiAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoZm91bmRJdGVtKSB7CiAgICAgICAgICAgICAvLyBXZSByZXR1cm4gZm91bmRJdGVtIGhlcmUg
ZXZlbiBpZiBpdCdzIG5vdCBhbiBhY3RpdmUKICAgICAgICAgICAgIC8vIGl0ZW0gc2luY2UgYWxs
IHRoZSBuYW1lcyB3ZSd2ZSBkZWFsdCB3aXRoIHNvIGZhciBhcmUKICAgICAgICAgICAgIC8vIHNw
ZWNpYWwgY2FzZXMgdGhhdCB3ZSB3b24ndCBib3RoZXIgbG9va2luZyBmb3IgZnVydGhlci4KIAor
ICAgICAgICAgICAgLy8gSWYgb3VyIGRvY3VtZW50IGlzIHNhbmRib3hlZCwgd2UgbmVlZCB0byBk
byBzb21lIGV4dHJhIGNoZWNrcy4KKyAgICAgICAgICAgIFBSVWludDMyIHNhbmRib3hGbGFncyA9
IDA7CisKKyAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19HZXRJbnRl
cmZhY2UoYU9yaWdpbmFsUmVxdWVzdG9yKTsKKworICAgICAgICAgICAgaWYgKGRvYykgeworICAg
ICAgICAgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2FuZGJveEZsYWdzKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChzYW5kYm94RmxhZ3MpIHsKKyAgICAgICAgICAgICAg
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiByb290OworICAgICAgICAgICAgICAgIEdl
dFNhbWVUeXBlUm9vdFRyZWVJdGVtKGdldHRlcl9BZGRSZWZzKHJvb3QpKTsKKworICAgICAgICAg
ICAgICAgIC8vIElzIHRoZSBmb3VuZCBpdGVtIG5vdCBhIHRvcCBsZXZlbCBicm93c2luZyBjb250
ZXh0IGFuZCBub3Qgb3Vyc2VsZiA/CisgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hl
bGxUcmVlSXRlbT4gc2VsZkFzSXRlbSA9IHN0YXRpY19jYXN0PG5zSURvY1NoZWxsVHJlZUl0ZW0g
Kj4odGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kSXRlbSAhPSByb290ICYmIGZvdW5k
SXRlbSAhPSBzZWxmQXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFyZSB3ZSBhbiBh
bmNlc3RvciBvZiB0aGUgZm91bmRJdGVtID8KKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0Fu
Y2VzdG9yID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hl
bGxUcmVlSXRlbT4gcGFyZW50QXNJdGVtOworICAgICAgICAgICAgICAgICAgICBHZXRTYW1lVHlw
ZVBhcmVudChnZXR0ZXJfQWRkUmVmcyhwYXJlbnRBc0l0ZW0pKTsKKworICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAocGFyZW50QXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuc0NP
TVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiB0bXA7CisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJlbnRBc0l0ZW0tPkdldFBhcmVudChnZXR0ZXJfQWRkUmVmcyh0bXApKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gc2VsZkFzSXRlbSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzQW5jZXN0b3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50QXNJdGVtID0gdG1wOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FuY2VzdG9yKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBObywgd2UgYXJlIG5vdCBhbiBhbmNlc3RvciBhbmQgb3VyIGRvY3VtZW50IGlz
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW5kYm94ZWQsIHdlIGNhbid0IGFsbG93IHRo
aXMuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAvLyBUb3AgbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAtIGlzIGl0IGFuIGFuY2VzdG9yIG9m
IG91cnMgPworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVt
PiB0bXA7CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRS
ZWZzKHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0bXApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgdG1wID09IGZvdW5kSXRlbSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYW5jZXN0b3IsIGFuZCB3ZSBhcmUgc2Fu
ZGJveGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBhbGxvdy10b3At
bmF2aWdhdGlvbiBpcyBzZXQsIHdlIGNhbid0IGFsbG93IHRoaXMuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FU
SU9OKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEl0ZW0gPSBuc251bGw7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgdG1wLT5HZXRQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IGZvdW5kSXRlbS5zd2FwKCpfcmV0dmFsKTsKICAgICAgICAgICAgIHJldHVybiBOU19PSzsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIEtlZXAgbG9va2luZwogICAgICAgICAKICAgICAvLyBG
aXJzdCB3ZSBjaGVjayBvdXIgbmFtZS4KQEAgLTUwNTAsMTYgKzUxMDksMzAgQEAgbnNEb2NTaGVs
bDo6U2V0SXNBcHBUYWIoYm9vbCBhSXNBcHBUYWIpCiBOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxs
OjpHZXRJc0FwcFRhYihib29sICphSXNBcHBUYWIpCiB7CiAgICphSXNBcHBUYWIgPSBtSXNBcHBU
YWI7CiAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6U2V0
U2FuZGJveEZsYWdzKFBSVWludDMyIGFTYW5kYm94RmxhZ3MpCit7CisgICAgbVNhbmRib3hGbGFn
cyA9IGFTYW5kYm94RmxhZ3M7CisgICAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1Q
Cituc0RvY1NoZWxsOjpHZXRTYW5kYm94RmxhZ3MoUFJVaW50MzIgICphU2FuZGJveEZsYWdzKQor
eworICAgICphU2FuZGJveEZsYWdzID0gbVNhbmRib3hGbGFnczsKKyAgICByZXR1cm4gTlNfT0s7
Cit9CisKK05TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlNldFZpc2liaWxpdHkoYm9vbCBhVmlz
aWJpbGl0eSkKIHsKICAgICBpZiAoIW1Db250ZW50Vmlld2VyKQogICAgICAgICByZXR1cm4gTlNf
T0s7CiAgICAgaWYgKGFWaXNpYmlsaXR5KSB7CiAgICAgICAgIG1Db250ZW50Vmlld2VyLT5TaG93
KCk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtODI4OSwxNiArODM2MiwzMiBAQCBuc0RvY1NoZWxs
OjpJbnRlcm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hl
bGxUcmVlSXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2luZG93
VGFyZ2V0LCBuc251bGwsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0Fk
ZFJlZnModGFyZ2V0SXRlbSkpOwogCiAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiB0YXJn
ZXREb2NTaGVsbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHRhcmdldEl0ZW0pOwogICAgICAgICAKICAg
ICAgICAgYm9vbCBpc05ld1dpbmRvdyA9IGZhbHNlOwogICAgICAgICBpZiAoIXRhcmdldERvY1No
ZWxsKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgZG9jc2hlbGwncyBkb2N1bWVudCBpcyBzYW5k
Ym94ZWQgYW5kIHdhcyB0cnlpbmcgdG8KKyAgICAgICAgICAgIC8vIG5hdmlnYXRlL2xvYWQgYSBm
cmFtZSBpdCB3YXNuJ3QgYWxsb3dlZCB0byBhY2Nlc3MsIHRoZQorICAgICAgICAgICAgLy8gRmlu
ZEl0ZW1XaXRoTmFtZSBhYm92ZSB3aWxsIGhhdmUgcmV0dXJuZWQgbnVsbCBmb3IgdGhlIHRhcmdl
dAorICAgICAgICAgICAgLy8gaXRlbSAtIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgb3BlbiBh
IG5ldyB3aW5kb3cgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAvLyB0aG91Z2guIENoZWNrIGlm
IHdlIGFyZSBzYW5kYm94ZWQgYW5kIGJhaWwgb3V0IGhlcmUgaWYgc28uCisgICAgICAgICAgICBO
U19FTlNVUkVfVFJVRShtQ29udGVudFZpZXdlciwgTlNfRVJST1JfRkFJTFVSRSk7CisgICAgICAg
ICAgICBuc0lEb2N1bWVudCogZG9jID0gbUNvbnRlbnRWaWV3ZXItPkdldERvY3VtZW50KCk7Cisg
ICAgICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworCisgICAgICAgICAgICBpZiAo
ZG9jKSB7CisgICAgICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3Mo
KTsKKyAgICAgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX05BVklHQVRJ
T04pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lE
T01XaW5kb3c+IHdpbiA9CiAgICAgICAgICAgICAgICAgZG9fR2V0SW50ZXJmYWNlKEdldEFzU3Vw
cG9ydHModGhpcykpOwogICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUod2luLCBOU19FUlJPUl9O
T1RfQVZBSUxBQkxFKTsKIAogICAgICAgICAgICAgbnNEZXBlbmRlbnRTdHJpbmcgbmFtZShhV2lu
ZG93VGFyZ2V0KTsKICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURPTVdpbmRvdz4gbmV3V2luOwog
ICAgICAgICAgICAgcnYgPSB3aW4tPk9wZW4oRW1wdHlTdHJpbmcoKSwgLy8gVVJMIHRvIGxvYWQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsICAgICAgICAgIC8vIHdpbmRvdyBuYW1l
CkBAIC05MTAwLDE4ICs5MTg5LDMxIEBAIG5zRG9jU2hlbGw6OkRvVVJJTG9hZChuc0lVUkkgKiBh
VVJJLAogICAgICAgICB9CiAgICAgICAgIC8vIFNldCB0aGUgcmVmZXJyZXIgZXhwbGljaXRseQog
ICAgICAgICBpZiAoYVJlZmVycmVyVVJJICYmIGFTZW5kUmVmZXJyZXIpIHsKICAgICAgICAgICAg
IC8vIFJlZmVycmVyIGlzIGN1cnJlbmx5IG9ubHkgc2V0IGZvciBsaW5rIGNsaWNrcyBoZXJlLgog
ICAgICAgICAgICAgaHR0cENoYW5uZWwtPlNldFJlZmVycmVyKGFSZWZlcnJlclVSSSk7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IG93bmVyUHJpbmNpcGFs
KGRvX1F1ZXJ5SW50ZXJmYWNlKGFPd25lcikpOwotICAgIG5zQ29udGVudFV0aWxzOjpTZXRVcENo
YW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1ZSk7CisgICAgbnND
T01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbDsKKworICAgIC8vIElmIHRoZSBjb250
ZW50IGJlaW5nIGxvYWRlZCBzaG91bGQgYmUgc2FuZGJveGVkIHdpdGggcmVzcGVjdCB0byBvcmln
aW4KKyAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBudWxsIHByaW5jaXBhbCBoZXJlLCBh
bmQgdGhlbiB0ZWxsCisgICAgLy8gbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyIHRv
IGZvcmNlIGl0IHRvIGJlIHNldCBhcyB0aGUKKyAgICAvLyBjaGFubmVsIG93bmVyLgorICAgIGlm
IChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikgeworICAgICAgICBvd25lclByaW5j
aXBhbCA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnVsbHByaW5jaXBhbDsxIik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHNhbmRib3hlZCAtIHdlIGFsbG93IHRoZSBj
b250ZW50IHRvIGFzc3VtZSBpdHMgbmF0dXJhbCBvd25lci4KKyAgICAgICAgb3duZXJQcmluY2lw
YWwgPSBkb19RdWVyeUludGVyZmFjZShhT3duZXIpOworICAgIH0KKworICAgIG5zQ29udGVudFV0
aWxzOjpTZXRVcENoYW5uZWxPd25lcihvd25lclByaW5jaXBhbCwgY2hhbm5lbCwgYVVSSSwgdHJ1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TYW5kYm94RmxhZ3Mg
JiBTQU5EQk9YRURfT1JJR0lOKSk7CiAKICAgICBuc0NPTVB0cjxuc0lTY3JpcHRDaGFubmVsPiBz
Y3JpcHRDaGFubmVsID0gZG9fUXVlcnlJbnRlcmZhY2UoY2hhbm5lbCk7CiAgICAgaWYgKHNjcmlw
dENoYW5uZWwpIHsKICAgICAgICAgLy8gQWxsb3cgZXhlY3V0aW9uIGFnYWluc3Qgb3VyIGNvbnRl
eHQgaWYgdGhlIHByaW5jaXBhbHMgbWF0Y2gKICAgICAgICAgc2NyaXB0Q2hhbm5lbC0+CiAgICAg
ICAgICAgICBTZXRFeGVjdXRpb25Qb2xpY3kobnNJU2NyaXB0Q2hhbm5lbDo6RVhFQ1VURV9OT1JN
QUwpOwogICAgIH0KIApAQCAtMTE4MzEsMTYgKzExOTMzLDMxIEBAIG5zRG9jU2hlbGw6OlNob3Vs
ZEJsb2NrTG9hZGluZ0ZvckJhY2tCdXQKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICBib29s
IGNhbkdvRm9yd2FyZCA9IGZhbHNlOwogICBHZXRDYW5Hb0ZvcndhcmQoJmNhbkdvRm9yd2FyZCk7
CiAgIHJldHVybiBjYW5Hb0ZvcndhcmQ7CiB9CiAKK2Jvb2wgCituc0RvY1NoZWxsOjpQbHVnaW5z
QWxsb3dlZEluQ3VycmVudERvYygpCit7CisgIGJvb2wgcGx1Z2luc0FsbG93ZWQgPSBmYWxzZTsK
KworICBpZiAobUNvbnRlbnRWaWV3ZXIpIHsKKyAgICBuc0lEb2N1bWVudCAqIGRvYyA9IG1Db250
ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworCisgICAgaWYgKGRvYykgeyAKKyAgICAgIGRvYy0+
R2V0QWxsb3dQbHVnaW5zKCZwbHVnaW5zQWxsb3dlZCk7CisgICAgfQorICB9CisgIHJldHVybiBw
bHVnaW5zQWxsb3dlZDsKK30KKwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBXZWIgU2hlbGwgU2Vydmlj
ZXMgQVBJCiAKIC8vVGhpcyBmdW5jdGlvbnMgaXMgb25seSBjYWxsZWQgd2hlbiBhIG5ldyBjaGFy
c2V0IGlzIGRldGVjdGVkIGluIGxvYWRpbmcgYSBkb2N1bWVudC4gCiAvL0l0cyBuYW1lIHNob3Vs
ZCBiZSBjaGFuZ2VkIHRvICJDaGFyc2V0UmVsb2FkRG9jdW1lbnQiCiBOU19JTUVUSE9ESU1QCiBu
c0RvY1NoZWxsOjpSZWxvYWREb2N1bWVudChjb25zdCBjaGFyKiBhQ2hhcnNldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYVNvdXJjZSkKZGlmZiAtLWdpdCBhL2RvY3NoZWxs
L2Jhc2UvbnNEb2NTaGVsbC5oIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKLS0tIGEvZG9j
c2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmgK
QEAgLTc1NSwxNiArNzU1LDE4IEBAIHByb3RlY3RlZDoKICAgICAvLyBDcmVhdGUoKSBpcyBjYWxs
ZWQsIHRoZSB0eXBlIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UuCiAgICAgUFJJbnQzMiAgICAg
ICAgICAgICAgICAgICAgbUl0ZW1UeXBlOwogCiAgICAgLy8gSW5kZXggaW50byB0aGUgU0hUcmFu
c2FjdGlvbiBsaXN0LCBpbmRpY2F0aW5nIHRoZSBwcmV2aW91cyBhbmQgY3VycmVudAogICAgIC8v
IHRyYW5zYWN0aW9uIGF0IHRoZSB0aW1lIHRoYXQgdGhpcyBEb2NTaGVsbCBiZWdpbnMgdG8gbG9h
ZAogICAgIFBSSW50MzIgICAgICAgICAgICAgICAgICAgIG1QcmV2aW91c1RyYW5zSW5kZXg7CiAg
ICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbUxvYWRlZFRyYW5zSW5kZXg7CiAKKyAgICBQ
UlVpbnQzMiAgICAgICAgICAgICAgICAgICBtU2FuZGJveEZsYWdzOworCiAgICAgYm9vbCAgICAg
ICAgICAgICAgICAgICAgICAgbUNyZWF0ZWQ7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAg
ICAgbUFsbG93U3ViZnJhbWVzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxv
d1BsdWdpbnM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93SmF2YXNjcmlw
dDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dNZXRhUmVkaXJlY3RzOwog
ICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ltYWdlczsKICAgICBib29sICAg
ICAgICAgICAgICAgICAgICAgICBtQWxsb3dETlNQcmVmZXRjaDsKICAgICBib29sICAgICAgICAg
ICAgICAgICAgICAgICBtQWxsb3dXaW5kb3dDb250cm9sOwpAQCAtNzk4LDE3ICs4MDAsMTcgQEAg
cHJvdGVjdGVkOgogCiAgICAgLy8gSW5kaWNhdGVzIHRoYXQgYSBEb2NTaGVsbCBpbiB0aGlzICJk
b2NzaGVsbCB0cmVlIiBpcyBwcmludGluZwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAg
IG1Jc1ByaW50aW5nT3JQUDsKIAogICAgIC8vIEluZGljYXRlcyB0byBDcmVhdGVDb250ZW50Vmll
d2VyKCkgdGhhdCBpdCBpcyBzYWZlIHRvIGNhY2hlIHRoZSBvbGQKICAgICAvLyBwcmVzZW50YXRp
b24gb2YgdGhlIHBhZ2UsIGFuZCB0byBTZXR1cE5ld1ZpZXdlcigpIHRoYXQgdGhlIG9sZCB2aWV3
ZXIKICAgICAvLyBzaG91bGQgYmUgcGFzc2VkIGEgU0hFbnRyeSB0byBzYXZlIGl0c2VsZiBpbnRv
LgogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1TYXZpbmdPbGRWaWV3ZXI7Ci0KKyAg
ICAKICAgICAvLyBAc2VlIG5zSURvY1NoZWxsSGlzdG9yeTo6Y3JlYXRlZER5bmFtaWNhbGx5CiAg
ICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUR5bmFtaWNhbGx5Q3JlYXRlZDsKICNpZmRl
ZiBERUJVRwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1JbkVuc3VyZVNjcmlwdEVu
djsKICNlbmRpZgogICAgIFBSVWludDY0ICAgICAgICAgICAgICAgICAgIG1IaXN0b3J5SUQ7CiAK
ICAgICBzdGF0aWMgbnNJVVJJRml4dXAgKnNVUklGaXh1cDsKZGlmZiAtLWdpdCBhL2RvY3NoZWxs
L2Jhc2UvbnNJRG9jU2hlbGwuaWRsIGIvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKLS0t
IGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0lE
b2NTaGVsbC5pZGwKQEAgLTM0LDE3ICszNCwxNyBAQCBpbnRlcmZhY2UgbnNJU0hFbnRyeTsKIGlu
dGVyZmFjZSBuc0lMYXlvdXRIaXN0b3J5U3RhdGU7CiBpbnRlcmZhY2UgbnNJU2VjdXJlQnJvd3Nl
clVJOwogaW50ZXJmYWNlIG5zSURPTVN0b3JhZ2U7CiBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsOwog
aW50ZXJmYWNlIG5zSVdlYkJyb3dzZXJQcmludDsKIGludGVyZmFjZSBuc0lWYXJpYW50OwogaW50
ZXJmYWNlIG5zSVByaXZhY3lUcmFuc2l0aW9uT2JzZXJ2ZXI7CiAKLVtzY3JpcHRhYmxlLCBidWls
dGluY2xhc3MsIHV1aWQoODllYTlmMzItMThlYy00MTNiLTllMmMtY2U5YTRjODUxYjFjKV0KK1tz
Y3JpcHRhYmxlLCBidWlsdGluY2xhc3MsIHV1aWQoOWIyODMzMzctMDk3ZC00ZmE4LWEyZGEtOTE2
MzE4ZWFmODI4KV0KIGludGVyZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiB7CiAgIC8q
KgogICAgKiBMb2FkcyBhIGdpdmVuIFVSSS4gIFRoaXMgd2lsbCBnaXZlIHByaW9yaXR5IHRvIGxv
YWRpbmcgdGhlIHJlcXVlc3RlZCBVUkkKICAgICogaW4gdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcJ
dGhpcyBpbnRlcmZhY2UuICBJZiBpdCBjYW4ndCBiZSBsb2FkZWQgaGVyZQogICAgKiBob3dldmVy
LCB0aGUgVVJMIGRpc3BhdGNoZXIgd2lsbCBnbyB0aHJvdWdoIGl0cyBub3JtYWwgcHJvY2VzcyBv
ZiBjb250ZW50CiAgICAqIGxvYWRpbmcuCiAgICAqCkBAIC02MDEsOSArNjAxLDMxIEBAIGludGVy
ZmFjZSBuc0lEb2NTaGVsbCA6IG5zSVN1cHBvcnRzCiAgICAqLwogICBhdHRyaWJ1dGUgYm9vbCBp
c0Jyb3dzZXJGcmFtZTsKIAogICAvKgogICAgKiBJcyB0aGlzIGRvY3NoZWxsIGNvbnRhaW5lZCBp
biBhbiA8aWZyYW1lIG1vemJyb3dzZXI+LCBlaXRoZXIgZGlyZWN0bHkgb3IKICAgICogaW5kaXJl
Y3RseT8KICAgICovCiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sIGNvbnRhaW5lZEluQnJvd3Nl
ckZyYW1lOworCisgIC8qKgorICAgKiBUaGUgc2FuZGJveCBmbGFncyBvbiB0aGUgZG9jc2hlbGwu
IFRoZXNlIHJlZmxlY3QgdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94CisgICAqIGF0dHJpYnV0ZSBv
ZiB0aGUgYXNzb2NpYXRlZCBJRlJBTUUgb3IgQ1NQLXByb3RlY3RhYmxlIGNvbnRlbnQsIGlmCisg
ICAqIGV4aXN0ZW50LiBTZWUgdGhlIEhUTUw1IHNwZWMgZm9yIG1vcmUgZGV0YWlscy4KKyAgICog
VGhlc2UgZmxhZ3Mgb24gdGhlIGRvY3NoZWxsIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2Yg
dGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlLCB3aGljaCBpcyBtb2RpZmlhYmxlLiBUaGV5IGFy
ZSBvbmx5IHVzZWQgd2hlbiBsb2FkaW5nIG5ldworICAgKiBjb250ZW50LCBzYW5kYm94IGZsYWdz
IGFyZSBhbHNvIGltbXV0YWJseSBzZXQgb24gdGhlIGRvY3VtZW50IHdoZW4gaXQgaXMKKyAgICog
bG9hZGVkLgorICAgKiBUaGUgc2FuZGJveCBmbGFncyBvZiBhIGRvY3VtZW50IGRlcGVuZCBvbiB0
aGUgc2FuZGJveCBmbGFncyBvbiBpdHMKKyAgICogZG9jc2hlbGwgYW5kIG9mIGl0cyBwYXJlbnQg
ZG9jdW1lbnQsIGlmIGFueS4KKyAgICogU2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRoZSBwb3Nz
aWJsZSBmbGFncy4KKyAgICovCisgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHNhbmRib3hGbGFn
czsKKworICAvKioKKyAgICogQXJlIHBsdWdpbnMgYWxsb3dlZCBpbiB0aGUgY3VycmVudCBkb2N1
bWVudCBsb2FkZWQgaW4gdGhpcyBkb2NzaGVsbCA/CisgICAqIChpZiB0aGVyZSBpcyBvbmUpLiBU
aGlzIGRlcGVuZHMgb24gd2hldGhlciBwbHVnaW5zIGFyZSBhbGxvd2VkIGJ5IHRoaXMKKyAgICog
ZG9jc2hlbGwgaXRzZWxmIG9yIGlmIHRoZSBkb2N1bWVudCBpcyBzYW5kYm94ZWQgYW5kIGhlbmNl
IHBsdWdpbnMgc2hvdWxkCisgICAqIG5vdCBiZSBhbGxvd2VkLgorICAgKi8KKyAgW25vc2NyaXB0
LCBub3R4cGNvbV0gYm9vbCBwbHVnaW5zQWxsb3dlZEluQ3VycmVudERvYygpOwogfTsKZGlmZiAt
LWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xvYmFsV2lu
ZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9tL2Jhc2Uv
bnNHbG9iYWxXaW5kb3cuY3BwCkBAIC0yMTcsMTYgKzIxNywxNyBAQAogI2luY2x1ZGUgIm1vekF1
dG9Eb2NVcGRhdGUuaCIKIAogI2luY2x1ZGUgIm1vemlsbGEvVGVsZW1ldHJ5LmgiCiAjaW5jbHVk
ZSAibnNMb2NhdGlvbi5oIgogI2luY2x1ZGUgIm5zV3JhcHBlckNhY2hlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIm5zRE9NRXZlbnRUYXJnZXRIZWxwZXIuaCIKICNpbmNsdWRlICJuc0lBcHBzU2Vydmlj
ZS5oIgogI2luY2x1ZGUgInBycm5nLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAog
I2lmZGVmIEFORFJPSUQKICNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgogI2VuZGlmCiAKICNpZmRl
ZiBQUl9MT0dHSU5HCiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnRE9NTGVha1BSTG9nOwogI2Vu
ZGlmCkBAIC04MjIzLDE2ICs4MjI0LDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRTZXNzaW9uU3Rv
cmFnZShuc0lET00KICAgaWYgKCFtU2Vzc2lvblN0b3JhZ2UpIHsKICAgICAqYVNlc3Npb25TdG9y
YWdlID0gbnNudWxsOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1
bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAg
ICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBm
bGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAg
aWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX09SSUdJTikpIHsK
KyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5z
cmVzdWx0IHJ2ID0gZG9jU2hlbGwtPkdldFNlc3Npb25TdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5j
aXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb2N1bWVudFVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1TZXNzaW9uU3Rv
cmFnZSkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICNpZmRlZiBQUl9MT0dH
SU5HCiAgICAgaWYgKFBSX0xPR19URVNUKGdET01MZWFrUFJMb2csIFBSX0xPR19ERUJVRykpIHsK
QEAgLTgyODgsMTYgKzgyOTUsMjIgQEAgbnNHbG9iYWxXaW5kb3c6OkdldExvY2FsU3RvcmFnZShu
c0lET01TdAogICAgICAgZG9fR2V0U2VydmljZSgiQG1vemlsbGEub3JnL2RvbS9zdG9yYWdlbWFu
YWdlcjsxIiwgJnJ2KTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgbnNT
dHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50
LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRv
Y3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFs
bG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRi
b3hGbGFncygpICYgU0FOREJPWEVEX09SSUdJTikpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9E
T01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zSURvY1NoZWxsKiBkb2NTaGVsbCA9IEdl
dERvY1NoZWxsKCk7CiAgICAgbnNDT01QdHI8bnNJTG9hZENvbnRleHQ+IGxvYWRDb250ZXh0ID0g
ZG9fUXVlcnlJbnRlcmZhY2UoZG9jU2hlbGwpOwogCiAgICAgcnYgPSBzdG9yYWdlTWFuYWdlci0+
R2V0TG9jYWxTdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRDb250ZXh0
ICYmIGxvYWRDb250ZXh0LT5Vc2VQcml2YXRlQnJvd3NpbmcoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobUxvY2Fs
U3RvcmFnZSkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQgYS9k
b20vYmFzZS9uc1BsdWdpbkFycmF5LmNwcCBiL2RvbS9iYXNlL25zUGx1Z2luQXJyYXkuY3BwCi0t
LSBhL2RvbS9iYXNlL25zUGx1Z2luQXJyYXkuY3BwCisrKyBiL2RvbS9iYXNlL25zUGx1Z2luQXJy
YXkuY3BwCkBAIC0xMCwxNiArMTAsMTggQEAKICNpbmNsdWRlICJuc0lET01OYXZpZ2F0b3IuaCIK
ICNpbmNsdWRlICJuc0lET01NaW1lVHlwZS5oIgogI2luY2x1ZGUgIm5zSVBsdWdpbkhvc3QuaCIK
ICNpbmNsdWRlICJuc0lEb2NTaGVsbC5oIgogI2luY2x1ZGUgIm5zSVdlYk5hdmlnYXRpb24uaCIK
ICNpbmNsdWRlICJuc0RPTUNsYXNzSW5mb0lELmgiCiAjaW5jbHVkZSAibnNQbHVnaW5FcnJvci5o
IgogI2luY2x1ZGUgIm5zUGx1Z2luSG9zdC5oIgorI2luY2x1ZGUgIm5zSUNvbnRlbnRWaWV3ZXIu
aCIKKyNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsK
IHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKIG5zUGx1Z2luQXJyYXk6Om5zUGx1Z2lu
QXJyYXkoTmF2aWdhdG9yKiBuYXZpZ2F0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSURvY1NoZWxsICphRG9jU2hlbGwpCiAgIDogbU5hdmlnYXRvcihuYXZpZ2F0b3IpLAogICAg
IG1QbHVnaW5Ib3N0KGRvX0dldFNlcnZpY2UoTU9aX1BMVUdJTl9IT1NUX0NPTlRSQUNUSUQpKSwK
QEAgLTYzLDE5ICs2NSwxOSBAQCBuc1BsdWdpbkFycmF5OjpHZXRMZW5ndGgoUFJVaW50MzIqIGFM
ZW5nCiB9CiAKIGJvb2wKIG5zUGx1Z2luQXJyYXk6OkFsbG93UGx1Z2lucygpCiB7CiAgIGJvb2wg
YWxsb3dQbHVnaW5zID0gZmFsc2U7CiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9
IGRvX1F1ZXJ5UmVmZXJlbnQobURvY1NoZWxsKTsKIAotICBpZiAoZG9jU2hlbGwpCi0gICAgaWYg
KE5TX0ZBSUxFRChkb2NTaGVsbC0+R2V0QWxsb3dQbHVnaW5zKCZhbGxvd1BsdWdpbnMpKSkKLSAg
ICAgIGFsbG93UGx1Z2lucyA9IGZhbHNlOworICBpZiAoZG9jU2hlbGwpIHsKKyAgICBhbGxvd1Bs
dWdpbnMgPSBkb2NTaGVsbC0+UGx1Z2luc0FsbG93ZWRJbkN1cnJlbnREb2MoKTsKKyAgfQogCiAg
IHJldHVybiBhbGxvd1BsdWdpbnM7CiB9CiAKIG5zSURPTVBsdWdpbioKIG5zUGx1Z2luQXJyYXk6
OkdldEl0ZW1BdChQUlVpbnQzMiBhSW5kZXgsIG5zcmVzdWx0KiBhUmVzdWx0KQogewogICAqYVJl
c3VsdCA9IE5TX09LOwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1M
SUZyYW1lRWxlbWVudC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVF
bGVtZW50LmlkbAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVt
ZW50LmlkbAorKysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50
LmlkbApAQCAtMTEsMzIgKzExLDMyIEBACiAgKgogICogVGhpcyBpbnRlcmZhY2UgaXMgdHJ5aW5n
IHRvIGZvbGxvdyB0aGUgRE9NIExldmVsIDIgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDov
L3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC8KICAqCiAgKiB3aXRoIGNoYW5nZXMgZnJv
bSB0aGUgd29yay1pbi1wcm9ncmVzcyBXSEFUV0cgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8KICAqLwogCi1b
c2NyaXB0YWJsZSwgdXVpZCg5N0U0RjBFMS1CRDI3LTQwRUMtOTI4Ny01NjM0REFGMTVCNzMpXQor
W3NjcmlwdGFibGUsIHV1aWQoNTJmNjI0NGItYjFmNS00ZjRjLThmZjMtN2UxNDYzMTZmNDExKV0K
IGludGVyZmFjZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCA6IG5zSURPTUhUTUxFbGVtZW50CiB7
CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGFsaWduOwogICAgICAgICAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBmcmFtZUJvcmRlcjsKICAgICAgICAgICAgYXR0
cmlidXRlIERPTVN0cmluZyAgICAgICAgaGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nICAgICAgICBsb25nRGVzYzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAg
ICAgICAgbWFyZ2luSGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBtYXJnaW5XaWR0aDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFt
ZTsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc2Nyb2xsaW5nOwogICAg
ICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzcmM7CiAgICAgICAgICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgICAgICAgIHdpZHRoOwogICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZl
bCAyOgogICByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRG9jdW1lbnQgICBjb250ZW50RG9jdW1l
bnQ7CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01XaW5kb3cgICAgIGNvbnRlbnRXaW5kb3c7
CiAKLQorICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzYW5kYm94OwogICAv
LyBNb3ppbGxhIGV4dGVuc2lvbnMKICAgLy8gaWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1v
ekFsbG93RnVsbFNjcmVlbiBhdHRyaWJ1dGUgdG8gYmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3Jl
IHRvIGFsbG93IGNvbnRlbnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxs
LXNjcmVlbgogICAvLyBtb2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBo
cD90aXRsZT1HZWNrbzpGdWxsU2NyZWVuQVBJCiAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFu
ICAgICAgICAgIG1vekFsbG93RnVsbFNjcmVlbjsKIH07CmRpZmYgLS1naXQgYS9kb20vc3JjL2pz
dXJsL01ha2VmaWxlLmluIGIvZG9tL3NyYy9qc3VybC9NYWtlZmlsZS5pbgotLS0gYS9kb20vc3Jj
L2pzdXJsL01ha2VmaWxlLmluCisrKyBiL2RvbS9zcmMvanN1cmwvTWFrZWZpbGUuaW4KQEAgLTI1
LDE2ICsyNSwxNyBAQCBYUElETFNSQ1MJPSBcCiBDUFBTUkNTCQk9IG5zSlNQcm90b2NvbEhhbmRs
ZXIuY3BwCiAKIEVYUE9SVFMJCT0gJChzcmNkaXIpL25zSlNQcm90b2NvbEhhbmRsZXIuaAogCiBM
T0NBTF9JTkNMVURFUyArPSBcCiAJCS1JJChzcmNkaXIpIFwKIAkJLUkkKHRvcHNyY2RpcikvZG9t
L2Jhc2UgXAogCQktSSQodG9wc3JjZGlyKS9uZXR3ZXJrL2Jhc2Uvc3JjIFwKKwkJLUkkKHRvcHNy
Y2RpcikvY29udGVudC9iYXNlL3NyYyBcCiAKIGlmZGVmIEJVSUxEX0RFQlVHX0dDCiBERUZJTkVT
CQkrPSAtRERFQlVHX0dDCiBlbmRpZgogCiBESVJTICAgICAgICAgICAgPSAkKE5VTEwpCiBURVNU
X0RJUlMgKz0gdGVzdAogCmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhh
bmRsZXIuY3BwIGIvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcAotLS0gYS9k
b20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwCisrKyBiL2RvbS9zcmMvanN1cmwv
bnNKU1Byb3RvY29sSGFuZGxlci5jcHAKQEAgLTM5LDE2ICszOSwxNyBAQAogI2luY2x1ZGUgIm5z
VGhyZWFkVXRpbHMuaCIKICNpbmNsdWRlICJuc0lKU0NvbnRleHRTdGFjay5oIgogI2luY2x1ZGUg
Im5zSVNjcmlwdENoYW5uZWwuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgogI2luY2x1ZGUg
Im5zSU9iamVjdElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0T3V0cHV0U3RyZWFt
LmgiCiAjaW5jbHVkZSAibnNJV3JpdGFibGVQcm9wZXJ0eUJhZzIuaCIKICNpbmNsdWRlICJuc0lD
b250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBz
dGF0aWMgTlNfREVGSU5FX0NJRChrSlNVUklDSUQsIE5TX0pTVVJJX0NJRCk7CiAKIGNsYXNzIG5z
SlNUaHVuayA6IHB1YmxpYyBuc0lJbnB1dFN0cmVhbQogewogcHVibGljOgogICAgIG5zSlNUaHVu
aygpOwogCkBAIC0xODUsMTYgKzE4NiwyMyBAQCBuc3Jlc3VsdCBuc0pTVGh1bms6OkV2YWx1YXRl
U2NyaXB0KG5zSUNoCiAgICAgLy8gR2V0IHRoZSBnbG9iYWwgb2JqZWN0IHdlIHNob3VsZCBiZSBy
dW5uaW5nIG9uLgogICAgIG5zSVNjcmlwdEdsb2JhbE9iamVjdCogZ2xvYmFsID0gR2V0R2xvYmFs
T2JqZWN0KGFDaGFubmVsKTsKICAgICBpZiAoIWdsb2JhbCkgewogICAgICAgICByZXR1cm4gTlNf
RVJST1JfRkFJTFVSRTsKICAgICB9CiAKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW4o
ZG9fUXVlcnlJbnRlcmZhY2UoZ2xvYmFsKSk7CiAKKyAgICAvLyBTYW5kYm94ZWQgZG9jdW1lbnQg
Y2hlY2s6IGphdmFzY3JpcHQ6IFVSSSdzIGFyZSBkaXNhYmxlZAorICAgIC8vIGluIGEgc2FuZGJv
eGVkIGRvY3VtZW50IHVubGVzcyAnYWxsb3ctc2NyaXB0cycgd2FzIHNwZWNpZmllZC4KKyAgICBu
c0lEb2N1bWVudCogZG9jID0gYU9yaWdpbmFsSW5uZXJXaW5kb3ctPkdldEV4dGFudERvYygpOwor
ICAgIGlmIChkb2MgJiYgKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykp
IHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fUkVUVkFMX1VOREVGSU5FRDsKKyAgICB9CisK
ICAgICAvLyBQdXNoIG91ciBwb3B1cCBjb250cm9sIHN0YXRlCiAgICAgbnNBdXRvUG9wdXBTdGF0
ZVB1c2hlciBwb3B1cFN0YXRlUHVzaGVyKHdpbiwgYVBvcHVwU3RhdGUpOwogCiAgICAgLy8gTWFr
ZSBzdXJlIHdlIHN0aWxsIGhhdmUgdGhlIHNhbWUgaW5uZXIgd2luZG93IGFzIHdlIHVzZWQgdG8u
CiAgICAgbnNQSURPTVdpbmRvdyAqaW5uZXJXaW4gPSB3aW4tPkdldEN1cnJlbnRJbm5lcldpbmRv
dygpOwogCiAgICAgaWYgKGlubmVyV2luICE9IGFPcmlnaW5hbElubmVyV2luZG93KSB7CiAgICAg
ICAgIHJldHVybiBOU19FUlJPUl9VTkVYUEVDVEVEOwpkaWZmIC0tZ2l0IGEvZWRpdG9yL2NvbXBv
c2VyL3NyYy9uc0NvbXBvc2VyRG9jdW1lbnRDb21tYW5kcy5jcHAgYi9lZGl0b3IvY29tcG9zZXIv
c3JjL25zQ29tcG9zZXJEb2N1bWVudENvbW1hbmRzLmNwcAotLS0gYS9lZGl0b3IvY29tcG9zZXIv
c3JjL25zQ29tcG9zZXJEb2N1bWVudENvbW1hbmRzLmNwcAorKysgYi9lZGl0b3IvY29tcG9zZXIv
c3JjL25zQ29tcG9zZXJEb2N1bWVudENvbW1hbmRzLmNwcApAQCAtMTUwLDI5ICsxNTAsMjggQEAg
bnNTZXREb2N1bWVudE9wdGlvbnNDb21tYW5kOjpHZXRDb21tYW5kUwogICB7CiAgICAgLy8gZm9y
IHBvc3NpYmxlIHZhbHVlcyBvZiBhbmltYXRpb24gbW9kZSwgc2VlCiAgICAgLy8gaHR0cDovL2x4
ci5tb3ppbGxhLm9yZy9zZWFtb25rZXkvc291cmNlL2ltYWdlL3B1YmxpYy9pbWdJQ29udGFpbmVy
LmlkbAogICAgIHJ2ID0gYVBhcmFtcy0+U2V0TG9uZ1ZhbHVlKCJpbWFnZUFuaW1hdGlvbiIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc0NvbnRleHQtPkltYWdlQW5pbWF0aW9u
TW9kZSgpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICB9CiAKLSAgYm9vbCBh
bGxvd1BsdWdpbnM7IAorICBib29sIGFsbG93UGx1Z2lucyA9IGZhbHNlOyAKICAgcnYgPSBhUGFy
YW1zLT5HZXRCb29sZWFuVmFsdWUoInBsdWdpbnMiLCAmYWxsb3dQbHVnaW5zKTsKICAgaWYgKE5T
X1NVQ0NFRURFRChydikpCiAgIHsKICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gY29udGFpbmVy
ID0gcHJlc0NvbnRleHQtPkdldENvbnRhaW5lcigpOwogICAgIE5TX0VOU1VSRV9UUlVFKGNvbnRh
aW5lciwgTlNfRVJST1JfRkFJTFVSRSk7CiAKICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9j
U2hlbGwoZG9fUXVlcnlJbnRlcmZhY2UoY29udGFpbmVyLCAmcnYpKTsKICAgICBOU19FTlNVUkVf
U1VDQ0VTUyhydiwgcnYpOwogICAgIE5TX0VOU1VSRV9UUlVFKGRvY1NoZWxsLCBOU19FUlJPUl9G
QUlMVVJFKTsKIAotICAgIHJ2ID0gZG9jU2hlbGwtPkdldEFsbG93UGx1Z2lucygmYWxsb3dQbHVn
aW5zKTsKLSAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworICAgIGFsbG93UGx1Z2lucyA9
IGRvY1NoZWxsLT5QbHVnaW5zQWxsb3dlZEluQ3VycmVudERvYygpOwogCiAgICAgcnYgPSBhUGFy
YW1zLT5TZXRCb29sZWFuVmFsdWUoInBsdWdpbnMiLCBhbGxvd1BsdWdpbnMpOwogICAgIE5TX0VO
U1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgIH0KIAogICByZXR1cm4gTlNfT0s7CiB9CiAKZGlmZiAt
LWdpdCBhL2VkaXRvci9jb21wb3Nlci9zcmMvbnNFZGl0aW5nU2Vzc2lvbi5jcHAgYi9lZGl0b3Iv
Y29tcG9zZXIvc3JjL25zRWRpdGluZ1Nlc3Npb24uY3BwCi0tLSBhL2VkaXRvci9jb21wb3Nlci9z
cmMvbnNFZGl0aW5nU2Vzc2lvbi5jcHAKKysrIGIvZWRpdG9yL2NvbXBvc2VyL3NyYy9uc0VkaXRp
bmdTZXNzaW9uLmNwcApAQCAtMTkyLDE4ICsxOTIsMTcgQEAgbnNFZGl0aW5nU2Vzc2lvbjo6RGlz
YWJsZUpTQW5kUGx1Z2lucyhucwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG1T
Y3JpcHRzRW5hYmxlZCA9IHRtcDsKIAogICBydiA9IGRvY1NoZWxsLT5TZXRBbGxvd0phdmFzY3Jp
cHQoZmFsc2UpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIC8vIERpc2FibGUg
cGx1Z2lucyBpbiB0aGlzIGRvY3VtZW50OgotICBydiA9IGRvY1NoZWxsLT5HZXRBbGxvd1BsdWdp
bnMoJnRtcCk7Ci0gIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgIHRtcCA9IGRvY1NoZWxs
LT5QbHVnaW5zQWxsb3dlZEluQ3VycmVudERvYygpOwogCiAgIG1QbHVnaW5zRW5hYmxlZCA9IHRt
cDsKIAogICBydiA9IGRvY1NoZWxsLT5TZXRBbGxvd1BsdWdpbnMoZmFsc2UpOwogICBOU19FTlNV
UkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgIG1EaXNhYmxlZEpTQW5kUGx1Z2lucyA9IHRydWU7CiAK
ZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9icm93c2VyL3dlYkJyb3dzZXIvbnNXZWJCcm93c2VyQ29u
dGVudFBvbGljeS5jcHAgYi9lbWJlZGRpbmcvYnJvd3Nlci93ZWJCcm93c2VyL25zV2ViQnJvd3Nl
ckNvbnRlbnRQb2xpY3kuY3BwCi0tLSBhL2VtYmVkZGluZy9icm93c2VyL3dlYkJyb3dzZXIvbnNX
ZWJCcm93c2VyQ29udGVudFBvbGljeS5jcHAKKysrIGIvZW1iZWRkaW5nL2Jyb3dzZXIvd2ViQnJv
d3Nlci9uc1dlYkJyb3dzZXJDb250ZW50UG9saWN5LmNwcApAQCAtNCwxNiArNCwxNyBAQAogICog
VGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3pp
bGxhIFB1YmxpYwogICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMg
bm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0
IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KIAogI2luY2x1ZGUgIm5zV2ViQnJvd3Nl
ckNvbnRlbnRQb2xpY3kuaCIKICNpbmNsdWRlICJuc0lEb2NTaGVsbC5oIgogI2luY2x1ZGUgIm5z
Q09NUHRyLmgiCiAjaW5jbHVkZSAibnNDb250ZW50UG9saWN5VXRpbHMuaCIKKyNpbmNsdWRlICJu
c0lDb250ZW50Vmlld2VyLmgiCiAKIG5zV2ViQnJvd3NlckNvbnRlbnRQb2xpY3k6Om5zV2ViQnJv
d3NlckNvbnRlbnRQb2xpY3koKQogewogICAgIE1PWl9DT1VOVF9DVE9SKG5zV2ViQnJvd3NlckNv
bnRlbnRQb2xpY3kpOwogfQogCiBuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5Ojp+bnNXZWJCcm93
c2VyQ29udGVudFBvbGljeSgpCiB7CkBAIC0zMywyMCArMzQsMjEgQEAgUGVyZm9ybVBvbGljeUNo
ZWNrKFBSVWludDMyICAgICBjb250ZW50VAogCiAgICAgbnNJRG9jU2hlbGwgKnNoZWxsID0gTlNf
Q1BfR2V0RG9jU2hlbGxGcm9tQ29udGV4dChyZXF1ZXN0aW5nQ29udGV4dCk7CiAgICAgLyogV2Un
cmUgZ29pbmcgdG8gZGVyZWZlcmVuY2Ugc2hlbGwsIHNvIG1ha2Ugc3VyZSBpdCBpc24ndCBudWxs
ICovCiAgICAgaWYgKCFzaGVsbCkKICAgICAgICAgcmV0dXJuIE5TX09LOwogCiAgICAgbnNyZXN1
bHQgcnY7CiAgICAgYm9vbCBhbGxvd2VkID0gdHJ1ZTsKKyAgICBuc0NPTVB0cjxuc0lDb250ZW50
Vmlld2VyPiBjdjsKIAogICAgIHN3aXRjaCAoY29udGVudFR5cGUpIHsKICAgICAgIGNhc2UgbnNJ
Q29udGVudFBvbGljeTo6VFlQRV9PQkpFQ1Q6Ci0gICAgICAgIHJ2ID0gc2hlbGwtPkdldEFsbG93
UGx1Z2lucygmYWxsb3dlZCk7CisgICAgICAgIGFsbG93ZWQgPSBzaGVsbC0+UGx1Z2luc0FsbG93
ZWRJbkN1cnJlbnREb2MoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIG5zSUNvbnRlbnRQ
b2xpY3k6OlRZUEVfU0NSSVBUOgogICAgICAgICBydiA9IHNoZWxsLT5HZXRBbGxvd0phdmFzY3Jp
cHQoJmFsbG93ZWQpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgbnNJQ29udGVudFBvbGlj
eTo6VFlQRV9TVUJET0NVTUVOVDoKICAgICAgICAgcnYgPSBzaGVsbC0+R2V0QWxsb3dTdWJmcmFt
ZXMoJmFsbG93ZWQpOwogICAgICAgICBicmVhazsKICNpZiAwCmRpZmYgLS1naXQgYS9lbWJlZGRp
bmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbiBiL2VtYmVkZGluZy9j
b21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCi0tLSBhL2VtYmVkZGluZy9j
b21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCisrKyBiL2VtYmVkZGluZy9j
b21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluCkBAIC0yNCwxMSArMjQsMTIg
QEAgQ1BQU1JDUwkJKz0gbnNEaWFsb2dQYXJhbUJsb2NrLmNwcCBcCiAJCSAgICQoTlVMTCkKIGVu
ZGlmCiAKICMgd2UgZG9uJ3Qgd2FudCB0aGUgc2hhcmVkIGxpYiwgYnV0IHdlIHdhbnQgdG8gZm9y
Y2UgdGhlIGNyZWF0aW9uIG9mIGEKICMgc3RhdGljIGxpYi4KIEZPUkNFX1NUQVRJQ19MSUIgPSAx
CiAKICMgRm9yIG5zSlNVdGlscwotTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2RpcikvZG9t
L2Jhc2UKK0xPQ0FMX0lOQ0xVREVTICs9IC1JJCh0b3BzcmNkaXIpL2RvbS9iYXNlIFwKKwkJICAt
SSQodG9wc3JjZGlyKS9jb250ZW50L2Jhc2Uvc3JjIFwKIAogaW5jbHVkZSAkKHRvcHNyY2Rpcikv
Y29uZmlnL3J1bGVzLm1rCmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3
YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2lu
ZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcAotLS0gYS9lbWJlZGRpbmcvY29tcG9u
ZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCisrKyBiL2VtYmVkZGlu
Zy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKQEAgLTUz
LDE2ICs1MywxNyBAQAogI2luY2x1ZGUgIm5zUElET01TdG9yYWdlLmgiCiAjaW5jbHVkZSAibnNJ
V2lkZ2V0LmgiCiAjaW5jbHVkZSAibnNGb2N1c01hbmFnZXIuaCIKICNpbmNsdWRlICJuc0lQcmVz
U2hlbGwuaCIKICNpbmNsdWRlICJuc1ByZXNDb250ZXh0LmgiCiAjaW5jbHVkZSAibnNDb250ZW50
VXRpbHMuaCIKICNpbmNsdWRlICJuc0lQcmVmQnJhbmNoLmgiCiAjaW5jbHVkZSAibnNJUHJlZlNl
cnZpY2UuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZkZWYgVVNFV0VBS1JF
RlMKICNpbmNsdWRlICJuc0lXZWFrUmVmZXJlbmNlLmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNw
YWNlIG1vemlsbGE7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzSlNTdGFja0NvbnRyYWN0SUQ9IkBt
b3ppbGxhLm9yZy9qcy94cGMvQ29udGV4dFN0YWNrOzEiOwpAQCAtNTcwLDE2ICs1NzEsMzMgQEAg
bnNXaW5kb3dXYXRjaGVyOjpPcGVuV2luZG93SlNJbnRlcm5hbChucwogICB9CiAKICAgaWYgKCFu
ZXdEb2NTaGVsbEl0ZW0pIHsKICAgICAvLyBXZSdyZSBnb2luZyB0byBlaXRoZXIgb3BlbiB1cCBh
IG5ldyB3aW5kb3cgb3Vyc2VsdmVzIG9yIGFzayBhCiAgICAgLy8gbnNJV2luZG93UHJvdmlkZXIg
Zm9yIG9uZS4gIEluIGVpdGhlciBjYXNlLCB3ZSdsbCB3YW50IHRvIHNldCB0aGUgcmlnaHQKICAg
ICAvLyBuYW1lIG9uIGl0LgogICAgIHdpbmRvd05lZWRzTmFtZSA9IHRydWU7CiAKKyAgICAvLyBJ
ZiB0aGUgcGFyZW50IHRyeWluZyB0byBvcGVuIGEgbmV3IHdpbmRvdyBpcyBzYW5kYm94ZWQsCisg
ICAgLy8gdGhpcyBpcyBub3QgYWxsb3dlZCBhbmQgd2UgZmFpbCBoZXJlLgorICAgIGlmIChhUGFy
ZW50KSB7CisgICAgICBuc0NPTVB0cjxuc0lET01Eb2N1bWVudD4gZG9tZG9jOworICAgICAgYVBh
cmVudC0+R2V0RG9jdW1lbnQoZ2V0dGVyX0FkZFJlZnMoZG9tZG9jKSk7CisgICAgICBuc0NPTVB0
cjxuc0lEb2N1bWVudD4gZG9jID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9tZG9jKTsKKworICAgICAg
aWYgKGRvYykgeworICAgICAgICBQUlVpbnQzMiBzYW5kYm94RmxhZ3MgPSAwOworICAgICAgICBz
YW5kYm94RmxhZ3MgPSBkb2MtPlNhbmRib3hGbGFncygpOworCisgICAgICAgIGlmIChzYW5kYm94
RmxhZ3MgJiBTQU5EQk9YRURfTkFWSUdBVElPTikgeworICAgICAgICAgIHJldHVybiBOU19FUlJP
Ul9GQUlMVVJFOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCiAgICAgLy8gTm93IGNoZWNr
IHdoZXRoZXIgaXQncyBvayB0byBhc2sgYSB3aW5kb3cgcHJvdmlkZXIgZm9yIGEgd2luZG93LiAg
RG9uJ3QKICAgICAvLyBkbyBpdCBpZiB3ZSdyZSBvcGVuaW5nIGEgZGlhbG9nIG9yIGlmIG91ciBw
YXJlbnQgaXMgYSBjaHJvbWUgd2luZG93IG9yCiAgICAgLy8gaWYgd2UncmUgb3BlbmluZyBzb21l
dGhpbmcgdGhhdCBoYXMgbW9kYWwsIGRpYWxvZywgb3IgY2hyb21lIGZsYWdzIHNldC4KICAgICBu
c0NPTVB0cjxuc0lET01DaHJvbWVXaW5kb3c+IGNocm9tZVdpbiA9IGRvX1F1ZXJ5SW50ZXJmYWNl
KGFQYXJlbnQpOwogICAgIGlmICghYURpYWxvZyAmJiAhY2hyb21lV2luICYmCiAgICAgICAgICEo
Y2hyb21lRmxhZ3MgJiAobnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX01PREFMICAgICAgICAg
fAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9P
UEVOQVNfRElBTE9HIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNo
cm9tZTo6Q0hST01FX09QRU5BU19DSFJPTUUpKSkgewo=
</data>
<flag name="review"
          id="534105"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>646296</attachid>
            <date>2012-07-26 13:33:11 -0700</date>
            <delta_ts>2012-08-04 09:18:01 -0700</delta_ts>
            <desc>iframe sandbox v23</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>60995</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNzA2NWI3NjdmMzBkYjU5ZGRjZTAzYTUyNzVh
NGJiZDA1NDMwZjRhZgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgx
MiwxNiArODEyLDI2IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYgYVNhbmRi
b3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVu
KSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAgICogcHJvcGVydGllcyBm
aWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5zcmVzdWx0IEZvcm1hdExv
Y2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQYXJhbXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVBhcmFtc0xlbmd0aCwK
QEAgLTE5NDUsNDIgKzE5NTUsNDQgQEAgcHVibGljOgogICAgKiBmcm9tIHRoZSBkb2N1bWVudCBp
dCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAKICAgLyoqCiAgICAqIFNl
dCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUgZ2l2ZW4gY2hhbm5lbCwg
aWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2YgYUNoYW5uZWwuICBhUHJp
bmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJvdXRCbGFuayBpcyB0cnVl
LCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBpdC4gSWYgYUZvcmNlT3du
ZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9uIHRoZSBjaGFubmVsLCBl
dmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAgICogZnJvbSB0aGUgY2hh
bm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRoZSBwcmluY2lwYWwgd2Fz
IHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwuCiAgICAqLwogICBzdGF0
aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIgPSBmYWxzZSk7CiAK
ICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNlNjRTdHJpbmcpOwogCiAg
IHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFzY2lpU3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhKTsKIAogICAvKiogSWYg
YUpTQXJyYXkgaXMgYSBKYXZhc2NyaXB0IGFycmF5LCB0aGlzIG1ldGhvZCBpdGVyYXRlcyBvdmVy
IGl0cwogICAgKiAgZWxlbWVudHMgYW5kIGFwcGVuZHMgdmFsdWVzIHRvIGFSZXRWYWwgYXMgbnNJ
QXRvbXMuCiAgICAqICBAdGhyb3cgTlNfRVJST1JfSUxMRUdBTF9WQUxVRSBpZiBhSlNBcnJheSBp
c24ndCBhIEpTIGFycmF5LgogICAgKi8gCiAgIHN0YXRpYyBuc3Jlc3VsdCBKU0FycmF5VG9BdG9t
QXJyYXkoSlNDb250ZXh0KiBhQ3gsIGNvbnN0IEpTOjpWYWx1ZSYgYUpTQXJyYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01BcnJheTxuc0lBdG9tPiYgYVJldFZh
bCk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBwYXNz
ZWQgaW4gcGFyYW1ldGVyIGhhcyB0aGUgYXV0b2NvbXBsZXRlCi0gICAqIGZ1bmN0aW9ubmFsaXR5
IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIuCisgICAq
IGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9y
bSBvd25lci4KICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFrZSBzdXJlIGF1dG9jb21w
bGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0eXBlLgogICAgKgogICAg
KiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNrLiBOT1RFOiBhSW5wdXQg
Y2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IGhh
cyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBib29sIElzQXV0b2NvbXBs
ZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQpOwogCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGlj
L25zSURvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisr
KyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaApAQCAtMjYsMTYgKzI2LDE3IEBA
CiAjaW5jbHVkZSAibnNQSURPTVdpbmRvdy5oIgogI2luY2x1ZGUgIm5zU01JTEFuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJuc0lTY3JpcHRHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJuc0lEb2N1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJuc0lGcmFtZVJlcXVlc3RDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIm5zRXZlbnRTdGF0ZXMuaCIKICNpbmNsdWRlICJuc0lTdHJ1Y3R1cmVk
Q2xvbmVDb250YWluZXIuaCIKICNpbmNsdWRlICJuc0lMb2FkQ29udGV4dC5oIgorI2luY2x1ZGUg
Im5zSURvY1NoZWxsLmgiCiAKIGNsYXNzIG5zSVJlcXVlc3Q7CiBjbGFzcyBuc1BJRE9NV2luZG93
OwogY2xhc3MgbnNJU3RyZWFtTGlzdGVuZXI7CiBjbGFzcyBuc0lCRkNhY2hlRW50cnk7CiBjbGFz
cyBuc0lDb250ZW50OwogY2xhc3MgbnNQcmVzQ29udGV4dDsKIGNsYXNzIG5zSVByZXNTaGVsbDsK
QEAgLTg3LDE4ICs4OCwxOCBAQCBjbGFzcyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xh
c3MgTGluazsKIGNsYXNzIEVsZW1lbnQ7CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNw
YWNlIG1vemlsbGEKIAogI2RlZmluZSBOU19JRE9DVU1FTlRfSUlEIFwKLXsgMHg4YzZhMWU2Miwg
MHhkNWFkLCAweDQyOTcsIFwKLSAgeyAweGI5LCAweDQxLCAweDY0LCAweDQ5LCAweDIyLCAweDJl
LCAweGM0LCAweGYwIH0gfQoreyAweDU3ZmU0NGFlLCAweDY2NTYsIDB4NDRiOCwgXAorICB7IDB4
OGQsIDB4YzAsIDB4ZmMsIDB4YTcsIDB4NDMsIDB4MjgsIDB4YmUsIDB4ODYgfSB9CiAKIC8vIEZs
YWcgZm9yIEFkZFN0eWxlU2hlZXQoKS4KICNkZWZpbmUgTlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFM
T0cgICAgICAgICAgICAgICAgKDEgPDwgMCkKIAogLy8gRW51bSBmb3IgcmVxdWVzdGluZyBhIHBh
cnRpY3VsYXIgdHlwZSBvZiBkb2N1bWVudCB3aGVuIGNyZWF0aW5nIGEgZG9jCiBlbnVtIERvY3Vt
ZW50Rmxhdm9yIHsKICAgRG9jdW1lbnRGbGF2b3JMZWdhY3lHdWVzcywgLy8gY29tcGF0IHdpdGgg
b2xkIGNvZGUgdW50aWwgbWFkZSBIVE1MNS1jb21wbGlhbnQKICAgRG9jdW1lbnRGbGF2b3JIVE1M
LCAvLyBIVE1MRG9jdW1lbnQgd2l0aCBIVE1MbmVzcyBiaXQgc2V0IHRvIHRydWUKQEAgLTQwNywx
NyArNDA4LDI2IEBAIHB1YmxpYzoKICAgICogY2FsbGVycyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBh
Y3Rpb24gYXMgbmVlZGVkIGlmIHRoZXkgd2FudCB0aGlzCiAgICAqIGNoYW5nZSB0byBhY3R1YWxs
eSBjaGFuZ2UgYW55dGhpbmcgaW1tZWRpYXRlbHkuCiAgICAqIEBzZWUgbnNCaWRpVXRpbHMuaAog
ICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9ucyhQUlVpbnQzMiBhQmlkaU9wdGlvbnMpCiAgIHsK
ICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9wdGlvbnM7CiAgIH0KLSAgCisKKyAgLyoqCisgICAq
IEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4KKyAgICogQHNlZSBuc1Nh
bmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIFNh
bmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAgfQor
CiAgIC8qKgogICAgKiBBY2Nlc3MgSFRUUCBoZWFkZXIgZGF0YSAodGhpcyBtYXkgYWxzbyBnZXQg
c2V0IGZyb20gb3RoZXIKICAgICogc291cmNlcywgbGlrZSBIVE1MIE1FVEEgdGFncykuCiAgICAq
LwogICB2aXJ0dWFsIHZvaWQgR2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhSGVhZGVyRmllbGQsIG5z
QVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIFNldEhlYWRlckRhdGEo
bnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBuc0FTdHJpbmcmIGFEYXRhKSA9IDA7CiAKICAg
LyoqCkBAIC00NjAsMTYgKzQ3MCwyMSBAQCBwdWJsaWM6CiAKICAgLyoqCiAgICAqIFNldCB0aGUg
cGFyZW50IGRvY3VtZW50IG9mIHRoaXMgZG9jdW1lbnQuCiAgICAqLwogICB2b2lkIFNldFBhcmVu
dERvY3VtZW50KG5zSURvY3VtZW50KiBhUGFyZW50KQogICB7CiAgICAgbVBhcmVudERvY3VtZW50
ID0gYVBhcmVudDsKICAgfQorICAKKyAgLyoqCisgICAqIEFyZSBwbHVnaW5zIGFsbG93ZWQgaW4g
dGhpcyBkb2N1bWVudCA/CisgICAqLworICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsbG93UGx1Z2lu
cyAoYm9vbCogYUFsbG93UGx1Z2lucykgPSAwOwogCiAgIC8qKgogICAgKiBTZXQgdGhlIHN1YiBk
b2N1bWVudCBmb3IgYUNvbnRlbnQgdG8gYVN1YkRvYy4KICAgICovCiAgIHZpcnR1YWwgbnNyZXN1
bHQgU2V0U3ViRG9jdW1lbnRGb3IoRWxlbWVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRG9jdW1lbnQqIGFTdWJEb2MpID0gMDsKIAogICAvKioK
QEAgLTE4NDIsMTYgKzE4NTcsMjEgQEAgcHJvdGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1
bWVudCBpcyB0cnVlLCBtT3JpZ2luYWxEb2N1bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAg
IC8vIGRvY3VtZW50LgogICBuc0NPTVB0cjxuc0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7
CiAKICAgLy8gVGhlIGJpZGkgb3B0aW9ucyBmb3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBi
aXRmaWVsZCBtZWFucyBpcwogICAvLyBkZWZpbmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50
MzIgbUJpZGlPcHRpb25zOwogCisgIC8vIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVu
dC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRo
ZQorICAvLyBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYg
ZXhpc3RlbnQuIFRoZXNlIGFyZSBzZXQgYXQgbG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRh
YmxlIC0gc2VlIG5zU2FuZGJveEZsYWdzLmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgUFJV
aW50MzIgbVNhbmRib3hGbGFnczsKKwogICBuc0NTdHJpbmcgbUNvbnRlbnRMYW5ndWFnZTsKIHBy
aXZhdGU6CiAgIG5zQ1N0cmluZyBtQ29udGVudFR5cGU7CiBwcm90ZWN0ZWQ6CiAKICAgLy8gVGhl
IGRvY3VtZW50J3Mgc2VjdXJpdHkgaW5mbwogICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNlY3Vy
aXR5SW5mbzsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9NYWtlZmlsZS5pbiBiL2Nv
bnRlbnQvYmFzZS9zcmMvTWFrZWZpbGUuaW4KLS0tIGEvY29udGVudC9iYXNlL3NyYy9NYWtlZmls
ZS5pbgorKysgYi9jb250ZW50L2Jhc2Uvc3JjL01ha2VmaWxlLmluCkBAIC0zNiwxNiArMzYsMTcg
QEAgRVhQT1JUUwkJPSBcCiAJCW5zRnJhbWVNZXNzYWdlTWFuYWdlci5oIFwKIAkJbnNBdHRyQW5k
Q2hpbGRBcnJheS5oIFwKIAkJbnNBdHRyVmFsdWUuaCBcCiAJCW5zQ3Jvc3NTaXRlTGlzdGVuZXJQ
cm94eS5oIFwKIAkJbnNET01BdHRyaWJ1dGVNYXAuaCBcCiAJCW5zR2VuZXJpY0VsZW1lbnQuaCBc
CiAJCW5zTWFwcGVkQXR0cmlidXRlRWxlbWVudC5oIFwKIAkJbnNTdHlsZWRFbGVtZW50LmggXAor
ICAgIG5zU2FuZGJveEZsYWdzLmggXAogCQkkKE5VTEwpCiAKIEVYUE9SVFNfTkFNRVNQQUNFUyA9
IG1vemlsbGEvZG9tCiAKIEVYUE9SVFNfbW96aWxsYS9kb20gPSBcCiAgIExpbmsuaCBcCiAgICQo
TlVMTCkKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAg
Yi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uv
c3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0
aWxzLmNwcApAQCAtMTU1LDE2ICsxNTUsMTcgQEAgc3RhdGljIE5TX0RFRklORV9DSUQoa1hURlNl
cnZpY2VDSUQsIE5TXwogI2luY2x1ZGUgIm5zSUNoYXJzZXREZXRlY3Rvci5oIgogI2luY2x1ZGUg
Im5zSUNoYXJzZXREZXRlY3Rpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIm5zSVBsYXRmb3JtQ2hh
cnNldC5oIgogI2luY2x1ZGUgIm5zSUVkaXRvci5oIgogI2luY2x1ZGUgIm5zSUVkaXRvckRvY1No
ZWxsLmgiCiAjaW5jbHVkZSAibW96aWxsYS9BdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAibnNJUGFy
c2VyU2VydmljZS5oIgogI2luY2x1ZGUgIm5zSURPTVNjcmlwdE9iamVjdEZhY3RvcnkuaCIKKyNp
bmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNXcmFwcGVyQ2FjaGVJbmxp
bmVzLmgiCiAKIGV4dGVybiAiQyIgaW50IE1PWl9YTUxUcmFuc2xhdGVFbnRpdHkoY29uc3QgY2hh
ciogcHRyLCBjb25zdCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqKiBuZXh0LCBQUlVuaWNoYXIqIHJlc3VsdCk7CiBleHRlcm4gIkMi
IGludCBNT1pfWE1MQ2hlY2tRTmFtZShjb25zdCBjaGFyKiBwdHIsIGNvbnN0IGNoYXIqIGVuZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuc19hd2FyZSwgY29uc3QgY2hh
cioqIGNvbG9uKTsKIApAQCAtODk1LDE2ICs4OTYsNjIgQEAgbnNDb250ZW50VXRpbHM6OkdldFBh
cnNlclNlcnZpY2UoKQogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1BhcnNlclNl
cnZpY2VDSUQsICZzUGFyc2VyU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAg
ICAgIHNQYXJzZXJTZXJ2aWNlID0gbnNudWxsOwogICAgIH0KICAgfQogCiAgIHJldHVybiBzUGFy
c2VyU2VydmljZTsKIH0KKy8qKgorICogQSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBz
YW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFtZT4gb3IKKyAqIGEgQ1NQIGRpcmVjdGl2ZSkg
YW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICoK
KyAqIEBwYXJhbSBhQXR0cmlidXRlICAgIHRoZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1
dGUKKyAqIEByZXR1cm4gICAgICAgICAgICAgIHRoZSBzZXQgb2YgZmxhZ3MKKyAqLworUFJVaW50
MzIKK25zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5z
QVN0cmluZyYgYVNhbmRib3hBdHRyVmFsdWUpCit7CisgIC8vIElmIHRoZXJlJ3MgYSBzYW5kYm94
IGF0dHJpYnV0ZSBhdCBhbGwgKGFuZCB0aGVyZSBpcyBpZiB0aGlzIGlzIGJlaW5nCisgIC8vIGNh
bGxlZCksIHN0YXJ0IG9mZiBieSBzZXR0aW5nIGFsbCB0aGUgcmVzdHJpY3Rpb24gZmxhZ3MuCisg
IFBSVWludDMyIG91dCA9IFNBTkRCT1hFRF9OQVZJR0FUSU9OIHwKKyAgICAgICAgICAgICAgICAg
U0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04gfAorICAgICAgICAgICAgICAgICBTQU5EQk9Y
RURfUExVR0lOUyB8CisgICAgICAgICAgICAgICAgIFNBTkRCT1hFRF9PUklHSU4gfAorICAgICAg
ICAgICAgICAgICBTQU5EQk9YRURfRk9STVMgfAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURf
U0NSSVBUUyB8CisgICAgICAgICAgICAgICAgIFNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7
CisKKyAgaWYgKCFhU2FuZGJveEF0dHJWYWx1ZS5Jc0VtcHR5KCkpIHsKKyAgICAvLyBUaGUgc2Vw
YXJhdG9yIG9wdGlvbmFsIGZsYWcgaXMgdXNlZCBiZWNhdXNlIHRoZSBIVE1MNSBzcGVjIHNheXMg
YW55CisgICAgLy8gd2hpdGVzcGFjZSBpcyBvayBhcyBhIHNlcGFyYXRvciwgd2hpY2ggaXMgd2hh
dCB0aGlzIGRvZXMuCisgICAgSFRNTFNwbGl0T25TcGFjZXNUb2tlbml6ZXIgdG9rZW5pemVyKGFT
YW5kYm94QXR0clZhbHVlLCAnICcsCisgICAgICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXJUZW1w
bGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hpdGVzcGFjZT46OlNFUEFSQVRPUl9PUFRJT05B
TCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeworICAgICAgbnNE
ZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKyAgICAg
IGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy1zYW1lLW9yaWdpbiIpKSB7
CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX09SSUdJTjsKKyAgICAgIH0gZWxzZSBpZiAodG9r
ZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctZm9ybXMiKSkgeworICAgICAgICBvdXQg
Jj0gflNBTkRCT1hFRF9GT1JNUzsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1
YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7CisgICAgICAgIC8vIGFsbG93LXNjcmlwdHMg
cmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRTIGFuZAorICAgICAgICAvLyBTQU5EQk9YRURf
QVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9TQ1JJUFRTOwor
ICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisgICAgICB9IGVs
c2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LXRvcC1uYXZpZ2F0aW9u
IikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTjsKKyAg
ICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gb3V0OworfQogCiAjaWZkZWYgTU9aX1hURgog
bnNJWFRGU2VydmljZSoKIG5zQ29udGVudFV0aWxzOjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYg
KCFzWFRGU2VydmljZSkgewogICAgIG5zcmVzdWx0IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNl
cnZpY2VDSUQsICZzWFRGU2VydmljZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHsKQEAgLTY1
ODYsMTcgKzY2MzMsMTggQEAgbnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJpdHlDb250
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8gc3RhdGlj
CiBib29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFsKiBh
TG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD
aGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lV
UkkqIGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBG
b3JBYm91dEJsYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNl
dFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFGb3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBjaGFubmVs
LCBidXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRoZWlyIG93
biBzZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25nIHRoYXQg
dGhlIG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1cHBsaWVk
KSB1bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6YmxhbmsuCiAg
IC8vIFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJzIGZvciB3
aGF0IG93bmVycwpAQCAtNjYwNCwyMyArNjY1MiwzNSBAQCBuc0NvbnRlbnRVdGlsczo6U2V0VXBD
aGFubmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVsbDo6TG9h
ZFVSSSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRoZSBvd25l
ciBpZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAgdmVyeSB3
cm9uZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhhdAogICAv
LyAgICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAgIC8vCiAg
IC8vICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4gdGhleSBh
cmUgY3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3VsZCBiZSBi
YWQhKQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIgd2lsbCBi
ZSBzZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0cyBvd24g
c2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1FCisgIC8v
IHNhbmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFuZCBpdHMg
ZG9jdW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFsLgogICBi
b29sIGluaGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dCB0
byByZXR1cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24ndCBj
YWxsIE5TX0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBjb25k
aXRpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQg
d2hlcmUKICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRoZSBv
d25lci4KLSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJ
LCAmaW5oZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAm
JiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChOU19T
VUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgor
ICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5r
KGFVUkkpKSkpKSkgeworI2lmZGVmIERFQlVHCisgICAgLy8gQXNzZXJ0IHRoYXQgYUZvcmNlT3du
ZXIgaXMgb25seSBzZXQgZm9yIG51bGwgcHJpbmNpcGFscworICAgIGlmIChhRm9yY2VPd25lcikg
eworICAgICAgbnNDT01QdHI8bnNJVVJJPiBvd25lclVSSTsKKyAgICAgIG5zcmVzdWx0IHJ2ID0g
YUxvYWRpbmdQcmluY2lwYWwtPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhvd25lclVSSSkpOworICAg
ICAgTU9aX0FTU0VSVChOU19TVUNDRUVERUQocnYpICYmIFNjaGVtZUlzKG93bmVyVVJJLCBOU19O
VUxMUFJJTkNJUEFMX1NDSEVNRSkpOworICAgIH0KKyNlbmRpZgogICAgIGFDaGFubmVsLT5TZXRP
d25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLwog
ICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZp
bGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCmRpZmYg
LS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3Ny
Yy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisr
KyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTE2MiwxNiArMTYyLDE3IEBA
CiAjaW5jbHVkZSAibW96aWxsYS9kb20vTGluay5oIgogI2luY2x1ZGUgIm5zWFVMQXBwQVBJLmgi
CiAjaW5jbHVkZSAibnNET01Ub3VjaEV2ZW50LmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZl
cmVuY2VzLmgiCiAKICNpbmNsdWRlICJpbWdJTG9hZGVyLmgiCiAjaW5jbHVkZSAibnNXcmFwcGVy
Q2FjaGVJbmxpbmVzLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiB0eXBlZGVm
IG5zVEFycmF5PExpbmsqPiBMaW5rQXJyYXk7CiAKIC8vIFJlZmVyZW5jZSB0byB0aGUgZG9jdW1l
bnQgd2hpY2ggcmVxdWVzdGVkIERPTSBmdWxsLXNjcmVlbiBtb2RlLgogbnNXZWFrUHRyIG5zRG9j
dW1lbnQ6OnNGdWxsU2NyZWVuRG9jID0gbnNudWxsOwpAQCAtMjQwMSwxNiArMjQwMiwyNSBAQCBu
c0RvY3VtZW50OjpTdGFydERvY3VtZW50TG9hZChjb25zdCBjaGFyCiAgICAgRmluZENoYXJJblJl
YWRhYmxlKCc7Jywgc2VtaWNvbG9uLCBlbmQpOwogICAgIFNldENvbnRlbnRUeXBlSW50ZXJuYWwo
U3Vic3RyaW5nKHN0YXJ0LCBzZW1pY29sb24pKTsKICAgfQogCiAgIFJldHJpZXZlUmVsZXZhbnRI
ZWFkZXJzKGFDaGFubmVsKTsKIAogICBtQ2hhbm5lbCA9IGFDaGFubmVsOwogCisgIC8vIElmIHRo
aXMgZG9jdW1lbnQgaXMgYmVpbmcgbG9hZGVkIGJ5IGEgZG9jc2hlbGwsIGNvcHkgaXRzIHNhbmRi
b3ggZmxhZ3MKKyAgLy8gdG8gdGhlIGRvY3VtZW50LiBUaGVzZSBhcmUgaW1tdXRhYmxlIGFmdGVy
IGJlaW5nIHNldCBoZXJlLgorICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jU2hlbGwgPSBkb19R
dWVyeUludGVyZmFjZShhQ29udGFpbmVyKTsKKworICBpZiAoZG9jU2hlbGwpIHsKKyAgICBuc3Jl
c3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTYW5kYm94RmxhZ3MoJm1TYW5kYm94RmxhZ3MpOworICAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgIH0KKwogICBuc3Jlc3VsdCBydiA9IEluaXRD
U1AoKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICByZXR1cm4gTlNfT0s7CiB9
CiAKIG5zcmVzdWx0CiBuc0RvY3VtZW50OjpJbml0Q1NQKCkKQEAgLTI3MDksMTYgKzI3MTksMzQg
QEAgbnNEb2N1bWVudDo6U2V0Q29udGVudFR5cGUoY29uc3QgbnNBU3RyaQogewogICBOU19BU1NF
UlRJT04oR2V0Q29udGVudFR5cGVJbnRlcm5hbCgpLklzRW1wdHkoKSB8fAogICAgICAgICAgICAg
ICAgR2V0Q29udGVudFR5cGVJbnRlcm5hbCgpLkVxdWFscyhOU19Db252ZXJ0VVRGMTZ0b1VURjgo
YUNvbnRlbnRUeXBlKSksCiAgICAgICAgICAgICAgICAiRG8geW91IHJlYWxseSB3YW50IHRvIGNo
YW5nZSB0aGUgY29udGVudC10eXBlPyIpOwogCiAgIFNldENvbnRlbnRUeXBlSW50ZXJuYWwoTlNf
Q29udmVydFVURjE2dG9VVEY4KGFDb250ZW50VHlwZSkpOwogfQogCituc3Jlc3VsdAorbnNEb2N1
bWVudDo6R2V0QWxsb3dQbHVnaW5zKGJvb2wgKiBhQWxsb3dQbHVnaW5zKQoreworICAvLyBGaXJz
dCwgd2UgYXNrIG91ciBkb2NzaGVsbCBpZiBpdCBhbGxvd3MgcGx1Z2lucy4KKyAgbnNDT01QdHI8
bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlSZWZlcmVudChtRG9jdW1lbnRDb250YWlu
ZXIpOworCisgIGlmIChkb2NTaGVsbCkgeworICAgIGRvY1NoZWxsLT5HZXRBbGxvd1BsdWdpbnMo
YUFsbG93UGx1Z2lucyk7CisgICAgICAKKyAgICAvLyBJZiB0aGUgZG9jc2hlbGwgYWxsb3dzIHBs
dWdpbnMsIHdlIGNoZWNrIHdoZXRoZXIKKyAgICAvLyB3ZSBhcmUgc2FuZGJveGVkIGFuZCBwbHVn
aW5zIHNob3VsZCBub3QgYmUgYWxsb3dlZC4KKyAgICBpZiAoKmFBbGxvd1BsdWdpbnMpCisgICAg
ICAqYUFsbG93UGx1Z2lucyA9ICEobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9QTFVHSU5TKTsK
KyAgfQorCisgIHJldHVybiBOU19PSzsKK30KKwogLyogUmV0dXJuIHRydWUgaWYgdGhlIGRvY3Vt
ZW50IGlzIGluIHRoZSBmb2N1c2VkIHRvcC1sZXZlbCB3aW5kb3csIGFuZCBpcyBhbgogICogYW5j
ZXN0b3Igb2YgdGhlIGZvY3VzZWQgRE9NV2luZG93LiAqLwogTlNfSU1FVEhPRElNUAogbnNEb2N1
bWVudDo6SGFzRm9jdXMoYm9vbCogYVJlc3VsdCkKIHsKICAgKmFSZXN1bHQgPSBmYWxzZTsKIAog
ICBuc0lGb2N1c01hbmFnZXIqIGZtID0gbnNGb2N1c01hbmFnZXI6OkdldEZvY3VzTWFuYWdlcigp
OwpAQCAtNjM5NSwxNiArNjQyMywyMiBAQCBuc0RvY3VtZW50OjpHZXRYTUxEZWNsYXJhdGlvbihu
c0FTdHJpbmcmCiAgICAgICBhU3RhbmRhbG9uZS5Bc3NpZ25MaXRlcmFsKCJubyIpOwogICAgIH0K
ICAgfQogfQogCiBib29sCiBuc0RvY3VtZW50OjpJc1NjcmlwdEVuYWJsZWQoKQogeworICAvLyBJ
ZiB0aGlzIGRvY3VtZW50IGlzIHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJworICAv
LyBzY3JpcHQgaXMgbm90IGVuYWJsZWQKKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURf
U0NSSVBUUykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCiAgIG5zQ09NUHRyPG5zSVNjcmlw
dFNlY3VyaXR5TWFuYWdlcj4gc20oZG9fR2V0U2VydmljZShOU19TQ1JJUFRTRUNVUklUWU1BTkFH
RVJfQ09OVFJBQ1RJRCkpOwogICBOU19FTlNVUkVfVFJVRShzbSwgZmFsc2UpOwogCiAgIG5zSVNj
cmlwdEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2V0U2NyaXB0R2xvYmFsT2JqZWN0KCk7
CiAgIE5TX0VOU1VSRV9UUlVFKGdsb2JhbE9iamVjdCwgZmFsc2UpOwogCiAgIG5zSVNjcmlwdENv
bnRleHQgKnNjcmlwdENvbnRleHQgPSBnbG9iYWxPYmplY3QtPkdldENvbnRleHQoKTsKICAgTlNf
RU5TVVJFX1RSVUUoc2NyaXB0Q29udGV4dCwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9i
YXNlL3NyYy9uc0RvY3VtZW50LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaAotLS0g
YS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuaAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25z
RG9jdW1lbnQuaApAQCAtNTYyLDE2ICs1NjIsMTggQEAgcHVibGljOgogICAgKiBzaGFyZWQgYW1v
bmcgbXVsdGlwbGUgcHJlc2VudGF0aW9uIHNoZWxsJ3MpLgogICAgKi8KICAgdmlydHVhbCBuc3Jl
c3VsdCBDcmVhdGVTaGVsbChuc1ByZXNDb250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lWaWV3TWFuYWdlciogYVZpZXdNYW5hZ2VyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zU3R5bGVTZXQqIGFTdHlsZVNldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwqKiBhSW5zdGFuY2VQdHJSZXN1bHQpOwog
ICB2aXJ0dWFsIHZvaWQgRGVsZXRlU2hlbGwoKTsKIAorICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFs
bG93UGx1Z2lucyhib29sKiBhQWxsb3dQbHVnaW5zKTsKKwogICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dFN1YkRvY3VtZW50Rm9yKEVsZW1lbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSURvY3VtZW50KiBhU3ViRG9jKTsKICAgdmlydHVhbCBuc0lEb2N1
bWVudCogR2V0U3ViRG9jdW1lbnRGb3IobnNJQ29udGVudCogYUNvbnRlbnQpIGNvbnN0OwogICB2
aXJ0dWFsIEVsZW1lbnQqIEZpbmRDb250ZW50Rm9yU3ViRG9jdW1lbnQobnNJRG9jdW1lbnQgKmFE
b2N1bWVudCkgY29uc3Q7CiAgIHZpcnR1YWwgRWxlbWVudCogR2V0Um9vdEVsZW1lbnRJbnRlcm5h
bCgpIGNvbnN0OwogCiAgIC8qKgogICAgKiBHZXQgdGhlIHN0eWxlIHNoZWV0cyBvd25lZCBieSB0
aGlzIGRvY3VtZW50LgpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVy
LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKLS0tIGEvY29udGVudC9i
YXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVM
b2FkZXIuY3BwCkBAIC03OSwxNiArNzksMTkgQEAKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVu
Y2VzLmgiCiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIKICNpbmNsdWRlICJtb3ppbGxhL2Rv
bS9FbGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlvdXQvUmVuZGVyRnJhbWVQYXJlbnQu
aCIKICNpbmNsdWRlICJuc0lBcHBzU2VydmljZS5oIgogCiAjaW5jbHVkZSAianNhcGkuaCIKIAor
I2luY2x1ZGUgIm5zSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFn
cy5oIgorCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxh
Ojpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5ZXJzOwogdXNpbmcgbmFtZXNwYWNl
IG1vemlsbGE6OmxheW91dDsKIHR5cGVkZWYgRnJhbWVNZXRyaWNzOjpWaWV3SUQgVmlld0lEOwog
CiBjbGFzcyBuc0FzeW5jRG9jU2hlbGxEZXN0cm95ZXIgOiBwdWJsaWMgbnNSdW5uYWJsZQogewpA
QCAtNDQxLDE2ICs0NDQsNDAgQEAgbnNGcmFtZUxvYWRlcjo6UmVhbGx5U3RhcnRMb2FkaW5nSW50
ZXJuYQogICAvLyBKdXN0IHRvIGJlIHNhZmUsIHJlY2hlY2sgdXJpLgogICBydiA9IENoZWNrVVJJ
TG9hZChtVVJJVG9Mb2FkKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBuc0NP
TVB0cjxuc0lEb2NTaGVsbExvYWRJbmZvPiBsb2FkSW5mbzsKICAgbURvY1NoZWxsLT5DcmVhdGVM
b2FkSW5mbyhnZXR0ZXJfQWRkUmVmcyhsb2FkSW5mbykpOwogICBOU19FTlNVUkVfVFJVRShsb2Fk
SW5mbywgTlNfRVJST1JfRkFJTFVSRSk7CiAKKyAgLy8gSXMgdGhpcyBhbiA8aWZyYW1lPiB3aXRo
IGEgc2FuZGJveCBhdHRyaWJ1dGUgb3IgYSBwYXJlbnQgd2hpY2ggaXMKKyAgLy8gc2FuZGJveGVk
ID8KKyAgbnNIVE1MSUZyYW1lRWxlbWVudCogaWZyYW1lID0KKyAgICBuc0hUTUxJRnJhbWVFbGVt
ZW50OjpGcm9tQ29udGVudChtT3duZXJDb250ZW50KTsKKworICBQUlVpbnQzMiBzYW5kYm94Rmxh
Z3MgPSAwOworCisgIGlmIChpZnJhbWUpIHsKKyAgICBzYW5kYm94RmxhZ3MgPSBpZnJhbWUtPkdl
dFNhbmRib3hGbGFncygpOworCisgICAgUFJVaW50MzIgcGFyZW50U2FuZGJveEZsYWdzID0gaWZy
YW1lLT5Pd25lckRvYygpLT5TYW5kYm94RmxhZ3MoKTsKKworICAgIGlmIChzYW5kYm94RmxhZ3Mg
fHwgcGFyZW50U2FuZGJveEZsYWdzKSB7CisgICAgICAvLyBUaGUgY2hpbGQgY2FuIG9ubHkgYWRk
IHJlc3RyaWN0aW9ucywgbm90IHJlbW92ZSB0aGVtLgorICAgICAgc2FuZGJveEZsYWdzIHw9IHBh
cmVudFNhbmRib3hGbGFnczsKKworICAgICAgbURvY1NoZWxsLT5TZXRTYW5kYm94RmxhZ3Moc2Fu
ZGJveEZsYWdzKTsKKyAgICB9CisgIH0KKworICAvLyBJZiB0aGlzIGlzIGFuIDxpZnJhbWU+IGFu
ZCBpdCdzIHNhbmRib3hlZCB3aXRoIHJlc3BlY3QgdG8gb3JpZ2luCisgIC8vIHdlIHdpbGwgc2V0
IGl0IHVwIHdpdGggYSBudWxsIHByaW5jaXBhbCBsYXRlciBpbiBuc0RvY1NoZWxsOjpEb1VSSUxv
YWQuCisgIC8vIFdlIGRvIGl0IHRoZXJlIHRvIGNvcnJlY3RseSBzYW5kYm94IGNvbnRlbnQgdGhh
dCB3YXMgbG9hZGVkIGludG8KKyAgLy8gdGhlIGlmcmFtZSB2aWEgb3RoZXIgbWV0aG9kcyB0aGFu
IHRoZSBzcmMgYXR0cmlidXRlLgogICAvLyBXZSdsbCB1c2Ugb3VyIHByaW5jaXBhbCwgbm90IHRo
YXQgb2YgdGhlIGRvY3VtZW50IGxvYWRlZCBpbnNpZGUgdXMuICBUaGlzCiAgIC8vIGlzIHZlcnkg
aW1wb3J0YW50OyBuZWVkZWQgdG8gcHJldmVudCBYU1MgYXR0YWNrcyBvbiBkb2N1bWVudHMgbG9h
ZGVkIGluCiAgIC8vIHN1YmZyYW1lcyEKICAgbG9hZEluZm8tPlNldE93bmVyKG1Pd25lckNvbnRl
bnQtPk5vZGVQcmluY2lwYWwoKSk7CiAKICAgbnNDT01QdHI8bnNJVVJJPiByZWZlcnJlcjsKICAg
cnYgPSBtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldFVSSShnZXR0ZXJfQWRkUmVm
cyhyZWZlcnJlcikpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0tZ2l0IGEv
Y29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0
b21MaXN0LmgKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaAorKysgYi9jb250
ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCkBAIC02NSwxNyArNjUsMjEgQEAgR0tfQVRPTShh
Y3R1YXRlLCAiYWN0dWF0ZSIpCiBHS19BVE9NKGFkZHJlc3MsICJhZGRyZXNzIikKIEdLX0FUT00o
YWZ0ZXIsICJhZnRlciIpCiBHS19BVE9NKGFmdGVyX2VuZCwgImFmdGVyX2VuZCIpCiBHS19BVE9N
KGFmdGVyX3N0YXJ0LCAiYWZ0ZXJfc3RhcnQiKQogR0tfQVRPTShhbGlnbiwgImFsaWduIikKIEdL
X0FUT00oYWxpbmssICJhbGluayIpCiBHS19BVE9NKGFsbCwgImFsbCIpCiBHS19BVE9NKGFsbG93
ZXZlbnRzLCAiYWxsb3dldmVudHMiKQorR0tfQVRPTShhbGxvd2Zvcm1zLCAiYWxsb3ctZm9ybXMi
KQogR0tfQVRPTShhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucywgImFsbG93bmVnYXRpdmVhc3NlcnRp
b25zIikKK0dLX0FUT00oYWxsb3dzYW1lb3JpZ2luLCAiYWxsb3ctc2FtZS1vcmlnaW4iKQorR0tf
QVRPTShhbGxvd3NjcmlwdHMsICJhbGxvdy1zY3JpcHRzIikKK0dLX0FUT00oYWxsb3d0b3BuYXZp
Z2F0aW9uLCAiYWxsb3ctdG9wLW5hdmlnYXRpb24iKQogR0tfQVRPTShhbGxvd3VudHJ1c3RlZCwg
ImFsbG93dW50cnVzdGVkIikKIEdLX0FUT00oYWx0LCAiYWx0IikKIEdLX0FUT00oYWx0ZXJuYXRl
LCAiYWx0ZXJuYXRlIikKIEdLX0FUT00oYWx3YXlzLCAiYWx3YXlzIikKIEdLX0FUT00oYW5jZXN0
b3IsICJhbmNlc3RvciIpCiBHS19BVE9NKGFuY2VzdG9yT3JTZWxmLCAiYW5jZXN0b3Itb3Itc2Vs
ZiIpCiBHS19BVE9NKF9hbmQsICJhbmQiKQogR0tfQVRPTShhbnksICJhbnkiKQpAQCAtODQxLDE2
ICs4NDUsMTcgQEAgR0tfQVRPTShyb3dzcGFuLCAicm93c3BhbiIpCiBHS19BVE9NKHJwLCAicnAi
KQogR0tfQVRPTShydCwgInJ0IikKIEdLX0FUT00ocnRsLCAicnRsIikKIEdLX0FUT00ocnVieSwg
InJ1YnkiKQogR0tfQVRPTShydWxlLCAicnVsZSIpCiBHS19BVE9NKHJ1bGVzLCAicnVsZXMiKQog
R0tfQVRPTShzLCAicyIpCiBHS19BVE9NKHNhbXAsICJzYW1wIikKK0dLX0FUT00oc2FuZGJveCwg
InNhbmRib3giKQogR0tfQVRPTShzYmF0dHIsICJzYmF0dHIiKQogR0tfQVRPTShzY2FsZSwgInNj
YWxlIikKIEdLX0FUT00oc2NhbiwgInNjYW4iKQogR0tfQVRPTShzY2hlbWUsICJzY2hlbWUiKQog
R0tfQVRPTShzY29wZSwgInNjb3BlIikKIEdLX0FUT00oc2NvcGVkLCAic2NvcGVkIikKIEdLX0FU
T00oc2NyZWVuLCAic2NyZWVuIikKIEdLX0FUT00oc2NyZWVuWCwgInNjcmVlblgiKQpkaWZmIC0t
Z2l0IGEvY29udGVudC9iYXNlL3NyYy9uc1NhbmRib3hGbGFncy5oIGIvY29udGVudC9iYXNlL3Ny
Yy9uc1NhbmRib3hGbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvY29udGVudC9iYXNlL3NyYy9uc1NhbmRib3hGbGFncy5oCkBAIC0wLDAgKzEsNTggQEAKKy8q
IC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJh
c2ljLW9mZnNldDogMiAtKi0gKi8NCisvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVj
dCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljDQorICogTGljZW5zZSwgdi4gMi4w
LiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxl
LA0KKyAqIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8u
ICovDQorDQorLyoNCisgKiBDb25zdGFudCBmbGFncyB0aGF0IGRlc2NyaWJlIGhvdyBhIGRvY3Vt
ZW50IGlzIHNhbmRib3hlZCBhY2NvcmRpbmcgdG8gdGhlDQorICogSFRNTDUgc3BlYy4NCisgKi8N
CisNCisjaWZuZGVmIG5zU2FuZGJveEZsYWdzX2hfX18NCisjZGVmaW5lIG5zU2FuZGJveEZsYWdz
X2hfX18NCisNCisvKioNCisgKiBUaGlzIGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIG5hdmln
YXRpbmcgYnJvd3NpbmcgY29udGV4dHMgb3RoZXIgdGhhbg0KKyAqIHRoZSBzYW5kYm94ZWQgYnJv
d3NpbmcgY29udGV4dCBpdHNlbGYgKG9yIGJyb3dzaW5nIGNvbnRleHRzIGZ1cnRoZXINCisgKiBu
ZXN0ZWQgaW5zaWRlIGl0KSwgYW5kIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dC4NCisg
Ki8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9OQVZJR0FUSU9OICA9IDB4MTsNCisN
CisvKioNCisgKiBUaGlzIGZsYWcgcHJldmVudHMgY29udGVudCBmcm9tIG5hdmlnYXRpbmcgdGhl
aXIgdG9wLWxldmVsIGJyb3dzaW5nDQorICogY29udGV4dC4NCisgKi8NCitjb25zdCB1bnNpZ25l
ZCBsb25nIFNBTkRCT1hFRF9UT1BMRVZFTF9OQVZJR0FUSU9OID0gMHgyOw0KKw0KKy8qKg0KKyAq
IFRoaXMgZmxhZyBwcmV2ZW50cyBjb250ZW50IGZyb20gaW5zdGFudGlhdGluZyBwbHVnaW5zLCB3
aGV0aGVyIHVzaW5nIHRoZQ0KKyAqIGVtYmVkIGVsZW1lbnQsIHRoZSBvYmplY3QgZWxlbWVudCwg
dGhlIGFwcGxldCBlbGVtZW50LCBvciB0aHJvdWdoDQorICogbmF2aWdhdGlvbiBvZiBhIG5lc3Rl
ZCBicm93c2luZyBjb250ZXh0LCB1bmxlc3MgdGhvc2UgcGx1Z2lucyBjYW4gYmUNCisgKiBzZWN1
cmVkLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1BMVUdJTlMgPSAweDQ7
DQorDQorLyoqDQorICogVGhpcyBmbGFnIGZvcmNlcyBjb250ZW50IGludG8gYSB1bmlxdWUgb3Jp
Z2luLCB0aHVzIHByZXZlbnRpbmcgaXQgZnJvbQ0KKyAqIGFjY2Vzc2luZyBvdGhlciBjb250ZW50
IGZyb20gdGhlIHNhbWUgb3JpZ2luLg0KKyAqIFRoaXMgZmxhZyBhbHNvIHByZXZlbnRzIHNjcmlw
dCBmcm9tIHJlYWRpbmcgZnJvbSBvciB3cml0aW5nIHRvIHRoZQ0KKyAqIGRvY3VtZW50LmNvb2tp
ZSBJREwgYXR0cmlidXRlLCBhbmQgYmxvY2tzIGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuDQorICov
DQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfT1JJR0lOID0gMHg4Ow0KKw0KKy8qKg0K
KyAqIFRoaXMgZmxhZyBibG9ja3MgZm9ybSBzdWJtaXNzaW9uLg0KKyAqLw0KK2NvbnN0IHVuc2ln
bmVkIGxvbmcgU0FOREJPWEVEX0ZPUk1TID0gMHgxMDsNCisNCisvKioNCisgKiBUaGlzIGZsYWcg
YmxvY2tzIHNjcmlwdCBleGVjdXRpb24uDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5E
Qk9YRURfU0NSSVBUUyA9IDB4MjA7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBmZWF0
dXJlcyB0aGF0IHRyaWdnZXIgYXV0b21hdGljYWxseSwgc3VjaCBhcw0KKyAqIGF1dG9tYXRpY2Fs
bHkgcGxheWluZyBhIHZpZGVvIG9yIGF1dG9tYXRpY2FsbHkgZm9jdXNpbmcgYSBmb3JtIGNvbnRy
b2wuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRV
UkVTID0gMHg0MDsNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zU2Ny
aXB0TG9hZGVyLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwCi0tLSBh
L2NvbnRlbnQvYmFzZS9zcmMvbnNTY3JpcHRMb2FkZXIuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9z
cmMvbnNTY3JpcHRMb2FkZXIuY3BwCkBAIC0zNywxNiArMzcsMTcgQEAKICNpbmNsdWRlICJuc0lD
b250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJwcmxvZy5oIgogI2luY2x1ZGUgIm5z
SUNoYW5uZWxQb2xpY3kuaCIKICNpbmNsdWRlICJuc0NoYW5uZWxQb2xpY3kuaCIKICNpbmNsdWRl
ICJuc0NSVC5oIgogI2luY2x1ZGUgIm5zQ29udGVudENyZWF0b3JGdW5jdGlvbnMuaCIKICNpbmNs
dWRlICJuc0dlbmVyaWNFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNDcm9zc1NpdGVMaXN0ZW5lclBy
b3h5LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogI2luY2x1ZGUgIm1vemlsbGEv
RnVuY3Rpb25UaW1lci5oIgogI2luY2x1ZGUgIm1vemlsbGEvQ09SU01vZGUuaCIKICNpbmNsdWRl
ICJtb3ppbGxhL0F0dHJpYnV0ZXMuaCIKIAogI2lmZGVmIFBSX0xPR0dJTkcKIHN0YXRpYyBQUkxv
Z01vZHVsZUluZm8qIGdDc3BQUkxvZzsKICNlbmRpZgpAQCAtMjczLDE2ICsyNzQsMjEgQEAgbnNT
Y3JpcHRMb2FkZXI6OlN0YXJ0TG9hZChuc1NjcmlwdExvYWRSZQogICBpZiAoIXdpbmRvdykgewog
ICAgIHJldHVybiBOU19FUlJPUl9OVUxMX1BPSU5URVI7CiAgIH0KIAogICBuc0lEb2NTaGVsbCAq
ZG9jc2hlbGwgPSB3aW5kb3ctPkdldERvY1NoZWxsKCk7CiAKICAgbnNDT01QdHI8bnNJSW50ZXJm
YWNlUmVxdWVzdG9yPiBwcm9tcHRlcihkb19RdWVyeUludGVyZmFjZShkb2NzaGVsbCkpOwogCisg
IC8vIElmIHRoaXMgZG9jdW1lbnQgaXMgc2FuZGJveGVkIHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMn
LCBhYm9ydC4KKyAgaWYgKG1Eb2N1bWVudC0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NS
SVBUUykgeworICAgIHJldHVybiBOU19PSzsKKyAgfQorCiAgIC8vIGNoZWNrIGZvciBhIENvbnRl
bnQgU2VjdXJpdHkgUG9saWN5IHRvIHBhc3MgZG93biB0byB0aGUgY2hhbm5lbAogICAvLyB0aGF0
IHdpbGwgYmUgY3JlYXRlZCB0byBsb2FkIHRoZSBzY3JpcHQKICAgbnNDT01QdHI8bnNJQ2hhbm5l
bFBvbGljeT4gY2hhbm5lbFBvbGljeTsKICAgbnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9s
aWN5PiBjc3A7CiAgIHJ2ID0gbURvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldENzcChnZXR0
ZXJfQWRkUmVmcyhjc3ApKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgaWYgKGNz
cCkgewogICAgIGNoYW5uZWxQb2xpY3kgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3Jn
L25zY2hhbm5lbHBvbGljeTsxIik7CkBAIC02MzAsMTYgKzYzNiwyMSBAQCBuc1NjcmlwdExvYWRl
cjo6UHJvY2Vzc1NjcmlwdEVsZW1lbnQobnNJCiAgICAgICAgICJUaGVyZSBjYW4gYmUgb25seSBv
bmUgcGFyc2VyLWJsb2NraW5nIHNjcmlwdCBhdCBhIHRpbWUiKTsKICAgICBOU19BU1NFUlRJT04o
bVhTTFRSZXF1ZXN0cy5Jc0VtcHR5KCksCiAgICAgICAgICJQYXJzZXItYmxvY2tpbmcgc2NyaXB0
cyBhbmQgWFNMVCBzY3JpcHRzIGluIHRoZSBzYW1lIGRvYyEiKTsKICAgICBtUGFyc2VyQmxvY2tp
bmdSZXF1ZXN0ID0gcmVxdWVzdDsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8vIGlubGlu
ZSBzY3JpcHQKKyAgLy8gSXMgdGhpcyBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aG91dCAnYWxsb3ct
c2NyaXB0cyc/CisgIGlmIChtRG9jdW1lbnQtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX1ND
UklQVFMpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKwogICBuc0NPTVB0cjxuc0lDb250ZW50
U2VjdXJpdHlQb2xpY3k+IGNzcDsKICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQcmluY2lwYWwoKS0+
R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgZmFs
c2UpOwogCiAgIGlmIChjc3ApIHsKICAgICBQUl9MT0coZ0NzcFBSTG9nLCBQUl9MT0dfREVCVUcs
ICgiTmV3IFNjcmlwdExvYWRlciBpICoqKip3aXRoIENTUCoqKioiKSk7CiAgICAgYm9vbCBpbmxp
bmVPSzsKICAgICBydiA9IGNzcC0+R2V0QWxsb3dzSW5saW5lU2NyaXB0KCZpbmxpbmVPSyk7CmRp
ZmYgLS1naXQgYS9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAg
Yi9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAKLS0tIGEvY29u
dGVudC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCisrKyBiL2NvbnRlbnQv
ZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcApAQCAtNDksMTYgKzQ5LDE3IEBA
CiAjaW5jbHVkZSAibnNET01KU1V0aWxzLmgiCiAjaW5jbHVkZSAibnNET01TY3JpcHRPYmplY3RI
b2xkZXIuaCIKICNpbmNsdWRlICJuc0RhdGFIYXNodGFibGUuaCIKICNpbmNsdWRlICJuc0NPTUFy
cmF5LmgiCiAjaW5jbHVkZSAibnNFdmVudExpc3RlbmVyU2VydmljZS5oIgogI2luY2x1ZGUgIm5z
SUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIm5zSlNFbnZpcm9ubWVudC5oIgog
I2luY2x1ZGUgInhwY3B1YmxpYy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6aGFs
OwogCiAjZGVmaW5lIEVWRU5UX1RZUEVfRVFVQUxTKCBscywgdHlwZSwgdXNlclR5cGUgKSBcCiAg
IChscy0+bUV2ZW50VHlwZSA9PSB0eXBlICYmIFwKICAgKGxzLT5tRXZlbnRUeXBlICE9IE5TX1VT
RVJfREVGSU5FRF9FVkVOVCB8fCBscy0+bVR5cGVBdG9tID09IHVzZXJUeXBlKSkKIApAQCAtNTY5
LDE2ICs1NzAsMjIgQEAgbnNFdmVudExpc3RlbmVyTWFuYWdlcjo6QWRkU2NyaXB0RXZlbnRMaQog
ICAgIC8vIGxvYWRlZCBhcyBkYXRhLgogICAgIHJldHVybiBOU19PSzsKICAgfQogCiAgIG5zcmVz
dWx0IHJ2ID0gTlNfT0s7CiAgIC8vIHJldHVybiBlYXJseSBwcmV2ZW50aW5nIHRoZSBldmVudCBs
aXN0ZW5lciBmcm9tIGJlaW5nIGFkZGVkCiAgIC8vICdkb2MnIGlzIGZldGNoZWQgYWJvdmUKICAg
aWYgKGRvYykgeworICAgIC8vIERvbid0IGFsbG93IGFkZGluZyBhbiBldmVudCBsaXN0ZW5lciBp
ZiB0aGUgZG9jdW1lbnQgaXMgc2FuZGJveGVkCisgICAgLy8gd2l0aG91dCAnYWxsb3ctc2NyaXB0
cycuCisgICAgaWYgKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykgewor
ICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAgbnND
T01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5PiBjc3A7CiAgICAgcnYgPSBkb2MtPk5vZGVQ
cmluY2lwYWwoKS0+R2V0Q3NwKGdldHRlcl9BZGRSZWZzKGNzcCkpOwogICAgIE5TX0VOU1VSRV9T
VUNDRVNTKHJ2LCBydik7CiAKICAgICBpZiAoY3NwKSB7CiAgICAgICBib29sIGlubGluZU9LOwog
ICAgICAgcnYgPSBjc3AtPkdldEFsbG93c0lubGluZVNjcmlwdCgmaW5saW5lT0spOwogICAgICAg
TlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMv
bnNIVE1MRm9ybUVsZW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hU
TUxGb3JtRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtNDgsMTYgKzQ4LDE3IEBACiAKICNpbmNsdWRlICJtb3pBdXRvRG9j
VXBkYXRlLmgiCiAjaW5jbHVkZSAibnNJSFRNTENvbGxlY3Rpb24uaCIKIAogI2luY2x1ZGUgIm5z
SUNvbnN0cmFpbnRWYWxpZGF0aW9uLmgiCiAKICNpbmNsdWRlICJuc0lET01IVE1MQnV0dG9uRWxl
bWVudC5oIgogI2luY2x1ZGUgImRvbWJpbmRpbmdzLmgiCisjaW5jbHVkZSAibnNTYW5kYm94Rmxh
Z3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIAogc3RhdGljIGNvbnN0IGlu
dCBOU19GT1JNX0NPTlRST0xfTElTVF9IQVNIVEFCTEVfU0laRSA9IDE2OwogCiBzdGF0aWMgY29u
c3QgUFJVaW50OCBOU19GT1JNX0FVVE9DT01QTEVURV9PTiAgPSAxOwogc3RhdGljIGNvbnN0IFBS
VWludDggTlNfRk9STV9BVVRPQ09NUExFVEVfT0ZGID0gMDsKIApAQCAtNjQ1LDE4ICs2NDYsMTkg
QEAgbnNIVE1MRm9ybUVsZW1lbnQ6OkRvU3VibWl0T3JSZXNldChuc0V2ZQogICAvLyBKQksgRG9u
J3QgZ2V0IGZvcm0gZnJhbWVzIGFueW1vcmUgLSBidWcgMzQyOTcKIAogICAvLyBTdWJtaXQgb3Ig
UmVzZXQgdGhlIGZvcm0KICAgaWYgKE5TX0ZPUk1fUkVTRVQgPT0gYU1lc3NhZ2UpIHsKICAgICBy
ZXR1cm4gRG9SZXNldCgpOwogICB9CiAKICAgaWYgKE5TX0ZPUk1fU1VCTUlUID09IGFNZXNzYWdl
KSB7Ci0gICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIG5vdCBpbiBhIGRvY3VtZW50LgotICAg
IGlmICghZG9jKSB7CisgICAgLy8gRG9uJ3Qgc3VibWl0IGlmIHdlJ3JlIG5vdCBpbiBhIGRvY3Vt
ZW50IG9yIGlmIHdlJ3JlIGluCisgICAgLy8gYSBzYW5kYm94ZWQgZnJhbWUgYW5kIGZvcm0gc3Vi
bWl0IGlzIGRpc2FibGVkLgorICAgIGlmICghZG9jIHx8IChkb2MtPlNhbmRib3hGbGFncygpICYg
U0FOREJPWEVEX0ZPUk1TKSkgewogICAgICAgcmV0dXJuIE5TX09LOwogICAgIH0KICAgICByZXR1
cm4gRG9TdWJtaXQoYUV2ZW50KTsKICAgfQogCiAgIE1PWl9BU1NFUlQoZmFsc2UpOwogICByZXR1
cm4gTlNfT0s7CiB9CkBAIC0xNjUwLDE2ICsxNjUyLDI0IEBAIG5zSFRNTEZvcm1FbGVtZW50OjpD
aGVja1ZhbGlkRm9ybVN1Ym1pc3MKICAgICogVE9ETzogdGhlIGNoZWNrIGZvciBvYnNlcnZlciBz
aG91bGQgYmUgcmVtb3ZlZCBsYXRlciB3aGVuIEhUTUw1IEZvcm1zIHdpbGwKICAgICogYmUgc3By
ZWFkIGVub3VnaCBhbmQgYXV0aG9ycyB3aWxsIGFzc3VtZSBmb3JtcyBjYW4ndCBiZSBzdWJtaXR0
ZWQgd2hlbgogICAgKiBpbnZhbGlkLiBTZWUgYnVnIDU4NzY3MS4KICAgICovCiAKICAgTlNfQVNT
RVJUSU9OKCFIYXNBdHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6Om5vdmFsaWRhdGUp
LAogICAgICAgICAgICAgICAgIldlIHNob3VsZG4ndCBiZSB0aGVyZSBpZiBub3ZhbGlkYXRlIGlz
IHNldCEiKTsKIAorICAvLyBEb24ndCBkbyB2YWxpZGF0aW9uIGZvciBhIGZvcm0gc3VibWl0IGRv
bmUgYnkgYSBzYW5kYm94ZWQgZG9jdW1lbnQgdGhhdAorICAvLyBkb2Vzbid0IGhhdmUgJ2FsbG93
LWZvcm1zJywgdGhlIHN1Ym1pdCB3aWxsIGhhdmUgYmVlbiBibG9ja2VkIGFuZCB0aGUKKyAgLy8g
SFRNTDUgc3BlYyBzYXlzIHdlIHNob3VsZG4ndCB2YWxpZGF0ZSBpbiB0aGlzIGNhc2UuCisgIG5z
SURvY3VtZW50KiBkb2MgPSBHZXRDdXJyZW50RG9jKCk7CisgIGlmIChkb2MgJiYgKGRvYy0+U2Fu
ZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfRk9STVMpKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0K
KwogICAvLyBXaGVuIC5zdWJtaXQoKSBpcyBjYWxsZWQgYUV2ZW50ID0gbnNudWxsIHNvIHdlIGNh
biByZWx5IG9uIHRoYXQgdG8ga25vdyBpZgogICAvLyB3ZSBoYXZlIHRvIGNoZWNrIHRoZSB2YWxp
ZGl0eSBvZiB0aGUgZm9ybS4KICAgbnNDT01QdHI8bnNJT2JzZXJ2ZXJTZXJ2aWNlPiBzZXJ2aWNl
ID0KICAgICBtb3ppbGxhOjpzZXJ2aWNlczo6R2V0T2JzZXJ2ZXJTZXJ2aWNlKCk7CiAgIGlmICgh
c2VydmljZSkgewogICAgIE5TX1dBUk5JTkcoIk5vIG9ic2VydmVyIHNlcnZpY2UgYXZhaWxhYmxl
ISIpOwogICAgIHJldHVybiB0cnVlOwogICB9CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29u
dGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9z
cmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAtMiwxNyArMiwxNiBAQAogLyogVGhpcyBTb3VyY2Ug
Q29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYwog
ICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1
dGVkIHdpdGggdGhpcwogICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3pp
bGxhLm9yZy9NUEwvMi4wLy4gKi8KIAogI2luY2x1ZGUgIm1vemlsbGEvVXRpbC5oIgogCiAjaW5j
bHVkZSAibnNIVE1MSUZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIm5zSURPTVNWR0RvY3VtZW50
LmgiCi0jaW5jbHVkZSAibnNHa0F0b21zLmgiCiAjaW5jbHVkZSAibnNNYXBwZWRBdHRyaWJ1dGVz
LmgiCiAjaW5jbHVkZSAibnNET01FcnJvci5oIgogI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIKICNp
bmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNp
bmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIApAQCAtNTEsMTYgKzUwLDE3IEBAIE5TX0lNUExf
U1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwKIE5TX0lNUExfVVJJX0FUVFIobnNIVE1M
SUZyYW1lRWxlbWVudCwgTG9uZ0Rlc2MsIGxvbmdkZXNjKQogTlNfSU1QTF9TVFJJTkdfQVRUUihu
c0hUTUxJRnJhbWVFbGVtZW50LCBNYXJnaW5IZWlnaHQsIG1hcmdpbmhlaWdodCkKIE5TX0lNUExf
U1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTWFyZ2luV2lkdGgsIG1hcmdpbndpZHRo
KQogTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBOYW1lLCBuYW1lKQog
TlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBTY3JvbGxpbmcsIHNjcm9s
bGluZykKIE5TX0lNUExfVVJJX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgU3JjLCBzcmMpCiBO
U19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFdpZHRoLCB3aWR0aCkKIE5T
X0lNUExfQk9PTF9BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE1vekFsbG93RnVsbFNjcmVlbiwg
bW96YWxsb3dmdWxsc2NyZWVuKQorTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVt
ZW50LCBTYW5kYm94LCBzYW5kYm94KQogCiB2b2lkCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpHZXRJ
dGVtVmFsdWVUZXh0KG5zQVN0cmluZyYgYVZhbHVlKQogewogICBHZXRTcmMoYVZhbHVlKTsKIH0K
IAogdm9pZApAQCAtMjAwLDggKzIwMCwzNyBAQCBuc0hUTUxJRnJhbWVFbGVtZW50OjpJc0F0dHJp
YnV0ZU1hcHBlZChjCiAKIAogbnNNYXBSdWxlVG9BdHRyaWJ1dGVzRnVuYwogbnNIVE1MSUZyYW1l
RWxlbWVudDo6R2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3QKIHsKICAgcmV0dXJu
ICZNYXBBdHRyaWJ1dGVzSW50b1J1bGU7CiB9CiAKK25zcmVzdWx0Cituc0hUTUxJRnJhbWVFbGVt
ZW50OjpBZnRlclNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQXR0clZhbHVlKiBhVmFs
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhTm90aWZ5KQorewor
ICBpZiAoYU5hbWUgPT0gbnNHa0F0b21zOjpzYW5kYm94ICYmIGFOYW1lU3BhY2VJRCA9PSBrTmFt
ZVNwYWNlSURfTm9uZSkgeworICAgIC8vIFBhcnNlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNhbmRi
b3ggYXR0cmlidXRlLCBhbmQgaWYgd2UgaGF2ZSBhIGRvY3NoZWxsCisgICAgLy8gc2V0IGl0cyBz
YW5kYm94IGZsYWdzIGFwcHJvcHJpYXRlbHkuCisgICAgaWYgKG1GcmFtZUxvYWRlcikgeworICAg
ICAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY3NoZWxsID0gbUZyYW1lTG9hZGVyLT5HZXRFeGlz
dGluZ0RvY1NoZWxsKCk7CisKKyAgICAgIGlmIChkb2NzaGVsbCkgeworICAgICAgICBQUlVpbnQz
MiBuZXdGbGFncyA9IDA7CisgICAgICAgIC8vIElmIGEgTlVMTCBhVmFsdWUgaXMgcGFzc2VkIGlu
LCB3ZSB3YW50IHRvIGNsZWFyIHRoZSBzYW5kYm94IGZsYWdzCisgICAgICAgIC8vIHdoaWNoIHdl
IHdpbGwgZG8gYnkgc2V0dGluZyB0aGVtIHRvIDAuCisgICAgICAgIGlmIChhVmFsdWUpIHsKKyAg
ICAgICAgICBuc0F1dG9TdHJpbmcgc3RyVmFsdWU7CisgICAgICAgICAgYVZhbHVlLT5Ub1N0cmlu
ZyhzdHJWYWx1ZSk7CisgICAgICAgICAgbmV3RmxhZ3MgPSBuc0NvbnRlbnRVdGlsczo6UGFyc2VT
YW5kYm94QXR0cmlidXRlVG9GbGFncygKKyAgICAgICAgICAgIHN0clZhbHVlKTsKKyAgICAgICAg
fSAgIAorICAgICAgICBkb2NzaGVsbC0+U2V0U2FuZGJveEZsYWdzKG5ld0ZsYWdzKTsKKyAgICAg
IH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIG5zR2VuZXJpY0hUTUxFbGVtZW50OjpBZnRlclNldEF0
dHIoYU5hbWVTcGFjZUlELCBhTmFtZSwgYVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhTm90aWZ5KTsKKworfQpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmgKLS0tIGEvY29udGVudC9odG1sL2NvbnRlbnQv
c3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMv
bnNIVE1MSUZyYW1lRWxlbWVudC5oCkBAIC0xLDE2ICsxLDE3IEBACiAvKiAtKi0gTW9kZTogQysr
OyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIg
LSotICovCiAvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMg
b2YgdGhlIE1vemlsbGEgUHVibGljCiAgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0
aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCiAgKiBmaWxlLCBZb3UgY2FuIG9i
dGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwogCiAjaW5jbHVkZSAi
bnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIm5zSURPTUhUTUxJRnJhbWVF
bGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NR2V0U1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJu
c0NvbnRlbnRVdGlscy5oIgogCiBjbGFzcyBuc0hUTUxJRnJhbWVFbGVtZW50IDogcHVibGljIG5z
R2VuZXJpY0hUTUxGcmFtZUVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJs
aWMgbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBw
dWJsaWMgbnNJRE9NR2V0U1ZHRG9jdW1lbnQKIHsKIHB1YmxpYzoKICAgbnNIVE1MSUZyYW1lRWxl
bWVudChhbHJlYWR5X0FkZFJlZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8sCiAgICAgICAgICAg
ICAgICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyID0gbW96aWxs
YTo6ZG9tOjpOT1RfRlJPTV9QQVJTRVIpOwpAQCAtNDEsMTIgKzQyLDM2IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdHRyVmFsdWUmIGFSZXN1bHQpOwogICBO
U19JTUVUSE9EXyhib29sKSBJc0F0dHJpYnV0ZU1hcHBlZChjb25zdCBuc0lBdG9tKiBhQXR0cmli
dXRlKSBjb25zdDsKICAgdmlydHVhbCBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jIEdldEF0dHJp
YnV0ZU1hcHBpbmdGdW5jdGlvbigpIGNvbnN0OwogCiAgIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUo
bnNJTm9kZUluZm8gKmFOb2RlSW5mbywgbnNJTm9kZSAqKmFSZXN1bHQpIGNvbnN0OwogICB2aXJ0
dWFsIG5zWFBDQ2xhc3NJbmZvKiBHZXRDbGFzc0luZm8oKTsKICAgdmlydHVhbCBuc0lET01Ob2Rl
KiBBc0RPTU5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKKyAgdmlydHVhbCBuc3Jlc3VsdCBBZnRl
clNldEF0dHIoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F0dHJWYWx1ZSogYVZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpOworCisgIFBSVWludDMyIEdl
dFNhbmRib3hGbGFncygpCisgIHsKKyAgICBuc0F1dG9TdHJpbmcgc2FuZGJveEF0dHI7CisKKyAg
ICBpZiAoR2V0QXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpzYW5kYm94LCBzYW5k
Ym94QXR0cikpIHsKKyAgICAgIHJldHVybiBuc0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0
cmlidXRlVG9GbGFncyhzYW5kYm94QXR0cik7CisgICAgfQorCisgICAgLy8gTm8gc2FuZGJveCBh
dHRyaWJ1dGUsIG5vIHNhbmRib3ggZmxhZ3MuCisgICAgcmV0dXJuIDA7CisgIH0KKworICBzdGF0
aWMgbnNIVE1MSUZyYW1lRWxlbWVudCogRnJvbUNvbnRlbnQobnNJQ29udGVudCAqYUNvbnRlbnQp
CisgIHsKKyAgICBpZiAoYUNvbnRlbnQtPklzSFRNTChuc0drQXRvbXM6OmlmcmFtZSkpIHsKKyAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxuc0hUTUxJRnJhbWVFbGVtZW50Kj4oYUNvbnRlbnQpOwor
ICAgIH0KKyAgICByZXR1cm4gbnNudWxsOworICB9CisKIHByb3RlY3RlZDoKICAgdmlydHVhbCB2
b2lkIEdldEl0ZW1WYWx1ZVRleHQobnNBU3RyaW5nJiB0ZXh0KTsKICAgdmlydHVhbCB2b2lkIFNl
dEl0ZW1WYWx1ZVRleHQoY29uc3QgbnNBU3RyaW5nJiB0ZXh0KTsKIH07CmRpZmYgLS1naXQgYS9j
b250ZW50L2h0bWwvZG9jdW1lbnQvc3JjL25zSFRNTERvY3VtZW50LmNwcCBiL2NvbnRlbnQvaHRt
bC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQvaHRtbC9kb2N1
bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9z
cmMvbnNIVE1MRG9jdW1lbnQuY3BwCkBAIC05OCwxNiArOTgsMTcgQEAKICNpbmNsdWRlICJwcnBy
Zi5oIgogI2luY2x1ZGUgIm1vemlsbGEvZG9tL0VsZW1lbnQuaCIKICNpbmNsdWRlICJtb3ppbGxh
L1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibnNNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJuc0lS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAibnNIdG1sNVRyZWVPcEV4ZWN1dG9yLmgiCiAjaW5jbHVkZSAi
bnNIdG1sNVBhcnNlci5oIgogI2luY2x1ZGUgIm5zSURPTUpTV2luZG93LmgiCisjaW5jbHVkZSAi
bnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1l
c3BhY2UgbW96aWxsYTo6ZG9tOwogCiAjZGVmaW5lIE5TX01BWF9ET0NVTUVOVF9XUklURV9ERVBU
SCAyMAogCiAjaW5jbHVkZSAicHJtZW0uaCIKICNpbmNsdWRlICJwcnRpbWUuaCIKQEAgLTEyMTcs
MTYgKzEyMTgsMjIgQEAgbnNIVE1MRG9jdW1lbnQ6OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwog
ewogICBhQ29va2llLlRydW5jYXRlKCk7IC8vIGNsZWFyIGN1cnJlbnQgY29va2llIGluIGNhc2Ug
c2VydmljZSBmYWlsczsKICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBjb29raWUgaXNuJ3Qg
YW4gZXJyb3IgY29uZGl0aW9uLgogCiAgIGlmIChtRGlzYWJsZUNvb2tpZUFjY2VzcykgewogICAg
IHJldHVybiBOU19PSzsKICAgfQogCisgIC8vIElmIHRoZSBkb2N1bWVudCdzIHNhbmRib3hlZCBv
cmlnaW4gZmxhZyBpcyBzZXQsIGFjY2VzcyB0byByZWFkIGNvb2tpZXMKKyAgLy8gaXMgcHJvaGli
aXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfT1JJR0lOKSB7CisgICAgcmV0
dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgIH0KKyAgCiAgIC8vIG5vdCBoYXZpbmcg
YSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2
aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQp
OwogICBpZiAoc2VydmljZSkgewogICAgIC8vIEdldCBhIFVSSSBmcm9tIHRoZSBkb2N1bWVudCBw
cmluY2lwYWwuIFdlIHVzZSB0aGUgb3JpZ2luYWwKICAgICAvLyBjb2RlYmFzZSBpbiBjYXNlIHRo
ZSBjb2RlYmFzZSB3YXMgY2hhbmdlZCBieSBTZXREb21haW4KICAgICBuc0NPTVB0cjxuc0lVUkk+
IGNvZGViYXNlVVJJOwogICAgIE5vZGVQcmluY2lwYWwoKS0+R2V0VVJJKGdldHRlcl9BZGRSZWZz
KGNvZGViYXNlVVJJKSk7CiAKQEAgLTEyNDcsMTYgKzEyNTQsMjIgQEAgbnNIVE1MRG9jdW1lbnQ6
OkdldENvb2tpZShuc0FTdHJpbmcmIGFDbwogCiBOU19JTUVUSE9ESU1QCiBuc0hUTUxEb2N1bWVu
dDo6U2V0Q29va2llKGNvbnN0IG5zQVN0cmluZyYgYUNvb2tpZSkKIHsKICAgaWYgKG1EaXNhYmxl
Q29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRv
Y3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNldCwgYWNjZXNzIHRvIHdyaXRlIGNv
b2tpZXMKKyAgLy8gaXMgcHJvaGliaXRlZC4KKyAgaWYgKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9Y
RURfT1JJR0lOKSB7CisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgIH0K
KwogICAvLyBub3QgaGF2aW5nIGEgY29va2llIHNlcnZpY2UgaXNuJ3QgYW4gZXJyb3IKICAgbnND
T01QdHI8bnNJQ29va2llU2VydmljZT4gc2VydmljZSA9IGRvX0dldFNlcnZpY2UoTlNfQ09PS0lF
U0VSVklDRV9DT05UUkFDVElEKTsKICAgaWYgKHNlcnZpY2UgJiYgbURvY3VtZW50VVJJKSB7CiAg
ICAgbnNDT01QdHI8bnNJUHJvbXB0PiBwcm9tcHQ7CiAgICAgbnNDT01QdHI8bnNQSURPTVdpbmRv
dz4gd2luZG93ID0gR2V0V2luZG93KCk7CiAgICAgaWYgKHdpbmRvdykgewogICAgICAgd2luZG93
LT5HZXRQcm9tcHRlcihnZXR0ZXJfQWRkUmVmcyhwcm9tcHQpKTsKICAgICB9CmRpZmYgLS1naXQg
YS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxs
LmNwcAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jh
c2UvbnNEb2NTaGVsbC5jcHAKQEAgLTE3OSwxNiArMTc5LDE3IEBACiAjaW5jbHVkZSAibnNJV2Vi
QnJvd3NlclByaW50LmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgIm5zUGx1Z2luRXJyb3IuaCIKICNp
bmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zQ29udGVudEVycm9ycy5oIgog
I2luY2x1ZGUgIm5zSUNoYW5uZWxQb2xpY3kuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJp
dHlQb2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNY
VUxBcHBBUEkuaCIKIAogI2luY2x1ZGUgIm5zRE9NTmF2aWdhdGlvblRpbWluZy5oIgogI2luY2x1
ZGUgIm5zSVRpbWVkQ2hhbm5lbC5oIgogI2luY2x1ZGUgIm1vemlsbGEvU3RhcnR1cFRpbWVsaW5l
LmgiCiAjaW5jbHVkZSAibnNJRnJhbWVNZXNzYWdlTWFuYWdlci5oIgogCkBAIC03MzIsMTYgKzcz
MywxNyBAQCBuc0RvY1NoZWxsOjpuc0RvY1NoZWxsKCk6CiAgICAgbUJ1c3lGbGFncyhCVVNZX0ZM
QUdTX05PTkUpLAogICAgIG1BcHBUeXBlKG5zSURvY1NoZWxsOjpBUFBfVFlQRV9VTktOT1dOKSwK
ICAgICBtTG9hZFR5cGUoMCksCiAgICAgbU1hcmdpbldpZHRoKC0xKSwKICAgICBtTWFyZ2luSGVp
Z2h0KC0xKSwKICAgICBtSXRlbVR5cGUodHlwZUNvbnRlbnQpLAogICAgIG1QcmV2aW91c1RyYW5z
SW5kZXgoLTEpLAogICAgIG1Mb2FkZWRUcmFuc0luZGV4KC0xKSwKKyAgICBtU2FuZGJveEZsYWdz
KDApLAogICAgIG1DcmVhdGVkKGZhbHNlKSwKICAgICBtQWxsb3dTdWJmcmFtZXModHJ1ZSksCiAg
ICAgbUFsbG93UGx1Z2lucyh0cnVlKSwKICAgICBtQWxsb3dKYXZhc2NyaXB0KHRydWUpLAogICAg
IG1BbGxvd01ldGFSZWRpcmVjdHModHJ1ZSksCiAgICAgbUFsbG93SW1hZ2VzKHRydWUpLAogICAg
IG1BbGxvd0ROU1ByZWZldGNoKHRydWUpLAogICAgIG1BbGxvd1dpbmRvd0NvbnRyb2wodHJ1ZSks
CkBAIC0zMDA1LDE2ICszMDA3LDczIEBAIG5zRG9jU2hlbGw6OkZpbmRJdGVtV2l0aE5hbWUoY29u
c3QgUFJVbmkKICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChmb3VuZEl0ZW0pIHsKICAgICAgICAgICAgIC8vIFdlIHJldHVybiBmb3VuZEl0
ZW0gaGVyZSBldmVuIGlmIGl0J3Mgbm90IGFuIGFjdGl2ZQogICAgICAgICAgICAgLy8gaXRlbSBz
aW5jZSBhbGwgdGhlIG5hbWVzIHdlJ3ZlIGRlYWx0IHdpdGggc28gZmFyIGFyZQogICAgICAgICAg
ICAgLy8gc3BlY2lhbCBjYXNlcyB0aGF0IHdlIHdvbid0IGJvdGhlciBsb29raW5nIGZvciBmdXJ0
aGVyLgogCisgICAgICAgICAgICAvLyBJZiBvdXIgZG9jdW1lbnQgaXMgc2FuZGJveGVkLCB3ZSBu
ZWVkIHRvIGRvIHNvbWUgZXh0cmEgY2hlY2tzLgorICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJv
eEZsYWdzID0gMDsKKworICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRv
X0dldEludGVyZmFjZShhT3JpZ2luYWxSZXF1ZXN0b3IpOworCisgICAgICAgICAgICBpZiAoZG9j
KSB7CisgICAgICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5TYW5kYm94RmxhZ3MoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncykgeworICAgICAg
ICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHJvb3Q7CisgICAgICAgICAg
ICAgICAgR2V0U2FtZVR5cGVSb290VHJlZUl0ZW0oZ2V0dGVyX0FkZFJlZnMocm9vdCkpOworCisg
ICAgICAgICAgICAgICAgLy8gSXMgdGhlIGZvdW5kIGl0ZW0gbm90IGEgdG9wIGxldmVsIGJyb3dz
aW5nIGNvbnRleHQgYW5kIG5vdCBvdXJzZWxmID8KKyAgICAgICAgICAgICAgICBuc0NPTVB0cjxu
c0lEb2NTaGVsbFRyZWVJdGVtPiBzZWxmQXNJdGVtID0gc3RhdGljX2Nhc3Q8bnNJRG9jU2hlbGxU
cmVlSXRlbSAqPih0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRJdGVtICE9IHJvb3Qg
JiYgZm91bmRJdGVtICE9IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXJl
IHdlIGFuIGFuY2VzdG9yIG9mIHRoZSBmb3VuZEl0ZW0gPworICAgICAgICAgICAgICAgICAgICBi
b29sIGlzQW5jZXN0b3IgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxu
c0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0ZW07CisgICAgICAgICAgICAgICAgICAgIEdl
dFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudEFzSXRlbSkpOworCisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBzZWxmQXNJdGVtKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmNlc3RvciA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQW5jZXN0b3IpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE5vLCB3ZSBhcmUgbm90IGFuIGFuY2VzdG9yIGFuZCBvdXIgZG9j
dW1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbmRib3hlZCwgd2UgY2FuJ3Qg
YWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0IC0gaXMgaXQgYW4gYW5j
ZXN0b3Igb2Ygb3VycyA/CisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
VHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0
dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRtcCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gZm91bmRJdGVtKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhbmNlc3RvciwgYW5kIHdl
IGFyZSBzYW5kYm94ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIGFs
bG93LXRvcC1uYXZpZ2F0aW9uIGlzIHNldCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX1RPUExFVkVM
X05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVt
ID0gbnNudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRtcC0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBmb3VuZEl0ZW0uc3dhcCgqX3JldHZhbCk7CiAgICAgICAgICAgICByZXR1cm4g
TlNfT0s7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBLZWVwIGxvb2tpbmcKICAgICAgICAg
CiAgICAgLy8gRmlyc3Qgd2UgY2hlY2sgb3VyIG5hbWUuCkBAIC01MDYwLDE2ICs1MTE5LDMwIEBA
IG5zRG9jU2hlbGw6OlNldElzQXBwVGFiKGJvb2wgYUlzQXBwVGFiKQogTlNfSU1FVEhPRElNUAog
bnNEb2NTaGVsbDo6R2V0SXNBcHBUYWIoYm9vbCAqYUlzQXBwVGFiKQogewogICAqYUlzQXBwVGFi
ID0gbUlzQXBwVGFiOwogICByZXR1cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKK25zRG9j
U2hlbGw6OlNldFNhbmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQoreworICAgIG1T
YW5kYm94RmxhZ3MgPSBhU2FuZGJveEZsYWdzOworICAgIHJldHVybiBOU19PSzsKK30KKworTlNf
SU1FVEhPRElNUAorbnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRi
b3hGbGFncykKK3sKKyAgICAqYVNhbmRib3hGbGFncyA9IG1TYW5kYm94RmxhZ3M7CisgICAgcmV0
dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpTZXRWaXNpYmlsaXR5
KGJvb2wgYVZpc2liaWxpdHkpCiB7CiAgICAgaWYgKCFtQ29udGVudFZpZXdlcikKICAgICAgICAg
cmV0dXJuIE5TX09LOwogICAgIGlmIChhVmlzaWJpbGl0eSkgewogICAgICAgICBtQ29udGVudFZp
ZXdlci0+U2hvdygpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTgzMDksMTYgKzgzODIsMzIgQEAg
bnNEb2NTaGVsbDo6SW50ZXJuYWxMb2FkKG5zSVVSSSAqIGFVUkksCiAgICAgICAgIG5zQ09NUHRy
PG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRhcmdldEl0ZW07CiAgICAgICAgIEZpbmRJdGVtV2l0aE5h
bWUoYVdpbmRvd1RhcmdldCwgbnNudWxsLCB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAg
IGdldHRlcl9BZGRSZWZzKHRhcmdldEl0ZW0pKTsKIAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NT
aGVsbD4gdGFyZ2V0RG9jU2hlbGwgPSBkb19RdWVyeUludGVyZmFjZSh0YXJnZXRJdGVtKTsKICAg
ICAgICAgCiAgICAgICAgIGJvb2wgaXNOZXdXaW5kb3cgPSBmYWxzZTsKICAgICAgICAgaWYgKCF0
YXJnZXREb2NTaGVsbCkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGRvY3NoZWxsJ3MgZG9jdW1l
bnQgaXMgc2FuZGJveGVkIGFuZCB3YXMgdHJ5aW5nIHRvCisgICAgICAgICAgICAvLyBuYXZpZ2F0
ZS9sb2FkIGEgZnJhbWUgaXQgd2Fzbid0IGFsbG93ZWQgdG8gYWNjZXNzLCB0aGUKKyAgICAgICAg
ICAgIC8vIEZpbmRJdGVtV2l0aE5hbWUgYWJvdmUgd2lsbCBoYXZlIHJldHVybmVkIG51bGwgZm9y
IHRoZSB0YXJnZXQKKyAgICAgICAgICAgIC8vIGl0ZW0gLSB3ZSBkb24ndCB3YW50IHRvIGFjdHVh
bGx5IG9wZW4gYSBuZXcgd2luZG93IGluIHRoaXMgY2FzZQorICAgICAgICAgICAgLy8gdGhvdWdo
LiBDaGVjayBpZiB3ZSBhcmUgc2FuZGJveGVkIGFuZCBiYWlsIG91dCBoZXJlIGlmIHNvLgorICAg
ICAgICAgICAgTlNfRU5TVVJFX1RSVUUobUNvbnRlbnRWaWV3ZXIsIE5TX0VSUk9SX0ZBSUxVUkUp
OworICAgICAgICAgICAgbnNJRG9jdW1lbnQqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1
bWVudCgpOworICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICAgICAg
ICAgICAgaWYgKGRvYykgeworICAgICAgICAgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+U2Fu
ZGJveEZsYWdzKCk7CisgICAgICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hF
RF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlM
VVJFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbnND
T01QdHI8bnNJRE9NV2luZG93PiB3aW4gPQogICAgICAgICAgICAgICAgIGRvX0dldEludGVyZmFj
ZShHZXRBc1N1cHBvcnRzKHRoaXMpKTsKICAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKHdpbiwg
TlNfRVJST1JfTk9UX0FWQUlMQUJMRSk7CiAKICAgICAgICAgICAgIG5zRGVwZW5kZW50U3RyaW5n
IG5hbWUoYVdpbmRvd1RhcmdldCk7CiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+
IG5ld1dpbjsKICAgICAgICAgICAgIHJ2ID0gd2luLT5PcGVuKEVtcHR5U3RyaW5nKCksIC8vIFVS
TCB0byBsb2FkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAvLyB3
aW5kb3cgbmFtZQpAQCAtOTEyMCwxOCArOTIwOSwzMSBAQCBuc0RvY1NoZWxsOjpEb1VSSUxvYWQo
bnNJVVJJICogYVVSSSwKICAgICAgICAgfQogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4
cGxpY2l0bHkKICAgICAgICAgaWYgKGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAg
ICAgICAgICAgICAvLyBSZWZlcnJlciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlj
a3MgaGVyZS4KICAgICAgICAgICAgIGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJV
UkkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25l
clByaW5jaXBhbChkb19RdWVyeUludGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGls
czo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUp
OworICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWw7CisKKyAgICAvLyBJ
ZiB0aGUgY29udGVudCBiZWluZyBsb2FkZWQgc2hvdWxkIGJlIHNhbmRib3hlZCB3aXRoIHJlc3Bl
Y3QgdG8gb3JpZ2luCisgICAgLy8gd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lw
YWwgaGVyZSwgYW5kIHRoZW4gdGVsbAorICAgIC8vIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5u
ZWxPd25lciB0byBmb3JjZSBpdCB0byBiZSBzZXQgYXMgdGhlCisgICAgLy8gY2hhbm5lbCBvd25l
ci4KKyAgICBpZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICAgICAg
b3duZXJQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL251bGxwcmlu
Y2lwYWw7MSIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vdCBzYW5kYm94ZWQgLSB3ZSBh
bGxvdyB0aGUgY29udGVudCB0byBhc3N1bWUgaXRzIG5hdHVyYWwgb3duZXIuCisgICAgICAgIG93
bmVyUHJpbmNpcGFsID0gZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKTsKKyAgICB9CisKKyAgICBu
c0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWws
IGFVUkksIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU2Fu
ZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikpOwogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0
Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAg
IGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0
IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5u
ZWwtPgogICAgICAgICAgICAgU2V0RXhlY3V0aW9uUG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVY
RUNVVEVfTk9STUFMKTsKICAgICB9CiAKQEAgLTExODU4LDE2ICsxMTk2MCwzNCBAQCBuc0RvY1No
ZWxsOjpTaG91bGRCbG9ja0xvYWRpbmdGb3JCYWNrQnV0CiAgICAgcmV0dXJuIGZhbHNlOwogICB9
CiAKICAgYm9vbCBjYW5Hb0ZvcndhcmQgPSBmYWxzZTsKICAgR2V0Q2FuR29Gb3J3YXJkKCZjYW5H
b0ZvcndhcmQpOwogICByZXR1cm4gY2FuR29Gb3J3YXJkOwogfQogCitib29sIAorbnNEb2NTaGVs
bDo6UGx1Z2luc0FsbG93ZWRJbkN1cnJlbnREb2MoKQoreworICBib29sIHBsdWdpbnNBbGxvd2Vk
ID0gZmFsc2U7CisKKyAgaWYgKCFtQ29udGVudFZpZXdlcikgeworICAgIHJldHVybiBmYWxzZTsK
KyAgfQorICAKKyAgbnNJRG9jdW1lbnQqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVu
dCgpOworICBpZiAoIWRvYykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICAKKyAgZG9jLT5H
ZXRBbGxvd1BsdWdpbnMoJnBsdWdpbnNBbGxvd2VkKTsKKyAgcmV0dXJuIHBsdWdpbnNBbGxvd2Vk
OworfQorCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFdlYiBTaGVsbCBTZXJ2aWNlcyBBUEkKIAogLy9U
aGlzIGZ1bmN0aW9ucyBpcyBvbmx5IGNhbGxlZCB3aGVuIGEgbmV3IGNoYXJzZXQgaXMgZGV0ZWN0
ZWQgaW4gbG9hZGluZyBhIGRvY3VtZW50LiAKIC8vSXRzIG5hbWUgc2hvdWxkIGJlIGNoYW5nZWQg
dG8gIkNoYXJzZXRSZWxvYWREb2N1bWVudCIKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlJl
bG9hZERvY3VtZW50KGNvbnN0IGNoYXIqIGFDaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJJbnQzMiBhU291cmNlKQpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1No
ZWxsLmggYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAotLS0gYS9kb2NzaGVsbC9iYXNlL25z
RG9jU2hlbGwuaAorKysgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaApAQCAtNzczLDE2ICs3
NzMsMTggQEAgcHJvdGVjdGVkOgogICAgIC8vIENyZWF0ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUg
aXMgbm90IGV4cGVjdGVkIHRvIGNoYW5nZS4KICAgICBQUkludDMyICAgICAgICAgICAgICAgICAg
ICBtSXRlbVR5cGU7CiAKICAgICAvLyBJbmRleCBpbnRvIHRoZSBTSFRyYW5zYWN0aW9uIGxpc3Qs
IGluZGljYXRpbmcgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50CiAgICAgLy8gdHJhbnNhY3Rpb24g
YXQgdGhlIHRpbWUgdGhhdCB0aGlzIERvY1NoZWxsIGJlZ2lucyB0byBsb2FkCiAgICAgUFJJbnQz
MiAgICAgICAgICAgICAgICAgICAgbVByZXZpb3VzVHJhbnNJbmRleDsKICAgICBQUkludDMyICAg
ICAgICAgICAgICAgICAgICBtTG9hZGVkVHJhbnNJbmRleDsKIAorICAgIFBSVWludDMyICAgICAg
ICAgICAgICAgICAgIG1TYW5kYm94RmxhZ3M7CisKICAgICBib29sICAgICAgICAgICAgICAgICAg
ICAgICBtQ3JlYXRlZDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJm
cmFtZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAg
ICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wg
ICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAg
ICAgICAgICAgICAgICAgICAgbUFsbG93SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAg
ICAgICAgIG1BbGxvd0ROU1ByZWZldGNoOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAg
IG1BbGxvd1dpbmRvd0NvbnRyb2w7CkBAIC04MTYsMTcgKzgxOCwxNyBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICAvLyBJbmRpY2F0ZXMgdGhhdCBhIERvY1NoZWxsIGluIHRoaXMgImRvY3NoZWxsIHRyZWUi
IGlzIHByaW50aW5nCiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUlzUHJpbnRpbmdP
clBQOwogCiAgICAgLy8gSW5kaWNhdGVzIHRvIENyZWF0ZUNvbnRlbnRWaWV3ZXIoKSB0aGF0IGl0
IGlzIHNhZmUgdG8gY2FjaGUgdGhlIG9sZAogICAgIC8vIHByZXNlbnRhdGlvbiBvZiB0aGUgcGFn
ZSwgYW5kIHRvIFNldHVwTmV3Vmlld2VyKCkgdGhhdCB0aGUgb2xkIHZpZXdlcgogICAgIC8vIHNo
b3VsZCBiZSBwYXNzZWQgYSBTSEVudHJ5IHRvIHNhdmUgaXRzZWxmIGludG8uCiAgICAgYm9vbCAg
ICAgICAgICAgICAgICAgICAgICAgbVNhdmluZ09sZFZpZXdlcjsKLQorICAgIAogICAgIC8vIEBz
ZWUgbnNJRG9jU2hlbGxIaXN0b3J5OjpjcmVhdGVkRHluYW1pY2FsbHkKICAgICBib29sICAgICAg
ICAgICAgICAgICAgICAgICBtRHluYW1pY2FsbHlDcmVhdGVkOwogI2lmZGVmIERFQlVHCiAgICAg
Ym9vbCAgICAgICAgICAgICAgICAgICAgICAgbUluRW5zdXJlU2NyaXB0RW52OwogI2VuZGlmCiAg
ICAgUFJVaW50NjQgICAgICAgICAgICAgICAgICAgbUhpc3RvcnlJRDsKIAogICAgIHN0YXRpYyBu
c0lVUklGaXh1cCAqc1VSSUZpeHVwOwpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NT
aGVsbC5pZGwgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAotLS0gYS9kb2NzaGVsbC9i
YXNlL25zSURvY1NoZWxsLmlkbAorKysgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbApA
QCAtMzQsMTcgKzM0LDE3IEBAIGludGVyZmFjZSBuc0lTSEVudHJ5OwogaW50ZXJmYWNlIG5zSUxh
eW91dEhpc3RvcnlTdGF0ZTsKIGludGVyZmFjZSBuc0lTZWN1cmVCcm93c2VyVUk7CiBpbnRlcmZh
Y2UgbnNJRE9NU3RvcmFnZTsKIGludGVyZmFjZSBuc0lQcmluY2lwYWw7CiBpbnRlcmZhY2UgbnNJ
V2ViQnJvd3NlclByaW50OwogaW50ZXJmYWNlIG5zSVZhcmlhbnQ7CiBpbnRlcmZhY2UgbnNJUHJp
dmFjeVRyYW5zaXRpb25PYnNlcnZlcjsKIAotW3NjcmlwdGFibGUsIGJ1aWx0aW5jbGFzcywgdXVp
ZCg1MWYyYjdmMC02NDM1LTQwZWMtYjMxNS01ODhmNTJiZTdlZWEpXQorW3NjcmlwdGFibGUsIGJ1
aWx0aW5jbGFzcywgdXVpZCg5YjI4MzMzNy0wOTdkLTRmYTgtYTJkYS05MTYzMThlYWY4MjgpXQog
aW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKIHsKICAgLyoqCiAgICAqIExvYWRz
IGEgZ2l2ZW4gVVJJLiAgVGhpcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gbG9hZGluZyB0aGUgcmVx
dWVzdGVkIFVSSQogICAgKiBpbiB0aGUgb2JqZWN0IGltcGxlbWVudGluZwl0aGlzIGludGVyZmFj
ZS4gIElmIGl0IGNhbid0IGJlIGxvYWRlZCBoZXJlCiAgICAqIGhvd2V2ZXIsIHRoZSBVUkwgZGlz
cGF0Y2hlciB3aWxsIGdvIHRocm91Z2ggaXRzIG5vcm1hbCBwcm9jZXNzIG9mIGNvbnRlbnQKICAg
ICogbG9hZGluZy4KICAgICoKQEAgLTY0NSw5ICs2NDUsMzEgQEAgaW50ZXJmYWNlIG5zSURvY1No
ZWxsIDogbnNJU3VwcG9ydHMKICAgICovCiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sIGFzeW5j
UGFuWm9vbUVuYWJsZWQ7CiAKICAgLyoqCiAgICAqIExpa2UgR2V0U2FtZVR5cGVQYXJlbnQsIGV4
Y2VwdCB0aGlzIGlnbm9yZXMgPGlmcmFtZSBtb3picm93c2VyPgogICAgKiBib3VuZGFyaWVzLgog
ICAgKi8KICAgbnNJRG9jU2hlbGwgZ2V0UGFyZW50SWdub3JlQnJvd3NlckZyYW1lKCk7CisKKyAg
LyoqCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2NzaGVsbC4gVGhlc2UgcmVmbGVj
dCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlIG9mIHRoZSBhc3NvY2lh
dGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYKKyAgICogZXhpc3RlbnQu
IFNlZSB0aGUgSFRNTDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBUaGVzZSBmbGFncyBv
biB0aGUgZG9jc2hlbGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2FuZGJveAor
ICAgKiBhdHRyaWJ1dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuIFRoZXkgYXJlIG9ubHkgdXNlZCB3
aGVuIGxvYWRpbmcgbmV3CisgICAqIGNvbnRlbnQsIHNhbmRib3ggZmxhZ3MgYXJlIGFsc28gaW1t
dXRhYmx5IHNldCBvbiB0aGUgZG9jdW1lbnQgd2hlbiBpdCBpcworICAgKiBsb2FkZWQuCisgICAq
IFRoZSBzYW5kYm94IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94IGZs
YWdzIG9uIGl0cworICAgKiBkb2NzaGVsbCBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVudCwgaWYg
YW55LgorICAgKiBTZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgor
ICAgKi8KKyAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdzOworCisgIC8qKgor
ICAgKiBBcmUgcGx1Z2lucyBhbGxvd2VkIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IGxvYWRlZCBp
biB0aGlzIGRvY3NoZWxsID8KKyAgICogKGlmIHRoZXJlIGlzIG9uZSkuIFRoaXMgZGVwZW5kcyBv
biB3aGV0aGVyIHBsdWdpbnMgYXJlIGFsbG93ZWQgYnkgdGhpcworICAgKiBkb2NzaGVsbCBpdHNl
bGYgb3IgaWYgdGhlIGRvY3VtZW50IGlzIHNhbmRib3hlZCBhbmQgaGVuY2UgcGx1Z2lucyBzaG91
bGQKKyAgICogbm90IGJlIGFsbG93ZWQuCisgICAqLworICBbbm9zY3JpcHQsIG5vdHhwY29tXSBi
b29sIHBsdWdpbnNBbGxvd2VkSW5DdXJyZW50RG9jKCk7CiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2Jh
c2UvbnNHbG9iYWxXaW5kb3cuY3BwIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCi0tLSBh
L2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcAorKysgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRv
dy5jcHAKQEAgLTIxNywxNiArMjE3LDE3IEBACiAjaW5jbHVkZSAibW96QXV0b0RvY1VwZGF0ZS5o
IgogCiAjaW5jbHVkZSAibW96aWxsYS9UZWxlbWV0cnkuaCIKICNpbmNsdWRlICJuc0xvY2F0aW9u
LmgiCiAjaW5jbHVkZSAibnNXcmFwcGVyQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAibnNET01F
dmVudFRhcmdldEhlbHBlci5oIgogI2luY2x1ZGUgIm5zSUFwcHNTZXJ2aWNlLmgiCiAjaW5jbHVk
ZSAicHJybmcuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZkZWYgQU5EUk9J
RAogI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+CiAjZW5kaWYKIAogI2lmZGVmIFBSX0xPR0dJTkcK
IHN0YXRpYyBQUkxvZ01vZHVsZUluZm8qIGdET01MZWFrUFJMb2c7CiAjZW5kaWYKQEAgLTgyMzMs
MTYgKzgyMzQsMjYgQEAgbnNHbG9iYWxXaW5kb3c6OkdldFNlc3Npb25TdG9yYWdlKG5zSURPTQog
ICBpZiAoIW1TZXNzaW9uU3RvcmFnZSkgewogICAgICphU2Vzc2lvblN0b3JhZ2UgPSBuc251bGw7
CiAKICAgICBuc1N0cmluZyBkb2N1bWVudFVSSTsKICAgICBpZiAobURvY3VtZW50KSB7CiAgICAg
ICBtRG9jdW1lbnQtPkdldERvY3VtZW50VVJJKGRvY3VtZW50VVJJKTsKICAgICB9CiAKKyAgICAv
LyBJZiB0aGUgZG9jdW1lbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAg
Ly8gZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIGxvY2FsU3RvcmFnZS4KKyAgICBpZiAoIW1Eb2MpIHsK
KyAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgIH0KKworICAgIGlmIChtRG9jLT5T
YW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICAgIHJldHVybiBOU19FUlJP
Ul9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zcmVzdWx0IHJ2ID0gZG9jU2hlbGwt
PkdldFNlc3Npb25TdG9yYWdlRm9yUHJpbmNpcGFsKHByaW5jaXBhbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFVSSSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1TZXNzaW9uU3RvcmFnZSkpOwogICAgIE5TX0VOU1VS
RV9TVUNDRVNTKHJ2LCBydik7CiAKICNpZmRlZiBQUl9MT0dHSU5HCiAgICAgaWYgKFBSX0xPR19U
RVNUKGdET01MZWFrUFJMb2csIFBSX0xPR19ERUJVRykpIHsKQEAgLTgyOTgsMTYgKzgzMDksMjIg
QEAgbnNHbG9iYWxXaW5kb3c6OkdldExvY2FsU3RvcmFnZShuc0lET01TdAogICAgICAgZG9fR2V0
U2VydmljZSgiQG1vemlsbGEub3JnL2RvbS9zdG9yYWdlbWFuYWdlcjsxIiwgJnJ2KTsKICAgICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7CiAg
ICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShkb2N1
bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2FuZGJv
eGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2NhbFN0
b3JhZ2UuCisgICAgaWYgKG1Eb2MgJiYgKG1Eb2MtPlNhbmRib3hGbGFncygpICYgU0FOREJPWEVE
X09SSUdJTikpIHsKKyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAg
IH0KKwogICAgIG5zSURvY1NoZWxsKiBkb2NTaGVsbCA9IEdldERvY1NoZWxsKCk7CiAgICAgbnND
T01QdHI8bnNJTG9hZENvbnRleHQ+IGxvYWRDb250ZXh0ID0gZG9fUXVlcnlJbnRlcmZhY2UoZG9j
U2hlbGwpOwogCiAgICAgcnYgPSBzdG9yYWdlTWFuYWdlci0+R2V0TG9jYWxTdG9yYWdlRm9yUHJp
bmNpcGFsKHByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRDb250ZXh0ICYmIGxvYWRDb250ZXh0LT5Vc2VQ
cml2YXRlQnJvd3NpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMobUxvY2FsU3RvcmFnZSkpOwogICAgIE5TX0VO
U1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQgYS9kb20vYmFzZS9uc1BsdWdpbkFycmF5
LmNwcCBiL2RvbS9iYXNlL25zUGx1Z2luQXJyYXkuY3BwCi0tLSBhL2RvbS9iYXNlL25zUGx1Z2lu
QXJyYXkuY3BwCisrKyBiL2RvbS9iYXNlL25zUGx1Z2luQXJyYXkuY3BwCkBAIC0xMCwxNiArMTAs
MTggQEAKICNpbmNsdWRlICJuc0lET01OYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJuc0lET01NaW1l
VHlwZS5oIgogI2luY2x1ZGUgIm5zSVBsdWdpbkhvc3QuaCIKICNpbmNsdWRlICJuc0lEb2NTaGVs
bC5oIgogI2luY2x1ZGUgIm5zSVdlYk5hdmlnYXRpb24uaCIKICNpbmNsdWRlICJuc0RPTUNsYXNz
SW5mb0lELmgiCiAjaW5jbHVkZSAibnNQbHVnaW5FcnJvci5oIgogI2luY2x1ZGUgIm5zUGx1Z2lu
SG9zdC5oIgorI2luY2x1ZGUgIm5zSUNvbnRlbnRWaWV3ZXIuaCIKKyNpbmNsdWRlICJuc0lEb2N1
bWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3pp
bGxhOjpkb207CiAKIG5zUGx1Z2luQXJyYXk6Om5zUGx1Z2luQXJyYXkoTmF2aWdhdG9yKiBuYXZp
Z2F0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURvY1NoZWxsICphRG9jU2hl
bGwpCiAgIDogbU5hdmlnYXRvcihuYXZpZ2F0b3IpLAogICAgIG1QbHVnaW5Ib3N0KGRvX0dldFNl
cnZpY2UoTU9aX1BMVUdJTl9IT1NUX0NPTlRSQUNUSUQpKSwKQEAgLTYwLDI0ICs2MiwyMyBAQCBu
c1BsdWdpbkFycmF5OjpHZXRMZW5ndGgoUFJVaW50MzIqIGFMZW5nCiAgIAogICAqYUxlbmd0aCA9
IDA7CiAgIHJldHVybiBOU19PSzsKIH0KIAogYm9vbAogbnNQbHVnaW5BcnJheTo6QWxsb3dQbHVn
aW5zKCkKIHsKLSAgYm9vbCBhbGxvd1BsdWdpbnMgPSBmYWxzZTsKICAgbnNDT01QdHI8bnNJRG9j
U2hlbGw+IGRvY1NoZWxsID0gZG9fUXVlcnlSZWZlcmVudChtRG9jU2hlbGwpOwogCi0gIGlmIChk
b2NTaGVsbCkKLSAgICBpZiAoTlNfRkFJTEVEKGRvY1NoZWxsLT5HZXRBbGxvd1BsdWdpbnMoJmFs
bG93UGx1Z2lucykpKQotICAgICAgYWxsb3dQbHVnaW5zID0gZmFsc2U7CisgIGlmICghZG9jU2hl
bGwpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KIAotICByZXR1cm4gYWxsb3dQbHVnaW5zOwor
ICByZXR1cm4gZG9jU2hlbGwtPlBsdWdpbnNBbGxvd2VkSW5DdXJyZW50RG9jKCk7CiB9CiAKIG5z
SURPTVBsdWdpbioKIG5zUGx1Z2luQXJyYXk6OkdldEl0ZW1BdChQUlVpbnQzMiBhSW5kZXgsIG5z
cmVzdWx0KiBhUmVzdWx0KQogewogICAqYVJlc3VsdCA9IE5TX09LOwogCiAgIGlmICghQWxsb3dQ
bHVnaW5zKCkpCmRpZmYgLS1naXQgYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJh
bWVFbGVtZW50LmlkbCBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1l
bnQuaWRsCi0tLSBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQu
aWRsCisrKyBiL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaWRs
CkBAIC0xMSwzMiArMTEsMzIgQEAKICAqCiAgKiBUaGlzIGludGVyZmFjZSBpcyB0cnlpbmcgdG8g
Zm9sbG93IHRoZSBET00gTGV2ZWwgMiBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8vd3d3
LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1MLwogICoKICAqIHdpdGggY2hhbmdlcyBmcm9tIHRo
ZSB3b3JrLWluLXByb2dyZXNzIFdIQVRXRyBIVE1MIHNwZWNpZmljYXRpb246CiAgKiBodHRwOi8v
d3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLwogICovCiAKLVtzY3Jp
cHRhYmxlLCB1dWlkKDk3RTRGMEUxLUJEMjctNDBFQy05Mjg3LTU2MzREQUYxNUI3MyldCitbc2Ny
aXB0YWJsZSwgdXVpZCg1MmY2MjQ0Yi1iMWY1LTRmNGMtOGZmMy03ZTE0NjMxNmY0MTEpXQogaW50
ZXJmYWNlIG5zSURPTUhUTUxJRnJhbWVFbGVtZW50IDogbnNJRE9NSFRNTEVsZW1lbnQKIHsKICAg
ICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgYWxpZ247CiAgICAgICAgICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGZyYW1lQm9yZGVyOwogICAgICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nICAgICAgICBoZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgICAgICAgIGxvbmdEZXNjOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBtYXJnaW5IZWlnaHQ7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1h
cmdpbldpZHRoOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBuYW1lOwog
ICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzY3JvbGxpbmc7CiAgICAgICAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNyYzsKICAgICAgICAgICAgYXR0cmlidXRl
IERPTVN0cmluZyAgICAgICAgd2lkdGg7CiAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDI6
CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01Eb2N1bWVudCAgIGNvbnRlbnREb2N1bWVudDsK
ICAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVdpbmRvdyAgICAgY29udGVudFdpbmRvdzsKIAot
CisgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHNhbmRib3g7CiAgIC8vIE1v
emlsbGEgZXh0ZW5zaW9ucwogICAvLyBpZnJhbWUgZWxlbWVudHMgcmVxdWlyZSB0aGUgbW96QWxs
b3dGdWxsU2NyZWVuIGF0dHJpYnV0ZSB0byBiZSBwcmVzZW50CiAgIC8vIGlmIHRoZXkncmUgdG8g
YWxsb3cgY29udGVudCBpbiB0aGUgc3ViIGRvY3VtZW50IHRvIGdvIGludG8gRE9NIGZ1bGwtc2Ny
ZWVuCiAgIC8vIG1vZGUuIFNlZSBodHRwczovL3dpa2kubW96aWxsYS5vcmcvaW5kZXgucGhwP3Rp
dGxlPUdlY2tvOkZ1bGxTY3JlZW5BUEkKICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAg
ICAgICAgbW96QWxsb3dGdWxsU2NyZWVuOwogfTsKZGlmZiAtLWdpdCBhL2RvbS9zcmMvanN1cmwv
bnNKU1Byb3RvY29sSGFuZGxlci5jcHAgYi9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRs
ZXIuY3BwCi0tLSBhL2RvbS9zcmMvanN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAKKysrIGIv
ZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcApAQCAtMzksMTYgKzM5LDE3IEBA
CiAjaW5jbHVkZSAibnNUaHJlYWRVdGlscy5oIgogI2luY2x1ZGUgIm5zSUpTQ29udGV4dFN0YWNr
LmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIm5zSURvY3VtZW50
LmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0SW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lPYmpl
Y3RPdXRwdXRTdHJlYW0uaCIKICNpbmNsdWRlICJuc0lXcml0YWJsZVByb3BlcnR5QmFnMi5oIgog
I2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIm5zU2FuZGJv
eEZsYWdzLmgiCiAKIHN0YXRpYyBOU19ERUZJTkVfQ0lEKGtKU1VSSUNJRCwgTlNfSlNVUklfQ0lE
KTsKIAogY2xhc3MgbnNKU1RodW5rIDogcHVibGljIG5zSUlucHV0U3RyZWFtCiB7CiBwdWJsaWM6
CiAgICAgbnNKU1RodW5rKCk7CiAKQEAgLTE4NSwxNiArMTg2LDIzIEBAIG5zcmVzdWx0IG5zSlNU
aHVuazo6RXZhbHVhdGVTY3JpcHQobnNJQ2gKICAgICAvLyBHZXQgdGhlIGdsb2JhbCBvYmplY3Qg
d2Ugc2hvdWxkIGJlIHJ1bm5pbmcgb24uCiAgICAgbnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBnbG9i
YWwgPSBHZXRHbG9iYWxPYmplY3QoYUNoYW5uZWwpOwogICAgIGlmICghZ2xvYmFsKSB7CiAgICAg
ICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwogICAgIH0KIAogICAgIG5zQ09NUHRyPG5zUElE
T01XaW5kb3c+IHdpbihkb19RdWVyeUludGVyZmFjZShnbG9iYWwpKTsKIAorICAgIC8vIFNhbmRi
b3hlZCBkb2N1bWVudCBjaGVjazogamF2YXNjcmlwdDogVVJJJ3MgYXJlIGRpc2FibGVkCisgICAg
Ly8gaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgdW5sZXNzICdhbGxvdy1zY3JpcHRzJyB3YXMgc3Bl
Y2lmaWVkLgorICAgIG5zSURvY3VtZW50KiBkb2MgPSBhT3JpZ2luYWxJbm5lcldpbmRvdy0+R2V0
RXh0YW50RG9jKCk7CisgICAgaWYgKGRvYyAmJiAoZG9jLT5TYW5kYm94RmxhZ3MoKSAmIFNBTkRC
T1hFRF9TQ1JJUFRTKSkgeworICAgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1JFVFZBTF9VTkRF
RklORUQ7CisgICAgfQorCiAgICAgLy8gUHVzaCBvdXIgcG9wdXAgY29udHJvbCBzdGF0ZQogICAg
IG5zQXV0b1BvcHVwU3RhdGVQdXNoZXIgcG9wdXBTdGF0ZVB1c2hlcih3aW4sIGFQb3B1cFN0YXRl
KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHRoZSBzYW1lIGlubmVyIHdpbmRv
dyBhcyB3ZSB1c2VkIHRvLgogICAgIG5zUElET01XaW5kb3cgKmlubmVyV2luID0gd2luLT5HZXRD
dXJyZW50SW5uZXJXaW5kb3coKTsKIAogICAgIGlmIChpbm5lcldpbiAhPSBhT3JpZ2luYWxJbm5l
cldpbmRvdykgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfVU5FWFBFQ1RFRDsKZGlmZiAtLWdp
dCBhL2VkaXRvci9jb21wb3Nlci9zcmMvbnNDb21wb3NlckRvY3VtZW50Q29tbWFuZHMuY3BwIGIv
ZWRpdG9yL2NvbXBvc2VyL3NyYy9uc0NvbXBvc2VyRG9jdW1lbnRDb21tYW5kcy5jcHAKLS0tIGEv
ZWRpdG9yL2NvbXBvc2VyL3NyYy9uc0NvbXBvc2VyRG9jdW1lbnRDb21tYW5kcy5jcHAKKysrIGIv
ZWRpdG9yL2NvbXBvc2VyL3NyYy9uc0NvbXBvc2VyRG9jdW1lbnRDb21tYW5kcy5jcHAKQEAgLTE1
MCwyOSArMTUwLDI4IEBAIG5zU2V0RG9jdW1lbnRPcHRpb25zQ29tbWFuZDo6R2V0Q29tbWFuZFMK
ICAgewogICAgIC8vIGZvciBwb3NzaWJsZSB2YWx1ZXMgb2YgYW5pbWF0aW9uIG1vZGUsIHNlZQog
ICAgIC8vIGh0dHA6Ly9seHIubW96aWxsYS5vcmcvc2VhbW9ua2V5L3NvdXJjZS9pbWFnZS9wdWJs
aWMvaW1nSUNvbnRhaW5lci5pZGwKICAgICBydiA9IGFQYXJhbXMtPlNldExvbmdWYWx1ZSgiaW1h
Z2VBbmltYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNDb250ZXh0
LT5JbWFnZUFuaW1hdGlvbk1vZGUoKSk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsK
ICAgfQogCi0gIGJvb2wgYWxsb3dQbHVnaW5zOyAKKyAgYm9vbCBhbGxvd1BsdWdpbnMgPSBmYWxz
ZTsgCiAgIHJ2ID0gYVBhcmFtcy0+R2V0Qm9vbGVhblZhbHVlKCJwbHVnaW5zIiwgJmFsbG93UGx1
Z2lucyk7CiAgIGlmIChOU19TVUNDRUVERUQocnYpKQogICB7CiAgICAgbnNDT01QdHI8bnNJU3Vw
cG9ydHM+IGNvbnRhaW5lciA9IHByZXNDb250ZXh0LT5HZXRDb250YWluZXIoKTsKICAgICBOU19F
TlNVUkVfVFJVRShjb250YWluZXIsIE5TX0VSUk9SX0ZBSUxVUkUpOwogCiAgICAgbnNDT01QdHI8
bnNJRG9jU2hlbGw+IGRvY1NoZWxsKGRvX1F1ZXJ5SW50ZXJmYWNlKGNvbnRhaW5lciwgJnJ2KSk7
CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgICBOU19FTlNVUkVfVFJVRShkb2NT
aGVsbCwgTlNfRVJST1JfRkFJTFVSRSk7CiAKLSAgICBydiA9IGRvY1NoZWxsLT5HZXRBbGxvd1Bs
dWdpbnMoJmFsbG93UGx1Z2lucyk7Ci0gICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKyAg
ICBhbGxvd1BsdWdpbnMgPSBkb2NTaGVsbC0+UGx1Z2luc0FsbG93ZWRJbkN1cnJlbnREb2MoKTsK
IAogICAgIHJ2ID0gYVBhcmFtcy0+U2V0Qm9vbGVhblZhbHVlKCJwbHVnaW5zIiwgYWxsb3dQbHVn
aW5zKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICB9CiAKICAgcmV0dXJuIE5T
X09LOwogfQogCmRpZmYgLS1naXQgYS9lZGl0b3IvY29tcG9zZXIvc3JjL25zRWRpdGluZ1Nlc3Np
b24uY3BwIGIvZWRpdG9yL2NvbXBvc2VyL3NyYy9uc0VkaXRpbmdTZXNzaW9uLmNwcAotLS0gYS9l
ZGl0b3IvY29tcG9zZXIvc3JjL25zRWRpdGluZ1Nlc3Npb24uY3BwCisrKyBiL2VkaXRvci9jb21w
b3Nlci9zcmMvbnNFZGl0aW5nU2Vzc2lvbi5jcHAKQEAgLTE5MiwyMCArMTkyLDE3IEBAIG5zRWRp
dGluZ1Nlc3Npb246OkRpc2FibGVKU0FuZFBsdWdpbnMobnMKICAgTlNfRU5TVVJFX1NVQ0NFU1Mo
cnYsIHJ2KTsKIAogICBtU2NyaXB0c0VuYWJsZWQgPSB0bXA7CiAKICAgcnYgPSBkb2NTaGVsbC0+
U2V0QWxsb3dKYXZhc2NyaXB0KGZhbHNlKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsK
IAogICAvLyBEaXNhYmxlIHBsdWdpbnMgaW4gdGhpcyBkb2N1bWVudDoKLSAgcnYgPSBkb2NTaGVs
bC0+R2V0QWxsb3dQbHVnaW5zKCZ0bXApOwotICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwot
Ci0gIG1QbHVnaW5zRW5hYmxlZCA9IHRtcDsKKyAgbVBsdWdpbnNFbmFibGVkID0gZG9jU2hlbGwt
PlBsdWdpbnNBbGxvd2VkSW5DdXJyZW50RG9jKCk7CiAKICAgcnYgPSBkb2NTaGVsbC0+U2V0QWxs
b3dQbHVnaW5zKGZhbHNlKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBtRGlz
YWJsZWRKU0FuZFBsdWdpbnMgPSB0cnVlOwogCiAgIHJldHVybiBOU19PSzsKIH0KZGlmZiAtLWdp
dCBhL2VtYmVkZGluZy9icm93c2VyL3dlYkJyb3dzZXIvbnNXZWJCcm93c2VyQ29udGVudFBvbGlj
eS5jcHAgYi9lbWJlZGRpbmcvYnJvd3Nlci93ZWJCcm93c2VyL25zV2ViQnJvd3NlckNvbnRlbnRQ
b2xpY3kuY3BwCi0tLSBhL2VtYmVkZGluZy9icm93c2VyL3dlYkJyb3dzZXIvbnNXZWJCcm93c2Vy
Q29udGVudFBvbGljeS5jcHAKKysrIGIvZW1iZWRkaW5nL2Jyb3dzZXIvd2ViQnJvd3Nlci9uc1dl
YkJyb3dzZXJDb250ZW50UG9saWN5LmNwcApAQCAtNCwxNiArNCwxNyBAQAogICogVGhpcyBTb3Vy
Y2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1Ymxp
YwogICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3Ry
aWJ1dGVkIHdpdGggdGhpcwogICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9t
b3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KIAogI2luY2x1ZGUgIm5zV2ViQnJvd3NlckNvbnRlbnRQ
b2xpY3kuaCIKICNpbmNsdWRlICJuc0lEb2NTaGVsbC5oIgogI2luY2x1ZGUgIm5zQ09NUHRyLmgi
CiAjaW5jbHVkZSAibnNDb250ZW50UG9saWN5VXRpbHMuaCIKKyNpbmNsdWRlICJuc0lDb250ZW50
Vmlld2VyLmgiCiAKIG5zV2ViQnJvd3NlckNvbnRlbnRQb2xpY3k6Om5zV2ViQnJvd3NlckNvbnRl
bnRQb2xpY3koKQogewogICAgIE1PWl9DT1VOVF9DVE9SKG5zV2ViQnJvd3NlckNvbnRlbnRQb2xp
Y3kpOwogfQogCiBuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5Ojp+bnNXZWJCcm93c2VyQ29udGVu
dFBvbGljeSgpCiB7CkBAIC0zNiwxNyArMzcsMTggQEAgUGVyZm9ybVBvbGljeUNoZWNrKFBSVWlu
dDMyICAgICBjb250ZW50VAogICAgIGlmICghc2hlbGwpCiAgICAgICAgIHJldHVybiBOU19PSzsK
IAogICAgIG5zcmVzdWx0IHJ2OwogICAgIGJvb2wgYWxsb3dlZCA9IHRydWU7CiAKICAgICBzd2l0
Y2ggKGNvbnRlbnRUeXBlKSB7CiAgICAgICBjYXNlIG5zSUNvbnRlbnRQb2xpY3k6OlRZUEVfT0JK
RUNUOgotICAgICAgICBydiA9IHNoZWxsLT5HZXRBbGxvd1BsdWdpbnMoJmFsbG93ZWQpOworICAg
ICAgICBhbGxvd2VkID0gc2hlbGwtPlBsdWdpbnNBbGxvd2VkSW5DdXJyZW50RG9jKCk7CisgICAg
ICAgIHJ2ID0gTlNfT0s7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBuc0lDb250ZW50UG9s
aWN5OjpUWVBFX1NDUklQVDoKICAgICAgICAgcnYgPSBzaGVsbC0+R2V0QWxsb3dKYXZhc2NyaXB0
KCZhbGxvd2VkKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIG5zSUNvbnRlbnRQb2xpY3k6
OlRZUEVfU1VCRE9DVU1FTlQ6CiAgICAgICAgIHJ2ID0gc2hlbGwtPkdldEFsbG93U3ViZnJhbWVz
KCZhbGxvd2VkKTsKICAgICAgICAgYnJlYWs7CiAjaWYgMApkaWZmIC0tZ2l0IGEvZW1iZWRkaW5n
L2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4gYi9lbWJlZGRpbmcvY29t
cG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbgotLS0gYS9lbWJlZGRpbmcvY29t
cG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbgorKysgYi9lbWJlZGRpbmcvY29t
cG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9NYWtlZmlsZS5pbgpAQCAtMjQsMTEgKzI0LDExIEBA
IENQUFNSQ1MJCSs9IG5zRGlhbG9nUGFyYW1CbG9jay5jcHAgXAogCQkgICAkKE5VTEwpCiBlbmRp
ZgogCiAjIHdlIGRvbid0IHdhbnQgdGhlIHNoYXJlZCBsaWIsIGJ1dCB3ZSB3YW50IHRvIGZvcmNl
IHRoZSBjcmVhdGlvbiBvZiBhCiAjIHN0YXRpYyBsaWIuCiBGT1JDRV9TVEFUSUNfTElCID0gMQog
CiAjIEZvciBuc0pTVXRpbHMKLUxPQ0FMX0lOQ0xVREVTICs9IC1JJCh0b3BzcmNkaXIpL2RvbS9i
YXNlCitMT0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3JjZGlyKS9kb20vYmFzZSBcCiAKIGluY2x1
ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawpkaWZmIC0tZ2l0IGEvZW1iZWRkaW5nL2Nv
bXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcCBiL2VtYmVkZGlu
Zy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKLS0tIGEv
ZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNw
cAorKysgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dh
dGNoZXIuY3BwCkBAIC01MywxNiArNTMsMTcgQEAKICNpbmNsdWRlICJuc1BJRE9NU3RvcmFnZS5o
IgogI2luY2x1ZGUgIm5zSVdpZGdldC5oIgogI2luY2x1ZGUgIm5zRm9jdXNNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAibnNJUHJlc1NoZWxsLmgiCiAjaW5jbHVkZSAibnNQcmVzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCiAjaW5jbHVkZSAibnNJUHJlZkJyYW5jaC5oIgogI2lu
Y2x1ZGUgIm5zSVByZWZTZXJ2aWNlLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAog
I2lmZGVmIFVTRVdFQUtSRUZTCiAjaW5jbHVkZSAibnNJV2Vha1JlZmVyZW5jZS5oIgogI2VuZGlm
CiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogCiBzdGF0aWMgY29uc3QgY2hhciAqc0pTU3Rh
Y2tDb250cmFjdElEPSJAbW96aWxsYS5vcmcvanMveHBjL0NvbnRleHRTdGFjazsxIjsKQEAgLTU3
MCwxNiArNTcxLDI4IEBAIG5zV2luZG93V2F0Y2hlcjo6T3BlbldpbmRvd0pTSW50ZXJuYWwobnMK
ICAgfQogCiAgIGlmICghbmV3RG9jU2hlbGxJdGVtKSB7CiAgICAgLy8gV2UncmUgZ29pbmcgdG8g
ZWl0aGVyIG9wZW4gdXAgYSBuZXcgd2luZG93IG91cnNlbHZlcyBvciBhc2sgYQogICAgIC8vIG5z
SVdpbmRvd1Byb3ZpZGVyIGZvciBvbmUuICBJbiBlaXRoZXIgY2FzZSwgd2UnbGwgd2FudCB0byBz
ZXQgdGhlIHJpZ2h0CiAgICAgLy8gbmFtZSBvbiBpdC4KICAgICB3aW5kb3dOZWVkc05hbWUgPSB0
cnVlOwogCisgICAgLy8gSWYgdGhlIHBhcmVudCB0cnlpbmcgdG8gb3BlbiBhIG5ldyB3aW5kb3cg
aXMgc2FuZGJveGVkLAorICAgIC8vIHRoaXMgaXMgbm90IGFsbG93ZWQgYW5kIHdlIGZhaWwgaGVy
ZS4KKyAgICBpZiAoYVBhcmVudCkgeworICAgICAgbnNDT01QdHI8bnNJRE9NRG9jdW1lbnQ+IGRv
bWRvYzsKKyAgICAgIGFQYXJlbnQtPkdldERvY3VtZW50KGdldHRlcl9BZGRSZWZzKGRvbWRvYykp
OworICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGRv
bWRvYyk7CisKKyAgICAgIGlmIChkb2MgJiYgKGRvYy0+U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9Y
RURfTkFWSUdBVElPTikpIHsKKyAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisgICAg
ICB9CisgICAgfQorCiAgICAgLy8gTm93IGNoZWNrIHdoZXRoZXIgaXQncyBvayB0byBhc2sgYSB3
aW5kb3cgcHJvdmlkZXIgZm9yIGEgd2luZG93LiAgRG9uJ3QKICAgICAvLyBkbyBpdCBpZiB3ZSdy
ZSBvcGVuaW5nIGEgZGlhbG9nIG9yIGlmIG91ciBwYXJlbnQgaXMgYSBjaHJvbWUgd2luZG93IG9y
CiAgICAgLy8gaWYgd2UncmUgb3BlbmluZyBzb21ldGhpbmcgdGhhdCBoYXMgbW9kYWwsIGRpYWxv
Zywgb3IgY2hyb21lIGZsYWdzIHNldC4KICAgICBuc0NPTVB0cjxuc0lET01DaHJvbWVXaW5kb3c+
IGNocm9tZVdpbiA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFQYXJlbnQpOwogICAgIGlmICghYURpYWxv
ZyAmJiAhY2hyb21lV2luICYmCiAgICAgICAgICEoY2hyb21lRmxhZ3MgJiAobnNJV2ViQnJvd3Nl
ckNocm9tZTo6Q0hST01FX01PREFMICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfRElBTE9HIHwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJV2ViQnJvd3NlckNocm9tZTo6Q0hST01FX09QRU5BU19DSFJPTUUp
KSkgewo=
</data>
<flag name="review"
          id="536480"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>648903</attachid>
            <date>2012-08-03 16:57:10 -0700</date>
            <delta_ts>2012-08-08 17:13:34 -0700</delta_ts>
            <desc>iframe sandbox tests - general v9</desc>
            <filename>iframe_sandbox_tests_general</filename>
            <type>text/plain</type>
            <size>23557</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZmIyMTdiZTk2Zjg1ZDhmZmQ2ZmY4MzUwMDA1
ODVkM2U0YjM5NDZlNgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KQEAgLTI3NCwxNiArMjc0LDI4IEBAIE1PQ0hJVEVTVF9GSUxFUyA9IFwKIAkJZmlsZV9p
ZnJhbWVfc2FuZGJveF9hX2lmNi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNy5o
dG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5odG1sIFwKIAkJZmlsZV9pZnJhbWVf
c2FuZGJveF9hX2lmOS5odG1sIFwKIAkJdGVzdF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdpbi5o
dG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIFwKIAkJZmlsZV9pZnJhbWVf
c2FuZGJveF9iX2lmMi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5odG1sIFwK
KwkJdGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5k
Ym94X2NfaWYxLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgXAorCQlm
aWxlX2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Nf
aWY0Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwgXAorCQlmaWxlX2lm
cmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFp
bC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX3Bhc3MuaHRtbCBcCisJCWZpbGVf
aWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9wYXNzLmpzIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzIFwKIAkJdGVzdF9p
ZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Rf
aWYxLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0bWwgXAogCQlmaWxlX2lm
cmFtZV9zYW5kYm94X2RfaWYzLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY0Lmh0
bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwgXAogCQlmaWxlX2lmcmFtZV9z
YW5kYm94X2RfaWY2Lmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwgXApk
aWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2NfaWYxLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfY19pZjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sCkBA
IC0wLDAgKzEsMzUgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEg
Y2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+Cisg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2
ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRl
eHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2Mp
IHsKKyAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHtvazogcmVzdWx0LCBkZXNjOiBkZXNj
fSwgIioiKTsKKyAgfQorCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgb2sodHJ1ZSwgImRv
Y3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1
biBpbmxpbmUgc2NyaXB0cyIpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FfZm9y
bScpLnN1Ym1pdCgpOworCisgICAgLy8gdHJpZ2dlciB0aGUgamF2YXNjcmlwdDogdXJsIHRlc3QK
KyAgICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FfbGluaycpOworICB9Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSdmaWxlX2lmcmFtZV9zYW5kYm94X3Bhc3MuanMnPjwvc2NyaXB0
PgorPGJvZHkgb25Mb2FkPSdvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93
LXNjcmlwdHMgc2hvdWxkIGJlIGFibGUgdG8gcnVuIHNjcmlwdCBmcm9tIGV2ZW50IGxpc3RlbmVy
cyIpO2RvU3R1ZmYoKTsnPgorICBJIGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0
cyIKKworICA8Zm9ybSBtZXRob2Q9ImdldCIgYWN0aW9uPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Zv
cm1fZmFpbC5odG1sIiBpZD0iYV9mb3JtIj4KKyAgICBGaXJzdCBuYW1lOiA8aW5wdXQgdHlwZT0i
dGV4dCIgbmFtZT0iZmlyc3RuYW1lIj4KKyAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0
IiBuYW1lPSJsYXN0bmFtZSI+CisgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgb25jbGljaz0iZG9T
dWJtaXQoKSIgaWQ9ImFfYnV0dG9uIj4KKyAgPC9mb3JtPgorCisgIDxhIGhyZWYgPSAnamF2YXNj
cmlwdDpvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMgc2hv
dWxkIGJlIGFibGUgdG8gcnVuIHNjcmlwdCBmcm9tIGphdmFzY3JpcHQ6IFVSTHMiKTsnIGlkPSdh
X2xpbmsnPmNsaWNrIG1lPC9hPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sCkBAIC0wLDAgKzEsMjMgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
ICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+
CisKKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgZnVuY3Rpb24g
b2socmVzdWx0LCBkZXNjKSB7CisgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHJl
c3VsdCwgZGVzYzogbWVzc2FnZX0sICIqIik7CisgIH0KKworICBmdW5jdGlvbiBkb1N0dWZmKCkg
eworICAgIG9rKGZhbHNlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRob3V0IGFsbG93LXNjcmlw
dHMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIHJ1biBpbmxpbmUgc2NyaXB0cyIpOworICB9Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSdmaWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMnPjwvc2NyaXB0
PgorPGJvZHkgb25Mb2FkPSd3aW5kb3cucGFyZW50LnBvc3RtZXNzYWdlKHtvazogZmFsc2UsIGRl
c2M6ICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2NyaXB0cyBzaG91bGQgTk9U
IGJlIGFibGUgdG8gcnVuIHNjcmlwdCBmcm9tIGV2ZW50IGhhbmRsZXJzIn0sICIqIik7ZG9TdHVm
ZigpOyc+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggbm8gcGVybWlzc2lvbnMKKyAgPGltZyBzcmM9
ImFib3V0OmJsYW5rIiBvbmVycm9yPSdvayhmYWxzZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0
aG91dCBhbGxvdy1zY3JpcHRzIHNob3VsZCBOT1QgYmUgYWJsZSB0byBydW4gc2NyaXB0IGZyb20g
ZXZlbnQgaGFuZGxlcnMiKTsnKT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbApAQCAtMCwwICsxLDI2IEBACis8
IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4K
KyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3Nj
cmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rl
c3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKworPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIGR1bXAoIioqKiBjX2lm
MyBoYXMgbG9hZGVkXG4iKTsKKyAgICAvLyB0cnkgYW5kIHN1Ym1pdCB0aGUgZm9ybSAtIHRoaXMg
c2hvdWxkIHN1Y2NlZWQKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYV9mb3JtJykuc3Vi
bWl0KCk7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFt
IHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1mb3JtcyIKKworICA8Zm9y
bSBtZXRob2Q9ImdldCIgYWN0aW9uPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1s
IiBpZD0iYV9mb3JtIj4KKyAgICBGaXJzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0i
Zmlyc3RuYW1lIj4KKyAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYXN0
bmFtZSI+CisgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgb25jbGljaz0iZG9TdWJtaXQoKSIgaWQ9
ImFfYnV0dG9uIj4KKyAgPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5odG1sCkBAIC0wLDAgKzEsNDQgQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwv
c2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIv
dGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVzYykgeworICAgIHdpbmRv
dy5wYXJlbnQub2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpOworICB9CisKKyAgZnVuY3Rpb24gZG9T
dHVmZigpIHsKKyAgICAvLyB0cnkgdG8gb3BlbiBhIG5ldyB3aW5kb3cgdmlhIHRhcmdldD0iX2Js
YW5rIiwgd2luZG93Lm9wZW4oKSwgYW5kIHNob3dNb2RhbERpYWxvZygpCisgICAgLy8gdGhlIHdp
bmRvdyB3ZSB0cnkgdG8gb3BlbiBjbG9zZXMgaXRzZWxmIG9uY2UgaXQgb3BlbnMKKyAgICBzZW5k
TW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ3RhcmdldF9ibGFuaycpOworCisgICAgdmFyIHRo
cmV3ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgIHdpbmRvdy5vcGVuKCJhYm91dDpibGFuayIp
OworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICB0aHJldyA9IHRydWU7CisgICAgfQorICAg
IAorICAgIG9rKHRocmV3LCAid2luZG93Lm9wZW4gdGhyZXcgYSBKUyBleGNlcHRpb24gYW5kIHdh
cyBub3QgYWxsb3dlZCIpOworCisgICAgdGhyZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAg
d2luZG93LnNob3dNb2RhbERpYWxvZygiYWJvdXQ6YmxhbmsiKTsKKyAgICB9IGNhdGNoKGVycm9y
KSB7CisgICAgICB0aHJldyA9IHRydWU7CisgICAgfQorICAgIAorICAgIG9rKHRocmV3LCAid2lu
ZG93LnNob3dNb2RhbERpYWxvZyB0aHJldyBhIEpTIGV4Y2VwdGlvbiBhbmQgd2FzIG5vdCBhbGxv
d2VkIik7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFt
IHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIKKwor
ICA8YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93X2ZhaWwuaHRtbCIgdGFy
Z2V0PSJfYmxhbmsiIGlkPSJ0YXJnZXRfYmxhbmsiPm9wZW4gd2luZG93PC9hPgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2NfaWY1Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfY19pZjUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxs
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lm
NS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4K
KyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwv
dGl0bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1w
bGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQi
IHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorCis8
L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJl
c3VsdCwgZGVzYykgeworICAgIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihyZXN1bHQsIGRlc2Mp
OworICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBzYW5k
Ym94ZWQgYnV0IHdpdGggImFsbG93LXNhbWUtb3JpZ2luIgorCisgIDxhIGhyZWYgPSAnamF2YXNj
cmlwdDpvayhmYWxzZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aG91dCBhbGxvdy1zY3JpcHRz
IHNob3VsZCBub3QgYmUgYWJsZSB0byBydW4gc2NyaXB0IHdpdGggamF2YXNjcmlwdDogVVJMcyIp
OycgaWQ9J2FfbGluayc+Y2xpY2sgbWU8L2E+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRt
bCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwKQEAgLTAsMCArMSwy
NCBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0
PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0
aWxzLmpzIj48L3NjcmlwdD4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9j
c3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorDQorPC9oZWFkPg0KKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVz
Yykgew0KKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKTsNCisgICAg
d2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHJlc3VsdCwgZGVzYzogZGVzY30sICIqIik7
DQorICB9DQorICANCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7DQorICAgIG9rKHRydWUsICJhIGRv
Y3VtZW50IHNhbmRib3hlZCB3aXRoIGFsbG93LXNhbWUtb3JpZ2luIGFuZCBhbGxvdy1zY3JpcHRz
IHNob3VsZCBiZSBzYW1lIG9yaWdpbiB3aXRoIGl0cyBwYXJlbnQgYW5kIGFibGUgdG8gcnVuIHNj
cmlwdHMgIiArDQorICAgICAgICJyZWdhcmRsZXNzIG9mIHdoYXQga2luZCBvZiB3aGl0ZXNwYWNl
IHdhcyB1c2VkIGluIGl0cyBzYW5kYm94IGF0dHJpYnV0ZSIpOw0KKyAgfQ0KKzwvc2NyaXB0Pg0K
Kzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4NCisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJh
bGxvdy1zYW1lLW9yaWdpbiIgYW5kICJhbGxvdy1zY3JpcHRzIg0KKzwvYm9keT4NCis8L2h0bWw+
DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2ZhaWwuanMgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZmFpbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzCkBAIC0wLDAg
KzEsMSBAQAorb2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0
cyBzaG91bGQgTk9UIGJlIGFibGUgdG8gcnVuIDxzY3JpcHQgc3JjPS4uLj4iKTsKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlv
bi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2Ny
aXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVz
dHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1
ZmYoKSI+CisgIEkgc2hvdWxkIE5PVCBiZSBsb2FkZWQgYnkgYSBmb3JtIHN1Ym1pdCBmcm9tIGEg
c2FuZGJveCB3aXRob3V0ICdhbGxvdy1mb3JtcycKKzwvYm9keT4KKzwvaHRtbD4KKworPHNjcmlw
dD4KKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdl
KHtvazogZmFsc2UsIGRlc2M6ICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctZm9y
bXMgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIHN1Ym1pdCBmb3JtcyJ9LCAiKiIpOworICB9Cis8L3Nj
cmlwdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwKQEAgLTAsMCArMSwx
OSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0
eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBs
ZVRlc3QuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQv
Y3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8Ym9k
eSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgc2hvdWxkIGJlIGxvYWRlZCBieSBhIGZvcm0gc3Vi
bWl0IGZyb20gYSBzYW5kYm94IHdpdGggJ2FsbG93LWZvcm1zJworPC9ib2R5PgorPC9odG1sPgor
Cis8c2NyaXB0PgorICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIHdpbmRvdy5wYXJlbnQucG9z
dE1lc3NhZ2Uoe29rOiB0cnVlLCBkZXNjOiAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93
LWZvcm1zIHNob3VsZCBiZSBhYmxlIHRvIHN1Ym1pdCBmb3JtcyJ9LCAiKiIpOworICB9Cis8L3Nj
cmlwdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1s
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2lu
ZG93X2ZhaWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19m
YWlsLmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFk
PgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0
PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90
ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0
eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNz
cyIvPgorPC9oZWFkPgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgc2hvdWxkIE5P
VCBiZSBvcGVuZWQgYnkgYSBzYW5kYm94ZWQgaWZyYW1lIHZpYSBhbnkgbWV0aG9kCis8L2JvZHk+
Cis8L2h0bWw+CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgY29uc29s
ZS5sb2coImZpbGVfaWZyYW1lX3NhbmRib3hfd2luZG93X29wZW5fZmFpbC5odG1sIik7CisgICAg
d2luZG93Lm9wZW5lci5vayhmYWxzZSwgInNhbmRib3hlZCBkb2N1bWVudHMgc2hvdWxkIE5PVCBi
ZSBhYmxlIHRvIG9wZW4gd2luZG93cyIpOworICAgIHNlbGYuY2xvc2UoKTsKKyAgfQorPC9zY3Jp
cHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3Bhc3MuanMgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9wYXNzLmpzCkBAIC0wLDAgKzEsMSBAQAorb2sodHJ1ZSwgImRvY3VtZW50
cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1biA8c2Ny
aXB0IHNyYz0uLi4+Iik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRt
bCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFs
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sCkBAIC0wLDAg
KzEsMjIxIEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8IS0tDQoraHR0cHM6Ly9idWd6
aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1
IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzIC0gZ2VuZXJhbCB0ZXN0cw0KKy0tPg0KKzxo
ZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAz
NDE2MDQ8L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBz
cmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0Pg0KKyAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGls
cy5qcyI+PC9zY3JpcHQ+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3Nz
IiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0
IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KKy8qKiBUZXN0IGZvciBCdWcgMzQxNjA0
IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzIC0gZ2VuZXJh
bCB0ZXN0cyAqKi8NCisNCitTaW1wbGVUZXN0LndhaXRGb3JFeHBsaWNpdEZpbmlzaCgpOw0KKw0K
Ky8vIGEgcG9zdE1lc3NhZ2UgaGFuZGxlciB0aGF0IGlzIHVzZWQgYnkgc2FuZGJveGVkIGlmcmFt
ZXMgd2l0aG91dA0KKy8vICdhbGxvdy1zYW1lLW9yaWdpbicgdG8gY29tbXVuaWNhdGUgcGFzcy9m
YWlsIGJhY2sgdG8gdGhpcyBtYWluIHBhZ2UuDQorLy8gaXQgZXhwZWN0cyB0byBiZSBjYWxsZWQg
d2l0aCBhbiBvYmplY3QgbGlrZSB7b2s6IHRydWUvZmFsc2UsIGRlc2M6DQorLy8gPGRlc2NyaXB0
aW9uIG9mIHRoZSB0ZXN0PiB3aGljaCBpdCB0aGVuIGZvcndhcmRzIHRvIG9rKCkNCit3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7DQorDQor
ZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpDQorew0KKyAgb2tfd3JhcHBlcihldmVudC5k
YXRhLm9rLCBldmVudC5kYXRhLmRlc2MpOw0KK30NCisNCit2YXIgY29tcGxldGVkVGVzdHMgPSAw
Ow0KK3ZhciBwYXNzZWRUZXN0cyA9IDA7DQorDQorZnVuY3Rpb24gb2tfd3JhcHBlcihyZXN1bHQs
IGRlc2MpIHsNCisgIG9rKHJlc3VsdCwgZGVzYyk7DQorDQorICBjb21wbGV0ZWRUZXN0cysrOw0K
Kw0KKyAgaWYgKHJlc3VsdCkgew0KKyAgICBwYXNzZWRUZXN0cysrOw0KKyAgfQ0KKw0KKyAgaWYg
KGNvbXBsZXRlZFRlc3RzID09IDIxKSB7DQorICAgIGlzKHBhc3NlZFRlc3RzLCAyMSwgIlRoZXJl
IGFyZSAyMSBnZW5lcmFsIHRlc3RzIHRoYXQgc2hvdWxkIHBhc3MiKTsNCisgICAgU2ltcGxlVGVz
dC5maW5pc2goKTsNCisgIH0NCit9DQorDQorZnVuY3Rpb24gZG9UZXN0KCkgew0KKyAgLy8gcGFz
c2VzIGlmIGdvb2QNCisgIC8vIDEpIHRlc3QgdGhhdCBpbmxpbmUgc2NyaXB0cyAoPHNjcmlwdD4p
IGNhbiBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAg
Ly8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxs
b3ctc2NyaXB0cycpDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMikgdGVzdCB0aGF0
IDxzY3JpcHQgc3JjPS4uLj4gY2FuIHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggImFs
bG93LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0
bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJykNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQor
ICAvLyAzKSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFuIGV2ZW50IGxpc3RlbmVyIChib2R5IG9ubG9h
ZCkgY2FuIHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlwdHMiDQor
ICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwgd2hpY2ggaGFzICdh
bGxvdy1zY3JpcHRzJykNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyA0KSB0ZXN0IHRo
YXQgc2NyaXB0IGluIGFuIGphdmFzY3JpcHQ6dXJsIGNhbiBydW4gaW4gYW4gaWZyYW1lIHNhbmRi
b3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2Fu
ZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQorDQorICAvLyBmYWls
cyBpZiBiYWQNCisgIC8vIDUpIHRlc3QgdGhhdCBpbmxpbmUgc2NyaXB0cyBjYW5ub3QgcnVuIGlu
IGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25l
IGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0nJykN
CisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gNikgdGVzdCB0aGF0IDxzY3JpcHQgc3JjPS4u
Lj4gY2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFsbG93LXNjcmlw
dHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgd2hpY2gg
aGFzIHNhbmRib3g9JycpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDcpIHRlc3QgdGhh
dCBzY3JpcHQgaW4gYW4gZXZlbnQgbGlzdGVuZXIgKGJvZHkgb25sb2FkKSBjYW5ub3QgcnVuIGlu
IGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25l
IGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0nJykN
CisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gOCkgdGVzdCB0aGF0IHNjcmlwdCBpbiBhbiBl
dmVudCBsaXN0ZW5lciAoaW1nIG9uZXJyb3IpIGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRi
b3hlZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94PScnKQ0KKyAgDQorICAvLyBmYWls
cyBpZiBiYWQNCisgIC8vIDkpIHRlc3QgdGhhdCBzY3JpcHQgaW4gYW4gamF2YXNjcmlwdDp1cmwg
Y2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFsbG93LXNjcmlwdHMi
DQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWZfNS5odG1sIHdoaWNoIGhh
cyBzYW5kYm94PSdhbGxvdy1zYW1lLW9yaWdpbicpDQorICB2YXIgaWZfdyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdpZl81JykuY29udGVudFdpbmRvdzsNCisgIHNlbmRNb3VzZUV2ZW50KHt0
eXBlOidjbGljayd9LCAnYV9saW5rJywgaWZfdyk7DQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0K
KyAgLy8gMTApIHRlc3QgdGhhdCBhIG5ldyBpZnJhbWUgaGFzIHNhbmRib3ggYXR0cmlidXRlDQor
ICB2YXIgaWZyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7DQorICBva193cmFw
cGVyKCJzYW5kYm94IiBpbiBpZnIsICJhIG5ldyBpZnJhbWUgc2hvdWxkIGhhdmUgYSBzYW5kYm94
IGF0dHJpYnV0ZSIpOw0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDExKSB0ZXN0IHRo
YXQgdGhlIHNhbmRib3ggYXR0cmlidXRlJ3MgZGVmYXVsdCB2YWx1ZSBpcyBhbiBlbXB0eSBzdHJp
bmcNCisgIG9rX3dyYXBwZXIoaWZyLnNhbmRib3ggPT09ICIiLCAiZGVmYXVsdCBzYW5kYm94IGF0
dHJpYnV0ZSBzaG91bGQgYmUgYW4gZW1wdHkgc3RyaW5nIik7DQorDQorICAvLyBwYXNzZXMgaWYg
Z29vZA0KKyAgLy8gMTIpIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAnYWxsb3ct
Zm9ybXMnIGNhbiBzdWJtaXQgZm9ybXMNCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRi
b3hfY19pZjMuaHRtbCB3aGljaCBoYXMgJ2FsbG93LWZvcm1zJyBhbmQgJ2FsbG93LXNjcmlwdHMn
KQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyAxMykgdGVzdCB0aGF0IGEgc2FuZGJveGVk
IGlmcmFtZSB3aXRob3V0ICdhbGxvdy1mb3JtcycgY2FuIE5PVCBzdWJtaXQgZm9ybXMNCisgIC8v
IChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3aGljaCBvbmx5IGhhcyAn
YWxsb3ctc2NyaXB0cycpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDE0KSB0ZXN0IHRo
YXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNhbid0IG9wZW4gYSBuZXcgd2luZG93IHVzaW5nIHRoZSB0
YXJnZXQuYXR0cmlidXRlDQorICAvLyB0aGlzIGlzIGRvbmUgdmlhIGZpbGVfaWZyYW1lX3NhbmRi
b3hfY19pZjQuaHRtbCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYW5k
ICJhbGxvdy1zYW1lLW9yaWdpbiINCisgIC8vIHRoZSB3aW5kb3cgaXQgYXR0ZW1wdHMgdG8gb3Bl
biBjYWxscyB3aW5kb3cub3BlbmVyLm9rKGZhbHNlLCAuLi4pIGFuZCBmaWxlX2lmcmFtZV9jX2lm
NC5odG1sIGhhcyBhbiBvaygpDQorICAvLyBmdW5jdGlvbiB0aGF0IGNhbGxzIHdpbmRvdy5wYXJl
bnQub2tfd3JhcHBlcg0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDE1KSB0ZXN0IHRo
YXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNhbid0IG9wZW4gYSBuZXcgd2luZG93IHVzaW5nIHdpbmRv
dy5vcGVuDQorICAvLyB0aGlzIGlzIGRvbmUgdmlhIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQu
aHRtbCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYW5kICJhbGxvdy1z
YW1lLW9yaWdpbiINCisgIC8vIHRoZSB3aW5kb3cgaXQgYXR0ZW1wdHMgdG8gb3BlbiBjYWxscyB3
aW5kb3cub3BlbmVyLm9rKGZhbHNlLCAuLi4pIGFuZCBmaWxlX2lmcmFtZV9jX2lmNC5odG1sIGhh
cyBhbiBvaygpDQorICAvLyBmdW5jdGlvbiB0aGF0IGNhbGxzIHdpbmRvdy5wYXJlbnQub2tfd3Jh
cHBlcg0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDE2KSB0ZXN0IHRoYXQgYSBzYW5k
Ym94ZWQgaWZyYW1lIGNhbid0IG9wZW4gYSBuZXcgd2luZG93IHVzaW5nIHdpbmRvdy5TaG93TW9k
YWxEaWFsb2cNCisgIC8vIHRoaXMgaXMgZG9uZSB2aWEgZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lm
NC5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIiBhbmQgImFsbG93
LXNhbWUtb3JpZ2luIg0KKyAgLy8gdGhlIHdpbmRvdyBpdCBhdHRlbXB0cyB0byBvcGVuIGNhbGxz
IHdpbmRvdy5vcGVuZXIub2soZmFsc2UsIC4uLikgYW5kIGZpbGVfaWZyYW1lX2NfaWY0Lmh0bWwg
aGFzIGFuIG9rKCkNCisgIC8vIGZ1bmN0aW9uIHRoYXQgY2FsbHMgd2luZG93LnBhcmVudC5va193
cmFwcGVyDQorICANCisgIC8vIHBhc3NlcyB0d2ljZSBpZiBnb29kDQorICAvLyAxNykgdGVzdCB0
aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4gYWNjZXNzIHNhbWUtb3JpZ2luIGRvY3VtZW50cyBh
bmQgcnVuIHNjcmlwdHMgd2hlbiBpdHMgc2FuZGJveCBhdHRyaWJ1dGUNCisgIC8vIGlzIHNlcGFy
YXRlZCB3aXRoIHR3byBzcGFjZXMgDQorICAvLyBkb25lIHZpYSBmaWxlX2lmcmFtZV9zYW5kYm94
X2NfaWY2Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggIiAgYWxsb3ctc2NyaXB0cyAgYWxs
b3ctc2FtZS1vcmlnaW4gICINCisgIA0KKyAgLy8gcGFzc2VzIHR3aWNlIGlmIGdvb2QNCisgIC8v
IDE4KSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNhbiBhY2Nlc3Mgc2FtZS1vcmlnaW4g
ZG9jdW1lbnRzIGFuZCBydW4gc2NyaXB0cyB3aGVuIGl0cyBzYW5kYm94IGF0dHJpYnV0ZQ0KKyAg
Ly8gaXMgc2VwYXJhdGVkIHdpdGggdGFicw0KKyAgLy8gZG9uZSB2aWEgZmlsZV9pZnJhbWVfc2Fu
ZGJveF9jX2lmNi5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICImI3gwOTthbGxvdy1zY3Jp
cHRzJiN4MDk7YWxsb3ctc2FtZS1vcmlnaW4mI3gwOTsiDQorICANCisgIC8vIHBhc3NlcyB0d2lj
ZSBpZiBnb29kDQorICAvLyAxOSkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4gYWNj
ZXNzIHNhbWUtb3JpZ2luIGRvY3VtZW50cyBhbmQgcnVuIHNjcmlwdHMgd2hlbiBpdHMgc2FuZGJv
eCBhdHRyaWJ1dGUNCisgIC8vIGlzIHNlcGFyYXRlZCB3aXRoIGxpbmUgZmVlZHMNCisgIC8vIGRv
bmUgdmlhIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCB3aGljaCBpcyBzYW5kYm94ZWQg
d2l0aCAiJiN4MGE7YWxsb3ctc2NyaXB0cyYjeDBhO2FsbG93LXNhbWUtb3JpZ2luJiN4MGE7Ig0K
KyAgDQorICAvLyBwYXNzZXMgdHdpY2UgaWYgZ29vZA0KKyAgLy8gMjApIHRlc3QgdGhhdCBhIHNh
bmRib3hlZCBpZnJhbWUgY2FuIGFjY2VzcyBzYW1lLW9yaWdpbiBkb2N1bWVudHMgYW5kIHJ1biBz
Y3JpcHRzIHdoZW4gaXRzIHNhbmRib3ggYXR0cmlidXRlDQorICAvLyBpcyBzZXBhcmF0ZWQgd2l0
aCBmb3JtIGZlZWRzDQorICAvLyBkb25lIHZpYSBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0
bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggIiYjeDBjO2FsbG93LXNjcmlwdHMmI3gwYzthbGxv
dy1zYW1lLW9yaWdpbiYjeDBjOyINCisgIA0KKyAgLy8gcGFzc2VzIHR3aWNlIGlmIGdvb2QNCisg
IC8vIDIxKSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNhbiBhY2Nlc3Mgc2FtZS1vcmln
aW4gZG9jdW1lbnRzIGFuZCBydW4gc2NyaXB0cyB3aGVuIGl0cyBzYW5kYm94IGF0dHJpYnV0ZQ0K
KyAgLy8gaXMgc2VwYXJhdGVkIHdpdGggY2FycmlhZ2UgcmV0dXJucw0KKyAgLy8gZG9uZSB2aWEg
ZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICIm
I3gwZDthbGxvdy1zY3JpcHRzJiN4MGQ7YWxsb3ctc2FtZS1vcmlnaW4mI3gwZDsiDQorDQorICAv
LyBmYWlscyBpZiBiYWQNCisgIC8vIDIyKSB0ZXN0IHRoYXQgYW4gaWZyYW1lIHdpdGggc2FuZGJv
eD0iIiBkb2VzIE5PVCBoYXZlIHNjcmlwdCBpbiBhIHNyYyBhdHRyaWJ1dGUgY3JlYXRlZCBieSBh
IGphdmFzY3JpcHQ6IA0KKyAgLy8gVVJMIGV4ZWN1dGVkDQorICAvLyBkb25lIGJ5IHRoaXMgcGFn
ZSwgc2VlIGlmXzcNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAyMykgdGVzdCB0aGF0
IGFuIGlmcmFtZSB3aXRoIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIERPRVMgaGF2ZSBzY3JpcHQg
aW4gYSBzcmMgYXR0cmlidXRlIGNyZWF0ZWQgYnkgYSBqYXZhc2NyaXB0OiANCisgIC8vIFVSTCBl
eGVjdXRlZA0KKyAgLy8gZG9uZSBieSB0aGlzIHBhZ2UsIHNlZSBpZl84DQorDQorICAvLyBmYWls
cyBpZiBiYWQNCisgIC8vIDI0KSB0ZXN0IHRoYXQgYW4gaWZyYW1lIHdpdGggc2FuZGJveD0iIiwg
c3RhcnRpbmcgb3V0IHdpdGggYSBkb2N1bWVudCBhbHJlYWR5IGxvYWRlZCwgZG9lcyBOT1QgaGF2
ZSBzY3JpcHQgaW4gYSBuZXdseQ0KKyAgLy8gc2V0IHNyYyBhdHRyaWJ1dGUgY3JlYXRlZCBieSBh
IGphdmFzY3JpcHQ6IFVSTCBleGVjdXRlZA0KKyAgLy8gZG9uZSBieSB0aGlzIHBhZ2UsIHNlZSBp
Zl85DQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMjUpIHRlc3QgdGhhdCBhbiBpZnJh
bWUgd2l0aCBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiwgc3RhcnRpbmcgb3V0IHdpdGggYSBkb2N1
bWVudCBhbHJlYWR5IGxvYWRlZCwgRE9FUyBoYXZlIHNjcmlwdA0KKyAgLy8gaW4gYSBuZXdseSBz
ZXQgc3JjIGF0dHJpYnV0ZSBjcmVhdGVkIGJ5IGEgamF2YXNjcmlwdDogVVJMIGV4ZWN1dGVkDQor
ICAvLyBkb25lIGJ5IHRoaXMgcGFnZSwgc2VlIGlmXzEwDQorfQ0KKw0KK2FkZExvYWRFdmVudChk
b1Rlc3QpOw0KKw0KK3ZhciBzdGFydGVkX2lmXzkgPSBmYWxzZTsNCit2YXIgc3RhcnRlZF9pZl8x
MCA9IGZhbHNlOw0KKw0KK2Z1bmN0aW9uIHN0YXJ0X2lmXzkoKSB7DQorICBpZiAoc3RhcnRlZF9p
Zl85KQ0KKyAgICByZXR1cm47DQorDQorICBzdGFydGVkX2lmXzkgPSB0cnVlOw0KKyAgc2VuZE1v
dXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhX2J1dHRvbicpOw0KK30NCisNCitmdW5jdGlvbiBz
dGFydF9pZl8xMCgpIHsNCisgIGlmIChzdGFydGVkX2lmXzEwKQ0KKyAgICByZXR1cm47DQorDQor
ICBzdGFydGVkX2lmXzEwID0gdHJ1ZTsNCisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9
LCAnYV9idXR0b24yJyk7DQorfQ0KKw0KK2Z1bmN0aW9uIGRvX2lmXzkoKSB7DQorICB2YXIgaWZf
OSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl85Jyk7DQorICBpZl85LnNyYyA9ICdqYXZh
c2NyaXB0OiI8aHRtbD48c2NyaXB0PndpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihmYWxzZSwgXCdh
biBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2NyaXB0cyBzaG91bGQgbm90IGV4ZWN1
dGUgc2NyaXB0IGluIGEgamF2YXNjcmlwdCBVUkwgaW4gYSBuZXdseSBzZXQgc3JjIGF0dHJpYnV0
ZVwnKTs8XC9zY3JpcHQ+PFwvaHRtbD4iJzsNCit9DQorDQorZnVuY3Rpb24gZG9faWZfMTAoKSB7
DQorICB2YXIgaWZfMTAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMTAnKTsNCisgIGlm
XzEwLnNyYyA9ICdqYXZhc2NyaXB0OiI8aHRtbD48c2NyaXB0PndpbmRvdy5wYXJlbnQub2tfd3Jh
cHBlcih0cnVlLCBcJ2FuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3Vs
ZCBleGVjdXRlIHNjcmlwdCBpbiBhIGphdmFzY3JpcHQgVVJMIGluIGEgbmV3bHkgc2V0IHNyYyBh
dHRyaWJ1dGVcJyk7PFwvc2NyaXB0PjxcL2h0bWw+Iic7DQorfQ0KKzwvc2NyaXB0Pg0KKzxib2R5
Pg0KKzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJbXBsZW1l
bnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMNCis8cCBpZD0iZGlzcGxheSI+
PC9wPg0KKzxkaXYgaWQ9ImNvbnRlbnQiPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1v
cmlnaW4gYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzEiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9j
X2lmMS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2Fu
ZGJveD0iIiBpZD0iaWZfMiIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwiIGhl
aWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1m
b3JtcyBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMyIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Nf
aWYzLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5k
Ym94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfNCIgc3JjPSJmaWxl
X2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJh
bWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiIgaWQ9ImlmXzUiIHNyYz0i
ZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwv
aWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iICBhbGxvdy1zYW1lLW9yaWdpbiAgYWxsb3ctc2Ny
aXB0cyAgIiBpZD0iaWZfNl9hIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCIg
aGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9IiYjeDA5
O2FsbG93LXNhbWUtb3JpZ2luJiN4MDk7YWxsb3ctc2NyaXB0cyYjeDA5OyIgaWQ9ImlmXzZfYiIg
c3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIx
MCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSImI3gwYTthbGxvdy1zYW1lLW9yaWdpbiYj
eDBhO2FsbG93LXNjcmlwdHMmI3gwYTsiIGlkPSJpZl82X2MiIHNyYz0iZmlsZV9pZnJhbWVfc2Fu
ZGJveF9jX2lmNi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJh
bWUgc2FuZGJveD0iJiN4MGM7YWxsb3ctc2FtZS1vcmlnaW4mI3gwYzthbGxvdy1zY3JpcHRzJiN4
MGM7IiBpZD0iaWZfNl9kIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCIgaGVp
Z2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9IiYjeDBkO2Fs
bG93LXNhbWUtb3JpZ2luJiN4MGQ7YWxsb3ctc2NyaXB0cyYjeDBkOyIgaWQ9ImlmXzZfZSIgc3Jj
PSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+
PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiIgaWQ9J2lmXzcn
IHNyYz0iamF2YXNjcmlwdDonPGh0bWw+PHNjcmlwdD53aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIo
ZmFsc2UsIFwnYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0IGFsbG93LXNjcmlwdHMgc2hvdWxk
IG5vdCBleGVjdXRlIHNjcmlwdCBpbiBhIGphdmFzY3JpcHQgVVJMIGluIGl0cyBzcmMgYXR0cmli
dXRlXCcpOzxcL3NjcmlwdD48XC9odG1sPic7IiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZy
YW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyIg
aWQ9J2lmXzgnIHNyYz0iamF2YXNjcmlwdDonPGh0bWw+PHNjcmlwdD53aW5kb3cucGFyZW50Lm9r
X3dyYXBwZXIodHJ1ZSwgXCdhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2NyaXB0
cyBzaG91bGQgZXhlY3V0ZSBzY3JpcHQgaW4gYSBqYXZhc2NyaXB0IFVSTCBpbiBpdHMgc3JjIGF0
dHJpYnV0ZVwnKTs8XC9zY3JpcHQ+PFwvaHRtbD4nOyIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48
L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIiBvbmxvYWQ9J3N0
YXJ0X2lmXzkoKScgaWQ9J2lmXzknIHNyYz0iYWJvdXQ6YmxhbmsiIGhlaWdodD0iMTAiIHdpZHRo
PSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxv
dy1zY3JpcHRzIiBvbmxvYWQ9J3N0YXJ0X2lmXzEwKCknIGlkPSdpZl8xMCcgc3JjPSJhYm91dDpi
bGFuayIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aW5wdXQgdHlwZT0nYnV0
dG9uJyBpZD0iYV9idXR0b24iIG9uY2xpY2s9J2RvX2lmXzkoKSc+DQorPGlucHV0IHR5cGU9J2J1
dHRvbicgaWQ9ImFfYnV0dG9uMiIgb25jbGljaz0nZG9faWZfMTAoKSc+DQorPC9kaXY+DQorPC9i
b2R5Pg0KKzwvaHRtbD4NCg==
</data>
<flag name="review"
          id="538742"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>649004</attachid>
            <date>2012-08-04 09:07:10 -0700</date>
            <delta_ts>2012-08-08 17:09:07 -0700</delta_ts>
            <desc>CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v5</desc>
            <filename>iframe_sandbox_check_may_load</filename>
            <type>text/plain</type>
            <size>29918</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNTQ4OTI4MTVlOTc5NGM2ZDZhMjQ3NWQwMDBm
Y2NkZjQ4ODdjYjFjNQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KbW9k
aWZ5IG5zSVByaW5jaXBhbDo6Y2hlY2tNYXlMb2FkIHRvIGFsbG93IGluaGVyaXRlZC9pbmhlcml0
aW5nIGxvYWRzCgpkaWZmIC0tZ2l0IGEvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbCBiL2NhcHMv
aWRsL25zSVByaW5jaXBhbC5pZGwKLS0tIGEvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbAorKysg
Yi9jYXBzL2lkbC9uc0lQcmluY2lwYWwuaWRsCkBAIC0xNiwxNyArMTYsMTcgQEAgc3RydWN0IEpT
UHJpbmNpcGFsczsKIAogaW50ZXJmYWNlIG5zSVVSSTsKIGludGVyZmFjZSBuc0lDb250ZW50U2Vj
dXJpdHlQb2xpY3k7CiAKIFtwdHJdIG5hdGl2ZSBKU0NvbnRleHQoSlNDb250ZXh0KTsKIFtwdHJd
IG5hdGl2ZSBKU1ByaW5jaXBhbHMoSlNQcmluY2lwYWxzKTsKIFtwdHJdIG5hdGl2ZSBQcmluY2lw
YWxBcnJheShuc1RBcnJheTxuc0NPTVB0cjxuc0lQcmluY2lwYWw+ID4pOwogCi1bc2NyaXB0YWJs
ZSwgdXVpZCg4YTc0YjAxMS02NjdkLTRjZmEtYjJhMi1iMjc1ODJiYTVmMzgpXQorW3NjcmlwdGFi
bGUsIHV1aWQoODI1ZmZjZTgtOTYyZC0xMWUxLWFlZjMtOGYyYjYxODg3MDliKV0KIGludGVyZmFj
ZSBuc0lQcmluY2lwYWwgOiBuc0lTZXJpYWxpemFibGUKIHsKICAgICAvKioKICAgICAgKiBWYWx1
ZXMgb2YgY2FwYWJpbGl0aWVzIGZvciBlYWNoIHByaW5jaXBhbC4gT3JkZXIgaXMKICAgICAgKiBz
aWduaWZpY2FudDogaWYgYW4gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbiBhIHNldAogICAgICAq
IG9mIGNhcGFiaWxpdGllcywgdGhlIG1pbmltdW0gaXMgY29tcHV0ZWQuCiAgICAgICovCiAgICAg
Y29uc3Qgc2hvcnQgRU5BQkxFX0RFTklFRCAgICAgICAgICAgICAgICA9IDE7CkBAIC0xNjgsMzMg
KzE2OCw0MyBAQCBpbnRlcmZhY2UgbnNJUHJpbmNpcGFsIDogbnNJU2VyaWFsaXphYmxlCiAgICAg
ICovCiAgICAgYm9vbGVhbiBzdWJzdW1lc0lnbm9yaW5nRG9tYWluKGluIG5zSVByaW5jaXBhbCBv
dGhlcik7CiAKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0aGlzIHByaW5jaXBhbCBp
cyBhbGxvd2VkIHRvIGxvYWQgdGhlIG5ldHdvcmsgcmVzb3VyY2UKICAgICAgKiBsb2NhdGVkIGF0
IHRoZSBnaXZlbiBVUkkgdW5kZXIgdGhlIHNhbWUtb3JpZ2luIHBvbGljeS4gVGhpcyBtZWFucyB0
aGF0CiAgICAgICogY29kZWJhc2UgcHJpbmNpcGFscyBhcmUgb25seSBhbGxvd2VkIHRvIGxvYWQg
cmVzb3VyY2VzIGZyb20gdGhlIHNhbWUKICAgICAgKiBkb21haW4sIHRoZSBzeXN0ZW0gcHJpbmNp
cGFsIGlzIGFsbG93ZWQgdG8gbG9hZCBhbnl0aGluZywgYW5kIG51bGwKLSAgICAgKiBwcmluY2lw
YWxzIGFyZSBub3QgYWxsb3dlZCB0byBsb2FkIGFueXRoaW5nLgorICAgICAqIHByaW5jaXBhbHMg
YXJlIG5vdCBhbGxvd2VkIHRvIGxvYWQgYW55dGhpbmcuIFRoaXMgaXMgY2hhbmdlZCBzbGlnaHRs
eQorICAgICAqIGJ5IHRoZSBvcHRpb25hbCBmbGFnIGFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCAo
d2hpY2ggZGVmYXVsdHMgdG8gZmFsc2UpCisgICAgICogd2hpY2ggYWxsb3dzIHRoZSBsb2FkIG9m
IGEgZGF0YTogVVJJICh3aGljaCBpbmhlcml0cyB0aGUgcHJpbmNpcGFsIG9mCisgICAgICogaXRz
IGxvYWRlcikgb3IgYSBVUkkgd2l0aCB0aGUgc2FtZSBwcmluY2lwYWwgYXMgaXRzIGxvYWRlciAo
ZWcuIGEgCisgICAgICogQmxvYiBVUkkpLgorICAgICAqIEluIHRoZXNlIGNhc2VzLCB3aXRoIGFs
bG93SWZJbmhlcml0c1ByaW5jaXBhbCBzZXQgdG8gdHJ1ZSwgdGhlIFVSSSBjYW4KKyAgICAgKiBi
ZSBsb2FkZWQgYnkgYSBudWxsIHByaW5jaXBhbC4KICAgICAgKgogICAgICAqIElmIHRoZSBsb2Fk
IGlzIGFsbG93ZWQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIElmIHRoZSBsb2FkIGlzIG5v
dAogICAgICAqIGFsbG93ZWQgdGhlIGZ1bmN0aW9uIHRocm93cyBOU19FUlJPUl9ET01fQkFEX1VS
SS4KICAgICAgKgogICAgICAqIE5PVEU6IE90aGVyIHBvbGljaWVzIG1pZ2h0IG92ZXJyaWRlIHRo
aXMsIHN1Y2ggYXMgdGhlIEFjY2Vzcy1Db250cm9sCiAgICAgICogICAgICAgc3BlY2lmaWNhdGlv
bi4KICAgICAgKiBOT1RFOiBUaGUgJ2RvbWFpbicgYXR0cmlidXRlIGhhcyBubyBlZmZlY3Qgb24g
dGhlIGJlaGF2aW91ciBvZiB0aGlzCiAgICAgICogICAgICAgZnVuY3Rpb24uCiAgICAgICoKICAg
ICAgKgogICAgICAqIEBwYXJhbSB1cmkgICAgVGhlIFVSSSBhYm91dCB0byBiZSBsb2FkZWQuCiAg
ICAgICogQHBhcmFtIHJlcG9ydCBJZiB0cnVlLCB3aWxsIHJlcG9ydCBhIHdhcm5pbmcgdG8gdGhl
IGNvbnNvbGUgc2VydmljZQogICAgICAqICAgICAgICAgICAgICAgaWYgdGhlIGxvYWQgaXMgbm90
IGFsbG93ZWQuCisgICAgICogQHBhcmFtIGFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCAgIElmIHRy
dWUsIHRoZSBsb2FkIGlzIGFsbG93ZWQgaWYgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvYWRlZSBpbmhlcml0cyB0aGUgcHJpbmNpcGFsIG9mIHRoZQorICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIuCiAgICAgICogQHRo
cm93cyBOU19FUlJPUl9ET01fQkFEX1VSSSBpZiB0aGUgbG9hZCBpcyBub3QgYWxsb3dlZC4KICAg
ICAgKi8KLSAgICB2b2lkIGNoZWNrTWF5TG9hZChpbiBuc0lVUkkgdXJpLCBpbiBib29sZWFuIHJl
cG9ydCk7CisgICAgdm9pZCBjaGVja01heUxvYWQoaW4gbnNJVVJJIHVyaSwgaW4gYm9vbGVhbiBy
ZXBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBhbGxvd0lmSW5oZXJpdHNQ
cmluY2lwYWwpOwogCiAgICAgLyoqCiAgICAgICogVGhlIHN1YmplY3QgbmFtZSBmb3IgdGhlIGNl
cnRpZmljYXRlLiAgVGhpcyBhY3R1YWxseSBpZGVudGlmaWVzIHRoZQogICAgICAqIHN1YmplY3Qg
b2YgdGhlIGNlcnRpZmljYXRlLiAgVGhpcyBtYXkgd2VsbCBub3QgYmUgYSBzdHJpbmcgdGhhdCB3
b3VsZAogICAgICAqIG1lYW4gbXVjaCB0byBhIHR5cGljYWwgdXNlciBvbiBpdHMgb3duIChlLmcu
IGl0IG1heSBoYXZlIGEgbnVtYmVyIG9mCiAgICAgICogZGlmZmVyZW50IG5hbWVzIGFsbCBjb25j
YXRlbmF0ZWQgdG9nZXRoZXIgd2l0aCBzb21lIGluZm9ybWF0aW9uIG9uIHdoYXQKICAgICAgKiB0
aGV5IG1lYW4gaW4gYmV0d2VlbikuCiAgICAgICoKZGlmZiAtLWdpdCBhL2NhcHMvaW5jbHVkZS9u
c051bGxQcmluY2lwYWwuaCBiL2NhcHMvaW5jbHVkZS9uc051bGxQcmluY2lwYWwuaAotLS0gYS9j
YXBzL2luY2x1ZGUvbnNOdWxsUHJpbmNpcGFsLmgKKysrIGIvY2Fwcy9pbmNsdWRlL25zTnVsbFBy
aW5jaXBhbC5oCkBAIC0xMCwxNiArMTAsMTcgQEAKICAqLwogCiAjaWZuZGVmIG5zTnVsbFByaW5j
aXBhbF9oX18KICNkZWZpbmUgbnNOdWxsUHJpbmNpcGFsX2hfXwogCiAjaW5jbHVkZSAibnNJUHJp
bmNpcGFsLmgiCiAjaW5jbHVkZSAibnNKU1ByaW5jaXBhbHMuaCIKICNpbmNsdWRlICJuc0NPTVB0
ci5oIgorI2luY2x1ZGUgIm5zUHJpbmNpcGFsLmgiCiAKIGNsYXNzIG5zSVVSSTsKIAogI2RlZmlu
ZSBOU19OVUxMUFJJTkNJUEFMX0NMQVNTTkFNRSAibnVsbHByaW5jaXBhbCIKICNkZWZpbmUgTlNf
TlVMTFBSSU5DSVBBTF9DSUQgXAogeyAweGRkMTU2ZDYyLCAweGQyNmYsIDB4NDQ0MSwgXAogIHsg
MHg5YywgMHhkYiwgMHhlOCwgMHhmMCwgMHg5MSwgMHgwNywgMHhjMiwgMHg3MyB9IH0KICNkZWZp
bmUgTlNfTlVMTFBSSU5DSVBBTF9DT05UUkFDVElEICJAbW96aWxsYS5vcmcvbnVsbHByaW5jaXBh
bDsxIgpkaWZmIC0tZ2l0IGEvY2Fwcy9pbmNsdWRlL25zUHJpbmNpcGFsLmggYi9jYXBzL2luY2x1
ZGUvbnNQcmluY2lwYWwuaAotLS0gYS9jYXBzL2luY2x1ZGUvbnNQcmluY2lwYWwuaAorKysgYi9j
YXBzL2luY2x1ZGUvbnNQcmluY2lwYWwuaApAQCAtOCwxNiArOCwxOSBAQAogCiAjaW5jbHVkZSAi
bnNBdXRvUHRyLmgiCiAjaW5jbHVkZSAibnNDT01QdHIuaCIKICNpbmNsdWRlICJuc1ZvaWRBcnJh
eS5oIgogI2luY2x1ZGUgIm5zSGFzaHRhYmxlLmgiCiAjaW5jbHVkZSAibnNKU1ByaW5jaXBhbHMu
aCIKICNpbmNsdWRlICJuc1RBcnJheS5oIgogI2luY2x1ZGUgIm5zQXV0b1B0ci5oIgorI2luY2x1
ZGUgIm5zSVByb3RvY29sSGFuZGxlci5oIgorI2luY2x1ZGUgIm5zTmV0VXRpbC5oIgorI2luY2x1
ZGUgIm5zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgiCiAKIGNsYXNzIG5zSU9iamVjdElucHV0U3Ry
ZWFtOwogY2xhc3MgbnNJT2JqZWN0T3V0cHV0U3RyZWFtOwogY2xhc3MgRG9tYWluUG9saWN5OyAK
IAogY2xhc3MgbnNCYXNlUHJpbmNpcGFsIDogcHVibGljIG5zSlNQcmluY2lwYWxzCiB7CiBwdWJs
aWM6CkBAIC0xMTgsMTcgKzEyMSwxNyBAQCBwdWJsaWM6CiAgIE5TX0lNRVRIT0QgRXF1YWxzSWdu
b3JpbmdEb21haW4obnNJUHJpbmNpcGFsKiBvdGhlciwgYm9vbCogX3JldHZhbCk7CiAgIE5TX0lN
RVRIT0QgR2V0SGFzaFZhbHVlKFBSVWludDMyKiBhSGFzaFZhbHVlKTsKICAgTlNfSU1FVEhPRCBH
ZXRVUkkobnNJVVJJKiogYVVSSSk7CiAgIE5TX0lNRVRIT0QgR2V0RG9tYWluKG5zSVVSSSoqIGFE
b21haW4pOwogICBOU19JTUVUSE9EIFNldERvbWFpbihuc0lVUkkqIGFEb21haW4pOwogICBOU19J
TUVUSE9EIEdldE9yaWdpbihjaGFyKiogYU9yaWdpbik7CiAgIE5TX0lNRVRIT0QgU3Vic3VtZXMo
bnNJUHJpbmNpcGFsKiBvdGhlciwgYm9vbCogX3JldHZhbCk7CiAgIE5TX0lNRVRIT0QgU3Vic3Vt
ZXNJZ25vcmluZ0RvbWFpbihuc0lQcmluY2lwYWwqIG90aGVyLCBib29sKiBfcmV0dmFsKTsKLSAg
TlNfSU1FVEhPRCBDaGVja01heUxvYWQobnNJVVJJKiB1cmksIGJvb2wgcmVwb3J0KTsKKyAgTlNf
SU1FVEhPRCBDaGVja01heUxvYWQobnNJVVJJKiB1cmksIGJvb2wgcmVwb3J0LCBib29sIGFsbG93
SWZJbmhlcml0c1ByaW5jaXBhbCk7CiAgIE5TX0lNRVRIT0QgR2V0RXh0ZW5kZWRPcmlnaW4obnNB
Q1N0cmluZyYgYUV4dGVuZGVkT3JpZ2luKTsKICAgTlNfSU1FVEhPRCBHZXRBcHBTdGF0dXMoUFJV
aW50MTYqIGFBcHBTdGF0dXMpOwogICBOU19JTUVUSE9EIEdldEFwcElkKFBSVWludDMyKiBhQXBw
U3RhdHVzKTsKICAgTlNfSU1FVEhPRCBHZXRJc0luQnJvd3NlckVsZW1lbnQoYm9vbCogYUlzSW5C
cm93c2VyRWxlbWVudCk7CiAjaWZkZWYgREVCVUcKICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKCk7
CiAjZW5kaWYKIApAQCAtMTUzLDE2ICsxNTYsMzMgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhSXNDZXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBhVHJ1c3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy
IGFBcHBJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUluTW96QnJvd3Nl
cik7CiAKICAgdmlydHVhbCB2b2lkIEdldFNjcmlwdExvY2F0aW9uKG5zQUNTdHJpbmcmIGFTdHIp
IE1PWl9PVkVSUklERTsKICAgdm9pZCBTZXRVUkkobnNJVVJJKiBhVVJJKTsKIAorICBzdGF0aWMg
Ym9vbCBJc1ByaW5jaXBhbEluaGVyaXRlZChuc0lVUkkqIGFVUkkpIHsKKyAgICAvLyByZXR1cm4g
dHJ1ZSBpZiB0aGUgbG9hZGVlIFVSSSBoYXMKKyAgICAvLyB0aGUgVVJJX0lOSEVSSVRTX1NFQ1VS
SVRZX0NPTlRFWFQgZmxhZyBzZXQuCisgICAgYm9vbCBkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4
dDsKKyAgICBuc3Jlc3VsdCBydiA9CisgICAgTlNfVVJJQ2hhaW5IYXNGbGFncyhhVVJJLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJUHJvdG9jb2xIYW5kbGVyOjpVUklfSU5IRVJJVFNfU0VD
VVJJVFlfQ09OVEVYVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkb2VzSW5oZXJpdFNlY3Vy
aXR5Q29udGV4dCk7CisKKyAgICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSAmJiBkb2VzSW5oZXJpdFNl
Y3VyaXR5Q29udGV4dCkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworICB9CisKKwogICAvKioKICAgICogQ29tcHV0ZXMgdGhlIHB1bnktZW5jb2RlZCBv
cmlnaW4gb2YgYVVSSS4KICAgICovCiAgIHN0YXRpYyBuc3Jlc3VsdCBHZXRPcmlnaW5Gb3JVUkko
bnNJVVJJKiBhVVJJLCBjaGFyICoqYU9yaWdpbik7CiAKICAgbnNDT01QdHI8bnNJVVJJPiBtRG9t
YWluOwogICBuc0NPTVB0cjxuc0lVUkk+IG1Db2RlYmFzZTsKICAgUFJVaW50MzIgbUFwcElkOwpA
QCAtMTk3LDE3ICsyMTcsMTcgQEAgcHVibGljOgogICBOU19JTUVUSE9EIEVxdWFsc0lnbm9yaW5n
RG9tYWluKG5zSVByaW5jaXBhbCogb3RoZXIsIGJvb2wqIF9yZXR2YWwpOwogICBOU19JTUVUSE9E
IEdldEhhc2hWYWx1ZShQUlVpbnQzMiogYUhhc2hWYWx1ZSk7CiAgIE5TX0lNRVRIT0QgR2V0VVJJ
KG5zSVVSSSoqIGFVUkkpOwogICBOU19JTUVUSE9EIEdldERvbWFpbihuc0lVUkkqKiBhRG9tYWlu
KTsKICAgTlNfSU1FVEhPRCBTZXREb21haW4obnNJVVJJKiBhRG9tYWluKTsKICAgTlNfSU1FVEhP
RCBHZXRPcmlnaW4oY2hhcioqIGFPcmlnaW4pOwogICBOU19JTUVUSE9EIFN1YnN1bWVzKG5zSVBy
aW5jaXBhbCogb3RoZXIsIGJvb2wqIF9yZXR2YWwpOwogICBOU19JTUVUSE9EIFN1YnN1bWVzSWdu
b3JpbmdEb21haW4obnNJUHJpbmNpcGFsKiBvdGhlciwgYm9vbCogX3JldHZhbCk7Ci0gIE5TX0lN
RVRIT0QgQ2hlY2tNYXlMb2FkKG5zSVVSSSogdXJpLCBib29sIHJlcG9ydCk7CisgIE5TX0lNRVRI
T0QgQ2hlY2tNYXlMb2FkKG5zSVVSSSogdXJpLCBib29sIHJlcG9ydCwgYm9vbCBhbGxvd0lmSW5o
ZXJpdHNQcmluY2lwYWwpOwogICBOU19JTUVUSE9EIEdldEV4dGVuZGVkT3JpZ2luKG5zQUNTdHJp
bmcmIGFFeHRlbmRlZE9yaWdpbik7CiAgIE5TX0lNRVRIT0QgR2V0QXBwU3RhdHVzKFBSVWludDE2
KiBhQXBwU3RhdHVzKTsKICAgTlNfSU1FVEhPRCBHZXRBcHBJZChQUlVpbnQzMiogYUFwcFN0YXR1
cyk7CiAgIE5TX0lNRVRIT0QgR2V0SXNJbkJyb3dzZXJFbGVtZW50KGJvb2wqIGFJc0luQnJvd3Nl
ckVsZW1lbnQpOwogI2lmZGVmIERFQlVHCiAgIHZpcnR1YWwgdm9pZCBkdW1wSW1wbCgpOwogI2Vu
ZGlmCiAgIApkaWZmIC0tZ2l0IGEvY2Fwcy9zcmMvbnNOdWxsUHJpbmNpcGFsLmNwcCBiL2NhcHMv
c3JjL25zTnVsbFByaW5jaXBhbC5jcHAKLS0tIGEvY2Fwcy9zcmMvbnNOdWxsUHJpbmNpcGFsLmNw
cAorKysgYi9jYXBzL3NyYy9uc051bGxQcmluY2lwYWwuY3BwCkBAIC0yODcsMTggKzI4NywzNiBA
QCBuc051bGxQcmluY2lwYWw6OlN1YnN1bWVzKG5zSVByaW5jaXBhbCAqCiAKIE5TX0lNRVRIT0RJ
TVAKIG5zTnVsbFByaW5jaXBhbDo6U3Vic3VtZXNJZ25vcmluZ0RvbWFpbihuc0lQcmluY2lwYWwg
KmFPdGhlciwgYm9vbCAqYVJlc3VsdCkKIHsKICAgcmV0dXJuIFN1YnN1bWVzKGFPdGhlciwgYVJl
c3VsdCk7CiB9CiAKIE5TX0lNRVRIT0RJTVAKLW5zTnVsbFByaW5jaXBhbDo6Q2hlY2tNYXlMb2Fk
KG5zSVVSSSogYVVSSSwgYm9vbCBhUmVwb3J0KQoteworbnNOdWxsUHJpbmNpcGFsOjpDaGVja01h
eUxvYWQobnNJVVJJKiBhVVJJLCBib29sIGFSZXBvcnQsIGJvb2wgYUFsbG93SWZJbmhlcml0c1By
aW5jaXBhbCkKKyB7CisgIGlmIChhQWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsKSB7CisgICAgaWYg
KG5zUHJpbmNpcGFsOjpJc1ByaW5jaXBhbEluaGVyaXRlZChhVVJJKSkgeworICAgICAgcmV0dXJu
IE5TX09LOworICAgIH0KKworICAgIC8vIEFsc28gYWxsb3cgdGhlIGxvYWQgaWYgdGhlIHByaW5j
aXBhbCBvZiB0aGUgVVJJIGJlaW5nIGNoZWNrZWQgaXMgZXhhY3RseQorICAgIC8vIHVzIGllIHRo
aXMuCisgICAgbnNDT01QdHI8bnNJVVJJV2l0aFByaW5jaXBhbD4gdXJpUHJpbmMgPSBkb19RdWVy
eUludGVyZmFjZShhVVJJKTsKKyAgICBpZiAodXJpUHJpbmMpIHsKKyAgICAgIG5zQ09NUHRyPG5z
SVByaW5jaXBhbD4gcHJpbmNpcGFsOworICAgICAgdXJpUHJpbmMtPkdldFByaW5jaXBhbChnZXR0
ZXJfQWRkUmVmcyhwcmluY2lwYWwpKTsKKworICAgICAgaWYgKHByaW5jaXBhbCAmJiBwcmluY2lw
YWwgPT0gdGhpcykgeworICAgICAgICByZXR1cm4gTlNfT0s7CisgICAgICB9CisgICAgfQorICB9
CisKICAgaWYgKGFSZXBvcnQpIHsKICAgICBuc1NjcmlwdFNlY3VyaXR5TWFuYWdlcjo6UmVwb3J0
RXJyb3IoCiAgICAgICBudWxscHRyLCBOU19MSVRFUkFMX1NUUklORygiQ2hlY2tTYW1lT3JpZ2lu
RXJyb3IiKSwgbVVSSSwgYVVSSSk7CiAgIH0KIAogICByZXR1cm4gTlNfRVJST1JfRE9NX0JBRF9V
Ukk7CiB9CiAKZGlmZiAtLWdpdCBhL2NhcHMvc3JjL25zUHJpbmNpcGFsLmNwcCBiL2NhcHMvc3Jj
L25zUHJpbmNpcGFsLmNwcAotLS0gYS9jYXBzL3NyYy9uc1ByaW5jaXBhbC5jcHAKKysrIGIvY2Fw
cy9zcmMvbnNQcmluY2lwYWwuY3BwCkBAIC04NDEsMTggKzg0MSwyNiBAQCBVUklJc0xvY2FsRmls
ZShuc0lVUkkgKmFVUkkpCiAKICAgcmV0dXJuIHV0aWwgJiYgTlNfU1VDQ0VFREVEKHV0aWwtPlBy
b3RvY29sSGFzRmxhZ3MoYVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
UHJvdG9jb2xIYW5kbGVyOjpVUklfSVNfTE9DQUxfRklMRSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmlzRmlsZSkpICYmCiAgICAgICAgICBpc0ZpbGU7CiB9CiAKIE5TX0lNRVRI
T0RJTVAKLW5zUHJpbmNpcGFsOjpDaGVja01heUxvYWQobnNJVVJJKiBhVVJJLCBib29sIGFSZXBv
cnQpCituc1ByaW5jaXBhbDo6Q2hlY2tNYXlMb2FkKG5zSVVSSSogYVVSSSwgYm9vbCBhUmVwb3J0
LCBib29sIGFBbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpCiB7CisgICBpZiAoYUFsbG93SWZJbmhl
cml0c1ByaW5jaXBhbCkgeworICAgIC8vIElmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIHRvIGFsbG93
IGxvYWRzIG9mIFVSSXMgdGhhdCBpbmhlcml0CisgICAgLy8gb3VyIHByaW5jaXBhbCwgYWxsb3cg
dGhlIGxvYWQgaWYgdGhpcyBVUkkgaW5oZXJpdHMgaXRzIHByaW5jaXBhbAorICAgIGlmIChuc1By
aW5jaXBhbDo6SXNQcmluY2lwYWxJbmhlcml0ZWQoYVVSSSkpIHsKKyAgICAgIHJldHVybiBOU19P
SzsKKyAgICB9CisgIH0KKwogICBpZiAoIW5zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOjpTZWN1cml0
eUNvbXBhcmVVUklzKG1Db2RlYmFzZSwgYVVSSSkpIHsKICAgICBpZiAobnNTY3JpcHRTZWN1cml0
eU1hbmFnZXI6OkdldFN0cmljdEZpbGVPcmlnaW5Qb2xpY3koKSAmJgogICAgICAgICBVUklJc0xv
Y2FsRmlsZShhVVJJKSkgewogICAgICAgbnNDT01QdHI8bnNJRmlsZVVSTD4gZmlsZVVSTChkb19R
dWVyeUludGVyZmFjZShhVVJJKSk7CiAKICAgICAgIGlmICghVVJJSXNMb2NhbEZpbGUobUNvZGVi
YXNlKSkgewogICAgICAgICAvLyBJZiB0aGUgY29kZWJhc2UgaXMgbm90IGFsc28gYSBmaWxlOiB1
cmkgdGhlbiBmb3JnZXQgaXQKICAgICAgICAgLy8gKGRvbid0IHdhbnQgcmVzb3VyY2U6IHByaW5j
aXBhbHMgaW4gYSBmaWxlOiBkb2MpCkBAIC0xNDI3LDIxICsxNDM1LDIxIEBAIG5zRXhwYW5kZWRQ
cmluY2lwYWw6OlN1YnN1bWVzKG5zSVByaW5jaXAKIAogTlNfSU1FVEhPRElNUAogbnNFeHBhbmRl
ZFByaW5jaXBhbDo6U3Vic3VtZXNJZ25vcmluZ0RvbWFpbihuc0lQcmluY2lwYWwqIGFPdGhlciwg
Ym9vbCogYVJlc3VsdCkKIHsKICAgcmV0dXJuIDo6U3Vic3VtZXModGhpcywgJm5zSVByaW5jaXBh
bDo6U3Vic3VtZXNJZ25vcmluZ0RvbWFpbiwgYU90aGVyLCBhUmVzdWx0KTsKIH0KIAogTlNfSU1F
VEhPRElNUAotbnNFeHBhbmRlZFByaW5jaXBhbDo6Q2hlY2tNYXlMb2FkKG5zSVVSSSogdXJpLCBi
b29sIGFSZXBvcnQpCituc0V4cGFuZGVkUHJpbmNpcGFsOjpDaGVja01heUxvYWQobnNJVVJJKiB1
cmksIGJvb2wgYVJlcG9ydCwgYm9vbCBhQWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsKQogewogICBu
c3Jlc3VsdCBydjsKICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1QcmluY2lwYWxzLkxlbmd0
aCgpOyArK2kpewotICAgIHJ2ID0gbVByaW5jaXBhbHNbaV0tPkNoZWNrTWF5TG9hZCh1cmksIGFS
ZXBvcnQpOworICAgIHJ2ID0gbVByaW5jaXBhbHNbaV0tPkNoZWNrTWF5TG9hZCh1cmksIGFSZXBv
cnQsIGFBbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpOwogICAgIGlmIChOU19TVUNDRUVERUQocnYp
KQogICAgICAgcmV0dXJuIHJ2OwogICB9CiAKICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9CQURfVVJJ
OwogfQogCiBOU19JTUVUSE9ESU1QCmRpZmYgLS1naXQgYS9jYXBzL3NyYy9uc1NjcmlwdFNlY3Vy
aXR5TWFuYWdlci5jcHAgYi9jYXBzL3NyYy9uc1NjcmlwdFNlY3VyaXR5TWFuYWdlci5jcHAKLS0t
IGEvY2Fwcy9zcmMvbnNTY3JpcHRTZWN1cml0eU1hbmFnZXIuY3BwCisrKyBiL2NhcHMvc3JjL25z
U2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmNwcApAQCAtMTM4MiwxNyArMTM4MiwxNyBAQCBuc1Njcmlw
dFNlY3VyaXR5TWFuYWdlcjo6Q2hlY2tMb2FkVVJJV2l0CiAgICAgLy8gQ2hlY2sgZm9yIHVyaXMg
dGhhdCBhcmUgb25seSBsb2FkYWJsZSBieSBwcmluY2lwYWxzIHRoYXQgc3Vic3VtZSB0aGVtCiAg
ICAgYm9vbCBoYXNGbGFnczsKICAgICBydiA9IE5TX1VSSUNoYWluSGFzRmxhZ3ModGFyZ2V0QmFz
ZVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJvdG9jb2xIYW5kbGVyOjpV
UklfTE9BREFCTEVfQllfU1VCU1VNRVJTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
aGFzRmxhZ3MpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgICBpZiAoaGFz
RmxhZ3MpIHsKLSAgICAgICAgcmV0dXJuIGFQcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh0YXJnZXRC
YXNlVVJJLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIGFQcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh0
YXJnZXRCYXNlVVJJLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgLy8tLSBnZXQgdGhlIHNv
dXJjZSBzY2hlbWUKICAgICBuc0NBdXRvU3RyaW5nIHNvdXJjZVNjaGVtZTsKICAgICBydiA9IHNv
dXJjZUJhc2VVUkktPkdldFNjaGVtZShzb3VyY2VTY2hlbWUpOwogICAgIGlmIChOU19GQUlMRUQo
cnYpKSByZXR1cm4gcnY7CiAKICAgICBpZiAoc291cmNlU2NoZW1lLkxvd2VyQ2FzZUVxdWFsc0xp
dGVyYWwoTlNfTlVMTFBSSU5DSVBBTF9TQ0hFTUUpKSB7CmRpZmYgLS1naXQgYS9jYXBzL3NyYy9u
c1N5c3RlbVByaW5jaXBhbC5jcHAgYi9jYXBzL3NyYy9uc1N5c3RlbVByaW5jaXBhbC5jcHAKLS0t
IGEvY2Fwcy9zcmMvbnNTeXN0ZW1QcmluY2lwYWwuY3BwCisrKyBiL2NhcHMvc3JjL25zU3lzdGVt
UHJpbmNpcGFsLmNwcApAQCAtMTEwLDE3ICsxMTAsMTcgQEAgbnNTeXN0ZW1QcmluY2lwYWw6OlN1
YnN1bWVzKG5zSVByaW5jaXBhbAogTlNfSU1FVEhPRElNUAogbnNTeXN0ZW1QcmluY2lwYWw6OlN1
YnN1bWVzSWdub3JpbmdEb21haW4obnNJUHJpbmNpcGFsICpvdGhlciwgYm9vbCAqcmVzdWx0KQog
ewogICAgICpyZXN1bHQgPSB0cnVlOwogICAgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhP
RElNUAotbnNTeXN0ZW1QcmluY2lwYWw6OkNoZWNrTWF5TG9hZChuc0lVUkkqIHVyaSwgYm9vbCBh
UmVwb3J0KQorbnNTeXN0ZW1QcmluY2lwYWw6OkNoZWNrTWF5TG9hZChuc0lVUkkqIHVyaSwgYm9v
bCBhUmVwb3J0LCBib29sIGFBbGxvd0lmSW5oZXJpdHNQcmluY2lwYWwpCiB7CiAgICAgcmV0dXJu
IE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCiBuc1N5c3RlbVByaW5jaXBhbDo6R2V0SGFzaFZh
bHVlKFBSVWludDMyICpyZXN1bHQpCiB7CiAgICAgKnJlc3VsdCA9IE5TX1BUUl9UT19JTlQzMih0
aGlzKTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50VXRpbHMuaCBi
L2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50VXRpbHMuaAotLS0gYS9jb250ZW50L2Jhc2Uv
cHVibGljL25zQ29udGVudFV0aWxzLmgKKysrIGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRl
bnRVdGlscy5oCkBAIC0xNjk5LDE3ICsxNjk5LDE3IEBAIHB1YmxpYzoKICAgICoKICAgICogQHBh
cmFtIGFTY3JpcHRDb250ZXh0IHRoZSBzY3JpcHQgY29udGV4dCB0byBnZXQgdGhlIGRvY3VtZW50
IGZvcjsgY2FuIGJlIG51bGwKICAgICoKICAgICogQHJldHVybiB0aGUgZG9jdW1lbnQgYXNzb2Np
YXRlZCB3aXRoIHRoZSBzY3JpcHQgY29udGV4dAogICAgKi8KICAgc3RhdGljIGFscmVhZHlfQWRk
UmVmZWQ8bnNJRG9jdW1lbnQ+CiAgIEdldERvY3VtZW50RnJvbVNjcmlwdENvbnRleHQobnNJU2Ny
aXB0Q29udGV4dCAqYVNjcmlwdENvbnRleHQpOwogCi0gIHN0YXRpYyBib29sIENoZWNrTWF5TG9h
ZChuc0lQcmluY2lwYWwqIGFQcmluY2lwYWwsIG5zSUNoYW5uZWwqIGFDaGFubmVsKTsKKyAgc3Rh
dGljIGJvb2wgQ2hlY2tNYXlMb2FkKG5zSVByaW5jaXBhbCogYVByaW5jaXBhbCwgbnNJQ2hhbm5l
bCogYUNoYW5uZWwsIGJvb2wgYUFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCk7CiAKICAgLyoqCiAg
ICAqIFRoZSBtZXRob2QgY2hlY2tzIHdoZXRoZXIgdGhlIGNhbGxlciBjYW4gYWNjZXNzIG5hdGl2
ZSBhbm9ueW1vdXMgY29udGVudC4KICAgICogSWYgdGhlcmUgaXMgbm8gSlMgaW4gdGhlIHN0YWNr
IG9yIHByaXZpbGVnZWQgSlMgaXMgcnVubmluZywgdGhpcwogICAgKiBtZXRob2QgcmV0dXJucyB0
cnVlLCBvdGhlcndpc2UgZmFsc2UuCiAgICAqLwogICBzdGF0aWMgYm9vbCBDYW5BY2Nlc3NOYXRp
dmVBbm9uKCk7CiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50U2luay5j
cHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFNpbmsuY3BwCi0tLSBhL2NvbnRlbnQvYmFz
ZS9zcmMvbnNDb250ZW50U2luay5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRT
aW5rLmNwcApAQCAtMTA1OSwxNyArMTA1OSwxNyBAQCBuc0NvbnRlbnRTaW5rOjpQcm9jZXNzT2Zm
bGluZU1hbmlmZXN0KGNvCiAgICAgbnNDb250ZW50VXRpbHM6Ok5ld1VSSVdpdGhEb2N1bWVudENo
YXJzZXQoZ2V0dGVyX0FkZFJlZnMobWFuaWZlc3RVUkkpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFNYW5pZmVzdFNwZWMsIG1Eb2N1bWVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRG9jdW1lbnRVUkkpOwog
ICAgIGlmICghbWFuaWZlc3RVUkkpIHsKICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBE
b2N1bWVudHMgbXVzdCBsaXN0IGEgbWFuaWZlc3QgZnJvbSB0aGUgc2FtZSBvcmlnaW4KLSAgICBy
diA9IG1Eb2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5DaGVja01heUxvYWQobWFuaWZlc3RVUkks
IHRydWUpOworICAgIHJ2ID0gbURvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkNoZWNrTWF5TG9h
ZChtYW5pZmVzdFVSSSwgdHJ1ZSwgZmFsc2UpOwogICAgIGlmIChOU19GQUlMRUQocnYpKSB7CiAg
ICAgICBhY3Rpb24gPSBDQUNIRV9TRUxFQ1RJT05fUkVTRUxFQ1RfV0lUSE9VVF9NQU5JRkVTVDsK
ICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAvLyBPbmx5IGNvbnRpbnVlIGlmIHRoZSBkb2N1bWVu
dCBoYXMgcGVybWlzc2lvbiB0byB1c2Ugb2ZmbGluZSBBUElzLgogICAgICAgaWYgKCFuc0NvbnRl
bnRVdGlsczo6T2ZmbGluZUFwcEFsbG93ZWQobURvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCkpKSB7
CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMv
bnNDb250ZW50VXRpbHMuY3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAK
LS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKKysrIGIvY29udGVudC9i
YXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAKQEAgLTQ1NzksMTcgKzQ1NzksMTcgQEAgbnNDb250
ZW50VXRpbHM6OkNoZWNrU2VjdXJpdHlCZWZvcmVMb2FkKAogCiAgIC8vIFNhbWUgT3JpZ2luCiAg
IGlmICgoYUFsbG93RGF0YSAmJiBTY2hlbWVJcyhhVVJJVG9Mb2FkLCAiZGF0YSIpKSB8fAogICAg
ICAgKChhQ2hlY2tMb2FkRmxhZ3MgJiBuc0lTY3JpcHRTZWN1cml0eU1hbmFnZXI6OkFMTE9XX0NI
Uk9NRSkgJiYKICAgICAgICBTY2hlbWVJcyhhVVJJVG9Mb2FkLCAiY2hyb21lIikpKSB7CiAgICAg
cmV0dXJuIE5TX09LOwogICB9CiAKLSAgcmV0dXJuIGFMb2FkaW5nUHJpbmNpcGFsLT5DaGVja01h
eUxvYWQoYVVSSVRvTG9hZCwgdHJ1ZSk7CisgIHJldHVybiBhTG9hZGluZ1ByaW5jaXBhbC0+Q2hl
Y2tNYXlMb2FkKGFVUklUb0xvYWQsIHRydWUsIGZhbHNlKTsKIH0KIAogYm9vbAogbnNDb250ZW50
VXRpbHM6OklzU3lzdGVtUHJpbmNpcGFsKG5zSVByaW5jaXBhbCogYVByaW5jaXBhbCkKIHsKICAg
Ym9vbCBpc1N5c3RlbTsKICAgbnNyZXN1bHQgcnYgPSBzU2VjdXJpdHlNYW5hZ2VyLT5Jc1N5c3Rl
bVByaW5jaXBhbChhUHJpbmNpcGFsLCAmaXNTeXN0ZW0pOwogICByZXR1cm4gTlNfU1VDQ0VFREVE
KHJ2KSAmJiBpc1N5c3RlbTsKQEAgLTU3MzAsMTkgKzU3MzAsMTkgQEAgbnNDb250ZW50VXRpbHM6
OkNoZWNrU2FtZU9yaWdpbihuc0lDaGFubgogCiAgIG5zQ09NUHRyPG5zSVVSST4gbmV3VVJJOwog
ICBhTmV3Q2hhbm5lbC0+R2V0VVJJKGdldHRlcl9BZGRSZWZzKG5ld1VSSSkpOwogICBuc0NPTVB0
cjxuc0lVUkk+IG5ld09yaWdpbmFsVVJJOwogICBhTmV3Q2hhbm5lbC0+R2V0T3JpZ2luYWxVUkko
Z2V0dGVyX0FkZFJlZnMobmV3T3JpZ2luYWxVUkkpKTsKIAogICBOU19FTlNVUkVfU1RBVEUob2xk
UHJpbmNpcGFsICYmIG5ld1VSSSAmJiBuZXdPcmlnaW5hbFVSSSk7CiAKLSAgbnNyZXN1bHQgcnYg
PSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChuZXdVUkksIGZhbHNlKTsKKyAgbnNyZXN1bHQg
cnYgPSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChuZXdVUkksIGZhbHNlLCBmYWxzZSk7CiAg
IGlmIChOU19TVUNDRUVERUQocnYpICYmIG5ld09yaWdpbmFsVVJJICE9IG5ld1VSSSkgewotICAg
IHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3T3JpZ2luYWxVUkksIGZhbHNlKTsK
KyAgICBydiA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld09yaWdpbmFsVVJJLCBmYWxz
ZSwgZmFsc2UpOwogICB9CiAKICAgcmV0dXJuIHJ2OwogfQogCiBOU19JTVBMX0lTVVBQT1JUUzIo
U2FtZU9yaWdpbkNoZWNrZXIsCiAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5lbEV2ZW50U2lu
aywKICAgICAgICAgICAgICAgICAgICBuc0lJbnRlcmZhY2VSZXF1ZXN0b3IpCkBAIC01OTAzLDIz
ICs1OTAzLDIzIEBAIG5zQ29udGVudFV0aWxzOjpHZXREb2N1bWVudEZyb21TY3JpcHRDb24KICAg
ICAgIENhbGxRdWVyeUludGVyZmFjZShkb21kb2MsICZkb2MpOwogICAgIH0KICAgfQogICByZXR1
cm4gZG9jOwogfQogCiAvKiBzdGF0aWMgKi8KIGJvb2wKLW5zQ29udGVudFV0aWxzOjpDaGVja01h
eUxvYWQobnNJUHJpbmNpcGFsKiBhUHJpbmNpcGFsLCBuc0lDaGFubmVsKiBhQ2hhbm5lbCkKK25z
Q29udGVudFV0aWxzOjpDaGVja01heUxvYWQobnNJUHJpbmNpcGFsKiBhUHJpbmNpcGFsLCBuc0lD
aGFubmVsKiBhQ2hhbm5lbCwgYm9vbCBhQWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsKQogewogICBu
c0NPTVB0cjxuc0lVUkk+IGNoYW5uZWxVUkk7CiAgIG5zcmVzdWx0IHJ2ID0gTlNfR2V0RmluYWxD
aGFubmVsVVJJKGFDaGFubmVsLCBnZXR0ZXJfQWRkUmVmcyhjaGFubmVsVVJJKSk7CiAgIE5TX0VO
U1VSRV9TVUNDRVNTKHJ2LCBmYWxzZSk7CiAKLSAgcmV0dXJuIE5TX1NVQ0NFRURFRChhUHJpbmNp
cGFsLT5DaGVja01heUxvYWQoY2hhbm5lbFVSSSwgZmFsc2UpKTsKKyAgcmV0dXJuIE5TX1NVQ0NF
RURFRChhUHJpbmNpcGFsLT5DaGVja01heUxvYWQoY2hhbm5lbFVSSSwgZmFsc2UsIGFBbGxvd0lm
SW5oZXJpdHNQcmluY2lwYWwpKTsKIH0KIAogbnNDb250ZW50VHlwZVBhcnNlcjo6bnNDb250ZW50
VHlwZVBhcnNlcihjb25zdCBuc0FTdHJpbmcmIGFTdHJpbmcpCiAgIDogbVN0cmluZyhhU3RyaW5n
KSwgbVNlcnZpY2UobnVsbHB0cikKIHsKICAgQ2FsbEdldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9u
ZXR3b3JrL21pbWUtaGRycGFyYW07MSIsICZtU2VydmljZSk7CiB9CiAKQEAgLTY2ODQsMTcgKzY2
ODQsMTcgQEAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaQogICAvLyBm
aWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZpbGU6IGxv
YWQgb3BlbmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCiAgIC8vIHRvIGlu
aGVyaXQgdGhlIG93bmVyIGZyb20gdGhlIHJlZmVycmVyIHNvIHRoZXkgY2FuIHNjcmlwdCBlYWNo
IG90aGVyLgogICAvLyBJZiB3ZSBkb24ndCBzZXQgdGhlIG93bmVyIGV4cGxpY2l0bHkgdGhlbiBl
YWNoIGZpbGU6IGdldHMgYW4gb3duZXIKICAgLy8gYmFzZWQgb24gaXRzIG93biBjb2RlYmFzZSBs
YXRlci4KICAgLy8KICAgaWYgKFVSSUlzTG9jYWxGaWxlKGFVUkkpICYmIGFMb2FkaW5nUHJpbmNp
cGFsICYmCi0gICAgICBOU19TVUNDRUVERUQoYUxvYWRpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9h
ZChhVVJJLCBmYWxzZSkpICYmCisgICAgICBOU19TVUNDRUVERUQoYUxvYWRpbmdQcmluY2lwYWwt
PkNoZWNrTWF5TG9hZChhVVJJLCBmYWxzZSwgZmFsc2UpKSAmJgogICAgICAgLy8gT25lIG1vcmUg
Y2hlY2sgaGVyZS4gIENoZWNrTWF5TG9hZCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZSBmb3IgdGhl
CiAgICAgICAvLyBzeXN0ZW0gcHJpbmNpcGFsLCBidXQgd2UgZG8gTk9UIHdhbnQgdG8gaW5oZXJp
dCBpbiB0aGF0IGNhc2UuCiAgICAgICAhSXNTeXN0ZW1QcmluY2lwYWwoYUxvYWRpbmdQcmluY2lw
YWwpKSB7CiAgICAgYUNoYW5uZWwtPlNldE93bmVyKGFMb2FkaW5nUHJpbmNpcGFsKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKICAgfQogCiAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
YmFzZS9zcmMvbnNDcm9zc1NpdGVMaXN0ZW5lclByb3h5LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMv
bnNDcm9zc1NpdGVMaXN0ZW5lclByb3h5LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ3Jv
c3NTaXRlTGlzdGVuZXJQcm94eS5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0Nyb3NzU2l0
ZUxpc3RlbmVyUHJveHkuY3BwCkBAIC03MzgsMjAgKzczOCwyMCBAQCBuc0NPUlNMaXN0ZW5lclBy
b3h5OjpVcGRhdGVDaGFubmVsKG5zSUNoCiAgIGlmIChvcmlnaW5hbFVSSSAhPSB1cmkpIHsKICAg
ICBydiA9IG5zQ29udGVudFV0aWxzOjpHZXRTZWN1cml0eU1hbmFnZXIoKS0+CiAgICAgICBDaGVj
a0xvYWRVUklXaXRoUHJpbmNpcGFsKG1SZXF1ZXN0aW5nUHJpbmNpcGFsLCBvcmlnaW5hbFVSSSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2Vy
OjpTVEFOREFSRCk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgfQogCiAgIGlm
ICghbUhhc0JlZW5Dcm9zc1NpdGUgJiYKLSAgICAgIE5TX1NVQ0NFRURFRChtUmVxdWVzdGluZ1By
aW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UpKSAmJgorICAgICAgTlNfU1VDQ0VFREVE
KG1SZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQodXJpLCBmYWxzZSwgZmFsc2UpKSAm
JgogICAgICAgKG9yaWdpbmFsVVJJID09IHVyaSB8fAogICAgICAgIE5TX1NVQ0NFRURFRChtUmVx
dWVzdGluZ1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG9yaWdpbmFsVVJJLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs
c2UsIGZhbHNlKSkpKSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKICAgLy8gSXQncyBhIGNy
b3NzIHNpdGUgbG9hZAogICBtSGFzQmVlbkNyb3NzU2l0ZSA9IHRydWU7CiAKICAgbnNDU3RyaW5n
IHVzZXJwYXNzOwogICB1cmktPkdldFVzZXJQYXNzKHVzZXJwYXNzKTsKZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1l
bnQuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKKysrIGIvY29udGVu
dC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcApAQCAtMTA1OCwyOCArMTA1OCwyMiBAQCBuc0V4dGVy
bmFsUmVzb3VyY2VNYXA6OlBlbmRpbmdMb2FkOjpTdGFyCiAKICAgbnNJUHJpbmNpcGFsKiByZXF1
ZXN0aW5nUHJpbmNpcGFsID0gYVJlcXVlc3RpbmdOb2RlLT5Ob2RlUHJpbmNpcGFsKCk7CiAKICAg
bnNyZXN1bHQgcnYgPSBuc0NvbnRlbnRVdGlsczo6R2V0U2VjdXJpdHlNYW5hZ2VyKCktPgogICAg
IENoZWNrTG9hZFVSSVdpdGhQcmluY2lwYWwocmVxdWVzdGluZ1ByaW5jaXBhbCwgYVVSSSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVNjcmlwdFNlY3VyaXR5TWFuYWdlcjo6U1RB
TkRBUkQpOwogICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICAKLSAgLy8gQWxsb3cgZGF0
YSBVUklzIChsZXQgdGhlbSBza2lwIHRoZSBDaGVja01heUxvYWQgY2FsbCksIHNpbmNlIHdlIHdh
bnQKKyAgLy8gQWxsb3cgZGF0YSBVUklzIGFuZCBvdGhlciBVUkkncyB0aGF0IGluaGVyaXQgdGhl
aXIgcHJpbmNpcGFsIGJ5IHBhc3NpbmcKKyAgLy8gdHJ1ZSBhcyB0aGUgM3JkIGFyZ3VtZW50IG9m
IENoZWNrTWF5TG9hZCwgc2luY2Ugd2Ugd2FudAogICAvLyB0byBhbGxvdyBleHRlcm5hbCByZXNv
dXJjZXMgZnJvbSBkYXRhIFVSSXMgcmVnYXJkbGVzcyBvZiB0aGUgZGlmZmVyZW5jZQogICAvLyBp
biBVUkkgc2NoZW1lLgotICBib29sIGRvZXNJbmhlcml0U2VjdXJpdHlDb250ZXh0OwotICBydiA9
Ci0gICAgTlNfVVJJQ2hhaW5IYXNGbGFncyhhVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAg
bnNJUHJvdG9jb2xIYW5kbGVyOjpVUklfSU5IRVJJVFNfU0VDVVJJVFlfQ09OVEVYVCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICZkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dCk7Ci0gIGlmIChO
U19GQUlMRUQocnYpIHx8ICFkb2VzSW5oZXJpdFNlY3VyaXR5Q29udGV4dCkgewotICAgIHJ2ID0g
cmVxdWVzdGluZ1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGFVUkksIHRydWUpOwotICAgIE5TX0VO
U1VSRV9TVUNDRVNTKHJ2LCBydik7Ci0gIH0KKyAgcnYgPSByZXF1ZXN0aW5nUHJpbmNpcGFsLT5D
aGVja01heUxvYWQoYVVSSSwgdHJ1ZSwgdHJ1ZSk7CisgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBy
dik7CiAKICAgUFJJbnQxNiBzaG91bGRMb2FkID0gbnNJQ29udGVudFBvbGljeTo6QUNDRVBUOwog
ICBydiA9IE5TX0NoZWNrQ29udGVudExvYWRQb2xpY3kobnNJQ29udGVudFBvbGljeTo6VFlQRV9P
VEhFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFVUkksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0aW5nUHJpbmNpcGFsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYVJlcXVlc3RpbmdOb2RlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRW1wdHlDU3RyaW5nKCksIC8vbWltZSBndWVzcwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgICAgICAgICAvL2V4dHJhCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2Uvc3JjL25zWE1MSHR0cFJlcXVlc3QuY3BwIGIvY29udGVudC9iYXNlL3Ny
Yy9uc1hNTEh0dHBSZXF1ZXN0LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zWE1MSHR0cFJl
cXVlc3QuY3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNYTUxIdHRwUmVxdWVzdC5jcHAKQEAg
LTE2OTksMjggKzE2OTksMTkgQEAgbnNYTUxIdHRwUmVxdWVzdDo6SXNTeXN0ZW1YSFIoKQogbnNy
ZXN1bHQKIG5zWE1MSHR0cFJlcXVlc3Q6OkNoZWNrQ2hhbm5lbEZvckNyb3NzU2l0ZVJlcXVlc3Qo
bnNJQ2hhbm5lbCogYUNoYW5uZWwpCiB7CiAgIC8vIEZpcnN0IGNoZWNrIGlmIGNyb3NzLXNpdGUg
cmVxdWVzdHMgYXJlIGVuYWJsZWQuLi4KICAgaWYgKElzU3lzdGVtWEhSKCkpIHsKICAgICByZXR1
cm4gTlNfT0s7CiAgIH0KIAotICAvLyAuLi5vciBpZiB0aGlzIGlzIGEgc2FtZS1vcmlnaW4gcmVx
dWVzdC4KLSAgaWYgKG5zQ29udGVudFV0aWxzOjpDaGVja01heUxvYWQobVByaW5jaXBhbCwgYUNo
YW5uZWwpKSB7Ci0gICAgcmV0dXJuIE5TX09LOwotICB9Ci0KLSAgLy8gZXhlbXB0IGRhdGEgVVJJ
cyBmcm9tIHRoZSBzYW1lIG9yaWdpbiBjaGVjay4KLSAgbnNDT01QdHI8bnNJVVJJPiBjaGFubmVs
VVJJOwotICBib29sIGRhdGFTY2hlbWUgPSBmYWxzZTsKLSAgaWYgKE5TX1NVQ0NFRURFRChOU19H
ZXRGaW5hbENoYW5uZWxVUkkoYUNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKGNoYW5uZWxVUkkpKSkgJiYKLSAgICAgIE5TX1NV
Q0NFRURFRChjaGFubmVsVVJJLT5TY2hlbWVJcygiZGF0YSIsICZkYXRhU2NoZW1lKSkgJiYKLSAg
ICAgIGRhdGFTY2hlbWUpIHsKKyAgLy8gSWYgdGhpcyBpcyBhIHNhbWUtb3JpZ2luIHJlcXVlc3Qg
b3IgdGhlIGNoYW5uZWwncyBVUkkgaW5oZXJpdHMKKyAgLy8gaXRzIHByaW5jaXBhbCwgaXQncyBh
bGxvd2VkLgorICBpZiAobnNDb250ZW50VXRpbHM6OkNoZWNrTWF5TG9hZChtUHJpbmNpcGFsLCBh
Q2hhbm5lbCwgdHJ1ZSkpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAogICAvLyBUaGlzIGlz
IGEgY3Jvc3Mtc2l0ZSByZXF1ZXN0CiAgIG1TdGF0ZSB8PSBYTUxfSFRUUF9SRVFVRVNUX1VTRV9Y
U0lURV9BQzsKIAogICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGEgcHJlZmxpZ2h0IHJlcXVl
c3QuCiAgIG5zQ09NUHRyPG5zSUh0dHBDaGFubmVsPiBodHRwQ2hhbm5lbCA9IGRvX1F1ZXJ5SW50
ZXJmYWNlKGFDaGFubmVsKTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQveGJsL3NyYy9uc1hCTFNlcnZp
Y2UuY3BwIGIvY29udGVudC94Ymwvc3JjL25zWEJMU2VydmljZS5jcHAKLS0tIGEvY29udGVudC94
Ymwvc3JjL25zWEJMU2VydmljZS5jcHAKKysrIGIvY29udGVudC94Ymwvc3JjL25zWEJMU2Vydmlj
ZS5jcHAKQEAgLTkyNywxNyArOTI3LDE3IEBAIG5zWEJMU2VydmljZTo6TG9hZEJpbmRpbmdEb2N1
bWVudEluZm8obnMKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgTlNfRVJST1JfWEJMX0JMT0NL
RUQpOwogCiAgICAgaWYgKCFJc1N5c3RlbU9yQ2hyb21lVVJMUHJpbmNpcGFsKGFPcmlnaW5Qcmlu
Y2lwYWwpKSB7CiAgICAgICAvLyBBbHNvIG1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHNhbWUtb3JpZ2lu
IHdpdGggdGhlIGJvdW5kIGRvY3VtZW50CiAgICAgICAvLyBleGNlcHQgaWYgdGhlIHN0eWxlc2hl
ZXQgaGFzIHRoZSBzeXN0ZW0gcHJpbmNpcGFsLgogICAgICAgaWYgKCEoZ0FsbG93RGF0YVVSSXMg
JiYgU2NoZW1lSXMoYUJpbmRpbmdVUkksICJkYXRhIikpICYmCiAgICAgICAgICAgIVNjaGVtZUlz
KGFCaW5kaW5nVVJJLCAiY2hyb21lIikpIHsKICAgICAgICAgcnYgPSBhQm91bmREb2N1bWVudC0+
Tm9kZVByaW5jaXBhbCgpLT5DaGVja01heUxvYWQoYUJpbmRpbmdVUkksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cnVlLCBmYWxzZSk7CiAgICAgICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBOU19FUlJPUl9YQkxf
QkxPQ0tFRCk7CiAgICAgICB9CiAKICAgICAgIC8vIEZpbmFsbHkgY2hlY2sgaWYgdGhpcyBkb2N1
bWVudCBpcyBhbGxvd2VkIHRvIHVzZSBYQkwgYXQgYWxsLgogICAgICAgTlNfRU5TVVJFX1RSVUUo
YUJvdW5kRG9jdW1lbnQtPkFsbG93WFVMWEJMKCksCiAgICAgICAgICAgICAgICAgICAgICBOU19F
UlJPUl9YQkxfQkxPQ0tFRCk7CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9jb250ZW50L3htbC9k
b2N1bWVudC9zcmMvbnNYTUxEb2N1bWVudC5jcHAgYi9jb250ZW50L3htbC9kb2N1bWVudC9zcmMv
bnNYTUxEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC94bWwvZG9jdW1lbnQvc3JjL25zWE1MRG9j
dW1lbnQuY3BwCisrKyBiL2NvbnRlbnQveG1sL2RvY3VtZW50L3NyYy9uc1hNTERvY3VtZW50LmNw
cApAQCAtMzI5LDE3ICszMjksMTcgQEAgbnNYTUxEb2N1bWVudDo6TG9hZChjb25zdCBuc0FTdHJp
bmcmIGFVcgogICAvLyB0aGF0IHdlIGRvbid0IGVuZCB1cCBpbiBhIGNhc2Ugd2hlcmUgY29kZSB3
aXRoIGVsZXZhdGVkIHByaXZpbGVnZXMgaXMKICAgLy8gY2FsbGluZyB1cyBhbmQgY2hhbmdpbmcg
dGhlIHByaW5jaXBhbCBvZiB0aGlzIGRvY3VtZW50LgogCiAgIC8vIEVuZm9yY2Ugc2FtZS1vcmln
aW4gZXZlbiBmb3IgY2hyb21lIGxvYWRlcnMgdG8gYXZvaWQgc29tZW9uZSBhY2NpZGVudGFsbHkK
ICAgLy8gdXNpbmcgYSBkb2N1bWVudCB0aGF0IGNvbnRlbnQgaGFzIGEgcmVmZXJlbmNlIHRvIGFu
ZCB0dXJuIHRoYXQgaW50byBhCiAgIC8vIGNocm9tZSBkb2N1bWVudC4KICAgbnNDT01QdHI8bnNJ
UHJpbmNpcGFsPiBwcmluY2lwYWwgPSBOb2RlUHJpbmNpcGFsKCk7CiAgIGlmICghbnNDb250ZW50
VXRpbHM6OklzU3lzdGVtUHJpbmNpcGFsKHByaW5jaXBhbCkpIHsKLSAgICBydiA9IHByaW5jaXBh
bC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UpOworICAgIHJ2ID0gcHJpbmNpcGFsLT5DaGVja01h
eUxvYWQodXJpLCBmYWxzZSwgZmFsc2UpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7
CiAKICAgICBQUkludDE2IHNob3VsZExvYWQgPSBuc0lDb250ZW50UG9saWN5OjpBQ0NFUFQ7CiAg
ICAgcnYgPSBOU19DaGVja0NvbnRlbnRMb2FkUG9saWN5KG5zSUNvbnRlbnRQb2xpY3k6OlRZUEVf
WE1MSFRUUFJFUVVFU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbmNpcGFsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsaW5nRG9jID8gY2FsbGluZ0RvYy5nZXQoKSA6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bnNJRG9j
dW1lbnQqPih0aGlzKSwKZGlmZiAtLWdpdCBhL2NvbnRlbnQveHVsL2RvY3VtZW50L3NyYy9uc1hV
TERvY3VtZW50LmNwcCBiL2NvbnRlbnQveHVsL2RvY3VtZW50L3NyYy9uc1hVTERvY3VtZW50LmNw
cAotLS0gYS9jb250ZW50L3h1bC9kb2N1bWVudC9zcmMvbnNYVUxEb2N1bWVudC5jcHAKKysrIGIv
Y29udGVudC94dWwvZG9jdW1lbnQvc3JjL25zWFVMRG9jdW1lbnQuY3BwCkBAIC0yNjU0LDE3ICsy
NjU0LDE3IEBAIG5zWFVMRG9jdW1lbnQ6OkxvYWRPdmVybGF5SW50ZXJuYWwobnNJVVIKIAogICAg
IC8vIENocm9tZSBkb2N1bWVudHMgYXJlIGFsbG93ZWQgdG8gbG9hZCBvdmVybGF5cyBmcm9tIGFu
eXdoZXJlLgogICAgIC8vIEluIGFsbCBvdGhlciBjYXNlcywgdGhlIG92ZXJsYXkgaXMgb25seSBh
bGxvd2VkIHRvIGxvYWQgaWYKICAgICAvLyB0aGUgbWFzdGVyIGRvY3VtZW50IGFuZCBwcm90b3R5
cGUgZG9jdW1lbnQgaGF2ZSB0aGUgc2FtZSBvcmlnaW4uCiAKICAgICBib29sIGRvY3VtZW50SXND
aHJvbWUgPSBJc0Nocm9tZVVSSShtRG9jdW1lbnRVUkkpOwogICAgIGlmICghZG9jdW1lbnRJc0No
cm9tZSkgewogICAgICAgICAvLyBNYWtlIHN1cmUgd2UncmUgYWxsb3dlZCB0byBsb2FkIHRoaXMg
b3ZlcmxheS4KLSAgICAgICAgcnYgPSBOb2RlUHJpbmNpcGFsKCktPkNoZWNrTWF5TG9hZChhVVJJ
LCB0cnVlKTsKKyAgICAgICAgcnYgPSBOb2RlUHJpbmNpcGFsKCktPkNoZWNrTWF5TG9hZChhVVJJ
LCB0cnVlLCBmYWxzZSk7CiAgICAgICAgIGlmIChOU19GQUlMRUQocnYpKSB7CiAgICAgICAgICAg
ICAqYUZhaWx1cmVGcm9tQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gcnY7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICAvLyBMb29rIGluIHRoZSBwcm90b3R5cGUgY2FjaGUgZm9y
IHRoZSBwcm90b3R5cGUgZG9jdW1lbnQgd2l0aAogICAgIC8vIHRoZSBzcGVjaWZpZWQgb3Zlcmxh
eSBVUkkuIE9ubHkgdXNlIHRoZSBjYWNoZSBpZiB0aGUgY29udGFpbmluZwpkaWZmIC0tZ2l0IGEv
Y29udGVudC94dWwvdGVtcGxhdGVzL3NyYy9uc1hVTFRlbXBsYXRlQnVpbGRlci5jcHAgYi9jb250
ZW50L3h1bC90ZW1wbGF0ZXMvc3JjL25zWFVMVGVtcGxhdGVCdWlsZGVyLmNwcAotLS0gYS9jb250
ZW50L3h1bC90ZW1wbGF0ZXMvc3JjL25zWFVMVGVtcGxhdGVCdWlsZGVyLmNwcAorKysgYi9jb250
ZW50L3h1bC90ZW1wbGF0ZXMvc3JjL25zWFVMVGVtcGxhdGVCdWlsZGVyLmNwcApAQCAtMTMyMywx
NyArMTMyMywxNyBAQCBuc1hVTFRlbXBsYXRlQnVpbGRlcjo6TG9hZERhdGFTb3VyY2VVcmxzCiAK
ICAgICAgICAgbnNDT01QdHI8bnNJVVJJPiB1cmk7CiAgICAgICAgIHJ2ID0gTlNfTmV3VVJJKGdl
dHRlcl9BZGRSZWZzKHVyaSksIHVyaVN0cik7CiAgICAgICAgIGlmIChOU19GQUlMRUQocnYpIHx8
ICF1cmkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gTmVja28gd2lsbCBiYXJmIGlmIG91ciBV
UkkgaXMgd2VpcmQKIAogICAgICAgICAvLyBkb24ndCBhZGQgdGhlIHVyaSB0byB0aGUgbGlzdCBp
ZiB0aGUgZG9jdW1lbnQgaXMgbm90IGFsbG93ZWQgdG8KICAgICAgICAgLy8gbG9hZCBpdAotICAg
ICAgICBpZiAoIWlzVHJ1c3RlZCAmJiBOU19GQUlMRUQoZG9jUHJpbmNpcGFsLT5DaGVja01heUxv
YWQodXJpLCB0cnVlKSkpCisgICAgICAgIGlmICghaXNUcnVzdGVkICYmIE5TX0ZBSUxFRChkb2NQ
cmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIHRydWUsIGZhbHNlKSkpCiAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgdXJpTGlzdC0+QXBwZW5kRWxlbWVudCh1cmksIGZhbHNlKTsKICAg
ICB9CiAKICAgICBuc0NPTVB0cjxuc0lET01Ob2RlPiByb290Tm9kZSA9IGRvX1F1ZXJ5SW50ZXJm
YWNlKG1Sb290KTsKICAgICBydiA9IG1RdWVyeVByb2Nlc3Nvci0+R2V0RGF0YXNvdXJjZSh1cmlM
aXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3ROb2RlLApk
aWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcCBiL2RvY3NoZWxsL2Jhc2Uv
bnNEb2NTaGVsbC5jcHAKLS0tIGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAorKysgYi9k
b2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCkBAIC0xMDAwMiwxNyArMTAwMDIsMTcgQEAgbnNE
b2NTaGVsbDo6QWRkU3RhdGUobnNJVmFyaWFudCAqYURhdGEsIAogCiAgICAgICAgICAgICBpZiAo
IWRvY1NjcmlwdE9iaikgewogICAgICAgICAgICAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VD
VVJJVFlfRVJSOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lQcmlu
Y2lwYWw+IHByaW5jaXBhbCA9IGRvY1NjcmlwdE9iai0+R2V0UHJpbmNpcGFsKCk7CiAKICAgICAg
ICAgICAgIGlmICghcHJpbmNpcGFsIHx8Ci0gICAgICAgICAgICAgICAgTlNfRkFJTEVEKHByaW5j
aXBhbC0+Q2hlY2tNYXlMb2FkKG5ld1VSSSwgdHJ1ZSkpKSB7CisgICAgICAgICAgICAgICAgTlNf
RkFJTEVEKHByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld1VSSSwgdHJ1ZSwgZmFsc2UpKSkgewog
CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobUN1cnJlbnRVUkkpIHsKICAgICAg
ICAgICAgIG1DdXJyZW50VVJJLT5FcXVhbHMobmV3VVJJLCAmZXF1YWxVUklzKTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvZG9tL3dvcmtlcnMvU2NyaXB0TG9hZGVyLmNwcCBiL2RvbS93b3JrZXJz
L1NjcmlwdExvYWRlci5jcHAKLS0tIGEvZG9tL3dvcmtlcnMvU2NyaXB0TG9hZGVyLmNwcAorKysg
Yi9kb20vd29ya2Vycy9TY3JpcHRMb2FkZXIuY3BwCkBAIC0yOTYsMjEgKzI5NiwyMiBAQCBwdWJs
aWM6CiAgICAgICAvLyBJZiB0aGlzIHNjcmlwdCBsb2FkZXIgaXMgYmVpbmcgdXNlZCB0byBtYWtl
IGEgbmV3IHdvcmtlciB0aGVuIHdlIG5lZWQKICAgICAgIC8vIHRvIGRvIGEgc2FtZS1vcmlnaW4g
Y2hlY2suIE90aGVyd2lzZSB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBsb2FkIHdpdGggdGhlCiAgICAg
ICAvLyBzZWN1cml0eSBtYW5hZ2VyLgogICAgICAgaWYgKG1Jc1dvcmtlclNjcmlwdCkgewogICAg
ICAgICBuc0NTdHJpbmcgc2NoZW1lOwogICAgICAgICBydiA9IHVyaS0+R2V0U2NoZW1lKHNjaGVt
ZSk7CiAgICAgICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKLSAgICAgICAgLy8gV2Ug
ZXhlbXB0IGRhdGEgVVJMcyBmcm9tIHRoZSBzYW1lIG9yaWdpbiBjaGVjay4KLSAgICAgICAgaWYg
KCFzY2hlbWUuRXF1YWxzTGl0ZXJhbCgiZGF0YSIpKSB7Ci0gICAgICAgICAgcnYgPSBwcmluY2lw
YWwtPkNoZWNrTWF5TG9hZCh1cmksIGZhbHNlKTsKLSAgICAgICAgICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwotICAgICAgICB9CisgICAgICAgIC8vIFdlIHBhc3MgdHJ1ZSBhcyB0aGUgM3Jk
IGFyZ3VtZW50IHRvIGNoZWNrTWF5TG9hZCBoZXJlLgorICAgICAgICAvLyBUaGlzIGFsbG93cyB3
b3JrZXJzIGluIHNhbmRib3hlZCBkb2N1bWVudHMgdG8gbG9hZCBkYXRhIFVSTHMKKyAgICAgICAg
Ly8gKGFuZCBvdGhlciBVUkxzIHRoYXQgaW5oZXJpdCB0aGVpciBwcmluY2lwYWwgZnJvbSB0aGVp
cgorICAgICAgICAvLyBjcmVhdG9yLikKKyAgICAgICAgcnYgPSBwcmluY2lwYWwtPkNoZWNrTWF5
TG9hZCh1cmksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2
KTsKICAgICAgIH0KICAgICAgIGVsc2UgewogICAgICAgICBydiA9IHNlY01hbi0+Q2hlY2tMb2Fk
VVJJV2l0aFByaW5jaXBhbChwcmluY2lwYWwsIHVyaSwgMCk7CiAgICAgICAgIE5TX0VOU1VSRV9T
VUNDRVNTKHJ2LCBydik7CiAgICAgICB9CiAKICAgICAgIC8vIFdlIG5lZWQgdG8ga25vdyB3aGlj
aCBpbmRleCB3ZSdyZSBvbiBpbiBPblN0cmVhbUNvbXBsZXRlIHNvIHdlIGtub3cKICAgICAgIC8v
IHdoZXJlIHRvIHB1dCB0aGUgcmVzdWx0LgpAQCAtNDgzLDE5ICs0ODQsMTkgQEAgcHVibGljOgog
ICAgICAgICAgIHJldHVybiBOU19FUlJPUl9ET01fQkFEX1VSSTsKICAgICAgICAgfQogICAgICAg
fQogICAgICAgZWxzZSAgewogICAgICAgICBuc0NTdHJpbmcgc2NoZW1lOwogICAgICAgICBydiA9
IGZpbmFsVVJJLT5HZXRTY2hlbWUoc2NoZW1lKTsKICAgICAgICAgTlNfRU5TVVJFX1NVQ0NFU1Mo
cnYsIHJ2KTsKIAotICAgICAgICAvLyBXZSBleGVtcHQgZGF0YSB1cmxzIGFnYWluLgotICAgICAg
ICBpZiAoIXNjaGVtZS5FcXVhbHNMaXRlcmFsKCJkYXRhIikgJiYKLSAgICAgICAgICAgIE5TX0ZB
SUxFRChsb2FkUHJpbmNpcGFsLT5DaGVja01heUxvYWQoZmluYWxVUkksIGZhbHNlKSkpIHsKKyAg
ICAgICAgLy8gV2UgZXhlbXB0IGRhdGEgdXJscyBhbmQgb3RoZXIgVVJJJ3MgdGhhdCBpbmhlcml0
IHRoZWlyCisgICAgICAgIC8vIHByaW5jaXBhbCBhZ2Fpbi4KKyAgICAgICAgaWYgKE5TX0ZBSUxF
RChsb2FkUHJpbmNpcGFsLT5DaGVja01heUxvYWQoZmluYWxVUkksIGZhbHNlLCB0cnVlKSkpIHsK
ICAgICAgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX0JBRF9VUkk7CiAgICAgICAgIH0KICAgICAg
IH0KIAogICAgICAgbVdvcmtlclByaXZhdGUtPlNldFByaW5jaXBhbChjaGFubmVsUHJpbmNpcGFs
KTsKICAgICB9CiAKICAgICByZXR1cm4gTlNfT0s7CmRpZmYgLS1naXQgYS9sYXlvdXQvc3R5bGUv
TG9hZGVyLmNwcCBiL2xheW91dC9zdHlsZS9Mb2FkZXIuY3BwCi0tLSBhL2xheW91dC9zdHlsZS9M
b2FkZXIuY3BwCisrKyBiL2xheW91dC9zdHlsZS9Mb2FkZXIuY3BwCkBAIC0xNTQxLDE3ICsxNTQx
LDE3IEBAIExvYWRlcjo6TG9hZFNoZWV0KFNoZWV0TG9hZERhdGEqIGFMb2FkRGEKICAgaWYgKGFM
b2FkRGF0YS0+bUxvYWRlclByaW5jaXBhbCkgewogICAgIGJvb2wgaW5oZXJpdDsKICAgICBydiA9
IE5TX1VSSUNoYWluSGFzRmxhZ3MoYUxvYWREYXRhLT5tVVJJLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lQcm90b2NvbEhhbmRsZXI6OlVSSV9JTkhFUklUU19TRUNVUklUWV9DT05U
RVhULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5oZXJpdCk7CiAgICAgaWYgKChO
U19TVUNDRUVERUQocnYpICYmIGluaGVyaXQpIHx8CiAgICAgICAgIChuc0NvbnRlbnRVdGlsczo6
VVJJSXNMb2NhbEZpbGUoYUxvYWREYXRhLT5tVVJJKSAmJgogICAgICAgICAgTlNfU1VDQ0VFREVE
KGFMb2FkRGF0YS0+bUxvYWRlclByaW5jaXBhbC0+Ci0gICAgICAgICAgICAgICAgICAgICAgQ2hl
Y2tNYXlMb2FkKGFMb2FkRGF0YS0+bVVSSSwgZmFsc2UpKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICBDaGVja01heUxvYWQoYUxvYWREYXRhLT5tVVJJLCBmYWxzZSwgZmFsc2UpKSkpIHsKICAg
ICAgIGNoYW5uZWwtPlNldE93bmVyKGFMb2FkRGF0YS0+bUxvYWRlclByaW5jaXBhbCk7CiAgICAg
fQogICB9CiAKICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBob2xkIG9uIHRvIHRoZSBzdHJlYW0gbG9h
ZGVyLiAgVGhlIG93bmVyc2hpcAogICAvLyBtb2RlbCBpczogTmVja28gb3ducyB0aGUgc3RyZWFt
IGxvYWRlciwgd2hpY2ggb3ducyB0aGUgbG9hZCBkYXRhLAogICAvLyB3aGljaCBvd25zIHVzCiAg
IG5zQ09NUHRyPG5zSVVuaWNoYXJTdHJlYW1Mb2FkZXI+IHN0cmVhbUxvYWRlcjsKZGlmZiAtLWdp
dCBhL3JkZi9iYXNlL3NyYy9uc1JERlhNTERhdGFTb3VyY2UuY3BwIGIvcmRmL2Jhc2Uvc3JjL25z
UkRGWE1MRGF0YVNvdXJjZS5jcHAKLS0tIGEvcmRmL2Jhc2Uvc3JjL25zUkRGWE1MRGF0YVNvdXJj
ZS5jcHAKKysrIGIvcmRmL2Jhc2Uvc3JjL25zUkRGWE1MRGF0YVNvdXJjZS5jcHAKQEAgLTg4Miwx
OSArODgyLDE5IEBAIFJERlhNTERhdGFTb3VyY2VJbXBsOjpBc3luY09uQ2hhbm5lbFJlZGkKIAog
ICAgIG5zQ09NUHRyPG5zSVVSST4gbmV3VVJJOwogICAgIGFOZXdDaGFubmVsLT5HZXRVUkkoZ2V0
dGVyX0FkZFJlZnMobmV3VVJJKSk7CiAgICAgbnNDT01QdHI8bnNJVVJJPiBuZXdPcmlnaW5hbFVS
STsKICAgICBhTmV3Q2hhbm5lbC0+R2V0T3JpZ2luYWxVUkkoZ2V0dGVyX0FkZFJlZnMobmV3T3Jp
Z2luYWxVUkkpKTsKIAogICAgIE5TX0VOU1VSRV9TVEFURShvbGRQcmluY2lwYWwgJiYgbmV3VVJJ
ICYmIG5ld09yaWdpbmFsVVJJKTsKIAotICAgIHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVja01heUxv
YWQobmV3VVJJLCBmYWxzZSk7CisgICAgcnYgPSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChu
ZXdVUkksIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKE5TX1NVQ0NFRURFRChydikgJiYgbmV3T3Jp
Z2luYWxVUkkgIT0gbmV3VVJJKSB7Ci0gICAgICAgIHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVja01h
eUxvYWQobmV3T3JpZ2luYWxVUkksIGZhbHNlKTsKKyAgICAgICAgcnYgPSBvbGRQcmluY2lwYWwt
PkNoZWNrTWF5TG9hZChuZXdPcmlnaW5hbFVSSSwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiAKICAg
ICBpZiAoTlNfRkFJTEVEKHJ2KSkKICAgICAgICAgcmV0dXJuIHJ2OwogCiAgICAgY2ItPk9uUmVk
aXJlY3RWZXJpZnlDYWxsYmFjayhOU19PSyk7CiAgICAgcmV0dXJuIE5TX09LOwogfQo=
</data>
<flag name="review"
          id="538834"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>649005</attachid>
            <date>2012-08-04 09:09:09 -0700</date>
            <delta_ts>2012-08-08 17:10:06 -0700</delta_ts>
            <desc>workaround for workers needing a string origin v4</desc>
            <filename>iframe_sandbox_worker_string_origin_workaround</filename>
            <type>text/plain</type>
            <size>2218</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOGJjMDI1ZjZiMjg3YWYzYjRjMTQ4OGM5MTgy
NGI0MDhjMWNmODJjNwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KYWxs
b3cgd29ya2VycyB0byBoYXZlIGEgbnVsbCBwcmluY2lwYWwKCmRpZmYgLS1naXQgYS9kb20vd29y
a2Vycy9Xb3JrZXJQcml2YXRlLmNwcCBiL2RvbS93b3JrZXJzL1dvcmtlclByaXZhdGUuY3BwCi0t
LSBhL2RvbS93b3JrZXJzL1dvcmtlclByaXZhdGUuY3BwCisrKyBiL2RvbS93b3JrZXJzL1dvcmtl
clByaXZhdGUuY3BwCkBAIC02LDE2ICs2LDE3IEBACiAKICNpbmNsdWRlICJXb3JrZXJQcml2YXRl
LmgiCiAKICNpbmNsdWRlICJtb3pJVGhpcmRQYXJ0eVV0aWwuaCIKICNpbmNsdWRlICJuc0lDbGFz
c0luZm8uaCIKICNpbmNsdWRlICJuc0lDb25zb2xlU2VydmljZS5oIgogI2luY2x1ZGUgIm5zSURP
TUZpbGUuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zSURvY1NoZWxs
LmgiCiAjaW5jbHVkZSAibnNJSlNDb250ZXh0U3RhY2suaCIKICNpbmNsdWRlICJuc0lNZW1vcnlS
ZXBvcnRlci5oIgogI2luY2x1ZGUgIm5zSVNjcmlwdEVycm9yLmgiCiAjaW5jbHVkZSAibnNJU2Ny
aXB0R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAibnNQSURPTVdpbmRvdy5oIgogI2luY2x1ZGUgIm5zSVRleHRUb1N1YlVSSS5o
IgogI2luY2x1ZGUgIm5zSVRpbWVyLmgiCkBAIC0zMSwxNiArMzIsMTcgQEAKICNpbmNsdWRlICJq
cy9NZW1vcnlNZXRyaWNzLmgiCiAjaW5jbHVkZSAibnNBbGdvcml0aG0uaCIKICNpbmNsdWRlICJu
c0NvbnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zRE9NSlNVdGlscy5oIgogI2luY2x1ZGUgIm5z
R1VJRXZlbnQuaCIKICNpbmNsdWRlICJuc0pTRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJuc0pT
VXRpbHMuaCIKICNpbmNsdWRlICJuc05ldFV0aWwuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFn
cy5oIgogI2luY2x1ZGUgIm5zVGhyZWFkVXRpbHMuaCIKICNpbmNsdWRlICJ4cGNwdWJsaWMuaCIK
ICNpbmNsdWRlICJtb3ppbGxhL0F0dHJpYnV0ZXMuaCIKIAogI2lmZGVmIEFORFJPSUQKICNpbmNs
dWRlIDxhbmRyb2lkL2xvZy5oPgogI2VuZGlmCiAKQEAgLTI1OTEsMTcgKzI1OTMsMjQgQEAgV29y
a2VyUHJpdmF0ZTo6Q3JlYXRlKEpTQ29udGV4dCogYUN4LCBKUwogICAgICAgICAgIEpTX1JlcG9y
dEVycm9yKGFDeCwgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaWYgY29kZWJhc2UgaXMgZmlsZSEiKTsK
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc0Zp
bGUpIHsKICAgICAgICAgICAvLyBYWFggRml4IHRoaXMsIG5lZWQgYSByZWFsIGRvbWFpbiBoZXJl
LgogICAgICAgICAgIGRvbWFpbiA9IGZpbGU7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Cisg
ICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHdvcmtlcnMgbmVlZGluZyBhIHN0cmluZyBkb21haW4g
LSB3aWxsIGJlIGZpeGVkCisgICAgICAgIC8vIGluIGEgZm9sbG93dXAgYWZ0ZXIgdGhpcyBsYW5k
cy4KKyAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQtPkdldFNhbmRib3hGbGFncygpICYgU0FOREJP
WEVEX09SSUdJTikgeworICAgICAgICAgIGlmIChOU19GQUlMRUQoY29kZWJhc2UtPkdldEFzY2lp
U3BlYyhkb21haW4pKSkgeworICAgICAgICAgICAgSlNfUmVwb3J0RXJyb3IoYUN4LCAiQ291bGQg
bm90IGdldCBVUkkncyBzcGVjIGZvciBzYW5kYm94ZWQgZG9jdW1lbnQhIik7CisgICAgICAgICAg
ICByZXR1cm4gbnNudWxsOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICBuc0NPTVB0cjxtb3pJVGhpcmRQYXJ0eVV0aWw+IHRoaXJkUGFydHlVdGlsID0KICAgICAgICAg
ICAgIGRvX0dldFNlcnZpY2UoVEhJUkRQQVJUWVVUSUxfQ09OVFJBQ1RJRCk7CiAgICAgICAgICAg
aWYgKCF0aGlyZFBhcnR5VXRpbCkgewogICAgICAgICAgICAgSlNfUmVwb3J0RXJyb3IoYUN4LCAi
Q291bGQgbm90IGdldCB0aGlyZCBwYXJ0eSBoZWxwZXIgc2VydmljZSEiKTsKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICAgIH0KIAogICAgICAgICAgIGlmIChOU19GQUlMRUQo
dGhpcmRQYXJ0eVV0aWwtPkdldEJhc2VEb21haW4oY29kZWJhc2UsIGRvbWFpbikpKSB7Cg==
</data>
<flag name="review"
          id="538835"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>649006</attachid>
            <date>2012-08-04 09:18:01 -0700</date>
            <delta_ts>2012-08-08 17:07:20 -0700</delta_ts>
            <desc>iframe sandbox v24</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>62118</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgMGY2NmE3ZWNmOGRlN2E3MWRkOTg0N2UyNjY0
ZTkzMjU4YThhMzhkYgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KaWZy
YW1lIHNhbmRib3gKKiAqICoKY2hhbmdlIHNhbmRib3ggdG8gRE9NU3RyaW5nCgpkaWZmIC0tZ2l0
IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50
VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTgx
MiwxNiArODEyLDI2IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIEdldCB0aGUgbG9jYWxpemVkIHN0
cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogICBz
dGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5nKFByb3BlcnRpZXNGaWxlIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFLZXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNYUElETFN0cmluZyYgYVJlc3Vs
dCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5k
IGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICAgKgor
ICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVlIG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0
ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxhZ3MKKyAgICovCisgIHN0YXRpYyBQUlVp
bnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYgYVNhbmRi
b3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVu
KSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4KICAgICogcHJvcGVydGllcyBm
aWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAgc3RhdGljIG5zcmVzdWx0IEZvcm1hdExv
Y2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhS2V5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhcioqIGFQYXJhbXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYVBhcmFtc0xlbmd0aCwK
QEAgLTE5NDUsNDIgKzE5NTUsNDQgQEAgcHVibGljOgogICAgKiBmcm9tIHRoZSBkb2N1bWVudCBp
dCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5zcmVzdWx0IFVSSUluaGVyaXRzU2VjdXJp
dHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJlc3VsdCk7CiAKICAgLyoqCiAgICAqIFNl
dCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25lciBvZiB0aGUgZ2l2ZW4gY2hhbm5lbCwg
aWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRoZSBVUkkgb2YgYUNoYW5uZWwuICBhUHJp
bmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNldFVwRm9yQWJvdXRCbGFuayBpcyB0cnVl
LCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAqIHRoZSBwcmluY2lwYWwgc2V0IHVwIG9u
IGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNldCB1cCBvbiBpdC4gSWYgYUZvcmNlT3du
ZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwgYmUgc2V0IG9uIHRoZSBjaGFubmVsLCBl
dmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVybWluZWQKKyAgICogZnJvbSB0aGUgY2hh
bm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3aGV0aGVyIHRoZSBwcmluY2lwYWwgd2Fz
IHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhlIGNoYW5uZWwuCiAgICAqLwogICBzdGF0
aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmluY2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmspOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYUZvcmNlT3duZXIgPSBmYWxzZSk7CiAK
ICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNBU3RyaW5nJiBhQmluYXJ5RGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhQXNjaWlCYXNlNjRTdHJpbmcpOwogCiAg
IHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0cmluZyYgYUFzY2lpU3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFCaW5hcnlEYXRhKTsKIAogICAvKiogSWYg
YUpTQXJyYXkgaXMgYSBKYXZhc2NyaXB0IGFycmF5LCB0aGlzIG1ldGhvZCBpdGVyYXRlcyBvdmVy
IGl0cwogICAgKiAgZWxlbWVudHMgYW5kIGFwcGVuZHMgdmFsdWVzIHRvIGFSZXRWYWwgYXMgbnNJ
QXRvbXMuCiAgICAqICBAdGhyb3cgTlNfRVJST1JfSUxMRUdBTF9WQUxVRSBpZiBhSlNBcnJheSBp
c24ndCBhIEpTIGFycmF5LgogICAgKi8gCiAgIHN0YXRpYyBuc3Jlc3VsdCBKU0FycmF5VG9BdG9t
QXJyYXkoSlNDb250ZXh0KiBhQ3gsIGNvbnN0IEpTOjpWYWx1ZSYgYUpTQXJyYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01BcnJheTxuc0lBdG9tPiYgYVJldFZh
bCk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5wdXQgZWxlbWVudCBwYXNz
ZWQgaW4gcGFyYW1ldGVyIGhhcyB0aGUgYXV0b2NvbXBsZXRlCi0gICAqIGZ1bmN0aW9ubmFsaXR5
IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZvcm0gb3duZXIuCisgICAq
IGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4gSXQgaXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZm9y
bSBvd25lci4KICAgICogTk9URTogdGhlIGNhbGxlciBoYXMgdG8gbWFrZSBzdXJlIGF1dG9jb21w
bGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVsZW1lbnQncyB0eXBlLgogICAgKgogICAg
KiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50IHRvIGNoZWNrLiBOT1RFOiBhSW5wdXQg
Y2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0aGVyIHRoZSBpbnB1dCBlbGVtZW50IGhh
cyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAgIHN0YXRpYyBib29sIElzQXV0b2NvbXBs
ZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50KiBhSW5wdXQpOwogCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmggYi9jb250ZW50L2Jhc2UvcHVibGlj
L25zSURvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0lEb2N1bWVudC5oCisr
KyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1lbnQuaApAQCAtMjYsMTYgKzI2LDE3IEBA
CiAjaW5jbHVkZSAibnNQSURPTVdpbmRvdy5oIgogI2luY2x1ZGUgIm5zU01JTEFuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJuc0lTY3JpcHRHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJuc0lEb2N1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJuc0lGcmFtZVJlcXVlc3RDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIm5zRXZlbnRTdGF0ZXMuaCIKICNpbmNsdWRlICJuc0lTdHJ1Y3R1cmVk
Q2xvbmVDb250YWluZXIuaCIKICNpbmNsdWRlICJuc0lMb2FkQ29udGV4dC5oIgorI2luY2x1ZGUg
Im5zSURvY1NoZWxsLmgiCiAKIGNsYXNzIG5zSVJlcXVlc3Q7CiBjbGFzcyBuc1BJRE9NV2luZG93
OwogY2xhc3MgbnNJU3RyZWFtTGlzdGVuZXI7CiBjbGFzcyBuc0lCRkNhY2hlRW50cnk7CiBjbGFz
cyBuc0lDb250ZW50OwogY2xhc3MgbnNQcmVzQ29udGV4dDsKIGNsYXNzIG5zSVByZXNTaGVsbDsK
QEAgLTg3LDE4ICs4OCwxOCBAQCBjbGFzcyBMb2FkZXI7CiAKIG5hbWVzcGFjZSBkb20gewogY2xh
c3MgTGluazsKIGNsYXNzIEVsZW1lbnQ7CiB9IC8vIG5hbWVzcGFjZSBkb20KIH0gLy8gbmFtZXNw
YWNlIG1vemlsbGEKIAogI2RlZmluZSBOU19JRE9DVU1FTlRfSUlEIFwKLXsgMHhiZDcwZWUwNiwg
MHgyYTdkLCAweDQyNTgsIFwKLSAgeyAweDg2LCAweDRiLCAweGJkLCAweDI4LCAweGFkLCAweDlm
LCAweGQxLCAweDQxIH0gfQoreyAweDU3ZmU0NGFlLCAweDY2NTYsIDB4NDRiOCwgXAorICB7IDB4
OGQsIDB4YzAsIDB4ZmMsIDB4YTcsIDB4NDMsIDB4MjgsIDB4YmUsIDB4ODYgfSB9CiAKIC8vIEZs
YWcgZm9yIEFkZFN0eWxlU2hlZXQoKS4KICNkZWZpbmUgTlNfU1RZTEVTSEVFVF9GUk9NX0NBVEFM
T0cgICAgICAgICAgICAgICAgKDEgPDwgMCkKIAogLy8gRW51bSBmb3IgcmVxdWVzdGluZyBhIHBh
cnRpY3VsYXIgdHlwZSBvZiBkb2N1bWVudCB3aGVuIGNyZWF0aW5nIGEgZG9jCiBlbnVtIERvY3Vt
ZW50Rmxhdm9yIHsKICAgRG9jdW1lbnRGbGF2b3JMZWdhY3lHdWVzcywgLy8gY29tcGF0IHdpdGgg
b2xkIGNvZGUgdW50aWwgbWFkZSBIVE1MNS1jb21wbGlhbnQKICAgRG9jdW1lbnRGbGF2b3JIVE1M
LCAvLyBIVE1MRG9jdW1lbnQgd2l0aCBIVE1MbmVzcyBiaXQgc2V0IHRvIHRydWUKQEAgLTQwNywx
NyArNDA4LDM1IEBAIHB1YmxpYzoKICAgICogY2FsbGVycyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBh
Y3Rpb24gYXMgbmVlZGVkIGlmIHRoZXkgd2FudCB0aGlzCiAgICAqIGNoYW5nZSB0byBhY3R1YWxs
eSBjaGFuZ2UgYW55dGhpbmcgaW1tZWRpYXRlbHkuCiAgICAqIEBzZWUgbnNCaWRpVXRpbHMuaAog
ICAgKi8KICAgdm9pZCBTZXRCaWRpT3B0aW9ucyhQUlVpbnQzMiBhQmlkaU9wdGlvbnMpCiAgIHsK
ICAgICBtQmlkaU9wdGlvbnMgPSBhQmlkaU9wdGlvbnM7CiAgIH0KLSAgCisKKyAgLyoqCisgICAq
IEdldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4KKyAgICogQHNlZSBuc1Nh
bmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIFBSVWludDMyIEdl
dFNhbmRib3hGbGFncygpIGNvbnN0CisgIHsKKyAgICByZXR1cm4gbVNhbmRib3hGbGFnczsKKyAg
fQorCisgIC8qKgorICAgKiBTZXQgdGhlIHNhbmRib3ggZmxhZ3MgZm9yIHRoaXMgZG9jdW1lbnQu
CisgICAqIEBzZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzCisgICAq
LworICB2b2lkIFNldFNhbmRib3hGbGFncyhQUlVpbnQzMiBzYW5kYm94RmxhZ3MpCisgIHsKKyAg
ICBtU2FuZGJveEZsYWdzID0gc2FuZGJveEZsYWdzOworICB9CisKICAgLyoqCiAgICAqIEFjY2Vz
cyBIVFRQIGhlYWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAg
KiBzb3VyY2VzLCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCiAgIHZpcnR1YWwgdm9pZCBH
ZXRIZWFkZXJEYXRhKG5zSUF0b20qIGFIZWFkZXJGaWVsZCwgbnNBU3RyaW5nJiBhRGF0YSkgY29u
c3QgPSAwOwogICB2aXJ0dWFsIHZvaWQgU2V0SGVhZGVyRGF0YShuc0lBdG9tKiBhaGVhZGVyRmll
bGQsIGNvbnN0IG5zQVN0cmluZyYgYURhdGEpID0gMDsKIAogICAvKioKQEAgLTQ2MCwxNiArNDc5
LDIxIEBAIHB1YmxpYzoKIAogICAvKioKICAgICogU2V0IHRoZSBwYXJlbnQgZG9jdW1lbnQgb2Yg
dGhpcyBkb2N1bWVudC4KICAgICovCiAgIHZvaWQgU2V0UGFyZW50RG9jdW1lbnQobnNJRG9jdW1l
bnQqIGFQYXJlbnQpCiAgIHsKICAgICBtUGFyZW50RG9jdW1lbnQgPSBhUGFyZW50OwogICB9Cisg
IAorICAvKioKKyAgICogQXJlIHBsdWdpbnMgYWxsb3dlZCBpbiB0aGlzIGRvY3VtZW50ID8KKyAg
ICovCisgIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxsb3dQbHVnaW5zIChib29sKiBhQWxsb3dQbHVn
aW5zKSA9IDA7CiAKICAgLyoqCiAgICAqIFNldCB0aGUgc3ViIGRvY3VtZW50IGZvciBhQ29udGVu
dCB0byBhU3ViRG9jLgogICAgKi8KICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdWJEb2N1bWVudEZv
cihFbGVtZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lEb2N1bWVudCogYVN1YkRvYykgPSAwOwogCiAgIC8qKgpAQCAtMTg2MywxNiArMTg4Nywy
MSBAQCBwcm90ZWN0ZWQ6CiAgIC8vIElmIG1Jc1N0YXRpY0RvY3VtZW50IGlzIHRydWUsIG1Pcmln
aW5hbERvY3VtZW50IHBvaW50cyB0byB0aGUgb3JpZ2luYWwKICAgLy8gZG9jdW1lbnQuCiAgIG5z
Q09NUHRyPG5zSURvY3VtZW50PiBtT3JpZ2luYWxEb2N1bWVudDsKIAogICAvLyBUaGUgYmlkaSBv
cHRpb25zIGZvciB0aGlzIGRvY3VtZW50LiAgV2hhdCB0aGlzIGJpdGZpZWxkIG1lYW5zIGlzCiAg
IC8vIGRlZmluZWQgaW4gbnNCaWRpVXRpbHMuaAogICBQUlVpbnQzMiBtQmlkaU9wdGlvbnM7CiAK
KyAgLy8gVGhlIHNhbmRib3ggZmxhZ3Mgb24gdGhlIGRvY3VtZW50LiBUaGVzZSByZWZsZWN0IHRo
ZSB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUgb2YgdGhlCisgIC8vIGFzc29jaWF0ZWQg
SUZSQU1FIG9yIENTUC1wcm90ZWN0YWJsZSBjb250ZW50LCBpZiBleGlzdGVudC4gVGhlc2UgYXJl
IHNldCBhdCBsb2FkIHRpbWUgYW5kCisgIC8vIGFyZSBpbW11dGFibGUgLSBzZWUgbnNTYW5kYm94
RmxhZ3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICBQUlVpbnQzMiBtU2FuZGJveEZsYWdz
OworCiAgIG5zQ1N0cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnNDU3RyaW5n
IG1Db250ZW50VHlwZTsKIHByb3RlY3RlZDoKIAogICAvLyBUaGUgZG9jdW1lbnQncyBzZWN1cml0
eSBpbmZvCiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VjdXJpdHlJbmZvOwogCmRpZmYgLS1n
aXQgYS9jb250ZW50L2Jhc2Uvc3JjL01ha2VmaWxlLmluIGIvY29udGVudC9iYXNlL3NyYy9NYWtl
ZmlsZS5pbgotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQv
YmFzZS9zcmMvTWFrZWZpbGUuaW4KQEAgLTM2LDE2ICszNiwxNyBAQCBFWFBPUlRTCQk9IFwKIAkJ
bnNGcmFtZU1lc3NhZ2VNYW5hZ2VyLmggXAogCQluc0F0dHJBbmRDaGlsZEFycmF5LmggXAogCQlu
c0F0dHJWYWx1ZS5oIFwKIAkJbnNDcm9zc1NpdGVMaXN0ZW5lclByb3h5LmggXAogCQluc0RPTUF0
dHJpYnV0ZU1hcC5oIFwKIAkJbnNHZW5lcmljRWxlbWVudC5oIFwKIAkJbnNNYXBwZWRBdHRyaWJ1
dGVFbGVtZW50LmggXAogCQluc1N0eWxlZEVsZW1lbnQuaCBcCisgICAgbnNTYW5kYm94RmxhZ3Mu
aCBcCiAJCSQoTlVMTCkKIAogRVhQT1JUU19OQU1FU1BBQ0VTID0gbW96aWxsYS9kb20KIAogRVhQ
T1JUU19tb3ppbGxhL2RvbSA9IFwKICAgTGluay5oIFwKICAgJChOVUxMKQogCmRpZmYgLS1naXQg
YS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMv
bnNDb250ZW50VXRpbHMuY3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMu
Y3BwCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50VXRpbHMuY3BwCkBAIC0xNTUsMTYg
KzE1NSwxNyBAQCBzdGF0aWMgTlNfREVGSU5FX0NJRChrWFRGU2VydmljZUNJRCwgTlNfCiAjaW5j
bHVkZSAibnNJQ2hhcnNldERldGVjdG9yLmgiCiAjaW5jbHVkZSAibnNJQ2hhcnNldERldGVjdGlv
bk9ic2VydmVyLmgiCiAjaW5jbHVkZSAibnNJUGxhdGZvcm1DaGFyc2V0LmgiCiAjaW5jbHVkZSAi
bnNJRWRpdG9yLmgiCiAjaW5jbHVkZSAibnNJRWRpdG9yRG9jU2hlbGwuaCIKICNpbmNsdWRlICJt
b3ppbGxhL0F0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJuc0lQYXJzZXJTZXJ2aWNlLmgiCiAjaW5j
bHVkZSAibnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9yeS5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZs
YWdzLmgiCiAKICNpbmNsdWRlICJuc1dyYXBwZXJDYWNoZUlubGluZXMuaCIKIAogZXh0ZXJuICJD
IiBpbnQgTU9aX1hNTFRyYW5zbGF0ZUVudGl0eShjb25zdCBjaGFyKiBwdHIsIGNvbnN0IGNoYXIq
IGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioq
IG5leHQsIFBSVW5pY2hhciogcmVzdWx0KTsKIGV4dGVybiAiQyIgaW50IE1PWl9YTUxDaGVja1FO
YW1lKGNvbnN0IGNoYXIqIHB0ciwgY29uc3QgY2hhciogZW5kLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG5zX2F3YXJlLCBjb25zdCBjaGFyKiogY29sb24pOwogCkBAIC04
OTYsMTYgKzg5Nyw2MyBAQCBuc0NvbnRlbnRVdGlsczo6R2V0UGFyc2VyU2VydmljZSgpCiAgICAg
aWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIHNQYXJzZXJTZXJ2aWNlID0gbnVsbHB0cjsKICAg
ICB9CiAgIH0KIAogICByZXR1cm4gc1BhcnNlclNlcnZpY2U7CiB9CiAKKy8qKgorICogQSBoZWxw
ZXIgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzYW5kYm94IGF0dHJpYnV0ZSAob2YgYW4gPGlmcmFt
ZT4gb3IKKyAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2Yg
ZmxhZ3MgdXNlZCBpbnRlcm5hbGx5LgorICoKKyAqIEBwYXJhbSBhQXR0cmlidXRlICAgIHRoZSB2
YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1dGUKKyAqIEByZXR1cm4gICAgICAgICAgICAgIHRo
ZSBzZXQgb2YgZmxhZ3MKKyAqLworUFJVaW50MzIKK25zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRi
b3hBdHRyaWJ1dGVUb0ZsYWdzKGNvbnN0IG5zQVN0cmluZyYgYVNhbmRib3hBdHRyVmFsdWUpCit7
CisgIC8vIElmIHRoZXJlJ3MgYSBzYW5kYm94IGF0dHJpYnV0ZSBhdCBhbGwgKGFuZCB0aGVyZSBp
cyBpZiB0aGlzIGlzIGJlaW5nCisgIC8vIGNhbGxlZCksIHN0YXJ0IG9mZiBieSBzZXR0aW5nIGFs
bCB0aGUgcmVzdHJpY3Rpb24gZmxhZ3MuCisgIFBSVWludDMyIG91dCA9IFNBTkRCT1hFRF9OQVZJ
R0FUSU9OIHwKKyAgICAgICAgICAgICAgICAgU0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT04g
fAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURfUExVR0lOUyB8CisgICAgICAgICAgICAgICAg
IFNBTkRCT1hFRF9PUklHSU4gfAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURfRk9STVMgfAor
ICAgICAgICAgICAgICAgICBTQU5EQk9YRURfU0NSSVBUUyB8CisgICAgICAgICAgICAgICAgIFNB
TkRCT1hFRF9BVVRPTUFUSUNfRkVBVFVSRVM7CisKKyAgaWYgKCFhU2FuZGJveEF0dHJWYWx1ZS5J
c0VtcHR5KCkpIHsKKyAgICAvLyBUaGUgc2VwYXJhdG9yIG9wdGlvbmFsIGZsYWcgaXMgdXNlZCBi
ZWNhdXNlIHRoZSBIVE1MNSBzcGVjIHNheXMgYW55CisgICAgLy8gd2hpdGVzcGFjZSBpcyBvayBh
cyBhIHNlcGFyYXRvciwgd2hpY2ggaXMgd2hhdCB0aGlzIGRvZXMuCisgICAgSFRNTFNwbGl0T25T
cGFjZXNUb2tlbml6ZXIgdG9rZW5pemVyKGFTYW5kYm94QXR0clZhbHVlLCAnICcsCisgICAgICBu
c0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXJUZW1wbGF0ZTxuc0NvbnRlbnRVdGlsczo6SXNIVE1MV2hp
dGVzcGFjZT46OlNFUEFSQVRPUl9PUFRJT05BTCk7CisKKyAgICB3aGlsZSAodG9rZW5pemVyLmhh
c01vcmVUb2tlbnMoKSkgeworICAgICAgbnNEZXBlbmRlbnRTdWJzdHJpbmcgdG9rZW4gPSB0b2tl
bml6ZXIubmV4dFRva2VuKCk7CisKKyAgICAgIGlmICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRl
cmFsKCJhbGxvdy1zYW1lLW9yaWdpbiIpKSB7CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX09S
SUdJTjsKKyAgICAgIH0gZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxs
b3ctZm9ybXMiKSkgeworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9GT1JNUzsKKyAgICAgIH0g
ZWxzZSBpZiAodG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2NyaXB0cyIpKSB7
CisgICAgICAgIC8vIGFsbG93LXNjcmlwdHMgcmVtb3ZlcyBib3RoIFNBTkRCT1hFRF9TQ1JJUFRT
IGFuZAorICAgICAgICAvLyBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTLgorICAgICAgICBv
dXQgJj0gflNBTkRCT1hFRF9TQ1JJUFRTOworICAgICAgICBvdXQgJj0gflNBTkRCT1hFRF9BVVRP
TUFUSUNfRkVBVFVSRVM7CisgICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xp
dGVyYWwoImFsbG93LXRvcC1uYXZpZ2F0aW9uIikpIHsKKyAgICAgICAgb3V0ICY9IH5TQU5EQk9Y
RURfVE9QTEVWRUxfTkFWSUdBVElPTjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4g
b3V0OworfQorCiAjaWZkZWYgTU9aX1hURgogbnNJWFRGU2VydmljZSoKIG5zQ29udGVudFV0aWxz
OjpHZXRYVEZTZXJ2aWNlKCkKIHsKICAgaWYgKCFzWFRGU2VydmljZSkgewogICAgIG5zcmVzdWx0
IHJ2ID0gQ2FsbEdldFNlcnZpY2Uoa1hURlNlcnZpY2VDSUQsICZzWFRGU2VydmljZSk7CiAgICAg
aWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIHNYVEZTZXJ2aWNlID0gbnVsbHB0cjsKQEAgLTY1
ODUsMTcgKzY2MzMsMTggQEAgbnNDb250ZW50VXRpbHM6OlVSSUluaGVyaXRzU2VjdXJpdHlDb250
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVzdWx0KTsKIH0KIAogLy8gc3RhdGlj
CiBib29sCiBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIobnNJUHJpbmNpcGFsKiBh
TG9hZGluZ1ByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD
aGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lV
UkkqIGFVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhU2V0VXBG
b3JBYm91dEJsYW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYVNl
dFVwRm9yQWJvdXRCbGFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFGb3JjZU93bmVyKQogewogICAvLwogICAvLyBTZXQgdGhlIG93bmVyIG9mIHRoZSBjaGFubmVs
LCBidXQgb25seSBmb3IgY2hhbm5lbHMgdGhhdCBjYW4ndAogICAvLyBwcm92aWRlIHRoZWlyIG93
biBzZWN1cml0eSBjb250ZXh0LgogICAvLwogICAvLyBYWFg6IEl0IHNlZW1zIHdyb25nIHRoYXQg
dGhlIG93bmVyIGlzIGlnbm9yZWQgLSBldmVuIGlmIG9uZSBpcwogICAvLyAgICAgIHN1cHBsaWVk
KSB1bmxlc3MgdGhlIFVSSSBpcyBqYXZhc2NyaXB0IG9yIGRhdGEgb3IgYWJvdXQ6YmxhbmsuCiAg
IC8vIFhYWDogSWYgdGhpcyBpcyBldmVyIGNoYW5nZWQsIGNoZWNrIGFsbCBjYWxsZXJzIGZvciB3
aGF0IG93bmVycwpAQCAtNjYwMywyMyArNjY1MiwzNSBAQCBuc0NvbnRlbnRVdGlsczo6U2V0VXBD
aGFubmVsT3duZXIobnNJUHJpCiAgIC8vICAgICAgY29tbWVudHMgaW4gbnNEb2NTaGVsbDo6TG9h
ZFVSSSB3aGVyZSB3ZSBmYWxsIGJhY2sgb24KICAgLy8gICAgICBpbmhlcml0aW5nIHRoZSBvd25l
ciBpZiBjYWxsZWQgZnJvbSBjaHJvbWUuICBUaGF0IHdvdWxkIGJlCiAgIC8vICAgICAgdmVyeSB3
cm9uZyBpZiB0aGlzIGNvZGUgY2hhbmdlZCBhbnl0aGluZyBidXQgY2hhbm5lbHMgdGhhdAogICAv
LyAgICAgIGNhbid0IHByb3ZpZGUgdGhlaXIgb3duIHNlY3VyaXR5IGNvbnRleHQhCiAgIC8vCiAg
IC8vICAgICAgKEN1cnJlbnRseSBjaHJvbWUgVVJJcyBzZXQgdGhlIG93bmVyIHdoZW4gdGhleSBh
cmUgY3JlYXRlZCEKICAgLy8gICAgICBTbyBzZXR0aW5nIGEgTlVMTCBvd25lciB3b3VsZCBiZSBi
YWQhKQogICAvLworICAvLyBJZiBhRm9yY2VPd25lciBpcyB0cnVlLCB0aGUgb3duZXIgd2lsbCBi
ZSBzZXQsIGV2ZW4gZm9yIGEgY2hhbm5lbCB0aGF0CisgIC8vIGNhbiBwcm92aWRlIGl0cyBvd24g
c2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSFRNTDUgSUZSQU1FCisgIC8v
IHNhbmRib3ggYXR0cmlidXRlLCBzbyB3ZSBjYW4gZm9yY2UgdGhlIGNoYW5uZWwgKGFuZCBpdHMg
ZG9jdW1lbnQpIHRvCisgIC8vIGV4cGxpY2l0bHkgaGF2ZSBhIG51bGwgcHJpbmNpcGFsLgogICBi
b29sIGluaGVyaXQ7CiAgIC8vIFdlIGV4cGVjdCBVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dCB0
byByZXR1cm4gc3VjY2VzcyBmb3IgYW4KICAgLy8gYWJvdXQ6YmxhbmsgVVJJLCBzbyBkb24ndCBj
YWxsIE5TX0lzQWJvdXRCbGFuaygpIGlmIHRoaXMgY2FsbCBmYWlscy4KICAgLy8gVGhpcyBjb25k
aXRpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIG9uZSBpbiBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQg
d2hlcmUKICAgLy8gd2UncmUgY2hlY2tpbmcgZm9yIHRoaW5ncyB0aGF0IHdpbGwgdXNlIHRoZSBv
d25lci4KLSAgaWYgKE5TX1NVQ0NFRURFRChVUklJbmhlcml0c1NlY3VyaXR5Q29udGV4dChhVVJJ
LCAmaW5oZXJpdCkpICYmCi0gICAgICAoaW5oZXJpdCB8fCAoYVNldFVwRm9yQWJvdXRCbGFuayAm
JiBOU19Jc0Fib3V0QmxhbmsoYVVSSSkpKSkgeworICBpZiAoYUZvcmNlT3duZXIgfHwgKChOU19T
VUNDRUVERUQoVVJJSW5oZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgor
ICAgICAgKGluaGVyaXQgfHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5r
KGFVUkkpKSkpKSkgeworI2lmZGVmIERFQlVHCisgICAgLy8gQXNzZXJ0IHRoYXQgYUZvcmNlT3du
ZXIgaXMgb25seSBzZXQgZm9yIG51bGwgcHJpbmNpcGFscworICAgIGlmIChhRm9yY2VPd25lcikg
eworICAgICAgbnNDT01QdHI8bnNJVVJJPiBvd25lclVSSTsKKyAgICAgIG5zcmVzdWx0IHJ2ID0g
YUxvYWRpbmdQcmluY2lwYWwtPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhvd25lclVSSSkpOworICAg
ICAgTU9aX0FTU0VSVChOU19TVUNDRUVERUQocnYpICYmIFNjaGVtZUlzKG93bmVyVVJJLCBOU19O
VUxMUFJJTkNJUEFMX1NDSEVNRSkpOworICAgIH0KKyNlbmRpZgogICAgIGFDaGFubmVsLT5TZXRP
d25lcihhTG9hZGluZ1ByaW5jaXBhbCk7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLwog
ICAvLyBmaWxlOiB1cmkgc3BlY2lhbC1jYXNpbmcKICAgLy8KICAgLy8gSWYgdGhpcyBpcyBhIGZp
bGU6IGxvYWQgb3BlbmVkIGZyb20gYW5vdGhlciBmaWxlOiB0aGVuIGl0IG1heSBuZWVkCmRpZmYg
LS1naXQgYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwIGIvY29udGVudC9iYXNlL3Ny
Yy9uc0RvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCisr
KyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKQEAgLTE2MiwxNiArMTYyLDE3IEBA
CiAjaW5jbHVkZSAibW96aWxsYS9kb20vTGluay5oIgogI2luY2x1ZGUgIm5zWFVMQXBwQVBJLmgi
CiAjaW5jbHVkZSAibnNET01Ub3VjaEV2ZW50LmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZl
cmVuY2VzLmgiCiAKICNpbmNsdWRlICJpbWdJTG9hZGVyLmgiCiAjaW5jbHVkZSAibnNXcmFwcGVy
Q2FjaGVJbmxpbmVzLmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiB0eXBlZGVm
IG5zVEFycmF5PExpbmsqPiBMaW5rQXJyYXk7CiAKIC8vIFJlZmVyZW5jZSB0byB0aGUgZG9jdW1l
bnQgd2hpY2ggcmVxdWVzdGVkIERPTSBmdWxsLXNjcmVlbiBtb2RlLgogbnNXZWFrUHRyIG5zRG9j
dW1lbnQ6OnNGdWxsU2NyZWVuRG9jID0gbnVsbHB0cjsKQEAgLTI0MDEsMTYgKzI0MDIsMjUgQEAg
bnNEb2N1bWVudDo6U3RhcnREb2N1bWVudExvYWQoY29uc3QgY2hhcgogICAgIEZpbmRDaGFySW5S
ZWFkYWJsZSgnOycsIHNlbWljb2xvbiwgZW5kKTsKICAgICBTZXRDb250ZW50VHlwZUludGVybmFs
KFN1YnN0cmluZyhzdGFydCwgc2VtaWNvbG9uKSk7CiAgIH0KIAogICBSZXRyaWV2ZVJlbGV2YW50
SGVhZGVycyhhQ2hhbm5lbCk7CiAKICAgbUNoYW5uZWwgPSBhQ2hhbm5lbDsKIAorICAvLyBJZiB0
aGlzIGRvY3VtZW50IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRvY3NoZWxsLCBjb3B5IGl0cyBzYW5k
Ym94IGZsYWdzCisgIC8vIHRvIHRoZSBkb2N1bWVudC4gVGhlc2UgYXJlIGltbXV0YWJsZSBhZnRl
ciBiZWluZyBzZXQgaGVyZS4KKyAgbnNDT01QdHI8bnNJRG9jU2hlbGw+IGRvY1NoZWxsID0gZG9f
UXVlcnlJbnRlcmZhY2UoYUNvbnRhaW5lcik7CisKKyAgaWYgKGRvY1NoZWxsKSB7CisgICAgbnNy
ZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2FuZGJveEZsYWdzKCZtU2FuZGJveEZsYWdzKTsKKyAg
ICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworICB9CisKICAgbnNyZXN1bHQgcnYgPSBJbml0
Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgcmV0dXJuIE5TX09LOwog
fQogCiBuc3Jlc3VsdAogbnNEb2N1bWVudDo6SW5pdENTUCgpCkBAIC0yNzA5LDE2ICsyNzE5LDM0
IEBAIG5zRG9jdW1lbnQ6OlNldENvbnRlbnRUeXBlKGNvbnN0IG5zQVN0cmkKIHsKICAgTlNfQVNT
RVJUSU9OKEdldENvbnRlbnRUeXBlSW50ZXJuYWwoKS5Jc0VtcHR5KCkgfHwKICAgICAgICAgICAg
ICAgIEdldENvbnRlbnRUeXBlSW50ZXJuYWwoKS5FcXVhbHMoTlNfQ29udmVydFVURjE2dG9VVEY4
KGFDb250ZW50VHlwZSkpLAogICAgICAgICAgICAgICAgIkRvIHlvdSByZWFsbHkgd2FudCB0byBj
aGFuZ2UgdGhlIGNvbnRlbnQtdHlwZT8iKTsKIAogICBTZXRDb250ZW50VHlwZUludGVybmFsKE5T
X0NvbnZlcnRVVEYxNnRvVVRGOChhQ29udGVudFR5cGUpKTsKIH0KIAorbnNyZXN1bHQKK25zRG9j
dW1lbnQ6OkdldEFsbG93UGx1Z2lucyhib29sICogYUFsbG93UGx1Z2lucykKK3sKKyAgLy8gRmly
c3QsIHdlIGFzayBvdXIgZG9jc2hlbGwgaWYgaXQgYWxsb3dzIHBsdWdpbnMuCisgIG5zQ09NUHRy
PG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1ZXJ5UmVmZXJlbnQobURvY3VtZW50Q29udGFp
bmVyKTsKKworICBpZiAoZG9jU2hlbGwpIHsKKyAgICBkb2NTaGVsbC0+R2V0QWxsb3dQbHVnaW5z
KGFBbGxvd1BsdWdpbnMpOworICAgICAgCisgICAgLy8gSWYgdGhlIGRvY3NoZWxsIGFsbG93cyBw
bHVnaW5zLCB3ZSBjaGVjayB3aGV0aGVyCisgICAgLy8gd2UgYXJlIHNhbmRib3hlZCBhbmQgcGx1
Z2lucyBzaG91bGQgbm90IGJlIGFsbG93ZWQuCisgICAgaWYgKCphQWxsb3dQbHVnaW5zKQorICAg
ICAgKmFBbGxvd1BsdWdpbnMgPSAhKG1TYW5kYm94RmxhZ3MgJiBTQU5EQk9YRURfUExVR0lOUyk7
CisgIH0KKworICByZXR1cm4gTlNfT0s7Cit9CisKIC8qIFJldHVybiB0cnVlIGlmIHRoZSBkb2N1
bWVudCBpcyBpbiB0aGUgZm9jdXNlZCB0b3AtbGV2ZWwgd2luZG93LCBhbmQgaXMgYW4KICAqIGFu
Y2VzdG9yIG9mIHRoZSBmb2N1c2VkIERPTVdpbmRvdy4gKi8KIE5TX0lNRVRIT0RJTVAKIG5zRG9j
dW1lbnQ6Okhhc0ZvY3VzKGJvb2wqIGFSZXN1bHQpCiB7CiAgICphUmVzdWx0ID0gZmFsc2U7CiAK
ICAgbnNJRm9jdXNNYW5hZ2VyKiBmbSA9IG5zRm9jdXNNYW5hZ2VyOjpHZXRGb2N1c01hbmFnZXIo
KTsKQEAgLTYzOTUsMTYgKzY0MjMsMjIgQEAgbnNEb2N1bWVudDo6R2V0WE1MRGVjbGFyYXRpb24o
bnNBU3RyaW5nJgogICAgICAgYVN0YW5kYWxvbmUuQXNzaWduTGl0ZXJhbCgibm8iKTsKICAgICB9
CiAgIH0KIH0KIAogYm9vbAogbnNEb2N1bWVudDo6SXNTY3JpcHRFbmFibGVkKCkKIHsKKyAgLy8g
SWYgdGhpcyBkb2N1bWVudCBpcyBzYW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctc2NyaXB0cycKKyAg
Ly8gc2NyaXB0IGlzIG5vdCBlbmFibGVkCisgIGlmIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVE
X1NDUklQVFMpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKwogICBuc0NPTVB0cjxuc0lTY3Jp
cHRTZWN1cml0eU1hbmFnZXI+IHNtKGRvX0dldFNlcnZpY2UoTlNfU0NSSVBUU0VDVVJJVFlNQU5B
R0VSX0NPTlRSQUNUSUQpKTsKICAgTlNfRU5TVVJFX1RSVUUoc20sIGZhbHNlKTsKIAogICBuc0lT
Y3JpcHRHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdldFNjcmlwdEdsb2JhbE9iamVjdCgp
OwogICBOU19FTlNVUkVfVFJVRShnbG9iYWxPYmplY3QsIGZhbHNlKTsKIAogICBuc0lTY3JpcHRD
b250ZXh0ICpzY3JpcHRDb250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5HZXRDb250ZXh0KCk7CiAgIE5T
X0VOU1VSRV9UUlVFKHNjcmlwdENvbnRleHQsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
YmFzZS9zcmMvbnNEb2N1bWVudC5oIGIvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmgKLS0t
IGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9u
c0RvY3VtZW50LmgKQEAgLTU2MiwxNiArNTYyLDE4IEBAIHB1YmxpYzoKICAgICogc2hhcmVkIGFt
b25nIG11bHRpcGxlIHByZXNlbnRhdGlvbiBzaGVsbCdzKS4KICAgICovCiAgIHZpcnR1YWwgbnNy
ZXN1bHQgQ3JlYXRlU2hlbGwobnNQcmVzQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJVmlld01hbmFnZXIqIGFWaWV3TWFuYWdlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc1N0eWxlU2V0KiBhU3R5bGVTZXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsKiogYUluc3RhbmNlUHRyUmVzdWx0KTsK
ICAgdmlydHVhbCB2b2lkIERlbGV0ZVNoZWxsKCk7CiAKKyAgdmlydHVhbCBuc3Jlc3VsdCBHZXRB
bGxvd1BsdWdpbnMoYm9vbCogYUFsbG93UGx1Z2lucyk7CisKICAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRTdWJEb2N1bWVudEZvcihFbGVtZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lEb2N1bWVudCogYVN1YkRvYyk7CiAgIHZpcnR1YWwgbnNJRG9j
dW1lbnQqIEdldFN1YkRvY3VtZW50Rm9yKG5zSUNvbnRlbnQqIGFDb250ZW50KSBjb25zdDsKICAg
dmlydHVhbCBFbGVtZW50KiBGaW5kQ29udGVudEZvclN1YkRvY3VtZW50KG5zSURvY3VtZW50ICph
RG9jdW1lbnQpIGNvbnN0OwogICB2aXJ0dWFsIEVsZW1lbnQqIEdldFJvb3RFbGVtZW50SW50ZXJu
YWwoKSBjb25zdDsKIAogICAvKioKICAgICogR2V0IHRoZSBzdHlsZSBzaGVldHMgb3duZWQgYnkg
dGhpcyBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRl
ci5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIuY3BwCi0tLSBhL2NvbnRlbnQv
YmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0ZyYW1l
TG9hZGVyLmNwcApAQCAtNzksMTYgKzc5LDE5IEBACiAjaW5jbHVkZSAibW96aWxsYS9HdWFyZE9i
amVjdHMuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAibW96
aWxsYS91bnVzZWQuaCIKICNpbmNsdWRlICJtb3ppbGxhL2RvbS9FbGVtZW50LmgiCiAjaW5jbHVk
ZSAibW96aWxsYS9sYXlvdXQvUmVuZGVyRnJhbWVQYXJlbnQuaCIKICNpbmNsdWRlICJuc0lBcHBz
U2VydmljZS5oIgogCiAjaW5jbHVkZSAianNhcGkuaCIKKyNpbmNsdWRlICJuc0hUTUxJRnJhbWVF
bGVtZW50LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIKKwogI2luY2x1ZGUgIm1vemls
bGEvZG9tL1N0cnVjdHVyZWRDbG9uZVV0aWxzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxh
OwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxh
OjpsYXllcnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5b3V0OwogdHlwZWRlZiBGcmFt
ZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7CiAKQEAgLTQ0MywxNiArNDQ2LDQwIEBAIG5zRnJhbWVM
b2FkZXI6OlJlYWxseVN0YXJ0TG9hZGluZ0ludGVybmEKICAgLy8gSnVzdCB0byBiZSBzYWZlLCBy
ZWNoZWNrIHVyaS4KICAgcnYgPSBDaGVja1VSSUxvYWQobVVSSVRvTG9hZCk7CiAgIE5TX0VOU1VS
RV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbnNDT01QdHI8bnNJRG9jU2hlbGxMb2FkSW5mbz4gbG9h
ZEluZm87CiAgIG1Eb2NTaGVsbC0+Q3JlYXRlTG9hZEluZm8oZ2V0dGVyX0FkZFJlZnMobG9hZElu
Zm8pKTsKICAgTlNfRU5TVVJFX1RSVUUobG9hZEluZm8sIE5TX0VSUk9SX0ZBSUxVUkUpOwogCisg
IC8vIElzIHRoaXMgYW4gPGlmcmFtZT4gd2l0aCBhIHNhbmRib3ggYXR0cmlidXRlIG9yIGEgcGFy
ZW50IHdoaWNoIGlzCisgIC8vIHNhbmRib3hlZCA/CisgIG5zSFRNTElGcmFtZUVsZW1lbnQqIGlm
cmFtZSA9CisgICAgbnNIVE1MSUZyYW1lRWxlbWVudDo6RnJvbUNvbnRlbnQobU93bmVyQ29udGVu
dCk7CisKKyAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICBpZiAoaWZyYW1lKSB7Cisg
ICAgc2FuZGJveEZsYWdzID0gaWZyYW1lLT5HZXRTYW5kYm94RmxhZ3MoKTsKKworICAgIFBSVWlu
dDMyIHBhcmVudFNhbmRib3hGbGFncyA9IGlmcmFtZS0+T3duZXJEb2MoKS0+R2V0U2FuZGJveEZs
YWdzKCk7CisKKyAgICBpZiAoc2FuZGJveEZsYWdzIHx8IHBhcmVudFNhbmRib3hGbGFncykgewor
ICAgICAgLy8gVGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0cmljdGlvbnMsIG5vdCByZW1vdmUg
dGhlbS4KKyAgICAgIHNhbmRib3hGbGFncyB8PSBwYXJlbnRTYW5kYm94RmxhZ3M7CisKKyAgICAg
IG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFncyk7CisgICAgfQorICB9CisK
KyAgLy8gSWYgdGhpcyBpcyBhbiA8aWZyYW1lPiBhbmQgaXQncyBzYW5kYm94ZWQgd2l0aCByZXNw
ZWN0IHRvIG9yaWdpbgorICAvLyB3ZSB3aWxsIHNldCBpdCB1cCB3aXRoIGEgbnVsbCBwcmluY2lw
YWwgbGF0ZXIgaW4gbnNEb2NTaGVsbDo6RG9VUklMb2FkLgorICAvLyBXZSBkbyBpdCB0aGVyZSB0
byBjb3JyZWN0bHkgc2FuZGJveCBjb250ZW50IHRoYXQgd2FzIGxvYWRlZCBpbnRvCisgIC8vIHRo
ZSBpZnJhbWUgdmlhIG90aGVyIG1ldGhvZHMgdGhhbiB0aGUgc3JjIGF0dHJpYnV0ZS4KICAgLy8g
V2UnbGwgdXNlIG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRoZSBkb2N1bWVudCBsb2FkZWQg
aW5zaWRlIHVzLiAgVGhpcwogICAvLyBpcyB2ZXJ5IGltcG9ydGFudDsgbmVlZGVkIHRvIHByZXZl
bnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbgogICAvLyBzdWJmcmFtZXMhCiAg
IGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2RlUHJpbmNpcGFsKCkpOwogCiAg
IG5zQ09NUHRyPG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93bmVyQ29udGVudC0+Tm9kZVBy
aW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJyZXIpKTsKICAgTlNfRU5TVVJF
X1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21M
aXN0LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCi0tLSBhL2NvbnRlbnQvYmFz
ZS9zcmMvbnNHa0F0b21MaXN0LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3Qu
aApAQCAtNjUsMTcgKzY1LDIxIEBAIEdLX0FUT00oYWN0dWF0ZSwgImFjdHVhdGUiKQogR0tfQVRP
TShhZGRyZXNzLCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVyLCAiYWZ0ZXIiKQogR0tfQVRPTShh
ZnRlcl9lbmQsICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRlcl9zdGFydCwgImFmdGVyX3N0YXJ0
IikKIEdLX0FUT00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9NKGFsaW5rLCAiYWxpbmsiKQogR0tf
QVRPTShhbGwsICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50cywgImFsbG93ZXZlbnRzIikKK0dL
X0FUT00oYWxsb3dmb3JtcywgImFsbG93LWZvcm1zIikKIEdLX0FUT00oYWxsb3duZWdhdGl2ZWFz
c2VydGlvbnMsICJhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucyIpCitHS19BVE9NKGFsbG93c2FtZW9y
aWdpbiwgImFsbG93LXNhbWUtb3JpZ2luIikKK0dLX0FUT00oYWxsb3dzY3JpcHRzLCAiYWxsb3ct
c2NyaXB0cyIpCitHS19BVE9NKGFsbG93dG9wbmF2aWdhdGlvbiwgImFsbG93LXRvcC1uYXZpZ2F0
aW9uIikKIEdLX0FUT00oYWxsb3d1bnRydXN0ZWQsICJhbGxvd3VudHJ1c3RlZCIpCiBHS19BVE9N
KGFsdCwgImFsdCIpCiBHS19BVE9NKGFsdGVybmF0ZSwgImFsdGVybmF0ZSIpCiBHS19BVE9NKGFs
d2F5cywgImFsd2F5cyIpCiBHS19BVE9NKGFuY2VzdG9yLCAiYW5jZXN0b3IiKQogR0tfQVRPTShh
bmNlc3Rvck9yU2VsZiwgImFuY2VzdG9yLW9yLXNlbGYiKQogR0tfQVRPTShfYW5kLCAiYW5kIikK
IEdLX0FUT00oYW55LCAiYW55IikKQEAgLTg0MSwxNiArODQ1LDE3IEBAIEdLX0FUT00ocm93c3Bh
biwgInJvd3NwYW4iKQogR0tfQVRPTShycCwgInJwIikKIEdLX0FUT00ocnQsICJydCIpCiBHS19B
VE9NKHJ0bCwgInJ0bCIpCiBHS19BVE9NKHJ1YnksICJydWJ5IikKIEdLX0FUT00ocnVsZSwgInJ1
bGUiKQogR0tfQVRPTShydWxlcywgInJ1bGVzIikKIEdLX0FUT00ocywgInMiKQogR0tfQVRPTShz
YW1wLCAic2FtcCIpCitHS19BVE9NKHNhbmRib3gsICJzYW5kYm94IikKIEdLX0FUT00oc2JhdHRy
LCAic2JhdHRyIikKIEdLX0FUT00oc2NhbGUsICJzY2FsZSIpCiBHS19BVE9NKHNjYW4sICJzY2Fu
IikKIEdLX0FUT00oc2NoZW1lLCAic2NoZW1lIikKIEdLX0FUT00oc2NvcGUsICJzY29wZSIpCiBH
S19BVE9NKHNjb3BlZCwgInNjb3BlZCIpCiBHS19BVE9NKHNjcmVlbiwgInNjcmVlbiIpCiBHS19B
VE9NKHNjcmVlblgsICJzY3JlZW5YIikKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNT
YW5kYm94RmxhZ3MuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3MuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTYW5k
Ym94RmxhZ3MuaApAQCAtMCwwICsxLDU4IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6
IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovDQorLyog
VGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3pp
bGxhIFB1YmxpYw0KKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2Fz
IG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwNCisgKiBZb3UgY2FuIG9idGFpbiBvbmUg
YXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLw0KKw0KKy8qDQorICogQ29uc3RhbnQg
ZmxhZ3MgdGhhdCBkZXNjcmliZSBob3cgYSBkb2N1bWVudCBpcyBzYW5kYm94ZWQgYWNjb3JkaW5n
IHRvIHRoZQ0KKyAqIEhUTUw1IHNwZWMuDQorICovDQorDQorI2lmbmRlZiBuc1NhbmRib3hGbGFn
c19oX19fDQorI2RlZmluZSBuc1NhbmRib3hGbGFnc19oX19fDQorDQorLyoqDQorICogVGhpcyBm
bGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIGJyb3dzaW5nIGNvbnRleHRzIG90
aGVyIHRoYW4NCisgKiB0aGUgc2FuZGJveGVkIGJyb3dzaW5nIGNvbnRleHQgaXRzZWxmIChvciBi
cm93c2luZyBjb250ZXh0cyBmdXJ0aGVyDQorICogbmVzdGVkIGluc2lkZSBpdCksIGFuZCB0aGUg
dG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBT
QU5EQk9YRURfTkFWSUdBVElPTiAgPSAweDE7DQorDQorLyoqDQorICogVGhpcyBmbGFnIHByZXZl
bnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWlyIHRvcC1sZXZlbCBicm93c2luZw0KKyAq
IGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfVE9QTEVWRUxf
TkFWSUdBVElPTiA9IDB4MjsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgcHJldmVudHMgY29udGVu
dCBmcm9tIGluc3RhbnRpYXRpbmcgcGx1Z2lucywgd2hldGhlciB1c2luZyB0aGUNCisgKiBlbWJl
ZCBlbGVtZW50LCB0aGUgb2JqZWN0IGVsZW1lbnQsIHRoZSBhcHBsZXQgZWxlbWVudCwgb3IgdGhy
b3VnaA0KKyAqIG5hdmlnYXRpb24gb2YgYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dCwgdW5sZXNz
IHRob3NlIHBsdWdpbnMgY2FuIGJlDQorICogc2VjdXJlZC4NCisgKi8NCitjb25zdCB1bnNpZ25l
ZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5TID0gMHg0Ow0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBm
b3JjZXMgY29udGVudCBpbnRvIGEgdW5pcXVlIG9yaWdpbiwgdGh1cyBwcmV2ZW50aW5nIGl0IGZy
b20NCisgKiBhY2Nlc3Npbmcgb3RoZXIgY29udGVudCBmcm9tIHRoZSBzYW1lIG9yaWdpbi4NCisg
KiBUaGlzIGZsYWcgYWxzbyBwcmV2ZW50cyBzY3JpcHQgZnJvbSByZWFkaW5nIGZyb20gb3Igd3Jp
dGluZyB0byB0aGUNCisgKiBkb2N1bWVudC5jb29raWUgSURMIGF0dHJpYnV0ZSwgYW5kIGJsb2Nr
cyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FO
REJPWEVEX09SSUdJTiA9IDB4ODsNCisNCisvKioNCisgKiBUaGlzIGZsYWcgYmxvY2tzIGZvcm0g
c3VibWlzc2lvbi4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9GT1JNUyA9
IDB4MTA7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBzY3JpcHQgZXhlY3V0aW9uLg0K
KyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1NDUklQVFMgPSAweDIwOw0KKw0K
Ky8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3MgZmVhdHVyZXMgdGhhdCB0cmlnZ2VyIGF1dG9tYXRp
Y2FsbHksIHN1Y2ggYXMNCisgKiBhdXRvbWF0aWNhbGx5IHBsYXlpbmcgYSB2aWRlbyBvciBhdXRv
bWF0aWNhbGx5IGZvY3VzaW5nIGEgZm9ybSBjb250cm9sLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVk
IGxvbmcgU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUyA9IDB4NDA7DQorI2VuZGlmDQpkaWZm
IC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRlci5jcHAgYi9jb250ZW50L2Jh
c2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0
TG9hZGVyLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcApAQCAt
MzcsMTYgKzM3LDE3IEBACiAjaW5jbHVkZSAibnNJQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAj
aW5jbHVkZSAicHJsb2cuaCIKICNpbmNsdWRlICJuc0lDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVk
ZSAibnNDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNDUlQuaCIKICNpbmNsdWRlICJuc0Nv
bnRlbnRDcmVhdG9yRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAibnNHZW5lcmljRWxlbWVudC5oIgog
I2luY2x1ZGUgIm5zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUgIm5zU2FuZGJv
eEZsYWdzLmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL0Z1bmN0aW9uVGltZXIuaCIKICNpbmNsdWRl
ICJtb3ppbGxhL0NPUlNNb2RlLmgiCiAjaW5jbHVkZSAibW96aWxsYS9BdHRyaWJ1dGVzLmgiCiAK
ICNpZmRlZiBQUl9MT0dHSU5HCiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnQ3NwUFJMb2c7CiAj
ZW5kaWYKQEAgLTI3MywxNiArMjc0LDIxIEBAIG5zU2NyaXB0TG9hZGVyOjpTdGFydExvYWQobnNT
Y3JpcHRMb2FkUmUKICAgaWYgKCF3aW5kb3cpIHsKICAgICByZXR1cm4gTlNfRVJST1JfTlVMTF9Q
T0lOVEVSOwogICB9CiAKICAgbnNJRG9jU2hlbGwgKmRvY3NoZWxsID0gd2luZG93LT5HZXREb2NT
aGVsbCgpOwogCiAgIG5zQ09NUHRyPG5zSUludGVyZmFjZVJlcXVlc3Rvcj4gcHJvbXB0ZXIoZG9f
UXVlcnlJbnRlcmZhY2UoZG9jc2hlbGwpKTsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlzIHNh
bmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJywgYWJvcnQuCisgIGlmIChtRG9jdW1lbnQt
PkdldFNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICByZXR1cm4gTlNf
T0s7CisgIH0KKwogICAvLyBjaGVjayBmb3IgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0byBw
YXNzIGRvd24gdG8gdGhlIGNoYW5uZWwKICAgLy8gdGhhdCB3aWxsIGJlIGNyZWF0ZWQgdG8gbG9h
ZCB0aGUgc2NyaXB0CiAgIG5zQ09NUHRyPG5zSUNoYW5uZWxQb2xpY3k+IGNoYW5uZWxQb2xpY3k7
CiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3NwOwogICBydiA9IG1Eb2N1
bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0FkZFJlZnMoY3NwKSk7CiAgIE5T
X0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgIGlmIChjc3ApIHsKICAgICBjaGFubmVsUG9saWN5
ID0gZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9uc2NoYW5uZWxwb2xpY3k7MSIpOwpA
QCAtNjMwLDE2ICs2MzYsMjEgQEAgbnNTY3JpcHRMb2FkZXI6OlByb2Nlc3NTY3JpcHRFbGVtZW50
KG5zSQogICAgICAgICAiVGhlcmUgY2FuIGJlIG9ubHkgb25lIHBhcnNlci1ibG9ja2luZyBzY3Jp
cHQgYXQgYSB0aW1lIik7CiAgICAgTlNfQVNTRVJUSU9OKG1YU0xUUmVxdWVzdHMuSXNFbXB0eSgp
LAogICAgICAgICAiUGFyc2VyLWJsb2NraW5nIHNjcmlwdHMgYW5kIFhTTFQgc2NyaXB0cyBpbiB0
aGUgc2FtZSBkb2MhIik7CiAgICAgbVBhcnNlckJsb2NraW5nUmVxdWVzdCA9IHJlcXVlc3Q7CiAg
ICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLyBpbmxpbmUgc2NyaXB0CisgIC8vIElzIHRoaXMg
ZG9jdW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMnPworICBpZiAobURvY3Vt
ZW50LT5HZXRTYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJUFRTKSB7CisgICAgcmV0dXJu
IGZhbHNlOworICB9CisKICAgbnNDT01QdHI8bnNJQ29udGVudFNlY3VyaXR5UG9saWN5PiBjc3A7
CiAgIHJ2ID0gbURvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdldENzcChnZXR0ZXJfQWRkUmVm
cyhjc3ApKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIGZhbHNlKTsKIAogICBpZiAoY3NwKSB7
CiAgICAgUFJfTE9HKGdDc3BQUkxvZywgUFJfTE9HX0RFQlVHLCAoIk5ldyBTY3JpcHRMb2FkZXIg
aSAqKioqd2l0aCBDU1AqKioqIikpOwogICAgIGJvb2wgaW5saW5lT0s7CiAgICAgcnYgPSBjc3At
PkdldEFsbG93c0lubGluZVNjcmlwdCgmaW5saW5lT0spOwpkaWZmIC0tZ2l0IGEvY29udGVudC9l
dmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwIGIvY29udGVudC9ldmVudHMvc3Jj
L25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCi0tLSBhL2NvbnRlbnQvZXZlbnRzL3NyYy9uc0V2
ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcAorKysgYi9jb250ZW50L2V2ZW50cy9zcmMvbnNFdmVudExp
c3RlbmVyTWFuYWdlci5jcHAKQEAgLTQ5LDE2ICs0OSwxNyBAQAogI2luY2x1ZGUgIm5zRE9NSlNV
dGlscy5oIgogI2luY2x1ZGUgIm5zRE9NU2NyaXB0T2JqZWN0SG9sZGVyLmgiCiAjaW5jbHVkZSAi
bnNEYXRhSGFzaHRhYmxlLmgiCiAjaW5jbHVkZSAibnNDT01BcnJheS5oIgogI2luY2x1ZGUgIm5z
RXZlbnRMaXN0ZW5lclNlcnZpY2UuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKICNpbmNsdWRlICJuc0pTRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJ4cGNwdWJsaWMu
aCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxs
YTo6ZG9tOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmhhbDsKIAogI2RlZmluZSBFVkVOVF9U
WVBFX0VRVUFMUyggbHMsIHR5cGUsIHVzZXJUeXBlICkgXAogICAobHMtPm1FdmVudFR5cGUgPT0g
dHlwZSAmJiBcCiAgIChscy0+bUV2ZW50VHlwZSAhPSBOU19VU0VSX0RFRklORURfRVZFTlQgfHwg
bHMtPm1UeXBlQXRvbSA9PSB1c2VyVHlwZSkpCiAKQEAgLTU2OSwxNiArNTcwLDIyIEBAIG5zRXZl
bnRMaXN0ZW5lck1hbmFnZXI6OkFkZFNjcmlwdEV2ZW50TGkKICAgICAvLyBsb2FkZWQgYXMgZGF0
YS4KICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAogICBuc3Jlc3VsdCBydiA9IE5TX09LOwogICAv
LyByZXR1cm4gZWFybHkgcHJldmVudGluZyB0aGUgZXZlbnQgbGlzdGVuZXIgZnJvbSBiZWluZyBh
ZGRlZAogICAvLyAnZG9jJyBpcyBmZXRjaGVkIGFib3ZlCiAgIGlmIChkb2MpIHsKKyAgICAvLyBE
b24ndCBhbGxvdyBhZGRpbmcgYW4gZXZlbnQgbGlzdGVuZXIgaWYgdGhlIGRvY3VtZW50IGlzIHNh
bmRib3hlZAorICAgIC8vIHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMnLgorICAgIGlmIChkb2MtPkdl
dFNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICAgIHJldHVybiBOU19F
UlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5zQ09NUHRyPG5zSUNvbnRlbnRT
ZWN1cml0eVBvbGljeT4gY3NwOwogICAgIHJ2ID0gZG9jLT5Ob2RlUHJpbmNpcGFsKCktPkdldENz
cChnZXR0ZXJfQWRkUmVmcyhjc3ApKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwog
CiAgICAgaWYgKGNzcCkgewogICAgICAgYm9vbCBpbmxpbmVPSzsKICAgICAgIHJ2ID0gY3NwLT5H
ZXRBbGxvd3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsKICAgICAgIE5TX0VOU1VSRV9TVUNDRVNT
KHJ2LCBydik7CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9y
bUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTEZvcm1FbGVtZW50
LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3Bw
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxGb3JtRWxlbWVudC5jcHAKQEAg
LTQ4LDE2ICs0OCwxNyBAQAogCiAjaW5jbHVkZSAibW96QXV0b0RvY1VwZGF0ZS5oIgogI2luY2x1
ZGUgIm5zSUhUTUxDb2xsZWN0aW9uLmgiCiAKICNpbmNsdWRlICJuc0lDb25zdHJhaW50VmFsaWRh
dGlvbi5oIgogCiAjaW5jbHVkZSAibnNJRE9NSFRNTEJ1dHRvbkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJkb21iaW5kaW5ncy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBtb3ppbGxhOjpkb207CiAKIHN0YXRpYyBjb25zdCBpbnQgTlNfRk9STV9DT05UUk9M
X0xJU1RfSEFTSFRBQkxFX1NJWkUgPSAxNjsKIAogc3RhdGljIGNvbnN0IFBSVWludDggTlNfRk9S
TV9BVVRPQ09NUExFVEVfT04gID0gMTsKIHN0YXRpYyBjb25zdCBQUlVpbnQ4IE5TX0ZPUk1fQVVU
T0NPTVBMRVRFX09GRiA9IDA7CiAKQEAgLTY0NSwxOCArNjQ2LDE5IEBAIG5zSFRNTEZvcm1FbGVt
ZW50OjpEb1N1Ym1pdE9yUmVzZXQobnNFdmUKICAgLy8gSkJLIERvbid0IGdldCBmb3JtIGZyYW1l
cyBhbnltb3JlIC0gYnVnIDM0Mjk3CiAKICAgLy8gU3VibWl0IG9yIFJlc2V0IHRoZSBmb3JtCiAg
IGlmIChOU19GT1JNX1JFU0VUID09IGFNZXNzYWdlKSB7CiAgICAgcmV0dXJuIERvUmVzZXQoKTsK
ICAgfQogCiAgIGlmIChOU19GT1JNX1NVQk1JVCA9PSBhTWVzc2FnZSkgewotICAgIC8vIERvbid0
IHN1Ym1pdCBpZiB3ZSdyZSBub3QgaW4gYSBkb2N1bWVudC4KLSAgICBpZiAoIWRvYykgeworICAg
IC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdyZSBub3QgaW4gYSBkb2N1bWVudCBvciBpZiB3ZSdyZSBp
bgorICAgIC8vIGEgc2FuZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1Ym1pdCBpcyBkaXNhYmxlZC4K
KyAgICBpZiAoIWRvYyB8fCAoZG9jLT5HZXRTYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9GT1JN
UykpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAgICB9CiAgICAgcmV0dXJuIERvU3VibWl0KGFF
dmVudCk7CiAgIH0KIAogICBNT1pfQVNTRVJUKGZhbHNlKTsKICAgcmV0dXJuIE5TX09LOwogfQpA
QCAtMTY2MiwxNiArMTY2NCwyNCBAQCBuc0hUTUxGb3JtRWxlbWVudDo6Q2hlY2tWYWxpZEZvcm1T
dWJtaXNzCiAgICAqIFRPRE86IHRoZSBjaGVjayBmb3Igb2JzZXJ2ZXIgc2hvdWxkIGJlIHJlbW92
ZWQgbGF0ZXIgd2hlbiBIVE1MNSBGb3JtcyB3aWxsCiAgICAqIGJlIHNwcmVhZCBlbm91Z2ggYW5k
IGF1dGhvcnMgd2lsbCBhc3N1bWUgZm9ybXMgY2FuJ3QgYmUgc3VibWl0dGVkIHdoZW4KICAgICog
aW52YWxpZC4gU2VlIGJ1ZyA1ODc2NzEuCiAgICAqLwogCiAgIE5TX0FTU0VSVElPTighSGFzQXR0
cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpub3ZhbGlkYXRlKSwKICAgICAgICAgICAg
ICAgICJXZSBzaG91bGRuJ3QgYmUgdGhlcmUgaWYgbm92YWxpZGF0ZSBpcyBzZXQhIik7CiAKKyAg
Ly8gRG9uJ3QgZG8gdmFsaWRhdGlvbiBmb3IgYSBmb3JtIHN1Ym1pdCBkb25lIGJ5IGEgc2FuZGJv
eGVkIGRvY3VtZW50IHRoYXQKKyAgLy8gZG9lc24ndCBoYXZlICdhbGxvdy1mb3JtcycsIHRoZSBz
dWJtaXQgd2lsbCBoYXZlIGJlZW4gYmxvY2tlZCBhbmQgdGhlCisgIC8vIEhUTUw1IHNwZWMgc2F5
cyB3ZSBzaG91bGRuJ3QgdmFsaWRhdGUgaW4gdGhpcyBjYXNlLgorICBuc0lEb2N1bWVudCogZG9j
ID0gR2V0Q3VycmVudERvYygpOworICBpZiAoZG9jICYmIChkb2MtPkdldFNhbmRib3hGbGFncygp
ICYgU0FOREJPWEVEX0ZPUk1TKSkgeworICAgIHJldHVybiB0cnVlOworICB9CisKICAgLy8gV2hl
biAuc3VibWl0KCkgaXMgY2FsbGVkIGFFdmVudCA9IG51bGxwdHIgc28gd2UgY2FuIHJlbHkgb24g
dGhhdCB0byBrbm93IGlmCiAgIC8vIHdlIGhhdmUgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRo
ZSBmb3JtLgogICBuc0NPTVB0cjxuc0lPYnNlcnZlclNlcnZpY2U+IHNlcnZpY2UgPQogICAgIG1v
emlsbGE6OnNlcnZpY2VzOjpHZXRPYnNlcnZlclNlcnZpY2UoKTsKICAgaWYgKCFzZXJ2aWNlKSB7
CiAgICAgTlNfV0FSTklORygiTm8gb2JzZXJ2ZXIgc2VydmljZSBhdmFpbGFibGUhIik7CiAgICAg
cmV0dXJuIHRydWU7CiAgIH0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxJRnJhbWVFbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJ
RnJhbWVFbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZy
YW1lRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFt
ZUVsZW1lbnQuY3BwCkBAIC0yLDE3ICsyLDE2IEBACiAvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0g
aXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgKiBMaWNlbnNl
LCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0
aGlzCiAgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01Q
TC8yLjAvLiAqLwogCiAjaW5jbHVkZSAibW96aWxsYS9VdGlsLmgiCiAKICNpbmNsdWRlICJuc0hU
TUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NU1ZHRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJuc0drQXRvbXMuaCIKICNpbmNsdWRlICJuc01hcHBlZEF0dHJpYnV0ZXMuaCIKICNpbmNs
dWRlICJuc0RPTUVycm9yLmgiCiAjaW5jbHVkZSAibnNSdWxlRGF0YS5oIgogI2luY2x1ZGUgIm5z
U3R5bGVDb25zdHMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3Bh
Y2UgbW96aWxsYTo6ZG9tOwogCkBAIC01MSwxNiArNTAsMTcgQEAgTlNfSU1QTF9TVFJJTkdfQVRU
Uihuc0hUTUxJRnJhbWVFbGVtZW50LAogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxJRnJhbWVFbGVt
ZW50LCBMb25nRGVzYywgbG9uZ2Rlc2MpCiBOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFt
ZUVsZW1lbnQsIE1hcmdpbkhlaWdodCwgbWFyZ2luaGVpZ2h0KQogTlNfSU1QTF9TVFJJTkdfQVRU
Uihuc0hUTUxJRnJhbWVFbGVtZW50LCBNYXJnaW5XaWR0aCwgbWFyZ2lud2lkdGgpCiBOU19JTVBM
X1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE5hbWUsIG5hbWUpCiBOU19JTVBMX1NU
UklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNjcm9sbGluZywgc2Nyb2xsaW5nKQogTlNf
SU1QTF9VUklfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBTcmMsIHNyYykKIE5TX0lNUExfU1RS
SU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgV2lkdGgsIHdpZHRoKQogTlNfSU1QTF9CT09M
X0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTW96QWxsb3dGdWxsU2NyZWVuLCBtb3phbGxvd2Z1
bGxzY3JlZW4pCitOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNhbmRi
b3gsIHNhbmRib3gpCiAKIHZvaWQKIG5zSFRNTElGcmFtZUVsZW1lbnQ6OkdldEl0ZW1WYWx1ZVRl
eHQobnNBU3RyaW5nJiBhVmFsdWUpCiB7CiAgIEdldFNyYyhhVmFsdWUpOwogfQogCiB2b2lkCkBA
IC0yMDAsOCArMjAwLDM3IEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6OklzQXR0cmlidXRlTWFwcGVk
KGMKIAogCiBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jCiBuc0hUTUxJRnJhbWVFbGVtZW50OjpH
ZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdAogewogICByZXR1cm4gJk1hcEF0dHJp
YnV0ZXNJbnRvUnVsZTsKIH0KIAorbnNyZXN1bHQKK25zSFRNTElGcmFtZUVsZW1lbnQ6OkFmdGVy
U2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBdHRyVmFsdWUqIGFWYWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3RpZnkpCit7CisgIGlmIChhTmFt
ZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5hbWVTcGFjZUlEID09IGtOYW1lU3BhY2VJRF9O
b25lKSB7CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgc2FuZGJveCBhdHRyaWJ1
dGUsIGFuZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwKKyAgICAvLyBzZXQgaXRzIHNhbmRib3ggZmxh
Z3MgYXBwcm9wcmlhdGVseS4KKyAgICBpZiAobUZyYW1lTG9hZGVyKSB7CisgICAgICBuc0NPTVB0
cjxuc0lEb2NTaGVsbD4gZG9jc2hlbGwgPSBtRnJhbWVMb2FkZXItPkdldEV4aXN0aW5nRG9jU2hl
bGwoKTsKKworICAgICAgaWYgKGRvY3NoZWxsKSB7CisgICAgICAgIFBSVWludDMyIG5ld0ZsYWdz
ID0gMDsKKyAgICAgICAgLy8gSWYgYSBOVUxMIGFWYWx1ZSBpcyBwYXNzZWQgaW4sIHdlIHdhbnQg
dG8gY2xlYXIgdGhlIHNhbmRib3ggZmxhZ3MKKyAgICAgICAgLy8gd2hpY2ggd2Ugd2lsbCBkbyBi
eSBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAgaWYgKGFWYWx1ZSkgeworICAgICAgICAgIG5z
QXV0b1N0cmluZyBzdHJWYWx1ZTsKKyAgICAgICAgICBhVmFsdWUtPlRvU3RyaW5nKHN0clZhbHVl
KTsKKyAgICAgICAgICBuZXdGbGFncyA9IG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRy
aWJ1dGVUb0ZsYWdzKAorICAgICAgICAgICAgc3RyVmFsdWUpOworICAgICAgICB9ICAgCisgICAg
ICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3RmxhZ3MpOworICAgICAgfQorICAgIH0K
KyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6OkFmdGVyU2V0QXR0cihhTmFtZVNw
YWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFOb3RpZnkpOworCit9CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVu
dC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
SFRNTElGcmFtZUVsZW1lbnQuaAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1M
SUZyYW1lRWxlbWVudC5oCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJh
bWVFbGVtZW50LmgKQEAgLTEsMTYgKzEsMTcgQEAKIC8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0
aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KIC8q
IFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96
aWxsYSBQdWJsaWMKICAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2Fz
IG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBh
dCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCiAKICNpbmNsdWRlICJuc0dlbmVyaWNI
VE1MRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NSFRNTElGcmFtZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIm5zQ29udGVudFV0
aWxzLmgiCiAKIGNsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRN
TEZyYW1lRWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lET01I
VE1MSUZyYW1lRWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBuc0lE
T01HZXRTVkdEb2N1bWVudAogewogcHVibGljOgogICBuc0hUTUxJRnJhbWVFbGVtZW50KGFscmVh
ZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAg
ICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJzZXIgPSBtb3ppbGxhOjpkb206Ok5P
VF9GUk9NX1BBUlNFUik7CkBAIC00MSwxMiArNDIsMzYgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3VsdCk7CiAgIE5TX0lNRVRIT0Rf
KGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20qIGFBdHRyaWJ1dGUpIGNvbnN0
OwogICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMgR2V0QXR0cmlidXRlTWFwcGlu
Z0Z1bmN0aW9uKCkgY29uc3Q7CiAKICAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5m
byAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7CiAgIHZpcnR1YWwgbnNYUEND
bGFzc0luZm8qIEdldENsYXNzSW5mbygpOwogICB2aXJ0dWFsIG5zSURPTU5vZGUqIEFzRE9NTm9k
ZSgpIHsgcmV0dXJuIHRoaXM7IH0KIAorICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVyU2V0QXR0cihQ
UkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zQXR0clZhbHVlKiBhVmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYU5vdGlmeSk7CisKKyAgUFJVaW50MzIgR2V0U2FuZGJveEZs
YWdzKCkKKyAgeworICAgIG5zQXV0b1N0cmluZyBzYW5kYm94QXR0cjsKKworICAgIGlmIChHZXRB
dHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6OnNhbmRib3gsIHNhbmRib3hBdHRyKSkg
eworICAgICAgcmV0dXJuIG5zQ29udGVudFV0aWxzOjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0Zs
YWdzKHNhbmRib3hBdHRyKTsKKyAgICB9CisKKyAgICAvLyBObyBzYW5kYm94IGF0dHJpYnV0ZSwg
bm8gc2FuZGJveCBmbGFncy4KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHN0YXRpYyBuc0hUTUxJ
RnJhbWVFbGVtZW50KiBGcm9tQ29udGVudChuc0lDb250ZW50ICphQ29udGVudCkKKyAgeworICAg
IGlmIChhQ29udGVudC0+SXNIVE1MKG5zR2tBdG9tczo6aWZyYW1lKSkgeworICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PG5zSFRNTElGcmFtZUVsZW1lbnQqPihhQ29udGVudCk7CisgICAgfQorICAg
IHJldHVybiBuc251bGw7CisgIH0KKwogcHJvdGVjdGVkOgogICB2aXJ0dWFsIHZvaWQgR2V0SXRl
bVZhbHVlVGV4dChuc0FTdHJpbmcmIHRleHQpOwogICB2aXJ0dWFsIHZvaWQgU2V0SXRlbVZhbHVl
VGV4dChjb25zdCBuc0FTdHJpbmcmIHRleHQpOwogfTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwIGIvY29udGVudC9odG1sL2RvY3VtZW50
L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9u
c0hUTUxEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxE
b2N1bWVudC5jcHAKQEAgLTk4LDE2ICs5OCwxNyBAQAogI2luY2x1ZGUgInBycHJmLmgiCiAjaW5j
bHVkZSAibW96aWxsYS9kb20vRWxlbWVudC5oIgogI2luY2x1ZGUgIm1vemlsbGEvUHJlZmVyZW5j
ZXMuaCIKICNpbmNsdWRlICJuc01pbWVUeXBlcy5oIgogI2luY2x1ZGUgIm5zSVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJuc0h0bWw1VHJlZU9wRXhlY3V0b3IuaCIKICNpbmNsdWRlICJuc0h0bWw1UGFy
c2VyLmgiCiAjaW5jbHVkZSAibnNJRE9NSlNXaW5kb3cuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hG
bGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVzaW5nIG5hbWVzcGFjZSBtb3pp
bGxhOjpkb207CiAKICNkZWZpbmUgTlNfTUFYX0RPQ1VNRU5UX1dSSVRFX0RFUFRIIDIwCiAKICNp
bmNsdWRlICJwcm1lbS5oIgogI2luY2x1ZGUgInBydGltZS5oIgpAQCAtMTIxNywxNiArMTIxOCwy
MiBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiB7CiAgIGFDb29r
aWUuVHJ1bmNhdGUoKTsgLy8gY2xlYXIgY3VycmVudCBjb29raWUgaW4gY2FzZSBzZXJ2aWNlIGZh
aWxzOwogICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNvb2tpZSBpc24ndCBhbiBlcnJvciBj
b25kaXRpb24uCiAKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNzKSB7CiAgICAgcmV0dXJuIE5T
X09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2FuZGJveGVkIG9yaWdpbiBmbGFn
IGlzIHNldCwgYWNjZXNzIHRvIHJlYWQgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBp
ZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICByZXR1cm4gTlNfRVJS
T1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgfQorICAKICAgLy8gbm90IGhhdmluZyBhIGNvb2tpZSBz
ZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNvb2tpZVNlcnZpY2U+IHNlcnZp
Y2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09OVFJBQ1RJRCk7CiAgIGlmIChz
ZXJ2aWNlKSB7CiAgICAgLy8gR2V0IGEgVVJJIGZyb20gdGhlIGRvY3VtZW50IHByaW5jaXBhbC4g
V2UgdXNlIHRoZSBvcmlnaW5hbAogICAgIC8vIGNvZGViYXNlIGluIGNhc2UgdGhlIGNvZGViYXNl
IHdhcyBjaGFuZ2VkIGJ5IFNldERvbWFpbgogICAgIG5zQ09NUHRyPG5zSVVSST4gY29kZWJhc2VV
Ukk7CiAgICAgTm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMoY29kZWJhc2VV
UkkpKTsKIApAQCAtMTI0NywxNiArMTI1NCwyMiBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2ll
KG5zQVN0cmluZyYgYUNvCiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRNTERvY3VtZW50OjpTZXRDb29r
aWUoY29uc3QgbnNBU3RyaW5nJiBhQ29va2llKQogewogICBpZiAobURpc2FibGVDb29raWVBY2Nl
c3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJZiB0aGUgZG9jdW1lbnQncyBz
YW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8gd3JpdGUgY29va2llcworICAv
LyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4p
IHsKKyAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgfQorCiAgIC8vIG5v
dCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJvcgogICBuc0NPTVB0cjxuc0lD
b29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShOU19DT09LSUVTRVJWSUNFX0NP
TlRSQUNUSUQpOwogICBpZiAoc2VydmljZSAmJiBtRG9jdW1lbnRVUkkpIHsKICAgICBuc0NPTVB0
cjxuc0lQcm9tcHQ+IHByb21wdDsKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW5kb3cg
PSBHZXRXaW5kb3coKTsKICAgICBpZiAod2luZG93KSB7CiAgICAgICB3aW5kb3ctPkdldFByb21w
dGVyKGdldHRlcl9BZGRSZWZzKHByb21wdCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2RvY3NoZWxs
L2Jhc2UvbnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuY3BwCi0tLSBh
L2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1No
ZWxsLmNwcApAQCAtMTc5LDE2ICsxNzksMTcgQEAKICNpbmNsdWRlICJuc0lXZWJCcm93c2VyUHJp
bnQuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAibnNQbHVnaW5FcnJvci5oIgogI2luY2x1ZGUgIm5z
Q29udGVudFV0aWxzLmgiCiAjaW5jbHVkZSAibnNDb250ZW50RXJyb3JzLmgiCiAjaW5jbHVkZSAi
bnNJQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1ZGUgIm5zSUNvbnRlbnRTZWN1cml0eVBvbGljeS5o
IgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpbmNsdWRlICJuc1hVTEFwcEFQSS5o
IgogCiAjaW5jbHVkZSAibnNET01OYXZpZ2F0aW9uVGltaW5nLmgiCiAjaW5jbHVkZSAibnNJVGlt
ZWRDaGFubmVsLmgiCiAjaW5jbHVkZSAibW96aWxsYS9TdGFydHVwVGltZWxpbmUuaCIKICNpbmNs
dWRlICJuc0lGcmFtZU1lc3NhZ2VNYW5hZ2VyLmgiCiAKQEAgLTczMiwxNiArNzMzLDE3IEBAIG5z
RG9jU2hlbGw6Om5zRG9jU2hlbGwoKToKICAgICBtQnVzeUZsYWdzKEJVU1lfRkxBR1NfTk9ORSks
CiAgICAgbUFwcFR5cGUobnNJRG9jU2hlbGw6OkFQUF9UWVBFX1VOS05PV04pLAogICAgIG1Mb2Fk
VHlwZSgwKSwKICAgICBtTWFyZ2luV2lkdGgoLTEpLAogICAgIG1NYXJnaW5IZWlnaHQoLTEpLAog
ICAgIG1JdGVtVHlwZSh0eXBlQ29udGVudCksCiAgICAgbVByZXZpb3VzVHJhbnNJbmRleCgtMSks
CiAgICAgbUxvYWRlZFRyYW5zSW5kZXgoLTEpLAorICAgIG1TYW5kYm94RmxhZ3MoMCksCiAgICAg
bUNyZWF0ZWQoZmFsc2UpLAogICAgIG1BbGxvd1N1YmZyYW1lcyh0cnVlKSwKICAgICBtQWxsb3dQ
bHVnaW5zKHRydWUpLAogICAgIG1BbGxvd0phdmFzY3JpcHQodHJ1ZSksCiAgICAgbUFsbG93TWV0
YVJlZGlyZWN0cyh0cnVlKSwKICAgICBtQWxsb3dJbWFnZXModHJ1ZSksCiAgICAgbUFsbG93RE5T
UHJlZmV0Y2godHJ1ZSksCiAgICAgbUFsbG93V2luZG93Q29udHJvbCh0cnVlKSwKQEAgLTMwMDUs
MTYgKzMwMDcsNzMgQEAgbnNEb2NTaGVsbDo6RmluZEl0ZW1XaXRoTmFtZShjb25zdCBQUlVuaQog
ICAgICAgICAgICAgZm91bmRJdGVtID0gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChmb3VuZEl0ZW0pIHsKICAgICAgICAgICAgIC8vIFdlIHJldHVybiBmb3VuZEl0ZW0gaGVyZSBl
dmVuIGlmIGl0J3Mgbm90IGFuIGFjdGl2ZQogICAgICAgICAgICAgLy8gaXRlbSBzaW5jZSBhbGwg
dGhlIG5hbWVzIHdlJ3ZlIGRlYWx0IHdpdGggc28gZmFyIGFyZQogICAgICAgICAgICAgLy8gc3Bl
Y2lhbCBjYXNlcyB0aGF0IHdlIHdvbid0IGJvdGhlciBsb29raW5nIGZvciBmdXJ0aGVyLgogCisg
ICAgICAgICAgICAvLyBJZiBvdXIgZG9jdW1lbnQgaXMgc2FuZGJveGVkLCB3ZSBuZWVkIHRvIGRv
IHNvbWUgZXh0cmEgY2hlY2tzLgorICAgICAgICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0g
MDsKKworICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9IGRvX0dldEludGVy
ZmFjZShhT3JpZ2luYWxSZXF1ZXN0b3IpOworCisgICAgICAgICAgICBpZiAoZG9jKSB7CisgICAg
ICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5HZXRTYW5kYm94RmxhZ3MoKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncykgeworICAgICAgICAgICAg
ICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHJvb3Q7CisgICAgICAgICAgICAgICAg
R2V0U2FtZVR5cGVSb290VHJlZUl0ZW0oZ2V0dGVyX0FkZFJlZnMocm9vdCkpOworCisgICAgICAg
ICAgICAgICAgLy8gSXMgdGhlIGZvdW5kIGl0ZW0gbm90IGEgdG9wIGxldmVsIGJyb3dzaW5nIGNv
bnRleHQgYW5kIG5vdCBvdXJzZWxmID8KKyAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NT
aGVsbFRyZWVJdGVtPiBzZWxmQXNJdGVtID0gc3RhdGljX2Nhc3Q8bnNJRG9jU2hlbGxUcmVlSXRl
bSAqPih0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRJdGVtICE9IHJvb3QgJiYgZm91
bmRJdGVtICE9IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXJlIHdlIGFu
IGFuY2VzdG9yIG9mIHRoZSBmb3VuZEl0ZW0gPworICAgICAgICAgICAgICAgICAgICBib29sIGlz
QW5jZXN0b3IgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBuc0NPTVB0cjxuc0lEb2NT
aGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0ZW07CisgICAgICAgICAgICAgICAgICAgIEdldFNhbWVU
eXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudEFzSXRlbSkpOworCisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5z
Q09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBzZWxmQXNJdGVtKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNBbmNlc3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQW5jZXN0b3IpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE5vLCB3ZSBhcmUgbm90IGFuIGFuY2VzdG9yIGFuZCBvdXIgZG9jdW1lbnQg
aXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbmRib3hlZCwgd2UgY2FuJ3QgYWxsb3cg
dGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRlbSA9IG5zbnVsbDsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0IC0gaXMgaXQgYW4gYW5jZXN0b3Ig
b2Ygb3VycyA/CisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0
ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVQYXJlbnQoZ2V0dGVyX0Fk
ZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRtcCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gZm91bmRJdGVtKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhbmNlc3RvciwgYW5kIHdlIGFyZSBz
YW5kYm94ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIGFsbG93LXRv
cC1uYXZpZ2F0aW9uIGlzIHNldCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJPWEVEX1RPUExFVkVMX05BVklH
QVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJdGVtID0gbnNu
dWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRtcC0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZzKHRtcCkpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBmb3VuZEl0ZW0uc3dhcCgqX3JldHZhbCk7CiAgICAgICAgICAgICByZXR1cm4gTlNfT0s7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBLZWVwIGxvb2tpbmcKICAgICAgICAgCiAgICAg
Ly8gRmlyc3Qgd2UgY2hlY2sgb3VyIG5hbWUuCkBAIC01MDYzLDE2ICs1MTIyLDMwIEBAIG5zRG9j
U2hlbGw6OlNldElzQXBwVGFiKGJvb2wgYUlzQXBwVGFiKQogTlNfSU1FVEhPRElNUAogbnNEb2NT
aGVsbDo6R2V0SXNBcHBUYWIoYm9vbCAqYUlzQXBwVGFiKQogewogICAqYUlzQXBwVGFiID0gbUlz
QXBwVGFiOwogICByZXR1cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKK25zRG9jU2hlbGw6
OlNldFNhbmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdzKQoreworICAgIG1TYW5kYm94
RmxhZ3MgPSBhU2FuZGJveEZsYWdzOworICAgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhP
RElNUAorbnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWludDMyICAqYVNhbmRib3hGbGFn
cykKK3sKKyAgICAqYVNhbmRib3hGbGFncyA9IG1TYW5kYm94RmxhZ3M7CisgICAgcmV0dXJuIE5T
X09LOworfQorCitOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpTZXRWaXNpYmlsaXR5KGJvb2wg
YVZpc2liaWxpdHkpCiB7CiAgICAgaWYgKCFtQ29udGVudFZpZXdlcikKICAgICAgICAgcmV0dXJu
IE5TX09LOwogICAgIGlmIChhVmlzaWJpbGl0eSkgewogICAgICAgICBtQ29udGVudFZpZXdlci0+
U2hvdygpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTY2NzEsMTYgKzY3NDQsMjAgQEAgbnNEb2NT
aGVsbDo6Q3JlYXRlQWJvdXRCbGFua0NvbnRlbnRWaWV3ZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMoYmxhbmtEb2MpKTsKICAgICBpZiAoYmxhbmtE
b2MpIHsKICAgICAgIC8vIEhhY2s6IHNldCB0aGUgYmFzZSBVUkkgbWFudWFsbHksIHNpbmNlIHRo
aXMgZG9jdW1lbnQgbmV2ZXIKICAgICAgIC8vIGdvdCBSZXNldCgpIHdpdGggYSBjaGFubmVsLgog
ICAgICAgYmxhbmtEb2MtPlNldEJhc2VVUkkoYUJhc2VVUkkpOwogCiAgICAgICBibGFua0RvYy0+
U2V0Q29udGFpbmVyKHN0YXRpY19jYXN0PG5zSURvY1NoZWxsICo+KHRoaXMpKTsKIAorICAgICAg
Ly8gQ29weSBvdXIgc2FuZGJveCBmbGFncyB0byB0aGUgZG9jdW1lbnQuIFRoZXNlIGFyZSBpbW11
dGFibGUKKyAgICAgIC8vIGFmdGVyIGJlaW5nIHNldCBoZXJlLgorICAgICAgYmxhbmtEb2MtPlNl
dFNhbmRib3hGbGFncyhtU2FuZGJveEZsYWdzKTsKKwogICAgICAgLy8gY3JlYXRlIGEgY29udGVu
dCB2aWV3ZXIgZm9yIHVzIGFuZCB0aGUgbmV3IGRvY3VtZW50CiAgICAgICBkb2NGYWN0b3J5LT5D
cmVhdGVJbnN0YW5jZUZvckRvY3VtZW50KE5TX0lTVVBQT1JUU19DQVNUKG5zSURvY1NoZWxsICos
IHRoaXMpLAogICAgICAgICAgICAgICAgICAgICBibGFua0RvYywgInZpZXciLCBnZXR0ZXJfQWRk
UmVmcyh2aWV3ZXIpKTsKIAogICAgICAgLy8gaG9vayAnZW0gdXAKICAgICAgIGlmICh2aWV3ZXIp
IHsKICAgICAgICAgdmlld2VyLT5TZXRDb250YWluZXIoc3RhdGljX2Nhc3Q8bnNJQ29udGVudFZp
ZXdlckNvbnRhaW5lciAqPih0aGlzKSk7CiAgICAgICAgIEVtYmVkKHZpZXdlciwgIiIsIDApOwpA
QCAtODMxNCwxNiArODM5MSwzMiBAQCBuc0RvY1NoZWxsOjpJbnRlcm5hbExvYWQobnNJVVJJICog
YVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVlSXRlbT4gdGFyZ2V0SXRlbTsK
ICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2luZG93VGFyZ2V0LCBudWxscHRyLCB0aGlzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZzKHRhcmdldEl0ZW0pKTsKIAog
ICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gdGFyZ2V0RG9jU2hlbGwgPSBkb19RdWVyeUlu
dGVyZmFjZSh0YXJnZXRJdGVtKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNOZXdXaW5kb3cg
PSBmYWxzZTsKICAgICAgICAgaWYgKCF0YXJnZXREb2NTaGVsbCkgeworICAgICAgICAgICAgLy8g
SWYgdGhlIGRvY3NoZWxsJ3MgZG9jdW1lbnQgaXMgc2FuZGJveGVkIGFuZCB3YXMgdHJ5aW5nIHRv
CisgICAgICAgICAgICAvLyBuYXZpZ2F0ZS9sb2FkIGEgZnJhbWUgaXQgd2Fzbid0IGFsbG93ZWQg
dG8gYWNjZXNzLCB0aGUKKyAgICAgICAgICAgIC8vIEZpbmRJdGVtV2l0aE5hbWUgYWJvdmUgd2ls
bCBoYXZlIHJldHVybmVkIG51bGwgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgIC8vIGl0ZW0g
LSB3ZSBkb24ndCB3YW50IHRvIGFjdHVhbGx5IG9wZW4gYSBuZXcgd2luZG93IGluIHRoaXMgY2Fz
ZQorICAgICAgICAgICAgLy8gdGhvdWdoLiBDaGVjayBpZiB3ZSBhcmUgc2FuZGJveGVkIGFuZCBi
YWlsIG91dCBoZXJlIGlmIHNvLgorICAgICAgICAgICAgTlNfRU5TVVJFX1RSVUUobUNvbnRlbnRW
aWV3ZXIsIE5TX0VSUk9SX0ZBSUxVUkUpOworICAgICAgICAgICAgbnNJRG9jdW1lbnQqIGRvYyA9
IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICAgICAgICAgICAgUFJVaW50MzIgc2Fu
ZGJveEZsYWdzID0gMDsKKworICAgICAgICAgICAgaWYgKGRvYykgeworICAgICAgICAgICAgICAg
IHNhbmRib3hGbGFncyA9IGRvYy0+R2V0U2FuZGJveEZsYWdzKCk7CisgICAgICAgICAgICAgICAg
aWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9OQVZJR0FUSU9OKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9NV2luZG93PiB3aW4gPQogICAg
ICAgICAgICAgICAgIGRvX0dldEludGVyZmFjZShHZXRBc1N1cHBvcnRzKHRoaXMpKTsKICAgICAg
ICAgICAgIE5TX0VOU1VSRV9UUlVFKHdpbiwgTlNfRVJST1JfTk9UX0FWQUlMQUJMRSk7CiAKICAg
ICAgICAgICAgIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUoYVdpbmRvd1RhcmdldCk7CiAgICAgICAg
ICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IG5ld1dpbjsKICAgICAgICAgICAgIHJ2ID0gd2lu
LT5PcGVuKEVtcHR5U3RyaW5nKCksIC8vIFVSTCB0byBsb2FkCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lLCAgICAgICAgICAvLyB3aW5kb3cgbmFtZQpAQCAtOTEyNSwxOCArOTIxOCwz
MSBAQCBuc0RvY1NoZWxsOjpEb1VSSUxvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgfQogICAg
ICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkKICAgICAgICAgaWYgKGFSZWZlcnJl
clVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAgICAvLyBSZWZlcnJlciBpcyBjdXJy
ZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4KICAgICAgICAgICAgIGh0dHBDaGFu
bmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
bnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChkb19RdWVyeUludGVyZmFjZShh
T3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmlu
Y2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUpOworICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4g
b3duZXJQcmluY2lwYWw7CisKKyAgICAvLyBJZiB0aGUgY29udGVudCBiZWluZyBsb2FkZWQgc2hv
dWxkIGJlIHNhbmRib3hlZCB3aXRoIHJlc3BlY3QgdG8gb3JpZ2luCisgICAgLy8gd2UgbmVlZCB0
byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lwYWwgaGVyZSwgYW5kIHRoZW4gdGVsbAorICAgIC8v
IG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lciB0byBmb3JjZSBpdCB0byBiZSBzZXQg
YXMgdGhlCisgICAgLy8gY2hhbm5lbCBvd25lci4KKyAgICBpZiAobVNhbmRib3hGbGFncyAmIFNB
TkRCT1hFRF9PUklHSU4pIHsKKyAgICAgICAgb3duZXJQcmluY2lwYWwgPSBkb19DcmVhdGVJbnN0
YW5jZSgiQG1vemlsbGEub3JnL251bGxwcmluY2lwYWw7MSIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE5vdCBzYW5kYm94ZWQgLSB3ZSBhbGxvdyB0aGUgY29udGVudCB0byBhc3N1bWUgaXRz
IG5hdHVyYWwgb3duZXIuCisgICAgICAgIG93bmVyUHJpbmNpcGFsID0gZG9fUXVlcnlJbnRlcmZh
Y2UoYU93bmVyKTsKKyAgICB9CisKKyAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFubmVsT3du
ZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChtU2FuZGJveEZsYWdzICYgU0FOREJPWEVEX09SSUdJTikp
OwogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2NyaXB0Q2hhbm5lbCA9IGRvX1F1
ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAgIGlmIChzY3JpcHRDaGFubmVsKSB7CiAgICAgICAg
IC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0IGlmIHRoZSBwcmluY2lwYWxz
IG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAgICAgICAgU2V0RXhlY3V0aW9u
UG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFMKTsKICAgICB9CiAKQEAgLTEx
ODYzLDE2ICsxMTk2OSwzNCBAQCBuc0RvY1NoZWxsOjpTaG91bGRCbG9ja0xvYWRpbmdGb3JCYWNr
QnV0CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKICAgYm9vbCBjYW5Hb0ZvcndhcmQgPSBmYWxz
ZTsKICAgR2V0Q2FuR29Gb3J3YXJkKCZjYW5Hb0ZvcndhcmQpOwogICByZXR1cm4gY2FuR29Gb3J3
YXJkOwogfQogCitib29sIAorbnNEb2NTaGVsbDo6UGx1Z2luc0FsbG93ZWRJbkN1cnJlbnREb2Mo
KQoreworICBib29sIHBsdWdpbnNBbGxvd2VkID0gZmFsc2U7CisKKyAgaWYgKCFtQ29udGVudFZp
ZXdlcikgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICAKKyAgbnNJRG9jdW1lbnQqIGRvYyA9
IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICBpZiAoIWRvYykgeworICAgIHJldHVy
biBmYWxzZTsKKyAgfQorICAKKyAgZG9jLT5HZXRBbGxvd1BsdWdpbnMoJnBsdWdpbnNBbGxvd2Vk
KTsKKyAgcmV0dXJuIHBsdWdpbnNBbGxvd2VkOworfQorCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFdl
YiBTaGVsbCBTZXJ2aWNlcyBBUEkKIAogLy9UaGlzIGZ1bmN0aW9ucyBpcyBvbmx5IGNhbGxlZCB3
aGVuIGEgbmV3IGNoYXJzZXQgaXMgZGV0ZWN0ZWQgaW4gbG9hZGluZyBhIGRvY3VtZW50LiAKIC8v
SXRzIG5hbWUgc2hvdWxkIGJlIGNoYW5nZWQgdG8gIkNoYXJzZXRSZWxvYWREb2N1bWVudCIKIE5T
X0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlJlbG9hZERvY3VtZW50KGNvbnN0IGNoYXIqIGFDaGFy
c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhU291cmNlKQpkaWZmIC0t
Z2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmggYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hl
bGwuaAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAorKysgYi9kb2NzaGVsbC9iYXNl
L25zRG9jU2hlbGwuaApAQCAtNzczLDE2ICs3NzMsMTggQEAgcHJvdGVjdGVkOgogICAgIC8vIENy
ZWF0ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUgaXMgbm90IGV4cGVjdGVkIHRvIGNoYW5nZS4KICAg
ICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtSXRlbVR5cGU7CiAKICAgICAvLyBJbmRleCBp
bnRvIHRoZSBTSFRyYW5zYWN0aW9uIGxpc3QsIGluZGljYXRpbmcgdGhlIHByZXZpb3VzIGFuZCBj
dXJyZW50CiAgICAgLy8gdHJhbnNhY3Rpb24gYXQgdGhlIHRpbWUgdGhhdCB0aGlzIERvY1NoZWxs
IGJlZ2lucyB0byBsb2FkCiAgICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgbVByZXZpb3Vz
VHJhbnNJbmRleDsKICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtTG9hZGVkVHJhbnNJ
bmRleDsKIAorICAgIFBSVWludDMyICAgICAgICAgICAgICAgICAgIG1TYW5kYm94RmxhZ3M7CisK
ICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQ3JlYXRlZDsKICAgICBib29sICAgICAg
ICAgICAgICAgICAgICAgICBtQWxsb3dTdWJmcmFtZXM7CiAgICAgYm9vbCAgICAgICAgICAgICAg
ICAgICAgICAgbUFsbG93UGx1Z2luczsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBt
QWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd01l
dGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93SW1hZ2Vz
OwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd0ROU1ByZWZldGNoOwogICAg
IGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1dpbmRvd0NvbnRyb2w7CkBAIC04MTYs
MTcgKzgxOCwxNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBJbmRpY2F0ZXMgdGhhdCBhIERvY1No
ZWxsIGluIHRoaXMgImRvY3NoZWxsIHRyZWUiIGlzIHByaW50aW5nCiAgICAgYm9vbCAgICAgICAg
ICAgICAgICAgICAgICAgbUlzUHJpbnRpbmdPclBQOwogCiAgICAgLy8gSW5kaWNhdGVzIHRvIENy
ZWF0ZUNvbnRlbnRWaWV3ZXIoKSB0aGF0IGl0IGlzIHNhZmUgdG8gY2FjaGUgdGhlIG9sZAogICAg
IC8vIHByZXNlbnRhdGlvbiBvZiB0aGUgcGFnZSwgYW5kIHRvIFNldHVwTmV3Vmlld2VyKCkgdGhh
dCB0aGUgb2xkIHZpZXdlcgogICAgIC8vIHNob3VsZCBiZSBwYXNzZWQgYSBTSEVudHJ5IHRvIHNh
dmUgaXRzZWxmIGludG8uCiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbVNhdmluZ09s
ZFZpZXdlcjsKLQorICAgIAogICAgIC8vIEBzZWUgbnNJRG9jU2hlbGxIaXN0b3J5OjpjcmVhdGVk
RHluYW1pY2FsbHkKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtRHluYW1pY2FsbHlD
cmVhdGVkOwogI2lmZGVmIERFQlVHCiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUlu
RW5zdXJlU2NyaXB0RW52OwogI2VuZGlmCiAgICAgUFJVaW50NjQgICAgICAgICAgICAgICAgICAg
bUhpc3RvcnlJRDsKIAogICAgIHN0YXRpYyBuc0lVUklGaXh1cCAqc1VSSUZpeHVwOwpkaWZmIC0t
Z2l0IGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwgYi9kb2NzaGVsbC9iYXNlL25zSURv
Y1NoZWxsLmlkbAotLS0gYS9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAorKysgYi9kb2Nz
aGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbApAQCAtMzQsMTcgKzM0LDE3IEBAIGludGVyZmFjZSBu
c0lTSEVudHJ5OwogaW50ZXJmYWNlIG5zSUxheW91dEhpc3RvcnlTdGF0ZTsKIGludGVyZmFjZSBu
c0lTZWN1cmVCcm93c2VyVUk7CiBpbnRlcmZhY2UgbnNJRE9NU3RvcmFnZTsKIGludGVyZmFjZSBu
c0lQcmluY2lwYWw7CiBpbnRlcmZhY2UgbnNJV2ViQnJvd3NlclByaW50OwogaW50ZXJmYWNlIG5z
SVZhcmlhbnQ7CiBpbnRlcmZhY2UgbnNJUHJpdmFjeVRyYW5zaXRpb25PYnNlcnZlcjsKIAotW3Nj
cmlwdGFibGUsIGJ1aWx0aW5jbGFzcywgdXVpZCg1MWYyYjdmMC02NDM1LTQwZWMtYjMxNS01ODhm
NTJiZTdlZWEpXQorW3NjcmlwdGFibGUsIGJ1aWx0aW5jbGFzcywgdXVpZCg5YjI4MzMzNy0wOTdk
LTRmYTgtYTJkYS05MTYzMThlYWY4MjgpXQogaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3Vw
cG9ydHMKIHsKICAgLyoqCiAgICAqIExvYWRzIGEgZ2l2ZW4gVVJJLiAgVGhpcyB3aWxsIGdpdmUg
cHJpb3JpdHkgdG8gbG9hZGluZyB0aGUgcmVxdWVzdGVkIFVSSQogICAgKiBpbiB0aGUgb2JqZWN0
IGltcGxlbWVudGluZwl0aGlzIGludGVyZmFjZS4gIElmIGl0IGNhbid0IGJlIGxvYWRlZCBoZXJl
CiAgICAqIGhvd2V2ZXIsIHRoZSBVUkwgZGlzcGF0Y2hlciB3aWxsIGdvIHRocm91Z2ggaXRzIG5v
cm1hbCBwcm9jZXNzIG9mIGNvbnRlbnQKICAgICogbG9hZGluZy4KICAgICoKQEAgLTY0NSw5ICs2
NDUsMzEgQEAgaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3VwcG9ydHMKICAgICovCiAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBib29sIGFzeW5jUGFuWm9vbUVuYWJsZWQ7CiAKICAgLyoqCiAgICAq
IExpa2UgR2V0U2FtZVR5cGVQYXJlbnQsIGV4Y2VwdCB0aGlzIGlnbm9yZXMgPGlmcmFtZSBtb3pi
cm93c2VyPgogICAgKiBib3VuZGFyaWVzLgogICAgKi8KICAgbnNJRG9jU2hlbGwgZ2V0UGFyZW50
SWdub3JlQnJvd3NlckZyYW1lKCk7CisKKyAgLyoqCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9u
IHRoZSBkb2NzaGVsbC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3gKKyAg
ICogYXR0cmlidXRlIG9mIHRoZSBhc3NvY2lhdGVkIElGUkFNRSBvciBDU1AtcHJvdGVjdGFibGUg
Y29udGVudCwgaWYKKyAgICogZXhpc3RlbnQuIFNlZSB0aGUgSFRNTDUgc3BlYyBmb3IgbW9yZSBk
ZXRhaWxzLgorICAgKiBUaGVzZSBmbGFncyBvbiB0aGUgZG9jc2hlbGwgcmVmbGVjdCB0aGUgY3Vy
cmVudCBzdGF0ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1dGUsIHdoaWNoIGlzIG1vZGlm
aWFibGUuIFRoZXkgYXJlIG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcgbmV3CisgICAqIGNvbnRlbnQs
IHNhbmRib3ggZmxhZ3MgYXJlIGFsc28gaW1tdXRhYmx5IHNldCBvbiB0aGUgZG9jdW1lbnQgd2hl
biBpdCBpcworICAgKiBsb2FkZWQuCisgICAqIFRoZSBzYW5kYm94IGZsYWdzIG9mIGEgZG9jdW1l
bnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94IGZsYWdzIG9uIGl0cworICAgKiBkb2NzaGVsbCBhbmQg
b2YgaXRzIHBhcmVudCBkb2N1bWVudCwgaWYgYW55LgorICAgKiBTZWUgbnNTYW5kYm94RmxhZ3Mu
aCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICAgKi8KKyAgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmcgc2FuZGJveEZsYWdzOworCisgIC8qKgorICAgKiBBcmUgcGx1Z2lucyBhbGxvd2VkIGluIHRo
ZSBjdXJyZW50IGRvY3VtZW50IGxvYWRlZCBpbiB0aGlzIGRvY3NoZWxsID8KKyAgICogKGlmIHRo
ZXJlIGlzIG9uZSkuIFRoaXMgZGVwZW5kcyBvbiB3aGV0aGVyIHBsdWdpbnMgYXJlIGFsbG93ZWQg
YnkgdGhpcworICAgKiBkb2NzaGVsbCBpdHNlbGYgb3IgaWYgdGhlIGRvY3VtZW50IGlzIHNhbmRi
b3hlZCBhbmQgaGVuY2UgcGx1Z2lucyBzaG91bGQKKyAgICogbm90IGJlIGFsbG93ZWQuCisgICAq
LworICBbbm9zY3JpcHQsIG5vdHhwY29tXSBib29sIHBsdWdpbnNBbGxvd2VkSW5DdXJyZW50RG9j
KCk7CiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwIGIvZG9tL2Jh
c2UvbnNHbG9iYWxXaW5kb3cuY3BwCi0tLSBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcAor
KysgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKQEAgLTIxNywxNiArMjE3LDE3IEBACiAj
aW5jbHVkZSAibW96QXV0b0RvY1VwZGF0ZS5oIgogCiAjaW5jbHVkZSAibW96aWxsYS9UZWxlbWV0
cnkuaCIKICNpbmNsdWRlICJuc0xvY2F0aW9uLmgiCiAjaW5jbHVkZSAibnNXcmFwcGVyQ2FjaGVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAibnNET01FdmVudFRhcmdldEhlbHBlci5oIgogI2luY2x1ZGUg
Im5zSUFwcHNTZXJ2aWNlLmgiCiAjaW5jbHVkZSAicHJybmcuaCIKKyNpbmNsdWRlICJuc1NhbmRi
b3hGbGFncy5oIgogCiAjaWZkZWYgQU5EUk9JRAogI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+CiAj
ZW5kaWYKIAogI2lmZGVmIFBSX0xPR0dJTkcKIHN0YXRpYyBQUkxvZ01vZHVsZUluZm8qIGdET01M
ZWFrUFJMb2c7CiAjZW5kaWYKQEAgLTgyMzMsMTYgKzgyMzQsMjYgQEAgbnNHbG9iYWxXaW5kb3c6
OkdldFNlc3Npb25TdG9yYWdlKG5zSURPTQogICBpZiAoIW1TZXNzaW9uU3RvcmFnZSkgewogICAg
ICphU2Vzc2lvblN0b3JhZ2UgPSBudWxscHRyOwogCiAgICAgbnNTdHJpbmcgZG9jdW1lbnRVUkk7
CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50LT5HZXREb2N1bWVudFVSSShk
b2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyB0aGUgc2Fu
ZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBsb2Nh
bFN0b3JhZ2UuCisgICAgaWYgKCFtRG9jKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVS
RTsKKyAgICB9CisKKyAgICBpZiAobURvYy0+R2V0U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURf
T1JJR0lOKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9
CisKICAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTZXNzaW9uU3RvcmFnZUZvclByaW5j
aXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyht
U2Vzc2lvblN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCiAjaWZk
ZWYgUFJfTE9HR0lORwogICAgIGlmIChQUl9MT0dfVEVTVChnRE9NTGVha1BSTG9nLCBQUl9MT0df
REVCVUcpKSB7CkBAIC04Mjk4LDE2ICs4MzA5LDIyIEBAIG5zR2xvYmFsV2luZG93OjpHZXRMb2Nh
bFN0b3JhZ2UobnNJRE9NU3QKICAgICAgIGRvX0dldFNlcnZpY2UoIkBtb3ppbGxhLm9yZy9kb20v
c3RvcmFnZW1hbmFnZXI7MSIsICZydik7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsK
IAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmIChtRG9jdW1lbnQpIHsKICAgICAg
IG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkpOwogICAgIH0KIAorICAgIC8v
IElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmlnaW4gZmxhZyBzZXQKKyAgICAv
LyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgorICAgIGlmIChtRG9jICYmICht
RG9jLT5HZXRTYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9PUklHSU4pKSB7CisgICAgICByZXR1
cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBuc0lEb2NTaGVsbCog
ZG9jU2hlbGwgPSBHZXREb2NTaGVsbCgpOwogICAgIG5zQ09NUHRyPG5zSUxvYWRDb250ZXh0PiBs
b2FkQ29udGV4dCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGRvY1NoZWxsKTsKIAogICAgIHJ2ID0gc3Rv
cmFnZU1hbmFnZXItPkdldExvY2FsU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
VVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2FkQ29udGV4dCAmJiBsb2FkQ29udGV4dC0+VXNlUHJpdmF0ZUJyb3dzaW5nKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9B
ZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwpk
aWZmIC0tZ2l0IGEvZG9tL2Jhc2UvbnNQbHVnaW5BcnJheS5jcHAgYi9kb20vYmFzZS9uc1BsdWdp
bkFycmF5LmNwcAotLS0gYS9kb20vYmFzZS9uc1BsdWdpbkFycmF5LmNwcAorKysgYi9kb20vYmFz
ZS9uc1BsdWdpbkFycmF5LmNwcApAQCAtMTAsMTYgKzEwLDE4IEBACiAjaW5jbHVkZSAibnNJRE9N
TmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAibnNJRE9NTWltZVR5cGUuaCIKICNpbmNsdWRlICJuc0lQ
bHVnaW5Ib3N0LmgiCiAjaW5jbHVkZSAibnNJRG9jU2hlbGwuaCIKICNpbmNsdWRlICJuc0lXZWJO
YXZpZ2F0aW9uLmgiCiAjaW5jbHVkZSAibnNET01DbGFzc0luZm9JRC5oIgogI2luY2x1ZGUgIm5z
UGx1Z2luRXJyb3IuaCIKICNpbmNsdWRlICJuc1BsdWdpbkhvc3QuaCIKKyNpbmNsdWRlICJuc0lD
b250ZW50Vmlld2VyLmgiCisjaW5jbHVkZSAibnNJRG9jdW1lbnQuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCiBuc1BsdWdpbkFy
cmF5Ojpuc1BsdWdpbkFycmF5KE5hdmlnYXRvciogbmF2aWdhdG9yLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lEb2NTaGVsbCAqYURvY1NoZWxsKQogICA6IG1OYXZpZ2F0b3IobmF2
aWdhdG9yKSwKICAgICBtUGx1Z2luSG9zdChkb19HZXRTZXJ2aWNlKE1PWl9QTFVHSU5fSE9TVF9D
T05UUkFDVElEKSksCkBAIC02MCwyNCArNjIsMjMgQEAgbnNQbHVnaW5BcnJheTo6R2V0TGVuZ3Ro
KFBSVWludDMyKiBhTGVuZwogICAKICAgKmFMZW5ndGggPSAwOwogICByZXR1cm4gTlNfT0s7CiB9
CiAKIGJvb2wKIG5zUGx1Z2luQXJyYXk6OkFsbG93UGx1Z2lucygpCiB7Ci0gIGJvb2wgYWxsb3dQ
bHVnaW5zID0gZmFsc2U7CiAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1
ZXJ5UmVmZXJlbnQobURvY1NoZWxsKTsKIAotICBpZiAoZG9jU2hlbGwpCi0gICAgaWYgKE5TX0ZB
SUxFRChkb2NTaGVsbC0+R2V0QWxsb3dQbHVnaW5zKCZhbGxvd1BsdWdpbnMpKSkKLSAgICAgIGFs
bG93UGx1Z2lucyA9IGZhbHNlOworICBpZiAoIWRvY1NoZWxsKSB7CisgICAgcmV0dXJuIGZhbHNl
OworICB9CiAKLSAgcmV0dXJuIGFsbG93UGx1Z2luczsKKyAgcmV0dXJuIGRvY1NoZWxsLT5QbHVn
aW5zQWxsb3dlZEluQ3VycmVudERvYygpOwogfQogCiBuc0lET01QbHVnaW4qCiBuc1BsdWdpbkFy
cmF5OjpHZXRJdGVtQXQoUFJVaW50MzIgYUluZGV4LCBuc3Jlc3VsdCogYVJlc3VsdCkKIHsKICAg
KmFSZXN1bHQgPSBOU19PSzsKIAogICBpZiAoIUFsbG93UGx1Z2lucygpKQpkaWZmIC0tZ2l0IGEv
ZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxlbWVudC5pZGwgYi9kb20vaW50
ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAotLS0gYS9kb20vaW50ZXJm
YWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAorKysgYi9kb20vaW50ZXJmYWNl
cy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbApAQCAtMTEsMzIgKzExLDMyIEBACiAg
KgogICogVGhpcyBpbnRlcmZhY2UgaXMgdHJ5aW5nIHRvIGZvbGxvdyB0aGUgRE9NIExldmVsIDIg
SFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTIt
SFRNTC8KICAqCiAgKiB3aXRoIGNoYW5nZXMgZnJvbSB0aGUgd29yay1pbi1wcm9ncmVzcyBXSEFU
V0cgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dl
Yi1hcHBzL2N1cnJlbnQtd29yay8KICAqLwogCi1bc2NyaXB0YWJsZSwgdXVpZCg5N0U0RjBFMS1C
RDI3LTQwRUMtOTI4Ny01NjM0REFGMTVCNzMpXQorW3NjcmlwdGFibGUsIHV1aWQoNTJmNjI0NGIt
YjFmNS00ZjRjLThmZjMtN2UxNDYzMTZmNDExKV0KIGludGVyZmFjZSBuc0lET01IVE1MSUZyYW1l
RWxlbWVudCA6IG5zSURPTUhUTUxFbGVtZW50CiB7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgICAgICAgIGFsaWduOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBmcmFtZUJvcmRlcjsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgaGVp
Z2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBsb25nRGVzYzsKICAg
ICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbWFyZ2luSGVpZ2h0OwogICAgICAg
ICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5XaWR0aDsKICAgICAgICAgICAg
YXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFtZTsKICAgICAgICAgICAgYXR0cmlidXRlIERP
TVN0cmluZyAgICAgICAgc2Nyb2xsaW5nOwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5n
ICAgICAgICBzcmM7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIHdpZHRo
OwogICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICByZWFkb25seSBhdHRyaWJ1dGUg
bnNJRE9NRG9jdW1lbnQgICBjb250ZW50RG9jdW1lbnQ7CiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBu
c0lET01XaW5kb3cgICAgIGNvbnRlbnRXaW5kb3c7CiAKLQorICAgICAgICAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nICAgICAgICBzYW5kYm94OwogICAvLyBNb3ppbGxhIGV4dGVuc2lvbnMKICAgLy8g
aWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1vekFsbG93RnVsbFNjcmVlbiBhdHRyaWJ1dGUg
dG8gYmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3JlIHRvIGFsbG93IGNvbnRlbnQgaW4gdGhlIHN1
YiBkb2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxsLXNjcmVlbgogICAvLyBtb2RlLiBTZWUgaHR0
cHM6Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBocD90aXRsZT1HZWNrbzpGdWxsU2NyZWVuQVBJ
CiAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgIG1vekFsbG93RnVsbFNjcmVl
bjsKIH07CmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3Bw
IGIvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNwcAotLS0gYS9kb20vc3JjL2pz
dXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwCisrKyBiL2RvbS9zcmMvanN1cmwvbnNKU1Byb3Rv
Y29sSGFuZGxlci5jcHAKQEAgLTM5LDE2ICszOSwxNyBAQAogI2luY2x1ZGUgIm5zVGhyZWFkVXRp
bHMuaCIKICNpbmNsdWRlICJuc0lKU0NvbnRleHRTdGFjay5oIgogI2luY2x1ZGUgIm5zSVNjcmlw
dENoYW5uZWwuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgogI2luY2x1ZGUgIm5zSU9iamVj
dElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0T3V0cHV0U3RyZWFtLmgiCiAjaW5j
bHVkZSAibnNJV3JpdGFibGVQcm9wZXJ0eUJhZzIuaCIKICNpbmNsdWRlICJuc0lDb250ZW50U2Vj
dXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiBzdGF0aWMgTlNf
REVGSU5FX0NJRChrSlNVUklDSUQsIE5TX0pTVVJJX0NJRCk7CiAKIGNsYXNzIG5zSlNUaHVuayA6
IHB1YmxpYyBuc0lJbnB1dFN0cmVhbQogewogcHVibGljOgogICAgIG5zSlNUaHVuaygpOwogCkBA
IC0xODUsMTYgKzE4NiwyMyBAQCBuc3Jlc3VsdCBuc0pTVGh1bms6OkV2YWx1YXRlU2NyaXB0KG5z
SUNoCiAgICAgLy8gR2V0IHRoZSBnbG9iYWwgb2JqZWN0IHdlIHNob3VsZCBiZSBydW5uaW5nIG9u
LgogICAgIG5zSVNjcmlwdEdsb2JhbE9iamVjdCogZ2xvYmFsID0gR2V0R2xvYmFsT2JqZWN0KGFD
aGFubmVsKTsKICAgICBpZiAoIWdsb2JhbCkgewogICAgICAgICByZXR1cm4gTlNfRVJST1JfRkFJ
TFVSRTsKICAgICB9CiAKICAgICBuc0NPTVB0cjxuc1BJRE9NV2luZG93PiB3aW4oZG9fUXVlcnlJ
bnRlcmZhY2UoZ2xvYmFsKSk7CiAKKyAgICAvLyBTYW5kYm94ZWQgZG9jdW1lbnQgY2hlY2s6IGph
dmFzY3JpcHQ6IFVSSSdzIGFyZSBkaXNhYmxlZAorICAgIC8vIGluIGEgc2FuZGJveGVkIGRvY3Vt
ZW50IHVubGVzcyAnYWxsb3ctc2NyaXB0cycgd2FzIHNwZWNpZmllZC4KKyAgICBuc0lEb2N1bWVu
dCogZG9jID0gYU9yaWdpbmFsSW5uZXJXaW5kb3ctPkdldEV4dGFudERvYygpOworICAgIGlmIChk
b2MgJiYgKGRvYy0+R2V0U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfU0NSSVBUUykpIHsKKyAg
ICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9SRVRWQUxfVU5ERUZJTkVEOworICAgIH0KKwogICAg
IC8vIFB1c2ggb3VyIHBvcHVwIGNvbnRyb2wgc3RhdGUKICAgICBuc0F1dG9Qb3B1cFN0YXRlUHVz
aGVyIHBvcHVwU3RhdGVQdXNoZXIod2luLCBhUG9wdXBTdGF0ZSk7CiAKICAgICAvLyBNYWtlIHN1
cmUgd2Ugc3RpbGwgaGF2ZSB0aGUgc2FtZSBpbm5lciB3aW5kb3cgYXMgd2UgdXNlZCB0by4KICAg
ICBuc1BJRE9NV2luZG93ICppbm5lcldpbiA9IHdpbi0+R2V0Q3VycmVudElubmVyV2luZG93KCk7
CiAKICAgICBpZiAoaW5uZXJXaW4gIT0gYU9yaWdpbmFsSW5uZXJXaW5kb3cpIHsKICAgICAgICAg
cmV0dXJuIE5TX0VSUk9SX1VORVhQRUNURUQ7CmRpZmYgLS1naXQgYS9lZGl0b3IvY29tcG9zZXIv
c3JjL25zQ29tcG9zZXJEb2N1bWVudENvbW1hbmRzLmNwcCBiL2VkaXRvci9jb21wb3Nlci9zcmMv
bnNDb21wb3NlckRvY3VtZW50Q29tbWFuZHMuY3BwCi0tLSBhL2VkaXRvci9jb21wb3Nlci9zcmMv
bnNDb21wb3NlckRvY3VtZW50Q29tbWFuZHMuY3BwCisrKyBiL2VkaXRvci9jb21wb3Nlci9zcmMv
bnNDb21wb3NlckRvY3VtZW50Q29tbWFuZHMuY3BwCkBAIC0xNTAsMjkgKzE1MCwyOCBAQCBuc1Nl
dERvY3VtZW50T3B0aW9uc0NvbW1hbmQ6OkdldENvbW1hbmRTCiAgIHsKICAgICAvLyBmb3IgcG9z
c2libGUgdmFsdWVzIG9mIGFuaW1hdGlvbiBtb2RlLCBzZWUKICAgICAvLyBodHRwOi8vbHhyLm1v
emlsbGEub3JnL3NlYW1vbmtleS9zb3VyY2UvaW1hZ2UvcHVibGljL2ltZ0lDb250YWluZXIuaWRs
CiAgICAgcnYgPSBhUGFyYW1zLT5TZXRMb25nVmFsdWUoImltYWdlQW5pbWF0aW9uIiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzQ29udGV4dC0+SW1hZ2VBbmltYXRpb25Nb2Rl
KCkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgIH0KIAotICBib29sIGFsbG93
UGx1Z2luczsgCisgIGJvb2wgYWxsb3dQbHVnaW5zID0gZmFsc2U7IAogICBydiA9IGFQYXJhbXMt
PkdldEJvb2xlYW5WYWx1ZSgicGx1Z2lucyIsICZhbGxvd1BsdWdpbnMpOwogICBpZiAoTlNfU1VD
Q0VFREVEKHJ2KSkKICAgewogICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBjb250YWluZXIgPSBw
cmVzQ29udGV4dC0+R2V0Q29udGFpbmVyKCk7CiAgICAgTlNfRU5TVVJFX1RSVUUoY29udGFpbmVy
LCBOU19FUlJPUl9GQUlMVVJFKTsKIAogICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVs
bChkb19RdWVyeUludGVyZmFjZShjb250YWluZXIsICZydikpOwogICAgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CiAgICAgTlNfRU5TVVJFX1RSVUUoZG9jU2hlbGwsIE5TX0VSUk9SX0ZBSUxV
UkUpOwogCi0gICAgcnYgPSBkb2NTaGVsbC0+R2V0QWxsb3dQbHVnaW5zKCZhbGxvd1BsdWdpbnMp
OwotICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgICAgYWxsb3dQbHVnaW5zID0gZG9j
U2hlbGwtPlBsdWdpbnNBbGxvd2VkSW5DdXJyZW50RG9jKCk7CiAKICAgICBydiA9IGFQYXJhbXMt
PlNldEJvb2xlYW5WYWx1ZSgicGx1Z2lucyIsIGFsbG93UGx1Z2lucyk7CiAgICAgTlNfRU5TVVJF
X1NVQ0NFU1MocnYsIHJ2KTsKICAgfQogCiAgIHJldHVybiBOU19PSzsKIH0KIApkaWZmIC0tZ2l0
IGEvZWRpdG9yL2NvbXBvc2VyL3NyYy9uc0VkaXRpbmdTZXNzaW9uLmNwcCBiL2VkaXRvci9jb21w
b3Nlci9zcmMvbnNFZGl0aW5nU2Vzc2lvbi5jcHAKLS0tIGEvZWRpdG9yL2NvbXBvc2VyL3NyYy9u
c0VkaXRpbmdTZXNzaW9uLmNwcAorKysgYi9lZGl0b3IvY29tcG9zZXIvc3JjL25zRWRpdGluZ1Nl
c3Npb24uY3BwCkBAIC0xOTIsMjAgKzE5MiwxNyBAQCBuc0VkaXRpbmdTZXNzaW9uOjpEaXNhYmxl
SlNBbmRQbHVnaW5zKG5zCiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbVNjcmlw
dHNFbmFibGVkID0gdG1wOwogCiAgIHJ2ID0gZG9jU2hlbGwtPlNldEFsbG93SmF2YXNjcmlwdChm
YWxzZSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgLy8gRGlzYWJsZSBwbHVn
aW5zIGluIHRoaXMgZG9jdW1lbnQ6Ci0gIHJ2ID0gZG9jU2hlbGwtPkdldEFsbG93UGx1Z2lucygm
dG1wKTsKLSAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKLQotICBtUGx1Z2luc0VuYWJsZWQg
PSB0bXA7CisgIG1QbHVnaW5zRW5hYmxlZCA9IGRvY1NoZWxsLT5QbHVnaW5zQWxsb3dlZEluQ3Vy
cmVudERvYygpOwogCiAgIHJ2ID0gZG9jU2hlbGwtPlNldEFsbG93UGx1Z2lucyhmYWxzZSk7CiAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbURpc2FibGVkSlNBbmRQbHVnaW5zID0g
dHJ1ZTsKIAogICByZXR1cm4gTlNfT0s7CiB9CmRpZmYgLS1naXQgYS9lbWJlZGRpbmcvYnJvd3Nl
ci93ZWJCcm93c2VyL25zV2ViQnJvd3NlckNvbnRlbnRQb2xpY3kuY3BwIGIvZW1iZWRkaW5nL2Jy
b3dzZXIvd2ViQnJvd3Nlci9uc1dlYkJyb3dzZXJDb250ZW50UG9saWN5LmNwcAotLS0gYS9lbWJl
ZGRpbmcvYnJvd3Nlci93ZWJCcm93c2VyL25zV2ViQnJvd3NlckNvbnRlbnRQb2xpY3kuY3BwCisr
KyBiL2VtYmVkZGluZy9icm93c2VyL3dlYkJyb3dzZXIvbnNXZWJCcm93c2VyQ29udGVudFBvbGlj
eS5jcHAKQEAgLTQsMTYgKzQsMTcgQEAKICAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJq
ZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKICAqIExpY2Vuc2UsIHYuIDIu
MC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKICAq
IGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8u
ICovCiAKICNpbmNsdWRlICJuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5LmgiCiAjaW5jbHVkZSAi
bnNJRG9jU2hlbGwuaCIKICNpbmNsdWRlICJuc0NPTVB0ci5oIgogI2luY2x1ZGUgIm5zQ29udGVu
dFBvbGljeVV0aWxzLmgiCisjaW5jbHVkZSAibnNJQ29udGVudFZpZXdlci5oIgogCiBuc1dlYkJy
b3dzZXJDb250ZW50UG9saWN5Ojpuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5KCkKIHsKICAgICBN
T1pfQ09VTlRfQ1RPUihuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5KTsKIH0KIAogbnNXZWJCcm93
c2VyQ29udGVudFBvbGljeTo6fm5zV2ViQnJvd3NlckNvbnRlbnRQb2xpY3koKQogewpAQCAtMzYs
MTcgKzM3LDE4IEBAIFBlcmZvcm1Qb2xpY3lDaGVjayhQUlVpbnQzMiAgICAgY29udGVudFQKICAg
ICBpZiAoIXNoZWxsKQogICAgICAgICByZXR1cm4gTlNfT0s7CiAKICAgICBuc3Jlc3VsdCBydjsK
ICAgICBib29sIGFsbG93ZWQgPSB0cnVlOwogCiAgICAgc3dpdGNoIChjb250ZW50VHlwZSkgewog
ICAgICAgY2FzZSBuc0lDb250ZW50UG9saWN5OjpUWVBFX09CSkVDVDoKLSAgICAgICAgcnYgPSBz
aGVsbC0+R2V0QWxsb3dQbHVnaW5zKCZhbGxvd2VkKTsKKyAgICAgICAgYWxsb3dlZCA9IHNoZWxs
LT5QbHVnaW5zQWxsb3dlZEluQ3VycmVudERvYygpOworICAgICAgICBydiA9IE5TX09LOwogICAg
ICAgICBicmVhazsKICAgICAgIGNhc2UgbnNJQ29udGVudFBvbGljeTo6VFlQRV9TQ1JJUFQ6CiAg
ICAgICAgIHJ2ID0gc2hlbGwtPkdldEFsbG93SmF2YXNjcmlwdCgmYWxsb3dlZCk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgY2FzZSBuc0lDb250ZW50UG9saWN5OjpUWVBFX1NVQkRPQ1VNRU5UOgog
ICAgICAgICBydiA9IHNoZWxsLT5HZXRBbGxvd1N1YmZyYW1lcygmYWxsb3dlZCk7CiAgICAgICAg
IGJyZWFrOwogI2lmIDAKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dh
dGNoZXIvc3JjL01ha2VmaWxlLmluIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hl
ci9zcmMvTWFrZWZpbGUuaW4KLS0tIGEvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hl
ci9zcmMvTWFrZWZpbGUuaW4KKysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hl
ci9zcmMvTWFrZWZpbGUuaW4KQEAgLTI0LDExICsyNCwxMSBAQCBDUFBTUkNTCQkrPSBuc0RpYWxv
Z1BhcmFtQmxvY2suY3BwIFwKIAkJICAgJChOVUxMKQogZW5kaWYKIAogIyB3ZSBkb24ndCB3YW50
IHRoZSBzaGFyZWQgbGliLCBidXQgd2Ugd2FudCB0byBmb3JjZSB0aGUgY3JlYXRpb24gb2YgYQog
IyBzdGF0aWMgbGliLgogRk9SQ0VfU1RBVElDX0xJQiA9IDEKIAogIyBGb3IgbnNKU1V0aWxzCi1M
T0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3JjZGlyKS9kb20vYmFzZQorTE9DQUxfSU5DTFVERVMg
Kz0gLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UgXAogCiBpbmNsdWRlICQodG9wc3JjZGlyKS9jb25m
aWcvcnVsZXMubWsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNo
ZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAgYi9lbWJlZGRpbmcvY29tcG9uZW50cy93aW5kb3d3
YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCi0tLSBhL2VtYmVkZGluZy9jb21wb25lbnRz
L3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAKKysrIGIvZW1iZWRkaW5nL2Nv
bXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRjaGVyLmNwcApAQCAtNTMsMTYg
KzUzLDE3IEBACiAjaW5jbHVkZSAibnNQSURPTVN0b3JhZ2UuaCIKICNpbmNsdWRlICJuc0lXaWRn
ZXQuaCIKICNpbmNsdWRlICJuc0ZvY3VzTWFuYWdlci5oIgogI2luY2x1ZGUgIm5zSVByZXNTaGVs
bC5oIgogI2luY2x1ZGUgIm5zUHJlc0NvbnRleHQuaCIKICNpbmNsdWRlICJuc0NvbnRlbnRVdGls
cy5oIgogI2luY2x1ZGUgIm5zSVByZWZCcmFuY2guaCIKICNpbmNsdWRlICJuc0lQcmVmU2Vydmlj
ZS5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpZmRlZiBVU0VXRUFLUkVGUwog
I2luY2x1ZGUgIm5zSVdlYWtSZWZlcmVuY2UuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ug
bW96aWxsYTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNKU1N0YWNrQ29udHJhY3RJRD0iQG1vemls
bGEub3JnL2pzL3hwYy9Db250ZXh0U3RhY2s7MSI7CkBAIC01NzAsMTYgKzU3MSwyOCBAQCBuc1dp
bmRvd1dhdGNoZXI6Ok9wZW5XaW5kb3dKU0ludGVybmFsKG5zCiAgIH0KIAogICBpZiAoIW5ld0Rv
Y1NoZWxsSXRlbSkgewogICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGVpdGhlciBvcGVuIHVwIGEgbmV3
IHdpbmRvdyBvdXJzZWx2ZXMgb3IgYXNrIGEKICAgICAvLyBuc0lXaW5kb3dQcm92aWRlciBmb3Ig
b25lLiAgSW4gZWl0aGVyIGNhc2UsIHdlJ2xsIHdhbnQgdG8gc2V0IHRoZSByaWdodAogICAgIC8v
IG5hbWUgb24gaXQuCiAgICAgd2luZG93TmVlZHNOYW1lID0gdHJ1ZTsKIAorICAgIC8vIElmIHRo
ZSBwYXJlbnQgdHJ5aW5nIHRvIG9wZW4gYSBuZXcgd2luZG93IGlzIHNhbmRib3hlZCwKKyAgICAv
LyB0aGlzIGlzIG5vdCBhbGxvd2VkIGFuZCB3ZSBmYWlsIGhlcmUuCisgICAgaWYgKGFQYXJlbnQp
IHsKKyAgICAgIG5zQ09NUHRyPG5zSURPTURvY3VtZW50PiBkb21kb2M7CisgICAgICBhUGFyZW50
LT5HZXREb2N1bWVudChnZXR0ZXJfQWRkUmVmcyhkb21kb2MpKTsKKyAgICAgIG5zQ09NUHRyPG5z
SURvY3VtZW50PiBkb2MgPSBkb19RdWVyeUludGVyZmFjZShkb21kb2MpOworCisgICAgICBpZiAo
ZG9jICYmIChkb2MtPkdldFNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX05BVklHQVRJT04pKSB7
CisgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAgfQorICAgIH0KKwogICAg
IC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEgd2luZG93IHByb3ZpZGVyIGZv
ciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2UncmUgb3BlbmluZyBhIGRpYWxv
ZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBvcgogICAgIC8vIGlmIHdlJ3Jl
IG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFsb2csIG9yIGNocm9tZSBmbGFn
cyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93PiBjaHJvbWVXaW4gPSBkb19R
dWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFsb2cgJiYgIWNocm9tZVdpbiAm
JgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9N
T0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lXZWJCcm93c2VyQ2hy
b21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01FKSkpIHsK
</data>
<flag name="review"
          id="538836"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650371</attachid>
            <date>2012-08-08 17:07:20 -0700</date>
            <delta_ts>2012-08-08 17:13:46 -0700</delta_ts>
            <desc>iframe sandbox v25</desc>
            <filename>iframe_sandbox</filename>
            <type>text/plain</type>
            <size>61566</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNGUzZmIxZjlmNzJhZGNiMzBjM2MxMzBkMjQx
NzA3OWY1MGRlN2Q1YgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIEltcGxlbWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyBy
PXNtYXVnIHI9anN0CgpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRV
dGlscy5oIGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGlscy5oCi0tLSBhL2NvbnRl
bnQvYmFzZS9wdWJsaWMvbnNDb250ZW50VXRpbHMuaAorKysgYi9jb250ZW50L2Jhc2UvcHVibGlj
L25zQ29udGVudFV0aWxzLmgKQEAgLTgxMiwxNiArODEyLDI2IEBAIHB1YmxpYzoKICAgLyoqCiAg
ICAqIEdldCB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtleXwgaW4gcHJvcGVydGllcyBm
aWxlIHxhRmlsZXwuCiAgICAqLwogICBzdGF0aWMgbnNyZXN1bHQgR2V0TG9jYWxpemVkU3RyaW5n
KFByb3BlcnRpZXNGaWxlIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGFLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNYUElETFN0cmluZyYgYVJlc3VsdCk7CiAKICAgLyoqCisgICAqIEEgaGVscGVyIGZ1bmN0
aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJveCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisg
ICAqIGEgQ1NQIGRpcmVjdGl2ZSkgYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBzZXQgb2YgZmxhZ3Mg
dXNlZCBpbnRlcm5hbGx5LgorICAgKgorICAgKiBAcGFyYW0gYUF0dHJpYnV0ZSAJdGhlIHZhbHVl
IG9mIHRoZSBzYW5kYm94IGF0dHJpYnV0ZQorICAgKiBAcmV0dXJuIAkJCXRoZSBzZXQgb2YgZmxh
Z3MKKyAgICovCisgIHN0YXRpYyBQUlVpbnQzMiBQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdz
KGNvbnN0IG5zQVN0cmluZyYgYVNhbmRib3hBdHRyKTsKKworCisgIC8qKgogICAgKiBGaWxsICh3
aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVuKSB0aGUgbG9jYWxpemVkIHN0cmluZyBuYW1lZCB8YUtl
eXwgaW4KICAgICogcHJvcGVydGllcyBmaWxlIHxhRmlsZXwuCiAgICAqLwogcHJpdmF0ZToKICAg
c3RhdGljIG5zcmVzdWx0IEZvcm1hdExvY2FsaXplZFN0cmluZyhQcm9wZXJ0aWVzRmlsZSBhRmls
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBh
S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5p
Y2hhcioqIGFQYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJVaW50MzIgYVBhcmFtc0xlbmd0aCwKQEAgLTE5NDUsNDIgKzE5NTUsNDQgQEAgcHVibGljOgog
ICAgKiBmcm9tIHRoZSBkb2N1bWVudCBpdCBjb21lcyBmcm9tLgogICAgKi8KICAgc3RhdGljIG5z
cmVzdWx0IFVSSUluaGVyaXRzU2VjdXJpdHlDb250ZXh0KG5zSVVSSSAqYVVSSSwgYm9vbCAqYVJl
c3VsdCk7CiAKICAgLyoqCiAgICAqIFNldCB0aGUgZ2l2ZW4gcHJpbmNpcGFsIGFzIHRoZSBvd25l
ciBvZiB0aGUgZ2l2ZW4gY2hhbm5lbCwgaWYKICAgICogbmVlZGVkLiAgYVVSSSBtdXN0IGJlIHRo
ZSBVUkkgb2YgYUNoYW5uZWwuICBhUHJpbmNpcGFsIG1heSBiZQogICAgKiBudWxsLiAgSWYgYVNl
dFVwRm9yQWJvdXRCbGFuayBpcyB0cnVlLCB0aGVuIGFib3V0OmJsYW5rIHdpbGwgZ2V0Ci0gICAq
IHRoZSBwcmluY2lwYWwgc2V0IHVwIG9uIGl0LgotICAgKgorICAgKiB0aGUgcHJpbmNpcGFsIHNl
dCB1cCBvbiBpdC4gSWYgYUZvcmNlT3duZXIgaXMgdHJ1ZSwgdGhlIG93bmVyCisgICAqIHdpbGwg
YmUgc2V0IG9uIHRoZSBjaGFubmVsLCBldmVuIGlmIHRoZSBwcmluY2lwYWwgY2FuIGJlIGRldGVy
bWluZWQKKyAgICogZnJvbSB0aGUgY2hhbm5lbC4KICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyB3
aGV0aGVyIHRoZSBwcmluY2lwYWwgd2FzIHNldCB1cCBhcyB0aGUgb3duZXIKICAgICogb2YgdGhl
IGNoYW5uZWwuCiAgICAqLwogICBzdGF0aWMgYm9vbCBTZXRVcENoYW5uZWxPd25lcihuc0lQcmlu
Y2lwYWwqIGFMb2FkaW5nUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDaGFubmVsKiBhQ2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJVVJJKiBhVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFTZXRV
cEZvckFib3V0QmxhbmspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFT
ZXRVcEZvckFib3V0QmxhbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YUZvcmNlT3duZXIgPSBmYWxzZSk7CiAKICAgc3RhdGljIG5zcmVzdWx0IEJ0b2EoY29uc3QgbnNB
U3RyaW5nJiBhQmluYXJ5RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBh
QXNjaWlCYXNlNjRTdHJpbmcpOwogCiAgIHN0YXRpYyBuc3Jlc3VsdCBBdG9iKGNvbnN0IG5zQVN0
cmluZyYgYUFzY2lpU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFC
aW5hcnlEYXRhKTsKIAogICAvKiogSWYgYUpTQXJyYXkgaXMgYSBKYXZhc2NyaXB0IGFycmF5LCB0
aGlzIG1ldGhvZCBpdGVyYXRlcyBvdmVyIGl0cwogICAgKiAgZWxlbWVudHMgYW5kIGFwcGVuZHMg
dmFsdWVzIHRvIGFSZXRWYWwgYXMgbnNJQXRvbXMuCiAgICAqICBAdGhyb3cgTlNfRVJST1JfSUxM
RUdBTF9WQUxVRSBpZiBhSlNBcnJheSBpc24ndCBhIEpTIGFycmF5LgogICAgKi8gCiAgIHN0YXRp
YyBuc3Jlc3VsdCBKU0FycmF5VG9BdG9tQXJyYXkoSlNDb250ZXh0KiBhQ3gsIGNvbnN0IEpTOjpW
YWx1ZSYgYUpTQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnND
T01BcnJheTxuc0lBdG9tPiYgYVJldFZhbCk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhl
ciB0aGUgaW5wdXQgZWxlbWVudCBwYXNzZWQgaW4gcGFyYW1ldGVyIGhhcyB0aGUgYXV0b2NvbXBs
ZXRlCi0gICAqIGZ1bmN0aW9ubmFsaXR5IGVuYWJsZWQuIEl0IGlzIHRha2luZyBpbnRvIGFjY291
bnQgdGhlIGZvcm0gb3duZXIuCisgICAqIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4gSXQgaXMgdGFr
aW5nIGludG8gYWNjb3VudCB0aGUgZm9ybSBvd25lci4KICAgICogTk9URTogdGhlIGNhbGxlciBo
YXMgdG8gbWFrZSBzdXJlIGF1dG9jb21wbGV0ZSBtYWtlcyBzZW5zZSBmb3IgdGhlCiAgICAqIGVs
ZW1lbnQncyB0eXBlLgogICAgKgogICAgKiBAcGFyYW0gYUlucHV0IHRoZSBpbnB1dCBlbGVtZW50
IHRvIGNoZWNrLiBOT1RFOiBhSW5wdXQgY2FuJ3QgYmUgbnVsbC4KICAgICogQHJldHVybiB3aGV0
aGVyIHRoZSBpbnB1dCBlbGVtZW50IGhhcyBhdXRvY29tcGxldGUgZW5hYmxlZC4KICAgICovCiAg
IHN0YXRpYyBib29sIElzQXV0b2NvbXBsZXRlRW5hYmxlZChuc0lET01IVE1MSW5wdXRFbGVtZW50
KiBhSW5wdXQpOwogCmRpZmYgLS1naXQgYS9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50
LmggYi9jb250ZW50L2Jhc2UvcHVibGljL25zSURvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNl
L3B1YmxpYy9uc0lEb2N1bWVudC5oCisrKyBiL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNJRG9jdW1l
bnQuaApAQCAtNzMsMTggKzczLDE4IEBAIGNsYXNzIExvYWRlcjsKIAogbmFtZXNwYWNlIGRvbSB7
CiBjbGFzcyBMaW5rOwogY2xhc3MgRWxlbWVudDsKIH0gLy8gbmFtZXNwYWNlIGRvbQogfSAvLyBu
YW1lc3BhY2UgbW96aWxsYQogCiAjZGVmaW5lIE5TX0lET0NVTUVOVF9JSUQgXAoteyAweGJkNzBl
ZTA2LCAweDJhN2QsIDB4NDI1OCwgXAotICB7IDB4ODYsIDB4NGIsIDB4YmQsIDB4MjgsIDB4YWQs
IDB4OWYsIDB4ZDEsIDB4NDEgfSB9Cit7IDB4NTdmZTQ0YWUsIDB4NjY1NiwgMHg0NGI4LCBcCisg
IHsgMHg4ZCwgMHhjMCwgMHhmYywgMHhhNywgMHg0MywgMHgyOCwgMHhiZSwgMHg4NiB9IH0KIAog
Ly8gRmxhZyBmb3IgQWRkU3R5bGVTaGVldCgpLgogI2RlZmluZSBOU19TVFlMRVNIRUVUX0ZST01f
Q0FUQUxPRyAgICAgICAgICAgICAgICAoMSA8PCAwKQogCiAvLyBFbnVtIGZvciByZXF1ZXN0aW5n
IGEgcGFydGljdWxhciB0eXBlIG9mIGRvY3VtZW50IHdoZW4gY3JlYXRpbmcgYSBkb2MKIGVudW0g
RG9jdW1lbnRGbGF2b3IgewogICBEb2N1bWVudEZsYXZvckxlZ2FjeUd1ZXNzLCAvLyBjb21wYXQg
d2l0aCBvbGQgY29kZSB1bnRpbCBtYWRlIEhUTUw1LWNvbXBsaWFudAogICBEb2N1bWVudEZsYXZv
ckhUTUwsIC8vIEhUTUxEb2N1bWVudCB3aXRoIEhUTUxuZXNzIGJpdCBzZXQgdG8gdHJ1ZQpAQCAt
Mzk0LDE2ICszOTQsMzUgQEAgcHVibGljOgogICAgKiBjaGFuZ2UgdG8gYWN0dWFsbHkgY2hhbmdl
IGFueXRoaW5nIGltbWVkaWF0ZWx5LgogICAgKiBAc2VlIG5zQmlkaVV0aWxzLmgKICAgICovCiAg
IHZvaWQgU2V0QmlkaU9wdGlvbnMoUFJVaW50MzIgYUJpZGlPcHRpb25zKQogICB7CiAgICAgbUJp
ZGlPcHRpb25zID0gYUJpZGlPcHRpb25zOwogICB9CiAKKworICAvKioKKyAgICogR2V0IHRoZSBz
YW5kYm94IGZsYWdzIGZvciB0aGlzIGRvY3VtZW50LgorICAgKiBAc2VlIG5zU2FuZGJveEZsYWdz
LmggZm9yIHRoZSBwb3NzaWJsZSBmbGFncworICAgKi8KKyAgUFJVaW50MzIgR2V0U2FuZGJveEZs
YWdzKCkgY29uc3QKKyAgeworICAgIHJldHVybiBtU2FuZGJveEZsYWdzOworICB9CisKKyAgLyoq
CisgICAqIFNldCB0aGUgc2FuZGJveCBmbGFncyBmb3IgdGhpcyBkb2N1bWVudC4KKyAgICogQHNl
ZSBuc1NhbmRib3hGbGFncy5oIGZvciB0aGUgcG9zc2libGUgZmxhZ3MKKyAgICovCisgIHZvaWQg
U2V0U2FuZGJveEZsYWdzKFBSVWludDMyIHNhbmRib3hGbGFncykKKyAgeworICAgIG1TYW5kYm94
RmxhZ3MgPSBzYW5kYm94RmxhZ3M7CisgIH0KKwogICBpbmxpbmUgbW96aWxsYTo6ZGlyZWN0aW9u
YWxpdHk6OkRpcmVjdGlvbmFsaXR5IEdldERvY3VtZW50RGlyZWN0aW9uYWxpdHkoKSB7CiAgICAg
cmV0dXJuIG1EaXJlY3Rpb25hbGl0eTsKICAgfQogICAKICAgLyoqCiAgICAqIEFjY2VzcyBIVFRQ
IGhlYWRlciBkYXRhICh0aGlzIG1heSBhbHNvIGdldCBzZXQgZnJvbSBvdGhlcgogICAgKiBzb3Vy
Y2VzLCBsaWtlIEhUTUwgTUVUQSB0YWdzKS4KICAgICovCkBAIC00NTAsMTYgKzQ2OSwyMSBAQCBw
dWJsaWM6CiAKICAgLyoqCiAgICAqIFNldCB0aGUgcGFyZW50IGRvY3VtZW50IG9mIHRoaXMgZG9j
dW1lbnQuCiAgICAqLwogICB2b2lkIFNldFBhcmVudERvY3VtZW50KG5zSURvY3VtZW50KiBhUGFy
ZW50KQogICB7CiAgICAgbVBhcmVudERvY3VtZW50ID0gYVBhcmVudDsKICAgfQorICAKKyAgLyoq
CisgICAqIEFyZSBwbHVnaW5zIGFsbG93ZWQgaW4gdGhpcyBkb2N1bWVudCA/CisgICAqLworICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEFsbG93UGx1Z2lucyAoYm9vbCogYUFsbG93UGx1Z2lucykgPSAw
OwogCiAgIC8qKgogICAgKiBTZXQgdGhlIHN1YiBkb2N1bWVudCBmb3IgYUNvbnRlbnQgdG8gYVN1
YkRvYy4KICAgICovCiAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3ViRG9jdW1lbnRGb3IoRWxlbWVu
dCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRG9j
dW1lbnQqIGFTdWJEb2MpID0gMDsKIAogICAvKioKQEAgLTE4NTMsMTYgKzE4NzcsMjEgQEAgcHJv
dGVjdGVkOgogICAvLyBJZiBtSXNTdGF0aWNEb2N1bWVudCBpcyB0cnVlLCBtT3JpZ2luYWxEb2N1
bWVudCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCiAgIC8vIGRvY3VtZW50LgogICBuc0NPTVB0cjxu
c0lEb2N1bWVudD4gbU9yaWdpbmFsRG9jdW1lbnQ7CiAKICAgLy8gVGhlIGJpZGkgb3B0aW9ucyBm
b3IgdGhpcyBkb2N1bWVudC4gIFdoYXQgdGhpcyBiaXRmaWVsZCBtZWFucyBpcwogICAvLyBkZWZp
bmVkIGluIG5zQmlkaVV0aWxzLmgKICAgUFJVaW50MzIgbUJpZGlPcHRpb25zOwogCisgIC8vIFRo
ZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2N1bWVudC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3ggYXR0cmlidXRlIG9mIHRoZQorICAvLyBhc3NvY2lhdGVkIElGUkFNRSBv
ciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYgZXhpc3RlbnQuIFRoZXNlIGFyZSBzZXQgYXQg
bG9hZCB0aW1lIGFuZAorICAvLyBhcmUgaW1tdXRhYmxlIC0gc2VlIG5zU2FuZGJveEZsYWdzLmgg
Zm9yIHRoZSBwb3NzaWJsZSBmbGFncy4KKyAgUFJVaW50MzIgbVNhbmRib3hGbGFnczsKKwogICAv
LyBUaGUgcm9vdCBkaXJlY3Rpb25hbGl0eSBvZiB0aGlzIGRvY3VtZW50LgogICBtb3ppbGxhOjpk
aXJlY3Rpb25hbGl0eTo6RGlyZWN0aW9uYWxpdHkgbURpcmVjdGlvbmFsaXR5OwogCiAgIG5zQ1N0
cmluZyBtQ29udGVudExhbmd1YWdlOwogcHJpdmF0ZToKICAgbnNDU3RyaW5nIG1Db250ZW50VHlw
ZTsKIHByb3RlY3RlZDoKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9NYWtlZmlsZS5p
biBiL2NvbnRlbnQvYmFzZS9zcmMvTWFrZWZpbGUuaW4KLS0tIGEvY29udGVudC9iYXNlL3NyYy9N
YWtlZmlsZS5pbgorKysgYi9jb250ZW50L2Jhc2Uvc3JjL01ha2VmaWxlLmluCkBAIC0zNiwxNiAr
MzYsMTcgQEAgRVhQT1JUUwkJPSBcCiAJCW5zRnJhbWVNZXNzYWdlTWFuYWdlci5oIFwKIAkJbnNB
dHRyQW5kQ2hpbGRBcnJheS5oIFwKIAkJbnNBdHRyVmFsdWUuaCBcCiAJCW5zQ3Jvc3NTaXRlTGlz
dGVuZXJQcm94eS5oIFwKIAkJbnNET01BdHRyaWJ1dGVNYXAuaCBcCiAJCW5zR2VuZXJpY0VsZW1l
bnQuaCBcCiAJCW5zTWFwcGVkQXR0cmlidXRlRWxlbWVudC5oIFwKIAkJbnNTdHlsZWRFbGVtZW50
LmggXAorICAgIG5zU2FuZGJveEZsYWdzLmggXAogCQkkKE5VTEwpCiAKIEVYUE9SVFNfTkFNRVNQ
QUNFUyA9IG1vemlsbGEvZG9tCiAKIEVYUE9SVFNfbW96aWxsYS9kb20gPSBcCiAgIExpbmsuaCBc
CiAgICQoTlVMTCkKIApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGls
cy5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50
L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29u
dGVudFV0aWxzLmNwcApAQCAtMTU0LDE2ICsxNTQsMTcgQEAgc3RhdGljIE5TX0RFRklORV9DSUQo
a1hURlNlcnZpY2VDSUQsIE5TXwogI2luY2x1ZGUgIm5zSUNoYXJzZXREZXRlY3Rvci5oIgogI2lu
Y2x1ZGUgIm5zSUNoYXJzZXREZXRlY3Rpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIm5zSVBsYXRm
b3JtQ2hhcnNldC5oIgogI2luY2x1ZGUgIm5zSUVkaXRvci5oIgogI2luY2x1ZGUgIm5zSUVkaXRv
ckRvY1NoZWxsLmgiCiAjaW5jbHVkZSAibW96aWxsYS9BdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAi
bnNJUGFyc2VyU2VydmljZS5oIgogI2luY2x1ZGUgIm5zSURPTVNjcmlwdE9iamVjdEZhY3Rvcnku
aCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaW5jbHVkZSAibnNXcmFwcGVyQ2Fj
aGVJbmxpbmVzLmgiCiAKIGV4dGVybiAiQyIgaW50IE1PWl9YTUxUcmFuc2xhdGVFbnRpdHkoY29u
c3QgY2hhciogcHRyLCBjb25zdCBjaGFyKiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBuZXh0LCBQUlVuaWNoYXIqIHJlc3VsdCk7CiBleHRl
cm4gIkMiIGludCBNT1pfWE1MQ2hlY2tRTmFtZShjb25zdCBjaGFyKiBwdHIsIGNvbnN0IGNoYXIq
IGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuc19hd2FyZSwgY29u
c3QgY2hhcioqIGNvbG9uKTsKIApAQCAtOTE3LDE2ICs5MTgsNjMgQEAgbnNDb250ZW50VXRpbHM6
OkdldFBhcnNlclNlcnZpY2UoKQogICAgIGlmIChOU19GQUlMRUQocnYpKSB7CiAgICAgICBzUGFy
c2VyU2VydmljZSA9IG51bGxwdHI7CiAgICAgfQogICB9CiAKICAgcmV0dXJuIHNQYXJzZXJTZXJ2
aWNlOwogfQogCisvKioKKyAqIEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc2FuZGJv
eCBhdHRyaWJ1dGUgKG9mIGFuIDxpZnJhbWU+IG9yCisgKiBhIENTUCBkaXJlY3RpdmUpIGFuZCBj
b252ZXJ0cyBpdCB0byB0aGUgc2V0IG9mIGZsYWdzIHVzZWQgaW50ZXJuYWxseS4KKyAqCisgKiBA
cGFyYW0gYUF0dHJpYnV0ZSAgICB0aGUgdmFsdWUgb2YgdGhlIHNhbmRib3ggYXR0cmlidXRlCisg
KiBAcmV0dXJuICAgICAgICAgICAgICB0aGUgc2V0IG9mIGZsYWdzCisgKi8KK1BSVWludDMyCitu
c0NvbnRlbnRVdGlsczo6UGFyc2VTYW5kYm94QXR0cmlidXRlVG9GbGFncyhjb25zdCBuc0FTdHJp
bmcmIGFTYW5kYm94QXR0clZhbHVlKQoreworICAvLyBJZiB0aGVyZSdzIGEgc2FuZGJveCBhdHRy
aWJ1dGUgYXQgYWxsIChhbmQgdGhlcmUgaXMgaWYgdGhpcyBpcyBiZWluZworICAvLyBjYWxsZWQp
LCBzdGFydCBvZmYgYnkgc2V0dGluZyBhbGwgdGhlIHJlc3RyaWN0aW9uIGZsYWdzLgorICBQUlVp
bnQzMiBvdXQgPSBTQU5EQk9YRURfTkFWSUdBVElPTiB8CisgICAgICAgICAgICAgICAgIFNBTkRC
T1hFRF9UT1BMRVZFTF9OQVZJR0FUSU9OIHwKKyAgICAgICAgICAgICAgICAgU0FOREJPWEVEX1BM
VUdJTlMgfAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURfT1JJR0lOIHwKKyAgICAgICAgICAg
ICAgICAgU0FOREJPWEVEX0ZPUk1TIHwKKyAgICAgICAgICAgICAgICAgU0FOREJPWEVEX1NDUklQ
VFMgfAorICAgICAgICAgICAgICAgICBTQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTOworCisg
IGlmICghYVNhbmRib3hBdHRyVmFsdWUuSXNFbXB0eSgpKSB7CisgICAgLy8gVGhlIHNlcGFyYXRv
ciBvcHRpb25hbCBmbGFnIGlzIHVzZWQgYmVjYXVzZSB0aGUgSFRNTDUgc3BlYyBzYXlzIGFueQor
ICAgIC8vIHdoaXRlc3BhY2UgaXMgb2sgYXMgYSBzZXBhcmF0b3IsIHdoaWNoIGlzIHdoYXQgdGhp
cyBkb2VzLgorICAgIEhUTUxTcGxpdE9uU3BhY2VzVG9rZW5pemVyIHRva2VuaXplcihhU2FuZGJv
eEF0dHJWYWx1ZSwgJyAnLAorICAgICAgbnNDaGFyU2VwYXJhdGVkVG9rZW5pemVyVGVtcGxhdGU8
bnNDb250ZW50VXRpbHM6OklzSFRNTFdoaXRlc3BhY2U+OjpTRVBBUkFUT1JfT1BUSU9OQUwpOwor
CisgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKKyAgICAgIG5zRGVwZW5k
ZW50U3Vic3RyaW5nIHRva2VuID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworCisgICAgICBpZiAo
dG9rZW4uTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbCgiYWxsb3ctc2FtZS1vcmlnaW4iKSkgeworICAg
ICAgICBvdXQgJj0gflNBTkRCT1hFRF9PUklHSU47CisgICAgICB9IGVsc2UgaWYgKHRva2VuLkxv
d2VyQ2FzZUVxdWFsc0xpdGVyYWwoImFsbG93LWZvcm1zIikpIHsKKyAgICAgICAgb3V0ICY9IH5T
QU5EQk9YRURfRk9STVM7CisgICAgICB9IGVsc2UgaWYgKHRva2VuLkxvd2VyQ2FzZUVxdWFsc0xp
dGVyYWwoImFsbG93LXNjcmlwdHMiKSkgeworICAgICAgICAvLyBhbGxvdy1zY3JpcHRzIHJlbW92
ZXMgYm90aCBTQU5EQk9YRURfU0NSSVBUUyBhbmQKKyAgICAgICAgLy8gU0FOREJPWEVEX0FVVE9N
QVRJQ19GRUFUVVJFUy4KKyAgICAgICAgb3V0ICY9IH5TQU5EQk9YRURfU0NSSVBUUzsKKyAgICAg
ICAgb3V0ICY9IH5TQU5EQk9YRURfQVVUT01BVElDX0ZFQVRVUkVTOworICAgICAgfSBlbHNlIGlm
ICh0b2tlbi5Mb3dlckNhc2VFcXVhbHNMaXRlcmFsKCJhbGxvdy10b3AtbmF2aWdhdGlvbiIpKSB7
CisgICAgICAgIG91dCAmPSB+U0FOREJPWEVEX1RPUExFVkVMX05BVklHQVRJT047CisgICAgICB9
CisgICAgfQorICB9CisKKyAgcmV0dXJuIG91dDsKK30KKwogI2lmZGVmIE1PWl9YVEYKIG5zSVhU
RlNlcnZpY2UqCiBuc0NvbnRlbnRVdGlsczo6R2V0WFRGU2VydmljZSgpCiB7CiAgIGlmICghc1hU
RlNlcnZpY2UpIHsKICAgICBuc3Jlc3VsdCBydiA9IENhbGxHZXRTZXJ2aWNlKGtYVEZTZXJ2aWNl
Q0lELCAmc1hURlNlcnZpY2UpOwogICAgIGlmIChOU19GQUlMRUQocnYpKSB7CiAgICAgICBzWFRG
U2VydmljZSA9IG51bGxwdHI7CkBAIC02NjA1LDE3ICs2NjUzLDE4IEBAIG5zQ29udGVudFV0aWxz
OjpVUklJbmhlcml0c1NlY3VyaXR5Q29udGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YVJlc3VsdCk7CiB9CiAKIC8vIHN0YXRpYwogYm9vbAogbnNDb250ZW50VXRpbHM6OlNldFVwQ2hh
bm5lbE93bmVyKG5zSVByaW5jaXBhbCogYUxvYWRpbmdQcmluY2lwYWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5lbCogYUNoYW5uZWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiBhVVJJLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYVNldFVwRm9yQWJvdXRCbGFuaykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFTZXRVcEZvckFib3V0QmxhbmssCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhRm9yY2VPd25lcikKIHsKICAgLy8KICAgLy8gU2V0
IHRoZSBvd25lciBvZiB0aGUgY2hhbm5lbCwgYnV0IG9ubHkgZm9yIGNoYW5uZWxzIHRoYXQgY2Fu
J3QKICAgLy8gcHJvdmlkZSB0aGVpciBvd24gc2VjdXJpdHkgY29udGV4dC4KICAgLy8KICAgLy8g
WFhYOiBJdCBzZWVtcyB3cm9uZyB0aGF0IHRoZSBvd25lciBpcyBpZ25vcmVkIC0gZXZlbiBpZiBv
bmUgaXMKICAgLy8gICAgICBzdXBwbGllZCkgdW5sZXNzIHRoZSBVUkkgaXMgamF2YXNjcmlwdCBv
ciBkYXRhIG9yIGFib3V0OmJsYW5rLgogICAvLyBYWFg6IElmIHRoaXMgaXMgZXZlciBjaGFuZ2Vk
LCBjaGVjayBhbGwgY2FsbGVycyBmb3Igd2hhdCBvd25lcnMKQEAgLTY2MjMsMjMgKzY2NzIsMzUg
QEAgbnNDb250ZW50VXRpbHM6OlNldFVwQ2hhbm5lbE93bmVyKG5zSVByaQogICAvLyAgICAgIGNv
bW1lbnRzIGluIG5zRG9jU2hlbGw6OkxvYWRVUkkgd2hlcmUgd2UgZmFsbCBiYWNrIG9uCiAgIC8v
ICAgICAgaW5oZXJpdGluZyB0aGUgb3duZXIgaWYgY2FsbGVkIGZyb20gY2hyb21lLiAgVGhhdCB3
b3VsZCBiZQogICAvLyAgICAgIHZlcnkgd3JvbmcgaWYgdGhpcyBjb2RlIGNoYW5nZWQgYW55dGhp
bmcgYnV0IGNoYW5uZWxzIHRoYXQKICAgLy8gICAgICBjYW4ndCBwcm92aWRlIHRoZWlyIG93biBz
ZWN1cml0eSBjb250ZXh0IQogICAvLwogICAvLyAgICAgIChDdXJyZW50bHkgY2hyb21lIFVSSXMg
c2V0IHRoZSBvd25lciB3aGVuIHRoZXkgYXJlIGNyZWF0ZWQhCiAgIC8vICAgICAgU28gc2V0dGlu
ZyBhIE5VTEwgb3duZXIgd291bGQgYmUgYmFkISkKICAgLy8KKyAgLy8gSWYgYUZvcmNlT3duZXIg
aXMgdHJ1ZSwgdGhlIG93bmVyIHdpbGwgYmUgc2V0LCBldmVuIGZvciBhIGNoYW5uZWwgdGhhdAor
ICAvLyBjYW4gcHJvdmlkZSBpdHMgb3duIHNlY3VyaXR5IGNvbnRleHQuIFRoaXMgaXMgdXNlZCBm
b3IgdGhlIEhUTUw1IElGUkFNRQorICAvLyBzYW5kYm94IGF0dHJpYnV0ZSwgc28gd2UgY2FuIGZv
cmNlIHRoZSBjaGFubmVsIChhbmQgaXRzIGRvY3VtZW50KSB0bworICAvLyBleHBsaWNpdGx5IGhh
dmUgYSBudWxsIHByaW5jaXBhbC4KICAgYm9vbCBpbmhlcml0OwogICAvLyBXZSBleHBlY3QgVVJJ
SW5oZXJpdHNTZWN1cml0eUNvbnRleHQgdG8gcmV0dXJuIHN1Y2Nlc3MgZm9yIGFuCiAgIC8vIGFi
b3V0OmJsYW5rIFVSSSwgc28gZG9uJ3QgY2FsbCBOU19Jc0Fib3V0QmxhbmsoKSBpZiB0aGlzIGNh
bGwgZmFpbHMuCiAgIC8vIFRoaXMgY29uZGl0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSBvbmUgaW4g
bnNEb2NTaGVsbDo6SW50ZXJuYWxMb2FkIHdoZXJlCiAgIC8vIHdlJ3JlIGNoZWNraW5nIGZvciB0
aGluZ3MgdGhhdCB3aWxsIHVzZSB0aGUgb3duZXIuCi0gIGlmIChOU19TVUNDRUVERUQoVVJJSW5o
ZXJpdHNTZWN1cml0eUNvbnRleHQoYVVSSSwgJmluaGVyaXQpKSAmJgotICAgICAgKGluaGVyaXQg
fHwgKGFTZXRVcEZvckFib3V0QmxhbmsgJiYgTlNfSXNBYm91dEJsYW5rKGFVUkkpKSkpIHsKKyAg
aWYgKGFGb3JjZU93bmVyIHx8ICgoTlNfU1VDQ0VFREVEKFVSSUluaGVyaXRzU2VjdXJpdHlDb250
ZXh0KGFVUkksICZpbmhlcml0KSkgJiYKKyAgICAgIChpbmhlcml0IHx8IChhU2V0VXBGb3JBYm91
dEJsYW5rICYmIE5TX0lzQWJvdXRCbGFuayhhVVJJKSkpKSkpIHsKKyNpZmRlZiBERUJVRworICAg
IC8vIEFzc2VydCB0aGF0IGFGb3JjZU93bmVyIGlzIG9ubHkgc2V0IGZvciBudWxsIHByaW5jaXBh
bHMKKyAgICBpZiAoYUZvcmNlT3duZXIpIHsKKyAgICAgIG5zQ09NUHRyPG5zSVVSST4gb3duZXJV
Ukk7CisgICAgICBuc3Jlc3VsdCBydiA9IGFMb2FkaW5nUHJpbmNpcGFsLT5HZXRVUkkoZ2V0dGVy
X0FkZFJlZnMob3duZXJVUkkpKTsKKyAgICAgIE1PWl9BU1NFUlQoTlNfU1VDQ0VFREVEKHJ2KSAm
JiBTY2hlbWVJcyhvd25lclVSSSwgTlNfTlVMTFBSSU5DSVBBTF9TQ0hFTUUpKTsKKyAgICB9Cisj
ZW5kaWYKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIoYUxvYWRpbmdQcmluY2lwYWwpOwogICAgIHJl
dHVybiB0cnVlOwogICB9CiAKICAgLy8KICAgLy8gZmlsZTogdXJpIHNwZWNpYWwtY2FzaW5nCiAg
IC8vCiAgIC8vIElmIHRoaXMgaXMgYSBmaWxlOiBsb2FkIG9wZW5lZCBmcm9tIGFub3RoZXIgZmls
ZTogdGhlbiBpdCBtYXkgbmVlZApkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3Vt
ZW50LmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9i
YXNlL3NyYy9uc0RvY3VtZW50LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQu
Y3BwCkBAIC0xNjMsMTYgKzE2MywxNyBAQAogI2luY2x1ZGUgIm1vemlsbGEvZG9tL0xpbmsuaCIK
ICNpbmNsdWRlICJuc1hVTEFwcEFQSS5oIgogI2luY2x1ZGUgIm5zRE9NVG91Y2hFdmVudC5oIgog
CiAjaW5jbHVkZSAibW96aWxsYS9QcmVmZXJlbmNlcy5oIgogCiAjaW5jbHVkZSAiaW1nSUxvYWRl
ci5oIgogI2luY2x1ZGUgIm5zV3JhcHBlckNhY2hlSW5saW5lcy5oIgorI2luY2x1ZGUgIm5zU2Fu
ZGJveEZsYWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNl
IG1vemlsbGE6OmRvbTsKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkaXJlY3Rpb25hbGl0eTsK
IAogdHlwZWRlZiBuc1RBcnJheTxMaW5rKj4gTGlua0FycmF5OwogCiAvLyBSZWZlcmVuY2UgdG8g
dGhlIGRvY3VtZW50IHdoaWNoIHJlcXVlc3RlZCBET00gZnVsbC1zY3JlZW4gbW9kZS4KQEAgLTIz
OTksMTYgKzI0MDAsMjUgQEAgbnNEb2N1bWVudDo6U3RhcnREb2N1bWVudExvYWQoY29uc3QgY2hh
cgogICAgIEZpbmRDaGFySW5SZWFkYWJsZSgnOycsIHNlbWljb2xvbiwgZW5kKTsKICAgICBTZXRD
b250ZW50VHlwZUludGVybmFsKFN1YnN0cmluZyhzdGFydCwgc2VtaWNvbG9uKSk7CiAgIH0KIAog
ICBSZXRyaWV2ZVJlbGV2YW50SGVhZGVycyhhQ2hhbm5lbCk7CiAKICAgbUNoYW5uZWwgPSBhQ2hh
bm5lbDsKIAorICAvLyBJZiB0aGlzIGRvY3VtZW50IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRvY3No
ZWxsLCBjb3B5IGl0cyBzYW5kYm94IGZsYWdzCisgIC8vIHRvIHRoZSBkb2N1bWVudC4gVGhlc2Ug
YXJlIGltbXV0YWJsZSBhZnRlciBiZWluZyBzZXQgaGVyZS4KKyAgbnNDT01QdHI8bnNJRG9jU2hl
bGw+IGRvY1NoZWxsID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNvbnRhaW5lcik7CisKKyAgaWYgKGRv
Y1NoZWxsKSB7CisgICAgbnNyZXN1bHQgcnYgPSBkb2NTaGVsbC0+R2V0U2FuZGJveEZsYWdzKCZt
U2FuZGJveEZsYWdzKTsKKyAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworICB9CisKICAg
bnNyZXN1bHQgcnYgPSBJbml0Q1NQKCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAK
ICAgcmV0dXJuIE5TX09LOwogfQogCiBuc3Jlc3VsdAogbnNEb2N1bWVudDo6SW5pdENTUCgpCkBA
IC0yNzA3LDE2ICsyNzE3LDM0IEBAIG5zRG9jdW1lbnQ6OlNldENvbnRlbnRUeXBlKGNvbnN0IG5z
QVN0cmkKIHsKICAgTlNfQVNTRVJUSU9OKEdldENvbnRlbnRUeXBlSW50ZXJuYWwoKS5Jc0VtcHR5
KCkgfHwKICAgICAgICAgICAgICAgIEdldENvbnRlbnRUeXBlSW50ZXJuYWwoKS5FcXVhbHMoTlNf
Q29udmVydFVURjE2dG9VVEY4KGFDb250ZW50VHlwZSkpLAogICAgICAgICAgICAgICAgIkRvIHlv
dSByZWFsbHkgd2FudCB0byBjaGFuZ2UgdGhlIGNvbnRlbnQtdHlwZT8iKTsKIAogICBTZXRDb250
ZW50VHlwZUludGVybmFsKE5TX0NvbnZlcnRVVEYxNnRvVVRGOChhQ29udGVudFR5cGUpKTsKIH0K
IAorbnNyZXN1bHQKK25zRG9jdW1lbnQ6OkdldEFsbG93UGx1Z2lucyhib29sICogYUFsbG93UGx1
Z2lucykKK3sKKyAgLy8gRmlyc3QsIHdlIGFzayBvdXIgZG9jc2hlbGwgaWYgaXQgYWxsb3dzIHBs
dWdpbnMuCisgIG5zQ09NUHRyPG5zSURvY1NoZWxsPiBkb2NTaGVsbCA9IGRvX1F1ZXJ5UmVmZXJl
bnQobURvY3VtZW50Q29udGFpbmVyKTsKKworICBpZiAoZG9jU2hlbGwpIHsKKyAgICBkb2NTaGVs
bC0+R2V0QWxsb3dQbHVnaW5zKGFBbGxvd1BsdWdpbnMpOworICAgICAgCisgICAgLy8gSWYgdGhl
IGRvY3NoZWxsIGFsbG93cyBwbHVnaW5zLCB3ZSBjaGVjayB3aGV0aGVyCisgICAgLy8gd2UgYXJl
IHNhbmRib3hlZCBhbmQgcGx1Z2lucyBzaG91bGQgbm90IGJlIGFsbG93ZWQuCisgICAgaWYgKCph
QWxsb3dQbHVnaW5zKQorICAgICAgKmFBbGxvd1BsdWdpbnMgPSAhKG1TYW5kYm94RmxhZ3MgJiBT
QU5EQk9YRURfUExVR0lOUyk7CisgIH0KKworICByZXR1cm4gTlNfT0s7Cit9CisKIC8qIFJldHVy
biB0cnVlIGlmIHRoZSBkb2N1bWVudCBpcyBpbiB0aGUgZm9jdXNlZCB0b3AtbGV2ZWwgd2luZG93
LCBhbmQgaXMgYW4KICAqIGFuY2VzdG9yIG9mIHRoZSBmb2N1c2VkIERPTVdpbmRvdy4gKi8KIE5T
X0lNRVRIT0RJTVAKIG5zRG9jdW1lbnQ6Okhhc0ZvY3VzKGJvb2wqIGFSZXN1bHQpCiB7CiAgICph
UmVzdWx0ID0gZmFsc2U7CiAKICAgbnNJRm9jdXNNYW5hZ2VyKiBmbSA9IG5zRm9jdXNNYW5hZ2Vy
OjpHZXRGb2N1c01hbmFnZXIoKTsKQEAgLTY0MDIsMTYgKzY0MzAsMjIgQEAgbnNEb2N1bWVudDo6
R2V0WE1MRGVjbGFyYXRpb24obnNBU3RyaW5nJgogICAgICAgYVN0YW5kYWxvbmUuQXNzaWduTGl0
ZXJhbCgibm8iKTsKICAgICB9CiAgIH0KIH0KIAogYm9vbAogbnNEb2N1bWVudDo6SXNTY3JpcHRF
bmFibGVkKCkKIHsKKyAgLy8gSWYgdGhpcyBkb2N1bWVudCBpcyBzYW5kYm94ZWQgd2l0aG91dCAn
YWxsb3ctc2NyaXB0cycKKyAgLy8gc2NyaXB0IGlzIG5vdCBlbmFibGVkCisgIGlmIChtU2FuZGJv
eEZsYWdzICYgU0FOREJPWEVEX1NDUklQVFMpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKwog
ICBuc0NPTVB0cjxuc0lTY3JpcHRTZWN1cml0eU1hbmFnZXI+IHNtKGRvX0dldFNlcnZpY2UoTlNf
U0NSSVBUU0VDVVJJVFlNQU5BR0VSX0NPTlRSQUNUSUQpKTsKICAgTlNfRU5TVVJFX1RSVUUoc20s
IGZhbHNlKTsKIAogICBuc0lTY3JpcHRHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdldFNj
cmlwdEdsb2JhbE9iamVjdCgpOwogICBOU19FTlNVUkVfVFJVRShnbG9iYWxPYmplY3QsIGZhbHNl
KTsKIAogICBuc0lTY3JpcHRDb250ZXh0ICpzY3JpcHRDb250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5H
ZXRDb250ZXh0KCk7CiAgIE5TX0VOU1VSRV9UUlVFKHNjcmlwdENvbnRleHQsIGZhbHNlKTsKZGlm
ZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5oIGIvY29udGVudC9iYXNlL3Ny
Yy9uc0RvY3VtZW50LmgKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmgKKysrIGIv
Y29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmgKQEAgLTU2MiwxNiArNTYyLDE4IEBAIHB1Ymxp
YzoKICAgICogc2hhcmVkIGFtb25nIG11bHRpcGxlIHByZXNlbnRhdGlvbiBzaGVsbCdzKS4KICAg
ICovCiAgIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlU2hlbGwobnNQcmVzQ29udGV4dCogYUNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVmlld01hbmFnZXIqIGFWaWV3
TWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1N0eWxlU2V0KiBhU3R5
bGVTZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsKiogYUlu
c3RhbmNlUHRyUmVzdWx0KTsKICAgdmlydHVhbCB2b2lkIERlbGV0ZVNoZWxsKCk7CiAKKyAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRBbGxvd1BsdWdpbnMoYm9vbCogYUFsbG93UGx1Z2lucyk7CisKICAg
dmlydHVhbCBuc3Jlc3VsdCBTZXRTdWJEb2N1bWVudEZvcihFbGVtZW50KiBhQ29udGVudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lEb2N1bWVudCogYVN1YkRvYyk7
CiAgIHZpcnR1YWwgbnNJRG9jdW1lbnQqIEdldFN1YkRvY3VtZW50Rm9yKG5zSUNvbnRlbnQqIGFD
b250ZW50KSBjb25zdDsKICAgdmlydHVhbCBFbGVtZW50KiBGaW5kQ29udGVudEZvclN1YkRvY3Vt
ZW50KG5zSURvY3VtZW50ICphRG9jdW1lbnQpIGNvbnN0OwogICB2aXJ0dWFsIEVsZW1lbnQqIEdl
dFJvb3RFbGVtZW50SW50ZXJuYWwoKSBjb25zdDsKIAogICAvKioKICAgICogR2V0IHRoZSBzdHls
ZSBzaGVldHMgb3duZWQgYnkgdGhpcyBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFz
ZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zRnJhbWVMb2FkZXIu
Y3BwCi0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNGcmFtZUxvYWRlci5jcHAKKysrIGIvY29udGVu
dC9iYXNlL3NyYy9uc0ZyYW1lTG9hZGVyLmNwcApAQCAtNzksMTYgKzc5LDE5IEBACiAjaW5jbHVk
ZSAibW96aWxsYS9HdWFyZE9iamVjdHMuaCIKICNpbmNsdWRlICJtb3ppbGxhL1ByZWZlcmVuY2Vz
LmgiCiAjaW5jbHVkZSAibW96aWxsYS91bnVzZWQuaCIKICNpbmNsdWRlICJtb3ppbGxhL2RvbS9F
bGVtZW50LmgiCiAjaW5jbHVkZSAibW96aWxsYS9sYXlvdXQvUmVuZGVyRnJhbWVQYXJlbnQuaCIK
ICNpbmNsdWRlICJuc0lBcHBzU2VydmljZS5oIgogCiAjaW5jbHVkZSAianNhcGkuaCIKKyNpbmNs
dWRlICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAibnNTYW5kYm94RmxhZ3MuaCIK
KwogI2luY2x1ZGUgIm1vemlsbGEvZG9tL1N0cnVjdHVyZWRDbG9uZVV0aWxzLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBtb3ppbGxhOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmRvbTsKIHVzaW5n
IG5hbWVzcGFjZSBtb3ppbGxhOjpsYXllcnM7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6bGF5
b3V0OwogdHlwZWRlZiBGcmFtZU1ldHJpY3M6OlZpZXdJRCBWaWV3SUQ7CiAKQEAgLTQ0MywxNiAr
NDQ2LDQwIEBAIG5zRnJhbWVMb2FkZXI6OlJlYWxseVN0YXJ0TG9hZGluZ0ludGVybmEKICAgLy8g
SnVzdCB0byBiZSBzYWZlLCByZWNoZWNrIHVyaS4KICAgcnYgPSBDaGVja1VSSUxvYWQobVVSSVRv
TG9hZCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbnNDT01QdHI8bnNJRG9j
U2hlbGxMb2FkSW5mbz4gbG9hZEluZm87CiAgIG1Eb2NTaGVsbC0+Q3JlYXRlTG9hZEluZm8oZ2V0
dGVyX0FkZFJlZnMobG9hZEluZm8pKTsKICAgTlNfRU5TVVJFX1RSVUUobG9hZEluZm8sIE5TX0VS
Uk9SX0ZBSUxVUkUpOwogCisgIC8vIElzIHRoaXMgYW4gPGlmcmFtZT4gd2l0aCBhIHNhbmRib3gg
YXR0cmlidXRlIG9yIGEgcGFyZW50IHdoaWNoIGlzCisgIC8vIHNhbmRib3hlZCA/CisgIG5zSFRN
TElGcmFtZUVsZW1lbnQqIGlmcmFtZSA9CisgICAgbnNIVE1MSUZyYW1lRWxlbWVudDo6RnJvbUNv
bnRlbnQobU93bmVyQ29udGVudCk7CisKKyAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKwor
ICBpZiAoaWZyYW1lKSB7CisgICAgc2FuZGJveEZsYWdzID0gaWZyYW1lLT5HZXRTYW5kYm94Rmxh
Z3MoKTsKKworICAgIFBSVWludDMyIHBhcmVudFNhbmRib3hGbGFncyA9IGlmcmFtZS0+T3duZXJE
b2MoKS0+R2V0U2FuZGJveEZsYWdzKCk7CisKKyAgICBpZiAoc2FuZGJveEZsYWdzIHx8IHBhcmVu
dFNhbmRib3hGbGFncykgeworICAgICAgLy8gVGhlIGNoaWxkIGNhbiBvbmx5IGFkZCByZXN0cmlj
dGlvbnMsIG5vdCByZW1vdmUgdGhlbS4KKyAgICAgIHNhbmRib3hGbGFncyB8PSBwYXJlbnRTYW5k
Ym94RmxhZ3M7CisKKyAgICAgIG1Eb2NTaGVsbC0+U2V0U2FuZGJveEZsYWdzKHNhbmRib3hGbGFn
cyk7CisgICAgfQorICB9CisKKyAgLy8gSWYgdGhpcyBpcyBhbiA8aWZyYW1lPiBhbmQgaXQncyBz
YW5kYm94ZWQgd2l0aCByZXNwZWN0IHRvIG9yaWdpbgorICAvLyB3ZSB3aWxsIHNldCBpdCB1cCB3
aXRoIGEgbnVsbCBwcmluY2lwYWwgbGF0ZXIgaW4gbnNEb2NTaGVsbDo6RG9VUklMb2FkLgorICAv
LyBXZSBkbyBpdCB0aGVyZSB0byBjb3JyZWN0bHkgc2FuZGJveCBjb250ZW50IHRoYXQgd2FzIGxv
YWRlZCBpbnRvCisgIC8vIHRoZSBpZnJhbWUgdmlhIG90aGVyIG1ldGhvZHMgdGhhbiB0aGUgc3Jj
IGF0dHJpYnV0ZS4KICAgLy8gV2UnbGwgdXNlIG91ciBwcmluY2lwYWwsIG5vdCB0aGF0IG9mIHRo
ZSBkb2N1bWVudCBsb2FkZWQgaW5zaWRlIHVzLiAgVGhpcwogICAvLyBpcyB2ZXJ5IGltcG9ydGFu
dDsgbmVlZGVkIHRvIHByZXZlbnQgWFNTIGF0dGFja3Mgb24gZG9jdW1lbnRzIGxvYWRlZCBpbgog
ICAvLyBzdWJmcmFtZXMhCiAgIGxvYWRJbmZvLT5TZXRPd25lcihtT3duZXJDb250ZW50LT5Ob2Rl
UHJpbmNpcGFsKCkpOwogCiAgIG5zQ09NUHRyPG5zSVVSST4gcmVmZXJyZXI7CiAgIHJ2ID0gbU93
bmVyQ29udGVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVyX0FkZFJlZnMocmVmZXJy
ZXIpKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
YmFzZS9zcmMvbnNHa0F0b21MaXN0LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5o
Ci0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0b21MaXN0LmgKKysrIGIvY29udGVudC9iYXNl
L3NyYy9uc0drQXRvbUxpc3QuaApAQCAtNjUsMTcgKzY1LDIxIEBAIEdLX0FUT00oYWN0dWF0ZSwg
ImFjdHVhdGUiKQogR0tfQVRPTShhZGRyZXNzLCAiYWRkcmVzcyIpCiBHS19BVE9NKGFmdGVyLCAi
YWZ0ZXIiKQogR0tfQVRPTShhZnRlcl9lbmQsICJhZnRlcl9lbmQiKQogR0tfQVRPTShhZnRlcl9z
dGFydCwgImFmdGVyX3N0YXJ0IikKIEdLX0FUT00oYWxpZ24sICJhbGlnbiIpCiBHS19BVE9NKGFs
aW5rLCAiYWxpbmsiKQogR0tfQVRPTShhbGwsICJhbGwiKQogR0tfQVRPTShhbGxvd2V2ZW50cywg
ImFsbG93ZXZlbnRzIikKK0dLX0FUT00oYWxsb3dmb3JtcywgImFsbG93LWZvcm1zIikKIEdLX0FU
T00oYWxsb3duZWdhdGl2ZWFzc2VydGlvbnMsICJhbGxvd25lZ2F0aXZlYXNzZXJ0aW9ucyIpCitH
S19BVE9NKGFsbG93c2FtZW9yaWdpbiwgImFsbG93LXNhbWUtb3JpZ2luIikKK0dLX0FUT00oYWxs
b3dzY3JpcHRzLCAiYWxsb3ctc2NyaXB0cyIpCitHS19BVE9NKGFsbG93dG9wbmF2aWdhdGlvbiwg
ImFsbG93LXRvcC1uYXZpZ2F0aW9uIikKIEdLX0FUT00oYWxsb3d1bnRydXN0ZWQsICJhbGxvd3Vu
dHJ1c3RlZCIpCiBHS19BVE9NKGFsdCwgImFsdCIpCiBHS19BVE9NKGFsdGVybmF0ZSwgImFsdGVy
bmF0ZSIpCiBHS19BVE9NKGFsd2F5cywgImFsd2F5cyIpCiBHS19BVE9NKGFuY2VzdG9yLCAiYW5j
ZXN0b3IiKQogR0tfQVRPTShhbmNlc3Rvck9yU2VsZiwgImFuY2VzdG9yLW9yLXNlbGYiKQogR0tf
QVRPTShfYW5kLCAiYW5kIikKIEdLX0FUT00oYW55LCAiYW55IikKQEAgLTg0MiwxNiArODQ2LDE3
IEBAIEdLX0FUT00ocm93c3BhbiwgInJvd3NwYW4iKQogR0tfQVRPTShycCwgInJwIikKIEdLX0FU
T00ocnQsICJydCIpCiBHS19BVE9NKHJ0bCwgInJ0bCIpCiBHS19BVE9NKHJ1YnksICJydWJ5IikK
IEdLX0FUT00ocnVsZSwgInJ1bGUiKQogR0tfQVRPTShydWxlcywgInJ1bGVzIikKIEdLX0FUT00o
cywgInMiKQogR0tfQVRPTShzYW1wLCAic2FtcCIpCitHS19BVE9NKHNhbmRib3gsICJzYW5kYm94
IikKIEdLX0FUT00oc2JhdHRyLCAic2JhdHRyIikKIEdLX0FUT00oc2NhbGUsICJzY2FsZSIpCiBH
S19BVE9NKHNjYW4sICJzY2FuIikKIEdLX0FUT00oc2NoZW1lLCAic2NoZW1lIikKIEdLX0FUT00o
c2NvcGUsICJzY29wZSIpCiBHS19BVE9NKHNjb3BlZCwgInNjb3BlZCIpCiBHS19BVE9NKHNjcmVl
biwgInNjcmVlbiIpCiBHS19BVE9NKHNjcmVlblgsICJzY3JlZW5YIikKZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3MuaCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNTYW5k
Ym94RmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvYmFzZS9zcmMvbnNTYW5kYm94RmxhZ3MuaApAQCAtMCwwICsxLDU4IEBACisvKiAtKi0gTW9k
ZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZz
ZXQ6IDIgLSotICovDQorLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhl
IHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYw0KKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBj
b3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwNCisgKiBZ
b3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLw0KKw0K
Ky8qDQorICogQ29uc3RhbnQgZmxhZ3MgdGhhdCBkZXNjcmliZSBob3cgYSBkb2N1bWVudCBpcyBz
YW5kYm94ZWQgYWNjb3JkaW5nIHRvIHRoZQ0KKyAqIEhUTUw1IHNwZWMuDQorICovDQorDQorI2lm
bmRlZiBuc1NhbmRib3hGbGFnc19oX19fDQorI2RlZmluZSBuc1NhbmRib3hGbGFnc19oX19fDQor
DQorLyoqDQorICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIGJy
b3dzaW5nIGNvbnRleHRzIG90aGVyIHRoYW4NCisgKiB0aGUgc2FuZGJveGVkIGJyb3dzaW5nIGNv
bnRleHQgaXRzZWxmIChvciBicm93c2luZyBjb250ZXh0cyBmdXJ0aGVyDQorICogbmVzdGVkIGlu
c2lkZSBpdCksIGFuZCB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQuDQorICovDQorY29u
c3QgdW5zaWduZWQgbG9uZyBTQU5EQk9YRURfTkFWSUdBVElPTiAgPSAweDE7DQorDQorLyoqDQor
ICogVGhpcyBmbGFnIHByZXZlbnRzIGNvbnRlbnQgZnJvbSBuYXZpZ2F0aW5nIHRoZWlyIHRvcC1s
ZXZlbCBicm93c2luZw0KKyAqIGNvbnRleHQuDQorICovDQorY29uc3QgdW5zaWduZWQgbG9uZyBT
QU5EQk9YRURfVE9QTEVWRUxfTkFWSUdBVElPTiA9IDB4MjsNCisNCisvKioNCisgKiBUaGlzIGZs
YWcgcHJldmVudHMgY29udGVudCBmcm9tIGluc3RhbnRpYXRpbmcgcGx1Z2lucywgd2hldGhlciB1
c2luZyB0aGUNCisgKiBlbWJlZCBlbGVtZW50LCB0aGUgb2JqZWN0IGVsZW1lbnQsIHRoZSBhcHBs
ZXQgZWxlbWVudCwgb3IgdGhyb3VnaA0KKyAqIG5hdmlnYXRpb24gb2YgYSBuZXN0ZWQgYnJvd3Np
bmcgY29udGV4dCwgdW5sZXNzIHRob3NlIHBsdWdpbnMgY2FuIGJlDQorICogc2VjdXJlZC4NCisg
Ki8NCitjb25zdCB1bnNpZ25lZCBsb25nIFNBTkRCT1hFRF9QTFVHSU5TID0gMHg0Ow0KKw0KKy8q
Kg0KKyAqIFRoaXMgZmxhZyBmb3JjZXMgY29udGVudCBpbnRvIGEgdW5pcXVlIG9yaWdpbiwgdGh1
cyBwcmV2ZW50aW5nIGl0IGZyb20NCisgKiBhY2Nlc3Npbmcgb3RoZXIgY29udGVudCBmcm9tIHRo
ZSBzYW1lIG9yaWdpbi4NCisgKiBUaGlzIGZsYWcgYWxzbyBwcmV2ZW50cyBzY3JpcHQgZnJvbSBy
ZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byB0aGUNCisgKiBkb2N1bWVudC5jb29raWUgSURMIGF0
dHJpYnV0ZSwgYW5kIGJsb2NrcyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLg0KKyAqLw0KK2NvbnN0
IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX09SSUdJTiA9IDB4ODsNCisNCisvKioNCisgKiBUaGlz
IGZsYWcgYmxvY2tzIGZvcm0gc3VibWlzc2lvbi4NCisgKi8NCitjb25zdCB1bnNpZ25lZCBsb25n
IFNBTkRCT1hFRF9GT1JNUyA9IDB4MTA7DQorDQorLyoqDQorICogVGhpcyBmbGFnIGJsb2NrcyBz
Y3JpcHQgZXhlY3V0aW9uLg0KKyAqLw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX1ND
UklQVFMgPSAweDIwOw0KKw0KKy8qKg0KKyAqIFRoaXMgZmxhZyBibG9ja3MgZmVhdHVyZXMgdGhh
dCB0cmlnZ2VyIGF1dG9tYXRpY2FsbHksIHN1Y2ggYXMNCisgKiBhdXRvbWF0aWNhbGx5IHBsYXlp
bmcgYSB2aWRlbyBvciBhdXRvbWF0aWNhbGx5IGZvY3VzaW5nIGEgZm9ybSBjb250cm9sLg0KKyAq
Lw0KK2NvbnN0IHVuc2lnbmVkIGxvbmcgU0FOREJPWEVEX0FVVE9NQVRJQ19GRUFUVVJFUyA9IDB4
NDA7DQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc1NjcmlwdExvYWRl
ci5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcAotLS0gYS9jb250ZW50
L2Jhc2Uvc3JjL25zU2NyaXB0TG9hZGVyLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zU2Ny
aXB0TG9hZGVyLmNwcApAQCAtMzcsMTYgKzM3LDE3IEBACiAjaW5jbHVkZSAibnNJQ29udGVudFNl
Y3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAicHJsb2cuaCIKICNpbmNsdWRlICJuc0lDaGFubmVs
UG9saWN5LmgiCiAjaW5jbHVkZSAibnNDaGFubmVsUG9saWN5LmgiCiAjaW5jbHVkZSAibnNDUlQu
aCIKICNpbmNsdWRlICJuc0NvbnRlbnRDcmVhdG9yRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAibnNH
ZW5lcmljRWxlbWVudC5oIgogI2luY2x1ZGUgIm5zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5oIgor
I2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpbmNsdWRlICJtb3ppbGxhL0Z1bmN0aW9u
VGltZXIuaCIKICNpbmNsdWRlICJtb3ppbGxhL0NPUlNNb2RlLmgiCiAjaW5jbHVkZSAibW96aWxs
YS9BdHRyaWJ1dGVzLmgiCiAKICNpZmRlZiBQUl9MT0dHSU5HCiBzdGF0aWMgUFJMb2dNb2R1bGVJ
bmZvKiBnQ3NwUFJMb2c7CiAjZW5kaWYKQEAgLTI3MywxNiArMjc0LDIxIEBAIG5zU2NyaXB0TG9h
ZGVyOjpTdGFydExvYWQobnNTY3JpcHRMb2FkUmUKICAgaWYgKCF3aW5kb3cpIHsKICAgICByZXR1
cm4gTlNfRVJST1JfTlVMTF9QT0lOVEVSOwogICB9CiAKICAgbnNJRG9jU2hlbGwgKmRvY3NoZWxs
ID0gd2luZG93LT5HZXREb2NTaGVsbCgpOwogCiAgIG5zQ09NUHRyPG5zSUludGVyZmFjZVJlcXVl
c3Rvcj4gcHJvbXB0ZXIoZG9fUXVlcnlJbnRlcmZhY2UoZG9jc2hlbGwpKTsKIAorICAvLyBJZiB0
aGlzIGRvY3VtZW50IGlzIHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zY3JpcHRzJywgYWJvcnQu
CisgIGlmIChtRG9jdW1lbnQtPkdldFNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMp
IHsKKyAgICByZXR1cm4gTlNfT0s7CisgIH0KKwogICAvLyBjaGVjayBmb3IgYSBDb250ZW50IFNl
Y3VyaXR5IFBvbGljeSB0byBwYXNzIGRvd24gdG8gdGhlIGNoYW5uZWwKICAgLy8gdGhhdCB3aWxs
IGJlIGNyZWF0ZWQgdG8gbG9hZCB0aGUgc2NyaXB0CiAgIG5zQ09NUHRyPG5zSUNoYW5uZWxQb2xp
Y3k+IGNoYW5uZWxQb2xpY3k7CiAgIG5zQ09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4g
Y3NwOwogICBydiA9IG1Eb2N1bWVudC0+Tm9kZVByaW5jaXBhbCgpLT5HZXRDc3AoZ2V0dGVyX0Fk
ZFJlZnMoY3NwKSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgIGlmIChjc3ApIHsK
ICAgICBjaGFubmVsUG9saWN5ID0gZG9fQ3JlYXRlSW5zdGFuY2UoIkBtb3ppbGxhLm9yZy9uc2No
YW5uZWxwb2xpY3k7MSIpOwpAQCAtNTg2LDE2ICs1OTIsMjEgQEAgbnNTY3JpcHRMb2FkZXI6OlBy
b2Nlc3NTY3JpcHRFbGVtZW50KG5zSQogICAgICAgICAiVGhlcmUgY2FuIGJlIG9ubHkgb25lIHBh
cnNlci1ibG9ja2luZyBzY3JpcHQgYXQgYSB0aW1lIik7CiAgICAgTlNfQVNTRVJUSU9OKG1YU0xU
UmVxdWVzdHMuSXNFbXB0eSgpLAogICAgICAgICAiUGFyc2VyLWJsb2NraW5nIHNjcmlwdHMgYW5k
IFhTTFQgc2NyaXB0cyBpbiB0aGUgc2FtZSBkb2MhIik7CiAgICAgbVBhcnNlckJsb2NraW5nUmVx
dWVzdCA9IHJlcXVlc3Q7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIAogICAvLyBpbmxpbmUgc2Ny
aXB0CisgIC8vIElzIHRoaXMgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgJ2FsbG93LXNjcmlw
dHMnPworICBpZiAobURvY3VtZW50LT5HZXRTYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9TQ1JJ
UFRTKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgbnNDT01QdHI8bnNJQ29udGVudFNl
Y3VyaXR5UG9saWN5PiBjc3A7CiAgIHJ2ID0gbURvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkdl
dENzcChnZXR0ZXJfQWRkUmVmcyhjc3ApKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIGZhbHNl
KTsKIAogICBpZiAoY3NwKSB7CiAgICAgUFJfTE9HKGdDc3BQUkxvZywgUFJfTE9HX0RFQlVHLCAo
Ik5ldyBTY3JpcHRMb2FkZXIgaSAqKioqd2l0aCBDU1AqKioqIikpOwogICAgIGJvb2wgaW5saW5l
T0s7CiAgICAgcnYgPSBjc3AtPkdldEFsbG93c0lubGluZVNjcmlwdCgmaW5saW5lT0spOwpkaWZm
IC0tZ2l0IGEvY29udGVudC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwIGIv
Y29udGVudC9ldmVudHMvc3JjL25zRXZlbnRMaXN0ZW5lck1hbmFnZXIuY3BwCi0tLSBhL2NvbnRl
bnQvZXZlbnRzL3NyYy9uc0V2ZW50TGlzdGVuZXJNYW5hZ2VyLmNwcAorKysgYi9jb250ZW50L2V2
ZW50cy9zcmMvbnNFdmVudExpc3RlbmVyTWFuYWdlci5jcHAKQEAgLTQ4LDE2ICs0OCwxNyBAQAog
I2luY2x1ZGUgIm5zRE9NSlNVdGlscy5oIgogI2luY2x1ZGUgIm5zRE9NU2NyaXB0T2JqZWN0SG9s
ZGVyLmgiCiAjaW5jbHVkZSAibnNEYXRhSGFzaHRhYmxlLmgiCiAjaW5jbHVkZSAibnNDT01BcnJh
eS5oIgogI2luY2x1ZGUgIm5zRXZlbnRMaXN0ZW5lclNlcnZpY2UuaCIKICNpbmNsdWRlICJuc0lD
b250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJuc0pTRW52aXJvbm1lbnQuaCIKICNp
bmNsdWRlICJ4cGNwdWJsaWMuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE6OmhhbDsK
IAogI2RlZmluZSBFVkVOVF9UWVBFX0VRVUFMUyggbHMsIHR5cGUsIHVzZXJUeXBlICkgXAogICAo
bHMtPm1FdmVudFR5cGUgPT0gdHlwZSAmJiBcCiAgIChscy0+bUV2ZW50VHlwZSAhPSBOU19VU0VS
X0RFRklORURfRVZFTlQgfHwgbHMtPm1UeXBlQXRvbSA9PSB1c2VyVHlwZSkpCiAKQEAgLTU2OCwx
NiArNTY5LDIyIEBAIG5zRXZlbnRMaXN0ZW5lck1hbmFnZXI6OkFkZFNjcmlwdEV2ZW50TGkKICAg
ICAvLyBsb2FkZWQgYXMgZGF0YS4KICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAogICBuc3Jlc3Vs
dCBydiA9IE5TX09LOwogICAvLyByZXR1cm4gZWFybHkgcHJldmVudGluZyB0aGUgZXZlbnQgbGlz
dGVuZXIgZnJvbSBiZWluZyBhZGRlZAogICAvLyAnZG9jJyBpcyBmZXRjaGVkIGFib3ZlCiAgIGlm
IChkb2MpIHsKKyAgICAvLyBEb24ndCBhbGxvdyBhZGRpbmcgYW4gZXZlbnQgbGlzdGVuZXIgaWYg
dGhlIGRvY3VtZW50IGlzIHNhbmRib3hlZAorICAgIC8vIHdpdGhvdXQgJ2FsbG93LXNjcmlwdHMn
LgorICAgIGlmIChkb2MtPkdldFNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX1NDUklQVFMpIHsK
KyAgICAgIHJldHVybiBOU19FUlJPUl9ET01fU0VDVVJJVFlfRVJSOworICAgIH0KKwogICAgIG5z
Q09NUHRyPG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeT4gY3NwOwogICAgIHJ2ID0gZG9jLT5Ob2Rl
UHJpbmNpcGFsKCktPkdldENzcChnZXR0ZXJfQWRkUmVmcyhjc3ApKTsKICAgICBOU19FTlNVUkVf
U1VDQ0VTUyhydiwgcnYpOwogCiAgICAgaWYgKGNzcCkgewogICAgICAgYm9vbCBpbmxpbmVPSzsK
ICAgICAgIHJ2ID0gY3NwLT5HZXRBbGxvd3NJbmxpbmVTY3JpcHQoJmlubGluZU9LKTsKICAgICAg
IE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29u
dGVudC9zcmMvbnNIVE1MRm9ybUVsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zSFRNTEZvcm1FbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNI
VE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxG
b3JtRWxlbWVudC5jcHAKQEAgLTQ3LDE2ICs0NywxNyBAQAogCiAjaW5jbHVkZSAibW96QXV0b0Rv
Y1VwZGF0ZS5oIgogI2luY2x1ZGUgIm5zSUhUTUxDb2xsZWN0aW9uLmgiCiAKICNpbmNsdWRlICJu
c0lDb25zdHJhaW50VmFsaWRhdGlvbi5oIgogCiAjaW5jbHVkZSAibnNJRE9NSFRNTEJ1dHRvbkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJkb21iaW5kaW5ncy5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZs
YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKIHN0YXRpYyBjb25zdCBp
bnQgTlNfRk9STV9DT05UUk9MX0xJU1RfSEFTSFRBQkxFX1NJWkUgPSAxNjsKIAogc3RhdGljIGNv
bnN0IFBSVWludDggTlNfRk9STV9BVVRPQ09NUExFVEVfT04gID0gMTsKIHN0YXRpYyBjb25zdCBQ
UlVpbnQ4IE5TX0ZPUk1fQVVUT0NPTVBMRVRFX09GRiA9IDA7CiAKQEAgLTY0NCwxOCArNjQ1LDE5
IEBAIG5zSFRNTEZvcm1FbGVtZW50OjpEb1N1Ym1pdE9yUmVzZXQobnNFdmUKICAgLy8gSkJLIERv
bid0IGdldCBmb3JtIGZyYW1lcyBhbnltb3JlIC0gYnVnIDM0Mjk3CiAKICAgLy8gU3VibWl0IG9y
IFJlc2V0IHRoZSBmb3JtCiAgIGlmIChOU19GT1JNX1JFU0VUID09IGFNZXNzYWdlKSB7CiAgICAg
cmV0dXJuIERvUmVzZXQoKTsKICAgfQogCiAgIGlmIChOU19GT1JNX1NVQk1JVCA9PSBhTWVzc2Fn
ZSkgewotICAgIC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdyZSBub3QgaW4gYSBkb2N1bWVudC4KLSAg
ICBpZiAoIWRvYykgeworICAgIC8vIERvbid0IHN1Ym1pdCBpZiB3ZSdyZSBub3QgaW4gYSBkb2N1
bWVudCBvciBpZiB3ZSdyZSBpbgorICAgIC8vIGEgc2FuZGJveGVkIGZyYW1lIGFuZCBmb3JtIHN1
Ym1pdCBpcyBkaXNhYmxlZC4KKyAgICBpZiAoIWRvYyB8fCAoZG9jLT5HZXRTYW5kYm94RmxhZ3Mo
KSAmIFNBTkRCT1hFRF9GT1JNUykpIHsKICAgICAgIHJldHVybiBOU19PSzsKICAgICB9CiAgICAg
cmV0dXJuIERvU3VibWl0KGFFdmVudCk7CiAgIH0KIAogICBNT1pfQVNTRVJUKGZhbHNlKTsKICAg
cmV0dXJuIE5TX09LOwogfQpAQCAtMTY2MSwxNiArMTY2MywyNCBAQCBuc0hUTUxGb3JtRWxlbWVu
dDo6Q2hlY2tWYWxpZEZvcm1TdWJtaXNzCiAgICAqIFRPRE86IHRoZSBjaGVjayBmb3Igb2JzZXJ2
ZXIgc2hvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBIVE1MNSBGb3JtcyB3aWxsCiAgICAqIGJl
IHNwcmVhZCBlbm91Z2ggYW5kIGF1dGhvcnMgd2lsbCBhc3N1bWUgZm9ybXMgY2FuJ3QgYmUgc3Vi
bWl0dGVkIHdoZW4KICAgICogaW52YWxpZC4gU2VlIGJ1ZyA1ODc2NzEuCiAgICAqLwogCiAgIE5T
X0FTU0VSVElPTighSGFzQXR0cihrTmFtZVNwYWNlSURfTm9uZSwgbnNHa0F0b21zOjpub3ZhbGlk
YXRlKSwKICAgICAgICAgICAgICAgICJXZSBzaG91bGRuJ3QgYmUgdGhlcmUgaWYgbm92YWxpZGF0
ZSBpcyBzZXQhIik7CiAKKyAgLy8gRG9uJ3QgZG8gdmFsaWRhdGlvbiBmb3IgYSBmb3JtIHN1Ym1p
dCBkb25lIGJ5IGEgc2FuZGJveGVkIGRvY3VtZW50IHRoYXQKKyAgLy8gZG9lc24ndCBoYXZlICdh
bGxvdy1mb3JtcycsIHRoZSBzdWJtaXQgd2lsbCBoYXZlIGJlZW4gYmxvY2tlZCBhbmQgdGhlCisg
IC8vIEhUTUw1IHNwZWMgc2F5cyB3ZSBzaG91bGRuJ3QgdmFsaWRhdGUgaW4gdGhpcyBjYXNlLgor
ICBuc0lEb2N1bWVudCogZG9jID0gR2V0Q3VycmVudERvYygpOworICBpZiAoZG9jICYmIChkb2Mt
PkdldFNhbmRib3hGbGFncygpICYgU0FOREJPWEVEX0ZPUk1TKSkgeworICAgIHJldHVybiB0cnVl
OworICB9CisKICAgLy8gV2hlbiAuc3VibWl0KCkgaXMgY2FsbGVkIGFFdmVudCA9IG51bGxwdHIg
c28gd2UgY2FuIHJlbHkgb24gdGhhdCB0byBrbm93IGlmCiAgIC8vIHdlIGhhdmUgdG8gY2hlY2sg
dGhlIHZhbGlkaXR5IG9mIHRoZSBmb3JtLgogICBuc0NPTVB0cjxuc0lPYnNlcnZlclNlcnZpY2U+
IHNlcnZpY2UgPQogICAgIG1vemlsbGE6OnNlcnZpY2VzOjpHZXRPYnNlcnZlclNlcnZpY2UoKTsK
ICAgaWYgKCFzZXJ2aWNlKSB7CiAgICAgTlNfV0FSTklORygiTm8gb2JzZXJ2ZXIgc2VydmljZSBh
dmFpbGFibGUhIik7CiAgICAgcmV0dXJuIHRydWU7CiAgIH0KZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmNwcAotLS0gYS9jb250ZW50L2h0bWwvY29u
dGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC0yLDE3ICsyLDE2IEBACiAvKiBUaGlz
IFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEg
UHVibGljCiAgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3Qg
ZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCiAgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0
cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLwogCiAjaW5jbHVkZSAibW96aWxsYS9VdGlsLmgi
CiAKICNpbmNsdWRlICJuc0hUTUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NU1ZH
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJuc0drQXRvbXMuaCIKICNpbmNsdWRlICJuc01hcHBlZEF0
dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJuc0RPTUVycm9yLmgiCiAjaW5jbHVkZSAibnNSdWxlRGF0
YS5oIgogI2luY2x1ZGUgIm5zU3R5bGVDb25zdHMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemls
bGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6ZG9tOwogCkBAIC01MSwxNiArNTAsMTcgQEAg
TlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LAogTlNfSU1QTF9VUklfQVRU
Uihuc0hUTUxJRnJhbWVFbGVtZW50LCBMb25nRGVzYywgbG9uZ2Rlc2MpCiBOU19JTVBMX1NUUklO
R19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE1hcmdpbkhlaWdodCwgbWFyZ2luaGVpZ2h0KQog
TlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBNYXJnaW5XaWR0aCwgbWFy
Z2lud2lkdGgpCiBOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIE5hbWUs
IG5hbWUpCiBOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElGcmFtZUVsZW1lbnQsIFNjcm9sbGlu
Zywgc2Nyb2xsaW5nKQogTlNfSU1QTF9VUklfQVRUUihuc0hUTUxJRnJhbWVFbGVtZW50LCBTcmMs
IHNyYykKIE5TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgV2lkdGgsIHdp
ZHRoKQogTlNfSU1QTF9CT09MX0FUVFIobnNIVE1MSUZyYW1lRWxlbWVudCwgTW96QWxsb3dGdWxs
U2NyZWVuLCBtb3phbGxvd2Z1bGxzY3JlZW4pCitOU19JTVBMX1NUUklOR19BVFRSKG5zSFRNTElG
cmFtZUVsZW1lbnQsIFNhbmRib3gsIHNhbmRib3gpCiAKIHZvaWQKIG5zSFRNTElGcmFtZUVsZW1l
bnQ6OkdldEl0ZW1WYWx1ZVRleHQobnNBU3RyaW5nJiBhVmFsdWUpCiB7CiAgIEdldFNyYyhhVmFs
dWUpOwogfQogCiB2b2lkCkBAIC0yMDAsOCArMjAwLDM3IEBAIG5zSFRNTElGcmFtZUVsZW1lbnQ6
OklzQXR0cmlidXRlTWFwcGVkKGMKIAogCiBuc01hcFJ1bGVUb0F0dHJpYnV0ZXNGdW5jCiBuc0hU
TUxJRnJhbWVFbGVtZW50OjpHZXRBdHRyaWJ1dGVNYXBwaW5nRnVuY3Rpb24oKSBjb25zdAogewog
ICByZXR1cm4gJk1hcEF0dHJpYnV0ZXNJbnRvUnVsZTsKIH0KIAorbnNyZXN1bHQKK25zSFRNTElG
cmFtZUVsZW1lbnQ6OkFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSog
YU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBdHRyVmFs
dWUqIGFWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFOb3Rp
ZnkpCit7CisgIGlmIChhTmFtZSA9PSBuc0drQXRvbXM6OnNhbmRib3ggJiYgYU5hbWVTcGFjZUlE
ID09IGtOYW1lU3BhY2VJRF9Ob25lKSB7CisgICAgLy8gUGFyc2UgdGhlIG5ldyB2YWx1ZSBvZiB0
aGUgc2FuZGJveCBhdHRyaWJ1dGUsIGFuZCBpZiB3ZSBoYXZlIGEgZG9jc2hlbGwKKyAgICAvLyBz
ZXQgaXRzIHNhbmRib3ggZmxhZ3MgYXBwcm9wcmlhdGVseS4KKyAgICBpZiAobUZyYW1lTG9hZGVy
KSB7CisgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gZG9jc2hlbGwgPSBtRnJhbWVMb2FkZXIt
PkdldEV4aXN0aW5nRG9jU2hlbGwoKTsKKworICAgICAgaWYgKGRvY3NoZWxsKSB7CisgICAgICAg
IFBSVWludDMyIG5ld0ZsYWdzID0gMDsKKyAgICAgICAgLy8gSWYgYSBOVUxMIGFWYWx1ZSBpcyBw
YXNzZWQgaW4sIHdlIHdhbnQgdG8gY2xlYXIgdGhlIHNhbmRib3ggZmxhZ3MKKyAgICAgICAgLy8g
d2hpY2ggd2Ugd2lsbCBkbyBieSBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAgaWYgKGFWYWx1
ZSkgeworICAgICAgICAgIG5zQXV0b1N0cmluZyBzdHJWYWx1ZTsKKyAgICAgICAgICBhVmFsdWUt
PlRvU3RyaW5nKHN0clZhbHVlKTsKKyAgICAgICAgICBuZXdGbGFncyA9IG5zQ29udGVudFV0aWxz
OjpQYXJzZVNhbmRib3hBdHRyaWJ1dGVUb0ZsYWdzKAorICAgICAgICAgICAgc3RyVmFsdWUpOwor
ICAgICAgICB9ICAgCisgICAgICAgIGRvY3NoZWxsLT5TZXRTYW5kYm94RmxhZ3MobmV3RmxhZ3Mp
OworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbnNHZW5lcmljSFRNTEVsZW1lbnQ6OkFm
dGVyU2V0QXR0cihhTmFtZVNwYWNlSUQsIGFOYW1lLCBhVmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOb3RpZnkpOworCit9CmRpZmYgLS1naXQgYS9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvc3JjL25zSFRNTElGcmFtZUVsZW1lbnQuaAotLS0gYS9jb250ZW50L2h0bWwv
Y29udGVudC9zcmMvbnNIVE1MSUZyYW1lRWxlbWVudC5oCisrKyBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9uc0hUTUxJRnJhbWVFbGVtZW50LmgKQEAgLTEsMTYgKzEsMTcgQEAKIC8qIC0qLSBN
b2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9m
ZnNldDogMiAtKi0gKi8KIC8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRo
ZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKICAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBj
b3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKICAqIGZpbGUsIFlv
dSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCiAKICNp
bmNsdWRlICJuc0dlbmVyaWNIVE1MRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NSFRN
TElGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJuc0lET01HZXRTVkdEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCiAKIGNsYXNzIG5zSFRNTElGcmFtZUVsZW1lbnQgOiBw
dWJsaWMgbnNHZW5lcmljSFRNTEZyYW1lRWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBuc0lET01IVE1MSUZyYW1lRWxlbWVudAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBuc0lET01HZXRTVkdEb2N1bWVudAogewogcHVibGljOgogICBuc0hUTUxJ
RnJhbWVFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKICAg
ICAgICAgICAgICAgICAgICAgICBtb3ppbGxhOjpkb206OkZyb21QYXJzZXIgYUZyb21QYXJzZXIg
PSBtb3ppbGxhOjpkb206Ok5PVF9GUk9NX1BBUlNFUik7CkBAIC00MSwxMiArNDIsMzYgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJWYWx1ZSYgYVJlc3Vs
dCk7CiAgIE5TX0lNRVRIT0RfKGJvb2wpIElzQXR0cmlidXRlTWFwcGVkKGNvbnN0IG5zSUF0b20q
IGFBdHRyaWJ1dGUpIGNvbnN0OwogICB2aXJ0dWFsIG5zTWFwUnVsZVRvQXR0cmlidXRlc0Z1bmMg
R2V0QXR0cmlidXRlTWFwcGluZ0Z1bmN0aW9uKCkgY29uc3Q7CiAKICAgdmlydHVhbCBuc3Jlc3Vs
dCBDbG9uZShuc0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lOb2RlICoqYVJlc3VsdCkgY29uc3Q7
CiAgIHZpcnR1YWwgbnNYUENDbGFzc0luZm8qIEdldENsYXNzSW5mbygpOwogICB2aXJ0dWFsIG5z
SURPTU5vZGUqIEFzRE9NTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KIAorICB2aXJ0dWFsIG5zcmVz
dWx0IEFmdGVyU2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQXR0clZhbHVlKiBhVmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYU5vdGlmeSk7CisKKyAgUFJV
aW50MzIgR2V0U2FuZGJveEZsYWdzKCkKKyAgeworICAgIG5zQXV0b1N0cmluZyBzYW5kYm94QXR0
cjsKKworICAgIGlmIChHZXRBdHRyKGtOYW1lU3BhY2VJRF9Ob25lLCBuc0drQXRvbXM6OnNhbmRi
b3gsIHNhbmRib3hBdHRyKSkgeworICAgICAgcmV0dXJuIG5zQ29udGVudFV0aWxzOjpQYXJzZVNh
bmRib3hBdHRyaWJ1dGVUb0ZsYWdzKHNhbmRib3hBdHRyKTsKKyAgICB9CisKKyAgICAvLyBObyBz
YW5kYm94IGF0dHJpYnV0ZSwgbm8gc2FuZGJveCBmbGFncy4KKyAgICByZXR1cm4gMDsKKyAgfQor
CisgIHN0YXRpYyBuc0hUTUxJRnJhbWVFbGVtZW50KiBGcm9tQ29udGVudChuc0lDb250ZW50ICph
Q29udGVudCkKKyAgeworICAgIGlmIChhQ29udGVudC0+SXNIVE1MKG5zR2tBdG9tczo6aWZyYW1l
KSkgeworICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG5zSFRNTElGcmFtZUVsZW1lbnQqPihhQ29u
dGVudCk7CisgICAgfQorICAgIHJldHVybiBuc251bGw7CisgIH0KKwogcHJvdGVjdGVkOgogICB2
aXJ0dWFsIHZvaWQgR2V0SXRlbVZhbHVlVGV4dChuc0FTdHJpbmcmIHRleHQpOwogICB2aXJ0dWFs
IHZvaWQgU2V0SXRlbVZhbHVlVGV4dChjb25zdCBuc0FTdHJpbmcmIHRleHQpOwogfTsKZGlmZiAt
LWdpdCBhL2NvbnRlbnQvaHRtbC9kb2N1bWVudC9zcmMvbnNIVE1MRG9jdW1lbnQuY3BwIGIvY29u
dGVudC9odG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9o
dG1sL2RvY3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC9odG1sL2Rv
Y3VtZW50L3NyYy9uc0hUTUxEb2N1bWVudC5jcHAKQEAgLTk4LDE2ICs5OCwxNyBAQAogI2luY2x1
ZGUgInBycHJmLmgiCiAjaW5jbHVkZSAibW96aWxsYS9kb20vRWxlbWVudC5oIgogI2luY2x1ZGUg
Im1vemlsbGEvUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJuc01pbWVUeXBlcy5oIgogI2luY2x1
ZGUgIm5zSVJlcXVlc3QuaCIKICNpbmNsdWRlICJuc0h0bWw1VHJlZU9wRXhlY3V0b3IuaCIKICNp
bmNsdWRlICJuc0h0bWw1UGFyc2VyLmgiCiAjaW5jbHVkZSAibnNJRE9NSlNXaW5kb3cuaCIKKyNp
bmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIHVz
aW5nIG5hbWVzcGFjZSBtb3ppbGxhOjpkb207CiAKICNkZWZpbmUgTlNfTUFYX0RPQ1VNRU5UX1dS
SVRFX0RFUFRIIDIwCiAKICNpbmNsdWRlICJwcm1lbS5oIgogI2luY2x1ZGUgInBydGltZS5oIgpA
QCAtMTIxNywxNiArMTIxOCwyMiBAQCBuc0hUTUxEb2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmlu
ZyYgYUNvCiB7CiAgIGFDb29raWUuVHJ1bmNhdGUoKTsgLy8gY2xlYXIgY3VycmVudCBjb29raWUg
aW4gY2FzZSBzZXJ2aWNlIGZhaWxzOwogICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGNvb2tp
ZSBpc24ndCBhbiBlcnJvciBjb25kaXRpb24uCiAKICAgaWYgKG1EaXNhYmxlQ29va2llQWNjZXNz
KSB7CiAgICAgcmV0dXJuIE5TX09LOwogICB9CiAKKyAgLy8gSWYgdGhlIGRvY3VtZW50J3Mgc2Fu
ZGJveGVkIG9yaWdpbiBmbGFnIGlzIHNldCwgYWNjZXNzIHRvIHJlYWQgY29va2llcworICAvLyBp
cyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pIHsK
KyAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgfQorICAKICAgLy8gbm90
IGhhdmluZyBhIGNvb2tpZSBzZXJ2aWNlIGlzbid0IGFuIGVycm9yCiAgIG5zQ09NUHRyPG5zSUNv
b2tpZVNlcnZpY2U+IHNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0NPT0tJRVNFUlZJQ0VfQ09O
VFJBQ1RJRCk7CiAgIGlmIChzZXJ2aWNlKSB7CiAgICAgLy8gR2V0IGEgVVJJIGZyb20gdGhlIGRv
Y3VtZW50IHByaW5jaXBhbC4gV2UgdXNlIHRoZSBvcmlnaW5hbAogICAgIC8vIGNvZGViYXNlIGlu
IGNhc2UgdGhlIGNvZGViYXNlIHdhcyBjaGFuZ2VkIGJ5IFNldERvbWFpbgogICAgIG5zQ09NUHRy
PG5zSVVSST4gY29kZWJhc2VVUkk7CiAgICAgTm9kZVByaW5jaXBhbCgpLT5HZXRVUkkoZ2V0dGVy
X0FkZFJlZnMoY29kZWJhc2VVUkkpKTsKIApAQCAtMTI0NywxNiArMTI1NCwyMiBAQCBuc0hUTUxE
b2N1bWVudDo6R2V0Q29va2llKG5zQVN0cmluZyYgYUNvCiAKIE5TX0lNRVRIT0RJTVAKIG5zSFRN
TERvY3VtZW50OjpTZXRDb29raWUoY29uc3QgbnNBU3RyaW5nJiBhQ29va2llKQogewogICBpZiAo
bURpc2FibGVDb29raWVBY2Nlc3MpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAorICAvLyBJ
ZiB0aGUgZG9jdW1lbnQncyBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgaXMgc2V0LCBhY2Nlc3MgdG8g
d3JpdGUgY29va2llcworICAvLyBpcyBwcm9oaWJpdGVkLgorICBpZiAobVNhbmRib3hGbGFncyAm
IFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VS
UjsKKyAgfQorCiAgIC8vIG5vdCBoYXZpbmcgYSBjb29raWUgc2VydmljZSBpc24ndCBhbiBlcnJv
cgogICBuc0NPTVB0cjxuc0lDb29raWVTZXJ2aWNlPiBzZXJ2aWNlID0gZG9fR2V0U2VydmljZShO
U19DT09LSUVTRVJWSUNFX0NPTlRSQUNUSUQpOwogICBpZiAoc2VydmljZSAmJiBtRG9jdW1lbnRV
UkkpIHsKICAgICBuc0NPTVB0cjxuc0lQcm9tcHQ+IHByb21wdDsKICAgICBuc0NPTVB0cjxuc1BJ
RE9NV2luZG93PiB3aW5kb3cgPSBHZXRXaW5kb3coKTsKICAgICBpZiAod2luZG93KSB7CiAgICAg
ICB3aW5kb3ctPkdldFByb21wdGVyKGdldHRlcl9BZGRSZWZzKHByb21wdCkpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAgYi9kb2NzaGVsbC9iYXNlL25z
RG9jU2hlbGwuY3BwCi0tLSBhL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKKysrIGIvZG9j
c2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcApAQCAtMTc5LDE2ICsxNzksMTcgQEAKICNpbmNsdWRl
ICJuc0lXZWJCcm93c2VyUHJpbnQuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAibnNQbHVnaW5FcnJv
ci5oIgogI2luY2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCiAjaW5jbHVkZSAibnNDb250ZW50RXJy
b3JzLmgiCiAjaW5jbHVkZSAibnNJQ2hhbm5lbFBvbGljeS5oIgogI2luY2x1ZGUgIm5zSUNvbnRl
bnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNpbmNs
dWRlICJuc1hVTEFwcEFQSS5oIgogCiAjaW5jbHVkZSAibnNET01OYXZpZ2F0aW9uVGltaW5nLmgi
CiAjaW5jbHVkZSAibnNJVGltZWRDaGFubmVsLmgiCiAjaW5jbHVkZSAibW96aWxsYS9TdGFydHVw
VGltZWxpbmUuaCIKICNpbmNsdWRlICJuc0lGcmFtZU1lc3NhZ2VNYW5hZ2VyLmgiCiAKQEAgLTcz
NSwxNiArNzM2LDE3IEBAIG5zRG9jU2hlbGw6Om5zRG9jU2hlbGwoKToKICAgICBtQnVzeUZsYWdz
KEJVU1lfRkxBR1NfTk9ORSksCiAgICAgbUFwcFR5cGUobnNJRG9jU2hlbGw6OkFQUF9UWVBFX1VO
S05PV04pLAogICAgIG1Mb2FkVHlwZSgwKSwKICAgICBtTWFyZ2luV2lkdGgoLTEpLAogICAgIG1N
YXJnaW5IZWlnaHQoLTEpLAogICAgIG1JdGVtVHlwZSh0eXBlQ29udGVudCksCiAgICAgbVByZXZp
b3VzVHJhbnNJbmRleCgtMSksCiAgICAgbUxvYWRlZFRyYW5zSW5kZXgoLTEpLAorICAgIG1TYW5k
Ym94RmxhZ3MoMCksCiAgICAgbUNyZWF0ZWQoZmFsc2UpLAogICAgIG1BbGxvd1N1YmZyYW1lcyh0
cnVlKSwKICAgICBtQWxsb3dQbHVnaW5zKHRydWUpLAogICAgIG1BbGxvd0phdmFzY3JpcHQodHJ1
ZSksCiAgICAgbUFsbG93TWV0YVJlZGlyZWN0cyh0cnVlKSwKICAgICBtQWxsb3dJbWFnZXModHJ1
ZSksCiAgICAgbUFsbG93RE5TUHJlZmV0Y2godHJ1ZSksCiAgICAgbUFsbG93V2luZG93Q29udHJv
bCh0cnVlKSwKQEAgLTMwMDYsMTYgKzMwMDgsNzMgQEAgbnNEb2NTaGVsbDo6RmluZEl0ZW1XaXRo
TmFtZShjb25zdCBQUlVuaQogICAgICAgICAgICAgZm91bmRJdGVtID0gbnVsbHB0cjsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChmb3VuZEl0ZW0pIHsKICAgICAgICAgICAgIC8vIFdlIHJldHVy
biBmb3VuZEl0ZW0gaGVyZSBldmVuIGlmIGl0J3Mgbm90IGFuIGFjdGl2ZQogICAgICAgICAgICAg
Ly8gaXRlbSBzaW5jZSBhbGwgdGhlIG5hbWVzIHdlJ3ZlIGRlYWx0IHdpdGggc28gZmFyIGFyZQog
ICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlcyB0aGF0IHdlIHdvbid0IGJvdGhlciBsb29raW5n
IGZvciBmdXJ0aGVyLgogCisgICAgICAgICAgICAvLyBJZiBvdXIgZG9jdW1lbnQgaXMgc2FuZGJv
eGVkLCB3ZSBuZWVkIHRvIGRvIHNvbWUgZXh0cmEgY2hlY2tzLgorICAgICAgICAgICAgUFJVaW50
MzIgc2FuZGJveEZsYWdzID0gMDsKKworICAgICAgICAgICAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+
IGRvYyA9IGRvX0dldEludGVyZmFjZShhT3JpZ2luYWxSZXF1ZXN0b3IpOworCisgICAgICAgICAg
ICBpZiAoZG9jKSB7CisgICAgICAgICAgICAgICAgc2FuZGJveEZsYWdzID0gZG9jLT5HZXRTYW5k
Ym94RmxhZ3MoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFn
cykgeworICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHJvb3Q7
CisgICAgICAgICAgICAgICAgR2V0U2FtZVR5cGVSb290VHJlZUl0ZW0oZ2V0dGVyX0FkZFJlZnMo
cm9vdCkpOworCisgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGZvdW5kIGl0ZW0gbm90IGEgdG9w
IGxldmVsIGJyb3dzaW5nIGNvbnRleHQgYW5kIG5vdCBvdXJzZWxmID8KKyAgICAgICAgICAgICAg
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBzZWxmQXNJdGVtID0gc3RhdGljX2Nhc3Q8
bnNJRG9jU2hlbGxUcmVlSXRlbSAqPih0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRJ
dGVtICE9IHJvb3QgJiYgZm91bmRJdGVtICE9IHNlbGZBc0l0ZW0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gQXJlIHdlIGFuIGFuY2VzdG9yIG9mIHRoZSBmb3VuZEl0ZW0gPworICAgICAgICAg
ICAgICAgICAgICBib29sIGlzQW5jZXN0b3IgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAg
ICBuc0NPTVB0cjxuc0lEb2NTaGVsbFRyZWVJdGVtPiBwYXJlbnRBc0l0ZW07CisgICAgICAgICAg
ICAgICAgICAgIEdldFNhbWVUeXBlUGFyZW50KGdldHRlcl9BZGRSZWZzKHBhcmVudEFzSXRlbSkp
OworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRBc0l0ZW0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5zQ09NUHRyPG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmVudEFzSXRlbS0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZz
KHRtcCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wICYmIHRtcCA9PSBzZWxm
QXNJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmNlc3RvciA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRBc0l0ZW0gPSB0bXA7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQW5jZXN0b3Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vLCB3ZSBhcmUgbm90IGFuIGFuY2VzdG9y
IGFuZCBvdXIgZG9jdW1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbmRib3hl
ZCwgd2UgY2FuJ3QgYWxsb3cgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSXRl
bSA9IG5zbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRvcCBsZXZlbCBicm93c2luZyBjb250ZXh0IC0g
aXMgaXQgYW4gYW5jZXN0b3Igb2Ygb3VycyA/CisgICAgICAgICAgICAgICAgICAgIG5zQ09NUHRy
PG5zSURvY1NoZWxsVHJlZUl0ZW0+IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgR2V0U2FtZVR5
cGVQYXJlbnQoZ2V0dGVyX0FkZFJlZnModG1wKSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKHRtcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAmJiB0bXAgPT0gZm91
bmRJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhbmNl
c3RvciwgYW5kIHdlIGFyZSBzYW5kYm94ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVW5sZXNzIGFsbG93LXRvcC1uYXZpZ2F0aW9uIGlzIHNldCwgd2UgY2FuJ3QgYWxsb3cgdGhp
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2FuZGJveEZsYWdzICYgU0FOREJP
WEVEX1RPUExFVkVMX05BVklHQVRJT04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmRJdGVtID0gbnNudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcC0+R2V0UGFyZW50KGdldHRlcl9BZGRSZWZz
KHRtcCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICBmb3VuZEl0ZW0uc3dhcCgqX3JldHZhbCk7CiAgICAgICAg
ICAgICByZXR1cm4gTlNfT0s7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBLZWVwIGxvb2tp
bmcKICAgICAgICAgCiAgICAgLy8gRmlyc3Qgd2UgY2hlY2sgb3VyIG5hbWUuCkBAIC01MDg1LDE2
ICs1MTQ0LDMwIEBAIG5zRG9jU2hlbGw6OlNldElzQXBwVGFiKGJvb2wgYUlzQXBwVGFiKQogTlNf
SU1FVEhPRElNUAogbnNEb2NTaGVsbDo6R2V0SXNBcHBUYWIoYm9vbCAqYUlzQXBwVGFiKQogewog
ICAqYUlzQXBwVGFiID0gbUlzQXBwVGFiOwogICByZXR1cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRI
T0RJTVAKK25zRG9jU2hlbGw6OlNldFNhbmRib3hGbGFncyhQUlVpbnQzMiBhU2FuZGJveEZsYWdz
KQoreworICAgIG1TYW5kYm94RmxhZ3MgPSBhU2FuZGJveEZsYWdzOworICAgIHJldHVybiBOU19P
SzsKK30KKworTlNfSU1FVEhPRElNUAorbnNEb2NTaGVsbDo6R2V0U2FuZGJveEZsYWdzKFBSVWlu
dDMyICAqYVNhbmRib3hGbGFncykKK3sKKyAgICAqYVNhbmRib3hGbGFncyA9IG1TYW5kYm94Rmxh
Z3M7CisgICAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCiBuc0RvY1NoZWxsOjpT
ZXRWaXNpYmlsaXR5KGJvb2wgYVZpc2liaWxpdHkpCiB7CiAgICAgaWYgKCFtQ29udGVudFZpZXdl
cikKICAgICAgICAgcmV0dXJuIE5TX09LOwogICAgIGlmIChhVmlzaWJpbGl0eSkgewogICAgICAg
ICBtQ29udGVudFZpZXdlci0+U2hvdygpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTY2OTMsMTYg
KzY3NjYsMjAgQEAgbnNEb2NTaGVsbDo6Q3JlYXRlQWJvdXRCbGFua0NvbnRlbnRWaWV3ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMoYmxhbmtEb2Mp
KTsKICAgICBpZiAoYmxhbmtEb2MpIHsKICAgICAgIC8vIEhhY2s6IHNldCB0aGUgYmFzZSBVUkkg
bWFudWFsbHksIHNpbmNlIHRoaXMgZG9jdW1lbnQgbmV2ZXIKICAgICAgIC8vIGdvdCBSZXNldCgp
IHdpdGggYSBjaGFubmVsLgogICAgICAgYmxhbmtEb2MtPlNldEJhc2VVUkkoYUJhc2VVUkkpOwog
CiAgICAgICBibGFua0RvYy0+U2V0Q29udGFpbmVyKHN0YXRpY19jYXN0PG5zSURvY1NoZWxsICo+
KHRoaXMpKTsKIAorICAgICAgLy8gQ29weSBvdXIgc2FuZGJveCBmbGFncyB0byB0aGUgZG9jdW1l
bnQuIFRoZXNlIGFyZSBpbW11dGFibGUKKyAgICAgIC8vIGFmdGVyIGJlaW5nIHNldCBoZXJlLgor
ICAgICAgYmxhbmtEb2MtPlNldFNhbmRib3hGbGFncyhtU2FuZGJveEZsYWdzKTsKKwogICAgICAg
Ly8gY3JlYXRlIGEgY29udGVudCB2aWV3ZXIgZm9yIHVzIGFuZCB0aGUgbmV3IGRvY3VtZW50CiAg
ICAgICBkb2NGYWN0b3J5LT5DcmVhdGVJbnN0YW5jZUZvckRvY3VtZW50KE5TX0lTVVBQT1JUU19D
QVNUKG5zSURvY1NoZWxsICosIHRoaXMpLAogICAgICAgICAgICAgICAgICAgICBibGFua0RvYywg
InZpZXciLCBnZXR0ZXJfQWRkUmVmcyh2aWV3ZXIpKTsKIAogICAgICAgLy8gaG9vayAnZW0gdXAK
ICAgICAgIGlmICh2aWV3ZXIpIHsKICAgICAgICAgdmlld2VyLT5TZXRDb250YWluZXIoc3RhdGlj
X2Nhc3Q8bnNJQ29udGVudFZpZXdlckNvbnRhaW5lciAqPih0aGlzKSk7CiAgICAgICAgIEVtYmVk
KHZpZXdlciwgIiIsIDApOwpAQCAtODMzNiwxNiArODQxMywzMiBAQCBuc0RvY1NoZWxsOjpJbnRl
cm5hbExvYWQobnNJVVJJICogYVVSSSwKICAgICAgICAgbnNDT01QdHI8bnNJRG9jU2hlbGxUcmVl
SXRlbT4gdGFyZ2V0SXRlbTsKICAgICAgICAgRmluZEl0ZW1XaXRoTmFtZShhV2luZG93VGFyZ2V0
LCBudWxscHRyLCB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcl9BZGRSZWZz
KHRhcmdldEl0ZW0pKTsKIAogICAgICAgICBuc0NPTVB0cjxuc0lEb2NTaGVsbD4gdGFyZ2V0RG9j
U2hlbGwgPSBkb19RdWVyeUludGVyZmFjZSh0YXJnZXRJdGVtKTsKICAgICAgICAgCiAgICAgICAg
IGJvb2wgaXNOZXdXaW5kb3cgPSBmYWxzZTsKICAgICAgICAgaWYgKCF0YXJnZXREb2NTaGVsbCkg
eworICAgICAgICAgICAgLy8gSWYgdGhlIGRvY3NoZWxsJ3MgZG9jdW1lbnQgaXMgc2FuZGJveGVk
IGFuZCB3YXMgdHJ5aW5nIHRvCisgICAgICAgICAgICAvLyBuYXZpZ2F0ZS9sb2FkIGEgZnJhbWUg
aXQgd2Fzbid0IGFsbG93ZWQgdG8gYWNjZXNzLCB0aGUKKyAgICAgICAgICAgIC8vIEZpbmRJdGVt
V2l0aE5hbWUgYWJvdmUgd2lsbCBoYXZlIHJldHVybmVkIG51bGwgZm9yIHRoZSB0YXJnZXQKKyAg
ICAgICAgICAgIC8vIGl0ZW0gLSB3ZSBkb24ndCB3YW50IHRvIGFjdHVhbGx5IG9wZW4gYSBuZXcg
d2luZG93IGluIHRoaXMgY2FzZQorICAgICAgICAgICAgLy8gdGhvdWdoLiBDaGVjayBpZiB3ZSBh
cmUgc2FuZGJveGVkIGFuZCBiYWlsIG91dCBoZXJlIGlmIHNvLgorICAgICAgICAgICAgTlNfRU5T
VVJFX1RSVUUobUNvbnRlbnRWaWV3ZXIsIE5TX0VSUk9SX0ZBSUxVUkUpOworICAgICAgICAgICAg
bnNJRG9jdW1lbnQqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICAgICAg
ICAgICAgUFJVaW50MzIgc2FuZGJveEZsYWdzID0gMDsKKworICAgICAgICAgICAgaWYgKGRvYykg
eworICAgICAgICAgICAgICAgIHNhbmRib3hGbGFncyA9IGRvYy0+R2V0U2FuZGJveEZsYWdzKCk7
CisgICAgICAgICAgICAgICAgaWYgKHNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9OQVZJR0FUSU9O
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbnNDT01QdHI8bnNJRE9N
V2luZG93PiB3aW4gPQogICAgICAgICAgICAgICAgIGRvX0dldEludGVyZmFjZShHZXRBc1N1cHBv
cnRzKHRoaXMpKTsKICAgICAgICAgICAgIE5TX0VOU1VSRV9UUlVFKHdpbiwgTlNfRVJST1JfTk9U
X0FWQUlMQUJMRSk7CiAKICAgICAgICAgICAgIG5zRGVwZW5kZW50U3RyaW5nIG5hbWUoYVdpbmRv
d1RhcmdldCk7CiAgICAgICAgICAgICBuc0NPTVB0cjxuc0lET01XaW5kb3c+IG5ld1dpbjsKICAg
ICAgICAgICAgIHJ2ID0gd2luLT5PcGVuKEVtcHR5U3RyaW5nKCksIC8vIFVSTCB0byBsb2FkCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCAgICAgICAgICAvLyB3aW5kb3cgbmFtZQpA
QCAtOTE0NywxOCArOTI0MCwzMSBAQCBuc0RvY1NoZWxsOjpEb1VSSUxvYWQobnNJVVJJICogYVVS
SSwKICAgICAgICAgfQogICAgICAgICAvLyBTZXQgdGhlIHJlZmVycmVyIGV4cGxpY2l0bHkKICAg
ICAgICAgaWYgKGFSZWZlcnJlclVSSSAmJiBhU2VuZFJlZmVycmVyKSB7CiAgICAgICAgICAgICAv
LyBSZWZlcnJlciBpcyBjdXJyZW5seSBvbmx5IHNldCBmb3IgbGluayBjbGlja3MgaGVyZS4KICAg
ICAgICAgICAgIGh0dHBDaGFubmVsLT5TZXRSZWZlcnJlcihhUmVmZXJyZXJVUkkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBvd25lclByaW5jaXBhbChk
b19RdWVyeUludGVyZmFjZShhT3duZXIpKTsKLSAgICBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFu
bmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUpOworICAgIG5zQ09N
UHRyPG5zSVByaW5jaXBhbD4gb3duZXJQcmluY2lwYWw7CisKKyAgICAvLyBJZiB0aGUgY29udGVu
dCBiZWluZyBsb2FkZWQgc2hvdWxkIGJlIHNhbmRib3hlZCB3aXRoIHJlc3BlY3QgdG8gb3JpZ2lu
CisgICAgLy8gd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgbnVsbCBwcmluY2lwYWwgaGVyZSwgYW5k
IHRoZW4gdGVsbAorICAgIC8vIG5zQ29udGVudFV0aWxzOjpTZXRVcENoYW5uZWxPd25lciB0byBm
b3JjZSBpdCB0byBiZSBzZXQgYXMgdGhlCisgICAgLy8gY2hhbm5lbCBvd25lci4KKyAgICBpZiAo
bVNhbmRib3hGbGFncyAmIFNBTkRCT1hFRF9PUklHSU4pIHsKKyAgICAgICAgb3duZXJQcmluY2lw
YWwgPSBkb19DcmVhdGVJbnN0YW5jZSgiQG1vemlsbGEub3JnL251bGxwcmluY2lwYWw7MSIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vdCBzYW5kYm94ZWQgLSB3ZSBhbGxvdyB0aGUgY29u
dGVudCB0byBhc3N1bWUgaXRzIG5hdHVyYWwgb3duZXIuCisgICAgICAgIG93bmVyUHJpbmNpcGFs
ID0gZG9fUXVlcnlJbnRlcmZhY2UoYU93bmVyKTsKKyAgICB9CisKKyAgICBuc0NvbnRlbnRVdGls
czo6U2V0VXBDaGFubmVsT3duZXIob3duZXJQcmluY2lwYWwsIGNoYW5uZWwsIGFVUkksIHRydWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtU2FuZGJveEZsYWdzICYg
U0FOREJPWEVEX09SSUdJTikpOwogCiAgICAgbnNDT01QdHI8bnNJU2NyaXB0Q2hhbm5lbD4gc2Ny
aXB0Q2hhbm5lbCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGNoYW5uZWwpOwogICAgIGlmIChzY3JpcHRD
aGFubmVsKSB7CiAgICAgICAgIC8vIEFsbG93IGV4ZWN1dGlvbiBhZ2FpbnN0IG91ciBjb250ZXh0
IGlmIHRoZSBwcmluY2lwYWxzIG1hdGNoCiAgICAgICAgIHNjcmlwdENoYW5uZWwtPgogICAgICAg
ICAgICAgU2V0RXhlY3V0aW9uUG9saWN5KG5zSVNjcmlwdENoYW5uZWw6OkVYRUNVVEVfTk9STUFM
KTsKICAgICB9CiAKQEAgLTExODcxLDE2ICsxMTk3NywzNCBAQCBuc0RvY1NoZWxsOjpTaG91bGRC
bG9ja0xvYWRpbmdGb3JCYWNrQnV0CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKICAgYm9vbCBj
YW5Hb0ZvcndhcmQgPSBmYWxzZTsKICAgR2V0Q2FuR29Gb3J3YXJkKCZjYW5Hb0ZvcndhcmQpOwog
ICByZXR1cm4gY2FuR29Gb3J3YXJkOwogfQogCitib29sIAorbnNEb2NTaGVsbDo6UGx1Z2luc0Fs
bG93ZWRJbkN1cnJlbnREb2MoKQoreworICBib29sIHBsdWdpbnNBbGxvd2VkID0gZmFsc2U7CisK
KyAgaWYgKCFtQ29udGVudFZpZXdlcikgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICAKKyAg
bnNJRG9jdW1lbnQqIGRvYyA9IG1Db250ZW50Vmlld2VyLT5HZXREb2N1bWVudCgpOworICBpZiAo
IWRvYykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICAKKyAgZG9jLT5HZXRBbGxvd1BsdWdp
bnMoJnBsdWdpbnNBbGxvd2VkKTsKKyAgcmV0dXJuIHBsdWdpbnNBbGxvd2VkOworfQorCiAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIC8vIFdlYiBTaGVsbCBTZXJ2aWNlcyBBUEkKIAogLy9UaGlzIGZ1bmN0aW9u
cyBpcyBvbmx5IGNhbGxlZCB3aGVuIGEgbmV3IGNoYXJzZXQgaXMgZGV0ZWN0ZWQgaW4gbG9hZGlu
ZyBhIGRvY3VtZW50LiAKIC8vSXRzIG5hbWUgc2hvdWxkIGJlIGNoYW5nZWQgdG8gIkNoYXJzZXRS
ZWxvYWREb2N1bWVudCIKIE5TX0lNRVRIT0RJTVAKIG5zRG9jU2hlbGw6OlJlbG9hZERvY3VtZW50
KGNvbnN0IGNoYXIqIGFDaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQz
MiBhU291cmNlKQpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmggYi9kb2Nz
aGVsbC9iYXNlL25zRG9jU2hlbGwuaAotLS0gYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaAor
KysgYi9kb2NzaGVsbC9iYXNlL25zRG9jU2hlbGwuaApAQCAtNzcyLDE2ICs3NzIsMTggQEAgcHJv
dGVjdGVkOgogICAgIC8vIENyZWF0ZSgpIGlzIGNhbGxlZCwgdGhlIHR5cGUgaXMgbm90IGV4cGVj
dGVkIHRvIGNoYW5nZS4KICAgICBQUkludDMyICAgICAgICAgICAgICAgICAgICBtSXRlbVR5cGU7
CiAKICAgICAvLyBJbmRleCBpbnRvIHRoZSBTSFRyYW5zYWN0aW9uIGxpc3QsIGluZGljYXRpbmcg
dGhlIHByZXZpb3VzIGFuZCBjdXJyZW50CiAgICAgLy8gdHJhbnNhY3Rpb24gYXQgdGhlIHRpbWUg
dGhhdCB0aGlzIERvY1NoZWxsIGJlZ2lucyB0byBsb2FkCiAgICAgUFJJbnQzMiAgICAgICAgICAg
ICAgICAgICAgbVByZXZpb3VzVHJhbnNJbmRleDsKICAgICBQUkludDMyICAgICAgICAgICAgICAg
ICAgICBtTG9hZGVkVHJhbnNJbmRleDsKIAorICAgIFBSVWludDMyICAgICAgICAgICAgICAgICAg
IG1TYW5kYm94RmxhZ3M7CisKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQ3JlYXRl
ZDsKICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICBtQWxsb3dTdWJmcmFtZXM7CiAgICAg
Ym9vbCAgICAgICAgICAgICAgICAgICAgICAgbUFsbG93UGx1Z2luczsKICAgICBib29sICAgICAg
ICAgICAgICAgICAgICAgICBtQWxsb3dKYXZhc2NyaXB0OwogICAgIGJvb2wgICAgICAgICAgICAg
ICAgICAgICAgIG1BbGxvd01ldGFSZWRpcmVjdHM7CiAgICAgYm9vbCAgICAgICAgICAgICAgICAg
ICAgICAgbUFsbG93SW1hZ2VzOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxv
d0ROU1ByZWZldGNoOwogICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgIG1BbGxvd1dpbmRv
d0NvbnRyb2w7CkBAIC04MTUsMTcgKzgxNywxNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBJbmRp
Y2F0ZXMgdGhhdCBhIERvY1NoZWxsIGluIHRoaXMgImRvY3NoZWxsIHRyZWUiIGlzIHByaW50aW5n
CiAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgbUlzUHJpbnRpbmdPclBQOwogCiAgICAg
Ly8gSW5kaWNhdGVzIHRvIENyZWF0ZUNvbnRlbnRWaWV3ZXIoKSB0aGF0IGl0IGlzIHNhZmUgdG8g
Y2FjaGUgdGhlIG9sZAogICAgIC8vIHByZXNlbnRhdGlvbiBvZiB0aGUgcGFnZSwgYW5kIHRvIFNl
dHVwTmV3Vmlld2VyKCkgdGhhdCB0aGUgb2xkIHZpZXdlcgogICAgIC8vIHNob3VsZCBiZSBwYXNz
ZWQgYSBTSEVudHJ5IHRvIHNhdmUgaXRzZWxmIGludG8uCiAgICAgYm9vbCAgICAgICAgICAgICAg
ICAgICAgICAgbVNhdmluZ09sZFZpZXdlcjsKLQorICAgIAogICAgIC8vIEBzZWUgbnNJRG9jU2hl
bGxIaXN0b3J5OjpjcmVhdGVkRHluYW1pY2FsbHkKICAgICBib29sICAgICAgICAgICAgICAgICAg
ICAgICBtRHluYW1pY2FsbHlDcmVhdGVkOwogI2lmZGVmIERFQlVHCiAgICAgYm9vbCAgICAgICAg
ICAgICAgICAgICAgICAgbUluRW5zdXJlU2NyaXB0RW52OwogI2VuZGlmCiAgICAgUFJVaW50NjQg
ICAgICAgICAgICAgICAgICAgbUhpc3RvcnlJRDsKIAogICAgIHN0YXRpYyBuc0lVUklGaXh1cCAq
c1VSSUZpeHVwOwpkaWZmIC0tZ2l0IGEvZG9jc2hlbGwvYmFzZS9uc0lEb2NTaGVsbC5pZGwgYi9k
b2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbAotLS0gYS9kb2NzaGVsbC9iYXNlL25zSURvY1No
ZWxsLmlkbAorKysgYi9kb2NzaGVsbC9iYXNlL25zSURvY1NoZWxsLmlkbApAQCAtMzQsMTcgKzM0
LDE3IEBAIGludGVyZmFjZSBuc0lTSEVudHJ5OwogaW50ZXJmYWNlIG5zSUxheW91dEhpc3RvcnlT
dGF0ZTsKIGludGVyZmFjZSBuc0lTZWN1cmVCcm93c2VyVUk7CiBpbnRlcmZhY2UgbnNJRE9NU3Rv
cmFnZTsKIGludGVyZmFjZSBuc0lQcmluY2lwYWw7CiBpbnRlcmZhY2UgbnNJV2ViQnJvd3NlclBy
aW50OwogaW50ZXJmYWNlIG5zSVZhcmlhbnQ7CiBpbnRlcmZhY2UgbnNJUHJpdmFjeVRyYW5zaXRp
b25PYnNlcnZlcjsKIAotW3NjcmlwdGFibGUsIGJ1aWx0aW5jbGFzcywgdXVpZCg1MWYyYjdmMC02
NDM1LTQwZWMtYjMxNS01ODhmNTJiZTdlZWEpXQorW3NjcmlwdGFibGUsIGJ1aWx0aW5jbGFzcywg
dXVpZCg5YjI4MzMzNy0wOTdkLTRmYTgtYTJkYS05MTYzMThlYWY4MjgpXQogaW50ZXJmYWNlIG5z
SURvY1NoZWxsIDogbnNJU3VwcG9ydHMKIHsKICAgLyoqCiAgICAqIExvYWRzIGEgZ2l2ZW4gVVJJ
LiAgVGhpcyB3aWxsIGdpdmUgcHJpb3JpdHkgdG8gbG9hZGluZyB0aGUgcmVxdWVzdGVkIFVSSQog
ICAgKiBpbiB0aGUgb2JqZWN0IGltcGxlbWVudGluZwl0aGlzIGludGVyZmFjZS4gIElmIGl0IGNh
bid0IGJlIGxvYWRlZCBoZXJlCiAgICAqIGhvd2V2ZXIsIHRoZSBVUkwgZGlzcGF0Y2hlciB3aWxs
IGdvIHRocm91Z2ggaXRzIG5vcm1hbCBwcm9jZXNzIG9mIGNvbnRlbnQKICAgICogbG9hZGluZy4K
ICAgICoKQEAgLTY0NSw5ICs2NDUsMzEgQEAgaW50ZXJmYWNlIG5zSURvY1NoZWxsIDogbnNJU3Vw
cG9ydHMKICAgICovCiAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sIGFzeW5jUGFuWm9vbUVuYWJs
ZWQ7CiAKICAgLyoqCiAgICAqIExpa2UgR2V0U2FtZVR5cGVQYXJlbnQsIGV4Y2VwdCB0aGlzIGln
bm9yZXMgPGlmcmFtZSBtb3picm93c2VyPgogICAgKiBib3VuZGFyaWVzLgogICAgKi8KICAgbnNJ
RG9jU2hlbGwgZ2V0UGFyZW50SWdub3JlQnJvd3NlckZyYW1lKCk7CisKKyAgLyoqCisgICAqIFRo
ZSBzYW5kYm94IGZsYWdzIG9uIHRoZSBkb2NzaGVsbC4gVGhlc2UgcmVmbGVjdCB0aGUgdmFsdWUg
b2YgdGhlIHNhbmRib3gKKyAgICogYXR0cmlidXRlIG9mIHRoZSBhc3NvY2lhdGVkIElGUkFNRSBv
ciBDU1AtcHJvdGVjdGFibGUgY29udGVudCwgaWYKKyAgICogZXhpc3RlbnQuIFNlZSB0aGUgSFRN
TDUgc3BlYyBmb3IgbW9yZSBkZXRhaWxzLgorICAgKiBUaGVzZSBmbGFncyBvbiB0aGUgZG9jc2hl
bGwgcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2FuZGJveAorICAgKiBhdHRyaWJ1
dGUsIHdoaWNoIGlzIG1vZGlmaWFibGUuIFRoZXkgYXJlIG9ubHkgdXNlZCB3aGVuIGxvYWRpbmcg
bmV3CisgICAqIGNvbnRlbnQsIHNhbmRib3ggZmxhZ3MgYXJlIGFsc28gaW1tdXRhYmx5IHNldCBv
biB0aGUgZG9jdW1lbnQgd2hlbiBpdCBpcworICAgKiBsb2FkZWQuCisgICAqIFRoZSBzYW5kYm94
IGZsYWdzIG9mIGEgZG9jdW1lbnQgZGVwZW5kIG9uIHRoZSBzYW5kYm94IGZsYWdzIG9uIGl0cwor
ICAgKiBkb2NzaGVsbCBhbmQgb2YgaXRzIHBhcmVudCBkb2N1bWVudCwgaWYgYW55LgorICAgKiBT
ZWUgbnNTYW5kYm94RmxhZ3MuaCBmb3IgdGhlIHBvc3NpYmxlIGZsYWdzLgorICAgKi8KKyAgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgc2FuZGJveEZsYWdzOworCisgIC8qKgorICAgKiBBcmUgcGx1
Z2lucyBhbGxvd2VkIGluIHRoZSBjdXJyZW50IGRvY3VtZW50IGxvYWRlZCBpbiB0aGlzIGRvY3No
ZWxsID8KKyAgICogKGlmIHRoZXJlIGlzIG9uZSkuIFRoaXMgZGVwZW5kcyBvbiB3aGV0aGVyIHBs
dWdpbnMgYXJlIGFsbG93ZWQgYnkgdGhpcworICAgKiBkb2NzaGVsbCBpdHNlbGYgb3IgaWYgdGhl
IGRvY3VtZW50IGlzIHNhbmRib3hlZCBhbmQgaGVuY2UgcGx1Z2lucyBzaG91bGQKKyAgICogbm90
IGJlIGFsbG93ZWQuCisgICAqLworICBbbm9zY3JpcHQsIG5vdHhwY29tXSBib29sIHBsdWdpbnNB
bGxvd2VkSW5DdXJyZW50RG9jKCk7CiB9OwpkaWZmIC0tZ2l0IGEvZG9tL2Jhc2UvbnNHbG9iYWxX
aW5kb3cuY3BwIGIvZG9tL2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCi0tLSBhL2RvbS9iYXNlL25z
R2xvYmFsV2luZG93LmNwcAorKysgYi9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKQEAgLTIx
NywxNiArMjE3LDE3IEBACiAjaW5jbHVkZSAibW96QXV0b0RvY1VwZGF0ZS5oIgogCiAjaW5jbHVk
ZSAibW96aWxsYS9UZWxlbWV0cnkuaCIKICNpbmNsdWRlICJuc0xvY2F0aW9uLmgiCiAjaW5jbHVk
ZSAibnNXcmFwcGVyQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAibnNET01FdmVudFRhcmdldEhl
bHBlci5oIgogI2luY2x1ZGUgIm5zSUFwcHNTZXJ2aWNlLmgiCiAjaW5jbHVkZSAicHJybmcuaCIK
KyNpbmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogCiAjaWZkZWYgQU5EUk9JRAogI2luY2x1ZGUg
PGFuZHJvaWQvbG9nLmg+CiAjZW5kaWYKIAogI2lmZGVmIFBSX0xPR0dJTkcKIHN0YXRpYyBQUkxv
Z01vZHVsZUluZm8qIGdET01MZWFrUFJMb2c7CiAjZW5kaWYKQEAgLTgyMzcsMTYgKzgyMzgsMjYg
QEAgbnNHbG9iYWxXaW5kb3c6OkdldFNlc3Npb25TdG9yYWdlKG5zSURPTQogICBpZiAoIW1TZXNz
aW9uU3RvcmFnZSkgewogICAgICphU2Vzc2lvblN0b3JhZ2UgPSBudWxscHRyOwogCiAgICAgbnNT
dHJpbmcgZG9jdW1lbnRVUkk7CiAgICAgaWYgKG1Eb2N1bWVudCkgewogICAgICAgbURvY3VtZW50
LT5HZXREb2N1bWVudFVSSShkb2N1bWVudFVSSSk7CiAgICAgfQogCisgICAgLy8gSWYgdGhlIGRv
Y3VtZW50IGhhcyB0aGUgc2FuZGJveGVkIG9yaWdpbiBmbGFnIHNldAorICAgIC8vIGRvbid0IGFs
bG93IGFjY2VzcyB0byBsb2NhbFN0b3JhZ2UuCisgICAgaWYgKCFtRG9jKSB7CisgICAgICByZXR1
cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpZiAobURvYy0+R2V0U2FuZGJveEZs
YWdzKCkgJiBTQU5EQk9YRURfT1JJR0lOKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NF
Q1VSSVRZX0VSUjsKKyAgICB9CisKICAgICBuc3Jlc3VsdCBydiA9IGRvY1NoZWxsLT5HZXRTZXNz
aW9uU3RvcmFnZUZvclByaW5jaXBhbChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZXR0ZXJfQWRkUmVmcyhtU2Vzc2lvblN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwogCiAjaWZkZWYgUFJfTE9HR0lORwogICAgIGlmIChQUl9MT0dfVEVTVChnRE9N
TGVha1BSTG9nLCBQUl9MT0dfREVCVUcpKSB7CkBAIC04MzAyLDE2ICs4MzEzLDIyIEBAIG5zR2xv
YmFsV2luZG93OjpHZXRMb2NhbFN0b3JhZ2UobnNJRE9NU3QKICAgICAgIGRvX0dldFNlcnZpY2Uo
IkBtb3ppbGxhLm9yZy9kb20vc3RvcmFnZW1hbmFnZXI7MSIsICZydik7CiAgICAgTlNfRU5TVVJF
X1NVQ0NFU1MocnYsIHJ2KTsKIAogICAgIG5zU3RyaW5nIGRvY3VtZW50VVJJOwogICAgIGlmICht
RG9jdW1lbnQpIHsKICAgICAgIG1Eb2N1bWVudC0+R2V0RG9jdW1lbnRVUkkoZG9jdW1lbnRVUkkp
OwogICAgIH0KIAorICAgIC8vIElmIHRoZSBkb2N1bWVudCBoYXMgdGhlIHNhbmRib3hlZCBvcmln
aW4gZmxhZyBzZXQKKyAgICAvLyBkb24ndCBhbGxvdyBhY2Nlc3MgdG8gbG9jYWxTdG9yYWdlLgor
ICAgIGlmIChtRG9jICYmIChtRG9jLT5HZXRTYW5kYm94RmxhZ3MoKSAmIFNBTkRCT1hFRF9PUklH
SU4pKSB7CisgICAgICByZXR1cm4gTlNfRVJST1JfRE9NX1NFQ1VSSVRZX0VSUjsKKyAgICB9CisK
ICAgICBuc0lEb2NTaGVsbCogZG9jU2hlbGwgPSBHZXREb2NTaGVsbCgpOwogICAgIG5zQ09NUHRy
PG5zSUxvYWRDb250ZXh0PiBsb2FkQ29udGV4dCA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGRvY1NoZWxs
KTsKIAogICAgIHJ2ID0gc3RvcmFnZU1hbmFnZXItPkdldExvY2FsU3RvcmFnZUZvclByaW5jaXBh
bChwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvY3VtZW50VVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2FkQ29udGV4dCAmJiBsb2FkQ29udGV4dC0+VXNlUHJpdmF0
ZUJyb3dzaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldHRlcl9BZGRSZWZzKG1Mb2NhbFN0b3JhZ2UpKTsKICAgICBOU19FTlNVUkVf
U1VDQ0VTUyhydiwgcnYpOwpkaWZmIC0tZ2l0IGEvZG9tL2Jhc2UvbnNQbHVnaW5BcnJheS5jcHAg
Yi9kb20vYmFzZS9uc1BsdWdpbkFycmF5LmNwcAotLS0gYS9kb20vYmFzZS9uc1BsdWdpbkFycmF5
LmNwcAorKysgYi9kb20vYmFzZS9uc1BsdWdpbkFycmF5LmNwcApAQCAtMTAsMTYgKzEwLDE4IEBA
CiAjaW5jbHVkZSAibnNJRE9NTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAibnNJRE9NTWltZVR5cGUu
aCIKICNpbmNsdWRlICJuc0lQbHVnaW5Ib3N0LmgiCiAjaW5jbHVkZSAibnNJRG9jU2hlbGwuaCIK
ICNpbmNsdWRlICJuc0lXZWJOYXZpZ2F0aW9uLmgiCiAjaW5jbHVkZSAibnNET01DbGFzc0luZm9J
RC5oIgogI2luY2x1ZGUgIm5zUGx1Z2luRXJyb3IuaCIKICNpbmNsdWRlICJuc1BsdWdpbkhvc3Qu
aCIKKyNpbmNsdWRlICJuc0lDb250ZW50Vmlld2VyLmgiCisjaW5jbHVkZSAibnNJRG9jdW1lbnQu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIG1vemlsbGE7CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTo6
ZG9tOwogCiBuc1BsdWdpbkFycmF5Ojpuc1BsdWdpbkFycmF5KE5hdmlnYXRvciogbmF2aWdhdG9y
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lEb2NTaGVsbCAqYURvY1NoZWxsKQog
ICA6IG1OYXZpZ2F0b3IobmF2aWdhdG9yKSwKICAgICBtUGx1Z2luSG9zdChkb19HZXRTZXJ2aWNl
KE1PWl9QTFVHSU5fSE9TVF9DT05UUkFDVElEKSksCkBAIC02MCwyNCArNjIsMjMgQEAgbnNQbHVn
aW5BcnJheTo6R2V0TGVuZ3RoKFBSVWludDMyKiBhTGVuZwogICAKICAgKmFMZW5ndGggPSAwOwog
ICByZXR1cm4gTlNfT0s7CiB9CiAKIGJvb2wKIG5zUGx1Z2luQXJyYXk6OkFsbG93UGx1Z2lucygp
CiB7Ci0gIGJvb2wgYWxsb3dQbHVnaW5zID0gZmFsc2U7CiAgIG5zQ09NUHRyPG5zSURvY1NoZWxs
PiBkb2NTaGVsbCA9IGRvX1F1ZXJ5UmVmZXJlbnQobURvY1NoZWxsKTsKIAotICBpZiAoZG9jU2hl
bGwpCi0gICAgaWYgKE5TX0ZBSUxFRChkb2NTaGVsbC0+R2V0QWxsb3dQbHVnaW5zKCZhbGxvd1Bs
dWdpbnMpKSkKLSAgICAgIGFsbG93UGx1Z2lucyA9IGZhbHNlOworICBpZiAoIWRvY1NoZWxsKSB7
CisgICAgcmV0dXJuIGZhbHNlOworICB9CiAKLSAgcmV0dXJuIGFsbG93UGx1Z2luczsKKyAgcmV0
dXJuIGRvY1NoZWxsLT5QbHVnaW5zQWxsb3dlZEluQ3VycmVudERvYygpOwogfQogCiBuc0lET01Q
bHVnaW4qCiBuc1BsdWdpbkFycmF5OjpHZXRJdGVtQXQoUFJVaW50MzIgYUluZGV4LCBuc3Jlc3Vs
dCogYVJlc3VsdCkKIHsKICAgKmFSZXN1bHQgPSBOU19PSzsKIAogICBpZiAoIUFsbG93UGx1Z2lu
cygpKQpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01IVE1MSUZyYW1lRWxl
bWVudC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50Lmlk
bAotLS0gYS9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbAor
KysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxJRnJhbWVFbGVtZW50LmlkbApAQCAt
MTEsMzIgKzExLDMyIEBACiAgKgogICogVGhpcyBpbnRlcmZhY2UgaXMgdHJ5aW5nIHRvIGZvbGxv
dyB0aGUgRE9NIExldmVsIDIgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53My5v
cmcvVFIvRE9NLUxldmVsLTItSFRNTC8KICAqCiAgKiB3aXRoIGNoYW5nZXMgZnJvbSB0aGUgd29y
ay1pbi1wcm9ncmVzcyBXSEFUV0cgSFRNTCBzcGVjaWZpY2F0aW9uOgogICogaHR0cDovL3d3dy53
aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8KICAqLwogCi1bc2NyaXB0YWJs
ZSwgdXVpZCg5N0U0RjBFMS1CRDI3LTQwRUMtOTI4Ny01NjM0REFGMTVCNzMpXQorW3NjcmlwdGFi
bGUsIHV1aWQoNTJmNjI0NGItYjFmNS00ZjRjLThmZjMtN2UxNDYzMTZmNDExKV0KIGludGVyZmFj
ZSBuc0lET01IVE1MSUZyYW1lRWxlbWVudCA6IG5zSURPTUhUTUxFbGVtZW50CiB7CiAgICAgICAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIGFsaWduOwogICAgICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nICAgICAgICBmcmFtZUJvcmRlcjsKICAgICAgICAgICAgYXR0cmlidXRlIERP
TVN0cmluZyAgICAgICAgaGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAg
ICAgICBsb25nRGVzYzsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbWFy
Z2luSGVpZ2h0OwogICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtYXJnaW5X
aWR0aDsKICAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFtZTsKICAgICAg
ICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgc2Nyb2xsaW5nOwogICAgICAgICAgICBh
dHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzcmM7CiAgICAgICAgICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgICAgICAgIHdpZHRoOwogICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICBy
ZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NRG9jdW1lbnQgICBjb250ZW50RG9jdW1lbnQ7CiAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBuc0lET01XaW5kb3cgICAgIGNvbnRlbnRXaW5kb3c7CiAKLQorICAg
ICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBzYW5kYm94OwogICAvLyBNb3ppbGxh
IGV4dGVuc2lvbnMKICAgLy8gaWZyYW1lIGVsZW1lbnRzIHJlcXVpcmUgdGhlIG1vekFsbG93RnVs
bFNjcmVlbiBhdHRyaWJ1dGUgdG8gYmUgcHJlc2VudAogICAvLyBpZiB0aGV5J3JlIHRvIGFsbG93
IGNvbnRlbnQgaW4gdGhlIHN1YiBkb2N1bWVudCB0byBnbyBpbnRvIERPTSBmdWxsLXNjcmVlbgog
ICAvLyBtb2RlLiBTZWUgaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL2luZGV4LnBocD90aXRsZT1H
ZWNrbzpGdWxsU2NyZWVuQVBJCiAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAg
IG1vekFsbG93RnVsbFNjcmVlbjsKIH07CmRpZmYgLS1naXQgYS9kb20vc3JjL2pzdXJsL25zSlNQ
cm90b2NvbEhhbmRsZXIuY3BwIGIvZG9tL3NyYy9qc3VybC9uc0pTUHJvdG9jb2xIYW5kbGVyLmNw
cAotLS0gYS9kb20vc3JjL2pzdXJsL25zSlNQcm90b2NvbEhhbmRsZXIuY3BwCisrKyBiL2RvbS9z
cmMvanN1cmwvbnNKU1Byb3RvY29sSGFuZGxlci5jcHAKQEAgLTM5LDE2ICszOSwxNyBAQAogI2lu
Y2x1ZGUgIm5zVGhyZWFkVXRpbHMuaCIKICNpbmNsdWRlICJuc0lKU0NvbnRleHRTdGFjay5oIgog
I2luY2x1ZGUgIm5zSVNjcmlwdENoYW5uZWwuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVudC5oIgog
I2luY2x1ZGUgIm5zSU9iamVjdElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAibnNJT2JqZWN0T3V0
cHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAibnNJV3JpdGFibGVQcm9wZXJ0eUJhZzIuaCIKICNpbmNs
dWRlICJuc0lDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJuc1NhbmRib3hGbGFn
cy5oIgogCiBzdGF0aWMgTlNfREVGSU5FX0NJRChrSlNVUklDSUQsIE5TX0pTVVJJX0NJRCk7CiAK
IGNsYXNzIG5zSlNUaHVuayA6IHB1YmxpYyBuc0lJbnB1dFN0cmVhbQogewogcHVibGljOgogICAg
IG5zSlNUaHVuaygpOwogCkBAIC0xODUsMTYgKzE4NiwyMyBAQCBuc3Jlc3VsdCBuc0pTVGh1bms6
OkV2YWx1YXRlU2NyaXB0KG5zSUNoCiAgICAgLy8gR2V0IHRoZSBnbG9iYWwgb2JqZWN0IHdlIHNo
b3VsZCBiZSBydW5uaW5nIG9uLgogICAgIG5zSVNjcmlwdEdsb2JhbE9iamVjdCogZ2xvYmFsID0g
R2V0R2xvYmFsT2JqZWN0KGFDaGFubmVsKTsKICAgICBpZiAoIWdsb2JhbCkgewogICAgICAgICBy
ZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKICAgICB9CiAKICAgICBuc0NPTVB0cjxuc1BJRE9NV2lu
ZG93PiB3aW4oZG9fUXVlcnlJbnRlcmZhY2UoZ2xvYmFsKSk7CiAKKyAgICAvLyBTYW5kYm94ZWQg
ZG9jdW1lbnQgY2hlY2s6IGphdmFzY3JpcHQ6IFVSSSdzIGFyZSBkaXNhYmxlZAorICAgIC8vIGlu
IGEgc2FuZGJveGVkIGRvY3VtZW50IHVubGVzcyAnYWxsb3ctc2NyaXB0cycgd2FzIHNwZWNpZmll
ZC4KKyAgICBuc0lEb2N1bWVudCogZG9jID0gYU9yaWdpbmFsSW5uZXJXaW5kb3ctPkdldEV4dGFu
dERvYygpOworICAgIGlmIChkb2MgJiYgKGRvYy0+R2V0U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9Y
RURfU0NSSVBUUykpIHsKKyAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9SRVRWQUxfVU5ERUZJ
TkVEOworICAgIH0KKwogICAgIC8vIFB1c2ggb3VyIHBvcHVwIGNvbnRyb2wgc3RhdGUKICAgICBu
c0F1dG9Qb3B1cFN0YXRlUHVzaGVyIHBvcHVwU3RhdGVQdXNoZXIod2luLCBhUG9wdXBTdGF0ZSk7
CiAKICAgICAvLyBNYWtlIHN1cmUgd2Ugc3RpbGwgaGF2ZSB0aGUgc2FtZSBpbm5lciB3aW5kb3cg
YXMgd2UgdXNlZCB0by4KICAgICBuc1BJRE9NV2luZG93ICppbm5lcldpbiA9IHdpbi0+R2V0Q3Vy
cmVudElubmVyV2luZG93KCk7CiAKICAgICBpZiAoaW5uZXJXaW4gIT0gYU9yaWdpbmFsSW5uZXJX
aW5kb3cpIHsKICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX1VORVhQRUNURUQ7CmRpZmYgLS1naXQg
YS9lZGl0b3IvY29tcG9zZXIvc3JjL25zQ29tcG9zZXJEb2N1bWVudENvbW1hbmRzLmNwcCBiL2Vk
aXRvci9jb21wb3Nlci9zcmMvbnNDb21wb3NlckRvY3VtZW50Q29tbWFuZHMuY3BwCi0tLSBhL2Vk
aXRvci9jb21wb3Nlci9zcmMvbnNDb21wb3NlckRvY3VtZW50Q29tbWFuZHMuY3BwCisrKyBiL2Vk
aXRvci9jb21wb3Nlci9zcmMvbnNDb21wb3NlckRvY3VtZW50Q29tbWFuZHMuY3BwCkBAIC0xNTAs
MjkgKzE1MCwyOCBAQCBuc1NldERvY3VtZW50T3B0aW9uc0NvbW1hbmQ6OkdldENvbW1hbmRTCiAg
IHsKICAgICAvLyBmb3IgcG9zc2libGUgdmFsdWVzIG9mIGFuaW1hdGlvbiBtb2RlLCBzZWUKICAg
ICAvLyBodHRwOi8vbHhyLm1vemlsbGEub3JnL3NlYW1vbmtleS9zb3VyY2UvaW1hZ2UvcHVibGlj
L2ltZ0lDb250YWluZXIuaWRsCiAgICAgcnYgPSBhUGFyYW1zLT5TZXRMb25nVmFsdWUoImltYWdl
QW5pbWF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzQ29udGV4dC0+
SW1hZ2VBbmltYXRpb25Nb2RlKCkpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAg
IH0KIAotICBib29sIGFsbG93UGx1Z2luczsgCisgIGJvb2wgYWxsb3dQbHVnaW5zID0gZmFsc2U7
IAogICBydiA9IGFQYXJhbXMtPkdldEJvb2xlYW5WYWx1ZSgicGx1Z2lucyIsICZhbGxvd1BsdWdp
bnMpOwogICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSkKICAgewogICAgIG5zQ09NUHRyPG5zSVN1cHBv
cnRzPiBjb250YWluZXIgPSBwcmVzQ29udGV4dC0+R2V0Q29udGFpbmVyKCk7CiAgICAgTlNfRU5T
VVJFX1RSVUUoY29udGFpbmVyLCBOU19FUlJPUl9GQUlMVVJFKTsKIAogICAgIG5zQ09NUHRyPG5z
SURvY1NoZWxsPiBkb2NTaGVsbChkb19RdWVyeUludGVyZmFjZShjb250YWluZXIsICZydikpOwog
ICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAgICAgTlNfRU5TVVJFX1RSVUUoZG9jU2hl
bGwsIE5TX0VSUk9SX0ZBSUxVUkUpOwogCi0gICAgcnYgPSBkb2NTaGVsbC0+R2V0QWxsb3dQbHVn
aW5zKCZhbGxvd1BsdWdpbnMpOwotICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgICAg
YWxsb3dQbHVnaW5zID0gZG9jU2hlbGwtPlBsdWdpbnNBbGxvd2VkSW5DdXJyZW50RG9jKCk7CiAK
ICAgICBydiA9IGFQYXJhbXMtPlNldEJvb2xlYW5WYWx1ZSgicGx1Z2lucyIsIGFsbG93UGx1Z2lu
cyk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgfQogCiAgIHJldHVybiBOU19P
SzsKIH0KIApkaWZmIC0tZ2l0IGEvZWRpdG9yL2NvbXBvc2VyL3NyYy9uc0VkaXRpbmdTZXNzaW9u
LmNwcCBiL2VkaXRvci9jb21wb3Nlci9zcmMvbnNFZGl0aW5nU2Vzc2lvbi5jcHAKLS0tIGEvZWRp
dG9yL2NvbXBvc2VyL3NyYy9uc0VkaXRpbmdTZXNzaW9uLmNwcAorKysgYi9lZGl0b3IvY29tcG9z
ZXIvc3JjL25zRWRpdGluZ1Nlc3Npb24uY3BwCkBAIC0xOTIsMjAgKzE5MiwxNyBAQCBuc0VkaXRp
bmdTZXNzaW9uOjpEaXNhYmxlSlNBbmRQbHVnaW5zKG5zCiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2
LCBydik7CiAKICAgbVNjcmlwdHNFbmFibGVkID0gdG1wOwogCiAgIHJ2ID0gZG9jU2hlbGwtPlNl
dEFsbG93SmF2YXNjcmlwdChmYWxzZSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAK
ICAgLy8gRGlzYWJsZSBwbHVnaW5zIGluIHRoaXMgZG9jdW1lbnQ6Ci0gIHJ2ID0gZG9jU2hlbGwt
PkdldEFsbG93UGx1Z2lucygmdG1wKTsKLSAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKLQot
ICBtUGx1Z2luc0VuYWJsZWQgPSB0bXA7CisgIG1QbHVnaW5zRW5hYmxlZCA9IGRvY1NoZWxsLT5Q
bHVnaW5zQWxsb3dlZEluQ3VycmVudERvYygpOwogCiAgIHJ2ID0gZG9jU2hlbGwtPlNldEFsbG93
UGx1Z2lucyhmYWxzZSk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CiAKICAgbURpc2Fi
bGVkSlNBbmRQbHVnaW5zID0gdHJ1ZTsKIAogICByZXR1cm4gTlNfT0s7CiB9CmRpZmYgLS1naXQg
YS9lbWJlZGRpbmcvYnJvd3Nlci93ZWJCcm93c2VyL25zV2ViQnJvd3NlckNvbnRlbnRQb2xpY3ku
Y3BwIGIvZW1iZWRkaW5nL2Jyb3dzZXIvd2ViQnJvd3Nlci9uc1dlYkJyb3dzZXJDb250ZW50UG9s
aWN5LmNwcAotLS0gYS9lbWJlZGRpbmcvYnJvd3Nlci93ZWJCcm93c2VyL25zV2ViQnJvd3NlckNv
bnRlbnRQb2xpY3kuY3BwCisrKyBiL2VtYmVkZGluZy9icm93c2VyL3dlYkJyb3dzZXIvbnNXZWJC
cm93c2VyQ29udGVudFBvbGljeS5jcHAKQEAgLTQsMTYgKzQsMTcgQEAKICAqIFRoaXMgU291cmNl
IENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMK
ICAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmli
dXRlZCB3aXRoIHRoaXMKICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96
aWxsYS5vcmcvTVBMLzIuMC8uICovCiAKICNpbmNsdWRlICJuc1dlYkJyb3dzZXJDb250ZW50UG9s
aWN5LmgiCiAjaW5jbHVkZSAibnNJRG9jU2hlbGwuaCIKICNpbmNsdWRlICJuc0NPTVB0ci5oIgog
I2luY2x1ZGUgIm5zQ29udGVudFBvbGljeVV0aWxzLmgiCisjaW5jbHVkZSAibnNJQ29udGVudFZp
ZXdlci5oIgogCiBuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5Ojpuc1dlYkJyb3dzZXJDb250ZW50
UG9saWN5KCkKIHsKICAgICBNT1pfQ09VTlRfQ1RPUihuc1dlYkJyb3dzZXJDb250ZW50UG9saWN5
KTsKIH0KIAogbnNXZWJCcm93c2VyQ29udGVudFBvbGljeTo6fm5zV2ViQnJvd3NlckNvbnRlbnRQ
b2xpY3koKQogewpAQCAtMzYsMTcgKzM3LDE4IEBAIFBlcmZvcm1Qb2xpY3lDaGVjayhQUlVpbnQz
MiAgICAgY29udGVudFQKICAgICBpZiAoIXNoZWxsKQogICAgICAgICByZXR1cm4gTlNfT0s7CiAK
ICAgICBuc3Jlc3VsdCBydjsKICAgICBib29sIGFsbG93ZWQgPSB0cnVlOwogCiAgICAgc3dpdGNo
IChjb250ZW50VHlwZSkgewogICAgICAgY2FzZSBuc0lDb250ZW50UG9saWN5OjpUWVBFX09CSkVD
VDoKLSAgICAgICAgcnYgPSBzaGVsbC0+R2V0QWxsb3dQbHVnaW5zKCZhbGxvd2VkKTsKKyAgICAg
ICAgYWxsb3dlZCA9IHNoZWxsLT5QbHVnaW5zQWxsb3dlZEluQ3VycmVudERvYygpOworICAgICAg
ICBydiA9IE5TX09LOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgbnNJQ29udGVudFBvbGlj
eTo6VFlQRV9TQ1JJUFQ6CiAgICAgICAgIHJ2ID0gc2hlbGwtPkdldEFsbG93SmF2YXNjcmlwdCgm
YWxsb3dlZCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBuc0lDb250ZW50UG9saWN5OjpU
WVBFX1NVQkRPQ1VNRU5UOgogICAgICAgICBydiA9IHNoZWxsLT5HZXRBbGxvd1N1YmZyYW1lcygm
YWxsb3dlZCk7CiAgICAgICAgIGJyZWFrOwogI2lmIDAKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9j
b21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL01ha2VmaWxlLmluIGIvZW1iZWRkaW5nL2NvbXBv
bmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4KLS0tIGEvZW1iZWRkaW5nL2NvbXBv
bmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4KKysrIGIvZW1iZWRkaW5nL2NvbXBv
bmVudHMvd2luZG93d2F0Y2hlci9zcmMvTWFrZWZpbGUuaW4KQEAgLTI0LDExICsyNCwxMSBAQCBD
UFBTUkNTCQkrPSBuc0RpYWxvZ1BhcmFtQmxvY2suY3BwIFwKIAkJICAgJChOVUxMKQogZW5kaWYK
IAogIyB3ZSBkb24ndCB3YW50IHRoZSBzaGFyZWQgbGliLCBidXQgd2Ugd2FudCB0byBmb3JjZSB0
aGUgY3JlYXRpb24gb2YgYQogIyBzdGF0aWMgbGliLgogRk9SQ0VfU1RBVElDX0xJQiA9IDEKIAog
IyBGb3IgbnNKU1V0aWxzCi1MT0NBTF9JTkNMVURFUyArPSAtSSQodG9wc3JjZGlyKS9kb20vYmFz
ZQorTE9DQUxfSU5DTFVERVMgKz0gLUkkKHRvcHNyY2RpcikvZG9tL2Jhc2UgXAogCiBpbmNsdWRl
ICQodG9wc3JjZGlyKS9jb25maWcvcnVsZXMubWsKZGlmZiAtLWdpdCBhL2VtYmVkZGluZy9jb21w
b25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAgYi9lbWJlZGRpbmcv
Y29tcG9uZW50cy93aW5kb3d3YXRjaGVyL3NyYy9uc1dpbmRvd1dhdGNoZXIuY3BwCi0tLSBhL2Vt
YmVkZGluZy9jb21wb25lbnRzL3dpbmRvd3dhdGNoZXIvc3JjL25zV2luZG93V2F0Y2hlci5jcHAK
KysrIGIvZW1iZWRkaW5nL2NvbXBvbmVudHMvd2luZG93d2F0Y2hlci9zcmMvbnNXaW5kb3dXYXRj
aGVyLmNwcApAQCAtNTMsMTYgKzUzLDE3IEBACiAjaW5jbHVkZSAibnNQSURPTVN0b3JhZ2UuaCIK
ICNpbmNsdWRlICJuc0lXaWRnZXQuaCIKICNpbmNsdWRlICJuc0ZvY3VzTWFuYWdlci5oIgogI2lu
Y2x1ZGUgIm5zSVByZXNTaGVsbC5oIgogI2luY2x1ZGUgIm5zUHJlc0NvbnRleHQuaCIKICNpbmNs
dWRlICJuc0NvbnRlbnRVdGlscy5oIgogI2luY2x1ZGUgIm5zSVByZWZCcmFuY2guaCIKICNpbmNs
dWRlICJuc0lQcmVmU2VydmljZS5oIgorI2luY2x1ZGUgIm5zU2FuZGJveEZsYWdzLmgiCiAKICNp
ZmRlZiBVU0VXRUFLUkVGUwogI2luY2x1ZGUgIm5zSVdlYWtSZWZlcmVuY2UuaCIKICNlbmRpZgog
CiB1c2luZyBuYW1lc3BhY2UgbW96aWxsYTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNKU1N0YWNr
Q29udHJhY3RJRD0iQG1vemlsbGEub3JnL2pzL3hwYy9Db250ZXh0U3RhY2s7MSI7CkBAIC01NzAs
MTYgKzU3MSwyOCBAQCBuc1dpbmRvd1dhdGNoZXI6Ok9wZW5XaW5kb3dKU0ludGVybmFsKG5zCiAg
IH0KIAogICBpZiAoIW5ld0RvY1NoZWxsSXRlbSkgewogICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGVp
dGhlciBvcGVuIHVwIGEgbmV3IHdpbmRvdyBvdXJzZWx2ZXMgb3IgYXNrIGEKICAgICAvLyBuc0lX
aW5kb3dQcm92aWRlciBmb3Igb25lLiAgSW4gZWl0aGVyIGNhc2UsIHdlJ2xsIHdhbnQgdG8gc2V0
IHRoZSByaWdodAogICAgIC8vIG5hbWUgb24gaXQuCiAgICAgd2luZG93TmVlZHNOYW1lID0gdHJ1
ZTsKIAorICAgIC8vIElmIHRoZSBwYXJlbnQgdHJ5aW5nIHRvIG9wZW4gYSBuZXcgd2luZG93IGlz
IHNhbmRib3hlZCwKKyAgICAvLyB0aGlzIGlzIG5vdCBhbGxvd2VkIGFuZCB3ZSBmYWlsIGhlcmUu
CisgICAgaWYgKGFQYXJlbnQpIHsKKyAgICAgIG5zQ09NUHRyPG5zSURPTURvY3VtZW50PiBkb21k
b2M7CisgICAgICBhUGFyZW50LT5HZXREb2N1bWVudChnZXR0ZXJfQWRkUmVmcyhkb21kb2MpKTsK
KyAgICAgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBkb19RdWVyeUludGVyZmFjZShkb21k
b2MpOworCisgICAgICBpZiAoZG9jICYmIChkb2MtPkdldFNhbmRib3hGbGFncygpICYgU0FOREJP
WEVEX05BVklHQVRJT04pKSB7CisgICAgICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworICAg
ICAgfQorICAgIH0KKwogICAgIC8vIE5vdyBjaGVjayB3aGV0aGVyIGl0J3Mgb2sgdG8gYXNrIGEg
d2luZG93IHByb3ZpZGVyIGZvciBhIHdpbmRvdy4gIERvbid0CiAgICAgLy8gZG8gaXQgaWYgd2Un
cmUgb3BlbmluZyBhIGRpYWxvZyBvciBpZiBvdXIgcGFyZW50IGlzIGEgY2hyb21lIHdpbmRvdyBv
cgogICAgIC8vIGlmIHdlJ3JlIG9wZW5pbmcgc29tZXRoaW5nIHRoYXQgaGFzIG1vZGFsLCBkaWFs
b2csIG9yIGNocm9tZSBmbGFncyBzZXQuCiAgICAgbnNDT01QdHI8bnNJRE9NQ2hyb21lV2luZG93
PiBjaHJvbWVXaW4gPSBkb19RdWVyeUludGVyZmFjZShhUGFyZW50KTsKICAgICBpZiAoIWFEaWFs
b2cgJiYgIWNocm9tZVdpbiAmJgogICAgICAgICAhKGNocm9tZUZsYWdzICYgKG5zSVdlYkJyb3dz
ZXJDaHJvbWU6OkNIUk9NRV9NT0RBTCAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lXZWJCcm93c2VyQ2hyb21lOjpDSFJPTUVfT1BFTkFTX0RJQUxPRyB8IAogICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVdlYkJyb3dzZXJDaHJvbWU6OkNIUk9NRV9PUEVOQVNfQ0hST01F
KSkpIHsK
</data>
<flag name="review"
          id="540015"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650373</attachid>
            <date>2012-08-08 17:09:07 -0700</date>
            <delta_ts>2012-08-08 17:09:07 -0700</delta_ts>
            <desc>CheckMayLoad changes to allow sandboxed workers to load blob and data URIs v6</desc>
            <filename>iframe_sandbox_check_may_load</filename>
            <type>text/plain</type>
            <size>29941</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgODNlNTY2ZDIwMDUxZjA3NjU0OTIxMWYyNmFm
ZTBhMjQyNGRkNGU4OQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIG1vZGlmeSBDaGVja01heUxvYWQgdG8gYWxsb3cgc2FuZGJveGVkIHdvcmtlcnMg
dG8gbG9hZCBibG9iIGFuZCBkYXRhIFVSSXMgcj1qc3QKCmRpZmYgLS1naXQgYS9jYXBzL2lkbC9u
c0lQcmluY2lwYWwuaWRsIGIvY2Fwcy9pZGwvbnNJUHJpbmNpcGFsLmlkbAotLS0gYS9jYXBzL2lk
bC9uc0lQcmluY2lwYWwuaWRsCisrKyBiL2NhcHMvaWRsL25zSVByaW5jaXBhbC5pZGwKQEAgLTE2
LDE3ICsxNiwxNyBAQCBzdHJ1Y3QgSlNQcmluY2lwYWxzOwogCiBpbnRlcmZhY2UgbnNJVVJJOwog
aW50ZXJmYWNlIG5zSUNvbnRlbnRTZWN1cml0eVBvbGljeTsKIAogW3B0cl0gbmF0aXZlIEpTQ29u
dGV4dChKU0NvbnRleHQpOwogW3B0cl0gbmF0aXZlIEpTUHJpbmNpcGFscyhKU1ByaW5jaXBhbHMp
OwogW3B0cl0gbmF0aXZlIFByaW5jaXBhbEFycmF5KG5zVEFycmF5PG5zQ09NUHRyPG5zSVByaW5j
aXBhbD4gPik7CiAKLVtzY3JpcHRhYmxlLCB1dWlkKDhhNzRiMDExLTY2N2QtNGNmYS1iMmEyLWIy
NzU4MmJhNWYzOCldCitbc2NyaXB0YWJsZSwgdXVpZCg4MjVmZmNlOC05NjJkLTExZTEtYWVmMy04
ZjJiNjE4ODcwOWIpXQogaW50ZXJmYWNlIG5zSVByaW5jaXBhbCA6IG5zSVNlcmlhbGl6YWJsZQog
ewogICAgIC8qKgogICAgICAqIFZhbHVlcyBvZiBjYXBhYmlsaXRpZXMgZm9yIGVhY2ggcHJpbmNp
cGFsLiBPcmRlciBpcwogICAgICAqIHNpZ25pZmljYW50OiBpZiBhbiBvcGVyYXRpb24gaXMgcGVy
Zm9ybWVkIG9uIGEgc2V0CiAgICAgICogb2YgY2FwYWJpbGl0aWVzLCB0aGUgbWluaW11bSBpcyBj
b21wdXRlZC4KICAgICAgKi8KICAgICBjb25zdCBzaG9ydCBFTkFCTEVfREVOSUVEICAgICAgICAg
ICAgICAgID0gMTsKQEAgLTE2OCwzMyArMTY4LDQzIEBAIGludGVyZmFjZSBuc0lQcmluY2lwYWwg
OiBuc0lTZXJpYWxpemFibGUKICAgICAgKi8KICAgICBib29sZWFuIHN1YnN1bWVzSWdub3JpbmdE
b21haW4oaW4gbnNJUHJpbmNpcGFsIG90aGVyKTsKIAogICAgIC8qKgogICAgICAqIENoZWNrcyB3
aGV0aGVyIHRoaXMgcHJpbmNpcGFsIGlzIGFsbG93ZWQgdG8gbG9hZCB0aGUgbmV0d29yayByZXNv
dXJjZQogICAgICAqIGxvY2F0ZWQgYXQgdGhlIGdpdmVuIFVSSSB1bmRlciB0aGUgc2FtZS1vcmln
aW4gcG9saWN5LiBUaGlzIG1lYW5zIHRoYXQKICAgICAgKiBjb2RlYmFzZSBwcmluY2lwYWxzIGFy
ZSBvbmx5IGFsbG93ZWQgdG8gbG9hZCByZXNvdXJjZXMgZnJvbSB0aGUgc2FtZQogICAgICAqIGRv
bWFpbiwgdGhlIHN5c3RlbSBwcmluY2lwYWwgaXMgYWxsb3dlZCB0byBsb2FkIGFueXRoaW5nLCBh
bmQgbnVsbAotICAgICAqIHByaW5jaXBhbHMgYXJlIG5vdCBhbGxvd2VkIHRvIGxvYWQgYW55dGhp
bmcuCisgICAgICogcHJpbmNpcGFscyBhcmUgbm90IGFsbG93ZWQgdG8gbG9hZCBhbnl0aGluZy4g
VGhpcyBpcyBjaGFuZ2VkIHNsaWdodGx5CisgICAgICogYnkgdGhlIG9wdGlvbmFsIGZsYWcgYWxs
b3dJZkluaGVyaXRzUHJpbmNpcGFsICh3aGljaCBkZWZhdWx0cyB0byBmYWxzZSkKKyAgICAgKiB3
aGljaCBhbGxvd3MgdGhlIGxvYWQgb2YgYSBkYXRhOiBVUkkgKHdoaWNoIGluaGVyaXRzIHRoZSBw
cmluY2lwYWwgb2YKKyAgICAgKiBpdHMgbG9hZGVyKSBvciBhIFVSSSB3aXRoIHRoZSBzYW1lIHBy
aW5jaXBhbCBhcyBpdHMgbG9hZGVyIChlZy4gYSAKKyAgICAgKiBCbG9iIFVSSSkuCisgICAgICog
SW4gdGhlc2UgY2FzZXMsIHdpdGggYWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsIHNldCB0byB0cnVl
LCB0aGUgVVJJIGNhbgorICAgICAqIGJlIGxvYWRlZCBieSBhIG51bGwgcHJpbmNpcGFsLgogICAg
ICAqCiAgICAgICogSWYgdGhlIGxvYWQgaXMgYWxsb3dlZCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90
aGluZy4gSWYgdGhlIGxvYWQgaXMgbm90CiAgICAgICogYWxsb3dlZCB0aGUgZnVuY3Rpb24gdGhy
b3dzIE5TX0VSUk9SX0RPTV9CQURfVVJJLgogICAgICAqCiAgICAgICogTk9URTogT3RoZXIgcG9s
aWNpZXMgbWlnaHQgb3ZlcnJpZGUgdGhpcywgc3VjaCBhcyB0aGUgQWNjZXNzLUNvbnRyb2wKICAg
ICAgKiAgICAgICBzcGVjaWZpY2F0aW9uLgogICAgICAqIE5PVEU6IFRoZSAnZG9tYWluJyBhdHRy
aWJ1dGUgaGFzIG5vIGVmZmVjdCBvbiB0aGUgYmVoYXZpb3VyIG9mIHRoaXMKICAgICAgKiAgICAg
ICBmdW5jdGlvbi4KICAgICAgKgogICAgICAqCiAgICAgICogQHBhcmFtIHVyaSAgICBUaGUgVVJJ
IGFib3V0IHRvIGJlIGxvYWRlZC4KICAgICAgKiBAcGFyYW0gcmVwb3J0IElmIHRydWUsIHdpbGwg
cmVwb3J0IGEgd2FybmluZyB0byB0aGUgY29uc29sZSBzZXJ2aWNlCiAgICAgICogICAgICAgICAg
ICAgICBpZiB0aGUgbG9hZCBpcyBub3QgYWxsb3dlZC4KKyAgICAgKiBAcGFyYW0gYWxsb3dJZklu
aGVyaXRzUHJpbmNpcGFsICAgSWYgdHJ1ZSwgdGhlIGxvYWQgaXMgYWxsb3dlZCBpZiB0aGUKKyAg
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVlIGluaGVyaXRzIHRo
ZSBwcmluY2lwYWwgb2YgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvYWRlci4KICAgICAgKiBAdGhyb3dzIE5TX0VSUk9SX0RPTV9CQURfVVJJIGlmIHRoZSBs
b2FkIGlzIG5vdCBhbGxvd2VkLgogICAgICAqLwotICAgIHZvaWQgY2hlY2tNYXlMb2FkKGluIG5z
SVVSSSB1cmksIGluIGJvb2xlYW4gcmVwb3J0KTsKKyAgICB2b2lkIGNoZWNrTWF5TG9hZChpbiBu
c0lVUkkgdXJpLCBpbiBib29sZWFuIHJlcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICBpbiBi
b29sZWFuIGFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCk7CiAKICAgICAvKioKICAgICAgKiBUaGUg
c3ViamVjdCBuYW1lIGZvciB0aGUgY2VydGlmaWNhdGUuICBUaGlzIGFjdHVhbGx5IGlkZW50aWZp
ZXMgdGhlCiAgICAgICogc3ViamVjdCBvZiB0aGUgY2VydGlmaWNhdGUuICBUaGlzIG1heSB3ZWxs
IG5vdCBiZSBhIHN0cmluZyB0aGF0IHdvdWxkCiAgICAgICogbWVhbiBtdWNoIHRvIGEgdHlwaWNh
bCB1c2VyIG9uIGl0cyBvd24gKGUuZy4gaXQgbWF5IGhhdmUgYSBudW1iZXIgb2YKICAgICAgKiBk
aWZmZXJlbnQgbmFtZXMgYWxsIGNvbmNhdGVuYXRlZCB0b2dldGhlciB3aXRoIHNvbWUgaW5mb3Jt
YXRpb24gb24gd2hhdAogICAgICAqIHRoZXkgbWVhbiBpbiBiZXR3ZWVuKS4KICAgICAgKgpkaWZm
IC0tZ2l0IGEvY2Fwcy9pbmNsdWRlL25zTnVsbFByaW5jaXBhbC5oIGIvY2Fwcy9pbmNsdWRlL25z
TnVsbFByaW5jaXBhbC5oCi0tLSBhL2NhcHMvaW5jbHVkZS9uc051bGxQcmluY2lwYWwuaAorKysg
Yi9jYXBzL2luY2x1ZGUvbnNOdWxsUHJpbmNpcGFsLmgKQEAgLTEwLDE2ICsxMCwxNyBAQAogICov
CiAKICNpZm5kZWYgbnNOdWxsUHJpbmNpcGFsX2hfXwogI2RlZmluZSBuc051bGxQcmluY2lwYWxf
aF9fCiAKICNpbmNsdWRlICJuc0lQcmluY2lwYWwuaCIKICNpbmNsdWRlICJuc0pTUHJpbmNpcGFs
cy5oIgogI2luY2x1ZGUgIm5zQ09NUHRyLmgiCisjaW5jbHVkZSAibnNQcmluY2lwYWwuaCIKIAog
Y2xhc3MgbnNJVVJJOwogCiAjZGVmaW5lIE5TX05VTExQUklOQ0lQQUxfQ0xBU1NOQU1FICJudWxs
cHJpbmNpcGFsIgogI2RlZmluZSBOU19OVUxMUFJJTkNJUEFMX0NJRCBcCiB7IDB4ZGQxNTZkNjIs
IDB4ZDI2ZiwgMHg0NDQxLCBcCiAgeyAweDljLCAweGRiLCAweGU4LCAweGYwLCAweDkxLCAweDA3
LCAweGMyLCAweDczIH0gfQogI2RlZmluZSBOU19OVUxMUFJJTkNJUEFMX0NPTlRSQUNUSUQgIkBt
b3ppbGxhLm9yZy9udWxscHJpbmNpcGFsOzEiCmRpZmYgLS1naXQgYS9jYXBzL2luY2x1ZGUvbnNQ
cmluY2lwYWwuaCBiL2NhcHMvaW5jbHVkZS9uc1ByaW5jaXBhbC5oCi0tLSBhL2NhcHMvaW5jbHVk
ZS9uc1ByaW5jaXBhbC5oCisrKyBiL2NhcHMvaW5jbHVkZS9uc1ByaW5jaXBhbC5oCkBAIC04LDE2
ICs4LDE5IEBACiAKICNpbmNsdWRlICJuc0F1dG9QdHIuaCIKICNpbmNsdWRlICJuc0NPTVB0ci5o
IgogI2luY2x1ZGUgIm5zVm9pZEFycmF5LmgiCiAjaW5jbHVkZSAibnNIYXNodGFibGUuaCIKICNp
bmNsdWRlICJuc0pTUHJpbmNpcGFscy5oIgogI2luY2x1ZGUgIm5zVEFycmF5LmgiCiAjaW5jbHVk
ZSAibnNBdXRvUHRyLmgiCisjaW5jbHVkZSAibnNJUHJvdG9jb2xIYW5kbGVyLmgiCisjaW5jbHVk
ZSAibnNOZXRVdGlsLmgiCisjaW5jbHVkZSAibnNTY3JpcHRTZWN1cml0eU1hbmFnZXIuaCIKIAog
Y2xhc3MgbnNJT2JqZWN0SW5wdXRTdHJlYW07CiBjbGFzcyBuc0lPYmplY3RPdXRwdXRTdHJlYW07
CiBjbGFzcyBEb21haW5Qb2xpY3k7IAogCiBjbGFzcyBuc0Jhc2VQcmluY2lwYWwgOiBwdWJsaWMg
bnNKU1ByaW5jaXBhbHMKIHsKIHB1YmxpYzoKQEAgLTExOCwxNyArMTIxLDE3IEBAIHB1YmxpYzoK
ICAgTlNfSU1FVEhPRCBFcXVhbHNJZ25vcmluZ0RvbWFpbihuc0lQcmluY2lwYWwqIG90aGVyLCBi
b29sKiBfcmV0dmFsKTsKICAgTlNfSU1FVEhPRCBHZXRIYXNoVmFsdWUoUFJVaW50MzIqIGFIYXNo
VmFsdWUpOwogICBOU19JTUVUSE9EIEdldFVSSShuc0lVUkkqKiBhVVJJKTsKICAgTlNfSU1FVEhP
RCBHZXREb21haW4obnNJVVJJKiogYURvbWFpbik7CiAgIE5TX0lNRVRIT0QgU2V0RG9tYWluKG5z
SVVSSSogYURvbWFpbik7CiAgIE5TX0lNRVRIT0QgR2V0T3JpZ2luKGNoYXIqKiBhT3JpZ2luKTsK
ICAgTlNfSU1FVEhPRCBTdWJzdW1lcyhuc0lQcmluY2lwYWwqIG90aGVyLCBib29sKiBfcmV0dmFs
KTsKICAgTlNfSU1FVEhPRCBTdWJzdW1lc0lnbm9yaW5nRG9tYWluKG5zSVByaW5jaXBhbCogb3Ro
ZXIsIGJvb2wqIF9yZXR2YWwpOwotICBOU19JTUVUSE9EIENoZWNrTWF5TG9hZChuc0lVUkkqIHVy
aSwgYm9vbCByZXBvcnQpOworICBOU19JTUVUSE9EIENoZWNrTWF5TG9hZChuc0lVUkkqIHVyaSwg
Ym9vbCByZXBvcnQsIGJvb2wgYWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsKTsKICAgTlNfSU1FVEhP
RCBHZXRFeHRlbmRlZE9yaWdpbihuc0FDU3RyaW5nJiBhRXh0ZW5kZWRPcmlnaW4pOwogICBOU19J
TUVUSE9EIEdldEFwcFN0YXR1cyhQUlVpbnQxNiogYUFwcFN0YXR1cyk7CiAgIE5TX0lNRVRIT0Qg
R2V0QXBwSWQoUFJVaW50MzIqIGFBcHBTdGF0dXMpOwogICBOU19JTUVUSE9EIEdldElzSW5Ccm93
c2VyRWxlbWVudChib29sKiBhSXNJbkJyb3dzZXJFbGVtZW50KTsKICNpZmRlZiBERUJVRwogICB2
aXJ0dWFsIHZvaWQgZHVtcEltcGwoKTsKICNlbmRpZgogCkBAIC0xNTMsMTYgKzE1NiwzMyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFJc0NlcnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFUcnVzdGVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJVaW50MzIgYUFwcElkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBhSW5Nb3pCcm93c2VyKTsKIAogICB2aXJ0dWFsIHZvaWQgR2V0U2NyaXB0TG9j
YXRpb24obnNBQ1N0cmluZyYgYVN0cikgTU9aX09WRVJSSURFOwogICB2b2lkIFNldFVSSShuc0lV
UkkqIGFVUkkpOwogCisgIHN0YXRpYyBib29sIElzUHJpbmNpcGFsSW5oZXJpdGVkKG5zSVVSSSog
YVVSSSkgeworICAgIC8vIHJldHVybiB0cnVlIGlmIHRoZSBsb2FkZWUgVVJJIGhhcworICAgIC8v
IHRoZSBVUklfSU5IRVJJVFNfU0VDVVJJVFlfQ09OVEVYVCBmbGFnIHNldC4KKyAgICBib29sIGRv
ZXNJbmhlcml0U2VjdXJpdHlDb250ZXh0OworICAgIG5zcmVzdWx0IHJ2ID0KKyAgICBOU19VUklD
aGFpbkhhc0ZsYWdzKGFVUkksCisgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcm90b2NvbEhh
bmRsZXI6OlVSSV9JTkhFUklUU19TRUNVUklUWV9DT05URVhULAorICAgICAgICAgICAgICAgICAg
ICAgICAgJmRvZXNJbmhlcml0U2VjdXJpdHlDb250ZXh0KTsKKworICAgIGlmIChOU19TVUNDRUVE
RUQocnYpICYmIGRvZXNJbmhlcml0U2VjdXJpdHlDb250ZXh0KSB7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworCiAgIC8qKgogICAgKiBDb21w
dXRlcyB0aGUgcHVueS1lbmNvZGVkIG9yaWdpbiBvZiBhVVJJLgogICAgKi8KICAgc3RhdGljIG5z
cmVzdWx0IEdldE9yaWdpbkZvclVSSShuc0lVUkkqIGFVUkksIGNoYXIgKiphT3JpZ2luKTsKIAog
ICBuc0NPTVB0cjxuc0lVUkk+IG1Eb21haW47CiAgIG5zQ09NUHRyPG5zSVVSST4gbUNvZGViYXNl
OwogICBQUlVpbnQzMiBtQXBwSWQ7CkBAIC0xOTcsMTcgKzIxNywxNyBAQCBwdWJsaWM6CiAgIE5T
X0lNRVRIT0QgRXF1YWxzSWdub3JpbmdEb21haW4obnNJUHJpbmNpcGFsKiBvdGhlciwgYm9vbCog
X3JldHZhbCk7CiAgIE5TX0lNRVRIT0QgR2V0SGFzaFZhbHVlKFBSVWludDMyKiBhSGFzaFZhbHVl
KTsKICAgTlNfSU1FVEhPRCBHZXRVUkkobnNJVVJJKiogYVVSSSk7CiAgIE5TX0lNRVRIT0QgR2V0
RG9tYWluKG5zSVVSSSoqIGFEb21haW4pOwogICBOU19JTUVUSE9EIFNldERvbWFpbihuc0lVUkkq
IGFEb21haW4pOwogICBOU19JTUVUSE9EIEdldE9yaWdpbihjaGFyKiogYU9yaWdpbik7CiAgIE5T
X0lNRVRIT0QgU3Vic3VtZXMobnNJUHJpbmNpcGFsKiBvdGhlciwgYm9vbCogX3JldHZhbCk7CiAg
IE5TX0lNRVRIT0QgU3Vic3VtZXNJZ25vcmluZ0RvbWFpbihuc0lQcmluY2lwYWwqIG90aGVyLCBi
b29sKiBfcmV0dmFsKTsKLSAgTlNfSU1FVEhPRCBDaGVja01heUxvYWQobnNJVVJJKiB1cmksIGJv
b2wgcmVwb3J0KTsKKyAgTlNfSU1FVEhPRCBDaGVja01heUxvYWQobnNJVVJJKiB1cmksIGJvb2wg
cmVwb3J0LCBib29sIGFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCk7CiAgIE5TX0lNRVRIT0QgR2V0
RXh0ZW5kZWRPcmlnaW4obnNBQ1N0cmluZyYgYUV4dGVuZGVkT3JpZ2luKTsKICAgTlNfSU1FVEhP
RCBHZXRBcHBTdGF0dXMoUFJVaW50MTYqIGFBcHBTdGF0dXMpOwogICBOU19JTUVUSE9EIEdldEFw
cElkKFBSVWludDMyKiBhQXBwU3RhdHVzKTsKICAgTlNfSU1FVEhPRCBHZXRJc0luQnJvd3NlckVs
ZW1lbnQoYm9vbCogYUlzSW5Ccm93c2VyRWxlbWVudCk7CiAjaWZkZWYgREVCVUcKICAgdmlydHVh
bCB2b2lkIGR1bXBJbXBsKCk7CiAjZW5kaWYKICAgCmRpZmYgLS1naXQgYS9jYXBzL3NyYy9uc051
bGxQcmluY2lwYWwuY3BwIGIvY2Fwcy9zcmMvbnNOdWxsUHJpbmNpcGFsLmNwcAotLS0gYS9jYXBz
L3NyYy9uc051bGxQcmluY2lwYWwuY3BwCisrKyBiL2NhcHMvc3JjL25zTnVsbFByaW5jaXBhbC5j
cHAKQEAgLTI4NywxOCArMjg3LDM2IEBAIG5zTnVsbFByaW5jaXBhbDo6U3Vic3VtZXMobnNJUHJp
bmNpcGFsICoKIAogTlNfSU1FVEhPRElNUAogbnNOdWxsUHJpbmNpcGFsOjpTdWJzdW1lc0lnbm9y
aW5nRG9tYWluKG5zSVByaW5jaXBhbCAqYU90aGVyLCBib29sICphUmVzdWx0KQogewogICByZXR1
cm4gU3Vic3VtZXMoYU90aGVyLCBhUmVzdWx0KTsKIH0KIAogTlNfSU1FVEhPRElNUAotbnNOdWxs
UHJpbmNpcGFsOjpDaGVja01heUxvYWQobnNJVVJJKiBhVVJJLCBib29sIGFSZXBvcnQpCi17Citu
c051bGxQcmluY2lwYWw6OkNoZWNrTWF5TG9hZChuc0lVUkkqIGFVUkksIGJvb2wgYVJlcG9ydCwg
Ym9vbCBhQWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsKQorIHsKKyAgaWYgKGFBbGxvd0lmSW5oZXJp
dHNQcmluY2lwYWwpIHsKKyAgICBpZiAobnNQcmluY2lwYWw6OklzUHJpbmNpcGFsSW5oZXJpdGVk
KGFVUkkpKSB7CisgICAgICByZXR1cm4gTlNfT0s7CisgICAgfQorCisgICAgLy8gQWxzbyBhbGxv
dyB0aGUgbG9hZCBpZiB0aGUgcHJpbmNpcGFsIG9mIHRoZSBVUkkgYmVpbmcgY2hlY2tlZCBpcyBl
eGFjdGx5CisgICAgLy8gdXMgaWUgdGhpcy4KKyAgICBuc0NPTVB0cjxuc0lVUklXaXRoUHJpbmNp
cGFsPiB1cmlQcmluYyA9IGRvX1F1ZXJ5SW50ZXJmYWNlKGFVUkkpOworICAgIGlmICh1cmlQcmlu
YykgeworICAgICAgbnNDT01QdHI8bnNJUHJpbmNpcGFsPiBwcmluY2lwYWw7CisgICAgICB1cmlQ
cmluYy0+R2V0UHJpbmNpcGFsKGdldHRlcl9BZGRSZWZzKHByaW5jaXBhbCkpOworCisgICAgICBp
ZiAocHJpbmNpcGFsICYmIHByaW5jaXBhbCA9PSB0aGlzKSB7CisgICAgICAgIHJldHVybiBOU19P
SzsKKyAgICAgIH0KKyAgICB9CisgIH0KKwogICBpZiAoYVJlcG9ydCkgewogICAgIG5zU2NyaXB0
U2VjdXJpdHlNYW5hZ2VyOjpSZXBvcnRFcnJvcigKICAgICAgIG51bGxwdHIsIE5TX0xJVEVSQUxf
U1RSSU5HKCJDaGVja1NhbWVPcmlnaW5FcnJvciIpLCBtVVJJLCBhVVJJKTsKICAgfQogCiAgIHJl
dHVybiBOU19FUlJPUl9ET01fQkFEX1VSSTsKIH0KIApkaWZmIC0tZ2l0IGEvY2Fwcy9zcmMvbnNQ
cmluY2lwYWwuY3BwIGIvY2Fwcy9zcmMvbnNQcmluY2lwYWwuY3BwCi0tLSBhL2NhcHMvc3JjL25z
UHJpbmNpcGFsLmNwcAorKysgYi9jYXBzL3NyYy9uc1ByaW5jaXBhbC5jcHAKQEAgLTg0MSwxOCAr
ODQxLDI2IEBAIFVSSUlzTG9jYWxGaWxlKG5zSVVSSSAqYVVSSSkKIAogICByZXR1cm4gdXRpbCAm
JiBOU19TVUNDRUVERUQodXRpbC0+UHJvdG9jb2xIYXNGbGFncyhhVVJJLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lQcm90b2NvbEhhbmRsZXI6OlVSSV9JU19MT0NBTF9GSUxF
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNGaWxlKSkgJiYKICAgICAgICAg
IGlzRmlsZTsKIH0KIAogTlNfSU1FVEhPRElNUAotbnNQcmluY2lwYWw6OkNoZWNrTWF5TG9hZChu
c0lVUkkqIGFVUkksIGJvb2wgYVJlcG9ydCkKK25zUHJpbmNpcGFsOjpDaGVja01heUxvYWQobnNJ
VVJJKiBhVVJJLCBib29sIGFSZXBvcnQsIGJvb2wgYUFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCkK
IHsKKyAgIGlmIChhQWxsb3dJZkluaGVyaXRzUHJpbmNpcGFsKSB7CisgICAgLy8gSWYgdGhlIGNh
bGxlciBzcGVjaWZpZWQgdG8gYWxsb3cgbG9hZHMgb2YgVVJJcyB0aGF0IGluaGVyaXQKKyAgICAv
LyBvdXIgcHJpbmNpcGFsLCBhbGxvdyB0aGUgbG9hZCBpZiB0aGlzIFVSSSBpbmhlcml0cyBpdHMg
cHJpbmNpcGFsCisgICAgaWYgKG5zUHJpbmNpcGFsOjpJc1ByaW5jaXBhbEluaGVyaXRlZChhVVJJ
KSkgeworICAgICAgcmV0dXJuIE5TX09LOworICAgIH0KKyAgfQorCiAgIGlmICghbnNTY3JpcHRT
ZWN1cml0eU1hbmFnZXI6OlNlY3VyaXR5Q29tcGFyZVVSSXMobUNvZGViYXNlLCBhVVJJKSkgewog
ICAgIGlmIChuc1NjcmlwdFNlY3VyaXR5TWFuYWdlcjo6R2V0U3RyaWN0RmlsZU9yaWdpblBvbGlj
eSgpICYmCiAgICAgICAgIFVSSUlzTG9jYWxGaWxlKGFVUkkpKSB7CiAgICAgICBuc0NPTVB0cjxu
c0lGaWxlVVJMPiBmaWxlVVJMKGRvX1F1ZXJ5SW50ZXJmYWNlKGFVUkkpKTsKIAogICAgICAgaWYg
KCFVUklJc0xvY2FsRmlsZShtQ29kZWJhc2UpKSB7CiAgICAgICAgIC8vIElmIHRoZSBjb2RlYmFz
ZSBpcyBub3QgYWxzbyBhIGZpbGU6IHVyaSB0aGVuIGZvcmdldCBpdAogICAgICAgICAvLyAoZG9u
J3Qgd2FudCByZXNvdXJjZTogcHJpbmNpcGFscyBpbiBhIGZpbGU6IGRvYykKQEAgLTE0MjcsMjEg
KzE0MzUsMjEgQEAgbnNFeHBhbmRlZFByaW5jaXBhbDo6U3Vic3VtZXMobnNJUHJpbmNpcAogCiBO
U19JTUVUSE9ESU1QCiBuc0V4cGFuZGVkUHJpbmNpcGFsOjpTdWJzdW1lc0lnbm9yaW5nRG9tYWlu
KG5zSVByaW5jaXBhbCogYU90aGVyLCBib29sKiBhUmVzdWx0KQogewogICByZXR1cm4gOjpTdWJz
dW1lcyh0aGlzLCAmbnNJUHJpbmNpcGFsOjpTdWJzdW1lc0lnbm9yaW5nRG9tYWluLCBhT3RoZXIs
IGFSZXN1bHQpOwogfQogCiBOU19JTUVUSE9ESU1QCi1uc0V4cGFuZGVkUHJpbmNpcGFsOjpDaGVj
a01heUxvYWQobnNJVVJJKiB1cmksIGJvb2wgYVJlcG9ydCkKK25zRXhwYW5kZWRQcmluY2lwYWw6
OkNoZWNrTWF5TG9hZChuc0lVUkkqIHVyaSwgYm9vbCBhUmVwb3J0LCBib29sIGFBbGxvd0lmSW5o
ZXJpdHNQcmluY2lwYWwpCiB7CiAgIG5zcmVzdWx0IHJ2OwogICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgbVByaW5jaXBhbHMuTGVuZ3RoKCk7ICsraSl7Ci0gICAgcnYgPSBtUHJpbmNpcGFsc1tp
XS0+Q2hlY2tNYXlMb2FkKHVyaSwgYVJlcG9ydCk7CisgICAgcnYgPSBtUHJpbmNpcGFsc1tpXS0+
Q2hlY2tNYXlMb2FkKHVyaSwgYVJlcG9ydCwgYUFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCk7CiAg
ICAgaWYgKE5TX1NVQ0NFRURFRChydikpCiAgICAgICByZXR1cm4gcnY7CiAgIH0KIAogICByZXR1
cm4gTlNfRVJST1JfRE9NX0JBRF9VUkk7CiB9CiAKIE5TX0lNRVRIT0RJTVAKZGlmZiAtLWdpdCBh
L2NhcHMvc3JjL25zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmNwcCBiL2NhcHMvc3JjL25zU2NyaXB0
U2VjdXJpdHlNYW5hZ2VyLmNwcAotLS0gYS9jYXBzL3NyYy9uc1NjcmlwdFNlY3VyaXR5TWFuYWdl
ci5jcHAKKysrIGIvY2Fwcy9zcmMvbnNTY3JpcHRTZWN1cml0eU1hbmFnZXIuY3BwCkBAIC0xMzgy
LDE3ICsxMzgyLDE3IEBAIG5zU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOjpDaGVja0xvYWRVUklXaXQK
ICAgICAvLyBDaGVjayBmb3IgdXJpcyB0aGF0IGFyZSBvbmx5IGxvYWRhYmxlIGJ5IHByaW5jaXBh
bHMgdGhhdCBzdWJzdW1lIHRoZW0KICAgICBib29sIGhhc0ZsYWdzOwogICAgIHJ2ID0gTlNfVVJJ
Q2hhaW5IYXNGbGFncyh0YXJnZXRCYXNlVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lQcm90b2NvbEhhbmRsZXI6OlVSSV9MT0FEQUJMRV9CWV9TVUJTVU1FUlMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZoYXNGbGFncyk7CiAgICAgTlNfRU5TVVJFX1NVQ0NFU1Mo
cnYsIHJ2KTsKIAogICAgIGlmIChoYXNGbGFncykgewotICAgICAgICByZXR1cm4gYVByaW5jaXBh
bC0+Q2hlY2tNYXlMb2FkKHRhcmdldEJhc2VVUkksIHRydWUpOworICAgICAgICByZXR1cm4gYVBy
aW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHRhcmdldEJhc2VVUkksIHRydWUsIGZhbHNlKTsKICAgICB9
CiAKICAgICAvLy0tIGdldCB0aGUgc291cmNlIHNjaGVtZQogICAgIG5zQ0F1dG9TdHJpbmcgc291
cmNlU2NoZW1lOwogICAgIHJ2ID0gc291cmNlQmFzZVVSSS0+R2V0U2NoZW1lKHNvdXJjZVNjaGVt
ZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikpIHJldHVybiBydjsKIAogICAgIGlmIChzb3VyY2VT
Y2hlbWUuTG93ZXJDYXNlRXF1YWxzTGl0ZXJhbChOU19OVUxMUFJJTkNJUEFMX1NDSEVNRSkpIHsK
ZGlmZiAtLWdpdCBhL2NhcHMvc3JjL25zU3lzdGVtUHJpbmNpcGFsLmNwcCBiL2NhcHMvc3JjL25z
U3lzdGVtUHJpbmNpcGFsLmNwcAotLS0gYS9jYXBzL3NyYy9uc1N5c3RlbVByaW5jaXBhbC5jcHAK
KysrIGIvY2Fwcy9zcmMvbnNTeXN0ZW1QcmluY2lwYWwuY3BwCkBAIC0xMTAsMTcgKzExMCwxNyBA
QCBuc1N5c3RlbVByaW5jaXBhbDo6U3Vic3VtZXMobnNJUHJpbmNpcGFsCiBOU19JTUVUSE9ESU1Q
CiBuc1N5c3RlbVByaW5jaXBhbDo6U3Vic3VtZXNJZ25vcmluZ0RvbWFpbihuc0lQcmluY2lwYWwg
Km90aGVyLCBib29sICpyZXN1bHQpCiB7CiAgICAgKnJlc3VsdCA9IHRydWU7CiAgICAgcmV0dXJu
IE5TX09LOwogfQogCiBOU19JTUVUSE9ESU1QCi1uc1N5c3RlbVByaW5jaXBhbDo6Q2hlY2tNYXlM
b2FkKG5zSVVSSSogdXJpLCBib29sIGFSZXBvcnQpCituc1N5c3RlbVByaW5jaXBhbDo6Q2hlY2tN
YXlMb2FkKG5zSVVSSSogdXJpLCBib29sIGFSZXBvcnQsIGJvb2wgYUFsbG93SWZJbmhlcml0c1By
aW5jaXBhbCkKIHsKICAgICByZXR1cm4gTlNfT0s7CiB9CiAKIE5TX0lNRVRIT0RJTVAKIG5zU3lz
dGVtUHJpbmNpcGFsOjpHZXRIYXNoVmFsdWUoUFJVaW50MzIgKnJlc3VsdCkKIHsKICAgICAqcmVz
dWx0ID0gTlNfUFRSX1RPX0lOVDMyKHRoaXMpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3B1
YmxpYy9uc0NvbnRlbnRVdGlscy5oIGIvY29udGVudC9iYXNlL3B1YmxpYy9uc0NvbnRlbnRVdGls
cy5oCi0tLSBhL2NvbnRlbnQvYmFzZS9wdWJsaWMvbnNDb250ZW50VXRpbHMuaAorKysgYi9jb250
ZW50L2Jhc2UvcHVibGljL25zQ29udGVudFV0aWxzLmgKQEAgLTE2OTksMTcgKzE2OTksMTcgQEAg
cHVibGljOgogICAgKgogICAgKiBAcGFyYW0gYVNjcmlwdENvbnRleHQgdGhlIHNjcmlwdCBjb250
ZXh0IHRvIGdldCB0aGUgZG9jdW1lbnQgZm9yOyBjYW4gYmUgbnVsbAogICAgKgogICAgKiBAcmV0
dXJuIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIHNjcmlwdCBjb250ZXh0CiAgICAq
LwogICBzdGF0aWMgYWxyZWFkeV9BZGRSZWZlZDxuc0lEb2N1bWVudD4KICAgR2V0RG9jdW1lbnRG
cm9tU2NyaXB0Q29udGV4dChuc0lTY3JpcHRDb250ZXh0ICphU2NyaXB0Q29udGV4dCk7CiAKLSAg
c3RhdGljIGJvb2wgQ2hlY2tNYXlMb2FkKG5zSVByaW5jaXBhbCogYVByaW5jaXBhbCwgbnNJQ2hh
bm5lbCogYUNoYW5uZWwpOworICBzdGF0aWMgYm9vbCBDaGVja01heUxvYWQobnNJUHJpbmNpcGFs
KiBhUHJpbmNpcGFsLCBuc0lDaGFubmVsKiBhQ2hhbm5lbCwgYm9vbCBhQWxsb3dJZkluaGVyaXRz
UHJpbmNpcGFsKTsKIAogICAvKioKICAgICogVGhlIG1ldGhvZCBjaGVja3Mgd2hldGhlciB0aGUg
Y2FsbGVyIGNhbiBhY2Nlc3MgbmF0aXZlIGFub255bW91cyBjb250ZW50LgogICAgKiBJZiB0aGVy
ZSBpcyBubyBKUyBpbiB0aGUgc3RhY2sgb3IgcHJpdmlsZWdlZCBKUyBpcyBydW5uaW5nLCB0aGlz
CiAgICAqIG1ldGhvZCByZXR1cm5zIHRydWUsIG90aGVyd2lzZSBmYWxzZS4KICAgICovCiAgIHN0
YXRpYyBib29sIENhbkFjY2Vzc05hdGl2ZUFub24oKTsKIApkaWZmIC0tZ2l0IGEvY29udGVudC9i
YXNlL3NyYy9uc0NvbnRlbnRTaW5rLmNwcCBiL2NvbnRlbnQvYmFzZS9zcmMvbnNDb250ZW50U2lu
ay5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRTaW5rLmNwcAorKysgYi9jb250
ZW50L2Jhc2Uvc3JjL25zQ29udGVudFNpbmsuY3BwCkBAIC0xMDU5LDE3ICsxMDU5LDE3IEBAIG5z
Q29udGVudFNpbms6OlByb2Nlc3NPZmZsaW5lTWFuaWZlc3QoY28KICAgICBuc0NvbnRlbnRVdGls
czo6TmV3VVJJV2l0aERvY3VtZW50Q2hhcnNldChnZXR0ZXJfQWRkUmVmcyhtYW5pZmVzdFVSSSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU1hbmlmZXN0
U3BlYywgbURvY3VtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Eb2N1bWVudFVSSSk7CiAgICAgaWYgKCFtYW5pZmVzdFVSSSkgewogICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIC8vIERvY3VtZW50cyBtdXN0IGxpc3QgYSBtYW5pZmVzdCBmcm9t
IHRoZSBzYW1lIG9yaWdpbgotICAgIHJ2ID0gbURvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkNo
ZWNrTWF5TG9hZChtYW5pZmVzdFVSSSwgdHJ1ZSk7CisgICAgcnYgPSBtRG9jdW1lbnQtPk5vZGVQ
cmluY2lwYWwoKS0+Q2hlY2tNYXlMb2FkKG1hbmlmZXN0VVJJLCB0cnVlLCBmYWxzZSk7CiAgICAg
aWYgKE5TX0ZBSUxFRChydikpIHsKICAgICAgIGFjdGlvbiA9IENBQ0hFX1NFTEVDVElPTl9SRVNF
TEVDVF9XSVRIT1VUX01BTklGRVNUOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgIC8vIE9ubHkg
Y29udGludWUgaWYgdGhlIGRvY3VtZW50IGhhcyBwZXJtaXNzaW9uIHRvIHVzZSBvZmZsaW5lIEFQ
SXMuCiAgICAgICBpZiAoIW5zQ29udGVudFV0aWxzOjpPZmZsaW5lQXBwQWxsb3dlZChtRG9jdW1l
bnQtPk5vZGVQcmluY2lwYWwoKSkpIHsKICAgICAgICAgcmV0dXJuOwogICAgICAgfQpkaWZmIC0t
Z2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0NvbnRlbnRVdGlscy5jcHAgYi9jb250ZW50L2Jhc2Uv
c3JjL25zQ29udGVudFV0aWxzLmNwcAotLS0gYS9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0
aWxzLmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zQ29udGVudFV0aWxzLmNwcApAQCAtNDYw
MCwxNyArNDYwMCwxNyBAQCBuc0NvbnRlbnRVdGlsczo6Q2hlY2tTZWN1cml0eUJlZm9yZUxvYWQo
CiAKICAgLy8gU2FtZSBPcmlnaW4KICAgaWYgKChhQWxsb3dEYXRhICYmIFNjaGVtZUlzKGFVUklU
b0xvYWQsICJkYXRhIikpIHx8CiAgICAgICAoKGFDaGVja0xvYWRGbGFncyAmIG5zSVNjcmlwdFNl
Y3VyaXR5TWFuYWdlcjo6QUxMT1dfQ0hST01FKSAmJgogICAgICAgIFNjaGVtZUlzKGFVUklUb0xv
YWQsICJjaHJvbWUiKSkpIHsKICAgICByZXR1cm4gTlNfT0s7CiAgIH0KIAotICByZXR1cm4gYUxv
YWRpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJVG9Mb2FkLCB0cnVlKTsKKyAgcmV0dXJu
IGFMb2FkaW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQoYVVSSVRvTG9hZCwgdHJ1ZSwgZmFsc2Up
OwogfQogCiBib29sCiBuc0NvbnRlbnRVdGlsczo6SXNTeXN0ZW1QcmluY2lwYWwobnNJUHJpbmNp
cGFsKiBhUHJpbmNpcGFsKQogewogICBib29sIGlzU3lzdGVtOwogICBuc3Jlc3VsdCBydiA9IHNT
ZWN1cml0eU1hbmFnZXItPklzU3lzdGVtUHJpbmNpcGFsKGFQcmluY2lwYWwsICZpc1N5c3RlbSk7
CiAgIHJldHVybiBOU19TVUNDRUVERUQocnYpICYmIGlzU3lzdGVtOwpAQCAtNTc1MCwxOSArNTc1
MCwxOSBAQCBuc0NvbnRlbnRVdGlsczo6Q2hlY2tTYW1lT3JpZ2luKG5zSUNoYW5uCiAKICAgbnND
T01QdHI8bnNJVVJJPiBuZXdVUkk7CiAgIGFOZXdDaGFubmVsLT5HZXRVUkkoZ2V0dGVyX0FkZFJl
ZnMobmV3VVJJKSk7CiAgIG5zQ09NUHRyPG5zSVVSST4gbmV3T3JpZ2luYWxVUkk7CiAgIGFOZXdD
aGFubmVsLT5HZXRPcmlnaW5hbFVSSShnZXR0ZXJfQWRkUmVmcyhuZXdPcmlnaW5hbFVSSSkpOwog
CiAgIE5TX0VOU1VSRV9TVEFURShvbGRQcmluY2lwYWwgJiYgbmV3VVJJICYmIG5ld09yaWdpbmFs
VVJJKTsKIAotICBuc3Jlc3VsdCBydiA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld1VS
SSwgZmFsc2UpOworICBuc3Jlc3VsdCBydiA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5l
d1VSSSwgZmFsc2UsIGZhbHNlKTsKICAgaWYgKE5TX1NVQ0NFRURFRChydikgJiYgbmV3T3JpZ2lu
YWxVUkkgIT0gbmV3VVJJKSB7Ci0gICAgcnYgPSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChu
ZXdPcmlnaW5hbFVSSSwgZmFsc2UpOworICAgIHJ2ID0gb2xkUHJpbmNpcGFsLT5DaGVja01heUxv
YWQobmV3T3JpZ2luYWxVUkksIGZhbHNlLCBmYWxzZSk7CiAgIH0KIAogICByZXR1cm4gcnY7CiB9
CiAKIE5TX0lNUExfSVNVUFBPUlRTMihTYW1lT3JpZ2luQ2hlY2tlciwKICAgICAgICAgICAgICAg
ICAgICBuc0lDaGFubmVsRXZlbnRTaW5rLAogICAgICAgICAgICAgICAgICAgIG5zSUludGVyZmFj
ZVJlcXVlc3RvcikKQEAgLTU5MjMsMjMgKzU5MjMsMjMgQEAgbnNDb250ZW50VXRpbHM6OkdldERv
Y3VtZW50RnJvbVNjcmlwdENvbgogICAgICAgQ2FsbFF1ZXJ5SW50ZXJmYWNlKGRvbWRvYywgJmRv
Yyk7CiAgICAgfQogICB9CiAgIHJldHVybiBkb2M7CiB9CiAKIC8qIHN0YXRpYyAqLwogYm9vbAot
bnNDb250ZW50VXRpbHM6OkNoZWNrTWF5TG9hZChuc0lQcmluY2lwYWwqIGFQcmluY2lwYWwsIG5z
SUNoYW5uZWwqIGFDaGFubmVsKQorbnNDb250ZW50VXRpbHM6OkNoZWNrTWF5TG9hZChuc0lQcmlu
Y2lwYWwqIGFQcmluY2lwYWwsIG5zSUNoYW5uZWwqIGFDaGFubmVsLCBib29sIGFBbGxvd0lmSW5o
ZXJpdHNQcmluY2lwYWwpCiB7CiAgIG5zQ09NUHRyPG5zSVVSST4gY2hhbm5lbFVSSTsKICAgbnNy
ZXN1bHQgcnYgPSBOU19HZXRGaW5hbENoYW5uZWxVUkkoYUNoYW5uZWwsIGdldHRlcl9BZGRSZWZz
KGNoYW5uZWxVUkkpKTsKICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIGZhbHNlKTsKIAotICByZXR1
cm4gTlNfU1VDQ0VFREVEKGFQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChjaGFubmVsVVJJLCBmYWxz
ZSkpOworICByZXR1cm4gTlNfU1VDQ0VFREVEKGFQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChjaGFu
bmVsVVJJLCBmYWxzZSwgYUFsbG93SWZJbmhlcml0c1ByaW5jaXBhbCkpOwogfQogCiBuc0NvbnRl
bnRUeXBlUGFyc2VyOjpuc0NvbnRlbnRUeXBlUGFyc2VyKGNvbnN0IG5zQVN0cmluZyYgYVN0cmlu
ZykKICAgOiBtU3RyaW5nKGFTdHJpbmcpLCBtU2VydmljZShudWxscHRyKQogewogICBDYWxsR2V0
U2VydmljZSgiQG1vemlsbGEub3JnL25ldHdvcmsvbWltZS1oZHJwYXJhbTsxIiwgJm1TZXJ2aWNl
KTsKIH0KIApAQCAtNjcwNCwxNyArNjcwNCwxNyBAQCBuc0NvbnRlbnRVdGlsczo6U2V0VXBDaGFu
bmVsT3duZXIobnNJUHJpCiAgIC8vIGZpbGU6IHVyaSBzcGVjaWFsLWNhc2luZwogICAvLwogICAv
LyBJZiB0aGlzIGlzIGEgZmlsZTogbG9hZCBvcGVuZWQgZnJvbSBhbm90aGVyIGZpbGU6IHRoZW4g
aXQgbWF5IG5lZWQKICAgLy8gdG8gaW5oZXJpdCB0aGUgb3duZXIgZnJvbSB0aGUgcmVmZXJyZXIg
c28gdGhleSBjYW4gc2NyaXB0IGVhY2ggb3RoZXIuCiAgIC8vIElmIHdlIGRvbid0IHNldCB0aGUg
b3duZXIgZXhwbGljaXRseSB0aGVuIGVhY2ggZmlsZTogZ2V0cyBhbiBvd25lcgogICAvLyBiYXNl
ZCBvbiBpdHMgb3duIGNvZGViYXNlIGxhdGVyLgogICAvLwogICBpZiAoVVJJSXNMb2NhbEZpbGUo
YVVSSSkgJiYgYUxvYWRpbmdQcmluY2lwYWwgJiYKLSAgICAgIE5TX1NVQ0NFRURFRChhTG9hZGlu
Z1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGFVUkksIGZhbHNlKSkgJiYKKyAgICAgIE5TX1NVQ0NF
RURFRChhTG9hZGluZ1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKGFVUkksIGZhbHNlLCBmYWxzZSkp
ICYmCiAgICAgICAvLyBPbmUgbW9yZSBjaGVjayBoZXJlLiAgQ2hlY2tNYXlMb2FkIHdpbGwgYWx3
YXlzIHJldHVybiB0cnVlIGZvciB0aGUKICAgICAgIC8vIHN5c3RlbSBwcmluY2lwYWwsIGJ1dCB3
ZSBkbyBOT1Qgd2FudCB0byBpbmhlcml0IGluIHRoYXQgY2FzZS4KICAgICAgICFJc1N5c3RlbVBy
aW5jaXBhbChhTG9hZGluZ1ByaW5jaXBhbCkpIHsKICAgICBhQ2hhbm5lbC0+U2V0T3duZXIoYUxv
YWRpbmdQcmluY2lwYWwpOwogICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHku
Y3BwIGIvY29udGVudC9iYXNlL3NyYy9uc0Nyb3NzU2l0ZUxpc3RlbmVyUHJveHkuY3BwCi0tLSBh
L2NvbnRlbnQvYmFzZS9zcmMvbnNDcm9zc1NpdGVMaXN0ZW5lclByb3h5LmNwcAorKysgYi9jb250
ZW50L2Jhc2Uvc3JjL25zQ3Jvc3NTaXRlTGlzdGVuZXJQcm94eS5jcHAKQEAgLTczOCwyMCArNzM4
LDIwIEBAIG5zQ09SU0xpc3RlbmVyUHJveHk6OlVwZGF0ZUNoYW5uZWwobnNJQ2gKICAgaWYgKG9y
aWdpbmFsVVJJICE9IHVyaSkgewogICAgIHJ2ID0gbnNDb250ZW50VXRpbHM6OkdldFNlY3VyaXR5
TWFuYWdlcigpLT4KICAgICAgIENoZWNrTG9hZFVSSVdpdGhQcmluY2lwYWwobVJlcXVlc3RpbmdQ
cmluY2lwYWwsIG9yaWdpbmFsVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTY3JpcHRTZWN1cml0eU1hbmFnZXI6OlNUQU5EQVJEKTsKICAgICBOU19FTlNVUkVfU1VDQ0VT
UyhydiwgcnYpOwogICB9CiAKICAgaWYgKCFtSGFzQmVlbkNyb3NzU2l0ZSAmJgotICAgICAgTlNf
U1VDQ0VFREVEKG1SZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQodXJpLCBmYWxzZSkp
ICYmCisgICAgICBOU19TVUNDRUVERUQobVJlcXVlc3RpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9h
ZCh1cmksIGZhbHNlLCBmYWxzZSkpICYmCiAgICAgICAob3JpZ2luYWxVUkkgPT0gdXJpIHx8CiAg
ICAgICAgTlNfU1VDQ0VFREVEKG1SZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQob3Jp
Z2luYWxVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UpKSkpIHsKICAgICByZXR1cm4gTlNfT0s7
CiAgIH0KIAogICAvLyBJdCdzIGEgY3Jvc3Mgc2l0ZSBsb2FkCiAgIG1IYXNCZWVuQ3Jvc3NTaXRl
ID0gdHJ1ZTsKIAogICBuc0NTdHJpbmcgdXNlcnBhc3M7CiAgIHVyaS0+R2V0VXNlclBhc3ModXNl
cnBhc3MpOwpkaWZmIC0tZ2l0IGEvY29udGVudC9iYXNlL3NyYy9uc0RvY3VtZW50LmNwcCBiL2Nv
bnRlbnQvYmFzZS9zcmMvbnNEb2N1bWVudC5jcHAKLS0tIGEvY29udGVudC9iYXNlL3NyYy9uc0Rv
Y3VtZW50LmNwcAorKysgYi9jb250ZW50L2Jhc2Uvc3JjL25zRG9jdW1lbnQuY3BwCkBAIC0xMDYw
LDI4ICsxMDYwLDIyIEBAIG5zRXh0ZXJuYWxSZXNvdXJjZU1hcDo6UGVuZGluZ0xvYWQ6OlN0YXIK
IAogICBuc0lQcmluY2lwYWwqIHJlcXVlc3RpbmdQcmluY2lwYWwgPSBhUmVxdWVzdGluZ05vZGUt
Pk5vZGVQcmluY2lwYWwoKTsKIAogICBuc3Jlc3VsdCBydiA9IG5zQ29udGVudFV0aWxzOjpHZXRT
ZWN1cml0eU1hbmFnZXIoKS0+CiAgICAgQ2hlY2tMb2FkVVJJV2l0aFByaW5jaXBhbChyZXF1ZXN0
aW5nUHJpbmNpcGFsLCBhVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU2Ny
aXB0U2VjdXJpdHlNYW5hZ2VyOjpTVEFOREFSRCk7CiAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBy
dik7CiAgIAotICAvLyBBbGxvdyBkYXRhIFVSSXMgKGxldCB0aGVtIHNraXAgdGhlIENoZWNrTWF5
TG9hZCBjYWxsKSwgc2luY2Ugd2Ugd2FudAorICAvLyBBbGxvdyBkYXRhIFVSSXMgYW5kIG90aGVy
IFVSSSdzIHRoYXQgaW5oZXJpdCB0aGVpciBwcmluY2lwYWwgYnkgcGFzc2luZworICAvLyB0cnVl
IGFzIHRoZSAzcmQgYXJndW1lbnQgb2YgQ2hlY2tNYXlMb2FkLCBzaW5jZSB3ZSB3YW50CiAgIC8v
IHRvIGFsbG93IGV4dGVybmFsIHJlc291cmNlcyBmcm9tIGRhdGEgVVJJcyByZWdhcmRsZXNzIG9m
IHRoZSBkaWZmZXJlbmNlCiAgIC8vIGluIFVSSSBzY2hlbWUuCi0gIGJvb2wgZG9lc0luaGVyaXRT
ZWN1cml0eUNvbnRleHQ7Ci0gIHJ2ID0KLSAgICBOU19VUklDaGFpbkhhc0ZsYWdzKGFVUkksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBuc0lQcm90b2NvbEhhbmRsZXI6OlVSSV9JTkhFUklUU19T
RUNVUklUWV9DT05URVhULAotICAgICAgICAgICAgICAgICAgICAgICAgJmRvZXNJbmhlcml0U2Vj
dXJpdHlDb250ZXh0KTsKLSAgaWYgKE5TX0ZBSUxFRChydikgfHwgIWRvZXNJbmhlcml0U2VjdXJp
dHlDb250ZXh0KSB7Ci0gICAgcnYgPSByZXF1ZXN0aW5nUHJpbmNpcGFsLT5DaGVja01heUxvYWQo
YVVSSSwgdHJ1ZSk7Ci0gICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKLSAgfQorICBydiA9
IHJlcXVlc3RpbmdQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChhVVJJLCB0cnVlLCB0cnVlKTsKKyAg
TlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICBQUkludDE2IHNob3VsZExvYWQgPSBuc0lD
b250ZW50UG9saWN5OjpBQ0NFUFQ7CiAgIHJ2ID0gTlNfQ2hlY2tDb250ZW50TG9hZFBvbGljeShu
c0lDb250ZW50UG9saWN5OjpUWVBFX09USEVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RpbmdQ
cmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUmVxdWVzdGluZ05v
ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbXB0eUNTdHJpbmcoKSwgLy9t
aW1lIGd1ZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCAgICAg
ICAgIC8vZXh0cmEKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFzZS9zcmMvbnNYTUxIdHRwUmVxdWVz
dC5jcHAgYi9jb250ZW50L2Jhc2Uvc3JjL25zWE1MSHR0cFJlcXVlc3QuY3BwCi0tLSBhL2NvbnRl
bnQvYmFzZS9zcmMvbnNYTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvY29udGVudC9iYXNlL3NyYy9u
c1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTcwMSwyOCArMTcwMSwxOSBAQCBuc1hNTEh0dHBSZXF1
ZXN0OjpJc1N5c3RlbVhIUigpCiBuc3Jlc3VsdAogbnNYTUxIdHRwUmVxdWVzdDo6Q2hlY2tDaGFu
bmVsRm9yQ3Jvc3NTaXRlUmVxdWVzdChuc0lDaGFubmVsKiBhQ2hhbm5lbCkKIHsKICAgLy8gRmly
c3QgY2hlY2sgaWYgY3Jvc3Mtc2l0ZSByZXF1ZXN0cyBhcmUgZW5hYmxlZC4uLgogICBpZiAoSXNT
eXN0ZW1YSFIoKSkgewogICAgIHJldHVybiBOU19PSzsKICAgfQogCi0gIC8vIC4uLm9yIGlmIHRo
aXMgaXMgYSBzYW1lLW9yaWdpbiByZXF1ZXN0LgotICBpZiAobnNDb250ZW50VXRpbHM6OkNoZWNr
TWF5TG9hZChtUHJpbmNpcGFsLCBhQ2hhbm5lbCkpIHsKLSAgICByZXR1cm4gTlNfT0s7Ci0gIH0K
LQotICAvLyBleGVtcHQgZGF0YSBVUklzIGZyb20gdGhlIHNhbWUgb3JpZ2luIGNoZWNrLgotICBu
c0NPTVB0cjxuc0lVUkk+IGNoYW5uZWxVUkk7Ci0gIGJvb2wgZGF0YVNjaGVtZSA9IGZhbHNlOwot
ICBpZiAoTlNfU1VDQ0VFREVEKE5TX0dldEZpbmFsQ2hhbm5lbFVSSShhQ2hhbm5lbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyX0FkZFJlZnMoY2hhbm5l
bFVSSSkpKSAmJgotICAgICAgTlNfU1VDQ0VFREVEKGNoYW5uZWxVUkktPlNjaGVtZUlzKCJkYXRh
IiwgJmRhdGFTY2hlbWUpKSAmJgotICAgICAgZGF0YVNjaGVtZSkgeworICAvLyBJZiB0aGlzIGlz
IGEgc2FtZS1vcmlnaW4gcmVxdWVzdCBvciB0aGUgY2hhbm5lbCdzIFVSSSBpbmhlcml0cworICAv
LyBpdHMgcHJpbmNpcGFsLCBpdCdzIGFsbG93ZWQuCisgIGlmIChuc0NvbnRlbnRVdGlsczo6Q2hl
Y2tNYXlMb2FkKG1QcmluY2lwYWwsIGFDaGFubmVsLCB0cnVlKSkgewogICAgIHJldHVybiBOU19P
SzsKICAgfQogCiAgIC8vIFRoaXMgaXMgYSBjcm9zcy1zaXRlIHJlcXVlc3QKICAgbVN0YXRlIHw9
IFhNTF9IVFRQX1JFUVVFU1RfVVNFX1hTSVRFX0FDOwogCiAgIC8vIENoZWNrIGlmIHdlIG5lZWQg
dG8gZG8gYSBwcmVmbGlnaHQgcmVxdWVzdC4KICAgbnNDT01QdHI8bnNJSHR0cENoYW5uZWw+IGh0
dHBDaGFubmVsID0gZG9fUXVlcnlJbnRlcmZhY2UoYUNoYW5uZWwpOwpkaWZmIC0tZ2l0IGEvY29u
dGVudC94Ymwvc3JjL25zWEJMU2VydmljZS5jcHAgYi9jb250ZW50L3hibC9zcmMvbnNYQkxTZXJ2
aWNlLmNwcAotLS0gYS9jb250ZW50L3hibC9zcmMvbnNYQkxTZXJ2aWNlLmNwcAorKysgYi9jb250
ZW50L3hibC9zcmMvbnNYQkxTZXJ2aWNlLmNwcApAQCAtOTI3LDE3ICs5MjcsMTcgQEAgbnNYQkxT
ZXJ2aWNlOjpMb2FkQmluZGluZ0RvY3VtZW50SW5mbyhucwogICAgIE5TX0VOU1VSRV9TVUNDRVNT
KHJ2LCBOU19FUlJPUl9YQkxfQkxPQ0tFRCk7CiAKICAgICBpZiAoIUlzU3lzdGVtT3JDaHJvbWVV
UkxQcmluY2lwYWwoYU9yaWdpblByaW5jaXBhbCkpIHsKICAgICAgIC8vIEFsc28gbWFrZSBzdXJl
IHRoYXQgd2UncmUgc2FtZS1vcmlnaW4gd2l0aCB0aGUgYm91bmQgZG9jdW1lbnQKICAgICAgIC8v
IGV4Y2VwdCBpZiB0aGUgc3R5bGVzaGVldCBoYXMgdGhlIHN5c3RlbSBwcmluY2lwYWwuCiAgICAg
ICBpZiAoIShnQWxsb3dEYXRhVVJJcyAmJiBTY2hlbWVJcyhhQmluZGluZ1VSSSwgImRhdGEiKSkg
JiYKICAgICAgICAgICAhU2NoZW1lSXMoYUJpbmRpbmdVUkksICJjaHJvbWUiKSkgewogICAgICAg
ICBydiA9IGFCb3VuZERvY3VtZW50LT5Ob2RlUHJpbmNpcGFsKCktPkNoZWNrTWF5TG9hZChhQmlu
ZGluZ1VSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGZhbHNlKTsKICAgICAgICAgTlNfRU5TVVJFX1NV
Q0NFU1MocnYsIE5TX0VSUk9SX1hCTF9CTE9DS0VEKTsKICAgICAgIH0KIAogICAgICAgLy8gRmlu
YWxseSBjaGVjayBpZiB0aGlzIGRvY3VtZW50IGlzIGFsbG93ZWQgdG8gdXNlIFhCTCBhdCBhbGwu
CiAgICAgICBOU19FTlNVUkVfVFJVRShhQm91bmREb2N1bWVudC0+QWxsb3dYVUxYQkwoKSwKICAg
ICAgICAgICAgICAgICAgICAgIE5TX0VSUk9SX1hCTF9CTE9DS0VEKTsKICAgICB9CiAgIH0KZGlm
ZiAtLWdpdCBhL2NvbnRlbnQveG1sL2RvY3VtZW50L3NyYy9uc1hNTERvY3VtZW50LmNwcCBiL2Nv
bnRlbnQveG1sL2RvY3VtZW50L3NyYy9uc1hNTERvY3VtZW50LmNwcAotLS0gYS9jb250ZW50L3ht
bC9kb2N1bWVudC9zcmMvbnNYTUxEb2N1bWVudC5jcHAKKysrIGIvY29udGVudC94bWwvZG9jdW1l
bnQvc3JjL25zWE1MRG9jdW1lbnQuY3BwCkBAIC0zMjksMTcgKzMyOSwxNyBAQCBuc1hNTERvY3Vt
ZW50OjpMb2FkKGNvbnN0IG5zQVN0cmluZyYgYVVyCiAgIC8vIHRoYXQgd2UgZG9uJ3QgZW5kIHVw
IGluIGEgY2FzZSB3aGVyZSBjb2RlIHdpdGggZWxldmF0ZWQgcHJpdmlsZWdlcyBpcwogICAvLyBj
YWxsaW5nIHVzIGFuZCBjaGFuZ2luZyB0aGUgcHJpbmNpcGFsIG9mIHRoaXMgZG9jdW1lbnQuCiAK
ICAgLy8gRW5mb3JjZSBzYW1lLW9yaWdpbiBldmVuIGZvciBjaHJvbWUgbG9hZGVycyB0byBhdm9p
ZCBzb21lb25lIGFjY2lkZW50YWxseQogICAvLyB1c2luZyBhIGRvY3VtZW50IHRoYXQgY29udGVu
dCBoYXMgYSByZWZlcmVuY2UgdG8gYW5kIHR1cm4gdGhhdCBpbnRvIGEKICAgLy8gY2hyb21lIGRv
Y3VtZW50LgogICBuc0NPTVB0cjxuc0lQcmluY2lwYWw+IHByaW5jaXBhbCA9IE5vZGVQcmluY2lw
YWwoKTsKICAgaWYgKCFuc0NvbnRlbnRVdGlsczo6SXNTeXN0ZW1QcmluY2lwYWwocHJpbmNpcGFs
KSkgewotICAgIHJ2ID0gcHJpbmNpcGFsLT5DaGVja01heUxvYWQodXJpLCBmYWxzZSk7CisgICAg
cnYgPSBwcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIGZhbHNlLCBmYWxzZSk7CiAgICAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKIAogICAgIFBSSW50MTYgc2hvdWxkTG9hZCA9IG5zSUNv
bnRlbnRQb2xpY3k6OkFDQ0VQVDsKICAgICBydiA9IE5TX0NoZWNrQ29udGVudExvYWRQb2xpY3ko
bnNJQ29udGVudFBvbGljeTo6VFlQRV9YTUxIVFRQUkVRVUVTVCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxpbmdE
b2MgPyBjYWxsaW5nRG9jLmdldCgpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxuc0lEb2N1bWVudCo+KHRoaXMpLApkaWZmIC0tZ2l0IGEvY29udGVu
dC94dWwvZG9jdW1lbnQvc3JjL25zWFVMRG9jdW1lbnQuY3BwIGIvY29udGVudC94dWwvZG9jdW1l
bnQvc3JjL25zWFVMRG9jdW1lbnQuY3BwCi0tLSBhL2NvbnRlbnQveHVsL2RvY3VtZW50L3NyYy9u
c1hVTERvY3VtZW50LmNwcAorKysgYi9jb250ZW50L3h1bC9kb2N1bWVudC9zcmMvbnNYVUxEb2N1
bWVudC5jcHAKQEAgLTI2NTQsMTcgKzI2NTQsMTcgQEAgbnNYVUxEb2N1bWVudDo6TG9hZE92ZXJs
YXlJbnRlcm5hbChuc0lVUgogCiAgICAgLy8gQ2hyb21lIGRvY3VtZW50cyBhcmUgYWxsb3dlZCB0
byBsb2FkIG92ZXJsYXlzIGZyb20gYW55d2hlcmUuCiAgICAgLy8gSW4gYWxsIG90aGVyIGNhc2Vz
LCB0aGUgb3ZlcmxheSBpcyBvbmx5IGFsbG93ZWQgdG8gbG9hZCBpZgogICAgIC8vIHRoZSBtYXN0
ZXIgZG9jdW1lbnQgYW5kIHByb3RvdHlwZSBkb2N1bWVudCBoYXZlIHRoZSBzYW1lIG9yaWdpbi4K
IAogICAgIGJvb2wgZG9jdW1lbnRJc0Nocm9tZSA9IElzQ2hyb21lVVJJKG1Eb2N1bWVudFVSSSk7
CiAgICAgaWYgKCFkb2N1bWVudElzQ2hyb21lKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSdy
ZSBhbGxvd2VkIHRvIGxvYWQgdGhpcyBvdmVybGF5LgotICAgICAgICBydiA9IE5vZGVQcmluY2lw
YWwoKS0+Q2hlY2tNYXlMb2FkKGFVUkksIHRydWUpOworICAgICAgICBydiA9IE5vZGVQcmluY2lw
YWwoKS0+Q2hlY2tNYXlMb2FkKGFVUkksIHRydWUsIGZhbHNlKTsKICAgICAgICAgaWYgKE5TX0ZB
SUxFRChydikpIHsKICAgICAgICAgICAgICphRmFpbHVyZUZyb21Db250ZW50ID0gdHJ1ZTsKICAg
ICAgICAgICAgIHJldHVybiBydjsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIExvb2sgaW4g
dGhlIHByb3RvdHlwZSBjYWNoZSBmb3IgdGhlIHByb3RvdHlwZSBkb2N1bWVudCB3aXRoCiAgICAg
Ly8gdGhlIHNwZWNpZmllZCBvdmVybGF5IFVSSS4gT25seSB1c2UgdGhlIGNhY2hlIGlmIHRoZSBj
b250YWluaW5nCmRpZmYgLS1naXQgYS9jb250ZW50L3h1bC90ZW1wbGF0ZXMvc3JjL25zWFVMVGVt
cGxhdGVCdWlsZGVyLmNwcCBiL2NvbnRlbnQveHVsL3RlbXBsYXRlcy9zcmMvbnNYVUxUZW1wbGF0
ZUJ1aWxkZXIuY3BwCi0tLSBhL2NvbnRlbnQveHVsL3RlbXBsYXRlcy9zcmMvbnNYVUxUZW1wbGF0
ZUJ1aWxkZXIuY3BwCisrKyBiL2NvbnRlbnQveHVsL3RlbXBsYXRlcy9zcmMvbnNYVUxUZW1wbGF0
ZUJ1aWxkZXIuY3BwCkBAIC0xMzIzLDE3ICsxMzIzLDE3IEBAIG5zWFVMVGVtcGxhdGVCdWlsZGVy
OjpMb2FkRGF0YVNvdXJjZVVybHMKIAogICAgICAgICBuc0NPTVB0cjxuc0lVUkk+IHVyaTsKICAg
ICAgICAgcnYgPSBOU19OZXdVUkkoZ2V0dGVyX0FkZFJlZnModXJpKSwgdXJpU3RyKTsKICAgICAg
ICAgaWYgKE5TX0ZBSUxFRChydikgfHwgIXVyaSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBO
ZWNrbyB3aWxsIGJhcmYgaWYgb3VyIFVSSSBpcyB3ZWlyZAogCiAgICAgICAgIC8vIGRvbid0IGFk
ZCB0aGUgdXJpIHRvIHRoZSBsaXN0IGlmIHRoZSBkb2N1bWVudCBpcyBub3QgYWxsb3dlZCB0bwog
ICAgICAgICAvLyBsb2FkIGl0Ci0gICAgICAgIGlmICghaXNUcnVzdGVkICYmIE5TX0ZBSUxFRChk
b2NQcmluY2lwYWwtPkNoZWNrTWF5TG9hZCh1cmksIHRydWUpKSkKKyAgICAgICAgaWYgKCFpc1Ry
dXN0ZWQgJiYgTlNfRkFJTEVEKGRvY1ByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgdHJ1ZSwg
ZmFsc2UpKSkKICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICB1cmlMaXN0LT5BcHBlbmRF
bGVtZW50KHVyaSwgZmFsc2UpOwogICAgIH0KIAogICAgIG5zQ09NUHRyPG5zSURPTU5vZGU+IHJv
b3ROb2RlID0gZG9fUXVlcnlJbnRlcmZhY2UobVJvb3QpOwogICAgIHJ2ID0gbVF1ZXJ5UHJvY2Vz
c29yLT5HZXREYXRhc291cmNlKHVyaUxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcm9vdE5vZGUsCmRpZmYgLS1naXQgYS9kb2NzaGVsbC9iYXNlL25zRG9jU2hl
bGwuY3BwIGIvZG9jc2hlbGwvYmFzZS9uc0RvY1NoZWxsLmNwcAotLS0gYS9kb2NzaGVsbC9iYXNl
L25zRG9jU2hlbGwuY3BwCisrKyBiL2RvY3NoZWxsL2Jhc2UvbnNEb2NTaGVsbC5jcHAKQEAgLTEw
MDIzLDE3ICsxMDAyMywxNyBAQCBuc0RvY1NoZWxsOjpBZGRTdGF0ZShuc0lWYXJpYW50ICphRGF0
YSwgCiAKICAgICAgICAgICAgIGlmICghZG9jU2NyaXB0T2JqKSB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIG5zQ09NUHRyPG5zSVByaW5jaXBhbD4gcHJpbmNpcGFsID0gZG9jU2NyaXB0T2JqLT5H
ZXRQcmluY2lwYWwoKTsKIAogICAgICAgICAgICAgaWYgKCFwcmluY2lwYWwgfHwKLSAgICAgICAg
ICAgICAgICBOU19GQUlMRUQocHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3VVJJLCB0cnVlKSkp
IHsKKyAgICAgICAgICAgICAgICBOU19GQUlMRUQocHJpbmNpcGFsLT5DaGVja01heUxvYWQobmV3
VVJJLCB0cnVlLCBmYWxzZSkpKSB7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gTlNfRVJST1Jf
RE9NX1NFQ1VSSVRZX0VSUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlm
IChtQ3VycmVudFVSSSkgewogICAgICAgICAgICAgbUN1cnJlbnRVUkktPkVxdWFscyhuZXdVUkks
ICZlcXVhbFVSSXMpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kb20vd29ya2Vycy9TY3JpcHRM
b2FkZXIuY3BwIGIvZG9tL3dvcmtlcnMvU2NyaXB0TG9hZGVyLmNwcAotLS0gYS9kb20vd29ya2Vy
cy9TY3JpcHRMb2FkZXIuY3BwCisrKyBiL2RvbS93b3JrZXJzL1NjcmlwdExvYWRlci5jcHAKQEAg
LTI5OCwyMSArMjk4LDIyIEBAIHB1YmxpYzoKICAgICAgIC8vIElmIHRoaXMgc2NyaXB0IGxvYWRl
ciBpcyBiZWluZyB1c2VkIHRvIG1ha2UgYSBuZXcgd29ya2VyIHRoZW4gd2UgbmVlZAogICAgICAg
Ly8gdG8gZG8gYSBzYW1lLW9yaWdpbiBjaGVjay4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2xlYXIg
dGhlIGxvYWQgd2l0aCB0aGUKICAgICAgIC8vIHNlY3VyaXR5IG1hbmFnZXIuCiAgICAgICBpZiAo
bUlzV29ya2VyU2NyaXB0KSB7CiAgICAgICAgIG5zQ1N0cmluZyBzY2hlbWU7CiAgICAgICAgIHJ2
ID0gdXJpLT5HZXRTY2hlbWUoc2NoZW1lKTsKICAgICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYs
IHJ2KTsKIAotICAgICAgICAvLyBXZSBleGVtcHQgZGF0YSBVUkxzIGZyb20gdGhlIHNhbWUgb3Jp
Z2luIGNoZWNrLgotICAgICAgICBpZiAoIXNjaGVtZS5FcXVhbHNMaXRlcmFsKCJkYXRhIikpIHsK
LSAgICAgICAgICBydiA9IHByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UpOwotICAg
ICAgICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7Ci0gICAgICAgIH0KKyAgICAgICAgLy8g
V2UgcGFzcyB0cnVlIGFzIHRoZSAzcmQgYXJndW1lbnQgdG8gY2hlY2tNYXlMb2FkIGhlcmUuCisg
ICAgICAgIC8vIFRoaXMgYWxsb3dzIHdvcmtlcnMgaW4gc2FuZGJveGVkIGRvY3VtZW50cyB0byBs
b2FkIGRhdGEgVVJMcworICAgICAgICAvLyAoYW5kIG90aGVyIFVSTHMgdGhhdCBpbmhlcml0IHRo
ZWlyIHByaW5jaXBhbCBmcm9tIHRoZWlyCisgICAgICAgIC8vIGNyZWF0b3IuKQorICAgICAgICBy
diA9IHByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKHVyaSwgZmFsc2UsIHRydWUpOworICAgICAgICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICAgICAgfQogICAgICAgZWxzZSB7CiAgICAgICAg
IHJ2ID0gc2VjTWFuLT5DaGVja0xvYWRVUklXaXRoUHJpbmNpcGFsKHByaW5jaXBhbCwgdXJpLCAw
KTsKICAgICAgICAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKICAgICAgIH0KIAogICAgICAg
Ly8gV2UgbmVlZCB0byBrbm93IHdoaWNoIGluZGV4IHdlJ3JlIG9uIGluIE9uU3RyZWFtQ29tcGxl
dGUgc28gd2Uga25vdwogICAgICAgLy8gd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQuCkBAIC00ODUs
MTkgKzQ4NiwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9CQURf
VVJJOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlICB7CiAgICAgICAgIG5zQ1N0cmlu
ZyBzY2hlbWU7CiAgICAgICAgIHJ2ID0gZmluYWxVUkktPkdldFNjaGVtZShzY2hlbWUpOwogICAg
ICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogCi0gICAgICAgIC8vIFdlIGV4ZW1wdCBk
YXRhIHVybHMgYWdhaW4uCi0gICAgICAgIGlmICghc2NoZW1lLkVxdWFsc0xpdGVyYWwoImRhdGEi
KSAmJgotICAgICAgICAgICAgTlNfRkFJTEVEKGxvYWRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChm
aW5hbFVSSSwgZmFsc2UpKSkgeworICAgICAgICAvLyBXZSBleGVtcHQgZGF0YSB1cmxzIGFuZCBv
dGhlciBVUkkncyB0aGF0IGluaGVyaXQgdGhlaXIKKyAgICAgICAgLy8gcHJpbmNpcGFsIGFnYWlu
LgorICAgICAgICBpZiAoTlNfRkFJTEVEKGxvYWRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChmaW5h
bFVSSSwgZmFsc2UsIHRydWUpKSkgewogICAgICAgICAgIHJldHVybiBOU19FUlJPUl9ET01fQkFE
X1VSSTsKICAgICAgICAgfQogICAgICAgfQogCiAgICAgICBtV29ya2VyUHJpdmF0ZS0+U2V0UHJp
bmNpcGFsKGNoYW5uZWxQcmluY2lwYWwpOwogICAgIH0KIAogICAgIHJldHVybiBOU19PSzsKZGlm
ZiAtLWdpdCBhL2xheW91dC9zdHlsZS9Mb2FkZXIuY3BwIGIvbGF5b3V0L3N0eWxlL0xvYWRlci5j
cHAKLS0tIGEvbGF5b3V0L3N0eWxlL0xvYWRlci5jcHAKKysrIGIvbGF5b3V0L3N0eWxlL0xvYWRl
ci5jcHAKQEAgLTE1NDAsMTcgKzE1NDAsMTcgQEAgTG9hZGVyOjpMb2FkU2hlZXQoU2hlZXRMb2Fk
RGF0YSogYUxvYWREYQogICBpZiAoYUxvYWREYXRhLT5tTG9hZGVyUHJpbmNpcGFsKSB7CiAgICAg
Ym9vbCBpbmhlcml0OwogICAgIHJ2ID0gTlNfVVJJQ2hhaW5IYXNGbGFncyhhTG9hZERhdGEtPm1V
UkksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByb3RvY29sSGFuZGxlcjo6VVJJ
X0lOSEVSSVRTX1NFQ1VSSVRZX0NPTlRFWFQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZpbmhlcml0KTsKICAgICBpZiAoKE5TX1NVQ0NFRURFRChydikgJiYgaW5oZXJpdCkgfHwKICAg
ICAgICAgKG5zQ29udGVudFV0aWxzOjpVUklJc0xvY2FsRmlsZShhTG9hZERhdGEtPm1VUkkpICYm
CiAgICAgICAgICBOU19TVUNDRUVERUQoYUxvYWREYXRhLT5tTG9hZGVyUHJpbmNpcGFsLT4KLSAg
ICAgICAgICAgICAgICAgICAgICBDaGVja01heUxvYWQoYUxvYWREYXRhLT5tVVJJLCBmYWxzZSkp
KSkgeworICAgICAgICAgICAgICAgICAgICAgIENoZWNrTWF5TG9hZChhTG9hZERhdGEtPm1VUkks
IGZhbHNlLCBmYWxzZSkpKSkgewogICAgICAgY2hhbm5lbC0+U2V0T3duZXIoYUxvYWREYXRhLT5t
TG9hZGVyUHJpbmNpcGFsKTsKICAgICB9CiAgIH0KIAogICAvLyBXZSBkb24ndCBoYXZlIHRvIGhv
bGQgb24gdG8gdGhlIHN0cmVhbSBsb2FkZXIuICBUaGUgb3duZXJzaGlwCiAgIC8vIG1vZGVsIGlz
OiBOZWNrbyBvd25zIHRoZSBzdHJlYW0gbG9hZGVyLCB3aGljaCBvd25zIHRoZSBsb2FkIGRhdGEs
CiAgIC8vIHdoaWNoIG93bnMgdXMKICAgbnNDT01QdHI8bnNJVW5pY2hhclN0cmVhbUxvYWRlcj4g
c3RyZWFtTG9hZGVyOwpkaWZmIC0tZ2l0IGEvcmRmL2Jhc2Uvc3JjL25zUkRGWE1MRGF0YVNvdXJj
ZS5jcHAgYi9yZGYvYmFzZS9zcmMvbnNSREZYTUxEYXRhU291cmNlLmNwcAotLS0gYS9yZGYvYmFz
ZS9zcmMvbnNSREZYTUxEYXRhU291cmNlLmNwcAorKysgYi9yZGYvYmFzZS9zcmMvbnNSREZYTUxE
YXRhU291cmNlLmNwcApAQCAtODgyLDE5ICs4ODIsMTkgQEAgUkRGWE1MRGF0YVNvdXJjZUltcGw6
OkFzeW5jT25DaGFubmVsUmVkaQogCiAgICAgbnNDT01QdHI8bnNJVVJJPiBuZXdVUkk7CiAgICAg
YU5ld0NoYW5uZWwtPkdldFVSSShnZXR0ZXJfQWRkUmVmcyhuZXdVUkkpKTsKICAgICBuc0NPTVB0
cjxuc0lVUkk+IG5ld09yaWdpbmFsVVJJOwogICAgIGFOZXdDaGFubmVsLT5HZXRPcmlnaW5hbFVS
SShnZXR0ZXJfQWRkUmVmcyhuZXdPcmlnaW5hbFVSSSkpOwogCiAgICAgTlNfRU5TVVJFX1NUQVRF
KG9sZFByaW5jaXBhbCAmJiBuZXdVUkkgJiYgbmV3T3JpZ2luYWxVUkkpOwogCi0gICAgcnYgPSBv
bGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChuZXdVUkksIGZhbHNlKTsKKyAgICBydiA9IG9sZFBy
aW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld1VSSSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAoTlNf
U1VDQ0VFREVEKHJ2KSAmJiBuZXdPcmlnaW5hbFVSSSAhPSBuZXdVUkkpIHsKLSAgICAgICAgcnYg
PSBvbGRQcmluY2lwYWwtPkNoZWNrTWF5TG9hZChuZXdPcmlnaW5hbFVSSSwgZmFsc2UpOworICAg
ICAgICBydiA9IG9sZFByaW5jaXBhbC0+Q2hlY2tNYXlMb2FkKG5ld09yaWdpbmFsVVJJLCBmYWxz
ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChOU19GQUlMRUQocnYpKQogICAgICAgICByZXR1
cm4gcnY7CiAKICAgICBjYi0+T25SZWRpcmVjdFZlcmlmeUNhbGxiYWNrKE5TX09LKTsKICAgICBy
ZXR1cm4gTlNfT0s7CiB9Cg==
</data>
<flag name="review"
          id="540017"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650374</attachid>
            <date>2012-08-08 17:10:06 -0700</date>
            <delta_ts>2012-08-08 17:10:06 -0700</delta_ts>
            <desc>workaround for workers needing a string origin v5</desc>
            <filename>iframe_sandbox_worker_string_origin_workaround</filename>
            <type>text/plain</type>
            <size>2239</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNWE0ZDMzYWY0NGE0NWU5NzEwNTVmYzk5YjQ0
YTkzNmNlNDc0YzFkMAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIHdvcmthcm91bmQgZm9yIHdvcmtlcnMgd2FudGluZyBhIHN0cmluZyBvcmlnaW4g
cj1qc3QKCmRpZmYgLS1naXQgYS9kb20vd29ya2Vycy9Xb3JrZXJQcml2YXRlLmNwcCBiL2RvbS93
b3JrZXJzL1dvcmtlclByaXZhdGUuY3BwCi0tLSBhL2RvbS93b3JrZXJzL1dvcmtlclByaXZhdGUu
Y3BwCisrKyBiL2RvbS93b3JrZXJzL1dvcmtlclByaXZhdGUuY3BwCkBAIC02LDE2ICs2LDE3IEBA
CiAKICNpbmNsdWRlICJXb3JrZXJQcml2YXRlLmgiCiAKICNpbmNsdWRlICJtb3pJVGhpcmRQYXJ0
eVV0aWwuaCIKICNpbmNsdWRlICJuc0lDbGFzc0luZm8uaCIKICNpbmNsdWRlICJuc0lDb25zb2xl
U2VydmljZS5oIgogI2luY2x1ZGUgIm5zSURPTUZpbGUuaCIKICNpbmNsdWRlICJuc0lEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIm5zSURvY1NoZWxsLmgiCiAjaW5jbHVkZSAibnNJSlNDb250ZXh0U3Rh
Y2suaCIKICNpbmNsdWRlICJuc0lNZW1vcnlSZXBvcnRlci5oIgogI2luY2x1ZGUgIm5zSVNjcmlw
dEVycm9yLmgiCiAjaW5jbHVkZSAibnNJU2NyaXB0R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
bnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgiCiAjaW5jbHVkZSAibnNQSURPTVdpbmRvdy5oIgog
I2luY2x1ZGUgIm5zSVRleHRUb1N1YlVSSS5oIgogI2luY2x1ZGUgIm5zSVRpbWVyLmgiCkBAIC0z
MiwxNiArMzMsMTcgQEAKICNpbmNsdWRlICJuc0FsZ29yaXRobS5oIgogI2luY2x1ZGUgIm5zQ29u
dGVudFV0aWxzLmgiCiAjaW5jbHVkZSAibnNET01FcnJvci5oIgogI2luY2x1ZGUgIm5zRE9NSlNV
dGlscy5oIgogI2luY2x1ZGUgIm5zR1VJRXZlbnQuaCIKICNpbmNsdWRlICJuc0pTRW52aXJvbm1l
bnQuaCIKICNpbmNsdWRlICJuc0pTVXRpbHMuaCIKICNpbmNsdWRlICJuc05ldFV0aWwuaCIKKyNp
bmNsdWRlICJuc1NhbmRib3hGbGFncy5oIgogI2luY2x1ZGUgIm5zVGhyZWFkVXRpbHMuaCIKICNp
bmNsdWRlICJ4cGNwdWJsaWMuaCIKICNpbmNsdWRlICJtb3ppbGxhL0F0dHJpYnV0ZXMuaCIKIAog
I2lmZGVmIEFORFJPSUQKICNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgogI2VuZGlmCiAKQEAgLTI1
ODYsMTcgKzI1ODgsMjQgQEAgV29ya2VyUHJpdmF0ZTo6Q3JlYXRlKEpTQ29udGV4dCogYUN4LCBK
UwogICAgICAgICAgIEpTX1JlcG9ydEVycm9yKGFDeCwgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaWYg
Y29kZWJhc2UgaXMgZmlsZSEiKTsKICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChpc0ZpbGUpIHsKICAgICAgICAgICAvLyBYWFggRml4IHRoaXMsIG5l
ZWQgYSByZWFsIGRvbWFpbiBoZXJlLgogICAgICAgICAgIGRvbWFpbiA9IGZpbGU7CiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHdvcmtlcnMgbmVl
ZGluZyBhIHN0cmluZyBkb21haW4gLSB3aWxsIGJlIGZpeGVkCisgICAgICAgIC8vIGluIGEgZm9s
bG93dXAgYWZ0ZXIgdGhpcyBsYW5kcy4KKyAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQtPkdldFNh
bmRib3hGbGFncygpICYgU0FOREJPWEVEX09SSUdJTikgeworICAgICAgICAgIGlmIChOU19GQUlM
RUQoY29kZWJhc2UtPkdldEFzY2lpU3BlYyhkb21haW4pKSkgeworICAgICAgICAgICAgSlNfUmVw
b3J0RXJyb3IoYUN4LCAiQ291bGQgbm90IGdldCBVUkkncyBzcGVjIGZvciBzYW5kYm94ZWQgZG9j
dW1lbnQhIik7CisgICAgICAgICAgICByZXR1cm4gbnNudWxsOworICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICBuc0NPTVB0cjxtb3pJVGhpcmRQYXJ0eVV0aWw+IHRoaXJk
UGFydHlVdGlsID0KICAgICAgICAgICAgIGRvX0dldFNlcnZpY2UoVEhJUkRQQVJUWVVUSUxfQ09O
VFJBQ1RJRCk7CiAgICAgICAgICAgaWYgKCF0aGlyZFBhcnR5VXRpbCkgewogICAgICAgICAgICAg
SlNfUmVwb3J0RXJyb3IoYUN4LCAiQ291bGQgbm90IGdldCB0aGlyZCBwYXJ0eSBoZWxwZXIgc2Vy
dmljZSEiKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgIH0KIAogICAg
ICAgICAgIGlmIChOU19GQUlMRUQodGhpcmRQYXJ0eVV0aWwtPkdldEJhc2VEb21haW4oY29kZWJh
c2UsIGRvbWFpbikpKSB7Cg==
</data>
<flag name="review"
          id="540018"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650376</attachid>
            <date>2012-08-08 17:13:34 -0700</date>
            <delta_ts>2012-08-08 17:13:34 -0700</delta_ts>
            <desc>iframe sandbox tests - general v10</desc>
            <filename>iframe_sandbox_tests_general</filename>
            <type>text/plain</type>
            <size>23611</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYjEzNjliMzA3ZjdlYTQ3ZDRhODk4MmNhYjU1
YzhiODE5NmI5Mjc4ZgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIHRlc3RzIGZvciBpZnJhbWUgc2FuZGJveCAtIGdlbmVyYWwgcj1qc3QKCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUu
aW4KQEAgLTI3NCwxNiArMjc0LDI4IEBAIE1PQ0hJVEVTVF9GSUxFUyA9IFwKIAkJZmlsZV9pZnJh
bWVfc2FuZGJveF9hX2lmNi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNy5odG1s
IFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9hX2lmOS5odG1sIFwKIAkJdGVzdF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdpbi5odG1s
IFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9iX2lmMi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5odG1sIFwKKwkJ
dGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94
X2NfaWYxLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgXAorCQlmaWxl
X2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY1Lmh0bWwgXAorCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2NfaWY2Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fZmFpbC5o
dG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mb3JtX3Bhc3MuaHRtbCBcCisJCWZpbGVfaWZy
YW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJv
eF9wYXNzLmpzIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzIFwKIAkJdGVzdF9pZnJh
bWVfc2FuZGJveF9uYXZpZ2F0aW9uLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYx
Lmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0bWwgXAogCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWYzLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY0Lmh0bWwg
XAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWY2Lmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwgXApkaWZm
IC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Nf
aWYxLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
Y19pZjEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sCkBAIC0w
LDAgKzEsMzUgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50
VXRpbHMuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQv
Y3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBmdW5jdGlvbiBvayhyZXN1bHQsIGRlc2MpIHsK
KyAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHtvazogcmVzdWx0LCBkZXNjOiBkZXNjfSwg
IioiKTsKKyAgfQorCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgb2sodHJ1ZSwgImRvY3Vt
ZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1biBp
bmxpbmUgc2NyaXB0cyIpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FfZm9ybScp
LnN1Ym1pdCgpOworCisgICAgLy8gdHJpZ2dlciB0aGUgamF2YXNjcmlwdDogdXJsIHRlc3QKKyAg
ICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FfbGluaycpOworICB9Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSdmaWxlX2lmcmFtZV9zYW5kYm94X3Bhc3MuanMnPjwvc2NyaXB0Pgor
PGJvZHkgb25Mb2FkPSdvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LXNj
cmlwdHMgc2hvdWxkIGJlIGFibGUgdG8gcnVuIHNjcmlwdCBmcm9tIGV2ZW50IGxpc3RlbmVycyIp
O2RvU3R1ZmYoKTsnPgorICBJIGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyIK
KworICA8Zm9ybSBtZXRob2Q9ImdldCIgYWN0aW9uPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1f
ZmFpbC5odG1sIiBpZD0iYV9mb3JtIj4KKyAgICBGaXJzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4
dCIgbmFtZT0iZmlyc3RuYW1lIj4KKyAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBu
YW1lPSJsYXN0bmFtZSI+CisgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgb25jbGljaz0iZG9TdWJt
aXQoKSIgaWQ9ImFfYnV0dG9uIj4KKyAgPC9mb3JtPgorCisgIDxhIGhyZWYgPSAnamF2YXNjcmlw
dDpvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LXNjcmlwdHMgc2hvdWxk
IGJlIGFibGUgdG8gcnVuIHNjcmlwdCBmcm9tIGphdmFzY3JpcHQ6IFVSTHMiKTsnIGlkPSdhX2xp
bmsnPmNsaWNrIG1lPC9hPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMi5odG1sCkBAIC0wLDAgKzEsMjMgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8
dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisK
KzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgZnVuY3Rpb24gb2so
cmVzdWx0LCBkZXNjKSB7CisgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHJlc3Vs
dCwgZGVzYzogbWVzc2FnZX0sICIqIik7CisgIH0KKworICBmdW5jdGlvbiBkb1N0dWZmKCkgewor
ICAgIG9rKGZhbHNlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRob3V0IGFsbG93LXNjcmlwdHMg
c2hvdWxkIE5PVCBiZSBhYmxlIHRvIHJ1biBpbmxpbmUgc2NyaXB0cyIpOworICB9Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSdmaWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMnPjwvc2NyaXB0Pgor
PGJvZHkgb25Mb2FkPSd3aW5kb3cucGFyZW50LnBvc3RtZXNzYWdlKHtvazogZmFsc2UsIGRlc2M6
ICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2NyaXB0cyBzaG91bGQgTk9UIGJl
IGFibGUgdG8gcnVuIHNjcmlwdCBmcm9tIGV2ZW50IGhhbmRsZXJzIn0sICIqIik7ZG9TdHVmZigp
Oyc+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggbm8gcGVybWlzc2lvbnMKKyAgPGltZyBzcmM9ImFi
b3V0OmJsYW5rIiBvbmVycm9yPSdvayhmYWxzZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aG91
dCBhbGxvdy1zY3JpcHRzIHNob3VsZCBOT1QgYmUgYWJsZSB0byBydW4gc2NyaXB0IGZyb20gZXZl
bnQgaGFuZGxlcnMiKTsnKT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMy5odG1sIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWYzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3Njcmlw
dD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3Rz
L1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKworPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgorICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIGR1bXAoIioqKiBjX2lmMyBo
YXMgbG9hZGVkXG4iKTsKKyAgICAvLyB0cnkgYW5kIHN1Ym1pdCB0aGUgZm9ybSAtIHRoaXMgc2hv
dWxkIHN1Y2NlZWQKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYV9mb3JtJykuc3VibWl0
KCk7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIHNh
bmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1mb3JtcyIKKworICA8Zm9ybSBt
ZXRob2Q9ImdldCIgYWN0aW9uPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1sIiBp
ZD0iYV9mb3JtIj4KKyAgICBGaXJzdCBuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmly
c3RuYW1lIj4KKyAgICBMYXN0IG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYXN0bmFt
ZSI+CisgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgb25jbGljaz0iZG9TdWJtaXQoKSIgaWQ9ImFf
YnV0dG9uIj4KKyAgPC9mb3JtPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
ICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2Ny
aXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVz
dHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorCis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVzYykgeworICAgIHdpbmRvdy5w
YXJlbnQub2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpOworICB9CisKKyAgZnVuY3Rpb24gZG9TdHVm
ZigpIHsKKyAgICAvLyB0cnkgdG8gb3BlbiBhIG5ldyB3aW5kb3cgdmlhIHRhcmdldD0iX2JsYW5r
Iiwgd2luZG93Lm9wZW4oKSwgYW5kIHNob3dNb2RhbERpYWxvZygpCisgICAgLy8gdGhlIHdpbmRv
dyB3ZSB0cnkgdG8gb3BlbiBjbG9zZXMgaXRzZWxmIG9uY2UgaXQgb3BlbnMKKyAgICBzZW5kTW91
c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ3RhcmdldF9ibGFuaycpOworCisgICAgdmFyIHRocmV3
ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgIHdpbmRvdy5vcGVuKCJhYm91dDpibGFuayIpOwor
ICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICB0aHJldyA9IHRydWU7CisgICAgfQorICAgIAor
ICAgIG9rKHRocmV3LCAid2luZG93Lm9wZW4gdGhyZXcgYSBKUyBleGNlcHRpb24gYW5kIHdhcyBu
b3QgYWxsb3dlZCIpOworCisgICAgdGhyZXcgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgd2lu
ZG93LnNob3dNb2RhbERpYWxvZygiYWJvdXQ6YmxhbmsiKTsKKyAgICB9IGNhdGNoKGVycm9yKSB7
CisgICAgICB0aHJldyA9IHRydWU7CisgICAgfQorICAgIAorICAgIG9rKHRocmV3LCAid2luZG93
LnNob3dNb2RhbERpYWxvZyB0aHJldyBhIEpTIGV4Y2VwdGlvbiBhbmQgd2FzIG5vdCBhbGxvd2Vk
Iik7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIHNh
bmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIKKworICA8
YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93X2ZhaWwuaHRtbCIgdGFyZ2V0
PSJfYmxhbmsiIGlkPSJ0YXJnZXRfYmxhbmsiPm9wZW4gd2luZG93PC9hPgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2NfaWY1Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfY19pZjUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5o
dG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0
bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVU
ZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5
cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorCis8L2hl
YWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIGZ1bmN0aW9uIG9rKHJlc3Vs
dCwgZGVzYykgeworICAgIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpOwor
ICB9Cis8L3NjcmlwdD4KKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBzYW5kYm94
ZWQgYnV0IHdpdGggImFsbG93LXNhbWUtb3JpZ2luIgorCisgIDxhIGhyZWYgPSAnamF2YXNjcmlw
dDpvayhmYWxzZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aG91dCBhbGxvdy1zY3JpcHRzIHNo
b3VsZCBub3QgYmUgYWJsZSB0byBydW4gc2NyaXB0IHdpdGggamF2YXNjcmlwdDogVVJMcyIpOycg
aWQ9J2FfbGluayc+Y2xpY2sgbWU8L2E+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwKQEAgLTAsMCArMSwyNCBA
QAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxz
LmpzIj48L3NjcmlwdD4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3Mi
IGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorDQorPC9oZWFkPg0KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCisgIGZ1bmN0aW9uIG9rKHJlc3VsdCwgZGVzYykg
ew0KKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIocmVzdWx0LCBkZXNjKTsNCisgICAgd2lu
ZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHJlc3VsdCwgZGVzYzogZGVzY30sICIqIik7DQor
ICB9DQorICANCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7DQorICAgIG9rKHRydWUsICJhIGRvY3Vt
ZW50IHNhbmRib3hlZCB3aXRoIGFsbG93LXNhbWUtb3JpZ2luIGFuZCBhbGxvdy1zY3JpcHRzIHNo
b3VsZCBiZSBzYW1lIG9yaWdpbiB3aXRoIGl0cyBwYXJlbnQgYW5kIGFibGUgdG8gcnVuIHNjcmlw
dHMgIiArDQorICAgICAgICJyZWdhcmRsZXNzIG9mIHdoYXQga2luZCBvZiB3aGl0ZXNwYWNlIHdh
cyB1c2VkIGluIGl0cyBzYW5kYm94IGF0dHJpYnV0ZSIpOw0KKyAgfQ0KKzwvc2NyaXB0Pg0KKzxi
b2R5IG9uTG9hZD0iZG9TdHVmZigpIj4NCisgIEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxv
dy1zYW1lLW9yaWdpbiIgYW5kICJhbGxvdy1zY3JpcHRzIg0KKzwvYm9keT4NCis8L2h0bWw+DQpk
aWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94
X2ZhaWwuanMgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
ZmFpbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mYWlsLmpzCkBAIC0wLDAgKzEs
MSBAQAorb2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGggYWxsb3ctc2NyaXB0cyBz
aG91bGQgTk9UIGJlIGFibGUgdG8gcnVuIDxzY3JpcHQgc3JjPS4uLj4iKTsKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5U
ZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9q
YXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0
PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMv
U2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYo
KSI+CisgIEkgc2hvdWxkIE5PVCBiZSBsb2FkZWQgYnkgYSBmb3JtIHN1Ym1pdCBmcm9tIGEgc2Fu
ZGJveCB3aXRob3V0ICdhbGxvdy1mb3JtcycKKzwvYm9keT4KKzwvaHRtbD4KKworPHNjcmlwdD4K
KyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHtv
azogZmFsc2UsIGRlc2M6ICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctZm9ybXMg
c2hvdWxkIE5PVCBiZSBhYmxlIHRvIHN1Ym1pdCBmb3JtcyJ9LCAiKiIpOworICB9Cis8L3Njcmlw
dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9wYXNzLmh0bWwKQEAgLTAsMCArMSwxOSBA
QAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPHNjcmlwdCB0eXBl
PSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRl
c3QuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3Nz
IiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorCis8Ym9keSBv
bkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgc2hvdWxkIGJlIGxvYWRlZCBieSBhIGZvcm0gc3VibWl0
IGZyb20gYSBzYW5kYm94IHdpdGggJ2FsbG93LWZvcm1zJworPC9ib2R5PgorPC9odG1sPgorCis8
c2NyaXB0PgorICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIHdpbmRvdy5wYXJlbnQucG9zdE1l
c3NhZ2Uoe29rOiB0cnVlLCBkZXNjOiAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoIGFsbG93LWZv
cm1zIHNob3VsZCBiZSBhYmxlIHRvIHN1Ym1pdCBmb3JtcyJ9LCAiKiIpOworICB9Cis8L3Njcmlw
dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfb3Blbl93aW5kb3dfZmFpbC5odG1sIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X29wZW5fd2luZG93
X2ZhaWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVuX3dpbmRvd19mYWls
Lmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
ICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90
aXRsZT4KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0
cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxl
c2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIv
PgorPC9oZWFkPgorCis8Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgc2hvdWxkIE5PVCBi
ZSBvcGVuZWQgYnkgYSBzYW5kYm94ZWQgaWZyYW1lIHZpYSBhbnkgbWV0aG9kCis8L2JvZHk+Cis8
L2h0bWw+CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7CisgICAgY29uc29sZS5s
b2coImZpbGVfaWZyYW1lX3NhbmRib3hfd2luZG93X29wZW5fZmFpbC5odG1sIik7CisgICAgd2lu
ZG93Lm9wZW5lci5vayhmYWxzZSwgInNhbmRib3hlZCBkb2N1bWVudHMgc2hvdWxkIE5PVCBiZSBh
YmxlIHRvIG9wZW4gd2luZG93cyIpOworICAgIHNlbGYuY2xvc2UoKTsKKyAgfQorPC9zY3JpcHQ+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3Bhc3MuanMgYi9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfcGFzcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJh
bWVfc2FuZGJveF9wYXNzLmpzCkBAIC0wLDAgKzEsMSBAQAorb2sodHJ1ZSwgImRvY3VtZW50cyBz
YW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBiZSBhYmxlIHRvIHJ1biA8c2NyaXB0
IHNyYz0uLi4+Iik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbCBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sCkBAIC0wLDAgKzEs
MjIxIEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8IS0tDQoraHR0cHM6Ly9idWd6aWxs
YS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1wbGVtZW50IEhUTUw1IHNh
bmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzIC0gZ2VuZXJhbCB0ZXN0cw0KKy0tPg0KKzxoZWFk
Pg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2
MDQ8L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiBzcmM9
Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0Pg0KKyAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5q
cyI+PC9zY3JpcHQ+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5
cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KKy8qKiBUZXN0IGZvciBCdWcgMzQxNjA0IC0g
SW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzIC0gZ2VuZXJhbCB0
ZXN0cyAqKi8NCisNCitTaW1wbGVUZXN0LndhaXRGb3JFeHBsaWNpdEZpbmlzaCgpOw0KKw0KKy8v
IGEgcG9zdE1lc3NhZ2UgaGFuZGxlciB0aGF0IGlzIHVzZWQgYnkgc2FuZGJveGVkIGlmcmFtZXMg
d2l0aG91dA0KKy8vICdhbGxvdy1zYW1lLW9yaWdpbicgdG8gY29tbXVuaWNhdGUgcGFzcy9mYWls
IGJhY2sgdG8gdGhpcyBtYWluIHBhZ2UuDQorLy8gaXQgZXhwZWN0cyB0byBiZSBjYWxsZWQgd2l0
aCBhbiBvYmplY3QgbGlrZSB7b2s6IHRydWUvZmFsc2UsIGRlc2M6DQorLy8gPGRlc2NyaXB0aW9u
IG9mIHRoZSB0ZXN0PiB3aGljaCBpdCB0aGVuIGZvcndhcmRzIHRvIG9rKCkNCit3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7DQorDQorZnVu
Y3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpDQorew0KKyAgb2tfd3JhcHBlcihldmVudC5kYXRh
Lm9rLCBldmVudC5kYXRhLmRlc2MpOw0KK30NCisNCit2YXIgY29tcGxldGVkVGVzdHMgPSAwOw0K
K3ZhciBwYXNzZWRUZXN0cyA9IDA7DQorDQorZnVuY3Rpb24gb2tfd3JhcHBlcihyZXN1bHQsIGRl
c2MpIHsNCisgIG9rKHJlc3VsdCwgZGVzYyk7DQorDQorICBjb21wbGV0ZWRUZXN0cysrOw0KKw0K
KyAgaWYgKHJlc3VsdCkgew0KKyAgICBwYXNzZWRUZXN0cysrOw0KKyAgfQ0KKw0KKyAgaWYgKGNv
bXBsZXRlZFRlc3RzID09IDIxKSB7DQorICAgIGlzKHBhc3NlZFRlc3RzLCAyMSwgIlRoZXJlIGFy
ZSAyMSBnZW5lcmFsIHRlc3RzIHRoYXQgc2hvdWxkIHBhc3MiKTsNCisgICAgU2ltcGxlVGVzdC5m
aW5pc2goKTsNCisgIH0NCit9DQorDQorZnVuY3Rpb24gZG9UZXN0KCkgew0KKyAgLy8gcGFzc2Vz
IGlmIGdvb2QNCisgIC8vIDEpIHRlc3QgdGhhdCBpbmxpbmUgc2NyaXB0cyAoPHNjcmlwdD4pIGNh
biBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8g
KGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ct
c2NyaXB0cycpDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMikgdGVzdCB0aGF0IDxz
Y3JpcHQgc3JjPS4uLj4gY2FuIHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggImFsbG93
LXNjcmlwdHMiDQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwg
d2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJykNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAv
LyAzKSB0ZXN0IHRoYXQgc2NyaXB0IGluIGFuIGV2ZW50IGxpc3RlbmVyIChib2R5IG9ubG9hZCkg
Y2FuIHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlwdHMiDQorICAv
LyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYxLmh0bWwgd2hpY2ggaGFzICdhbGxv
dy1zY3JpcHRzJykNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyA0KSB0ZXN0IHRoYXQg
c2NyaXB0IGluIGFuIGphdmFzY3JpcHQ6dXJsIGNhbiBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hl
ZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQorDQorICAvLyBmYWlscyBp
ZiBiYWQNCisgIC8vIDUpIHRlc3QgdGhhdCBpbmxpbmUgc2NyaXB0cyBjYW5ub3QgcnVuIGluIGFu
IGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25lIGlu
IGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0nJykNCisN
CisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gNikgdGVzdCB0aGF0IDxzY3JpcHQgc3JjPS4uLj4g
Y2Fubm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFsbG93LXNjcmlwdHMi
DQorICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwgd2hpY2ggaGFz
IHNhbmRib3g9JycpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDcpIHRlc3QgdGhhdCBz
Y3JpcHQgaW4gYW4gZXZlbnQgbGlzdGVuZXIgKGJvZHkgb25sb2FkKSBjYW5ub3QgcnVuIGluIGFu
IGlmcmFtZSBzYW5kYm94ZWQgd2l0aG91dCAiYWxsb3ctc2NyaXB0cyINCisgIC8vIChkb25lIGlu
IGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjIuaHRtbCB3aGljaCBoYXMgc2FuZGJveD0nJykNCisN
CisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gOCkgdGVzdCB0aGF0IHNjcmlwdCBpbiBhbiBldmVu
dCBsaXN0ZW5lciAoaW1nIG9uZXJyb3IpIGNhbm5vdCBydW4gaW4gYW4gaWZyYW1lIHNhbmRib3hl
ZCB3aXRob3V0ICJhbGxvdy1zY3JpcHRzIg0KKyAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVfc2Fu
ZGJveF9jX2lmMi5odG1sIHdoaWNoIGhhcyBzYW5kYm94PScnKQ0KKyAgDQorICAvLyBmYWlscyBp
ZiBiYWQNCisgIC8vIDkpIHRlc3QgdGhhdCBzY3JpcHQgaW4gYW4gamF2YXNjcmlwdDp1cmwgY2Fu
bm90IHJ1biBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgImFsbG93LXNjcmlwdHMiDQor
ICAvLyAoZG9uZSBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWZfNS5odG1sIHdoaWNoIGhhcyBz
YW5kYm94PSdhbGxvdy1zYW1lLW9yaWdpbicpDQorICB2YXIgaWZfdyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdpZl81JykuY29udGVudFdpbmRvdzsNCisgIHNlbmRNb3VzZUV2ZW50KHt0eXBl
OidjbGljayd9LCAnYV9saW5rJywgaWZfdyk7DQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAg
Ly8gMTApIHRlc3QgdGhhdCBhIG5ldyBpZnJhbWUgaGFzIHNhbmRib3ggYXR0cmlidXRlDQorICB2
YXIgaWZyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7DQorICBva193cmFwcGVy
KCJzYW5kYm94IiBpbiBpZnIsICJhIG5ldyBpZnJhbWUgc2hvdWxkIGhhdmUgYSBzYW5kYm94IGF0
dHJpYnV0ZSIpOw0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDExKSB0ZXN0IHRoYXQg
dGhlIHNhbmRib3ggYXR0cmlidXRlJ3MgZGVmYXVsdCB2YWx1ZSBpcyBhbiBlbXB0eSBzdHJpbmcN
CisgIG9rX3dyYXBwZXIoaWZyLnNhbmRib3ggPT09ICIiLCAiZGVmYXVsdCBzYW5kYm94IGF0dHJp
YnV0ZSBzaG91bGQgYmUgYW4gZW1wdHkgc3RyaW5nIik7DQorDQorICAvLyBwYXNzZXMgaWYgZ29v
ZA0KKyAgLy8gMTIpIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAnYWxsb3ctZm9y
bXMnIGNhbiBzdWJtaXQgZm9ybXMNCisgIC8vIChkb25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hf
Y19pZjMuaHRtbCB3aGljaCBoYXMgJ2FsbG93LWZvcm1zJyBhbmQgJ2FsbG93LXNjcmlwdHMnKQ0K
Kw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyAxMykgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlm
cmFtZSB3aXRob3V0ICdhbGxvdy1mb3JtcycgY2FuIE5PVCBzdWJtaXQgZm9ybXMNCisgIC8vIChk
b25lIGluIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCB3aGljaCBvbmx5IGhhcyAnYWxs
b3ctc2NyaXB0cycpDQorDQorICAvLyBmYWlscyBpZiBiYWQNCisgIC8vIDE0KSB0ZXN0IHRoYXQg
YSBzYW5kYm94ZWQgaWZyYW1lIGNhbid0IG9wZW4gYSBuZXcgd2luZG93IHVzaW5nIHRoZSB0YXJn
ZXQuYXR0cmlidXRlDQorICAvLyB0aGlzIGlzIGRvbmUgdmlhIGZpbGVfaWZyYW1lX3NhbmRib3hf
Y19pZjQuaHRtbCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYW5kICJh
bGxvdy1zYW1lLW9yaWdpbiINCisgIC8vIHRoZSB3aW5kb3cgaXQgYXR0ZW1wdHMgdG8gb3BlbiBj
YWxscyB3aW5kb3cub3BlbmVyLm9rKGZhbHNlLCAuLi4pIGFuZCBmaWxlX2lmcmFtZV9jX2lmNC5o
dG1sIGhhcyBhbiBvaygpDQorICAvLyBmdW5jdGlvbiB0aGF0IGNhbGxzIHdpbmRvdy5wYXJlbnQu
b2tfd3JhcHBlcg0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDE1KSB0ZXN0IHRoYXQg
YSBzYW5kYm94ZWQgaWZyYW1lIGNhbid0IG9wZW4gYSBuZXcgd2luZG93IHVzaW5nIHdpbmRvdy5v
cGVuDQorICAvLyB0aGlzIGlzIGRvbmUgdmlhIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRt
bCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYW5kICJhbGxvdy1zYW1l
LW9yaWdpbiINCisgIC8vIHRoZSB3aW5kb3cgaXQgYXR0ZW1wdHMgdG8gb3BlbiBjYWxscyB3aW5k
b3cub3BlbmVyLm9rKGZhbHNlLCAuLi4pIGFuZCBmaWxlX2lmcmFtZV9jX2lmNC5odG1sIGhhcyBh
biBvaygpDQorICAvLyBmdW5jdGlvbiB0aGF0IGNhbGxzIHdpbmRvdy5wYXJlbnQub2tfd3JhcHBl
cg0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDE2KSB0ZXN0IHRoYXQgYSBzYW5kYm94
ZWQgaWZyYW1lIGNhbid0IG9wZW4gYSBuZXcgd2luZG93IHVzaW5nIHdpbmRvdy5TaG93TW9kYWxE
aWFsb2cNCisgIC8vIHRoaXMgaXMgZG9uZSB2aWEgZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNC5o
dG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIiBhbmQgImFsbG93LXNh
bWUtb3JpZ2luIg0KKyAgLy8gdGhlIHdpbmRvdyBpdCBhdHRlbXB0cyB0byBvcGVuIGNhbGxzIHdp
bmRvdy5vcGVuZXIub2soZmFsc2UsIC4uLikgYW5kIGZpbGVfaWZyYW1lX2NfaWY0Lmh0bWwgaGFz
IGFuIG9rKCkNCisgIC8vIGZ1bmN0aW9uIHRoYXQgY2FsbHMgd2luZG93LnBhcmVudC5va193cmFw
cGVyDQorICANCisgIC8vIHBhc3NlcyB0d2ljZSBpZiBnb29kDQorICAvLyAxNykgdGVzdCB0aGF0
IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4gYWNjZXNzIHNhbWUtb3JpZ2luIGRvY3VtZW50cyBhbmQg
cnVuIHNjcmlwdHMgd2hlbiBpdHMgc2FuZGJveCBhdHRyaWJ1dGUNCisgIC8vIGlzIHNlcGFyYXRl
ZCB3aXRoIHR3byBzcGFjZXMgDQorICAvLyBkb25lIHZpYSBmaWxlX2lmcmFtZV9zYW5kYm94X2Nf
aWY2Lmh0bWwgd2hpY2ggaXMgc2FuZGJveGVkIHdpdGggIiAgYWxsb3ctc2NyaXB0cyAgYWxsb3ct
c2FtZS1vcmlnaW4gICINCisgIA0KKyAgLy8gcGFzc2VzIHR3aWNlIGlmIGdvb2QNCisgIC8vIDE4
KSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNhbiBhY2Nlc3Mgc2FtZS1vcmlnaW4gZG9j
dW1lbnRzIGFuZCBydW4gc2NyaXB0cyB3aGVuIGl0cyBzYW5kYm94IGF0dHJpYnV0ZQ0KKyAgLy8g
aXMgc2VwYXJhdGVkIHdpdGggdGFicw0KKyAgLy8gZG9uZSB2aWEgZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmNi5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICImI3gwOTthbGxvdy1zY3JpcHRz
JiN4MDk7YWxsb3ctc2FtZS1vcmlnaW4mI3gwOTsiDQorICANCisgIC8vIHBhc3NlcyB0d2ljZSBp
ZiBnb29kDQorICAvLyAxOSkgdGVzdCB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBjYW4gYWNjZXNz
IHNhbWUtb3JpZ2luIGRvY3VtZW50cyBhbmQgcnVuIHNjcmlwdHMgd2hlbiBpdHMgc2FuZGJveCBh
dHRyaWJ1dGUNCisgIC8vIGlzIHNlcGFyYXRlZCB3aXRoIGxpbmUgZmVlZHMNCisgIC8vIGRvbmUg
dmlhIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCB3aGljaCBpcyBzYW5kYm94ZWQgd2l0
aCAiJiN4MGE7YWxsb3ctc2NyaXB0cyYjeDBhO2FsbG93LXNhbWUtb3JpZ2luJiN4MGE7Ig0KKyAg
DQorICAvLyBwYXNzZXMgdHdpY2UgaWYgZ29vZA0KKyAgLy8gMjApIHRlc3QgdGhhdCBhIHNhbmRi
b3hlZCBpZnJhbWUgY2FuIGFjY2VzcyBzYW1lLW9yaWdpbiBkb2N1bWVudHMgYW5kIHJ1biBzY3Jp
cHRzIHdoZW4gaXRzIHNhbmRib3ggYXR0cmlidXRlDQorICAvLyBpcyBzZXBhcmF0ZWQgd2l0aCBm
b3JtIGZlZWRzDQorICAvLyBkb25lIHZpYSBmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwg
d2hpY2ggaXMgc2FuZGJveGVkIHdpdGggIiYjeDBjO2FsbG93LXNjcmlwdHMmI3gwYzthbGxvdy1z
YW1lLW9yaWdpbiYjeDBjOyINCisgIA0KKyAgLy8gcGFzc2VzIHR3aWNlIGlmIGdvb2QNCisgIC8v
IDIxKSB0ZXN0IHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIGNhbiBhY2Nlc3Mgc2FtZS1vcmlnaW4g
ZG9jdW1lbnRzIGFuZCBydW4gc2NyaXB0cyB3aGVuIGl0cyBzYW5kYm94IGF0dHJpYnV0ZQ0KKyAg
Ly8gaXMgc2VwYXJhdGVkIHdpdGggY2FycmlhZ2UgcmV0dXJucw0KKyAgLy8gZG9uZSB2aWEgZmls
ZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIHdoaWNoIGlzIHNhbmRib3hlZCB3aXRoICImI3gw
ZDthbGxvdy1zY3JpcHRzJiN4MGQ7YWxsb3ctc2FtZS1vcmlnaW4mI3gwZDsiDQorDQorICAvLyBm
YWlscyBpZiBiYWQNCisgIC8vIDIyKSB0ZXN0IHRoYXQgYW4gaWZyYW1lIHdpdGggc2FuZGJveD0i
IiBkb2VzIE5PVCBoYXZlIHNjcmlwdCBpbiBhIHNyYyBhdHRyaWJ1dGUgY3JlYXRlZCBieSBhIGph
dmFzY3JpcHQ6IA0KKyAgLy8gVVJMIGV4ZWN1dGVkDQorICAvLyBkb25lIGJ5IHRoaXMgcGFnZSwg
c2VlIGlmXzcNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAyMykgdGVzdCB0aGF0IGFu
IGlmcmFtZSB3aXRoIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIERPRVMgaGF2ZSBzY3JpcHQgaW4g
YSBzcmMgYXR0cmlidXRlIGNyZWF0ZWQgYnkgYSBqYXZhc2NyaXB0OiANCisgIC8vIFVSTCBleGVj
dXRlZA0KKyAgLy8gZG9uZSBieSB0aGlzIHBhZ2UsIHNlZSBpZl84DQorDQorICAvLyBmYWlscyBp
ZiBiYWQNCisgIC8vIDI0KSB0ZXN0IHRoYXQgYW4gaWZyYW1lIHdpdGggc2FuZGJveD0iIiwgc3Rh
cnRpbmcgb3V0IHdpdGggYSBkb2N1bWVudCBhbHJlYWR5IGxvYWRlZCwgZG9lcyBOT1QgaGF2ZSBz
Y3JpcHQgaW4gYSBuZXdseQ0KKyAgLy8gc2V0IHNyYyBhdHRyaWJ1dGUgY3JlYXRlZCBieSBhIGph
dmFzY3JpcHQ6IFVSTCBleGVjdXRlZA0KKyAgLy8gZG9uZSBieSB0aGlzIHBhZ2UsIHNlZSBpZl85
DQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMjUpIHRlc3QgdGhhdCBhbiBpZnJhbWUg
d2l0aCBzYW5kYm94PSJhbGxvdy1zY3JpcHRzIiwgc3RhcnRpbmcgb3V0IHdpdGggYSBkb2N1bWVu
dCBhbHJlYWR5IGxvYWRlZCwgRE9FUyBoYXZlIHNjcmlwdA0KKyAgLy8gaW4gYSBuZXdseSBzZXQg
c3JjIGF0dHJpYnV0ZSBjcmVhdGVkIGJ5IGEgamF2YXNjcmlwdDogVVJMIGV4ZWN1dGVkDQorICAv
LyBkb25lIGJ5IHRoaXMgcGFnZSwgc2VlIGlmXzEwDQorfQ0KKw0KK2FkZExvYWRFdmVudChkb1Rl
c3QpOw0KKw0KK3ZhciBzdGFydGVkX2lmXzkgPSBmYWxzZTsNCit2YXIgc3RhcnRlZF9pZl8xMCA9
IGZhbHNlOw0KKw0KK2Z1bmN0aW9uIHN0YXJ0X2lmXzkoKSB7DQorICBpZiAoc3RhcnRlZF9pZl85
KQ0KKyAgICByZXR1cm47DQorDQorICBzdGFydGVkX2lmXzkgPSB0cnVlOw0KKyAgc2VuZE1vdXNl
RXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhX2J1dHRvbicpOw0KK30NCisNCitmdW5jdGlvbiBzdGFy
dF9pZl8xMCgpIHsNCisgIGlmIChzdGFydGVkX2lmXzEwKQ0KKyAgICByZXR1cm47DQorDQorICBz
dGFydGVkX2lmXzEwID0gdHJ1ZTsNCisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAn
YV9idXR0b24yJyk7DQorfQ0KKw0KK2Z1bmN0aW9uIGRvX2lmXzkoKSB7DQorICB2YXIgaWZfOSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl85Jyk7DQorICBpZl85LnNyYyA9ICdqYXZhc2Ny
aXB0OiI8aHRtbD48c2NyaXB0PndpbmRvdy5wYXJlbnQub2tfd3JhcHBlcihmYWxzZSwgXCdhbiBp
ZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2NyaXB0cyBzaG91bGQgbm90IGV4ZWN1dGUg
c2NyaXB0IGluIGEgamF2YXNjcmlwdCBVUkwgaW4gYSBuZXdseSBzZXQgc3JjIGF0dHJpYnV0ZVwn
KTs8XC9zY3JpcHQ+PFwvaHRtbD4iJzsNCit9DQorDQorZnVuY3Rpb24gZG9faWZfMTAoKSB7DQor
ICB2YXIgaWZfMTAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMTAnKTsNCisgIGlmXzEw
LnNyYyA9ICdqYXZhc2NyaXB0OiI8aHRtbD48c2NyaXB0PndpbmRvdy5wYXJlbnQub2tfd3JhcHBl
cih0cnVlLCBcJ2FuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zY3JpcHRzIHNob3VsZCBl
eGVjdXRlIHNjcmlwdCBpbiBhIGphdmFzY3JpcHQgVVJMIGluIGEgbmV3bHkgc2V0IHNyYyBhdHRy
aWJ1dGVcJyk7PFwvc2NyaXB0PjxcL2h0bWw+Iic7DQorfQ0KKzwvc2NyaXB0Pg0KKzxib2R5Pg0K
KzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJbXBsZW1lbnQg
SFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMNCis8cCBpZD0iZGlzcGxheSI+PC9w
Pg0KKzxkaXYgaWQ9ImNvbnRlbnQiPg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmln
aW4gYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzEiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lm
MS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJv
eD0iIiBpZD0iaWZfMiIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYyLmh0bWwiIGhlaWdo
dD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1mb3Jt
cyBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMyIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWYz
Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94
PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfNCIgc3JjPSJmaWxlX2lm
cmFtZV9zYW5kYm94X2NfaWY0Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+
DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiIgaWQ9ImlmXzUiIHNyYz0iZmls
ZV9pZnJhbWVfc2FuZGJveF9jX2lmNS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZy
YW1lPg0KKzxpZnJhbWUgc2FuZGJveD0iICBhbGxvdy1zYW1lLW9yaWdpbiAgYWxsb3ctc2NyaXB0
cyAgIiBpZD0iaWZfNl9hIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCIgaGVp
Z2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9IiYjeDA5O2Fs
bG93LXNhbWUtb3JpZ2luJiN4MDk7YWxsb3ctc2NyaXB0cyYjeDA5OyIgaWQ9ImlmXzZfYiIgc3Jj
PSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+
PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSImI3gwYTthbGxvdy1zYW1lLW9yaWdpbiYjeDBh
O2FsbG93LXNjcmlwdHMmI3gwYTsiIGlkPSJpZl82X2MiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJv
eF9jX2lmNi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUg
c2FuZGJveD0iJiN4MGM7YWxsb3ctc2FtZS1vcmlnaW4mI3gwYzthbGxvdy1zY3JpcHRzJiN4MGM7
IiBpZD0iaWZfNl9kIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCIgaGVpZ2h0
PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZyYW1lIHNhbmRib3g9IiYjeDBkO2FsbG93
LXNhbWUtb3JpZ2luJiN4MGQ7YWxsb3ctc2NyaXB0cyYjeDBkOyIgaWQ9ImlmXzZfZSIgc3JjPSJm
aWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9p
ZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiIgaWQ9J2lmXzcnIHNy
Yz0iamF2YXNjcmlwdDonPGh0bWw+PHNjcmlwdD53aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIoZmFs
c2UsIFwnYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0IGFsbG93LXNjcmlwdHMgc2hvdWxkIG5v
dCBleGVjdXRlIHNjcmlwdCBpbiBhIGphdmFzY3JpcHQgVVJMIGluIGl0cyBzcmMgYXR0cmlidXRl
XCcpOzxcL3NjcmlwdD48XC9odG1sPic7IiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1l
Pg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyIgaWQ9
J2lmXzgnIHNyYz0iamF2YXNjcmlwdDonPGh0bWw+PHNjcmlwdD53aW5kb3cucGFyZW50Lm9rX3dy
YXBwZXIodHJ1ZSwgXCdhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2NyaXB0cyBz
aG91bGQgZXhlY3V0ZSBzY3JpcHQgaW4gYSBqYXZhc2NyaXB0IFVSTCBpbiBpdHMgc3JjIGF0dHJp
YnV0ZVwnKTs8XC9zY3JpcHQ+PFwvaHRtbD4nOyIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lm
cmFtZT4NCis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2luIiBvbmxvYWQ9J3N0YXJ0
X2lmXzkoKScgaWQ9J2lmXzknIHNyYz0iYWJvdXQ6YmxhbmsiIGhlaWdodD0iMTAiIHdpZHRoPSIx
MCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1z
Y3JpcHRzIiBvbmxvYWQ9J3N0YXJ0X2lmXzEwKCknIGlkPSdpZl8xMCcgc3JjPSJhYm91dDpibGFu
ayIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aW5wdXQgdHlwZT0nYnV0dG9u
JyBpZD0iYV9idXR0b24iIG9uY2xpY2s9J2RvX2lmXzkoKSc+DQorPGlucHV0IHR5cGU9J2J1dHRv
bicgaWQ9ImFfYnV0dG9uMiIgb25jbGljaz0nZG9faWZfMTAoKSc+DQorPC9kaXY+DQorPC9ib2R5
Pg0KKzwvaHRtbD4NCg==
</data>
<flag name="review"
          id="540022"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650377</attachid>
            <date>2012-08-08 17:14:35 -0700</date>
            <delta_ts>2012-08-08 17:14:35 -0700</delta_ts>
            <desc>iframe sandbox tests - inheritance v6</desc>
            <filename>iframe_sandbox_tests_inheritance</filename>
            <type>text/plain</type>
            <size>14793</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZmIxMGJhNzNiZDk3M2Q2OTEzMzU4NWQ3OWIy
YjUwNTNlNjVlNmYwZAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIHRlc3RzIGZvciBpZnJhbWUgc2FuZGJveCAtIGluaGVyaXRhbmNlIHI9anN0Cgpk
aWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9NYWtlZmlsZS5pbgorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2Vm
aWxlLmluCkBAIC0yNjAsMTYgKzI2MCwyNiBAQCBNT0NISVRFU1RfRklMRVMgPSBcCiAJCXRlc3Rf
YnVnNjUxOTU2Lmh0bWwgXAogCQl0ZXN0X2J1ZzY5NDUwMy5odG1sIFwKIAkJdGVzdF9vYmplY3Rf
cGx1Z2luX25hdi5odG1sIFwKIAkJdGVzdF9idWc3NDIwMzAuaHRtbCBcCiAJCXRlc3RfYnVnNzQy
NTQ5Lmh0bWwgXAogCQl0ZXN0X2J1Zzc0NTY4NS5odG1sIFwKIAkJdGVzdF9pbnB1dF9maWxlX3Bp
Y2tlci5odG1sIFwKIAkJdGVzdF9idWc3NjM2MjYuaHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRi
b3hfaW5oZXJpdGFuY2UuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjEuaHRtbCBc
CisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfYV9pZjMuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjQuaHRtbCBcCisJCWZp
bGVfaWZyYW1lX3NhbmRib3hfYV9pZjUuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9p
ZjYuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjcuaHRtbCBcCisJCWZpbGVfaWZy
YW1lX3NhbmRib3hfYV9pZjguaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjkuaHRt
bCBcCiAJCXRlc3RfaWZyYW1lX3NhbmRib3hfc2FtZV9vcmlnaW4uaHRtbCBcCiAJCWZpbGVfaWZy
YW1lX3NhbmRib3hfYl9pZjEuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjIuaHRt
bCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjMuaHRtbCBcCiAJCXRlc3RfaWZyYW1lX3Nh
bmRib3hfbmF2aWdhdGlvbi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMS5odG1s
IFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmMy5odG1sIFwKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfYV9pZjEuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1
ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3Nz
IiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPGJvZHk+Cisg
IEkgYW0gc2FuZGJveGVkIHdpdGhvdXQgYW55IHBlcm1pc3Npb25zCisgIDxpZnJhbWUgaWQ9Imlm
XzJhIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCIgaGVpZ2h0PSIxMCIgd2lk
dGg9IjEwIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBpZD0iaWZfMmIiIHNhbmRib3g9ImFsbG93LXNj
cmlwdHMiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sIiBoZWlnaHQ9IjEwIiB3
aWR0aD0iMTAiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYyLmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
ICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+
Cis8L2hlYWQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRv
U3R1ZmYoKSB7CisgIC8vIHNob3VsZCBOT1QgYmUgYWJsZSB0byBleGVjdXRlIHNjcmlwdHMKKyAg
d2luZG93LnBhcmVudC5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiBmYWxzZSwgZGVzYzogImEgZG9j
dW1lbnQgd2l0aGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0aCBzYW5kYm94PScnIHNob3VsZCBO
T1QgYmUgYWJsZSB0byBleGVjdXRlIHNjcmlwdHMifSwgIioiKTsKK30KKzwvc2NyaXB0PgorCis8
Ym9keSBvbkxvYWQ9ImRvU3R1ZmYoKSI+CisgIEkgYW0gTk9UIHNhbmRib3hlZCBvciBhbSBzYW5k
Ym94ZWQgd2l0aCAiYWxsb3ctc2NyaXB0cyIgYnV0IGFtIGNvbnRhaW5lZCB3aXRoaW4gYW4gaWZy
YW1lIHNhbmRib3hlZCB3aXRoIHNhbmRib3ggPSAiIgorICBvciBhbSBzYW5kYm94ZWQgd2l0aCBz
YW5kYm94PScnIGluc2lkZSBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggImFsbG93LXNjcmlwdHMi
Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWYzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
LS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1l
X3NhbmRib3hfYV9pZjMuaHRtbApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9y
IEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQv
Y3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICBm
dW5jdGlvbiBva193cmFwcGVyKGNvbmRpdGlvbiwgbXNnKSB7CisgICAgd2luZG93LnBhcmVudC5v
a193cmFwcGVyKGNvbmRpdGlvbiwgbXNnKTsKKyAgfQorPC9zY3JpcHQ+CisKKzxib2R5PgorICBJ
IGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyIKKworICA8aWZyYW1lIGlkPSdp
Zl80JyBzcmM9J2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjQuaHRtbCcgaGVpZ2h0PSIxMCIgd2lk
dGg9IjEwIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBpZD0naWZfNycgc3JjPSdmaWxlX2lmcmFtZV9z
YW5kYm94X2FfaWY3Lmh0bWwnIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+CisgIDxp
ZnJhbWUgaWQ9J2lmXzInIHNhbmRib3g9Jycgc3JjPSdmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWYy
Lmh0bWwnIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+
CisKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9hX2lmNC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2FfaWY0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjQuaHRt
bApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxt
ZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxl
PgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMv
U2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
KworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9TdHVmZigpIHsK
KyAgdHJ5IHsKKyAgICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIoZmFsc2UsICJhIGRvY3VtZW50
IGNvbnRhaW5lZCB3aXRoaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgd2l0aG91dCAnYWxsb3ctc2Ft
ZS1vcmlnaW4nIHNob3VsZCBOT1QgYmUgc2FtZSBkb21haW4gd2l0aCBpdHMgcGFyZW50Iik7Cisg
IH0gY2F0Y2goZSkgeworICB9CisKKyAgdHJ5IHsKKyAgICB3aW5kb3cucGFyZW50LnBhcmVudC5v
a193cmFwcGVyKGZhbHNlLCAiYSBkb2N1bWVudCBjb250YWluZWQgd2l0aGluIGEgc2FuZGJveGVk
IGRvY3VtZW50IHdpdGhvdXQgJ2FsbG93LXNhbWUtb3JpZ2luJyBzaG91bGQgTk9UIGJlIHNhbWUg
ZG9tYWluIHdpdGggdGhlIHRvcCBsZXZlbCIpOworICB9IGNhdGNoKGUpIHsKKyAgfQorfQorPC9z
Y3JpcHQ+CisKKzxib2R5IG9uTG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBub3Qgc2FuZGJveGVk
IGJ1dCBjb250YWluZWQgd2l0aGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHdpdGggJ2FsbG93LXNj
cmlwdHMnCis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNS5odG1sIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY1Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVf
aWZyYW1lX3NhbmRib3hfYV9pZjUuaHRtbApAQCAtMCwwICsxLDIyIEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRl
c3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9
InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxz
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
PgorICBmdW5jdGlvbiBva193cmFwcGVyKHJlc3VsdCwgZGVzYykgeworICAgIHdpbmRvdy5wYXJl
bnQub2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpOworICB9Cis8L3NjcmlwdD4KKworPGJvZHk+Cisg
IEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2lu
IgorCisgIDxpZnJhbWUgc2FuZGJveD0nYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbicg
aWQ9J2lmXzYnIHNyYz0nZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNi5odG1sJyBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjYuaHRtbCBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY2Lmh0bWwKQEAgLTAsMCArMSwyMSBA
QAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5j
c3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBs
ZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvU3R1ZmYoKSB7CisgIHdpbmRvdy5wYXJlbnQu
b2tfd3JhcHBlcih0cnVlLCAiYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2FtZS1v
cmlnaW4nIGFuZCBjb250YWluZWQgd2l0aGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHdpdGggJ2Fs
bG93LXNhbWUtb3JpZ2luJyBzaG91bGQgYmUgc2FtZSBkb21haW4gd2l0aCBpdHMgcGFyZW50Iik7
CisgIHdpbmRvdy5wYXJlbnQucGFyZW50Lm9rX3dyYXBwZXIodHJ1ZSwgImEgZG9jdW1lbnQgc2Fu
ZGJveGVkIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyBjb250YWluZWQgd2l0aGluIGEgc2FuZGJv
eGVkIGRvY3VtZW50IHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyBzaG91bGQgYmUgc2FtZSBkb21h
aW4gd2l0aCB0aGUgdG9wIGxldmVsIik7Cit9Cis8L3NjcmlwdD4KKworPGJvZHkgb25Mb2FkPSJk
b1N0dWZmKCkiPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzIGFsbG93LXNh
bWUtb3JpZ2luJyBhbmQgY29udGFpbmVkIHdpdGhpbiBhIHNhbmRib3hlZCBkb2N1bWVudCB3aXRo
ICdhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luJworPC9ib2R5PgorPC9odG1sPgorCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
YV9pZjcuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJv
eF9hX2lmNy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY3Lmh0bWwKQEAg
LTAsMCArMSwyMCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBs
ZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgorZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgLy8gc2hvdWxkIGJlIGFibGUgdG8gZXhlY3V0
ZSBzY3JpcHRzCisgIHdpbmRvdy5wYXJlbnQucGFyZW50LnBvc3RNZXNzYWdlKHtvazogdHJ1ZSwg
ZGVzYzogImEgZG9jdW1lbnQgY29udGFpbmVkIHdpdGhpbiBhbiBpZnJhbWUgY29udGFpbmVkIHdp
dGhpbiBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnIHNob3VsZCBiZSBh
YmxlIHRvIGV4ZWN1dGUgc2NyaXB0cyJ9LCAiKiIpOworfQorPC9zY3JpcHQ+CisKKzxib2R5IG9u
TG9hZD0iZG9TdHVmZigpIj4KKyAgSSBhbSBOT1Qgc2FuZGJveGVkIGJ1dCBhbSBjb250YWluZWQg
d2l0aGluIGFuIGlmcmFtZSBjb250YWluZWQgd2l0aGluIGFuIGlmcmFtZSBzYW5kYm94ZWQgd2l0
aCBzYW5kYm94ID0gImFsbG93LXNjcmlwdHMiCis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5o
dG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY4
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjguaHRtbApAQCAtMCwwICsx
LDI2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90
ZXN0LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMv
U2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxzY3JpcHQ+Citm
dW5jdGlvbiBkb1N1YmxvYWQoKSB7CisgIHZhciBpZl85ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2lmXzknKTsKKyAgaWZfOS5zcmMgPSAnZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOS5odG1s
JzsKK30KKword2luZG93LmRvU3VibG9hZCA9IGRvU3VibG9hZDsKKworPC9zY3JpcHQ+Cis8Ym9k
eT4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1v
cmlnaW4iLiBBZnRlciBteSBpbml0aWFsIGxvYWQsICJhbGxvdy1zYW1lLW9yaWdpbiIgaXMgcmVt
b3ZlZAorICBhbmQgdGhlbiBJIGxvYWQgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOS5odG1sLCB3
aGljaCBhdHRlbXBzIHRvIGNhbGwgYSBmdW5jdGlvbiBpbiB3aW5kb3cudG9wLiBUaGlzIHNob3Vs
ZAorICBzdWNjZWVkIHNpbmNlIHRoZSBuZXcgc2FuZGJveCBmbGFncyBzaG91bGRuJ3QgaGF2ZSB0
YWtlbiBhZmZlY3Qgb24gbWUgdW50aWwgSSdtIHJlbG9hZGVkLgorCisgIDxpZnJhbWUgaWQ9J2lm
XzknIHNyYz0nYWJvdXQ6YmxhbmsnIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+Cis8
L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3Qv
ZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOS5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2FfaWY5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfYV9pZjkuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1
ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3Nz
IiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdD4K
K2Z1bmN0aW9uIGRvU3R1ZmYoKSB7CisgIHdpbmRvdy5wYXJlbnQucGFyZW50Lm9rX3dyYXBwZXIo
dHJ1ZSwgImEgc3VibG9hZGVkIGRvY3VtZW50IHNob3VsZCBpbmhlcml0IHRoZSBmbGFncyBvZiB0
aGUgZG9jdW1lbnQsIG5vdCBvZiB0aGUgZG9jc2hlbGwvc2FuZGJveCBhdHRyaWJ1dGUiKTsKK30K
Kzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSdkb1N0dWZmKCknPgorICBJJ20gYSBzdWJsb2FkZWQg
ZG9jdW1lbnQgb2YgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5odG1sLiBJIHNob3VsZCBiZSBh
YmxlIHRvIGNhbGwgYSBmdW5jdGlvbiBpbiB3aW5kb3cudG9wCisgIGJlY2F1c2UgSSBzaG91bGQg
YmUgc2FtZS1vcmlnaW4gd2l0aCBpdC4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2luaGVyaXRhbmNl
Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfaW5o
ZXJpdGFuY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9pbmhlcml0YW5jZS5o
dG1sCkBAIC0wLDAgKzEsMTA3IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8IS0tDQor
aHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQorSW1w
bGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzIC0gaW5oZXJpdGFuY2Ug
dGVzdHMNCistLT4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRs
ZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRp
b24vamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3Nj
cmlwdD4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90
ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxzY3JpcHQgdHlwZT0iYXBw
bGljYXRpb24vamF2YXNjcmlwdCI+DQorLyoqIFRlc3QgZm9yIEJ1ZyAzNDE2MDQgLSBJbXBsZW1l
bnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMgKiovDQorLyoqIEluaGVyaXRh
bmNlIFRlc3RzICoqLw0KKw0KK1NpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0RmluaXNoKCk7DQor
ICANCisvLyBBIHBvc3RNZXNzYWdlIGhhbmRsZXIgdGhhdCBpcyB1c2VkIGJ5IHNhbmRib3hlZCBp
ZnJhbWVzIHdpdGhvdXQNCisvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIHRvIGNvbW11bmljYXRlIHBh
c3MvZmFpbCBiYWNrIHRvIHRoaXMgbWFpbiBwYWdlLg0KKy8vIEl0IGV4cGVjdHMgdG8gYmUgY2Fs
bGVkIHdpdGggYW4gb2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNjOg0KKy8vIDxkZXNj
cmlwdGlvbiBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0byBvaygpLg0KK3dp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTsN
CisNCit2YXIgY29tcGxldGVkVGVzdHMgPSAwOw0KK3ZhciBwYXNzZWRUZXN0cyA9IDA7DQorDQor
ZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpDQorew0KKyAgb2tfd3JhcHBlcihldmVudC5k
YXRhLm9rLCBldmVudC5kYXRhLmRlc2MpOw0KK30NCisNCitmdW5jdGlvbiBva193cmFwcGVyKHJl
c3VsdCwgZGVzYykgew0KKyAgb2socmVzdWx0LCBkZXNjKTsNCisNCisgIGNvbXBsZXRlZFRlc3Rz
Kys7DQorDQorICBpZiAocmVzdWx0KSB7DQorCSAgcGFzc2VkVGVzdHMrKzsNCisgIH0gDQorICAg
ICANCisgIGlmIChjb21wbGV0ZWRUZXN0cyA9PSA0KSB7DQorICAgIGlzKHBhc3NlZFRlc3RzLCA0
LCAidGhlcmUgc2hvdWxkIGJlIDMgcGFzc2VkIGluaGVyaXRhbmNlIHRlc3RzIik7DQorICAgIFNp
bXBsZVRlc3QuZmluaXNoKCk7DQorICB9DQorfQ0KKw0KK2Z1bmN0aW9uIGRvVGVzdCgpIHsNCisg
IC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gMSkgYW4gaWZyYW1lIHdpdGggbm8gc2FuZGJveCBhdHRy
aWJ1dGUgaW5zaWRlIGFuIGlmcmFtZSB0aGF0IGhhcyBzYW5kYm94ID0gIiINCisgIC8vIHNob3Vs
ZCBub3QgYmUgYWJsZSB0byBleGVjdXRlIHNjcmlwdHMgKGNhbm5vdCBldmVyIGxvb3NlbiBwZXJt
aXNzaW9ucykNCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjIuaHRtbCBj
b250YWluZWQgd2l0aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjEuaHRtbCkNCisNCisgIC8v
IGZhaWxzIGlmIGJhZA0KKyAgLy8gMikgYW4gaWZyYW1lIHdpdGggc2FuZGJveCA9ICJhbGxvdy1z
Y3JpcHRzIiBpbnNpZGUgYW4gaWZyYW1lIHRoYXQgaGFzIHNhbmRib3ggPSAiIg0KKyAgLy8gc2hv
dWxkIG5vdCBiZSBhYmxlIHRvIGV4ZWN1dGUgc2NyaXB0cyAoY2Fubm90IGV2ZXIgbG9vc2VuIHBl
cm1pc3Npb25zKQ0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1s
IGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMS5odG1sKQ0KKw0KKyAg
Ly8gZmFpbHMgaWYgYmFkDQorICAvLyAzKSBhbiBpZnJhbWUgd2l0aCBubyBzYW5kYm94IGF0dHJp
YnV0ZSBpbnNpZGUgYW4gaWZyYW1lIHRoYXQgaGFzIHNhbmRib3ggPSAiYWxsb3ctc2NyaXB0cyIN
CisgIC8vIHNob3VsZCBub3QgYmUgc2FtZSBvcmlnaW4gd2l0aCB0aGUgdG9wIHdpbmRvdw0KKyAg
Ly8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmNC5odG1sIGNvbnRhaW5lZCB3aXRo
aW4gZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMy5odG1sKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFk
DQorICAvLyA0KSBhbiBpZnJhbWUgd2l0aCBubyBzYW5kYm94IGF0dHJpYnV0ZSBpbnNpZGUgYW4g
aWZyYW1lIHRoYXQgaGFzIHNhbmRib3ggPSAiYWxsb3ctc2NyaXB0cyINCisgIC8vIHNob3VsZCBu
b3QgYmUgc2FtZSBvcmlnaW4gd2l0aCBpdHMgcGFyZW50DQorICAvLyAoZG9uZSBieSBmaWxlX2lm
cmFtZV9zYW5kYm94X2FfaWY0Lmh0bWwgY29udGFpbmVkIHdpdGhpbiBmaWxlX2lmcmFtZV9zYW5k
Ym94X2FfaWYzLmh0bWwpDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gNSkgYW4gaWZy
YW1lIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyBhbmQgJ2FsbG93LXNjcmlwdHMnIGluc2lkZSBh
biBpZnJhbWUgd2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nDQorICAvLyBhbmQgJ2FsbG93LXNjcmlw
dHMnIHNob3VsZCBiZSBzYW1lIG9yaWdpbiB3aXRoIHRoZSB0b3Agd2luZG93DQorICAvLyAoZG9u
ZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2FfaWY2Lmh0bWwgY29udGFpbmVkIHdpdGhpbiBmaWxl
X2lmcmFtZV9zYW5kYm94X2FfaWY1Lmh0bWwpDQorDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAg
Ly8gNikgYW4gaWZyYW1lIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyBhbmQgJ2FsbG93LXNjcmlw
dHMnIGluc2lkZSBhbiBpZnJhbWUgd2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nDQorICAvLyBhbmQg
J2FsbG93LXNjcmlwdHMnIHNob3VsZCBiZSBzYW1lIG9yaWdpbiB3aXRoIGl0cyBwYXJlbnQNCisg
IC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjYuaHRtbCBjb250YWluZWQgd2l0
aGluIGZpbGVfaWZyYW1lX3NhbmRib3hfYV9pZjUuaHRtbCkNCisNCisgIC8vIHBhc3NlcyBpZiBn
b29kDQorICAvLyA3KSBhbiBpZnJhbWUgd2l0aCBubyBzYW5kYm94IGF0dHJpYnV0ZSBpbnNpZGUg
YW4gaWZyYW1lIHRoYXQgaGFzIHNhbmRib3ggPSAiYWxsb3ctc2NyaXB0cyINCisgIC8vIHNob3Vs
ZCBiZSBhYmxlIHRvIGV4ZWN1dGUgc2NyaXB0cw0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVf
c2FuZGJveF9hX2lmNy5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9h
X2lmMy5odG1sKQ0KKw0KKyAgLy8gZmFpbHMgaWYgYmFkDQorICAvLyA4KSBhbiBpZnJhbWUgd2l0
aCBzYW5kYm94PSIiIGluc2lkZSBhbiBpZnJhbWUgdGhhdCBoYXMgYWxsb3ctc2NyaXB0cyBzaG91
bGQgbm90IGJlIGFibGUNCisgIC8vIHRvIGV4ZWN1dGUgc2NyaXB0cw0KKyAgLy8gKGRvbmUgYnkg
ZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmMi5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJh
bWVfc2FuZGJveF9hX2lmMy5odG1sKQ0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDkp
IG1ha2Ugc3VyZSB0aGF0IGNoYW5naW5nIHRoZSBzYW5kYm94IGZsYWdzIG9uIGFuIGlmcmFtZSAo
aWZfOCkgZG9lc24ndCBhZmZlY3QNCisgIC8vIHRoZSBzYW5kYm94aW5nIG9mIHN1YmxvYWRzIG9m
IGNvbnRlbnQgd2l0aGluIHRoYXQgaWZyYW1lDQorICB2YXIgaWZfOCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdpZl84Jyk7DQorICBpZl84LnNhbmRib3ggPSAnYWxsb3ctc2NyaXB0cyc7DQor
ICBpZl84LmNvbnRlbnRXaW5kb3cuZG9TdWJsb2FkKCk7IA0KK30NCisNCithZGRMb2FkRXZlbnQo
ZG9UZXN0KTsNCis8L3NjcmlwdD4NCis8Ym9keT4NCis8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0i
aHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0Ij5Nb3pp
bGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZv
ciBJRlJBTUVzDQorPHAgaWQ9ImRpc3BsYXkiPjwvcD4NCis8ZGl2IGlkPSJjb250ZW50Ij4NCis8
aWZyYW1lIHNhbmRib3g9IiIgaWQ9ImlmXzEiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lm
MS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJv
eD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzMiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lm
My5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgc2FuZGJv
eD0iYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIgaWQ9ImlmXzUiIHNyYz0iZmlsZV9p
ZnJhbWVfc2FuZGJveF9hX2lmNS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1l
Pg0KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIgaWQ9
ImlmXzgiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9hX2lmOC5odG1sIiBoZWlnaHQ9IjEwIiB3
aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzwvZGl2Pg0K
</data>
<flag name="review"
          id="540023"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650378</attachid>
            <date>2012-08-08 17:15:21 -0700</date>
            <delta_ts>2012-08-08 17:15:21 -0700</delta_ts>
            <desc>iframe sandbox tests - workers v3</desc>
            <filename>iframe_sandbox_tests_workers</filename>
            <type>text/plain</type>
            <size>6316</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgN2U0Y2EzZjFlOTYzY2IxYjhjYTNkZDdkY2Iw
N2MxY2U2YTYyNTRiZAojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIHRlc3RzIGZvciBpZnJhbWUgc2FuZGJveCAtIHdvcmtlcnMgcj1qc3QKCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUu
aW4KQEAgLTI2NCwxNiArMjY0LDE5IEBAIE1PQ0hJVEVTVF9GSUxFUyA9IFwKIAkJdGVzdF9idWc3
NDI1NDkuaHRtbCBcCiAJCXRlc3RfYnVnNzQ1Njg1Lmh0bWwgXAogCQl0ZXN0X2lucHV0X2ZpbGVf
cGlja2VyLmh0bWwgXAogCQl0ZXN0X2J1Zzc2MzYyNi5odG1sIFwKIAkJdGVzdF9pZnJhbWVfc2Fu
ZGJveF9zYW1lX29yaWdpbi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1s
IFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9iX2lmMy5odG1sIFwKKwkJdGVzdF9pZnJhbWVfc2FuZGJveF93b3JrZXJzLmh0bWwgXAor
CQlmaWxlX2lmcmFtZV9zYW5kYm94X2dfaWYxLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94
X3dvcmtlci5qcyBcCiAJCSQoTlVMTCkKIAogTU9DSElURVNUX0JST1dTRVJfRklMRVMgPSBcCiAJ
CWJyb3dzZXJfYnVnNjQ5Nzc4LmpzIFwKIAkJZmlsZV9idWc2NDk3NzguaHRtbCBcCiAJCWZpbGVf
YnVnNjQ5Nzc4Lmh0bWxeaGVhZGVyc14gXAogCQkkKE5VTEwpCiAKZGlmZiAtLWdpdCBhL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9nX2lmMS5odG1sIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2dfaWYxLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZ19pZjEuaHRtbApAQCAtMCwwICsxLDYxIEBACis8
IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4K
KyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3Nj
cmlwdD4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rl
c3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KKyAgZnVuY3Rpb24gb2socmVzdWx0LCBkZXNjKSB7CisgICAgd2luZG93LnBh
cmVudC5wb3N0TWVzc2FnZSh7b2s6IHJlc3VsdCwgZGVzYzogZGVzY30sICIqIik7CisgIH0KKwor
ICBmdW5jdGlvbiBkb1N0dWZmKCkgeworICAgIC8vIHRlc3QgZGF0YSBVUkkKKworICAgIC8vIHNl
bGYub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAvLyAgIHNlbGYucG9zdE1lc3Nh
Z2UoJ21ha2UgaXQgc28nKTsKKyAgICAvLyB9OworICAgIHZhciBkYXRhX3VybCA9ICJkYXRhOnRl
eHQvcGxhaW47Y2hhcnNldD11dGYtODtiYXNlNjQsYzJWc1ppNXZibTFsYzNOaFoyVWdQU0JtZFc1
amRHbHZiaWhsZG1WdWRDa2dleUFnRFFvZ0lDQWdjMlZzWmk1d2IzTjBUV1Z6YzJGblpTZ25iV0Zy
WlNCcGRDQnpieWNwT3lBZ0RRcDlPdz09IjsKKyAgICB2YXIgd29ya2VyX2RhdGEgPSBuZXcgV29y
a2VyKGRhdGFfdXJsKTsKKyAgICB3b3JrZXJfZGF0YS5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdl
JywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIG9rKHRydWUsICJhIHdvcmtlciBpbiBhIHNhbmRi
b3hlZCBkb2N1bWVudCBzaG91bGQgYmUgYWJsZSB0byBiZSBsb2FkZWQgZnJvbSBhIGRhdGE6IFVS
SSIpOworICAgIH0sIGZhbHNlKTsKKworICAgIHdvcmtlcl9kYXRhLnBvc3RNZXNzYWdlKCJlbmdh
Z2UhIik7CisKKyAgICAvLyB0ZXN0IGEgYmxvYiBVUkkgd2UgY3JlYXRlZCAod2lsbCBoYXZlIHRo
ZSBzYW1lIG51bGwgcHJpbmNpcGFsCisgICAgLy8gYXMgdXMKKyAgICB2YXIgYiA9IG5ldyBCbG9i
KFsib25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsgc2VsZi5wb3N0TWVzc2FnZSgnbWFrZSBp
dCBzbycpO307Il0pOworCisgICAgdmFyIGJsb2JVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGIp
OworCisgICAgdmFyIHdvcmtlcl9ibG9iID0gbmV3IFdvcmtlcihibG9iVVJMKTsKKworICAgIHdv
cmtlcl9ibG9iLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihldmVudCkgewor
ICAgICAgb2sodHJ1ZSwgImEgd29ya2VyIGluIGEgc2FuZGJveGVkIGRvY3VtZW50IHNob3VsZCBi
ZSBhYmxlIHRvIGJlIGxvYWRlZCBmcm9tIGEgYmxvYiBVUkkgIiArCisgICAgICAgICAiY3JlYXRl
ZCBieSB0aGF0IHNhbmRib3hlZCBkb2N1bWVudCIpOworICAgIH0sIGZhbHNlKTsKKworICAgIHdv
cmtlcl9ibG9iLnBvc3RNZXNzYWdlKCJlbmdhZ2UhIik7CisKKyAgICAvLyB0ZXN0IGxvYWRpbmcg
d2l0aCByZWxhdGl2ZSB1cmwgLSB0aGlzIHNob3VsZCBmYWlsIHNpbmNlIHdlIGFyZQorICAgIC8v
IHNhbmRib3hlZCBhbmQgaGF2ZSBhIG51bGwgcHJpbmNpcGFsCisgICAgdmFyIHdvcmtlcl9qcyA9
IG5ldyBXb3JrZXIoJ2ZpbGVfaWZyYW1lX3NhbmRib3hfd29ya2VyLmpzJyk7CisKKyAgICB3b3Jr
ZXJfanMub25lcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICBvayh0cnVlLCAiYSB3b3Jr
ZXIgaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGxvYWQgZnJv
bSBhIHJlbGF0aXZlIFVSSSIpOworICAgIH0KKworICAgIHdvcmtlcl9qcy5hZGRFdmVudExpc3Rl
bmVyKCdtZXNzYWdlJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIG9rKGZhbHNlLCAiYSB3b3Jr
ZXIgaW4gYSBzYW5kYm94ZWQgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGxvYWQgZnJv
bSBhIHJlbGF0aXZlIFVSSSIpOworICAgIH0sIGZhbHNlKTsKKworICAgIHdvcmtlcl9qcy5wb3N0
TWVzc2FnZSgnZW5nYWdlJyk7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSdkb1N0dWZm
KCk7Jz4KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMiCis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfd29ya2VyLmpzIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X3dvcmtlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxs
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF93b3Jr
ZXIuanMKQEAgLTAsMCArMSwzIEBACitzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7
DQorICBzZWxmLnBvc3RNZXNzYWdlKCdtYWtlIGl0IHNvJyk7DQorfTsKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3Rf
aWZyYW1lX3NhbmRib3hfd29ya2Vycy5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90
ZXN0X2lmcmFtZV9zYW5kYm94X3dvcmtlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0g
L2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2Fu
ZGJveF93b3JrZXJzLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzwhLS0KK2h0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM0
MTYwNAorSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzIC0gdGVz
dHMgZm9yIHdvcmtlcnMKKy0tPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8c2NyaXB0IHR5cGU9ImFwcGxp
Y2F0aW9uL2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+
PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9T
aW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0PgorICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgor
PC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KKy8qKiBUZXN0
IGZvciBCdWcgMzQxNjA0IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJ
RlJBTUVzIC0gdGVzdCBmb3Igd29ya2VycyAqKi8KKworU2ltcGxlVGVzdC53YWl0Rm9yRXhwbGlj
aXRGaW5pc2goKTsKKworLy8gYSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRoYXQgaXMgdXNlZCBieSBz
YW5kYm94ZWQgaWZyYW1lcyB3aXRob3V0CisvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIHRvIGNvbW11
bmljYXRlIHBhc3MvZmFpbCBiYWNrIHRvIHRoaXMgbWFpbiBwYWdlLgorLy8gaXQgZXhwZWN0cyB0
byBiZSBjYWxsZWQgd2l0aCBhbiBvYmplY3QgbGlrZSB7b2s6IHRydWUvZmFsc2UsIGRlc2M6Cisv
LyA8ZGVzY3JpcHRpb24gb2YgdGhlIHRlc3Q+IHdoaWNoIGl0IHRoZW4gZm9yd2FyZHMgdG8gb2so
KQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFs
c2UpOworCitmdW5jdGlvbiByZWNlaXZlTWVzc2FnZShldmVudCkKK3sKKyAgb2tfd3JhcHBlcihl
dmVudC5kYXRhLm9rLCBldmVudC5kYXRhLmRlc2MpOworfQorCit2YXIgY29tcGxldGVkVGVzdHMg
PSAwOwordmFyIHBhc3NlZFRlc3RzID0gMDsKKworZnVuY3Rpb24gb2tfd3JhcHBlcihyZXN1bHQs
IGRlc2MpIHsKKyAgb2socmVzdWx0LCBkZXNjKTsKKworICBjb21wbGV0ZWRUZXN0cysrOworCisg
IGlmIChyZXN1bHQpIHsKKyAgICBwYXNzZWRUZXN0cysrOworICB9CisKKyAgaWYgKGNvbXBsZXRl
ZFRlc3RzID09IDMpIHsKKyAgICBpcyhwYXNzZWRUZXN0cywgMywgIlRoZXJlIGFyZSAzIHdvcmtl
ciB0ZXN0cyB0aGF0IHNob3VsZCBwYXNzIik7CisgICAgU2ltcGxlVGVzdC5maW5pc2goKTsKKyAg
fQorfQorCitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDEp
IHRlc3QgdGhhdCBhIHdvcmtlciBpbiBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAnYWxsb3ctc2Ny
aXB0cycgY2FuIGJlIGxvYWRlZAorICAvLyBmcm9tIGEgZGF0YTogVVJJCisgIC8vIChkb25lIGJ5
IGZpbGVfaWZyYW1lX3NhbmRib3hfZ19pZjEuaHRtbCkKKworICAvLyBwYXNzZXMgaWYgZ29vZAor
ICAvLyAyKSB0ZXN0IHRoYXQgYSB3b3JrZXIgaW4gYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGggJ2Fs
bG93LXNjcmlwdHMnIGNhbiBiZSBsb2FkZWQKKyAgLy8gZnJvbSBhIGJsb2IgVVJJIGNyZWF0ZWQg
YnkgdGhlIHNhbmRib3hlZCBkb2N1bWVudCBpdHNlbGYKKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJh
bWVfc2FuZGJveF9nX2lmMS5odG1sKQorCisgIC8vIHBhc3NlcyBpZiBnb29kCisgIC8vIDMpIHRl
c3QgdGhhdCBhIHdvcmtlciBpbiBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAnYWxsb3ctc2NyaXB0
cycgd2l0aG91dAorICAvLyAnYWxsb3ctc2FtZS1vcmlnaW4nIGNhbm5vdCBsb2FkIGEgc2NyaXB0
IHZpYSBhIHJlbGF0aXZlIFVSSQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2df
aWYxLmh0bWwpCit9CisKK2FkZExvYWRFdmVudChkb1Rlc3QpOworPC9zY3JpcHQ+Cis8Ym9keT4K
KzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwvYT4gLSBJbXBsZW1lbnQg
SFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMKKzxwIGlkPSJkaXNwbGF5Ij48L3A+
Cis8ZGl2IGlkPSJjb250ZW50Ij4KKzxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9
ImlmXzEiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9nX2lmMS5odG1sIiBoZWlnaHQ9IjEwIiB3
aWR0aD0iMTAiPjwvaWZyYW1lPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="540024"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650379</attachid>
            <date>2012-08-08 17:17:19 -0700</date>
            <delta_ts>2012-08-08 17:17:19 -0700</delta_ts>
            <desc>iframe sandbox tests - same origin v5</desc>
            <filename>iframe_sandbox_tests_same_origin</filename>
            <type>text/plain</type>
            <size>10427</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgZWI4M2VlNDJkNmEwZTFkYWMzNGRhM2VjODA1
Mzk4MzE0MTA0ZjY0NwojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIHRlc3RzIGZvciBpZnJhbWUgc2FuZGJveCAtIHNhbWUgb3JpZ2luIHI9anN0Cgpk
aWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbiBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4KLS0tIGEvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9NYWtlZmlsZS5pbgorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2Vm
aWxlLmluCkBAIC0yNjAsMTYgKzI2MCwyMCBAQCBNT0NISVRFU1RfRklMRVMgPSBcCiAJCXRlc3Rf
YnVnNjUxOTU2Lmh0bWwgXAogCQl0ZXN0X2J1ZzY5NDUwMy5odG1sIFwKIAkJdGVzdF9vYmplY3Rf
cGx1Z2luX25hdi5odG1sIFwKIAkJdGVzdF9idWc3NDIwMzAuaHRtbCBcCiAJCXRlc3RfYnVnNzQy
NTQ5Lmh0bWwgXAogCQl0ZXN0X2J1Zzc0NTY4NS5odG1sIFwKIAkJdGVzdF9pbnB1dF9maWxlX3Bp
Y2tlci5odG1sIFwKIAkJdGVzdF9idWc3NjM2MjYuaHRtbCBcCisJCXRlc3RfaWZyYW1lX3NhbmRi
b3hfc2FtZV9vcmlnaW4uaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjEuaHRtbCBc
CisJCWZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjIuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfYl9pZjMuaHRtbCBcCiAJCSQoTlVMTCkKIAogTU9DSElURVNUX0JST1dTRVJfRklMRVMgPSBc
CiAJCWJyb3dzZXJfYnVnNjQ5Nzc4LmpzIFwKIAkJZmlsZV9idWc2NDk3NzguaHRtbCBcCiAJCWZp
bGVfYnVnNjQ5Nzc4Lmh0bWxeaGVhZGVyc14gXAogCQkkKE5VTEwpCiAKZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1sIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2JfaWYxLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjEuaHRtbApAQCAtMCwwICsxLDExIEBA
Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04
Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0
eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNz
cyIvPgorPC9oZWFkPgorPGJvZHk+CisgIEkgYW0gc2FuZGJveGVkIHdpdGhvdXQgYW55IHBlcm1p
c3Npb25zCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjIuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lm
cmFtZV9zYW5kYm94X2JfaWYyLmh0bWwKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0
IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0
ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKzwvaGVhZD4KKzxz
Y3JpcHQ+CisgIGZ1bmN0aW9uIG9rKGNvbmRpdGlvbiwgbXNnKSB7CisgICAgd2luZG93LnBhcmVu
dC5va193cmFwcGVyKGNvbmRpdGlvbiwgbXNnKTsKKyAgfQorCisgIGZ1bmN0aW9uIHRlc3RYSFIo
KSB7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworCisgICAgeGhyLm9wZW4o
IkdFVCIsICJmaWxlX2lmcmFtZV9zYW5kYm94X2JfaWYxLmh0bWwiKTsKKworICAgIHhoci5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAob0V2ZW50KSB7CisgICAgICB2YXIgcmVzdWx0ID0g
ZmFsc2U7CisgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAgICBpZiAoeGhy
LnN0YXR1cyA9PSAyMDApIHsKKyAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIG9rKHJlc3VsdCwgIlhIUiBzaG91bGQgd29yayBub3JtYWxseSBpbiBhbiBpZnJhbWUg
c2FuZGJveGVkIHdpdGggJ2FsbG93LXNhbWUtb3JpZ2luJyIpOworICAgICAgfQorICAgIH0KKwor
ICAgIHhoci5zZW5kKG51bGwpOworICB9CisKKyAgZnVuY3Rpb24gZG9TdHVmZigpIHsKKyAgICBv
ayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zYW1lLW9yaWdpbicgc2hv
dWxkIGJlIGFibGUgdG8gYWNjZXNzIHRoZWlyIHBhcmVudCIpOworCisgICAgLy8gc2hvdWxkIGJl
IGFibGUgdG8gYWNjZXNzIGRvY3VtZW50LmNvb2tpZSBzaW5jZSB3ZSBoYXZlICdhbGxvdy1zYW1l
LW9yaWdpbicKKyAgICBvayhkb2N1bWVudC5jb29raWUgPT0gIiIsICJhIGRvY3VtZW50IHNhbmRi
b3hlZCB3aXRoIGFsbG93LXNhbWUtb3JpZ2luIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyBkb2N1
bWVudC5jb29raWUiKTsKKworICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyBsb2NhbFN0
b3JhZ2Ugc2luY2Ugd2UgaGF2ZSAnYWxsb3ctc2FtZS1vcmlnaW4nCisgICAgb2sod2luZG93Lmxv
Y2FsU3RvcmFnZSwgImEgZG9jdW1lbnQgc2FuZGJveGVkIHdpdGggYWxsb3ctc2FtZS1vcmlnaW4g
c2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIGxvY2FsU3RvcmFnZSIpOworCisgICAgLy8gc2hvdWxk
IGJlIGFibGUgdG8gYWNjZXNzIHNlc3Npb25TdG9yYWdlIHNpbmNlIHdlIGhhdmUgJ2FsbG93LXNh
bWUtb3JpZ2luJworICAgIG9rKHdpbmRvdy5zZXNzaW9uU3RvcmFnZSwgImEgZG9jdW1lbnQgc2Fu
ZGJveGVkIHdpdGggYWxsb3ctc2FtZS1vcmlnaW4gc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIHNl
c3Npb25TdG9yYWdlIik7CisKKyAgICB0ZXN0WEhSKCk7CisgIH0KKzwvc2NyaXB0PgorPGJvZHkg
b25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIHNhbmRib3hlZCBidXQgd2l0aCAiYWxsb3ctc2Ft
ZS1vcmlnaW4iIGFuZCAiYWxsb3ctc2NyaXB0cyIKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMy5o
dG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2JfaWYz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfYl9pZjMuaHRtbApAQCAtMCwwICsx
LDY1IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90
ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdD4KKyAgZnVuY3Rpb24gb2socmVzdWx0LCBtZXNz
YWdlKSB7CisgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHJlc3VsdCwgZGVzYzog
bWVzc2FnZX0sICIqIik7CisgIH0KKworICBmdW5jdGlvbiB0ZXN0WEhSKCkgeworICB2YXIgeGhy
ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAgeGhyLm9wZW4oIkdFVCIsICJmaWxlX2lmcmFt
ZV9zYW5kYm94X2lmMS5odG1sIik7CisKKyAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0
aW9uIChvRXZlbnQpIHsKKyAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CisgICAgaWYgKHhoci5yZWFk
eVN0YXRlID09IDQpIHsKKyAgICAgIGlmICh4aHIuc3RhdHVzID09IDApIHsKKyAgICAgICAgcmVz
dWx0ID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIG9rKHJlc3VsdCwgIlhIUiBzaG91bGQgYmUgYmxv
Y2tlZCBpbiBhbiBpZnJhbWUgc2FuZGJveGVkIFdJVEhPVVQgJ2FsbG93LXNhbWUtb3JpZ2luJyIp
OworICAgIH0KKyAgfQorCisgIHhoci5zZW5kKG51bGwpOworfQorCisgIGZ1bmN0aW9uIGRvU3R1
ZmYoKSB7CisgICAgdHJ5IHsKKyAgICAgIHdpbmRvdy5wYXJlbnQub2soZmFsc2UsICJkb2N1bWVu
dHMgc2FuZGJveGVkIHdpdGhvdXQgJ2FsbG93LXNhbWUtb3JpZ2luJyBzaG91bGQgTk9UIGJlIGFi
bGUgdG8gYWNjZXNzIHRoZWlyIHBhcmVudCIpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAg
ICBvayh0cnVlLCAiZG9jdW1lbnRzIHNhbmRib3hlZCB3aXRob3V0ICdhbGxvdy1zYW1lLW9yaWdp
bicgc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyB0aGVpciBwYXJlbnQiKTsKKyAgICB9CisK
KyAgICAvLyBzaG91bGQgTk9UIGJlIGFibGUgdG8gYWNjZXNzIGRvY3VtZW50LmNvb2tpZQorICAg
IHRyeSB7CisgICAgICB2YXIgZm9vID0gZG9jdW1lbnQuY29va2llOworICAgIH0gY2F0Y2goZXJy
b3IpIHsKKyAgICAgIG9rKHRydWUsICJhIGRvY3VtZW50IHNhbmRib3hlZCB3aXRob3V0IGFsbG93
LXNhbWUtb3JpZ2luIHNob3VsZCBOT1QgYmUgYWJsZSB0byBhY2Nlc3MgZG9jdW1lbnQuY29va2ll
Iik7CisgICAgfQorCisgICAgLy8gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBsb2NhbFN0
b3JhZ2UKKyAgICB0cnkgeworICAgICAgdmFyIGZvbyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7Cisg
ICAgfSBjYXRjaChlcnJvcikgeworICAgICAgb2sodHJ1ZSwgImEgZG9jdW1lbnQgc2FuZGJveGVk
IHdpdGhvdXQgYWxsb3ctc2FtZS1vcmlnaW4gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBs
b2NhbFN0b3JhZ2UiKTsKKyAgICB9CisKKyAgICAvLyBzaG91bGQgTk9UIGJlIGFibGUgdG8gYWNj
ZXNzIHNlc3Npb25TdG9yYWdlCisgICAgdHJ5IHsKKyAgICAgIHZhciBmb28gPSB3aW5kb3cuc2Vz
c2lvblN0b3JhZ2U7CisgICAgfSBjYXRjaChlcnJvcikgeworICAgICAgb2sodHJ1ZSwgImEgZG9j
dW1lbnQgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2FtZS1vcmlnaW4gc2hvdWxkIE5PVCBiZSBh
YmxlIHRvIGFjY2VzcyBzZXNzaW9uU3RvcmFnZSIpOworICAgIH0KKworICB0ZXN0WEhSKCk7Cisg
IH0KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPgorICBJIGFtIHNhbmRib3hl
ZCBidXQgd2l0aCAiYWxsb3ctc2NyaXB0cyIKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9zYW1lX29yaWdp
bi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X3Nh
bWVfb3JpZ2luLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfc2FtZV9vcmlnaW4u
aHRtbApAQCAtMCwwICsxLDEwOCBAQAorXDwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzwhLS0N
CitodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQNCitJ
bXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMgLSBzYW1lIG9yaWdp
biB0ZXN0cw0KKy0tPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRp
dGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwv
c2NyaXB0Pg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i
L3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJh
cHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCisvKiogVGVzdCBmb3IgQnVnIDM0MTYwNCAtIEltcGxl
bWVudCBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1FcyAqKi8NCisvKiogU2FtZSBP
cmlnaW4gVGVzdHMgKiovDQorDQorU2ltcGxlVGVzdC53YWl0Rm9yRXhwbGljaXRGaW5pc2goKTsN
CisgIA0KK3ZhciBjb21wbGV0ZWRUZXN0cyA9IDA7DQordmFyIHBhc3NlZFRlc3RzID0gMDsNCisN
CitmdW5jdGlvbiBva193cmFwcGVyKHJlc3VsdCwgZGVzYykgew0KKyAgb2socmVzdWx0LCBkZXNj
KTsNCisNCisgIGNvbXBsZXRlZFRlc3RzKys7DQorDQorICBpZiAocmVzdWx0KSB7DQorICAgIHBh
c3NlZFRlc3RzKys7DQorICB9DQorDQorICBpZiAoY29tcGxldGVkVGVzdHMgPT0gMTIpIHsNCisg
ICAgaXMocGFzc2VkVGVzdHMsIDEyLCAiVGhlcmUgYXJlIDEyIHNhbWUtb3JpZ2luIHRlc3RzIHRo
YXQgc2hvdWxkIHBhc3MiKTsNCisNCisgICAgU2ltcGxlVGVzdC5maW5pc2goKTsNCisgIH0NCit9
DQorDQorZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpDQorew0KKyAgb2tfd3JhcHBlcihl
dmVudC5kYXRhLm9rLCBldmVudC5kYXRhLmRlc2MpOw0KK30NCisNCisvLyBhIHBvc3RNZXNzYWdl
IGhhbmRsZXIgdGhhdCBpcyB1c2VkIGJ5IHNhbmRib3hlZCBpZnJhbWVzIHdpdGhvdXQNCisvLyAn
YWxsb3ctc2FtZS1vcmlnaW4nIHRvIGNvbW11bmljYXRlIHBhc3MvZmFpbCBiYWNrIHRvIHRoaXMg
bWFpbiBwYWdlLg0KKy8vIGl0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0IGxp
a2Uge29rOiB0cnVlL2ZhbHNlLCBkZXNjOg0KKy8vIDxkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdD4g
d2hpY2ggaXQgdGhlbiBmb3J3YXJkcyB0byBvaygpDQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
Im1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOw0KKw0KK2Z1bmN0aW9uIGRvVGVzdCgp
IHsNCisgIC8vIDEpIHRlc3QgdGhhdCB3ZSBjYW4ndCBhY2Nlc3MgYW4gaWZyYW1lIHNhbmRib3hl
ZCB3aXRob3V0ICJhbGxvdy1zYW1lLW9yaWdpbiINCisgIHZhciBpZl8xID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImlmXzEiKTsNCisgIHRyeSB7DQorICAgIHZhciBiID0gaWZfMS5jb250ZW50
RG9jdW1lbnQuYm9keTsNCisgICAgb2tfd3JhcHBlcihmYWxzZSwgImFjY2Vzc2luZyBib2R5IG9m
IGEgc2FuZGJveGVkIGRvY3VtZW50IHNob3VsZCBub3QgYmUgYWxsb3dlZCIpOw0KKyAgfSBjYXRj
aCAoZXJyKXsNCisgICAgb2tfd3JhcHBlcih0cnVlLCAiYWNjZXNzaW5nIGJvZHkgb2YgYSBzYW5k
Ym94ZWQgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIik7DQorICB9DQorDQorICAvLyAy
KSB0ZXN0IHRoYXQgd2UgY2FuIGFjY2VzcyBhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGggImFsbG93
LXNhbWUtb3JpZ2luIg0KKyAgdmFyIGlmXzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWZf
MiIpOw0KKw0KKyAgdHJ5IHsNCisgICAgdmFyIGIgPSBpZl8yLmNvbnRlbnREb2N1bWVudC5ib2R5
Ow0KKyAgICBva193cmFwcGVyKHRydWUsICJhY2Nlc3NpbmcgYm9keSBvZiBhIHNhbmRib3hlZCBk
b2N1bWVudCB3aXRoIGFsbG93LXNhbWUtb3JpZ2luIHNob3VsZCBiZSBhbGxvd2VkIik7DQorICB9
IGNhdGNoIChlcnIpIHsNCisgICAgb2tfd3JhcHBlcihmYWxzZSwgImFjY2Vzc2luZyBib2R5IG9m
IGEgc2FuZGJveGVkIGRvY3VtZW50IHdpdGggYWxsb3ctc2FtZS1vcmlnaW4gc2hvdWxkIGJlIGFs
bG93ZWQiKTsNCisgIH0NCisNCisgIC8vIDMpIHRlc3QgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUg
d2l0aG91dCAnYWxsb3ctc2FtZS1vcmlnaW4nIGNhbm5vdCBhY2Nlc3MgaXRzIHBhcmVudA0KKyAg
Ly8gdGhpcyBpcyBkb25lIGJ5IGZpbGVfaWZyYW1lX2JfaWYzLmh0bWwgd2hpY2ggaGFzICdhbGxv
dy1zY3JpcHRzJyBidXQgbm90ICdhbGxvdy1zYW1lLW9yaWdpbicNCisNCisgIC8vIDQpIHRlc3Qg
dGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAnYWxsb3ctc2FtZS1vcmlnaW4nIGNhbiBhY2Nl
c3MgaXRzIHBhcmVudA0KKyAgLy8gdGhpcyBpcyBkb25lIGJ5IGZpbGVfaWZyYW1lX2JfaWYyLmh0
bWwgd2hpY2ggaGFzICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kICdhbGxvdy1zY3JpcHRzJw0KKw0K
KyAgLy8gNSkgY2hlY2sgdGhhdCBhIHNhbmRib3hlZCBpZnJhbWUgd2l0aCAiYWxsb3ctc2FtZS1v
cmlnaW4iIGNhbiBhY2Nlc3MgZG9jdW1lbnQuY29va2llDQorICAvLyB0aGlzIGlzIGRvbmUgYnkg
ZmlsZV9pZnJhbWVfYl9pZjIuaHRtbCB3aGljaCBoYXMgJ2FsbG93LXNhbWUtb3JpZ2luJyBhbmQg
J2FsbG93LXNjcmlwdHMnDQorDQorICAvLyA2KSBjaGVjayB0aGF0IGEgc2FuZGJveGVkIGlmcmFt
ZSB3aXRoICJhbGxvdy1zYW1lLW9yaWdpbiIgY2FuIGFjY2VzcyB3aW5kb3cubG9jYWxTdG9yYWdl
DQorICAvLyB0aGlzIGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjIuaHRtbCB3aGljaCBoYXMg
J2FsbG93LXNhbWUtb3JpZ2luJyBhbmQgJ2FsbG93LXNjcmlwdHMnDQorDQorICAvLyA3KSBjaGVj
ayB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSB3aXRoICJhbGxvdy1zYW1lLW9yaWdpbiIgY2FuIGFj
Y2VzcyB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UNCisgIC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lm
cmFtZV9iX2lmMi5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2FtZS1vcmlnaW4nIGFuZCAnYWxsb3ct
c2NyaXB0cycNCisNCisgIC8vIDgpIGNoZWNrIHRoYXQgYSBzYW5kYm94ZWQgaWZyYW1lIFdJVEhP
VVQgImFsbG93LXNhbWUtb3JpZ2luIiBjYW4gTk9UIGFjY2VzcyBkb2N1bWVudC5jb29raWUNCisg
IC8vIHRoaXMgaXMgZG9uZSBieSBmaWxlX2lmcmFtZV9iX2lmMy5odG1sIHdoaWNoIGhhcyAnYWxs
b3ctc2NyaXB0cycgYnV0IG5vdCAnYWxsb3ctc2FtZS1vcmlnaW4nDQorDQorICAvLyA5KSBjaGVj
ayB0aGF0IGEgc2FuZGJveGVkIGlmcmFtZSBXSVRIT1VUICJhbGxvdy1zYW1lLW9yaWdpbiIgY2Fu
IE5PVCBhY2Nlc3Mgd2luZG93LmxvY2FsU3RvcmFnZQ0KKyAgLy8gdGhpcyBpcyBkb25lIGJ5IGZp
bGVfaWZyYW1lX2JfaWYzLmh0bWwgd2hpY2ggaGFzICdhbGxvdy1zY3JpcHRzJyBidXQgbm90ICdh
bGxvdy1zYW1lLW9yaWdpbicNCisNCisgIC8vIDEwKSBjaGVjayB0aGF0IGEgc2FuZGJveGVkIGlm
cmFtZSBXSVRIT1VUICJhbGxvdy1zYW1lLW9yaWdpbiIgY2FuIE5PVCBhY2Nlc3Mgd2luZG93LnNl
c3Npb25TdG9yYWdlDQorICAvLyB0aGlzIGlzIGRvbmUgYnkgZmlsZV9pZnJhbWVfYl9pZjMuaHRt
bCB3aGljaCBoYXMgJ2FsbG93LXNjcmlwdHMnIGJ1dCBub3QgJ2FsbG93LXNhbWUtb3JpZ2luJw0K
Kw0KKyAgLy8gMTEpIGNoZWNrIHRoYXQgWEhSIHdvcmtzIG5vcm1hbGx5IGluIGEgc2FuZGJveGVk
IGlmcmFtZSB3aXRoICJhbGxvdy1zYW1lLW9yaWdpbiIgYW5kICJhbGxvdy1zY3JpcHRzIg0KKyAg
Ly8gdGhpcyBpcyBkb25lIGJ5IGZpbGVfaWZyYW1lX2JfaWYyLmh0bWwgd2hpY2ggaGFzICdhbGxv
dy1zYW1lLW9yaWdpbicgYW5kICdhbGxvdy1zY3JpcHRzJw0KKw0KKyAgLy8gMTIpIGNoZWNrIHRo
YXQgWEhSIGlzIGJsb2NrZWQgaW4gYSBzYW5kYm94ZWQgaWZyYW1lIHdpdGggImFsbG93LXNjcmlw
dHMiIGJ1dCBXSVRIT1VUICJhbGxvdy1zYW1lLW9yaWdpbiINCisgIC8vIHRoaXMgaXMgZG9uZSBi
eSBmaWxlX2lmcmFtZV9iX2lmMy5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycgYnV0IG5v
dCAnYWxsb3ctc2FtZS1vcmlnaW4nDQorfQ0KK2FkZExvYWRFdmVudChkb1Rlc3QpOw0KKzwvc2Ny
aXB0Pg0KKzxib2R5Pg0KKzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2J1Z3ppbGxh
Lm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1vemlsbGEgQnVnIDM0MTYwNDwv
YT4gLSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElGUkFNRXMNCis8cCBp
ZD0iZGlzcGxheSI+PC9wPg0KKzxkaXYgaWQ9ImNvbnRlbnQiPg0KKzxpZnJhbWUgc2FuZGJveD0i
IiBpZD0iaWZfMSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2JfaWYxLmh0bWwiIGhlaWdodD0i
MTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9y
aWdpbiBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMiIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Jf
aWYyLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5k
Ym94PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMyIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2Jf
aWYzLmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPC9kaXY+DQo=
</data>
<flag name="review"
          id="540025"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650381</attachid>
            <date>2012-08-08 17:18:17 -0700</date>
            <delta_ts>2012-08-08 17:18:17 -0700</delta_ts>
            <desc>iframe sandbox tests - navigation v8</desc>
            <filename>iframe_sandbox_tests_navigation</filename>
            <type>text/plain</type>
            <size>31413</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgYjhmMGMwN2E2NmI1OWYxNDNlYzRkNzM0YWI5
YTJkZTQyNzAxZTQ3YgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIHRlc3RzIGZvciBpZnJhbWUgc2FuZGJveCAtIG5hdmlnYXRpb24gcj1qc3QKCmRp
ZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZp
bGUuaW4KQEAgLTI2NCwxNiArMjY0LDQxIEBAIE1PQ0hJVEVTVF9GSUxFUyA9IFwKIAkJdGVzdF9i
dWc3NDI1NDkuaHRtbCBcCiAJCXRlc3RfYnVnNzQ1Njg1Lmh0bWwgXAogCQl0ZXN0X2lucHV0X2Zp
bGVfcGlja2VyLmh0bWwgXAogCQl0ZXN0X2J1Zzc2MzYyNi5odG1sIFwKIAkJdGVzdF9pZnJhbWVf
c2FuZGJveF9zYW1lX29yaWdpbi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5o
dG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMi5odG1sIFwKIAkJZmlsZV9pZnJhbWVf
c2FuZGJveF9iX2lmMy5odG1sIFwKKwkJdGVzdF9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uLmh0
bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9z
YW5kYm94X2RfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWYzLmh0bWwgXAor
CQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY0Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94
X2RfaWY1Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwgXAorCQlmaWxl
X2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY4
Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY5Lmh0bWwgXAorCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWYxMC5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTEuaHRt
bCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEyLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9z
YW5kYm94X2RfaWYxMy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0
YXJ0Lmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sIFwK
KwkJZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCBcCisJCWZpbGVfaWZy
YW1lX3NhbmRib3hfZV9pZjEuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjIuaHRt
bCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjMuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3Nh
bmRib3hfZV9pZjQuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjUuaHRtbCBcCisJ
CWZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjYuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hf
dG9wX25hdmlnYXRpb25fcGFzcy5odG1sIFwKKwkJZmlsZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2
aWdhdGlvbl9mYWlsLmh0bWwgXAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X3BsdWdpbnMuaHRtbCBc
CiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjEuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRi
b3hfZl9pZjIuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbF5oZWFkZXJz
XiBcCiAJCXRlc3RfaWZyYW1lX3NhbmRib3hfd29ya2Vycy5odG1sIFwKIAkJZmlsZV9pZnJhbWVf
c2FuZGJveF9nX2lmMS5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF93b3JrZXIuanMgXAog
CQkkKE5VTEwpCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9kX2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Rf
aWYxLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFk
PgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0
PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i
L3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24g
ZG9UZXN0KCkgeworICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOwor
fQorPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9ImRvVGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQg
d2l0aCAnYWxsb3ctc2NyaXB0cycKKworICA8YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X25h
dmlnYXRpb25fcGFzcy5odG1sP2lmXzEiIHRhcmdldD0iX3NlbGYiIGlkPSdhbmNob3InPgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2RfaWYxMC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9m
aWxlX2lmcmFtZV9zYW5kYm94X2RfaWYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWYxMC5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+VGVzdCBmb3IgQnVn
IDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3Mi
IGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRpbHMuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KK2Z1
bmN0aW9uIGRvVGVzdCgpIHsKKyAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7dGVzdDonaWZf
MTAnfSwgIioiKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSdkb1Rlc3QoKSc+CisgIEkg
YW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9p
ZjExLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hf
ZF9pZjExLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjExLmh0bWwKQEAg
LTAsMCArMSwyNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBs
ZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
L3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2Ny
aXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgewor
ICAvLyB0aGlzIHNob3VsZCBmYWlsIHRoZSBmaXJzdCB0aW1lLCBidXQgd29yayB0aGUgc2Vjb25k
CisgIHRyeSB7CisgICAgd2luZG93LnBhcmVudC5va193cmFwcGVyKHRydWUsICJhIGRvY3VtZW50
IHRoYXQgd2FzIGxvYWRlZCwgbmF2aWdhdGVkIHRvIGFub3RoZXIgZG9jdW1lbnQsIGhhZCAnYWxs
b3ctc2FtZS1vcmlnaW4nIGFkZGVkIGFuZCB0aGVuIHdhcyIgKworICAgICAgIiBuYXZpZ2F0ZWQg
YmFjayBzaG91bGQgYmUgc2FtZS1vcmlnaW4gd2l0aCBpdHMgcGFyZW50Iik7CisgIH0gCisgIGNh
dGNoIChlKSB7CisgICAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2NsaWNrJ30sICdhbmNob3InKTsK
KyAgfQorfQorCis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0nZG9UZXN0KCknPgorICBJIGFtIHNh
bmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzJworICA8YSBocmVmPSdmaWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWYxMi5odG1sJyBpZD0nYW5jaG9yJz5DTElDSyBNRTwvYT4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmMTIuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9kX2lmMTIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTIu
aHRtbApAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cisg
IDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3Rp
dGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVz
dHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNh
dGlvbi9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgd2luZG93LnBhcmVudC5w
b3N0TWVzc2FnZSh7dGVzdDonaWZfMTEnfSwgIioiKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25s
b2FkPSdkb1Rlc3QoKSc+CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfZF9pZjEzLmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjEzLmh0bWwKQEAgLTAsMCArMSwzNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBC
dWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2Nz
cyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgor
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2Up
OworCitmdW5jdGlvbiByZWNlaXZlTWVzc2FnZShldmVudCkgeworICAvLyB0aGlzIG1lc3NhZ2Ug
aXMgcGFydCBvZiBpZl8xMSdzIHRlc3QKKyAgaWYgKGV2ZW50LmRhdGEudGVzdCA9PSAnaWZfMTEn
KSB7CisgICAgZG9JZjExVGVzdFBhcnQyKCk7CisgICAgcmV0dXJuOworICB9Cit9CisKK2Z1bmN0
aW9uIG9rX3dyYXBwZXIocmVzdWx0LCBtc2cpIHsKKyAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2Fn
ZSh7b2s6IHJlc3VsdCwgZGVzYzogbXNnfSwgIioiKTsKKyAgd2luZG93LmNsb3NlKCk7Cit9CisK
K2Z1bmN0aW9uIGRvSWYxMVRlc3RQYXJ0MigpIHsKKyAgdmFyIGlmXzExID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2lmXzExJyk7CisgIGlmXzExLnNhbmRib3ggPSAnYWxsb3ctc2NyaXB0cyBh
bGxvdy1zYW1lLW9yaWdpbic7CisgIGlmXzExLmNvbnRlbnRXaW5kb3cuaGlzdG9yeS5iYWNrKCk7
Cit9IAorPC9zY3JpcHQ+Cis8Ym9keT4KKyAgPGlmcmFtZSBzYW5kYm94PSdhbGxvdy1zY3JpcHRz
JyBpZD0iaWZfMTEiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTEuaHRtbCIgaGVpZ2h0
PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1s
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYyLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjIuaHRtbApAQCAtMCwwICsxLDI4
IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0
Zi04Ij4KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9
InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0
LmNzcyIvPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2lt
cGxlVGVzdC9FdmVudFV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0i
YXBwbGljYXRpb24vamF2YXNjcmlwdCI+CisvLyBuZWVkZWQgdG8gZm9yd2FyZCB0aGUgbWVzc2Fn
ZSB0byB0aGUgbWFpbiB0ZXN0IHBhZ2UKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdl
IiwgcmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTsKKworZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2UoZXZl
bnQpIHsgCisgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe29rOiBldmVudC5kYXRhLm9rLCBk
ZXNjOiBldmVudC5kYXRhLmRlc2N9LCAiKiIpOworfQorCitmdW5jdGlvbiBkb1Rlc3QoKSB7Cisg
IHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYW5jaG9yJyk7Cit9Cis8L3NjcmlwdD4K
Kzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1z
Y3JpcHRzJworCisgIDxpZnJhbWUgbmFtZT0iZm9vIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hf
bmF2aWdhdGlvbl9zdGFydC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPgor
CisgIDxhIGhyZWY9ImZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9wYXNzLmh0bWw/aWYy
IiB0YXJnZXQ9J2ZvbycgaWQ9J2FuY2hvcic+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjMuaHRt
bCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWYzLmh0bWwKQEAgLTAsMCArMSwx
MyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVz
dC5jc3MiLz4KKzwvaGVhZD4KKzxib2R5PgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1z
Y3JpcHRzJworCisgIDxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzQiIHNy
Yz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAi
PjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY0Lmh0bWwgYi9jb250ZW50L2h0bWwv
Y29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjQuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmNC5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBI
VE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8dGl0bGU+
VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlw
ZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+CisgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L0V2ZW50VXRp
bHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZh
c2NyaXB0Ij4KK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgc2VuZE1vdXNlRXZlbnQoe3R5cGU6J2Ns
aWNrJ30sICdhbmNob3InKTsKK30KKzwvc2NyaXB0PgorPGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+
CisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMnCisKKyAgPGEgaHJlZj0iZmls
ZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCIgdGFyZ2V0PSdfcGFyZW50JyBp
ZD0nYW5jaG9yJz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1sIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY1Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfZF9pZjUuaHRtbApAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHRpdGxl
PlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5
cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPgorICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0
aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2
YXNjcmlwdCI+CitmdW5jdGlvbiBkb1Rlc3QoKSB7CisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidj
bGljayd9LCAnYW5jaG9yJyk7Cit9Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCki
PgorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2lu
JworCisgIDxhIGhyZWY9ImZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwi
IHRhcmdldD0nc2libGluZycgaWQ9J2FuY2hvcic+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjYu
aHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
Ni5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwKQEAgLTAsMCAr
MSwxOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0
PSJ1dGYtOCI+CisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4KKyAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3Qv
dGVzdC5jc3MiLz4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3Rz
L1NpbXBsZVRlc3QvRXZlbnRVdGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHR5
cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZG9UZXN0KCkgeworICBzZW5k
TW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOworfQorPC9zY3JpcHQ+Cis8Ym9k
eSBvbmxvYWQ9ImRvVGVzdCgpIj4KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0
cycKKworICA8YSBocmVmPSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwiIHRhcmdldD0n
X3NlbGYnIGlkPSdhbmNob3InPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2RfaWY3Lmh0bWwgYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjcuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNy5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzwh
RE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
Pg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5j
c3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4N
CitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICB3aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIoZmFsc2Us
ICJhIHNhbmRib3hlZCBkb2N1bWVudCB3aGVuIG5hdmlnYXRlZCBzaG91bGQgc3RpbGwgTk9UIGJl
IHNhbWUtb3JpZ2luIHdpdGggaXRzIHBhcmVudCIpOw0KK30NCis8L3NjcmlwdD4NCis8Ym9keSBv
bmxvYWQ9ImRvVGVzdCgpIj4NCisgIEkgYW0gc2FuZGJveGVkIHdpdGggJ2FsbG93LXNjcmlwdHMn
DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjguaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWY4Lmh0bWwKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBFIEhUTUw+DQor
PGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVz
dCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9
InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4N
Cis8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KK2Z1bmN0aW9uIGRvVGVz
dCgpIHsNCisgIHdpbmRvdy5wYXJlbnQubW9kaWZ5X2lmXzgoKTsNCit9DQorPC9zY3JpcHQ+DQor
PGJvZHkgb25sb2FkPSJkb1Rlc3QoKSI+DQorICBJIGFtIHNhbmRib3hlZCB3aXRoICdhbGxvdy1z
Y3JpcHRzJyBhbmQgJ2FsbG93LXNhbWUtb3JpZ2luJyB0aGUgZmlyc3QgdGltZSBJIGFtIGxvYWRl
ZCwgYW5kIHdpdGggJ2FsbG93LXNjcmlwdHMnIHRoZSBzZWNvbmQgdGltZQ0KKzwvYm9keT4NCis8
L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2RfaWY5Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZjkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxs
CisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
OS5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFk
Pg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2
MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJl
Zj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdCB0eXBl
PSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCitmdW5jdGlvbiBkb1Rlc3QoKSB7DQorICB3aW5k
b3cucGFyZW50Lm1vZGlmeV9pZl85KCk7DQorfQ0KKzwvc2NyaXB0Pg0KKzxib2R5IG9ubG9hZD0i
ZG9UZXN0KCkiPg0KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0cycgYW5kICdh
bGxvdy1zYW1lLW9yaWdpbicgdGhlIGZpcnN0IHRpbWUgSSBhbSBsb2FkZWQsIGFuZCB3aXRoICdh
bGxvdy1zYW1lLW9yaWdpbicgdGhlIHNlY29uZCB0aW1lDQorPC9ib2R5Pg0KKzwvaHRtbD4NCisN
CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRi
b3hfZV9pZjEuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9lX2lmMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWYxLmh0bWwK
QEAgLTAsMCArMSwyNCBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8
bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0
bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVz
dHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKyAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9q
YXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVUZXN0L1NpbXBsZVRlc3QuanMiPjwvc2NyaXB0
Pg0KKzwvaGVhZD4NCis8Ym9keT4NCisgIDxzY3JpcHQ+DQorICAgIHdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJtZXNzYWdlIiwgcmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTsNCisNCisgICAgZnVuY3Rp
b24gcmVjZWl2ZU1lc3NhZ2UoZXZlbnQpDQorICAgIHsNCisgICAgICB3aW5kb3cucGFyZW50LnBv
c3RNZXNzYWdlKCJjbG9zZSIsICIqIik7DQorDQorICAgICAgU2ltcGxlVGVzdC5leGVjdXRlU29v
bihmdW5jdGlvbigpIHsNCisgICAgICAgIHdpbmRvdy5jbG9zZSgpOw0KKyAgICAgIH0pOyANCisg
ICAgfQ0KKyAgPC9zY3JpcHQ+DQorICA8aWZyYW1lIHNhbmRib3g9J2FsbG93LXNjcmlwdHMgYWxs
b3ctc2FtZS1vcmlnaW4nIGlkPSdpZl82JyBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjYu
aHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8L2JvZHk+DQorPC9odG1s
Pg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2Fu
ZGJveF9lX2lmMi5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9z
YW5kYm94X2VfaWYyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjIuaHRt
bApAQCAtMCwwICsxLDIyIEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisg
IDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90
aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90
ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9u
L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvU2ltcGxlVGVzdC5qcyI+PC9zY3Jp
cHQ+DQorPC9oZWFkPg0KKzxib2R5Pg0KKyAgPHNjcmlwdD4NCisgICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZlTWVzc2FnZSwgZmFsc2UpOw0KKw0KKyAgICBmdW5j
dGlvbiByZWNlaXZlTWVzc2FnZShldmVudCkNCisgICAgew0KKyAgICAgIFNpbXBsZVRlc3QuZXhl
Y3V0ZVNvb24oZnVuY3Rpb24oKSB7DQorICAgICAgICB3aW5kb3cuY2xvc2UoKTsNCisgICAgICB9
KTsNCisgICAgfQ0KKyAgPC9zY3JpcHQ+DQorICA8aWZyYW1lIHNhbmRib3g9J2FsbG93LXNjcmlw
dHMgYWxsb3ctdG9wLW5hdmlnYXRpb24gYWxsb3ctc2FtZS1vcmlnaW4nIGlkPSdpZl8xJyBzcmM9
ImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjEuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48
L2lmcmFtZT4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMy5odG1sIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2Zp
bGVfaWZyYW1lX3NhbmRib3hfZV9pZjMuaHRtbApAQCAtMCwwICsxLDExIEBACis8IURPQ1RZUEUg
SFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0
aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQor
PC9oZWFkPg0KKzxib2R5Pg0KKyAgPGlmcmFtZSBzYW5kYm94PSdhbGxvdy1zY3JpcHRzIGFsbG93
LXRvcC1uYXZpZ2F0aW9uJyBpZD0naWZfNScgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY1
Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPC9ib2R5Pg0KKzwvaHRt
bD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3Nh
bmRib3hfZV9pZjQuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVf
c2FuZGJveF9lX2lmNC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWY0Lmh0
bWwKQEAgLTAsMCArMSwxMSBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQor
ICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwv
dGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIv
dGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8Ym9keT4NCisgIDxpZnJh
bWUgc2FuZGJveD0nYWxsb3ctc2NyaXB0cyBhbGxvdy10b3AtbmF2aWdhdGlvbicgaWQ9J2lmXzMn
IHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0i
MTAiPjwvaWZyYW1lPg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWY1Lmh0bWwgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjUuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNS5odG1sCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9D
VFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0K
KyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5jc3Mi
Lz4NCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii90ZXN0cy9TaW1wbGVU
ZXN0L0V2ZW50VXRpbHMuanMiPjwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9ImFw
cGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KK2Z1bmN0aW9uIGRvVGVzdCgpIHsNCisgIHNlbmRNb3Vz
ZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYW5jaG9yJyk7DQorfQ0KKzwvc2NyaXB0Pg0KKzxib2R5
IG9ubG9hZD0iZG9UZXN0KCkiPg0KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctc2NyaXB0
cyBhbmQgYWxsb3ctdG9wLW5hdmlnYXRpb24nDQorDQorICA8YSBocmVmPSJmaWxlX2lmcmFtZV9z
YW5kYm94X3RvcF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbCIgdGFyZ2V0PSdfdG9wJyBpZD0nYW5jaG9y
Jz4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNi5odG1sIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2VfaWY2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZV9pZjYuaHRtbApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgSFRNTD4N
Cis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5U
ZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlw
ZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9FdmVudFV0
aWxzLmpzIj48L3NjcmlwdD4NCisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlw
dCIgc3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4NCis8L2hl
YWQ+DQorPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4NCitmdW5jdGlvbiBk
b1Rlc3QoKSB7DQorICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2FuY2hvcicpOw0K
Kw0KKyAgIFNpbXBsZVRlc3QuZXhlY3V0ZVNvb24oZnVuY3Rpb24oKSB7DQorICAgICB3aW5kb3cu
cGFyZW50LnBvc3RNZXNzYWdlKCJjbG9zZSIsICIqIik7DQorICAgfSk7DQorfQ0KKzwvc2NyaXB0
Pg0KKzxib2R5IG9ubG9hZD0iZG9UZXN0KCkiPg0KKyAgSSBhbSBzYW5kYm94ZWQgd2l0aCAnYWxs
b3ctc2NyaXB0cycNCisNCisgIDxhIGhyZWY9ImZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmln
YXRpb25fZmFpbC5odG1sIiB0YXJnZXQ9J190b3AnIGlkPSdhbmNob3InPg0KKzwvYm9keT4NCis8
L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X25hdmlnYXRpb25fZmFpbC5odG1sIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fZmFpbC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fZmFpbC5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzwh
RE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgi
Pg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBsZVRlc3QvdGVzdC5j
c3MiLz4NCis8L2hlYWQ+DQorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPg0KK0ZBSUwNCis8L2Jv
ZHk+DQorPHNjcmlwdD4NCisgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7DQorICAgIHdpbmRvdy5wYXJl
bnQucG9zdE1lc3NhZ2Uoe29rOiBmYWxzZSwgZGVzYzogInRoaXMgbmF2aWdhdGlvbiBzaG91bGQg
Tk9UIGJlIGFsbG93ZWQgYnkgYSBzYW5kYm94ZWQgZG9jdW1lbnQifSwgIioiKTsNCisgIH0NCis8
L3NjcmlwdD4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sCkBAIC0wLDAg
KzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MPg0KKzxodG1sPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQ8L3RpdGxlPg0KKyAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3Rlc3RzL1NpbXBs
ZVRlc3QvdGVzdC5jc3MiLz4NCis8L2hlYWQ+DQorPHNjcmlwdD4NCitmdW5jdGlvbiBkb1N0dWZm
KCkgew0KKyAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHRydWUsIGRlc2M6ICJ0aGlz
IG5hdmlnYXRpb24gc2hvdWxkIGJlIGFsbG93ZWQgYnkgYSBzYW5kYm94ZWQgZG9jdW1lbnQifSwg
IioiKTsNCit9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25Mb2FkPSJkb1N0dWZmKCkiPg0KK1BBU1MN
Cis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9zdGFydC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fc3RhcnQuaHRtbApAQCAt
MCwwICsxLDExIEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4N
CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9T
aW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0KKzxib2R5Pg0KK0kgYW0ganVzdCBhIG5v
cm1hbCBIVE1MIGRvY3VtZW50LCBwcm9iYWJseSBjb250YWluZWQgaW4gYSBzYW5kYm94ZWQgaWZy
YW1lDQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfdG9wX25hdmlnYXRpb25fZmFpbC5odG1sIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3RvcF9uYXZpZ2F0aW9u
X2ZhaWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRl
bnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9m
YWlsLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhl
YWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0Pg0K
K2Z1bmN0aW9uIGRvU3R1ZmYoKSB7DQorCXdpbmRvdy5vcGVuZXIucG9zdE1lc3NhZ2Uoe29rOiBm
YWxzZSwgZGVzYzogICJ0b3AgbmF2aWdhdGlvbiBzaG91bGQgTk9UIGJlIGFsbG93ZWQgYnkgYSBk
b2N1bWVudCBzYW5kYm94ZWQgd2l0aG91dCAnYWxsb3ctdG9wLW5hdmlnYXRpb24nIn0sICIqIik7
DQorCXdpbmRvdy5jbG9zZSgpOw0KK30NCis8L3NjcmlwdD4NCis8Ym9keSBvbkxvYWQ9ImRvU3R1
ZmYoKSI+DQorRkFJTFwNCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF90b3BfbmF2aWdhdGlvbl9wYXNz
Lmh0bWwgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfdG9w
X25hdmlnYXRpb25fcGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwK
KysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X3RvcF9u
YXZpZ2F0aW9uX3Bhc3MuaHRtbApAQCAtMCwwICsxLDE3IEBACis8IURPQ1RZUEUgSFRNTD4NCis8
aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgIDx0aXRsZT5UZXN0
IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0i
dGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+DQorPC9oZWFkPg0K
KzxzY3JpcHQ+DQorZnVuY3Rpb24gZG9TdHVmZigpIHsNCisJd2luZG93Lm9wZW5lci5wb3N0TWVz
c2FnZSh7b2s6IHRydWUsIGRlc2M6ICAidG9wIG5hdmlnYXRpb24gc2hvdWxkIGJlIGFsbG93ZWQg
YnkgYSBkb2N1bWVudCBzYW5kYm94ZWQgd2l0aCAnYWxsb3ctdG9wLW5hdmlnYXRpb24nIn0sICIq
Iik7DQorCXdpbmRvdy5jbG9zZSgpOw0KK30NCis8L3NjcmlwdD4NCis8Ym9keSBvbkxvYWQ9ImRv
U3R1ZmYoKSI+DQorUEFTUw0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVu
dC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb24uaHRtbCBi
L2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9u
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbi5odG1sCkBAIC0w
LDAgKzEsMjI5IEBACis8IURPQ1RZUEUgSFRNTD4NCis8aHRtbD4NCis8IS0tDQoraHR0cHM6Ly9i
dWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjA0DQ0KK0ltcGxlbWVudCBI
VE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1Fcw0KKy0tPg0KKzxoZWFkPg0KKyAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQgLSBuYXZp
Z2F0aW9uPC90aXRsZT4NCisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIg
c3JjPSIvdGVzdHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4NCisJPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Rlc3RzL1NpbXBsZVRlc3QvRXZlbnRVdGls
cy5qcyI+PC9zY3JpcHQ+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3Nz
IiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8c2NyaXB0
IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiPg0KKy8qKiBUZXN0IGZvciBCdWcgMzQxNjA0
IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0cmlidXRlIGZvciBJRlJBTUVzICoqLw0KKy8q
KiBOYXZpZ2F0aW9uIHRlc3RzICoqLw0KKw0KK1NpbXBsZVRlc3Qud2FpdEZvckV4cGxpY2l0Rmlu
aXNoKCk7DQorLy8gYSBwb3N0TWVzc2FnZSBoYW5kbGVyIHRoYXQgaXMgdXNlZCBieSBzYW5kYm94
ZWQgaWZyYW1lcyB3aXRob3V0DQorLy8gJ2FsbG93LXNhbWUtb3JpZ2luJy9vdGhlciB3aW5kb3dz
IHRvIGNvbW11bmljYXRlIHBhc3MvZmFpbCBiYWNrIHRvIHRoaXMgbWFpbiBwYWdlLg0KKy8vIGl0
IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0IGxpa2Uge29rOiB0cnVlL2ZhbHNl
LCBkZXNjOg0KKy8vIDxkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdD4gd2hpY2ggaXQgdGhlbiBmb3J3
YXJkcyB0byBvaygpDQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCByZWNlaXZl
TWVzc2FnZSwgZmFsc2UpOw0KKw0KK3ZhciB0ZXN0UGFzc2VzUmVjZWl2ZWQgPSAwOw0KKw0KK2Z1
bmN0aW9uIHJlY2VpdmVNZXNzYWdlKGV2ZW50KSB7DQorICAvLyB0aGlzIG1lc3NhZ2UgaXMgcGFy
dCBvZiBpZl8xMCdzIHRlc3QNCisgIGlmIChldmVudC5kYXRhLnRlc3QgPT0gJ2lmXzEwJykgew0K
KyAgICBkb0lmMTBUZXN0UGFydDIoKTsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgb2tfd3Jh
cHBlcihldmVudC5kYXRhLm9rLCBldmVudC5kYXRhLmRlc2MpOw0KK30NCisNCit2YXIgY29tcGxl
dGVkVGVzdHMgPSAwOw0KK3ZhciBwYXNzZWRUZXN0cyA9IDA7DQorDQorZnVuY3Rpb24gb2tfd3Jh
cHBlcihyZXN1bHQsIGRlc2MpIHsNCisgIG9rKHJlc3VsdCwgZGVzYyk7DQorDQorICBjb21wbGV0
ZWRUZXN0cysrOw0KKw0KKyAgaWYgKHJlc3VsdCkgew0KKyAgICBwYXNzZWRUZXN0cysrOw0KKyAg
fQ0KKw0KKyAgaWYgKGNvbXBsZXRlZFRlc3RzID09IDYpIHsNCisgICAgaXMocGFzc2VkVGVzdHMs
IDYsICJUaGVyZSBhcmUgNiBuYXZpZ2F0aW9uIHRlc3RzIHRoYXQgc2hvdWxkIHBhc3MiKTsNCisN
CisgICAgU2ltcGxlVGVzdC5maW5pc2goKTsNCisgIH0NCit9DQorDQorZnVuY3Rpb24gZG9UZXN0
KCkgew0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDEpIEEgc2FuZGJveGVkIGlmcmFtZSBp
cyBhbGxvd2VkIHRvIG5hdmlnYXRlIGl0c2VsZg0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVf
c2FuZGJveF9kX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycgYW5kIG5hdmlnYXRl
cyB0bw0KKyAgLy8gZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX3Bhc3MuaHRtbCkuDQor
DQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gMikgQSBzYW5kYm94ZWQgaWZyYW1lIGlzIGFs
bG93ZWQgdG8gbmF2aWdhdGUgaXRzIGNoaWxkcmVuLCBldmVuIGlmIHRoZXkgYXJlIHNhbmRib3hl
ZA0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMi5odG1sIHdoaWNoIGhh
cyAnYWxsb3ctc2NyaXB0cycsIGl0IG5hdmlnYXRlcyBhIGNoaWxkDQorICAvLyBpZnJhbWUgY29u
dGFpbmluZyBmaWxlX2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fc3RhcnQuaHRtbCB0byBmaWxl
X2lmcmFtZV9zYW5kYm94X25hdmlnYXRpb25fcGFzcy5odG1sKS4NCisNCisgIC8vIGZhaWxzIGlm
IGJhZA0KKyAgLy8gMykgQSBzYW5kYm94ZWQgaWZyYW1lIGlzIG5vdCBhbGxvd2VkIHRvIG5hdmln
YXRlIGl0cyBhbmNlc3Rvcg0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lm
NC5odG1sIGNvbnRhaW5lZCB3aXRoaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5odG1sLA0K
KyAgLy8gaXQgYXR0ZW1wdHMgdG8gbmF2aWdhdGUgZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMy5o
dG1sIHRvIGZpbGVfaWZyYW1lX3NhbmRib3hfbmF2aWdhdGlvbl9mYWlsLmh0bWwpLg0KKw0KKyAg
Ly8gZmFpbHMgaWYgYmFkDQorICAvLyA0KSBBIHNhbmRib3hlZCBpZnJhbWUgaXMgbm90IGFsbG93
ZWQgdG8gbmF2aWdhdGUgaXRzIHNpYmxpbmcNCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3Nh
bmRib3hfZF9pZjUuaHRtbCB3aGljaCBoYXMgJ2FsbG93IHNjcmlwdHMgYWxsb3ctc2FtZS1vcmln
aW4nDQorICAvLyBhbmQgYXR0ZW1wdHMgdG8gbmF2aWdhdGUgZmlsZV9pZnJhbWVfbmF2aWdhdGlv
bl9zdGFydC5odG1sIGNvbnRhaW5lZCBpbiBpZl9zaWJsaW5nIG9uIHRoaXMNCisgIC8vIHBhZ2Ug
dG8gZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZpZ2F0aW9uX2ZhaWwuaHRtbCkuDQorDQorICAvLyBm
YWlscyBpZiBiYWQNCisgIC8vIDUpIFdoZW4gYSBsaW5rIGlzIGNsaWNrZWQgaW4gYSBzYW5kYm94
ZWQgaWZyYW1lLCB0aGUgZG9jdW1lbnQgbmF2aWdhdGVkIHRvIGlzIHNhbmRib3hlZA0KKyAgLy8g
dGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGRvY3VtZW50IGFuZCBpcyBub3Qgc2FtZSBvcmlnaW4g
d2l0aCBwYXJlbnQgZG9jdW1lbnQNCisgIC8vIChkb25lIGJ5IGZpbGVfaWZyYW1lX3NhbmRib3hf
ZF9pZjYuaHRtbCB3aGljaCBzaW11bGF0ZXMgYSBsaW5rIGNsaWNrIGFuZCBuYXZpZ2F0ZXMNCisg
IC8vIHRvIGZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjcuaHRtbCB3aGljaCBhdHRlbXB0cyB0byBj
YWxsIGJhY2sgaW50byBpdHMgcGFyZW50KS4NCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8g
NikgQW4gaWZyYW1lIChpZl84KSBoYXMgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ct
c2NyaXB0cyIsIHRoZSBzYW5kYm94ZWQgZG9jdW1lbnQNCisgIC8vIChmaWxlX2lmcmFtZV9zYW5k
Ym94X2RfaWZfOC5odG1sKSB0aGF0IGl0IGNvbnRhaW5zIGFjY2Vzc2VzIGl0cyBwYXJlbnQgKHRo
aXMgZmlsZSkgYW5kIHJlbW92ZXMNCisgIC8vICdhbGxvdy1zYW1lLW9yaWdpbicgYW5kIHRoZW4g
dHJpZ2dlcnMgYSByZWxvYWQuDQorICAvLyBUaGUgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBhYmxl
IHRvIGFjY2VzcyBpdHMgcGFyZW50ICh0aGlzIGZpbGUpLg0KKw0KKyAgLy8gZmFpbHMgaWYgYmFk
DQorICAvLyA3KSBBbiBpZnJhbWUgKGlmXzkpIGhhcyBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdp
biBhbGxvdy1zY3JpcHRzIiwgdGhlIHNhbmRib3hlZCBkb2N1bWVudA0KKyAgLy8gKGZpbGVfaWZy
YW1lX3NhbmRib3hfZF9pZl85Lmh0bWwpIHRoYXQgaXQgY29udGFpbnMgYWNjZXNzZXMgaXRzIHBh
cmVudCAodGhpcyBmaWxlKSBhbmQgcmVtb3Zlcw0KKyAgLy8gJ2FsbG93LXNjcmlwdHMnIGFuZCB0
aGVuIHRyaWdnZXJzIGEgcmVsb2FkLg0KKyAgLy8gVGhlIGRvY3VtZW50IHNob3VsZCBub3QgYmUg
YWJsZSB0byBydW4gYSBzY3JpcHQgYW5kIGFjY2VzcyBpdHMgcGFyZW50ICh0aGlzIGZpbGUpLg0K
Kw0KKyAgLy8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDgpIGEgZG9jdW1lbnQgaW4gYW4gaWZyYW1l
IHdpdGggc2FuZGJveD0nYWxsb3ctc2NyaXB0cycgc2hvdWxkIGhhdmUgYSBkaWZmZXJlbnQgbnVs
bA0KKyAgLy8gcHJpbmNpcGFsIGluIGl0cyBvcmlnaW5hbCBkb2N1bWVudCB0aGFuIGEgZG9jdW1l
bnQgdG8gd2hpY2ggaXQgbmF2aWdhdGVzIGl0c2VsZg0KKyAgLy8gZmlsZV9pZnJhbWVfc2FuZGJv
eF9kX2lmXzEwLmh0bWwgZG9lcyB0aGlzLCBjby1vcmRpbmF0aW5nIHdpdGggdGhpcyBwYWdlIHZp
YSBwb3N0TWVzc2FnZQ0KKyAgDQorICAvLyBwYXNzZXMgaWYgZ29vZA0KKyAgLy8gOSkgYSBkb2N1
bWVudCAoZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTEuaHRtbCBpbiBhbiBpZnJhbWUgKGlmXzEx
KSB3aXRoIHNhbmRib3g9J2FsbG93LXNjcmlwdHMnDQorICAvLyBpcyBuYXZpZ2F0ZWQgdG8gZmls
ZV9pZnJhbWVfc2FuZGJveF9kX2lmMTIuaHRtbCAtIHdoZW4gdGhhdCBkb2N1bWVudCBsb2Fkcw0K
KyAgLy8gYSBtZXNzYWdlIGlzIHNlbnQgYmFjayB0byB0aGlzIGRvY3VtZW50LCB3aGljaCBhZGRz
ICdhbGxvdy1zYW1lLW9yaWdpbicgdG8gaWZfMTEgYW5kIHRoZW4NCisgIC8vIGNhbGxzIC5iYWNr
IG9uIGl0IC0gZmlsZV9pZnJhbWVfc2FuZGJveF9pZjEyLmh0bWwgc2hvdWxkIGJlIGFibGUgdG8g
Y2FsbCBiYWNrIGludG8gdGhpcw0KKyAgLy8gZG9jdW1lbnQgLSB0aGlzIGlzIGFsbCBjb250YWlu
ZWQgaW4gZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmMTMuaHRtbCB3aGljaCBpcyBvcGVuZWQgaW4g
YW5vdGhlcg0KKyAgLy8gdGFiIHNvIGl0IGhhcyBpdHMgb3duIGlzb2xhdGVkIHNlc3Npb24gaGlz
dG9yeQ0KKyAgd2luZG93Lm9wZW4oImZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEzLmh0bWwiKTsN
CisgIA0KKyAgLy8gb3BlbiB1cCB0aGUgdG9wIG5hdmlnYXRpb24gdGVzdHMNCisNCisgIC8vIGZh
aWxzIGlmIGJhZA0KKyAgLy8gMTApIGlmcmFtZSB3aXRoIHNhbmRib3g9J2FsbG93LXNjcmlwdHMn
IGNhbiBOT1QgbmF2aWdhdGUgdG9wDQorICAvLyBmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWYxLmh0
bWwgY29udGFpbnMgZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmNi5odG1sIHdoaWNoDQorICAvLyBh
dHRlbXB0cyB0byBuYXZpZ2F0ZSB0b3ANCisgIHdpbmRvdy5vcGVuKCJmaWxlX2lmcmFtZV9zYW5k
Ym94X2VfaWYxLmh0bWwiKTsNCisNCisgIC8vIGZhaWxzIGlmIGJhZA0KKyAgLy8gMTEpIGlmcmFt
ZSB3aXRoIHNhbmRib3g9J2FsbG93LXNjcmlwdHMnIG5lc3RlZCBpbnNpZGUgaWZyYW1lIHdpdGgN
CisgIC8vICdhbGxvdy10b3AtbmF2aWdhdGlvbiBhbGxvdy1zY3JpcHRzJyBjYW4gTk9UIG5hdmln
YXRlIHRvcA0KKyAgLy8gZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMi5odG1sIGNvbnRhaW5zIGZp
bGVfaWZyYW1lX3NhbmRib3hfZV9pZjEuaHRtbCB3aGljaA0KKyAgLy8gY29udGFpbnMgZmlsZV9p
ZnJhbWVfc2FuZGJveF9lX2lmNi5odG1sIHdoaWNoIGF0dGVtcHRzIHRvIG5hdmlnYXRlIHRvcA0K
KyAgd2luZG93Lm9wZW4oImZpbGVfaWZyYW1lX3NhbmRib3hfZV9pZjIuaHRtbCIpOw0KKw0KKyAg
Ly8gcGFzc2VzIGlmIGdvb2QNCisgIC8vIDEyKSBpZnJhbWUgd2l0aCBzYW5kYm94PSdhbGxvdy10
b3AtbmF2aWdhdGlvbiBhbGxvdy1zY3JpcHRzJyBjYW4gbmF2aWdhdGUgdG9wDQorICAvLyBmaWxl
X2lmcmFtZV9zYW5kYm94X2VfaWYzLmh0bWwgY29udGFpbnMgZmlsZV9pZnJhbWVfc2FuZGJveF9l
X2lmNS5odG1sIHdoaWNoIG5hdmlnYXRlcyB0b3ANCisgIHdpbmRvdy5vcGVuKCJmaWxlX2lmcmFt
ZV9zYW5kYm94X2VfaWYzLmh0bWwiKTsNCisNCisgIC8vIHBhc3NlcyBpZiBnb29kDQorICAvLyAx
MzEpIGlmcmFtZSB3aXRoIHNhbmRib3g9J2FsbG93LXRvcC1uYXZpZ2F0aW9uIGFsbG93LXNjcmlw
dHMnIG5lc3RlZCBpbnNpZGUgYW4gaWZyYW1lIHdpdGgNCisgIC8vICdhbGxvdy10b3AtbmF2aWdh
dGlvbiBhbGxvdy1zY3JpcHRzJyBjYW4gbmF2aWdhdGUgdG9wDQorICAvLyBmaWxlX2lmcmFtZV9z
YW5kYm94X2VfaWY0Lmh0bWwgY29udGFpbnMgZmlsZV9pZnJhbWVfc2FuZGJveF9lX2lmMy5odG1s
IHdoaWNoIGNvbnRhaW5zDQorICAvLyBmaWxlX2lmcmFtZV9zYW5kYm94X2VfaWY1Lmh0bWwgd2hp
Y2ggbmF2aWdhdGVzIHRvcA0KKyAgd2luZG93Lm9wZW4oImZpbGVfaWZyYW1lX3NhbmRib3hfZV9p
ZjQuaHRtbCIpOw0KK30NCisNCithZGRMb2FkRXZlbnQoZG9UZXN0KTsNCisNCit3aW5kb3cubW9k
aWZpZWRfaWZfOCA9IGZhbHNlOw0KKw0KK2Z1bmN0aW9uIHJlbG9hZF9pZl84KCkgew0KKyAgdmFy
IGlmXzggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfOCcpOw0KKyAgaWZfOC5zcmMgPSAn
ZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmOC5odG1sJzsNCit9DQorDQorZnVuY3Rpb24gbW9kaWZ5
X2lmXzgoKSB7DQorICAvLyBJZiB0aGlzIGlzIHRoZSBzZWNvbmQgdGltZSB0aGlzIGhhcyBiZWVu
IGNhbGxlZA0KKyAgLy8gdGhhdCdzIGEgZmFpbGVkIHRlc3QgKGFsbG93LXNhbWUtb3JpZ2luIHdh
cyByZW1vdmVkDQorICAvLyB0aGUgZmlyc3QgdGltZSkuDQorICBpZiAod2luZG93Lm1vZGlmaWVk
X2lmXzgpIHsNCisgICAgb2tfd3JhcHBlcihmYWxzZSwgImFuIHNhbmRib3hlZCBpZnJhbWUgZnJv
bSB3aGljaCAnYWxsb3ctc2FtZS1vcmlnaW4nIHdhcyByZW1vdmVkIHNob3VsZCBub3QgYmUgYWJs
ZSB0byBhY2Nlc3MgaXRzIHBhcmVudCIpOw0KKw0KKyAgICAvLyBuZWVkIHRvIHJldHVybiBoZXJl
IHNpbmNlIHdlIGVuZCB1cCBpbiBhbiBpbmZpbml0ZSBsb29wIG90aGVyd2lzZQ0KKyAgICByZXR1
cm47DQorICB9DQorDQorICB2YXIgaWZfOCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZl84
Jyk7DQorICB3aW5kb3cubW9kaWZpZWRfaWZfOCA9IHRydWU7DQorDQorICBpZl84LnNhbmRib3gg
PSAnYWxsb3ctc2NyaXB0cyc7DQorICBzZW5kTW91c2VFdmVudCh7dHlwZTonY2xpY2snfSwgJ2Ff
YnV0dG9uJyk7DQorfQ0KKw0KK3dpbmRvdy5tb2RpZmllZF9pZl85ID0gZmFsc2U7DQorDQorZnVu
Y3Rpb24gcmVsb2FkX2lmXzkoKSB7DQorICB2YXIgaWZfOSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdpZl85Jyk7DQorICBpZl85LnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY5Lmh0
bWwnOw0KK30NCisNCitmdW5jdGlvbiBtb2RpZnlfaWZfOSgpIHsNCisgIC8vIElmIHRoaXMgaXMg
dGhlIHNlY29uZCB0aW1lIHRoaXMgaGFzIGJlZW4gY2FsbGVkDQorICAvLyB0aGF0J3MgYSBmYWls
ZWQgdGVzdCAoYWxsb3ctc2NyaXB0cyB3YXMgcmVtb3ZlZA0KKyAgLy8gdGhlIGZpcnN0IHRpbWUp
Lg0KKyAgaWYgKHdpbmRvdy5tb2RpZmllZF9pZl85KSB7DQorICAgIG9rX3dyYXBwZXIoZmFsc2Us
ICJhbiBzYW5kYm94ZWQgaWZyYW1lIGZyb20gd2hpY2ggJ2FsbG93LXNjcmlwdHMnIHNob3VsZCBi
ZSByZW1vdmVkIHNob3VsZCBub3QgYmUgYWJsZSB0byBhY2Nlc3MgaXRzIHBhcmVudCB2aWEgYSBz
Y3JpcHQiKTsNCisNCisgICAgLy8gbmVlZCB0byByZXR1cm4gaGVyZSBzaW5jZSB3ZSBlbmQgdXAg
aW4gYW4gaW5maW5pdGUgbG9vcCBvdGhlcndpc2UNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAg
dmFyIGlmXzkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfOScpOw0KKyAgd2luZG93Lm1v
ZGlmaWVkX2lmXzkgPSB0cnVlOw0KKw0KKyAgaWZfOS5zYW5kYm94ID0gJ2FsbG93LXNhbWUtb3Jp
Z2luJzsNCisNCisgIHNlbmRNb3VzZUV2ZW50KHt0eXBlOidjbGljayd9LCAnYV9idXR0b24yJyk7
DQorfQ0KKw0KK3ZhciBmaXJzdFByaW5jaXBhbCA9ICIiOw0KK3ZhciBzZWNvbmRQcmluY2lwYWw7
DQorDQorZnVuY3Rpb24gZG9JZjEwVGVzdFBhcnQxKCkgew0KKyAgaWYgKGZpcnN0UHJpbmNpcGFs
ICE9ICIiKQ0KKyAgICByZXR1cm47DQorDQorICAvLyB1c2UgU3BlY2lhbFBvd2VycyB0byBnZXQg
dGhlIHByaW5jaXBhbCBvZiBpZl8xMA0KKyAgdmFyIGlmXzEwID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2lmXzEwJyk7DQorICBmaXJzdFByaW5jaXBhbCA9IFNwZWNpYWxQb3dlcnMuZ2V0Tm9k
ZVByaW5jaXBhbChpZl8xMC5jb250ZW50RG9jdW1lbnQpOw0KKyAgaWZfMTAuc3JjID0gJ2ZpbGVf
aWZyYW1lX3NhbmRib3hfZF9pZjEwLmh0bWwnOw0KKw0KK30NCitmdW5jdGlvbiBkb0lmMTBUZXN0
UGFydDIoKSB7DQorICB2YXIgaWZfMTAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZfMTAn
KTsNCisgIC8vIHVzZSBTcGVjaWFsUG93ZXJzIHRvIGdldCB0aGUgcHJpbmNpcGFsIG9mIGlmXzEw
DQorICBzZWNvbmRQcmluY2lwYWwgPSBTcGVjaWFsUG93ZXJzLmdldE5vZGVQcmluY2lwYWwoaWZf
MTAuY29udGVudERvY3VtZW50KTsNCisgIG9rX3dyYXBwZXIoZmlyc3RQcmluY2lwYWwgIT0gc2Vj
b25kUHJpbmNpcGFsLCAiZG9jdW1lbnRzIHNob3VsZCBOT1QgaGF2ZSB0aGUgc2FtZSBwcmluY2lw
YWwgaWYgdGhleSBhcmUgc2FuZGJveGVkIHdpdGhvdXQiICsNCisgICAgIiBhbGxvdy1zYW1lLW9y
aWdpbiBhbmQgdGhlIGZpcnN0IGRvY3VtZW50IGlzIG5hdmlnYXRlZCB0byB0aGUgc2Vjb25kIik7
DQorfQ0KKzwvc2NyaXB0Pg0KKzxib2R5Pg0KKzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRw
czovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDE2MDQiPk1vemlsbGEg
QnVnIDM0MTYwNDwvYT4gLSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgZm9yIElG
UkFNRXMNCis8cCBpZD0iZGlzcGxheSI+PC9wPg0KKzxkaXYgaWQ9ImNvbnRlbnQiPg0KKzxpZnJh
bWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzEiIHNyYz0iZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmMS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJh
bWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzIiIHNyYz0iZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmMi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJh
bWUgc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIgaWQ9ImlmXzMiIHNyYz0iZmlsZV9pZnJhbWVfc2Fu
ZGJveF9kX2lmMy5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KKzxpZnJh
bWUgc2FuZGJveD0iYWxsb3dfc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpbiIgaWQ9ImlmXzUiIHNy
Yz0iZmlsZV9pZnJhbWVfc2FuZGJveF9kX2lmNS5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAi
PjwvaWZyYW1lPg0KKzxpZnJhbWUgaWQ9ImlmX3NpYmxpbmciIHNyYz0iZmlsZV9pZnJhbWVfc2Fu
ZGJveF9uYXZpZ2F0aW9uX3N0YXJ0Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJh
bWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvd19zY3JpcHRzIiBpZD0iaWZfNiIgc3JjPSJmaWxl
X2lmcmFtZV9zYW5kYm94X2RfaWY2Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJh
bWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBp
ZD0iaWZfOCIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY4Lmh0bWwiIGhlaWdodD0iMTAi
IHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdp
biBhbGxvdy1zY3JpcHRzIiBpZD0iaWZfOSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2RfaWY5
Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzYW5kYm94
PSJhbGxvdy1zY3JpcHRzIiBpZD0iaWZfMTAiIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9uYXZp
Z2F0aW9uX3N0YXJ0Lmh0bWwiIG9ubG9hZD0nZG9JZjEwVGVzdFBhcnQxKCknIGhlaWdodD0iMTAi
IHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPC9kaXY+DQorPGlucHV0IHR5cGU9J2J1dHRvbicgaWQ9
ImFfYnV0dG9uIiBvbmNsaWNrPSdyZWxvYWRfaWZfOCgpJz4NCis8aW5wdXQgdHlwZT0nYnV0dG9u
JyBpZD0iYV9idXR0b24yIiBvbmNsaWNrPSdyZWxvYWRfaWZfOSgpJz4NCis8L2JvZHk+DQorPC9o
dG1sPg0K
</data>
<flag name="review"
          id="540027"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650383</attachid>
            <date>2012-08-08 17:21:14 -0700</date>
            <delta_ts>2012-08-08 17:22:41 -0700</delta_ts>
            <desc>iframe sandbox tests - plugins v6</desc>
            <filename>iframe_sandbox_tests_plugins</filename>
            <type>text/plain</type>
            <size>9172</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgOWE5ZWYyOTNkYTc3YjNjMDJkOTgzMDFmYzcy
Zjg2MjhhMGJkMDNmZgojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIHRlc3RzIGZvciBpZnJhbWUgc2FuZGJveCAtIHBsdWdpbnMgcj1qc3QKCmRpZmYg
LS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5pbgotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L01ha2VmaWxlLmluCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUu
aW4KQEAgLTI2NCwxNiArMjY0LDIwIEBAIE1PQ0hJVEVTVF9GSUxFUyA9IFwKIAkJdGVzdF9idWc3
NDI1NDkuaHRtbCBcCiAJCXRlc3RfYnVnNzQ1Njg1Lmh0bWwgXAogCQl0ZXN0X2lucHV0X2ZpbGVf
cGlja2VyLmh0bWwgXAogCQl0ZXN0X2J1Zzc2MzYyNi5odG1sIFwKIAkJdGVzdF9pZnJhbWVfc2Fu
ZGJveF9zYW1lX29yaWdpbi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMS5odG1s
IFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9iX2lmMi5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2Fu
ZGJveF9iX2lmMy5odG1sIFwKKwkJdGVzdF9pZnJhbWVfc2FuZGJveF9wbHVnaW5zLmh0bWwgXAor
CQlmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94
X2ZfaWYyLmh0bWwgXAorCQlmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWxeaGVhZGVyc14g
XAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X3dvcmtlcnMuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3Nh
bmRib3hfZ19pZjEuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfd29ya2VyLmpzIFwKIAkJ
JChOVUxMKQogCiBNT0NISVRFU1RfQlJPV1NFUl9GSUxFUyA9IFwKIAkJYnJvd3Nlcl9idWc2NDk3
NzguanMgXAogCQlmaWxlX2J1ZzY0OTc3OC5odG1sIFwKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMS5odG1sIGIvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0
L2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjEuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZ
UEUgSFRNTD4NCis8aHRtbD4NCis8aGVhZD4NCisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisg
IDx0aXRsZT5UZXN0IGZvciBCdWcgMzQxNjA0PC90aXRsZT4NCisgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3NzIi8+
DQorPC9oZWFkPg0KKzxib2R5Pg0KK0kgaGF2ZSAyIHBsdWdpbiBpbnN0YW5jZXMgZW1iZWRkZWQg
aW4gbWUuDQorPGVtYmVkIGlkPSJwbHVnaW4xIiB0eXBlPSJhcHBsaWNhdGlvbi94LXRlc3QiIHdp
ZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48L2VtYmVkPg0KKzxvYmplY3QgdHlwZT0iYXBwbGljYXRp
b24veC10ZXN0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PC9vYmplY3Q+DQorPC9ib2R5Pg0K
KzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L2ZpbGVfaWZy
YW1lX3NhbmRib3hfZl9pZjIuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvZmlsZV9p
ZnJhbWVfc2FuZGJveF9mX2lmMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2Zf
aWYyLmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPGhl
YWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0
MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4NCis8Ym9keT4NCisg
IEkgYW0gYSBkb2N1bWVudCB0aGF0IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGEgcGx1Z2luIGxvYWQu
DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjIuaHRtbF5oZWFkZXJzXiBiL2NvbnRlbnQvaHRt
bC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMi5odG1sXmhlYWRlcnNeCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRl
bnQvdGVzdC9maWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYyLmh0bWxeaGVhZGVyc14KQEAgLTAsMCAr
MSwxIEBACitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtdGVzdA0KZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9wbHVnaW5zLmh0bWwg
Yi9jb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfcGx1Z2lucy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1s
L2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X3BsdWdpbnMuaHRtbApAQCAtMCwwICsx
LDEzNyBAQAorPCFET0NUWVBFIEhUTUw+DQorPGh0bWw+DQorPCEtLQ0KK2h0dHBzOi8vYnVnemls
bGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTM0MTYwNA0KK0ltcGxlbWVudCBIVE1MNSBz
YW5kYm94IGF0dHJpYnV0ZSBmb3IgSUZSQU1Fcw0KKy0tPg0KKzxoZWFkPg0KKyAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPg0KKyAgPHRpdGxlPlRlc3QgZm9yIEJ1ZyAzNDE2MDQgLSBwbHVnaW5zPC90
aXRsZT4NCisgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIgc3JjPSIvdGVz
dHMvU2ltcGxlVGVzdC9TaW1wbGVUZXN0LmpzIj48L3NjcmlwdD4NCisgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZXN0cy9TaW1wbGVUZXN0L3Rlc3QuY3Nz
Ii8+DQorPC9oZWFkPg0KKzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCI+DQor
LyoqIFRlc3QgZm9yIEJ1ZyAzNDE2MDQgLSBJbXBsZW1lbnQgSFRNTDUgc2FuZGJveCBhdHRyaWJ1
dGUgZm9yIElGUkFNRXMgKiovDQorLyoqIFBsdWdpbiB0ZXN0cyAqKi8NCitTaW1wbGVUZXN0Lndh
aXRGb3JFeHBsaWNpdEZpbmlzaCgpOw0KKw0KK2Z1bmN0aW9uIGRvVGVzdCgpIHsNCisgIC8vIDEp
IHRlc3QgdGhhdCBhIHBsdWdpbiBjYW4ndCBiZSBsb2FkZWQgd2l0aCA8ZW1iZWQ+IGluc2lkZSBh
IHNhbmRib3hlZCA8aWZyYW1lPg0KKyAgLy8gKGRvbmUgYnkgZmlsZV9pZnJhbWVfc2FuZGJveF9m
X2lmMS5odG1sIGxvYWRlZCBpbiBpZjEgYmVsb3cpDQorICAvLyAyKSB0ZXN0IHRoYXQgYSBwbHVn
aW4gY2FuJ3QgYmUgbG9hZGVkIHdpdGggPG9iamVjdD4gaW5zaWRlIGEgc2FuZGJveGVkIDxpZnJh
bWU+DQorICAvLyAoZG9uZSBieSBmaWxlX2lmcmFtZV9zYW5kYm94X2ZfaWYxLmh0bWwgbG9hZGVk
IGluIGlmMSBiZWxvdykNCisgIC8vIDMpIHRlc3QgdGhhdCBwbHVnaW4gY2FuJ3QgYmUgbG9hZGVk
IGJ5IGEgc2FuZGJveGVkIDxpZnJhbWU+IHdpdGggc3JjIHBvaW50aW5nIHRvDQorICAvLyBhIGRv
Y3VtZW50IHRoYXQgaXMgaGFuZGxlZCBieSBhIHBsdWdpbiAoZG9uZSBieSBpZl8yIGJlbG93KQ0K
KyAgLy8gNCkgdGVzdCB0aGF0IHdoZW4gYSBwbHVnaW4gaXMgbG9hZGVkIGluIGFuIHVuc2FuZGJv
eGVkIGlmcmFtZSwgYSBzYW5kYm94IGF0dHJpYnV0ZQ0KKyAgLy8gaXMgdGhlbiBhZGRlZCB0byB0
aGUgaWZyYW1lIGFuZCB0aGUgZG9jdW1lbnQgY29udGFpbmluZyB0aGUgcGx1Z2luIGlzIHJlbG9h
ZGVkLA0KKyAgLy8gdGhlIHBsdWdpbiBkb2VzIG5vdCBsb2FkIGluIHRoZSBzYW5kYm94ZWQgaWZy
YW1lIChkb25lIHdpdGggaWZfMyBiZWxvdykNCisgIC8vIDUpIHRlc3QgdGhhdCB3aGVuIHdoZW4g
YSBzYW5kYm94ZWQgaWZyYW1lJ3Mgc2FuZGJveCBhdHRyaWJ1dGUgaXMgcmVtb3ZlZCwNCisgIC8v
IGFuZCBhIG5ldyBkb2N1bWVudCBpcyBsb2FkZWQgaW50byB0aGUgaWZyYW1lLCB0aGUgcGx1Z2lu
IGxvYWRzDQorICAvLyAoZG9uZSB3aXRoIGlmXzQgYmVsb3cpDQorDQorICAvLyB0aGVzZSBhcmUg
YWxsIGhhbmRsZWQgYnkgY2hlY2tpbmcgaG93IG1hbnkgaW5zdGFuY2VzIG9mIHRoZSB0ZXN0IHBs
dWdpbiBhcmUgbG9hZGVkDQorICAvLyB3aGVuIHRoaXMgc2NyaXB0IHJ1bnMgYXMgdGhlIG9ubG9h
ZCBoYW5kbGVyIC0gdGhlcmUgc2hvdWxkIGJlIHR3byBpbnN0YW5jZXMsDQorICAvLyBpbml0aWFs
bHkgdGhlIG9uZSBsb2FkZWQgZGlyZWN0bHkgYnkgdGhpcyBwYWdlIGl0c2VsZiwgYW5kIHRoZSBv
bmUgbG9hZGVkIGR1cmluZw0KKyAgLy8gdGVzdCAjNCBhYm92ZS4NCisgIHZhciBwID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3BsdWdpbjEnKTsNCisgIHZhciBpZl8xID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2lmXzEnKTsNCisgIHAuc3RhcnRXYXRjaGluZ0luc3RhbmNlQ291bnQoKTsN
CisNCisgIGlmXzEuc3JjID0gJ2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9pZjEuaHRtbCc7DQorfQ0K
Kw0KK2Z1bmN0aW9uIGlmXzFfbG9hZCgpIHsNCisgIHZhciBpZl8xID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2lmXzEnKTsNCisNCisgIGlmIChpZl8xLnNyYyA9PSAiYWJvdXQ6YmxhbmsiKQ0K
KyAgICByZXR1cm47DQorDQorICAvLyBuZWVkIHRvIHdhaXQgZm9yIHBsdWdpbiB0byBsb2FkLCBp
ZiB0aGUgdGVzdCBmYWlscy4uLg0KKyAgU2ltcGxlVGVzdC5leGVjdXRlU29vbihpZl8xX2NvbnRp
bnVlKTsNCit9DQorDQorZnVuY3Rpb24gaWZfMV9jb250aW51ZSgpIHsNCisgIC8vIGluc3RhbmNl
IGNvdW50IHNob3VsZCBiZSAwICh0ZXN0cyAjMSBhbmQgIzIgYWJvdmUpDQorICB2YXIgcCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbHVnaW4xJyk7DQorICBpcyhwLmdldEluc3RhbmNlQ291
bnQoKSwgMCwgInBsdWdpbnMgc2hvdWxkIG5vdCBiZSBsb2FkZWQgdmlhIDxvYmplY3Q+IG9yIDxl
bWJlZD4gYnkgYSBzYW5kYm94ZWQgaWZyYW1lIik7DQorDQorICB2YXIgaWZfMiA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpZl8yJyk7DQorICBpZl8yLnNyYyA9ICdmaWxlX2lmcmFtZV9zYW5k
Ym94X2ZfaWYyLmh0bWwnOw0KKw0KKyAgU2ltcGxlVGVzdC5leGVjdXRlU29vbihpZl8yX2NvbnRp
bnVlKTsNCit9DQorDQorZnVuY3Rpb24gaWZfMl9jb250aW51ZSgpIHsNCisgIC8vIGluc3RhbmNl
IGNvdW50IHNob3VsZCBiZSAwICh0ZXN0ICMzIGFib3ZlKQ0KKyAgdmFyIHAgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgncGx1Z2luMScpOw0KKw0KKyAgaXMocC5nZXRJbnN0YW5jZUNvdW50KCks
IDAsICJwbHVnaW5zIHNob3VsZCBub3QgYmUgbG9hZGVkIHZpYSBhIGRvY3VtZW50IG9mIGEgdHlw
ZSB0aGF0IHJlcXVpcmVzIGEgcGx1Z2luIGVtYmVkZGVkIGluIGEgc2FuZGJveGVkIGlmcmFtZSIp
Ow0KKw0KKyAgU2ltcGxlVGVzdC5leGVjdXRlU29vbihpZl8zX3Rlc3QpOw0KK30NCisNCitmdW5j
dGlvbiBpZl8zX3Rlc3QoKSB7DQorICB2YXIgaWZfMyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdpZl8zJyk7DQorICAvLyBhZGQgc2FuZGJveCBhdHRyaWJ1dGUNCisgIGlmXzMuc2FuZGJveCA9
ICcnOw0KKyAgaWZfMy5zcmMgPSAnZmlsZV9pZnJhbWVfc2FuZGJveF9mX2lmMS5odG1sJzsNCit9
DQorDQorZnVuY3Rpb24gaWZfM19sb2FkKCkgew0KKyAgaWYgKGlmXzMuc3JjID09ICJhYm91dDpi
bGFuayIpDQorICAgIHJldHVybjsNCisNCisgIFNpbXBsZVRlc3QuZXhlY3V0ZVNvb24oaWZfM19j
b250aW51ZSk7DQorfQ0KKw0KK2Z1bmN0aW9uIGlmXzNfY29udGludWUoKSB7DQorICB2YXIgcCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbHVnaW4xJyk7DQorICBpcyhwLmdldEluc3RhbmNl
Q291bnQoKSwgMCwgInBsdWdpbnMgc2hvdWxkIG5vdCBiZSBsb2FkZWQgd2hlbiBhIHNhbmRib3gg
YXR0cmlidXRlIGlzIGFkZGVkIiArDQorICAgICAidG8gYW4gaWZyYW1lIGFuZCBhIGRvY3VtZW50
IGNvbnRhaW5pbmcgYSBwbHVnaW4gaXMgdGhlbiBsb2FkZWQgaW50byB0aGUgaWZyYW1lIik7DQor
DQorICBTaW1wbGVUZXN0LmV4ZWN1dGVTb29uKGlmXzRfdGVzdCk7DQorfQ0KKw0KK2Z1bmN0aW9u
IGlmXzRfdGVzdCgpIHsNCisgIHZhciBpZl80ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lm
XzQnKTsNCisgIC8vIHJlbW92ZSBzYW5kYm94IGF0dHJpYnV0ZQ0KKyAgaWZfNC5yZW1vdmVBdHRy
aWJ1dGUoJ3NhbmRib3gnKTsNCisgIGlmXzQuc3JjID0gJ2ZpbGVfaWZyYW1lX3NhbmRib3hfZl9p
ZjEuaHRtbCc7DQorfQ0KKw0KK2Z1bmN0aW9uIGlmXzRfbG9hZCgpIHsNCisgIGlmIChpZl80LnNy
YyA9PSAiYWJvdXQ6YmxhbmsiKQ0KKyAgICByZXR1cm47DQorDQorICBTaW1wbGVUZXN0LmV4ZWN1
dGVTb29uKGlmXzRfY29udGludWUpOw0KK30NCisNCitmdW5jdGlvbiBpZl80X2NvbnRpbnVlKCkg
ew0KKyAgdmFyIHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGx1Z2luMScpOw0KKyAgLy8g
dGhlcmUgYXJlIDIgcGx1Z2luIGluc3RhbmNlcyBpbiBmaWxlX2lmcmFtZV9zYW5kYm94X2lmMS5o
dG1sIGxvYWRlZCBieQ0KKyAgLy8gaWZfMSwgdGhleSBzaG91bGQgc3VjY2Vzc2Z1bGx5IGxvYWQu
DQorICBpcyhwLmdldEluc3RhbmNlQ291bnQoKSwgMiwgInBsdWdpbnMgc2hvdWxkIGJlIGxvYWRl
ZCB3aGVuIGEgc2FuZGJveCBhdHRyaWJ1dGUgaXMgcmVtb3ZlZCAiICsNCisgICAgICJmcm9tIGFu
IGlmcmFtZSBhbmQgYSBkb2N1bWVudCBjb250YWluaW5nIGEgcGx1Z2luIGlzIHRoZW4gbG9hZGVk
IGludG8gdGhlIGlmcmFtZSIpOw0KKw0KKyAgcC5zdG9wV2F0Y2hpbmdJbnN0YW5jZUNvdW50KCk7
DQorICBTaW1wbGVUZXN0LmV4ZWN1dGVTb29uKGZpbmlzaF90ZXN0KTsNCit9DQorDQorZnVuY3Rp
b24gZmluaXNoX3Rlc3QoKSB7DQorICBTaW1wbGVUZXN0LmZpbmlzaCgpOw0KK30NCisNCithZGRM
b2FkRXZlbnQoZG9UZXN0KTsNCis8L3NjcmlwdD4NCis8Ym9keT4NCis8YSB0YXJnZXQ9Il9ibGFu
ayIgaHJlZj0iaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQx
NjA0Ij5Nb3ppbGxhIEJ1ZyAzNDE2MDQ8L2E+IC0gSW1wbGVtZW50IEhUTUw1IHNhbmRib3ggYXR0
cmlidXRlIGZvciBJRlJBTUVzDQorPHAgaWQ9ImRpc3BsYXkiPjwvcD4NCis8ZGl2IGlkPSJjb250
ZW50Ij4NCis8ZW1iZWQgaWQ9InBsdWdpbjEiIHR5cGU9ImFwcGxpY2F0aW9uL3gtdGVzdCIgd2lk
dGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjwvZW1iZWQ+DQorPGlmcmFtZSBpZD0iaWZfMSIgc2FuZGJv
eD0nYWxsb3ctc2FtZS1vcmlnaW4nIG9uTG9hZD0naWZfMV9sb2FkKCknIHNyYz0iYWJvdXQ6Ymxh
bmsiIGhlaWdodD0iNDAwIiB3aWR0aD0iNDAwIj48L2lmcmFtZT4NCis8aWZyYW1lIGlkPSJpZl8y
IiBzYW5kYm94PSdhbGxvdy1zYW1lLW9yaWdpbicgc3JjPSJhYm91dDpibGFuayIgaGVpZ2h0PSI0
MDAiIHdpZHRoPSI0MDAiPjwvaWZyYW1lPg0KKzxpZnJhbWUgaWQ9ImlmXzMiIHNyYz0iYWJvdXQ6
YmxhbmsiIG9ubG9hZD0naWZfM19sb2FkKCknIGhlaWdodD0iNDAwIiB3aWR0aD0iNDAwIj48L2lm
cmFtZT4NCis8aWZyYW1lIGlkPSJpZl80IiBzYW5kYm94PSdhbGxvdy1zYW1lLW9yaWdpbicgb25s
b2FkPSdpZl80X2xvYWQoKScgc3JjPSJhYm91dDpibGFuayIgaGVpZ2h0PSI0MDAiIHdpZHRoPSI0
MDAiPjwvaWZyYW1lPg0KKzwvZGl2Pg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEv
dGVzdGluZy9tb2NoaXRlc3QvYW5kcm9pZC5qc29uIGIvdGVzdGluZy9tb2NoaXRlc3QvYW5kcm9p
ZC5qc29uCi0tLSBhL3Rlc3RpbmcvbW9jaGl0ZXN0L2FuZHJvaWQuanNvbgorKysgYi90ZXN0aW5n
L21vY2hpdGVzdC9hbmRyb2lkLmpzb24KQEAgLTc4LDE2ICs3OCwxNyBAQAogICJjb250ZW50L2h0
bWwvY29udGVudC90ZXN0L3Rlc3RfYnVnNDgxMzM1LnhodG1sIjogIlRJTUVEX09VVCIsCiAgImNv
bnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9idWc1MTQ4NTYuaHRtbCI6ICIiLAogICJjb250
ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfYnVnNTU3MDg3LTIuaHRtbCI6ICJUSU1FRF9PVVQi
LAogICJjb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfYnVnNjEyNzMwLmh0bWwiOiAiIiwK
ICAiY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90ZXN0X2J1ZzYxNTgzMy5odG1sIjogIlRJTUVE
X09VVCIsCiAgImNvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9mb3JtU3VibWlzc2lvbi5o
dG1sIjogIlRJTUVEX09VVCIsCiAgImNvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvdGVzdF9mb3Jt
U3VibWlzc2lvbjIuaHRtbCI6ICIiLAogICJjb250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3Rf
ZnVsbHNjcmVlbi1hcGkuaHRtbCI6ICJUSU1FRF9PVVQiLAorICJjb250ZW50L2h0bWwvY29udGVu
dC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfcGx1Z2lucy5odG1sIjogIiIsCiAgImNvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvdGVzdF9vYmplY3RfcGx1Z2luX25hdi5odG1sIjogIlRJTUVEX09V
VCIsCiAgImNvbnRlbnQvaHRtbC9kb2N1bWVudC90ZXN0L3Rlc3RfYnVnMzY5MzcwLmh0bWwiOiAi
IiwKICAiY29udGVudC9odG1sL2RvY3VtZW50L3Rlc3QvdGVzdF9idWczOTE3NzcuaHRtbCI6ICIi
LAogICJjb250ZW50L2h0bWwvZG9jdW1lbnQvdGVzdC90ZXN0X2J1ZzQ0NTAwNC5odG1sIjogIiIs
CiAgImNvbnRlbnQvaHRtbC9kb2N1bWVudC90ZXN0L3Rlc3RfYnVnNDQ2NDgzLmh0bWwiOiAiIiwK
ICAiY29udGVudC9odG1sL2RvY3VtZW50L3Rlc3QvdGVzdF9idWc3NDEyNjYuaHRtbCI6ICIiLAog
ICJjb250ZW50L21lZGlhL3Rlc3QvdGVzdF9hdXRvcGxheV9jb250ZW50RWRpdGFibGUuaHRtbCI6
ICIiLAogICJjb250ZW50L21lZGlhL3Rlc3QvdGVzdF9idWZmZXJlZC5odG1sIjogIiIsCg==
</data>
<flag name="review"
          id="540028"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650384</attachid>
            <date>2012-08-08 17:24:55 -0700</date>
            <delta_ts>2012-08-08 17:35:40 -0700</delta_ts>
            <desc>block indexed db in a sandboxed document without &apos;allow-same-origin&apos; + tests</desc>
            <filename>indexed_db</filename>
            <type>text/plain</type>
            <size>8056</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNzg1Njc2MzUzNTFkZWY4YzZhM2MxODk0NjY2
MzQ4MjQzMWI3ODY3MQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIGlmcmFtZSBzYW5kYm94IC0gYmxvY2sgaW5kZXhlZERCIGlmIHNhbmRib3hlZCB3
aXRob3V0IGFsbG93LXNhbWUtb3JpZ2luLCBhZGQgdGVzdHMgZm9yIGluZGV4ZWREQgoKZGlmZiAt
LWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4gYi9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvTWFrZWZpbGUuaW4KKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtlZmlsZS5p
bgpAQCAtMjgxLDE2ICsyODEsMTggQEAgTU9DSElURVNUX0ZJTEVTID0gXAogCQlmaWxlX2lmcmFt
ZV9zYW5kYm94X2JfaWYzLmh0bWwgXAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRt
bCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3Nh
bmRib3hfY19pZjIuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRtbCBcCiAJ
CWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hf
Y19pZjUuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCBcCisJCWZpbGVf
aWZyYW1lX3NhbmRib3hfY19pZjcuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjgu
aHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwgXAogCQlmaWxlX2lm
cmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJveF9vcGVu
X3dpbmRvd19mYWlsLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X3Bhc3MuanMgXAogCQlm
aWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMgXAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X25hdmln
YXRpb24uaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEuaHRtbCBcCiAJCWZpbGVf
aWZyYW1lX3NhbmRib3hfZF9pZjIuaHRtbCBcCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjcuaHRtbCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2NfaWY3Lmh0bWwKQEAgLTAsMCArMSwyNyBAQAorPCFET0NUWVBFIEhU
TUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0
bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQi
IHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwv
aGVhZD4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQorICBmdW5jdGlvbiBvayhy
ZXN1bHQsIGRlc2MpIHsNCisgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHJlc3Vs
dCwgZGVzYzogZGVzY30sICIqIik7DQorICB9DQorDQorICBmdW5jdGlvbiBkb1N0dWZmKCkgew0K
KyAgICB0cnkgew0KKyAgICAgIHZhciB0aGluZyA9IGluZGV4ZWREQi5vcGVuKCJzYW5kYm94Iik7
DQorICAgICAgb2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxsb3ctc2Ft
ZS1vcmlnaW4gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBpbmRleGVkREIiKTsNCisgICAg
fQ0KKw0KKyAgICBjYXRjaChlKSB7DQorICAgICAgb2sodHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94
ZWQgd2l0aG91dCBhbGxvdy1zYW1lLW9yaWdpbiBzaG91bGQgTk9UIGJlIGFibGUgdG8gYWNjZXNz
IGluZGV4ZWREQiIpOw0KKyAgICB9ICANCisgIH0NCis8L3NjcmlwdD4NCis8Ym9keSBvbkxvYWQ9
J2RvU3R1ZmYoKTsnPg0KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNjcmlwdHMi
DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC90
ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjguaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50
L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmOC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxlX2lmcmFt
ZV9zYW5kYm94X2NfaWY4Lmh0bWwKQEAgLTAsMCArMSwyNyBAQAorPCFET0NUWVBFIEhUTUw+DQor
PGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0bGU+VGVz
dCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9
InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwvaGVhZD4N
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQorICBmdW5jdGlvbiBvayhyZXN1bHQs
IGRlc2MpIHsNCisgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHJlc3VsdCwgZGVz
YzogZGVzY30sICIqIik7DQorICB9DQorDQorICBmdW5jdGlvbiBkb1N0dWZmKCkgew0KKyAgICB2
YXIgdGhpbmcgPSBpbmRleGVkREIub3Blbigic2FuZGJveCIpOw0KKw0KKyAgICB0aGluZy5vbmVy
cm9yID0gZnVuY3Rpb24oZXZlbnQpIHsNCisgICAgICBvayhmYWxzZSwgImRvY3VtZW50cyBzYW5k
Ym94ZWQgd2l0aCBhbGxvdy1zYW1lLW9yaWdpbiBTSE9VTEQgYmUgYWJsZSB0byBhY2Nlc3MgaW5k
ZXhlZERCIik7DQorICAgIH07DQorICAgIHRoaW5nLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50
KSB7DQorICAgICAgb2sodHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zYW1l
LW9yaWdpbiBTSE9VTEQgIGJlIGFibGUgdG8gYWNjZXNzIGluZGV4ZWREQiIpOw0KKyAgICB9OyAg
DQorICB9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25Mb2FkPSdkb1N0dWZmKCk7Jz4NCisgIEkgYW0g
c2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luIg0KKzwv
Ym9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC90
ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rl
c3QvdGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwKLS0tIGEvY29udGVudC9odG1sL2Nv
bnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbAorKysgYi9jb250ZW50
L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1sCkBAIC0z
NCwxOCArMzQsMTggQEAgZnVuY3Rpb24gb2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpIHsKICAgb2so
cmVzdWx0LCBkZXNjKTsNCiANCiAgIGNvbXBsZXRlZFRlc3RzKys7DQogDQogICBpZiAocmVzdWx0
KSB7DQogICAgIHBhc3NlZFRlc3RzKys7DQogICB9DQogDQotICBpZiAoY29tcGxldGVkVGVzdHMg
PT0gMjEpIHsNCi0gICAgaXMocGFzc2VkVGVzdHMsIDIxLCAiVGhlcmUgYXJlIDIxIGdlbmVyYWwg
dGVzdHMgdGhhdCBzaG91bGQgcGFzcyIpOw0KKyAgaWYgKGNvbXBsZXRlZFRlc3RzID09IDIzKSB7
DQorICAgIGlzKHBhc3NlZFRlc3RzLCAyMywgIlRoZXJlIGFyZSAyMyBnZW5lcmFsIHRlc3RzIHRo
YXQgc2hvdWxkIHBhc3MiKTsNCiAgICAgU2ltcGxlVGVzdC5maW5pc2goKTsNCiAgIH0NCiB9DQog
DQogZnVuY3Rpb24gZG9UZXN0KCkgew0KICAgLy8gcGFzc2VzIGlmIGdvb2QNCiAgIC8vIDEpIHRl
c3QgdGhhdCBpbmxpbmUgc2NyaXB0cyAoPHNjcmlwdD4pIGNhbiBydW4gaW4gYW4gaWZyYW1lIHNh
bmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KICAgLy8gKGRvbmUgaW4gZmlsZV9pZnJhbWVf
c2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQpAQCAtMTU4LDE2
ICsxNTgsMjQgQEAgZnVuY3Rpb24gZG9UZXN0KCkgewogICAvLyAyNCkgdGVzdCB0aGF0IGFuIGlm
cmFtZSB3aXRoIHNhbmRib3g9IiIsIHN0YXJ0aW5nIG91dCB3aXRoIGEgZG9jdW1lbnQgYWxyZWFk
eSBsb2FkZWQsIGRvZXMgTk9UIGhhdmUgc2NyaXB0IGluIGEgbmV3bHkNCiAgIC8vIHNldCBzcmMg
YXR0cmlidXRlIGNyZWF0ZWQgYnkgYSBqYXZhc2NyaXB0OiBVUkwgZXhlY3V0ZWQNCiAgIC8vIGRv
bmUgYnkgdGhpcyBwYWdlLCBzZWUgaWZfOQ0KIA0KICAgLy8gcGFzc2VzIGlmIGdvb2QNCiAgIC8v
IDI1KSB0ZXN0IHRoYXQgYW4gaWZyYW1lIHdpdGggc2FuZGJveD0iYWxsb3ctc2NyaXB0cyIsIHN0
YXJ0aW5nIG91dCB3aXRoIGEgZG9jdW1lbnQgYWxyZWFkeSBsb2FkZWQsIERPRVMgaGF2ZSBzY3Jp
cHQNCiAgIC8vIGluIGEgbmV3bHkgc2V0IHNyYyBhdHRyaWJ1dGUgY3JlYXRlZCBieSBhIGphdmFz
Y3JpcHQ6IFVSTCBleGVjdXRlZA0KICAgLy8gZG9uZSBieSB0aGlzIHBhZ2UsIHNlZSBpZl8xMA0K
Kw0KKyAgLy8gcGFzc2VzIGlmIGdvb2Qgb3IgZmFpbHMgaWYgYmFkDQorICAvLyAyNikgdGVzdCB0
aGF0IGFuIHNhbmRib3hlZCBkb2N1bWVudCB3aXRob3V0ICdhbGxvdy1zYW1lLW9yaWdpbicgY2Fu
IE5PVCBhY2Nlc3MgaW5kZXhlZERCDQorICAvLyBkb25lIHZpYSBmaWxlX2lmcmFtZV9zYW5kYm94
X2NfaWY3Lmh0bWwsIHdoaWNoIGhhcyBzYW5kYm94PSdhbGxvdy1zY3JpcHRzJw0KKw0KKyAgLy8g
cGFzc2VzIGlmIGdvb2Qgb3IgZmFpbHMgaWYgYmFkDQorICAvLyAyNikgdGVzdCB0aGF0IGFuIHNh
bmRib3hlZCBkb2N1bWVudCB3aXRob3V0ICdhbGxvdy1zYW1lLW9yaWdpbicgY2FuIGFjY2VzcyBp
bmRleGVkREINCisgIC8vIGRvbmUgdmlhIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjguaHRtbCwg
d2hpY2ggaGFzIHNhbmRib3g9J2FsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4nDQogfQ0K
IA0KIGFkZExvYWRFdmVudChkb1Rlc3QpOw0KIA0KIHZhciBzdGFydGVkX2lmXzkgPSBmYWxzZTsN
CiB2YXIgc3RhcnRlZF9pZl8xMCA9IGZhbHNlOw0KIA0KIGZ1bmN0aW9uIHN0YXJ0X2lmXzkoKSB7
DQpAQCAtMjA5LDEzICsyMTcsMTUgQEAgZnVuY3Rpb24gZG9faWZfMTAoKSB7CiA8aWZyYW1lIHNh
bmRib3g9IiYjeDA5O2FsbG93LXNhbWUtb3JpZ2luJiN4MDk7YWxsb3ctc2NyaXB0cyYjeDA5OyIg
aWQ9ImlmXzZfYiIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwiIGhlaWdodD0i
MTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQogPGlmcmFtZSBzYW5kYm94PSImI3gwYTthbGxvdy1z
YW1lLW9yaWdpbiYjeDBhO2FsbG93LXNjcmlwdHMmI3gwYTsiIGlkPSJpZl82X2MiIHNyYz0iZmls
ZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAiPjwvaWZy
YW1lPg0KIDxpZnJhbWUgc2FuZGJveD0iJiN4MGM7YWxsb3ctc2FtZS1vcmlnaW4mI3gwYzthbGxv
dy1zY3JpcHRzJiN4MGM7IiBpZD0iaWZfNl9kIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRib3hfY19p
ZjYuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCiA8aWZyYW1lIHNhbmRi
b3g9IiYjeDBkO2FsbG93LXNhbWUtb3JpZ2luJiN4MGQ7YWxsb3ctc2NyaXB0cyYjeDBkOyIgaWQ9
ImlmXzZfZSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwiIGhlaWdodD0iMTAi
IHdpZHRoPSIxMCI+PC9pZnJhbWU+DQogPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdp
biIgaWQ9J2lmXzcnIHNyYz0iamF2YXNjcmlwdDonPGh0bWw+PHNjcmlwdD53aW5kb3cucGFyZW50
Lm9rX3dyYXBwZXIoZmFsc2UsIFwnYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0IGFsbG93LXNj
cmlwdHMgc2hvdWxkIG5vdCBleGVjdXRlIHNjcmlwdCBpbiBhIGphdmFzY3JpcHQgVVJMIGluIGl0
cyBzcmMgYXR0cmlidXRlXCcpOzxcL3NjcmlwdD48XC9odG1sPic7IiBoZWlnaHQ9IjEwIiB3aWR0
aD0iMTAiPjwvaWZyYW1lPg0KIDxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxs
b3ctc2NyaXB0cyIgaWQ9J2lmXzgnIHNyYz0iamF2YXNjcmlwdDonPGh0bWw+PHNjcmlwdD53aW5k
b3cucGFyZW50Lm9rX3dyYXBwZXIodHJ1ZSwgXCdhbiBpZnJhbWUgc2FuZGJveGVkIHdpdGhvdXQg
YWxsb3ctc2NyaXB0cyBzaG91bGQgZXhlY3V0ZSBzY3JpcHQgaW4gYSBqYXZhc2NyaXB0IFVSTCBp
biBpdHMgc3JjIGF0dHJpYnV0ZVwnKTs8XC9zY3JpcHQ+PFwvaHRtbD4nOyIgaGVpZ2h0PSIxMCIg
d2lkdGg9IjEwIj48L2lmcmFtZT4NCiA8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUtb3JpZ2lu
IiBvbmxvYWQ9J3N0YXJ0X2lmXzkoKScgaWQ9J2lmXzknIHNyYz0iYWJvdXQ6YmxhbmsiIGhlaWdo
dD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQogPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1l
LW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBvbmxvYWQ9J3N0YXJ0X2lmXzEwKCknIGlkPSdpZl8xMCcg
c3JjPSJhYm91dDpibGFuayIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCis8aWZy
YW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIGlkPSdpZl8xMScgc3JjPSJmaWxlX2lmcmFtZV9z
YW5kYm94X2NfaWY3Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQorPGlm
cmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBpZD0naWZfMTIn
IHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmOC5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0i
MTAiPjwvaWZyYW1lPg0KIDxpbnB1dCB0eXBlPSdidXR0b24nIGlkPSJhX2J1dHRvbiIgb25jbGlj
az0nZG9faWZfOSgpJz4NCiA8aW5wdXQgdHlwZT0nYnV0dG9uJyBpZD0iYV9idXR0b24yIiBvbmNs
aWNrPSdkb19pZl8xMCgpJz4NCiA8L2Rpdj4NCiA8L2JvZHk+DQogPC9odG1sPg0KZGlmZiAtLWdp
dCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xvYmFsV2luZG93
LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9tL2Jhc2UvbnNH
bG9iYWxXaW5kb3cuY3BwCkBAIC04MzQ4LDE2ICs4MzQ4LDIyIEBAIG5zR2xvYmFsV2luZG93OjpH
ZXRMb2NhbFN0b3JhZ2UobnNJRE9NU3QKIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogTlNfSU1F
VEhPRElNUAogbnNHbG9iYWxXaW5kb3c6OkdldEluZGV4ZWREQihuc0lJREJGYWN0b3J5KiogX3Jl
dHZhbCkKIHsKICAgaWYgKCFtSW5kZXhlZERCKSB7CiAgICAgbnNyZXN1bHQgcnY7CiAKKyAgICAv
LyBJZiB0aGUgZG9jdW1lbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0CisgICAg
Ly8gZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIGluZGV4ZWREQi4KKyAgICBpZiAobURvYyAmJiAobURv
Yy0+R2V0U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfT1JJR0lOKSkgeworICAgICAgcmV0dXJu
IE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAgaWYgKCFJc0Nocm9tZVdp
bmRvdygpKSB7CiAgICAgICBuc0NPTVB0cjxtb3pJVGhpcmRQYXJ0eVV0aWw+IHRoaXJkUGFydHlV
dGlsID0KICAgICAgICAgZG9fR2V0U2VydmljZShUSElSRFBBUlRZVVRJTF9DT05UUkFDVElEKTsK
ICAgICAgIE5TX0VOU1VSRV9UUlVFKHRoaXJkUGFydHlVdGlsLCBOU19FUlJPUl9ET01fSU5ERVhF
RERCX1VOS05PV05fRVJSKTsKIAogICAgICAgYm9vbCBpc1RoaXJkUGFydHk7CiAgICAgICBydiA9
IHRoaXJkUGFydHlVdGlsLT5Jc1RoaXJkUGFydHlXaW5kb3codGhpcywgbnVsbHB0ciwgJmlzVGhp
cmRQYXJ0eSk7CiAgICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgTlNfRVJST1JfRE9NX0lOREVY
RUREQl9VTktOT1dOX0VSUik7Cg==
</data>
<flag name="review"
          id="540029"
          type_id="937"
          status="+"
          setter="jstenback+bmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>650386</attachid>
            <date>2012-08-08 17:35:40 -0700</date>
            <delta_ts>2012-08-08 17:35:40 -0700</delta_ts>
            <desc>650384: block indexed db in a sandboxed document without &apos;allow-same-origin&apos; + tests</desc>
            <filename>indexed_db</filename>
            <type>text/plain</type>
            <size>8062</size>
            <attacher>ian.melven</attacher>
            
              <data encoding="base64">IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBQYXJlbnQgNzg1Njc2MzUzNTFkZWY4YzZhM2MxODk0NjY2
MzQ4MjQzMWI3ODY3MQojIFVzZXIgSWFuIE1lbHZlbiA8aW1lbHZlbkBtb3ppbGxhLmNvbT4KQnVn
IDM0MTYwNCAtIGlmcmFtZSBzYW5kYm94IC0gYmxvY2sgaW5kZXhlZERCIGlmIHNhbmRib3hlZCB3
aXRob3V0IGFsbG93LXNhbWUtb3JpZ2luLCBhZGQgdGVzdHMgZm9yIGluZGV4ZWREQiByPWpzdAoK
ZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Rlc3QvTWFrZWZpbGUuaW4gYi9jb250
ZW50L2h0bWwvY29udGVudC90ZXN0L01ha2VmaWxlLmluCi0tLSBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvTWFrZWZpbGUuaW4KKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9NYWtl
ZmlsZS5pbgpAQCAtMjgxLDE2ICsyODEsMTggQEAgTU9DSElURVNUX0ZJTEVTID0gXAogCQlmaWxl
X2lmcmFtZV9zYW5kYm94X2JfaWYzLmh0bWwgXAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVy
YWwuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjEuaHRtbCBcCiAJCWZpbGVfaWZy
YW1lX3NhbmRib3hfY19pZjIuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjMuaHRt
bCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjQuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3Nh
bmRib3hfY19pZjUuaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjYuaHRtbCBcCisJ
CWZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjcuaHRtbCBcCisJCWZpbGVfaWZyYW1lX3NhbmRib3hf
Y19pZjguaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZm9ybV9mYWlsLmh0bWwgXAogCQlm
aWxlX2lmcmFtZV9zYW5kYm94X2Zvcm1fcGFzcy5odG1sIFwKIAkJZmlsZV9pZnJhbWVfc2FuZGJv
eF9vcGVuX3dpbmRvd19mYWlsLmh0bWwgXAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X3Bhc3MuanMg
XAogCQlmaWxlX2lmcmFtZV9zYW5kYm94X2ZhaWwuanMgXAogCQl0ZXN0X2lmcmFtZV9zYW5kYm94
X25hdmlnYXRpb24uaHRtbCBcCiAJCWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjEuaHRtbCBcCiAJ
CWZpbGVfaWZyYW1lX3NhbmRib3hfZF9pZjIuaHRtbCBcCmRpZmYgLS1naXQgYS9jb250ZW50L2h0
bWwvY29udGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjcuaHRtbCBiL2NvbnRlbnQv
aHRtbC9jb250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVz
dC9maWxlX2lmcmFtZV9zYW5kYm94X2NfaWY3Lmh0bWwKQEAgLTAsMCArMSwyNyBAQAorPCFET0NU
WVBFIEhUTUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQor
ICA8dGl0bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxl
c2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIv
Pg0KKzwvaGVhZD4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQorICBmdW5jdGlv
biBvayhyZXN1bHQsIGRlc2MpIHsNCisgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6
IHJlc3VsdCwgZGVzYzogZGVzY30sICIqIik7DQorICB9DQorDQorICBmdW5jdGlvbiBkb1N0dWZm
KCkgew0KKyAgICB0cnkgew0KKyAgICAgIHZhciB0aGluZyA9IGluZGV4ZWREQi5vcGVuKCJzYW5k
Ym94Iik7DQorICAgICAgb2soZmFsc2UsICJkb2N1bWVudHMgc2FuZGJveGVkIHdpdGhvdXQgYWxs
b3ctc2FtZS1vcmlnaW4gc2hvdWxkIE5PVCBiZSBhYmxlIHRvIGFjY2VzcyBpbmRleGVkREIiKTsN
CisgICAgfQ0KKw0KKyAgICBjYXRjaChlKSB7DQorICAgICAgb2sodHJ1ZSwgImRvY3VtZW50cyBz
YW5kYm94ZWQgd2l0aG91dCBhbGxvdy1zYW1lLW9yaWdpbiBzaG91bGQgTk9UIGJlIGFibGUgdG8g
YWNjZXNzIGluZGV4ZWREQiIpOw0KKyAgICB9ICANCisgIH0NCis8L3NjcmlwdD4NCis8Ym9keSBv
bkxvYWQ9J2RvU3R1ZmYoKTsnPg0KKyAgSSBhbSBzYW5kYm94ZWQgYnV0IHdpdGggImFsbG93LXNj
cmlwdHMiDQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29u
dGVudC90ZXN0L2ZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjguaHRtbCBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3Rlc3QvZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmOC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvdGVzdC9maWxl
X2lmcmFtZV9zYW5kYm94X2NfaWY4Lmh0bWwKQEAgLTAsMCArMSwyNyBAQAorPCFET0NUWVBFIEhU
TUw+DQorPGh0bWw+DQorPGhlYWQ+DQorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorICA8dGl0
bGU+VGVzdCBmb3IgQnVnIDM0MTYwNDwvdGl0bGU+DQorICA8bGluayByZWw9InN0eWxlc2hlZXQi
IHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVzdHMvU2ltcGxlVGVzdC90ZXN0LmNzcyIvPg0KKzwv
aGVhZD4NCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQorICBmdW5jdGlvbiBvayhy
ZXN1bHQsIGRlc2MpIHsNCisgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7b2s6IHJlc3Vs
dCwgZGVzYzogZGVzY30sICIqIik7DQorICB9DQorDQorICBmdW5jdGlvbiBkb1N0dWZmKCkgew0K
KyAgICB2YXIgdGhpbmcgPSBpbmRleGVkREIub3Blbigic2FuZGJveCIpOw0KKw0KKyAgICB0aGlu
Zy5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHsNCisgICAgICBvayhmYWxzZSwgImRvY3VtZW50
cyBzYW5kYm94ZWQgd2l0aCBhbGxvdy1zYW1lLW9yaWdpbiBTSE9VTEQgYmUgYWJsZSB0byBhY2Nl
c3MgaW5kZXhlZERCIik7DQorICAgIH07DQorICAgIHRoaW5nLm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KGV2ZW50KSB7DQorICAgICAgb2sodHJ1ZSwgImRvY3VtZW50cyBzYW5kYm94ZWQgd2l0aCBhbGxv
dy1zYW1lLW9yaWdpbiBTSE9VTEQgIGJlIGFibGUgdG8gYWNjZXNzIGluZGV4ZWREQiIpOw0KKyAg
ICB9OyAgDQorICB9DQorPC9zY3JpcHQ+DQorPGJvZHkgb25Mb2FkPSdkb1N0dWZmKCk7Jz4NCisg
IEkgYW0gc2FuZGJveGVkIGJ1dCB3aXRoICJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2lu
Ig0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQv
dGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbCBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3Rlc3QvdGVzdF9pZnJhbWVfc2FuZGJveF9nZW5lcmFsLmh0bWwKLS0tIGEvY29udGVudC9o
dG1sL2NvbnRlbnQvdGVzdC90ZXN0X2lmcmFtZV9zYW5kYm94X2dlbmVyYWwuaHRtbAorKysgYi9j
b250ZW50L2h0bWwvY29udGVudC90ZXN0L3Rlc3RfaWZyYW1lX3NhbmRib3hfZ2VuZXJhbC5odG1s
CkBAIC0zNCwxOCArMzQsMTggQEAgZnVuY3Rpb24gb2tfd3JhcHBlcihyZXN1bHQsIGRlc2MpIHsK
ICAgb2socmVzdWx0LCBkZXNjKTsNCiANCiAgIGNvbXBsZXRlZFRlc3RzKys7DQogDQogICBpZiAo
cmVzdWx0KSB7DQogICAgIHBhc3NlZFRlc3RzKys7DQogICB9DQogDQotICBpZiAoY29tcGxldGVk
VGVzdHMgPT0gMjEpIHsNCi0gICAgaXMocGFzc2VkVGVzdHMsIDIxLCAiVGhlcmUgYXJlIDIxIGdl
bmVyYWwgdGVzdHMgdGhhdCBzaG91bGQgcGFzcyIpOw0KKyAgaWYgKGNvbXBsZXRlZFRlc3RzID09
IDIzKSB7DQorICAgIGlzKHBhc3NlZFRlc3RzLCAyMywgIlRoZXJlIGFyZSAyMyBnZW5lcmFsIHRl
c3RzIHRoYXQgc2hvdWxkIHBhc3MiKTsNCiAgICAgU2ltcGxlVGVzdC5maW5pc2goKTsNCiAgIH0N
CiB9DQogDQogZnVuY3Rpb24gZG9UZXN0KCkgew0KICAgLy8gcGFzc2VzIGlmIGdvb2QNCiAgIC8v
IDEpIHRlc3QgdGhhdCBpbmxpbmUgc2NyaXB0cyAoPHNjcmlwdD4pIGNhbiBydW4gaW4gYW4gaWZy
YW1lIHNhbmRib3hlZCB3aXRoICJhbGxvdy1zY3JpcHRzIg0KICAgLy8gKGRvbmUgaW4gZmlsZV9p
ZnJhbWVfc2FuZGJveF9jX2lmMS5odG1sIHdoaWNoIGhhcyAnYWxsb3ctc2NyaXB0cycpDQpAQCAt
MTU4LDE2ICsxNTgsMjQgQEAgZnVuY3Rpb24gZG9UZXN0KCkgewogICAvLyAyNCkgdGVzdCB0aGF0
IGFuIGlmcmFtZSB3aXRoIHNhbmRib3g9IiIsIHN0YXJ0aW5nIG91dCB3aXRoIGEgZG9jdW1lbnQg
YWxyZWFkeSBsb2FkZWQsIGRvZXMgTk9UIGhhdmUgc2NyaXB0IGluIGEgbmV3bHkNCiAgIC8vIHNl
dCBzcmMgYXR0cmlidXRlIGNyZWF0ZWQgYnkgYSBqYXZhc2NyaXB0OiBVUkwgZXhlY3V0ZWQNCiAg
IC8vIGRvbmUgYnkgdGhpcyBwYWdlLCBzZWUgaWZfOQ0KIA0KICAgLy8gcGFzc2VzIGlmIGdvb2QN
CiAgIC8vIDI1KSB0ZXN0IHRoYXQgYW4gaWZyYW1lIHdpdGggc2FuZGJveD0iYWxsb3ctc2NyaXB0
cyIsIHN0YXJ0aW5nIG91dCB3aXRoIGEgZG9jdW1lbnQgYWxyZWFkeSBsb2FkZWQsIERPRVMgaGF2
ZSBzY3JpcHQNCiAgIC8vIGluIGEgbmV3bHkgc2V0IHNyYyBhdHRyaWJ1dGUgY3JlYXRlZCBieSBh
IGphdmFzY3JpcHQ6IFVSTCBleGVjdXRlZA0KICAgLy8gZG9uZSBieSB0aGlzIHBhZ2UsIHNlZSBp
Zl8xMA0KKw0KKyAgLy8gcGFzc2VzIGlmIGdvb2Qgb3IgZmFpbHMgaWYgYmFkDQorICAvLyAyNikg
dGVzdCB0aGF0IGFuIHNhbmRib3hlZCBkb2N1bWVudCB3aXRob3V0ICdhbGxvdy1zYW1lLW9yaWdp
bicgY2FuIE5PVCBhY2Nlc3MgaW5kZXhlZERCDQorICAvLyBkb25lIHZpYSBmaWxlX2lmcmFtZV9z
YW5kYm94X2NfaWY3Lmh0bWwsIHdoaWNoIGhhcyBzYW5kYm94PSdhbGxvdy1zY3JpcHRzJw0KKw0K
KyAgLy8gcGFzc2VzIGlmIGdvb2Qgb3IgZmFpbHMgaWYgYmFkDQorICAvLyAyNikgdGVzdCB0aGF0
IGFuIHNhbmRib3hlZCBkb2N1bWVudCB3aXRob3V0ICdhbGxvdy1zYW1lLW9yaWdpbicgY2FuIGFj
Y2VzcyBpbmRleGVkREINCisgIC8vIGRvbmUgdmlhIGZpbGVfaWZyYW1lX3NhbmRib3hfY19pZjgu
aHRtbCwgd2hpY2ggaGFzIHNhbmRib3g9J2FsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4n
DQogfQ0KIA0KIGFkZExvYWRFdmVudChkb1Rlc3QpOw0KIA0KIHZhciBzdGFydGVkX2lmXzkgPSBm
YWxzZTsNCiB2YXIgc3RhcnRlZF9pZl8xMCA9IGZhbHNlOw0KIA0KIGZ1bmN0aW9uIHN0YXJ0X2lm
XzkoKSB7DQpAQCAtMjA5LDEzICsyMTcsMTUgQEAgZnVuY3Rpb24gZG9faWZfMTAoKSB7CiA8aWZy
YW1lIHNhbmRib3g9IiYjeDA5O2FsbG93LXNhbWUtb3JpZ2luJiN4MDk7YWxsb3ctc2NyaXB0cyYj
eDA5OyIgaWQ9ImlmXzZfYiIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwiIGhl
aWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQogPGlmcmFtZSBzYW5kYm94PSImI3gwYTth
bGxvdy1zYW1lLW9yaWdpbiYjeDBhO2FsbG93LXNjcmlwdHMmI3gwYTsiIGlkPSJpZl82X2MiIHNy
Yz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmNi5odG1sIiBoZWlnaHQ9IjEwIiB3aWR0aD0iMTAi
PjwvaWZyYW1lPg0KIDxpZnJhbWUgc2FuZGJveD0iJiN4MGM7YWxsb3ctc2FtZS1vcmlnaW4mI3gw
YzthbGxvdy1zY3JpcHRzJiN4MGM7IiBpZD0iaWZfNl9kIiBzcmM9ImZpbGVfaWZyYW1lX3NhbmRi
b3hfY19pZjYuaHRtbCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCiA8aWZyYW1l
IHNhbmRib3g9IiYjeDBkO2FsbG93LXNhbWUtb3JpZ2luJiN4MGQ7YWxsb3ctc2NyaXB0cyYjeDBk
OyIgaWQ9ImlmXzZfZSIgc3JjPSJmaWxlX2lmcmFtZV9zYW5kYm94X2NfaWY2Lmh0bWwiIGhlaWdo
dD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQogPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1l
LW9yaWdpbiIgaWQ9J2lmXzcnIHNyYz0iamF2YXNjcmlwdDonPGh0bWw+PHNjcmlwdD53aW5kb3cu
cGFyZW50Lm9rX3dyYXBwZXIoZmFsc2UsIFwnYW4gaWZyYW1lIHNhbmRib3hlZCB3aXRob3V0IGFs
bG93LXNjcmlwdHMgc2hvdWxkIG5vdCBleGVjdXRlIHNjcmlwdCBpbiBhIGphdmFzY3JpcHQgVVJM
IGluIGl0cyBzcmMgYXR0cmlidXRlXCcpOzxcL3NjcmlwdD48XC9odG1sPic7IiBoZWlnaHQ9IjEw
IiB3aWR0aD0iMTAiPjwvaWZyYW1lPg0KIDxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmln
aW4gYWxsb3ctc2NyaXB0cyIgaWQ9J2lmXzgnIHNyYz0iamF2YXNjcmlwdDonPGh0bWw+PHNjcmlw
dD53aW5kb3cucGFyZW50Lm9rX3dyYXBwZXIodHJ1ZSwgXCdhbiBpZnJhbWUgc2FuZGJveGVkIHdp
dGhvdXQgYWxsb3ctc2NyaXB0cyBzaG91bGQgZXhlY3V0ZSBzY3JpcHQgaW4gYSBqYXZhc2NyaXB0
IFVSTCBpbiBpdHMgc3JjIGF0dHJpYnV0ZVwnKTs8XC9zY3JpcHQ+PFwvaHRtbD4nOyIgaGVpZ2h0
PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4NCiA8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNhbWUt
b3JpZ2luIiBvbmxvYWQ9J3N0YXJ0X2lmXzkoKScgaWQ9J2lmXzknIHNyYz0iYWJvdXQ6Ymxhbmsi
IGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+DQogPGlmcmFtZSBzYW5kYm94PSJhbGxv
dy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBvbmxvYWQ9J3N0YXJ0X2lmXzEwKCknIGlkPSdp
Zl8xMCcgc3JjPSJhYm91dDpibGFuayIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEwIj48L2lmcmFtZT4N
Cis8aWZyYW1lIHNhbmRib3g9ImFsbG93LXNjcmlwdHMiIGlkPSdpZl8xMScgc3JjPSJmaWxlX2lm
cmFtZV9zYW5kYm94X2NfaWY3Lmh0bWwiIGhlaWdodD0iMTAiIHdpZHRoPSIxMCI+PC9pZnJhbWU+
DQorPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIiBpZD0n
aWZfMTInIHNyYz0iZmlsZV9pZnJhbWVfc2FuZGJveF9jX2lmOC5odG1sIiBoZWlnaHQ9IjEwIiB3
aWR0aD0iMTAiPjwvaWZyYW1lPg0KIDxpbnB1dCB0eXBlPSdidXR0b24nIGlkPSJhX2J1dHRvbiIg
b25jbGljaz0nZG9faWZfOSgpJz4NCiA8aW5wdXQgdHlwZT0nYnV0dG9uJyBpZD0iYV9idXR0b24y
IiBvbmNsaWNrPSdkb19pZl8xMCgpJz4NCiA8L2Rpdj4NCiA8L2JvZHk+DQogPC9odG1sPg0KZGlm
ZiAtLWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xvYmFs
V2luZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9tL2Jh
c2UvbnNHbG9iYWxXaW5kb3cuY3BwCkBAIC04MzQ4LDE2ICs4MzQ4LDIyIEBAIG5zR2xvYmFsV2lu
ZG93OjpHZXRMb2NhbFN0b3JhZ2UobnNJRE9NU3QKIC8vKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAog
TlNfSU1FVEhPRElNUAogbnNHbG9iYWxXaW5kb3c6OkdldEluZGV4ZWREQihuc0lJREJGYWN0b3J5
KiogX3JldHZhbCkKIHsKICAgaWYgKCFtSW5kZXhlZERCKSB7CiAgICAgbnNyZXN1bHQgcnY7CiAK
KyAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaGFzIHRoZSBzYW5kYm94ZWQgb3JpZ2luIGZsYWcgc2V0
CisgICAgLy8gZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIGluZGV4ZWREQi4KKyAgICBpZiAobURvYyAm
JiAobURvYy0+R2V0U2FuZGJveEZsYWdzKCkgJiBTQU5EQk9YRURfT1JJR0lOKSkgeworICAgICAg
cmV0dXJuIE5TX0VSUk9SX0RPTV9TRUNVUklUWV9FUlI7CisgICAgfQorCiAgICAgaWYgKCFJc0No
cm9tZVdpbmRvdygpKSB7CiAgICAgICBuc0NPTVB0cjxtb3pJVGhpcmRQYXJ0eVV0aWw+IHRoaXJk
UGFydHlVdGlsID0KICAgICAgICAgZG9fR2V0U2VydmljZShUSElSRFBBUlRZVVRJTF9DT05UUkFD
VElEKTsKICAgICAgIE5TX0VOU1VSRV9UUlVFKHRoaXJkUGFydHlVdGlsLCBOU19FUlJPUl9ET01f
SU5ERVhFRERCX1VOS05PV05fRVJSKTsKIAogICAgICAgYm9vbCBpc1RoaXJkUGFydHk7CiAgICAg
ICBydiA9IHRoaXJkUGFydHlVdGlsLT5Jc1RoaXJkUGFydHlXaW5kb3codGhpcywgbnVsbHB0ciwg
JmlzVGhpcmRQYXJ0eSk7CiAgICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgTlNfRVJST1JfRE9N
X0lOREVYRUREQl9VTktOT1dOX0VSUik7Cg==
</data>
<flag name="review"
          id="540031"
          type_id="937"
          status="+"
          setter="ian.melven"
    />
          </attachment>


    </bug>

</bugzilla>