<?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>629350</bug_id>
          <alias>old-webvtt</alias>
          <filed_via>unknown</filed_via>
          <creation_ts>2011-01-27 06:38:49 -0800</creation_ts>
          <short_desc>[meta] Tracking bug for WebVTT implementation</short_desc>
          <delta_ts>2026-09-14 07:49:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>Components</classification>
          <product>Core</product>
          <component>Audio/Video: Playback</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=891661</see_also>
    
    <see_also>https://web-platform-dx.github.io/web-features-explorer/features/webvtt/</see_also>
    
    <see_also>https://w3c.github.io/webvtt/</see_also>
    
    <see_also>https://github.com/web-platform-tests/interop/issues/1161</see_also>
          <bug_file_loc>https://www.w3.org/TR/webvtt1/</bug_file_loc>
          <status_whiteboard>[platform-feature]</status_whiteboard>
          <keywords>access, dev-doc-needed, DevAdvocacy, feature, meta, parity-chrome, parity-ie</keywords>
          <priority>P3</priority>
          <bug_severity>S3</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>863485</dependson>
    
    <dependson>865395</dependson>
    
    <dependson>865401</dependson>
    
    <dependson>883122</dependson>
    
    <dependson>886353</dependson>
    
    <dependson>981691</dependson>
    
    <dependson>1161738</dependson>
    
    <dependson>1274344</dependson>
    
    <dependson>1277179</dependson>
    
    <dependson>1293292</dependson>
    
    <dependson>1338031</dependson>
    
    <dependson>1416143</dependson>
    
    <dependson>1436430</dependson>
    
    <dependson>1527874</dependson>
    
    <dependson>1534904</dependson>
    
    <dependson>1575460</dependson>
    
    <dependson>1636572</dependson>
    
    <dependson>1664754</dependson>
    
    <dependson>1675386</dependson>
    
    <dependson>1676286</dependson>
    
    <dependson>1687119</dependson>
    
    <dependson>1703895</dependson>
    
    <dependson>1704099</dependson>
    
    <dependson>1721736</dependson>
    
    <dependson>1738555</dependson>
    
    <dependson>1855236</dependson>
    
    <dependson>1858162</dependson>
    
    <dependson>1886145</dependson>
    
    <dependson>1906787</dependson>
    
    <dependson>1956126</dependson>
    
    <dependson>1983255</dependson>
    
    <dependson>515898</dependson>
    
    <dependson>620664</dependson>
    
    <dependson>736598</dependson>
    
    <dependson>830879</dependson>
    
    <dependson>833382</dependson>
    
    <dependson>833385</dependson>
    
    <dependson>833386</dependson>
    
    <dependson>833388</dependson>
    
    <dependson>833403</dependson>
    
    <dependson>849189</dependson>
    
    <dependson>863488</dependson>
    
    <dependson>865407</dependson>
    
    <dependson>868509</dependson>
    
    <dependson>868611</dependson>
    
    <dependson>868629</dependson>
    
    <dependson>871747</dependson>
    
    <dependson>872271</dependson>
    
    <dependson>875169</dependson>
    
    <dependson>875213</dependson>
    
    <dependson>876505</dependson>
    
    <dependson>879426</dependson>
    
    <dependson>880064</dependson>
    
    <dependson>880094</dependson>
    
    <dependson>880851</dependson>
    
    <dependson>881475</dependson>
    
    <dependson>881978</dependson>
    
    <dependson>882131</dependson>
    
    <dependson>882535</dependson>
    
    <dependson>882661</dependson>
    
    <dependson>882700</dependson>
    
    <dependson>882718</dependson>
    
    <dependson>882817</dependson>
    
    <dependson>882915</dependson>
    
    <dependson>883843</dependson>
    
    <dependson>884507</dependson>
    
    <dependson>884879</dependson>
    
    <dependson>887463</dependson>
    
    <dependson>887934</dependson>
    
    <dependson>887978</dependson>
    
    <dependson>890051</dependson>
    
    <dependson>891052</dependson>
    
    <dependson>891381</dependson>
    
    <dependson>891661</dependson>
    
    <dependson>895091</dependson>
    
    <dependson>909993</dependson>
    
    <dependson>913016</dependson>
    
    <dependson>917945</dependson>
    
    <dependson>918289</dependson>
    
    <dependson>920088</dependson>
    
    <dependson>921484</dependson>
    
    <dependson>941701</dependson>
    
    <dependson>949642</dependson>
    
    <dependson>949643</dependson>
    
    <dependson>950049</dependson>
    
    <dependson>952130</dependson>
    
    <dependson>960184</dependson>
    
    <dependson>969506</dependson>
    
    <dependson>974017</dependson>
    
    <dependson>976580</dependson>
    
    <dependson>977302</dependson>
    
    <dependson>978163</dependson>
    
    <dependson>981862</dependson>
    
    <dependson>982183</dependson>
    
    <dependson>983182</dependson>
    
    <dependson>983207</dependson>
    
    <dependson>985484</dependson>
    
    <dependson>985915</dependson>
    
    <dependson>985917</dependson>
    
    <dependson>992664</dependson>
    
    <dependson>996331</dependson>
    
    <dependson>996333</dependson>
    
    <dependson>1010707</dependson>
    
    <dependson>1028581</dependson>
    
    <dependson>1033144</dependson>
    
    <dependson>1035582</dependson>
    
    <dependson>1059541</dependson>
    
    <dependson>1206304</dependson>
    
    <dependson>1242594</dependson>
    
    <dependson>1242599</dependson>
    
    <dependson>1253905</dependson>
    
    <dependson>1270122</dependson>
    
    <dependson>1274884</dependson>
    
    <dependson>1275492</dependson>
    
    <dependson>1275808</dependson>
    
    <dependson>1276129</dependson>
    
    <dependson>1276130</dependson>
    
    <dependson>1276830</dependson>
    
    <dependson>1276831</dependson>
    
    <dependson>1276832</dependson>
    
    <dependson>1276833</dependson>
    
    <dependson>1277437</dependson>
    
    <dependson>1278164</dependson>
    
    <dependson>1280644</dependson>
    
    <dependson>1281418</dependson>
    
    <dependson>1283417</dependson>
    
    <dependson>1283803</dependson>
    
    <dependson>1285897</dependson>
    
    <dependson>1286497</dependson>
    
    <dependson>1286751</dependson>
    
    <dependson>1305732</dependson>
    
    <dependson>1307710</dependson>
    
    <dependson>1334112</dependson>
    
    <dependson>1338030</dependson>
    
    <dependson>1390465</dependson>
    
    <dependson>1451747</dependson>
    
    <dependson>1453774</dependson>
    
    <dependson>1464012</dependson>
    
    <dependson>1488673</dependson>
    
    <dependson>1509446</dependson>
    
    <dependson>1527688</dependson>
    
    <dependson>1528420</dependson>
    
    <dependson>1531863</dependson>
    
    <dependson>1534862</dependson>
    
    <dependson>1534888</dependson>
    
    <dependson>1535005</dependson>
    
    <dependson>1535223</dependson>
    
    <dependson>1536762</dependson>
    
    <dependson>1541452</dependson>
    
    <dependson>1544455</dependson>
    
    <dependson>1545587</dependson>
    
    <dependson>1548731</dependson>
    
    <dependson>1548923</dependson>
    
    <dependson>1550633</dependson>
    
    <dependson>1551045</dependson>
    
    <dependson>1551385</dependson>
    
    <dependson>1552081</dependson>
    
    <dependson>1555197</dependson>
    
    <dependson>1555825</dependson>
    
    <dependson>1555836</dependson>
    
    <dependson>1555849</dependson>
    
    <dependson>1556581</dependson>
    
    <dependson>1557882</dependson>
    
    <dependson>1562021</dependson>
    
    <dependson>1562353</dependson>
    
    <dependson>1580015</dependson>
    
    <dependson>1675326</dependson>
    
    <dependson>1698401</dependson>
    
    <dependson>1703444</dependson>
    
    <dependson>1733232</dependson>
    
    <dependson>1757124</dependson>
    
    <dependson>1758578</dependson>
    
    <dependson>1950616</dependson>
    
    <dependson>1974237</dependson>
    
    <dependson>1975580</dependson>
          <blocked>568516</blocked>
    
    <blocked>690737</blocked>
    
    <blocked>2010319</blocked>
    
    <blocked>663647</blocked>
    
    <blocked>802882</blocked>
    
    <blocked>880711</blocked>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="antistress">anti-stress</reporter>
          <assigned_to name="Alastor Wu [:alwu]">alwu</assigned_to>
          <cc>aaronlev</cc>
    
    <cc>adalucin</cc>
    
    <cc>ajvincent</cc>
    
    <cc>albert</cc>
    
    <cc>alexander.farkas</cc>
    
    <cc>alice0775</cc>
    
    <cc>alwu</cc>
    
    <cc>amarchesini</cc>
    
    <cc>andrew.quartey</cc>
    
    <cc>anti-stress</cc>
    
    <cc>anton.kochkov</cc>
    
    <cc>Arcturus66</cc>
    
    <cc>asmodeusme</cc>
    
    <cc>bechen</cc>
    
    <cc>blakewu0205</cc>
    
    <cc>bobe+bugzilla</cc>
    
    <cc>bugzilla-watch</cc>
    
    <cc>bugzilla</cc>
    
    <cc>bugzillawatcher</cc>
    
    <cc>carlo.stemberger</cc>
    
    <cc>cdiehl</cc>
    
    <cc>chris</cc>
    
    <cc>chris</cc>
    
    <cc>cp_maverick</cc>
    
    <cc>dale</cc>
    
    <cc>daniel_schulz1</cc>
    
    <cc>david.humphrey</cc>
    
    <cc>dbolter</cc>
    
    <cc>dc.loco</cc>
    
    <cc>deprecationmail</cc>
    
    <cc>dzbarsky</cc>
    
    <cc>e1119130</cc>
    
    <cc>edo999</cc>
    
    <cc>eitan</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>fb+mozdev</cc>
    
    <cc>ferongr</cc>
    
    <cc>fullmetaljacket.xp+bugmail</cc>
    
    <cc>giles</cc>
    
    <cc>gphemsley</cc>
    
    <cc>grenavitar</cc>
    
    <cc>harshid</cc>
    
    <cc>iamcraigcampbell</cc>
    
    <cc>jake-bmo</cc>
    
    <cc>james</cc>
    
    <cc>jan</cc>
    
    <cc>jasilver1</cc>
    
    <cc>jeremie.patonnier</cc>
    
    <cc>jikevin108</cc>
    
    <cc>jypenator</cc>
    
    <cc>kairo</cc>
    
    <cc>karlmernagh</cc>
    
    <cc>khuey</cc>
    
    <cc>kinetik</cc>
    
    <cc>kohei</cc>
    
    <cc>liamre</cc>
    
    <cc>malix0</cc>
    
    <cc>marsjaninzmarsa</cc>
    
    <cc>matjk7</cc>
    
    <cc>mattiasa</cc>
    
    <cc>mcastelluccio</cc>
    
    <cc>me</cc>
    
    <cc>megabyte</cc>
    
    <cc>monique.brunel</cc>
    
    <cc>mounir</cc>
    
    <cc>mozilla.bugs</cc>
    
    <cc>mreavy</cc>
    
    <cc>mv.nsaad</cc>
    
    <cc>nissan4321</cc>
    
    <cc>pablo+mozilla</cc>
    
    <cc>pascalc</cc>
    
    <cc>paul</cc>
    
    <cc>pb-dsp_bugzilla</cc>
    
    <cc>pcvrcek</cc>
    
    <cc>petercpg</cc>
    
    <cc>raffoul.jordan</cc>
    
    <cc>rforbes</cc>
    
    <cc>rick.eyre</cc>
    
    <cc>roc</cc>
    
    <cc>sankha93</cc>
    
    <cc>saurabhanandiit</cc>
    
    <cc>silviapfeiffer1</cc>
    
    <cc>sledru</cc>
    
    <cc>sotaro.ikeda.g</cc>
    
    <cc>surkov.alexander</cc>
    
    <cc>syoichi</cc>
    
    <cc>szahmad</cc>
    
    <cc>tbsaunde+mozbugs</cc>
    
    <cc>ted</cc>
    
    <cc>u279076</cc>
    
    <cc>vulcain</cc>
    
    <cc>waldron.rick</cc>
    
    <cc>webmaster</cc>
    
    <cc>wgianopoulos</cc>
    
    <cc>xtc4uall</cc>
    
    <cc>ydelendik</cc>
          
          <cf_tracking_e10s>---</cf_tracking_e10s>
          <cf_blocking_webextensions>---</cf_blocking_webextensions>
          <cf_firefox_messaging_system>---</cf_firefox_messaging_system>
          <cf_geckoview>---</cf_geckoview>
          <cf_backlog>---</cf_backlog>
          <cf_bmo_component_move>---</cf_bmo_component_move>
          <cf_platform_rel>---</cf_platform_rel>
          <cf_root_cause>---</cf_root_cause>
          <cf_data_science_product_support_area>---</cf_data_science_product_support_area>
          <cf_tracking_p11>---</cf_tracking_p11>
          <cf_tracking_win>---</cf_tracking_win>
          <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_status_firefox14>---</cf_status_firefox14>
          <cf_accessibility_severity>---</cf_accessibility_severity>
          <cf_tracking_firefox15>---</cf_tracking_firefox15>
          <cf_status_firefox15>---</cf_status_firefox15>
          <cf_tracking_firefox16>---</cf_tracking_firefox16>
          <cf_status_firefox16>---</cf_status_firefox16>
          <cf_tracking_firefox17>---</cf_tracking_firefox17>
          <cf_status_firefox17>---</cf_status_firefox17>
          <cf_tracking_firefox18>---</cf_tracking_firefox18>
          <cf_status_firefox18>---</cf_status_firefox18>
          <cf_tracking_firefox19>---</cf_tracking_firefox19>
          <cf_install_update_workflow>---</cf_install_update_workflow>
          <cf_status_firefox19>---</cf_status_firefox19>
          <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_status_firefox29>---</cf_status_firefox29>
          <cf_size_estimate>L</cf_size_estimate>
          <cf_tracking_firefox30>---</cf_tracking_firefox30>
          <cf_status_firefox30>---</cf_status_firefox30>
          <cf_tracking_firefox31>---</cf_tracking_firefox31>
          <cf_status_firefox31>---</cf_status_firefox31>
          <cf_tracking_firefox32>---</cf_tracking_firefox32>
          <cf_status_firefox32>---</cf_status_firefox32>
          <cf_tracking_firefox33>---</cf_tracking_firefox33>
          <cf_status_firefox33>---</cf_status_firefox33>
          <cf_tracking_firefox34>---</cf_tracking_firefox34>
          <cf_webcompat_priority>---</cf_webcompat_priority>
          <cf_status_firefox34>---</cf_status_firefox34>
          <cf_tracking_firefox35>---</cf_tracking_firefox35>
          <cf_status_firefox35>---</cf_status_firefox35>
          <cf_tracking_firefox36>---</cf_tracking_firefox36>
          <cf_status_firefox36>---</cf_status_firefox36>
          <cf_tracking_firefox37>---</cf_tracking_firefox37>
          <cf_status_firefox37>---</cf_status_firefox37>
          <cf_tracking_firefox38>---</cf_tracking_firefox38>
          <cf_status_firefox38>---</cf_status_firefox38>
          <cf_tracking_firefox38_0_5>---</cf_tracking_firefox38_0_5>
          <cf_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_tracking_thunderbird_41>---</cf_tracking_thunderbird_41>
          <cf_blocking_seamonkey21>---</cf_blocking_seamonkey21>
          <cf_status_seamonkey21>---</cf_status_seamonkey21>
          <cf_status_thunderbird_41>---</cf_status_thunderbird_41>
          <cf_tracking_thunderbird_42>---</cf_tracking_thunderbird_42>
          <cf_tracking_seamonkey22>---</cf_tracking_seamonkey22>
          <cf_status_seamonkey22>---</cf_status_seamonkey22>
          <cf_status_thunderbird_42>---</cf_status_thunderbird_42>
          <cf_tracking_seamonkey23>---</cf_tracking_seamonkey23>
          <cf_tracking_thunderbird_43>---</cf_tracking_thunderbird_43>
          <cf_status_thunderbird_43>---</cf_status_thunderbird_43>
          <cf_status_seamonkey23>---</cf_status_seamonkey23>
          <cf_tracking_thunderbird_44>---</cf_tracking_thunderbird_44>
          <cf_tracking_seamonkey24>---</cf_tracking_seamonkey24>
          <cf_status_seamonkey24>---</cf_status_seamonkey24>
          <cf_status_thunderbird_44>---</cf_status_thunderbird_44>
          <cf_tracking_seamonkey25>---</cf_tracking_seamonkey25>
          <cf_status_seamonkey25>---</cf_status_seamonkey25>
          <cf_tracking_seamonkey26>---</cf_tracking_seamonkey26>
          <cf_status_seamonkey26>---</cf_status_seamonkey26>
          <cf_tracking_seamonkey27>---</cf_tracking_seamonkey27>
          <cf_status_seamonkey27>---</cf_status_seamonkey27>
          <cf_tracking_seamonkey28>---</cf_tracking_seamonkey28>
          <cf_status_seamonkey28>---</cf_status_seamonkey28>
          <cf_tracking_seamonkey29>---</cf_tracking_seamonkey29>
          <cf_status_seamonkey29>---</cf_status_seamonkey29>
          <cf_tracking_seamonkey210>---</cf_tracking_seamonkey210>
          <cf_status_seamonkey210>---</cf_status_seamonkey210>
          <cf_tracking_seamonkey211>---</cf_tracking_seamonkey211>
          <cf_status_seamonkey211>---</cf_status_seamonkey211>
          <cf_tracking_seamonkey212>---</cf_tracking_seamonkey212>
          <cf_status_seamonkey212>---</cf_status_seamonkey212>
          <cf_tracking_seamonkey213>---</cf_tracking_seamonkey213>
          <cf_status_seamonkey213>---</cf_status_seamonkey213>
          <cf_tracking_seamonkey214>---</cf_tracking_seamonkey214>
          <cf_status_seamonkey214>---</cf_status_seamonkey214>
          <cf_tracking_seamonkey215>---</cf_tracking_seamonkey215>
          <cf_status_seamonkey215>---</cf_status_seamonkey215>
          <cf_tracking_seamonkey216>---</cf_tracking_seamonkey216>
          <cf_status_seamonkey216>---</cf_status_seamonkey216>
          <cf_tracking_seamonkey217>---</cf_tracking_seamonkey217>
          <cf_status_seamonkey217>---</cf_status_seamonkey217>
          <cf_tracking_seamonkey218>---</cf_tracking_seamonkey218>
          <cf_status_seamonkey218>---</cf_status_seamonkey218>
          <cf_tracking_seamonkey219>---</cf_tracking_seamonkey219>
          <cf_status_seamonkey219>---</cf_status_seamonkey219>
          <cf_tracking_seamonkey220>---</cf_tracking_seamonkey220>
          <cf_status_seamonkey220>---</cf_status_seamonkey220>
          <cf_tracking_seamonkey221>---</cf_tracking_seamonkey221>
          <cf_status_seamonkey221>---</cf_status_seamonkey221>
          <cf_tracking_seamonkey222>---</cf_tracking_seamonkey222>
          <cf_status_seamonkey222>---</cf_status_seamonkey222>
          <cf_tracking_seamonkey223>---</cf_tracking_seamonkey223>
          <cf_status_seamonkey223>---</cf_status_seamonkey223>
          <cf_tracking_thunderbird_45>---</cf_tracking_thunderbird_45>
          <cf_tracking_seamonkey224>---</cf_tracking_seamonkey224>
          <cf_status_thunderbird_45>---</cf_status_thunderbird_45>
          <cf_tracking_thunderbird_46>---</cf_tracking_thunderbird_46>
          <cf_status_thunderbird_46>---</cf_status_thunderbird_46>
          <cf_status_seamonkey224>---</cf_status_seamonkey224>
          <cf_tracking_thunderbird_47>---</cf_tracking_thunderbird_47>
          <cf_status_thunderbird_47>---</cf_status_thunderbird_47>
          <cf_tracking_thunderbird_48>---</cf_tracking_thunderbird_48>
          <cf_tracking_seamonkey225>---</cf_tracking_seamonkey225>
          <cf_status_thunderbird_48>---</cf_status_thunderbird_48>
          <cf_tracking_thunderbird_49>---</cf_tracking_thunderbird_49>
          <cf_status_thunderbird_49>---</cf_status_thunderbird_49>
          <cf_tracking_thunderbird_50>---</cf_tracking_thunderbird_50>
          <cf_status_thunderbird_50>---</cf_status_thunderbird_50>
          <cf_status_seamonkey225>---</cf_status_seamonkey225>
          <cf_status_seamonkey226>---</cf_status_seamonkey226>
          <cf_tracking_seamonkey226>---</cf_tracking_seamonkey226>
          <cf_status_seamonkey227>---</cf_status_seamonkey227>
          <cf_tracking_seamonkey227>---</cf_tracking_seamonkey227>
          <cf_status_seamonkey228>---</cf_status_seamonkey228>
          <cf_tracking_seamonkey228>---</cf_tracking_seamonkey228>
          <cf_status_seamonkey229>---</cf_status_seamonkey229>
          <cf_tracking_thunderbird_esr24>---</cf_tracking_thunderbird_esr24>
          <cf_colo_site>---</cf_colo_site>
          <cf_tracking_seamonkey229>---</cf_tracking_seamonkey229>
          <cf_status_thunderbird_esr24>---</cf_status_thunderbird_esr24>
          <cf_tracking_thunderbird_esr31>---</cf_tracking_thunderbird_esr31>
          <cf_status_thunderbird_esr31>---</cf_status_thunderbird_esr31>
          <cf_tracking_thunderbird_esr38>---</cf_tracking_thunderbird_esr38>
          <cf_status_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_thunderbird_51>---</cf_tracking_thunderbird_51>
          <cf_tracking_seamonkey232>---</cf_tracking_seamonkey232>
          <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_tracking_seamonkey233>---</cf_tracking_seamonkey233>
          <cf_status_thunderbird_53>---</cf_status_thunderbird_53>
          <cf_tracking_thunderbird_54>---</cf_tracking_thunderbird_54>
          <cf_status_thunderbird_54>---</cf_status_thunderbird_54>
          <cf_tracking_thunderbird_55>---</cf_tracking_thunderbird_55>
          <cf_tracking_thunderbird_esr102>---</cf_tracking_thunderbird_esr102>
          <cf_status_thunderbird_55>---</cf_status_thunderbird_55>
          <cf_status_thunderbird_esr102>---</cf_status_thunderbird_esr102>
          <cf_status_seamonkey233>---</cf_status_seamonkey233>
          <cf_tracking_thunderbird_56>---</cf_tracking_thunderbird_56>
          <cf_status_thunderbird_56>---</cf_status_thunderbird_56>
          <cf_tracking_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_seamonkey237>---</cf_status_seamonkey237>
          <cf_status_thunderbird_65>---</cf_status_thunderbird_65>
          <cf_tracking_thunderbird_66>---</cf_tracking_thunderbird_66>
          <cf_status_thunderbird_66>---</cf_status_thunderbird_66>
          <cf_tracking_thunderbird_67>---</cf_tracking_thunderbird_67>
          <cf_status_thunderbird_67>---</cf_status_thunderbird_67>
          <cf_tracking_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_crash_signature></cf_crash_signature>
          <cf_status_seamonkey239>---</cf_status_seamonkey239>
          <cf_tracking_seamonkey240>---</cf_tracking_seamonkey240>
          <cf_tracking_thunderbird_70>---</cf_tracking_thunderbird_70>
          
          <cf_status_seamonkey240>---</cf_status_seamonkey240>
          <cf_status_thunderbird_71>---</cf_status_thunderbird_71>
          <cf_tracking_thunderbird_71>---</cf_tracking_thunderbird_71>
          <cf_tracking_seamonkey241>---</cf_tracking_seamonkey241>
          <cf_status_seamonkey241>---</cf_status_seamonkey241>
          <cf_status_thunderbird_72>---</cf_status_thunderbird_72>
          <cf_tracking_thunderbird_72>---</cf_tracking_thunderbird_72>
          <cf_tracking_seamonkey242>---</cf_tracking_seamonkey242>
          <cf_status_thunderbird_73>---</cf_status_thunderbird_73>
          <cf_status_seamonkey242>---</cf_status_seamonkey242>
          <cf_tracking_seamonkey243>---</cf_tracking_seamonkey243>
          <cf_tracking_thunderbird_73>---</cf_tracking_thunderbird_73>
          <cf_status_thunderbird_74>---</cf_status_thunderbird_74>
          <cf_status_seamonkey243>---</cf_status_seamonkey243>
          <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_status_thunderbird_77>---</cf_status_thunderbird_77>
          <cf_tracking_seamonkey245>---</cf_tracking_seamonkey245>
          <cf_status_seamonkey245>---</cf_status_seamonkey245>
          <cf_status_thunderbird_78>---</cf_status_thunderbird_78>
          <cf_tracking_thunderbird_77>---</cf_tracking_thunderbird_77>
          <cf_status_thunderbird_79>---</cf_status_thunderbird_79>
          <cf_tracking_seamonkey246>---</cf_tracking_seamonkey246>
          <cf_tracking_thunderbird_78>---</cf_tracking_thunderbird_78>
          <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_tracking_seamonkey247>---</cf_tracking_seamonkey247>
          <cf_status_thunderbird_81>---</cf_status_thunderbird_81>
          <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_status_thunderbird_86>---</cf_status_thunderbird_86>
          <cf_blocking_kilimanjaro>---</cf_blocking_kilimanjaro>
          <cf_tracking_thunderbird_86>---</cf_tracking_thunderbird_86>
          <cf_status_thunderbird_87>---</cf_status_thunderbird_87>
          <cf_tracking_seamonkey249>---</cf_tracking_seamonkey249>
          <cf_blocking_b2g>---</cf_blocking_b2g>
          <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_status_thunderbird_90>---</cf_status_thunderbird_90>
          <cf_status_seamonkey250>---</cf_status_seamonkey250>
          <cf_ux_b2g>---</cf_ux_b2g>
          <cf_tracking_thunderbird_90>---</cf_tracking_thunderbird_90>
          <cf_b2g_ota_blocker>---</cf_b2g_ota_blocker>
          <cf_status_thunderbird_91>---</cf_status_thunderbird_91>
          <cf_tracking_seamonkey251>---</cf_tracking_seamonkey251>
          <cf_tracking_thunderbird_91>---</cf_tracking_thunderbird_91>
          <cf_status_seamonkey251>---</cf_status_seamonkey251>
          <cf_status_thunderbird_92>---</cf_status_thunderbird_92>
          <cf_tracking_thunderbird_92>---</cf_tracking_thunderbird_92>
          <cf_status_thunderbird_93>---</cf_status_thunderbird_93>
          <cf_tracking_seamonkey252>---</cf_tracking_seamonkey252>
          <cf_tracking_thunderbird_93>---</cf_tracking_thunderbird_93>
          <cf_status_thunderbird_94>---</cf_status_thunderbird_94>
          <cf_status_seamonkey252>---</cf_status_seamonkey252>
          <cf_tracking_thunderbird_94>---</cf_tracking_thunderbird_94>
          <cf_status_thunderbird_95>---</cf_status_thunderbird_95>
          <cf_status_seamonkey253>---</cf_status_seamonkey253>
          <cf_tracking_seamonkey253>---</cf_tracking_seamonkey253>
          <cf_tracking_thunderbird_95>---</cf_tracking_thunderbird_95>
          <cf_status_thunderbird_96>---</cf_status_thunderbird_96>
          <cf_tracking_seamonkey254>---</cf_tracking_seamonkey254>
          <cf_tracking_thunderbird_96>---</cf_tracking_thunderbird_96>
          <cf_status_thunderbird_97>---</cf_status_thunderbird_97>
          <cf_status_seamonkey254>---</cf_status_seamonkey254>
          <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_thunderbird_100>---</cf_status_thunderbird_100>
          <cf_status_seamonkey256>---</cf_status_seamonkey256>
          <cf_tracking_thunderbird_100>---</cf_tracking_thunderbird_100>
          <cf_tracking_seamonkey256>---</cf_tracking_seamonkey256>
          <cf_status_seamonkey257esr>---</cf_status_seamonkey257esr>
          <cf_status_thunderbird_101>---</cf_status_thunderbird_101>
          <cf_tracking_seamonkey257esr>---</cf_tracking_seamonkey257esr>
          <cf_tracking_thunderbird_101>---</cf_tracking_thunderbird_101>
          <cf_status_thunderbird_102>---</cf_status_thunderbird_102>
          <cf_tracking_thunderbird_102>---</cf_tracking_thunderbird_102>
          <cf_status_seamonkey258>---</cf_status_seamonkey258>
          <cf_status_thunderbird_103>---</cf_status_thunderbird_103>
          <cf_tracking_thunderbird_103>---</cf_tracking_thunderbird_103>
          <cf_status_thunderbird_104>---</cf_status_thunderbird_104>
          <cf_tracking_seamonkey258>---</cf_tracking_seamonkey258>
          <cf_tracking_thunderbird_104>---</cf_tracking_thunderbird_104>
          <cf_status_thunderbird_105>---</cf_status_thunderbird_105>
          <cf_status_seamonkey259>---</cf_status_seamonkey259>
          <cf_tracking_thunderbird_105>---</cf_tracking_thunderbird_105>
          <cf_status_thunderbird_106>---</cf_status_thunderbird_106>
          <cf_tracking_seamonkey259>---</cf_tracking_seamonkey259>
          <cf_tracking_thunderbird_esr115>---</cf_tracking_thunderbird_esr115>
          <cf_status_fxios_v1_0>---</cf_status_fxios_v1_0>
          <cf_status_thunderbird_esr115>---</cf_status_thunderbird_esr115>
          <cf_tracking_thunderbird_106>---</cf_tracking_thunderbird_106>
          <cf_status_fxios_v1_1>---</cf_status_fxios_v1_1>
          <cf_status_fxios_v1_0_5>---</cf_status_fxios_v1_0_5>
          <cf_status_fxios_v2_0>---</cf_status_fxios_v2_0>
          <cf_status_fxios_v3_0>---</cf_status_fxios_v3_0>
          <cf_tracking_thunderbird_esr128>---</cf_tracking_thunderbird_esr128>
          <cf_status_seamonkey260>---</cf_status_seamonkey260>
          <cf_status_fxios_v4_0>---</cf_status_fxios_v4_0>
          <cf_status_thunderbird_107>---</cf_status_thunderbird_107>
          <cf_tracking_thunderbird_107>---</cf_tracking_thunderbird_107>
          <cf_status_thunderbird_esr128>---</cf_status_thunderbird_esr128>
          <cf_status_fxios_v5_0>---</cf_status_fxios_v5_0>
          <cf_tracking_seamonkey260>---</cf_tracking_seamonkey260>
          <cf_tracking_thunderbird_esr140>---</cf_tracking_thunderbird_esr140>
          <cf_status_thunderbird_108>---</cf_status_thunderbird_108>
          <cf_tracking_thunderbird_108>---</cf_tracking_thunderbird_108>
          <cf_status_fxios_v5_1>---</cf_status_fxios_v5_1>
          <cf_status_thunderbird_esr140>---</cf_status_thunderbird_esr140>
          <cf_status_fxios_v5_2>---</cf_status_fxios_v5_2>
          <cf_status_fxios_v5_3>---</cf_status_fxios_v5_3>
          <cf_status_fxios_v6_0>---</cf_status_fxios_v6_0>
          <cf_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_tracking_thunderbird_112>---</cf_tracking_thunderbird_112>
          <cf_status_fxios_v7_4>---</cf_status_fxios_v7_4>
          <cf_status_fxios_v7_5>---</cf_status_fxios_v7_5>
          <cf_status_fxios_v7_6>---</cf_status_fxios_v7_6>
          <cf_status_thunderbird_113>---</cf_status_thunderbird_113>
          <cf_tracking_thunderbird_113>---</cf_tracking_thunderbird_113>
          <cf_tracking_seamonkey263>---</cf_tracking_seamonkey263>
          <cf_status_thunderbird_114>---</cf_status_thunderbird_114>
          <cf_tracking_thunderbird_114>---</cf_tracking_thunderbird_114>
          <cf_status_seamonkey263>---</cf_status_seamonkey263>
          <cf_status_thunderbird_115>---</cf_status_thunderbird_115>
          <cf_tracking_thunderbird_115>---</cf_tracking_thunderbird_115>
          
          <cf_status_thunderbird_116>---</cf_status_thunderbird_116>
          <cf_tracking_thunderbird_116>---</cf_tracking_thunderbird_116>
          <cf_status_thunderbird_117>---</cf_status_thunderbird_117>
          <cf_tracking_thunderbird_117>---</cf_tracking_thunderbird_117>
          <cf_status_thunderbird_118>---</cf_status_thunderbird_118>
          <cf_tracking_thunderbird_118>---</cf_tracking_thunderbird_118>
          <cf_status_thunderbird_119>---</cf_status_thunderbird_119>
          <cf_tracking_thunderbird_119>---</cf_tracking_thunderbird_119>
          <cf_status_thunderbird_120>---</cf_status_thunderbird_120>
          <cf_tracking_thunderbird_120>---</cf_tracking_thunderbird_120>
          <cf_status_thunderbird_121>---</cf_status_thunderbird_121>
          <cf_tracking_thunderbird_121>---</cf_tracking_thunderbird_121>
          <cf_status_thunderbird_122>---</cf_status_thunderbird_122>
          <cf_tracking_thunderbird_122>---</cf_tracking_thunderbird_122>
          <cf_status_thunderbird_123>---</cf_status_thunderbird_123>
          <cf_tracking_thunderbird_123>---</cf_tracking_thunderbird_123>
          <cf_status_thunderbird_124>---</cf_status_thunderbird_124>
          <cf_tracking_thunderbird_124>---</cf_tracking_thunderbird_124>
          <cf_status_thunderbird_125>---</cf_status_thunderbird_125>
          <cf_tracking_thunderbird_125>---</cf_tracking_thunderbird_125>
          <cf_status_thunderbird_126>---</cf_status_thunderbird_126>
          <cf_tracking_thunderbird_126>---</cf_tracking_thunderbird_126>
          <cf_status_thunderbird_127>---</cf_status_thunderbird_127>
          <cf_tracking_thunderbird_127>---</cf_tracking_thunderbird_127>
          <cf_status_thunderbird_128>---</cf_status_thunderbird_128>
          <cf_tracking_thunderbird_128>---</cf_tracking_thunderbird_128>
          <cf_status_thunderbird_129>---</cf_status_thunderbird_129>
          <cf_tracking_thunderbird_129>---</cf_tracking_thunderbird_129>
          <cf_status_thunderbird_130>---</cf_status_thunderbird_130>
          <cf_tracking_thunderbird_130>---</cf_tracking_thunderbird_130>
          <cf_status_thunderbird_131>---</cf_status_thunderbird_131>
          <cf_tracking_thunderbird_131>---</cf_tracking_thunderbird_131>
          <cf_status_thunderbird_132>---</cf_status_thunderbird_132>
          <cf_tracking_thunderbird_132>---</cf_tracking_thunderbird_132>
          <cf_status_thunderbird_133>---</cf_status_thunderbird_133>
          <cf_tracking_thunderbird_133>---</cf_tracking_thunderbird_133>
          <cf_status_thunderbird_134>---</cf_status_thunderbird_134>
          <cf_tracking_thunderbird_134>---</cf_tracking_thunderbird_134>
          <cf_status_thunderbird_135>---</cf_status_thunderbird_135>
          <cf_tracking_thunderbird_135>---</cf_tracking_thunderbird_135>
          <cf_last_resolved>2026-01-14 17:34:59</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>Please set any new dependency to new meta bug 2010319.
webcompat-risk:low</cf_user_story>
          <cf_mozilla_project>---</cf_mozilla_project>
          <cf_machine_state>---</cf_machine_state>
          <cf_qa_whiteboard></cf_qa_whiteboard>
          <cf_fx_iteration>---</cf_fx_iteration>
          <cf_fx_points>---</cf_fx_points>
          
          <cf_has_str>---</cf_has_str>
          <cf_cab_review>---</cf_cab_review>
          <cf_status_fxios_v8_0>---</cf_status_fxios_v8_0>
          <cf_status_fxios_v8_1>---</cf_status_fxios_v8_1>
          <cf_status_fxios_v8_2>---</cf_status_fxios_v8_2>
          <cf_status_fxios_v8_3>---</cf_status_fxios_v8_3>
          <cf_status_fxios_v8_4>---</cf_status_fxios_v8_4>
          <cf_status_fxios_v9_0>---</cf_status_fxios_v9_0>
          <cf_status_fxios_v9_1>---</cf_status_fxios_v9_1>
          <cf_status_fxios_v9_2>---</cf_status_fxios_v9_2>
          <cf_status_fxios_v9_3>---</cf_status_fxios_v9_3>
          <cf_status_fxios_v9_4>---</cf_status_fxios_v9_4>
          <cf_status_fxios_v10_0>---</cf_status_fxios_v10_0>
          <cf_status_fxios_v10_1>---</cf_status_fxios_v10_1>
          <cf_status_fxios_v10_2>---</cf_status_fxios_v10_2>
          <cf_status_fxios_v10_5>---</cf_status_fxios_v10_5>
          <cf_status_fxios_v10_6>---</cf_status_fxios_v10_6>
          <cf_status_fxios_v11_0>---</cf_status_fxios_v11_0>
          <cf_status_fxios_v11_1>---</cf_status_fxios_v11_1>
          <cf_status_fxios_v12_0>---</cf_status_fxios_v12_0>
          <cf_status_fxios_v12_1>---</cf_status_fxios_v12_1>
          <cf_status_fxios_v12_2>---</cf_status_fxios_v12_2>
          <cf_status_fxios_v13_0>---</cf_status_fxios_v13_0>
          <cf_status_fxios_v13_1>---</cf_status_fxios_v13_1>
          <cf_status_fxios_v13_2>---</cf_status_fxios_v13_2>
          <cf_status_fxios_v13_3>---</cf_status_fxios_v13_3>
          <cf_status_fxios_v14_0>---</cf_status_fxios_v14_0>
          <cf_status_fxios_v14_1>---</cf_status_fxios_v14_1>
          <cf_status_fxios_v14_2>---</cf_status_fxios_v14_2>
          <cf_status_fxios_v14_3>---</cf_status_fxios_v14_3>
          <cf_status_fxios_v15_0>---</cf_status_fxios_v15_0>
          <cf_status_fxios_v15_1>---</cf_status_fxios_v15_1>
          <cf_status_fxios_v16_0>---</cf_status_fxios_v16_0>
          <cf_tracking_geckoview62>---</cf_tracking_geckoview62>
          <cf_status_geckoview62>---</cf_status_geckoview62>
          <cf_tracking_geckoview63>---</cf_tracking_geckoview63>
          <cf_status_geckoview63>---</cf_status_geckoview63>
          <cf_tracking_geckoview64>---</cf_tracking_geckoview64>
          <cf_status_geckoview64>---</cf_status_geckoview64>
          <cf_tracking_geckoview65>---</cf_tracking_geckoview65>
          <cf_status_geckoview65>---</cf_status_geckoview65>
          <cf_tracking_geckoview66>---</cf_tracking_geckoview66>
          <cf_status_geckoview66>---</cf_status_geckoview66>
          <cf_tracking_firefox50>---</cf_tracking_firefox50>
          <cf_status_firefox50>---</cf_status_firefox50>
          <cf_tracking_firefox51>---</cf_tracking_firefox51>
          <cf_status_firefox51>---</cf_status_firefox51>
          <cf_tracking_firefox52>---</cf_tracking_firefox52>
          <cf_status_firefox52>---</cf_status_firefox52>
          <cf_tracking_firefox_esr52>---</cf_tracking_firefox_esr52>
          <cf_status_firefox_esr52>---</cf_status_firefox_esr52>
          <cf_tracking_firefox_esr60>---</cf_tracking_firefox_esr60>
          <cf_status_firefox_esr60>---</cf_status_firefox_esr60>
          <cf_tracking_firefox_esr68>---</cf_tracking_firefox_esr68>
          <cf_status_firefox_esr68>---</cf_status_firefox_esr68>
          <cf_tracking_firefox53>---</cf_tracking_firefox53>
          <cf_tracking_firefox_esr78>---</cf_tracking_firefox_esr78>
          <cf_status_firefox_esr78>---</cf_status_firefox_esr78>
          <cf_tracking_firefox_esr91>---</cf_tracking_firefox_esr91>
          <cf_status_firefox_esr91>---</cf_status_firefox_esr91>
          <cf_status_firefox53>---</cf_status_firefox53>
          <cf_tracking_firefox_esr102>---</cf_tracking_firefox_esr102>
          <cf_status_firefox_esr102>---</cf_status_firefox_esr102>
          <cf_tracking_firefox_esr115>---</cf_tracking_firefox_esr115>
          <cf_status_firefox_esr115>---</cf_status_firefox_esr115>
          <cf_tracking_firefox54>---</cf_tracking_firefox54>
          <cf_tracking_firefox_esr128>---</cf_tracking_firefox_esr128>
          <cf_status_firefox_esr128>---</cf_status_firefox_esr128>
          <cf_tracking_firefox_esr140>---</cf_tracking_firefox_esr140>
          <cf_status_firefox_esr140>---</cf_status_firefox_esr140>
          <cf_status_firefox54>---</cf_status_firefox54>
          <cf_tracking_firefox_esr153>---</cf_tracking_firefox_esr153>
          <cf_status_firefox_esr153>---</cf_status_firefox_esr153>
          <cf_tracking_firefox55>---</cf_tracking_firefox55>
          <cf_status_firefox55>---</cf_status_firefox55>
          <cf_tracking_firefox56>---</cf_tracking_firefox56>
          <cf_status_firefox56>---</cf_status_firefox56>
          <cf_tracking_firefox57>---</cf_tracking_firefox57>
          <cf_status_firefox57>---</cf_status_firefox57>
          <cf_tracking_firefox58>---</cf_tracking_firefox58>
          <cf_status_firefox58>---</cf_status_firefox58>
          <cf_tracking_firefox59>---</cf_tracking_firefox59>
          <cf_status_firefox59>---</cf_status_firefox59>
          <cf_tracking_firefox60>---</cf_tracking_firefox60>
          <cf_status_firefox60>---</cf_status_firefox60>
          <cf_tracking_firefox61>---</cf_tracking_firefox61>
          <cf_status_firefox61>---</cf_status_firefox61>
          <cf_tracking_firefox62>---</cf_tracking_firefox62>
          <cf_status_firefox62>---</cf_status_firefox62>
          <cf_tracking_firefox63>---</cf_tracking_firefox63>
          <cf_status_firefox63>---</cf_status_firefox63>
          <cf_tracking_firefox64>---</cf_tracking_firefox64>
          <cf_status_firefox64>---</cf_status_firefox64>
          <cf_tracking_firefox65>---</cf_tracking_firefox65>
          <cf_status_firefox65>---</cf_status_firefox65>
          <cf_tracking_firefox66>---</cf_tracking_firefox66>
          <cf_status_firefox66>---</cf_status_firefox66>
          <cf_tracking_firefox67>---</cf_tracking_firefox67>
          <cf_status_firefox67>---</cf_status_firefox67>
          <cf_tracking_firefox67_0_1>---</cf_tracking_firefox67_0_1>
          <cf_status_firefox67_0_1>---</cf_status_firefox67_0_1>
          <cf_tracking_firefox68>---</cf_tracking_firefox68>
          <cf_status_firefox68>---</cf_status_firefox68>
          <cf_tracking_firefox69>---</cf_tracking_firefox69>
          <cf_status_firefox69>---</cf_status_firefox69>
          <cf_tracking_firefox70>---</cf_tracking_firefox70>
          <cf_status_firefox70>---</cf_status_firefox70>
          <cf_tracking_firefox71>---</cf_tracking_firefox71>
          <cf_status_firefox71>---</cf_status_firefox71>
          <cf_status_firefox72>---</cf_status_firefox72>
          <cf_tracking_firefox72>---</cf_tracking_firefox72>
          <cf_tracking_firefox73>---</cf_tracking_firefox73>
          <cf_status_firefox73>---</cf_status_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>2026-01-14 17:34:59</cf_last_resolved>
          
          <votes>54</votes>

      

      

      <flag name="sec-review"
          id="606019"
          type_id="791"
          status="+"
          setter="cdiehl"
    />

          <long_desc isprivate="0">
            <commentid>5231889</commentid>
            <who name="antistress">anti-stress</who>
            <bug_when>2011-01-27 06:38:49 -0800</bug_when>
            <thetext>User-Agent:       Mozilla/5.0 (Windows NT 5.1; rv:2.0b10) Gecko/20100101 Firefox/4.0b10
Build Identifier: 

The track element (within HTML5) allows in particular to subtitle videos which is quite important especialy for non-English speakers since a lot of video on the Web are in English.
As a french speaker I&apos;m particularly interested in subtitling web videos to spraed their messages.
At present time the best thing to do is to use JavaScript (Universal subtitles widget, JQuery-srt...) which is not optimal since Planet Websites and RSS feed reader don&apos;t allow JavaScript.
Being able to use an HTML element would be a great improvement for i18n and a11y.
The track HTML5 element seems perfect for that.
Thanks

http://blog.gingertech.net/2010/10/02/state-of-media-accessibility-in-html5/
http://www.w3.org/TR/html5/video.html#the-track-element


Reproducible: Always

Steps to Reproduce:
Use the track HTML5 element in a web page
Actual Results:  
track element is not taken into accound

Expected Results:  
it should allow to display (in particular) subtitles without the need og JavaScript</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5232980</commentid>
            <who name="Kyle Huey (Exited; not receiving bugmail, old account, do not use)">khuey</who>
            <bug_when>2011-01-27 12:05:25 -0800</bug_when>
            <thetext>Couldn&apos;t find an existing bug on this, so confirming.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5520256</commentid>
            <who name="antistress">anti-stress</who>
            <bug_when>2011-06-08 11:06:56 -0700</bug_when>
            <thetext>seems to be a dup of Bug 620664</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5521672</commentid>
            <who name="Matthew Gregan [:kinetik]">kinetik</who>
            <bug_when>2011-06-08 21:47:37 -0700</bug_when>
            <thetext>Bug 620664 was about adding support for the element to the HTML5 parser.  This bug is about implementing the element&apos;s functionality.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5522158</commentid>
            <who name="antistress">anti-stress</who>
            <bug_when>2011-06-09 06:21:45 -0700</bug_when>
            <thetext>Thanks.
Could we expect having preliminary support for WEBVTT files in Firefox this year (Firefox 6 or 7) since that Bug 620664 has already done his part ?

That would help open video on the web to succeed. As a french user, and considering that a lot of videos are in english, i really would like the feature to be implemented ASAP. This is about about adding a new possibility to video on the web which seems more important to me than only making existant things faster (which is also great :-)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5698328</commentid>
            <who name="antistress">anti-stress</who>
            <bug_when>2011-09-03 06:48:38 -0700</bug_when>
            <thetext>I&apos;m glad to see that somone (tnahk you Ralph Giles !) picked up this bug
I would love to help but i have no skill, sorry :-/

i don&apos;t know if it may help, but WebKit has done some progresses there :
https://bugs.webkit.org/show_bug.cgi?id=62882
https://bugs.webkit.org/show_bug.cgi?id=62881</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5851776</commentid>
            <who name="alexander :surkov (:asurkov)">surkov.alexander</who>
            <bug_when>2011-11-15 21:11:51 -0800</bug_when>
            <thetext>Ralph, are you going to take care about accessibility in this bug or should I file new one for this?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5975454</commentid>
            <who name="Scoobidiver (away)">scoobidiver</who>
            <bug_when>2012-01-12 08:29:41 -0800</bug_when>
            <thetext>IE 10 supports the track element (see http://msdn.microsoft.com/en-us/library/hh673566%28v=vs.85%29.aspx).
For an example, see http://ie.microsoft.com/testdrive/Graphics/VideoCaptions/</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6093783</commentid>
            <who name="antistress">anti-stress</who>
            <bug_when>2012-02-26 06:07:16 -0800</bug_when>
            <thetext>Hi, is there a roadmap concerning this feature implementation ?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6098069</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2012-02-27 22:07:47 -0800</bug_when>
            <thetext>Right. Roadmap.

I&apos;m slowly implementing this feature. There&apos;s a branch on github if you want to contribute patches, but I don&apos;t quite have something useful yet. The plan:

* Write a toy parser, just enough for the first demo
  (done, https://github.com/rillian/webrtc)
* Implement the HTML5 track element in the parser
  (already done by hsivonen in bug 620664)
* Implement the track element as an XPCOM interface
  (partially done. Patches on https://github.com/rillian/firefox/commits/webvtt)
* Add an anonymous content div to nsVideoFrame for caption display
  (done, patches on the same branch)

- Hook the parser up to a texttrack decoder and display captions
  (not done; this will be the first demo)
- Rewrite the parser library
  (will require security review)
- Probably rewrite the patch set in response to review comments
- Attempt to land basic webvtt caption support
- Support text track enable/disable and language preference matching in the default controls
- Support for rendering instructions, javascript interfaces, accessibility hooks
- Support text tracks encapsulated in Ogg and WebM media files</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6107508</commentid>
            <who name="Silvia Pfeiffer">silviapfeiffer1</who>
            <bug_when>2012-03-01 14:25:53 -0800</bug_when>
            <thetext>Surely you mean: https://github.com/rillian/webvtt . Also, have you seen https://bitbucket.org/annevk/webvtt/src/4f0cac5f64eb/parser.html ?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6108410</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2012-03-01 20:01:22 -0800</bug_when>
            <thetext>Indeed, I did. Thanks for the correction.

I had seen annevk&apos;s validator. Very cool!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6147055</commentid>
              <attachid>606673</attachid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2012-03-16 12:22:27 -0700</bug_when>
            <thetext>Created attachment 606673
work in progress dump

Demo patch. This isn&apos;t in any shape for use, it&apos;s just me figuring out how things work.

It does show (short!) webvtt overlays. I&apos;ve been testing with https://people.xiph.org/~giles/2012/sample.html</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6147068</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2012-03-16 12:25:05 -0700</bug_when>
            <thetext>(In reply to alexander :surkov from comment #6)
&gt; Ralph, are you going to take care about accessibility in this bug or should
&gt; I file new one for this?

I&apos;d like to support accessibility as I go along, but I need help with what to do. I tried the demo patch with a screen reader, but it didn&apos;t seem to see the captions. Is there an aria-role I can supply to make them visible? Some nsFrame attribute?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6147531</commentid>
            <who name="Silvia Pfeiffer">silviapfeiffer1</who>
            <bug_when>2012-03-16 14:40:19 -0700</bug_when>
            <thetext>With WebVTT cues, if they were rendered into the normal dom, I&apos;d suggest adding a aria-live attribute. That would get the screen reader to read it out as the text appears on screen (thus solving accessibility for type=description at the same time as for other types). Since I assume you are rendering the text into the shadow dom, you will have to figure out if you can make the elements in the shadow dom as accessible.

And, btw, the video controls are not accessible either - they would need a @tabindex to be reachable by keyboard and then roles on them such as &quot;button&quot; and @label or @aria-label to provide a short announcement text.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6154355</commentid>
            <who name="alexander :surkov (:asurkov)">surkov.alexander</who>
            <bug_when>2012-03-20 01:21:49 -0700</bug_when>
            <thetext>(In reply to Silvia Pfeiffer from comment #14)
&gt; Since I assume you
&gt; are rendering the text into the shadow dom, you will have to figure out if
&gt; you can make the elements in the shadow dom as accessible.

accessibility should pick it up since nsVideoFrame::AppendAnonymousContentTo is fitted. You could check accessible by DOM Inspector (Accessible Tree view). So all you need is you should put aria-live attribute on that anonymous div.

Silvia, does aria-live=&quot;assertive&quot; sound reasonable?

also it&apos;d be great if you can add a11y mochitest:
1) fix tree/test_media.html - http://mxr.mozilla.org/mozilla-central/source/accessible/tests/mochitest/tree/test_media.html?force=1
2) add elm/test_media_track.html to see if we show/hide events are fired for changed captions and container-live object attribute is exposed on event targets.

please let me know if you need more details

(In reply to Silvia Pfeiffer from comment #14)
&gt; And, btw, the video controls are not accessible either - they would need a
&gt; @tabindex to be reachable by keyboard and then roles on them such as
&gt; &quot;button&quot; and @label or @aria-label to provide a short announcement text.

well, they aren&apos;t reachable by tabbing and we have a bug for that but it sounds as different issue, no?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6157621</commentid>
            <who name="Silvia Pfeiffer">silviapfeiffer1</who>
            <bug_when>2012-03-20 17:32:14 -0700</bug_when>
            <thetext>(In reply to alexander :surkov from comment #15)
&gt; 
&gt; Silvia, does aria-live=&quot;assertive&quot; sound reasonable?

Absolutely. You don&apos;t want &quot;polite&quot; because then you might miss some text.


&gt; (In reply to Silvia Pfeiffer from comment #14)
&gt; &gt; And, btw, the video controls are not accessible either - they would need a
&gt; &gt; @tabindex to be reachable by keyboard and then roles on them such as
&gt; &gt; &quot;button&quot; and @label or @aria-label to provide a short announcement text.
&gt; 
&gt; well, they aren&apos;t reachable by tabbing and we have a bug for that but it
&gt; sounds as different issue, no?

Fair enough. :-)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6531981</commentid>
            <who name="Alex Vincent [:WeirdAl]">ajvincent</who>
            <bug_when>2012-08-04 11:04:23 -0700</bug_when>
            <thetext>I notice there hasn&apos;t been much work on this lately.  I&apos;m rather interested in the metadata &quot;kind&quot; of track.  Might it be simpler to implement that first (before subtitles, etc.), and work on the rest later?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6532514</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2012-08-04 22:54:05 -0700</bug_when>
            <thetext>I don&apos;t think so. I mean, the actual rendering is a separate piece, but most of the work to be done between here and there is writing a better parser.

I&apos;m not working on this at the moment though, so if you&apos;re interested in continuing the work in the current patch, feel free.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6541848</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2012-08-08 14:54:42 -0700</bug_when>
            <thetext>I&apos;m happy to offer guidance is someone else wants to work on this in the meantime.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6550816</commentid>
            <who name="David Bolter [:davidb] (NeedInfo me for attention)">dbolter</who>
            <bug_when>2012-08-13 09:48:31 -0700</bug_when>
            <thetext>Ralph do you have any bite sized pieces that could get reviewed and landed? (Prefed or #ifdef&apos;d off I guess?)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6551490</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2012-08-13 13:19:28 -0700</bug_when>
            <thetext>The plumbing to the video element and the overlay div for displaying the captions should be ready for review and can land without needing a pref since there&apos;s no way to feed them from web content.

The next pieces that need work are a non-toy webvtt parser, and the TextTrack dom interface, which IIRC needs some cleanup before it&apos;s ready for review.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6740260</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2012-10-17 16:58:06 -0700</bug_when>
            <thetext>BTW, a class as Seneca college is working on this bug during the current semester.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6981826</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2013-01-09 13:36:41 -0800</bug_when>
            <thetext>Ok, We want to get this going again, and this :humphd&apos;s Seneca college class is going to help.

First step is to get this patch up to date. Several class and file names have changed, so it isn&apos;t going to apply cleanly.

Then, we need to hide it behind a pref, split it into logical pieces, get them reviewed by the appropriate folks, and landed.

The current patch assumes you&apos;ve checked out the webvtt parse into media/webvtt, but that&apos;s not going to work for in-tree code. One of the questions for review-time is how we should resolve that. Probably import the current release in a separate bug, then rely on the runtime pref to block access until we&apos;re more confident in the implementation.

We can land the display part separately, though, since it doesn&apos;t depend on the parser.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6981840</commentid>
            <who name="David Humphrey (:humph)">david.humphrey</who>
            <bug_when>2013-01-09 13:39:53 -0800</bug_when>
            <thetext>&gt; Then, we need to hide it behind a pref, split it into logical pieces, get
&gt; them reviewed by the appropriate folks, and landed.

I&apos;d be interested to hear more about how you want to split it up.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6982746</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2013-01-09 16:27:38 -0800</bug_when>
            <thetext>The three obvious pieces are: the nsVideoFrame changes to add the display div, the import and build support for the parser library in media/webvtt, and the WebVTTDecoder (would be better as TextDecoder?) implementation in content/media/webvtt.

The TextTrack, TextTrackCue, etc. stubs should be rewritten to use the new webidl compiler.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6992099</commentid>
            <who name="David Humphrey (:humph)">david.humphrey</who>
            <bug_when>2013-01-11 11:53:44 -0800</bug_when>
            <thetext>I started converting the IDL in Ralph&apos;s patch to use our new webidl bindings, and there is an issue with TextTrackCue as currently defined, which uses a union of primitive types for the line attribute.  I talked to bz and this is not allowed per the WebIDL spec.  I filed https://www.w3.org/Bugs/Public/show_bug.cgi?id=20651.

Given:

enum AutoKeyword { &quot;auto&quot; };

[Constructor(double startTime, double endTime, DOMString text)]
interface TextTrackCue : EventTarget {
...
           attribute (long or AutoKeyword) line;



Traceback (most recent call last):
  File &quot;/Users/dave/Sites/repos/mozilla-central/config/pythonpath.py&quot;, line 56, in &lt;module&gt;
    main(sys.argv[1:])
  File &quot;/Users/dave/Sites/repos/mozilla-central/config/pythonpath.py&quot;, line 48, in main
    execfile(script, frozenglobals)
  File &quot;/Users/dave/Sites/repos/mozilla-central/dom/bindings/GlobalGen.py&quot;, line 78, in &lt;module&gt;
    main()
  File &quot;/Users/dave/Sites/repos/mozilla-central/dom/bindings/GlobalGen.py&quot;, line 56, in main
    parserResults = parser.finish()
  File &quot;/Users/dave/Sites/repos/mozilla-central/dom/bindings/parser/WebIDL.py&quot;, line 4148, in finish
    production.finish(self.globalScope())
  File &quot;/Users/dave/Sites/repos/mozilla-central/dom/bindings/parser/WebIDL.py&quot;, line 552, in finish
    member.finish(scope)
  File &quot;/Users/dave/Sites/repos/mozilla-central/dom/bindings/parser/WebIDL.py&quot;, line 2104, in finish
    t = self.type.complete(scope)
  File &quot;/Users/dave/Sites/repos/mozilla-central/dom/bindings/parser/WebIDL.py&quot;, line 1376, in complete
    [self.location, t.location, u.location])
WebIDL.WebIDLError: error: Flat member types of a union should be distinguishable, Long is not distinguishable from AutoKeyword (Wrapper), TextTrackCue.webidl line 22:21
           attribute (long or AutoKeyword) line;
                     ^
&lt;builtin type&gt;

TextTrackCue.webidl line 22:30
           attribute (long or AutoKeyword) line;</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6993683</commentid>
            <who name="Silvia Pfeiffer">silviapfeiffer1</who>
            <bug_when>2013-01-12 01:14:20 -0800</bug_when>
            <thetext>Canvas has the same union approach: http://www.whatwg.org/specs/web-apps/current-work/#2dcontext . Might be worth checking how that got resolved.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>6993897</commentid>
            <who name="David Humphrey (:humph)">david.humphrey</who>
            <bug_when>2013-01-12 05:40:58 -0800</bug_when>
            <thetext>We have webidl for CanvasRenderingContext2D using the new bindings now, but it does all of its unions without using primitive types.  That&apos;s the issue here.  We just need that fixed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7001306</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2013-01-14 19:37:15 -0800</bug_when>
            <thetext>(In reply to Ralph Giles (:rillian) from comment #25)
&gt; The three obvious pieces are: the nsVideoFrame changes to add the display
&gt; div, the import and build support for the parser library in media/webvtt,
&gt; and the WebVTTDecoder (would be better as TextDecoder?) implementation in
&gt; content/media/webvtt.

I don&apos;t think we need WebVTTDecoder to inherit from BuiltinDecoder (which has been renamed to MediaDecoder since this patch was first written).

MediaDecoder is designed to be the only decoder owned by the nsHTMLMediaElement, and includes a state machine and so on that assumes one contained audio and video track. We&apos;d be better off having some kind of custom TextTrackDecoder object that manages the libwebvtt decoder and co-operates with the MediaDecoderStateMachine (or the nsHTMLMediaElement if we can do it at that level). Then we don&apos;t pull in all the unnecessary cruft that comes in with being a MediaDecoder subclass.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7001356</commentid>
            <who name="Mardeg">mardeg</who>
            <bug_when>2013-01-14 19:58:29 -0800</bug_when>
            <thetext>(In reply to Chris Pearce (:cpearce) from comment #29)
&gt; We&apos;d be better off having some kind of
&gt; custom TextTrackDecoder object that manages the libwebvtt decoder and
&gt; co-operates with the MediaDecoderStateMachine (or the nsHTMLMediaElement if
&gt; we can do it at that level). Then we don&apos;t pull in all the unnecessary cruft
&gt; that comes in with being a MediaDecoder subclass.
Is that for better combining of &lt;audio&gt; elements with webvtt also?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7001396</commentid>
            <who name="Chris Pearce [:cpearce (Not reading bugmail)]">chris</who>
            <bug_when>2013-01-14 20:16:56 -0800</bug_when>
            <thetext>I think not inheriting from Builtin/MediaDecoder would make it easier and simpler to implement.

And if the TextTrackDecoder (or whatever we call it) co-operates with MediaDecoderStateMachine or nsHTMLMediaElement we&apos;ll be have support for both &lt;video&gt; and &lt;audio&gt; elements, since both nsHTMLVideoElement and nsHTMLAudioElement inherit from nsHTMLMediaElement.

Does that answer your question?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7001431</commentid>
            <who name="Mardeg">mardeg</who>
            <bug_when>2013-01-14 20:33:47 -0800</bug_when>
            <thetext>(In reply to Chris Pearce (:cpearce) from comment #31)
&gt; Does that answer your question?
Yes, thank you. My interest is in the placement of subtitles in relation to the &lt;audio&gt; element with and without the &quot;controls&quot; attribute, but I think that&apos;s more for bug 515898</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7024016</commentid>
              <attachid>704716</attachid>
            <who name="David Humphrey (:humph)">david.humphrey</who>
            <bug_when>2013-01-21 16:25:15 -0800</bug_when>
            <thetext>Created attachment 704716
Ralph&apos;s &quot;work in progress dump&quot; updated to Jan 21, 2012

I&apos;ve rewritten Ralph&apos;s original patch (thanks for doing so much ground work) to use the new WebIDL bindings--I&apos;m positive they aren&apos;t 100% correct yet, but this is hopefully not far off--among other things.  We&apos;ll fix it in post, as they say.  I just want to put this here for reference.  In order to build this patch, you have to also apply https://bug830879.bugzilla.mozilla.org/attachment.cgi?id=702428, see bug 830879.

At this point I want to hand the patch off to my students, so we&apos;ll be using this bug as a tracking bug, and filing smaller tickets in order to parallelize development.  We&apos;ll break bits of this patch out into those separate bugs.

NOTE: there is also work happening in https://github.com/mozilla/webvtt/pull/1 to get the libwebvtt C/C++ parser reviewed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7101412</commentid>
            <who name="Curtis Koenig [:curtisk-use curtis.koenig+bzATgmail.com]]">curtisk</who>
            <bug_when>2013-02-13 14:10:23 -0800</bug_when>
            <thetext>:cdiehl - would peach be good for this? If so then :rforbes can work on it
[moved from 833403]</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7101462</commentid>
            <who name="Christoph Diehl [:posidron]">cdiehl</who>
            <bug_when>2013-02-13 14:18:04 -0800</bug_when>
            <thetext>Yes, I will mentor rforbes in fuzzing WebVTT.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7235047</commentid>
            <who name="David Humphrey (:humph)">david.humphrey</who>
            <bug_when>2013-03-22 12:13:04 -0700</bug_when>
            <thetext>A note for us to follow-up on...

While rebasing today I hit an issue that required me to change the WebIDL for HTMLMediaElement for addTextTrack(), which is going to need a spec bug filed:

11:32 &lt; humph&gt; bz: the HTMLMediaElement has AddTextTrack( string, [optional] 
               string, [optional] string )
11:32 &lt; humph&gt; bz: which needs to call TextTrack() with strings
11:33 &lt; bz&gt; humph: that IDL is bogus
11:33 &lt; bz&gt; If the label argument was omitted, let label be the empty string.
11:33 &lt; bz&gt; If the language argument was omitted, let language be the empty string.
11:33 &lt; bz&gt; That&apos;s in the prose
11:33 &lt; bz&gt; should just be in the IDL and be done with it
11:33 &lt; bz&gt; So: TextTrack addTextTrack(DOMString kind, optional DOMString label = 
            &quot;&quot;, optional DOMString language = &quot;&quot;);
11:33 &lt; bz&gt; File spec bugs?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7236749</commentid>
            <who name="Silvia Pfeiffer">silviapfeiffer1</who>
            <bug_when>2013-03-23 01:14:15 -0700</bug_when>
            <thetext>Yes, sure, file a bug: https://www.w3.org/Bugs/Public/enter_bug.cgi?product=HTML%20WG or https://www.w3.org/Bugs/Public/enter_bug.cgi?product=WHATWG or both. :-)

&quot;optional&quot; is still relatively new to IDL, so we&apos;re slowly bringing it into the HTML spec.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7247062</commentid>
            <who name="">dc.loco</who>
            <bug_when>2013-03-26 15:33:52 -0700</bug_when>
            <thetext>I&apos;m a devotee of FOSS and working at Gallaudet University, the world&apos;s only accredited liberal arts university for deaf students (and we have an elementary school and secondary school for deaf students on the same campus), I&apos;m planning to follow this thread pretty closely. I just started using WEBVTT with the misunderstanding that support was broader.  I&apos;m not sure what I can do to help, other than test periodically...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7247102</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2013-03-26 15:42:09 -0700</bug_when>
            <thetext>(In reply to dc.loco from comment #38)
&gt; I&apos;m a devotee of FOSS and working at Gallaudet University

Hi there, thanks for your interest. Right now we most need coding and testing, so please do follow along if you&apos;re able to do either of those things!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7298549</commentid>
            <who name="wind">e1119130</who>
            <bug_when>2013-04-10 04:37:13 -0700</bug_when>
            <thetext>Great work everyone!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7299288</commentid>
            <who name="">vulcain</who>
            <bug_when>2013-04-10 07:53:16 -0700</bug_when>
            <thetext>Please Banish e1119130@rmqkr.net, i wrote the same message in a lot of bug</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7307253</commentid>
            <who name=":Ms2ger (he/him; ⌚ UTC+1/+2)">Ms2ger</who>
            <bug_when>2013-04-11 23:50:20 -0700</bug_when>
            <thetext>Duping forward to the bug with patches...

*** This bug has been marked as a duplicate of bug 833385 ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7308117</commentid>
            <who name="Robert Kaiser">kairo</who>
            <bug_when>2013-04-12 05:23:23 -0700</bug_when>
            <thetext>(In reply to :Ms2ger from comment #42)
&gt; Duping forward to the bug with patches...
&gt; 
&gt; *** This bug has been marked as a duplicate of bug 833385 ***

Umm, shouldn&apos;t all the dependencies of this one be added to the other one as well, then? I did that for the html5 and html5test bugs, but it probably needs to be done for the rest as well.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7308760</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2013-04-12 08:21:44 -0700</bug_when>
            <thetext>We were using this as a tracking bug. Please leave it open.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7434356</commentid>
            <who name="Alexander Farkas">alexander.farkas</who>
            <bug_when>2013-05-17 00:29:03 -0700</bug_when>
            <thetext>I have developed a very simple track/textrack polyfill (http://jsfiddle.net/trixta/QZJTM/) and also a script for styleable controls (https://github.com/aFarkas/jMediaelement).

My problem with the current Track spec and implementations as a webdeveloper are the following:

1. We need a way to shrink the rectangel in which the cues are displayed using CSS. 
The webvtt features for positioning are not suitable for all usecases. As soon as we develope custom styleable controls, which are placed over the video element, we need a way to &quot;reserve&quot; this space for those controls. Due to the fact, that this is depending on the style of our webpage and our mediaplayer and not related to the contetnt of the vtt file, it has to be defined using CSS. For example:

::cuedisplay {
    top: 0;
    left: 0;
    right: 0;
    bottom: 40px; /* space is needed for overlaying custom styleable controls at the bottom of the video */
}

2. There is no &apos;trackmode&apos; change event.
While we have a lot of special events for adding/removing tracks and cuechange/cueexit/cueenter. We do not have an event for the case, where a user changes the mode of a track. Again, this is for example needed for custom styleable controls. If the user changes the mode using the context menue from showing/disabled to disabled/showing we need an event for this to update for example the visual state of our controls. For example:

track.addEventListener(&apos;modechange&apos;, function(e){
    if(this.mode == &apos;showing&apos;){
        //do something
    } else {
        //do something else    
    }
});

Currently all custom styleable mediaplayers with track support, removedo not relay on the native implementations and handle the &quot;texttrack&quot; display with script. This is a shame. :-(

I know this is mainly spec related, but you guys are bringing the web forward :-D</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7434865</commentid>
            <who name="Caitlin Potter (:caitp)">caitlin.potter</who>
            <bug_when>2013-05-17 04:08:59 -0700</bug_when>
            <thetext>That&apos;s a great point Alexander Farkas, it would be a good for you to file a bug on http://dev.w3.org/html5/webvtt/ WRT this (and if possible, CC :rillian, :caitp, :reyre, and whoever else)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7434935</commentid>
            <who name="Caitlin Potter (:caitp)">caitlin.potter</who>
            <bug_when>2013-05-17 04:47:29 -0700</bug_when>
            <thetext>It might actually be better suited for http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#the-track-element actually, since that requirement would probably be desirable for any timed text format</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7437166</commentid>
            <who name="Alexander Farkas">alexander.farkas</who>
            <bug_when>2013-05-17 15:18:13 -0700</bug_when>
            <thetext>@Caitlin

Opened two bugs:
- https://www.w3.org/Bugs/Public/show_bug.cgi?id=22076
- https://www.w3.org/Bugs/Public/show_bug.cgi?id=22075

Hope I did everything right :-)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>7437682</commentid>
            <who name="Silvia Pfeiffer">silviapfeiffer1</who>
            <bug_when>2013-05-17 19:43:52 -0700</bug_when>
            <thetext>Cool, I&apos;ve cc-ed them to the WHATWG, so Ian can work on it, too (i.e. whoever gets to it faster).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>8293847</commentid>
            <who name="Ralph Giles (:rillian)">giles</who>
            <bug_when>2014-01-15 10:14:53 -0800</bug_when>
            <thetext>This is clearly your bug now, Rick. :-)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>8293977</commentid>
            <who name="Rick Eyre (:reyre)">rick.eyre</who>
            <bug_when>2014-01-15 10:41:19 -0800</bug_when>
            <thetext>Thanks Ralph :-).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>8561922</commentid>
            <who name="Ada [:adalucinet]">adalucin</who>
            <bug_when>2014-03-21 01:42:23 -0700</bug_when>
            <thetext>WebVTT is missing from Beta release notes (please see http://www.mozilla.org/en-US/firefox/29.0beta/releasenotes/), although it&apos;s enabled by default on Firefox 29 beta 1. Any thoughts?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>8630005</commentid>
            <who name="Kohei Yoshino [:kohei]">kohei</who>
            <bug_when>2014-04-07 13:05:13 -0700</bug_when>
            <thetext>Adding status flags as per Bug 981280.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>8639638</commentid>
            <who name="Sylvestre Ledru [:Sylvestre]">sledru</who>
            <bug_when>2014-04-09 07:35:05 -0700</bug_when>
            <thetext>WebVTT is going to be disabled for 29 and 30 (cf bug 981280).
Until we don&apos;t know in which release it is going to ship in, I cannot update the tracking flags accordingly...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>8761043</commentid>
            <who name="Sylvestre Ledru [:Sylvestre]">sledru</who>
            <bug_when>2014-05-07 02:15:36 -0700</bug_when>
            <thetext>Rick, can you confirm, as suggested in bug 981280, that we are going to ship it for 31?
Thanks</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>8762185</commentid>
            <who name="Rick Eyre (:reyre)">rick.eyre</who>
            <bug_when>2014-05-07 07:11:52 -0700</bug_when>
            <thetext>Yep, we will be shipping in FF31. Finally! :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>8762244</commentid>
            <who name="Sylvestre Ledru [:Sylvestre]">sledru</who>
            <bug_when>2014-05-07 07:19:33 -0700</bug_when>
            <thetext>Excellent! Added back to the release notes.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>13249205</commentid>
            <who name="Jonathan Watt [:jwatt]">mozmail</who>
            <bug_when>2018-05-02 08:40:10 -0700</bug_when>
            <thetext>Mass bug change to replace various &apos;parity&apos; whiteboard flags with the new canonical keywords. (See bug 1443764 comment 13.)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>13950775</commentid>
            <who name="Alastor Wu [:alwu]">alwu</who>
            <bug_when>2019-02-26 15:35:05 -0800</bug_when>
            <thetext>Use this bug as the only one tracking bug for all WebVTT implementation.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>16817899</commentid>
              <attachid>9386470</attachid>
            <who name="Jodi Gulledge">yxaxyguveg</who>
            <bug_when>2024-02-27 03:36:31 -0800</bug_when>
            <thetext>Created attachment 9386470
same problem

Thanks from roccompcongsun1975.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>17842625</commentid>
            <who name="Alastor Wu [:alwu]">alwu</who>
            <bug_when>2026-01-14 09:34:59 -0800</bug_when>
            <thetext>Please set any new dependency to new meta bug 2010319.</thetext>
          </long_desc>

          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>606673</attachid>
            <date>2012-03-16 12:22:27 -0700</date>
            <delta_ts>2012-03-16 12:22:27 -0700</delta_ts>
            <desc>work in progress dump</desc>
            <filename>0001-First-demo-of-text-track-playback.patch</filename>
            <type>text/plain</type>
            <size>82503</size>
            <attacher>giles</attacher>
            
              <data encoding="base64">RnJvbSA3MjM4MjFiYzg2ZjNmNDk4NmE3OTA0MmU0YTQxZGEyYjI2OGIxNTJhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSYWxwaCBHaWxlcyA8Z2lsZXNAbW96aWxsYS5jb20+CkRhdGU6
IFdlZCwgMTQgTWFyIDIwMTIgMTE6MTc6MzQgLTA3MDAKU3ViamVjdDogW1BBVENIXSBGaXJzdCBk
ZW1vIG9mIHRleHQgdHJhY2sgcGxheWJhY2suCgpBZGQgYW4gbnNUZXh0VHJhY2sgdG8gaW1wbGVt
ZW50IHRoZSA8dHJhY2s+IGVsZW1lbnQuCkNhbGwgdGhlIHdlYnZ0dCBwYXJzZXIgbGlicmFyeSAo
YWxzbyBhZGRlZCB0byB0aGUgYnVpbGQpCnRvIHBhcnNlIHRoZSBmaWxlIGRpcmVjdGx5IGZyb20g
dGhlIHRyYWNrIGVsZW1lbnQncwpPbkRhdGFBdmFpbGFibGUgKHdyb25nKSBhbmQgc3Rhc2ggdGhl
IHJlc3VsdHMgaW4gdGhlCnBhcmVudCBtZWRpYSBlbGVtZW50LgoKVGhlIGN1ZXMgYXJlIGRpc3Bs
YXllZCBpbiBhbiBhbm9ueW1vdXMgY29udGVudCBkaXYKYXR0YWNoZWQgdG8gdGhlIG5zVmlkZW9G
cmFtZS4KCkRpc3BsYXkgdGhlIGN1cnJlbnQgY3VlIGZyb20gdGhlIHBhcnNlZCBhcnJheSBmcm9t
CkZpcmVUaW1lVXBkYXRlLiBXZSBqdXN0IGNhbGwgU2V0SW5uZXJIVE1MIG9uIHRoZQpjYXB0aW9u
IGRpdi4KCkFsc28gc3R1YnMgb3V0IG5zVGV4dFRyYWNrLCBuc1RleHRUcmFja0N1ZSwgZXRjLiB0
bwpzdXBwb3J0IHRoZSBET00gYXBpLgotLS0KIGNvbmZpZy9hdXRvY29uZi5tay5pbiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogY29uZmlndXJlLmluICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBjb250ZW50L2h0bWwvY29udGVudC9wdWJs
aWMvbnNIVE1MTWVkaWFFbGVtZW50LmggfCAgICA3ICsKIGNvbnRlbnQvaHRtbC9jb250ZW50L3Ny
Yy9NYWtlZmlsZS5pbiAgICAgICAgICAgICB8ICAgIDMgKwogY29udGVudC9odG1sL2NvbnRlbnQv
c3JjL25zR2VuZXJpY0hUTUxFbGVtZW50LmggIHwgICAgMyArCiBjb250ZW50L2h0bWwvY29udGVu
dC9zcmMvbnNIVE1MTWVkaWFFbGVtZW50LmNwcCAgfCAgIDIzICsrCiBjb250ZW50L2h0bWwvY29u
dGVudC9zcmMvbnNIVE1MVHJhY2tFbGVtZW50LmNwcCAgfCAgNDYzICsrKysrKysrKysrKysrKysr
KysrKysKIGNvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc1RleHRUcmFjay5jcHAgICAgICAgICB8
ICAxMjggKysrKysrCiBjb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNUZXh0VHJhY2suaCAgICAg
ICAgICAgfCAgIDY4ICsrKysKIGNvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc1RleHRUcmFja0N1
ZS5jcHAgICAgICB8ICAxNjcgKysrKysrKysKIGNvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc1Rl
eHRUcmFja0N1ZS5oICAgICAgICB8ICAgOTQgKysrKysKIGNvbnRlbnQvbWVkaWEvTWFrZWZpbGUu
aW4gICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogY29udGVudC9tZWRpYS9uc0J1aWx0
aW5EZWNvZGVyLmggICAgICAgICAgICAgICAgIHwgICAgOCArLQogY29udGVudC9tZWRpYS93ZWJ2
dHQvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgIHwgICA2NSArKysKIGNvbnRlbnQvbWVkaWEv
d2VidnR0L25zV2ViVlRURGVjb2Rlci5jcHAgICAgICAgICB8ICAgNDYgKysrCiBjb250ZW50L21l
ZGlhL3dlYnZ0dC9uc1dlYlZUVERlY29kZXIuaCAgICAgICAgICAgfCAgIDUwICsrKwogY29udGVu
dC9tZWRpYS93ZWJ2dHQvbnNXZWJWVFRSZWFkZXIuY3BwICAgICAgICAgIHwgICA1NyArKysKIGNv
bnRlbnQvbWVkaWEvd2VidnR0L25zV2ViVlRUUmVhZGVyLmggICAgICAgICAgICB8ICAgNzIgKysr
KwogZG9tL2Jhc2UvbnNET01DbGFzc0luZm8uY3BwICAgICAgICAgICAgICAgICAgICAgIHwgICAy
OCArKy0KIGRvbS9iYXNlL25zRE9NQ2xhc3NJbmZvQ2xhc3Nlcy5oICAgICAgICAgICAgICAgICB8
ICAgIDQgKwogZG9tL2ludGVyZmFjZXMvaHRtbC9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAg
IHwgICAgMyArCiBkb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxUcmFja0VsZW1lbnQuaWRs
ICAgfCAgIDYzICsrKwogZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01UZXh0VHJhY2suaWRsICAg
ICAgICAgIHwgICA4MiArKysrCiBkb20vaW50ZXJmYWNlcy9odG1sL25zSURPTVRleHRUcmFja0N1
ZS5pZGwgICAgICAgfCAgMTAzICsrKysrCiBlZGl0b3IvbGliZWRpdG9yL2h0bWwvbnNIVE1MRWRp
dFV0aWxzLmNwcCAgICAgICAgfCAgICAzICsKIGxheW91dC9idWlsZC9NYWtlZmlsZS5pbiAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1l
LmNwcCAgICAgICAgICAgICAgICAgIHwgICA2NSArKystCiBsYXlvdXQvZ2VuZXJpYy9uc1ZpZGVv
RnJhbWUuaCAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsKIGxheW91dC9zdHlsZS9odG1sLmNz
cyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKwogbWVkaWEvd2VidnR0L01ha2Vm
aWxlLmluICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2MCArKysKIG1lZGlhL3dlYnZ0dC91
cGRhdGUuc2ggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKwogcGFyc2VyL2h0bWxw
YXJzZXIvcHVibGljL25zSFRNTFRhZ0xpc3QuaCAgICAgICAgIHwgICAgMyArCiBwYXJzZXIvaHRt
bHBhcnNlci9zcmMvbnNFbGVtZW50VGFibGUuY3BwICAgICAgICAgfCAgIDEwICsKIHBhcnNlci9o
dG1scGFyc2VyL3NyYy9uc0hUTUxUYWdzLmNwcCAgICAgICAgICAgICB8ICAgIDQgKwogdG9vbGtp
dC90b29sa2l0LXRpZXJzLm1rICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiAzNSBm
aWxlcyBjaGFuZ2VkLCAxNzE1IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQogY3JlYXRl
IG1vZGUgMTAwNjQ0IGNvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxUcmFja0VsZW1lbnQu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zVGV4dFRy
YWNrLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc1Rl
eHRUcmFjay5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
VGV4dFRyYWNrQ3VlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRlbnQvaHRtbC9jb250ZW50
L3NyYy9uc1RleHRUcmFja0N1ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udGVudC9tZWRpYS93
ZWJ2dHQvTWFrZWZpbGUuaW4KIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250ZW50L21lZGlhL3dlYnZ0
dC9uc1dlYlZUVERlY29kZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udGVudC9tZWRpYS93
ZWJ2dHQvbnNXZWJWVFREZWNvZGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250ZW50L21lZGlh
L3dlYnZ0dC9uc1dlYlZUVFJlYWRlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250ZW50L21l
ZGlhL3dlYnZ0dC9uc1dlYlZUVFJlYWRlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9tL2ludGVy
ZmFjZXMvaHRtbC9uc0lET01IVE1MVHJhY2tFbGVtZW50LmlkbAogY3JlYXRlIG1vZGUgMTAwNjQ0
IGRvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NVGV4dFRyYWNrLmlkbAogY3JlYXRlIG1vZGUgMTAw
NjQ0IGRvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NVGV4dFRyYWNrQ3VlLmlkbAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IG1lZGlhL3dlYnZ0dC9NYWtlZmlsZS5pbgogY3JlYXRlIG1vZGUgMTAwNzU1IG1l
ZGlhL3dlYnZ0dC91cGRhdGUuc2gKCmRpZmYgLS1naXQgYS9jb25maWcvYXV0b2NvbmYubWsuaW4g
Yi9jb25maWcvYXV0b2NvbmYubWsuaW4KaW5kZXggMDFmNTQ5ZC4uMjhiNDIzMyAxMDA2NDQKLS0t
IGEvY29uZmlnL2F1dG9jb25mLm1rLmluCisrKyBiL2NvbmZpZy9hdXRvY29uZi5tay5pbgpAQCAt
MTc0LDYgKzE3NCw3IEBAIE1PWl9OT19USEVPUkFfQVNNID0gQE1PWl9OT19USEVPUkFfQVNNQAog
TU9aX1dFQk0gPSBATU9aX1dFQk1ACiBNT1pfVlA4X0VSUk9SX0NPTkNFQUxNRU5UID0gQE1PWl9W
UDhfRVJST1JfQ09OQ0VBTE1FTlRACiBNT1pfVlA4X0VOQ09ERVIgPSBATU9aX1ZQOF9FTkNPREVS
QAorTU9aX1dFQlZUVCA9IEBNT1pfV0VCVlRUQAogVlBYX0FTID0gQFZQWF9BU0AKIFZQWF9BU0ZM
QUdTID0gQFZQWF9BU0ZMQUdTQAogVlBYX0RBU0hfQ19GTEFHID0gQFZQWF9EQVNIX0NfRkxBR0AK
ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgppbmRleCA4MzIxY2VhLi41
OTk2YjQwIDEwMDY0NAotLS0gYS9jb25maWd1cmUuaW4KKysrIGIvY29uZmlndXJlLmluCkBAIC00
NzM4LDYgKzQ3MzgsNyBAQCBNT1pfTUVESUE9CiBNT1pfV0VCTT0xCiBNT1pfVlA4X0VSUk9SX0NP
TkNFQUxNRU5UPQogTU9aX1ZQOF9FTkNPREVSPQorTU9aX1dFQlZUVD0xCiBWUFhfQVM9CiBWUFhf
QVNGTEFHUz0KIFZQWF9BU19EQVNIX0NfRkxBRz0KQEAgLTg4MzgsNiArODgzOSw3IEBAIEFDX1NV
QlNUKE1PWl9XRUJNKQogQUNfU1VCU1QoTU9aX1ZQOF9FUlJPUl9DT05DRUFMTUVOVCkKIEFDX1NV
QlNUKE1PWl9WUDhfRU5DT0RFUikKIEFDX1NVQlNUKE1PWl9PR0cpCitBQ19TVUJTVChNT1pfV0VC
VlRUKQogQUNfU1VCU1QoTU9aX0FMU0FfTElCUykKIEFDX1NVQlNUKFZQWF9BUykKIEFDX1NVQlNU
KFZQWF9BU0ZMQUdTKQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvcHVibGljL25z
SFRNTE1lZGlhRWxlbWVudC5oIGIvY29udGVudC9odG1sL2NvbnRlbnQvcHVibGljL25zSFRNTE1l
ZGlhRWxlbWVudC5oCmluZGV4IGM4YTA1MGYuLmM4OWRhYTYgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQv
aHRtbC9jb250ZW50L3B1YmxpYy9uc0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC9wdWJsaWMvbnNIVE1MTWVkaWFFbGVtZW50LmgKQEAgLTUxLDYgKzUxLDggQEAK
ICNpbmNsdWRlICJuc0F1ZGlvU3RyZWFtLmgiCiAjaW5jbHVkZSAiVmlkZW9GcmFtZUNvbnRhaW5l
ci5oIgogI2luY2x1ZGUgIm1vemlsbGEvQ09SU01vZGUuaCIKKyNpbmNsdWRlICJuc1RleHRUcmFj
ay5oIgorI2luY2x1ZGUgIndlYnZ0dC5oIgogCiAvLyBEZWZpbmUgdG8gb3V0cHV0IGluZm9ybWF0
aW9uIG9uIGRlY29kaW5nIGFuZCBwYWludGluZyBmcmFtZXJhdGUKIC8qICNkZWZpbmUgREVCVUdf
RlJBTUVfUkFURSAxICovCkBAIC03ODMsNiArNzg1LDExIEBAIHByb3RlY3RlZDoKIAogICAvLyBU
aGUgQ09SUyBtb2RlIHdoZW4gbG9hZGluZyB0aGUgbWVkaWEgZWxlbWVudAogICBtb3ppbGxhOjpD
T1JTTW9kZSBtQ09SU01vZGU7CisKKyAgLy8gQ29udGFpbnMgYSBsaXN0IG9mIG91ciBhdHRhY2hl
ZCB0ZXh0IHRyYWNrIG9iamVjdHMuCisgIC8vbnNUQXJyYXk8bnNDT01QdHI8bnNUZXh0VHJhY2s+
PiBtVGV4dFRyYWNrczsKK3B1YmxpYzoKKyAgd2VidnR0X2N1ZSAqbUN1ZXM7CiB9OwogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9NYWtlZmlsZS5pbiBiL2Nv
bnRlbnQvaHRtbC9jb250ZW50L3NyYy9NYWtlZmlsZS5pbgppbmRleCAyZGY5OTk5Li5lYmQ0OWM1
IDEwMDY0NAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvTWFrZWZpbGUuaW4KKysrIGIv
Y29udGVudC9odG1sL2NvbnRlbnQvc3JjL01ha2VmaWxlLmluCkBAIC0xMjQsNyArMTI0LDEwIEBA
IENQUFNSQ1MJCSs9IFwKIAkJbnNNZWRpYUVycm9yLmNwcCBcCiAJCW5zTWVkaWFGcmFnbWVudFVS
SVBhcnNlci5jcHAgXAogCQluc0hUTUxTb3VyY2VFbGVtZW50LmNwcCBcCisJCW5zSFRNTFRyYWNr
RWxlbWVudC5jcHAgXAogCQluc1RpbWVSYW5nZXMuY3BwIFwKKwkJbnNUZXh0VHJhY2suY3BwIFwK
KwkJbnNUZXh0VHJhY2tDdWUuY3BwIFwKIAkJbnNIVE1MVmlkZW9FbGVtZW50LmNwcCBcCiAJCSQo
TlVMTCkKIGVuZGlmCmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNHZW5l
cmljSFRNTEVsZW1lbnQuaCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0dlbmVyaWNIVE1M
RWxlbWVudC5oCmluZGV4IDNkZWRkOGMuLmVkNDdjZWUgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3NyYy9uc0dlbmVyaWNIVE1MRWxlbWVudC5oCisrKyBiL2NvbnRlbnQvaHRtbC9j
b250ZW50L3NyYy9uc0dlbmVyaWNIVE1MRWxlbWVudC5oCkBAIC0xNjM2LDYgKzE2MzYsOSBAQCBO
U19ERUNMQVJFX05TX05FV19IVE1MX0VMRU1FTlQoVGV4dEFyZWEpCiBOU19ERUNMQVJFX05TX05F
V19IVE1MX0VMRU1FTlQoVGZvb3QpCiBOU19ERUNMQVJFX05TX05FV19IVE1MX0VMRU1FTlQoVGhl
YWQpCiBOU19ERUNMQVJFX05TX05FV19IVE1MX0VMRU1FTlQoVGl0bGUpCisjaWYgZGVmaW5lZChN
T1pfTUVESUEpCitOU19ERUNMQVJFX05TX05FV19IVE1MX0VMRU1FTlQoVHJhY2spCisjZW5kaWYK
IE5TX0RFQ0xBUkVfTlNfTkVXX0hUTUxfRUxFTUVOVChVbmtub3duKQogI2lmIGRlZmluZWQoTU9a
X01FRElBKQogTlNfREVDTEFSRV9OU19ORVdfSFRNTF9FTEVNRU5UKFZpZGVvKQpkaWZmIC0tZ2l0
IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9jb250
ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBhZDg5Nzhj
Li40NGQwY2FhIDEwMDY0NAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MTWVk
aWFFbGVtZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MTWVkaWFF
bGVtZW50LmNwcApAQCAtNDAsNiArNDAsNyBAQAogCiAjaW5jbHVkZSAibnNJRE9NSFRNTE1lZGlh
RWxlbWVudC5oIgogI2luY2x1ZGUgIm5zSURPTUhUTUxTb3VyY2VFbGVtZW50LmgiCisjaW5jbHVk
ZSAibnNJRE9NSFRNTFRyYWNrRWxlbWVudC5oIgogI2luY2x1ZGUgIm5zSFRNTE1lZGlhRWxlbWVu
dC5oIgogI2luY2x1ZGUgIm5zVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxF
bGVtZW50LmgiCkBAIC0xMDIsNiArMTAzLDkgQEAKICNpZmRlZiBNT1pfV0VCTQogI2luY2x1ZGUg
Im5zV2ViTURlY29kZXIuaCIKICNlbmRpZgorI2lmZGVmIE1PWl9XRUJWVFQKKyNpbmNsdWRlICJu
c1dlYlZUVERlY29kZXIuaCIKKyNlbmRpZgogI2lmZGVmIE1PWl9SQVcKICNpbmNsdWRlICJuc1Jh
d0RlY29kZXIuaCIKICNlbmRpZgpAQCAtMjg4Niw2ICsyODkwLDI1IEBAIHZvaWQgbnNIVE1MTWVk
aWFFbGVtZW50OjpGaXJlVGltZVVwZGF0ZShib29sIGFQZXJpb2RpYykKICAgICBtRnJhZ21lbnRT
dGFydCA9IC0xLjA7CiAgICAgbURlY29kZXItPlNldEVuZFRpbWUobUZyYWdtZW50RW5kKTsKICAg
fQorCisgIC8vIEhBQ0s6IHVwZGF0ZSBjdXJyZW50IHRleHQgdHJhY2sgY3VlIGZyb20gaGVyZQor
ICBuc0lGcmFtZSogZnJhbWUgPSBHZXRQcmltYXJ5RnJhbWUoKTsKKyAgaWYgKGZyYW1lICYmIGZy
YW1lLT5HZXRUeXBlKCkgPT0gbnNHa0F0b21zOjpIVE1MVmlkZW9GcmFtZSkgeworICAgIG5zSUNv
bnRlbnQgKm92ZXJsYXkgPSBzdGF0aWNfY2FzdDxuc1ZpZGVvRnJhbWUqPihmcmFtZSktPkdldENh
cHRpb25PdmVybGF5KCk7CisgICAgbG9uZyBtc3RpbWUgPSB0aW1lICogMWUzOworICAgIHdlYnZ0
dF9jdWUgKmN1ZSA9IG1DdWVzOworICAgIHdoaWxlIChjdWUpIHsKKyAgICAgIGlmIChjdWUtPnN0
YXJ0IDwgbXN0aW1lICYmIGN1ZS0+ZW5kID4gbXN0aW1lKQorICAgICAgICBicmVhazsKKyAgICAg
IGN1ZSA9IGN1ZS0+bmV4dDsKKyAgICB9CisgICAgY29uc3QgY2hhciAqdGV4dCA9IGN1ZSA/IGN1
ZS0+dGV4dCA6ICIiOworICAgIG5zQ09NUHRyPG5zSURPTUhUTUxFbGVtZW50PiBkaXYgPSBkb19R
dWVyeUludGVyZmFjZShvdmVybGF5KTsKKyAgICBjaGFyIHRpbWVzdHJpbmdbMTAyNF0gPSAibW9s
bGlzIG5vbiBjb21tb2RvIGV0IjsKKyAgICBzbnByaW50Zih0aW1lc3RyaW5nLCAxMDI0LCAiPHA+
Q3VlIHVwZGF0ZSAlbGY8L3A+XG4iCisgICAgICAgICI8cD4lczwvcD5cbiIsIHRpbWUsIHRleHQp
OworICAgIGRpdi0+U2V0SW5uZXJIVE1MKE5TX0NvbnZlcnRVVEY4dG9VVEYxNih0aW1lc3RyaW5n
KSk7CisgIH0KIH0KIAogdm9pZCBuc0hUTUxNZWRpYUVsZW1lbnQ6OkdldEN1cnJlbnRTcGVjKG5z
Q1N0cmluZyYgYVN0cmluZykKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9u
c0hUTUxUcmFja0VsZW1lbnQuY3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTFRy
YWNrRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4YjFh
MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc0hUTUxUcmFj
a0VsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNDYzIEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lk
dGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisv
KiB2aW06c2V0IHRzPTIgc3c9MiBzdHM9MiBldCBjaW5kZW50OiAqLworLyogKioqKiogQkVHSU4g
TElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4x
CisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96
aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBM
aWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6
Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRI
T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUg
dGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0
cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmln
aW5hbCBDb2RlIGlzIE1vemlsbGEgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIg
b2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE1vemlsbGEgQ29ycG9yYXRpb24uCisgKiBQb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAy
MDA3CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogQ29udHJpYnV0b3Iocyk6CisgKiAgQ2hyaXMgRG91YmxlIDxjaHJpcy5kb3VibGVAZG91Ymxl
LmNvLm56PgorICogIFJhbHBoIEdpbGVzIDxnaWxlc0Btb3ppbGxhLmNvbT4KKyAqCisgKiBBbHRl
cm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRo
ZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGlu
IHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBw
bGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cg
dXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1z
IG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0
bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNp
b25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIg
cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90
IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91
ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2Yg
dGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBC
TE9DSyAqKioqKiAqLworI2luY2x1ZGUgIm5zSURPTUhUTUxUcmFja0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJuc0lET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxFbGVtZW50
LmgiCisjaW5jbHVkZSAibnNHa0F0b21zLmgiCisjaW5jbHVkZSAibnNTdHlsZUNvbnN0cy5oIgor
I2luY2x1ZGUgIm5zTWFwcGVkQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIm5zUnVsZURhdGEuaCIK
KyNpbmNsdWRlICJuc0NvbnRlbnRVdGlscy5oIgorI2luY2x1ZGUgIm5zSUNvbnRlbnRQb2xpY3ku
aCIKKyNpbmNsdWRlICJuc0NvbnRlbnRQb2xpY3lVdGlscy5oIgorI2luY2x1ZGUgIm5zSUxvYWRH
cm91cC5oIgorI2luY2x1ZGUgIm5zSURvY3VtZW50LmgiCisjaW5jbHVkZSAibnNOZXRVdGlsLmgi
CisjaW5jbHVkZSAibnNJQ2FjaGluZ0NoYW5uZWwuaCIKKyNpbmNsdWRlICJuc0hUTUxNZWRpYUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lIdHRwQ2hhbm5lbC5oIgorI2luY2x1ZGUgIm5zTmV0RXJy
b3IuaCIKKyNpbmNsdWRlICJuc0lTdHJlYW1MaXN0ZW5lci5oIgorI2luY2x1ZGUgIm5zSUNoYW5u
ZWxFdmVudFNpbmsuaCIKKyNpbmNsdWRlICJuc0lDaGFubmVsUG9saWN5LmgiCisjaW5jbHVkZSAi
bnNJQXN5bmNWZXJpZnlSZWRpcmVjdENhbGxiYWNrLmgiCisjaW5jbHVkZSAibnNJQ29udGVudFNl
Y3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSAibnNJSW50ZXJmYWNlUmVxdWVzdG9yLmgiCisjaW5j
bHVkZSAibnNJT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJuc0NPTVB0ci5oIgorI2luY2x1ZGUgIm5z
VGhyZWFkVXRpbHMuaCIKKyNpbmNsdWRlICJuc0lGcmFtZS5oIgorI2luY2x1ZGUgIm5zVmlkZW9G
cmFtZS5oIgorI2luY2x1ZGUgIndlYnZ0dC5oIgorCisjaWZkZWYgUFJfTE9HR0lORworI3dhcm5p
bmcgZW5hYmxpbmcgbnNwciBsb2dnaW5nCitzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnVHJhY2tF
bGVtZW50TG9nOworI2RlZmluZSBMT0codHlwZSwgbXNnKSBQUl9MT0coZ1RyYWNrRWxlbWVudExv
ZywgdHlwZSwgbXNnKQorI2Vsc2UKKyNkZWZpbmUgTE9HKHR5cGUsIG1zZykKKyNlbmRpZgorCitj
bGFzcyBuc0hUTUxUcmFja0VsZW1lbnQgOiBwdWJsaWMgbnNHZW5lcmljSFRNTEVsZW1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIG5zSURPTUhUTUxUcmFja0VsZW1lbnQK
K3sKK3B1YmxpYzoKKyAgbnNIVE1MVHJhY2tFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9k
ZUluZm8+IGFOb2RlSW5mbyk7CisgIHZpcnR1YWwgfm5zSFRNTFRyYWNrRWxlbWVudCgpOworCisg
IC8vIG5zSVN1cHBvcnRzCisgIE5TX0RFQ0xfSVNVUFBPUlRTX0lOSEVSSVRFRAorCisgIC8vIG5z
SURPTU5vZGUKKyAgTlNfRk9SV0FSRF9OU0lET01OT0RFKG5zR2VuZXJpY0hUTUxFbGVtZW50Ojop
CisKKyAgLy8gbnNJRE9NRWxlbWVudAorICBOU19GT1JXQVJEX05TSURPTUVMRU1FTlQobnNHZW5l
cmljSFRNTEVsZW1lbnQ6OikKKworICAvLyBuc0lET01IVE1MRWxlbWVudAorICBOU19GT1JXQVJE
X05TSURPTUhUTUxFTEVNRU5UKG5zR2VuZXJpY0hUTUxFbGVtZW50OjopCisKKyAgLy8gbnNJRE9N
SFRNTFRyYWNrRWxlbWVudAorICBOU19ERUNMX05TSURPTUhUTUxUUkFDS0VMRU1FTlQKKworICB2
aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSU5vZGVJbmZvICphTm9kZUluZm8sIG5zSU5vZGUgKiph
UmVzdWx0KSBjb25zdDsKKyAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBY2NlcHRIZWFkZXIobnNJSHR0
cENoYW5uZWwqIGFDaGFubmVsKTsKKworICAvLyBPdmVycmlkZSBCaW5kVG9UcmVlKCkgc28gdGhh
dCB3ZSBjYW4gdHJpZ2dlciBhIGxvYWQgd2hlbiB3ZSBhZGQgYQorICAvLworICAvLyBjaGlsZCB0
cmFjayBlbGVtZW50LgorICB2aXJ0dWFsIG5zcmVzdWx0IEJpbmRUb1RyZWUobnNJRG9jdW1lbnQg
KmFEb2N1bWVudCwgbnNJQ29udGVudCAqYVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUNvbnRlbnQgKmFCaW5kaW5nUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhQ29tcGlsZUV2ZW50SGFuZGxlcnMpOworCisgIHZpcnR1YWwgbnNYUEND
bGFzc0luZm8qIEdldENsYXNzSW5mbygpOworCisgIFBSVWludDMyIEdldEN1cnJlbnRMb2FkSUQo
KSB7IHJldHVybiBtQ3VycmVudExvYWRJRDsgfQorCitwcm90ZWN0ZWQ6CisgIGNsYXNzIExvYWRM
aXN0ZW5lcjsKKyAgUFJVaW50MzIgbUN1cnJlbnRMb2FkSUQ7CisgIG5zQ09NUHRyPG5zSUNoYW5u
ZWw+IG1DaGFubmVsOworICBuc0NPTVB0cjxuc0lDb250ZW50PiBtTWVkaWFQYXJlbnQ7CisKKyAg
bnNyZXN1bHQgTmV3VVJJRnJvbVN0cmluZyhjb25zdCBuc0F1dG9TdHJpbmcmIGFVUklTcGVjLCBu
c0lVUkkqKiBhVVJJKTsKKyAgbnNyZXN1bHQgTG9hZFJlc291cmNlKG5zSVVSSSogYVVSSSk7Cit9
OworCisKKy8qKiBDaGFubmVsIExpc3RlbmVyIGhlbHBlciBjbGFzcyAqLworY2xhc3MgbnNIVE1M
VHJhY2tFbGVtZW50OjpMb2FkTGlzdGVuZXIgOiBwdWJsaWMgbnNJU3RyZWFtTGlzdGVuZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBuc0lDaGFubmVs
RXZlbnRTaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgbnNJSW50ZXJmYWNlUmVxdWVzdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgbnNJT2JzZXJ2ZXIKK3sKKyAgTlNfREVDTF9JU1VQUE9SVFMKKyAg
TlNfREVDTF9OU0lSRVFVRVNUT0JTRVJWRVIKKyAgTlNfREVDTF9OU0lTVFJFQU1MSVNURU5FUgor
ICBOU19ERUNMX05TSUNIQU5ORUxFVkVOVFNJTksKKyAgTlNfREVDTF9OU0lJTlRFUkZBQ0VSRVFV
RVNUT1IKKyAgTlNfREVDTF9OU0lPQlNFUlZFUgorCitwdWJsaWM6CisgIExvYWRMaXN0ZW5lcihu
c0hUTUxUcmFja0VsZW1lbnQgKmFFbGVtZW50KQorICAgIDogbUVsZW1lbnQoYUVsZW1lbnQpLAor
ICAgICAgbUxvYWRJRChhRWxlbWVudC0+R2V0Q3VycmVudExvYWRJRCgpKQorICAgIHsKKyAgICAg
IE5TX0FCT1JUX0lGX0ZBTFNFKG1FbGVtZW50LCAiTXVzdCBwYXNzIGFuIGVsZW1lbnQgdG8gdGhl
IGNhbGxiYWNrIik7CisgICAgfQorCitwcml2YXRlOgorICBuc1JlZlB0cjxuc0hUTUxUcmFja0Vs
ZW1lbnQ+IG1FbGVtZW50OworICBuc0NPTVB0cjxuc0lTdHJlYW1MaXN0ZW5lcj4gbU5leHRMaXN0
ZW5lcjsKKyAgUFJVaW50MzIgbUxvYWRJRDsKK307CisKK05TX0lNUExfSVNVUFBPUlRTNShuc0hU
TUxUcmFja0VsZW1lbnQ6OkxvYWRMaXN0ZW5lciwgbnNJUmVxdWVzdE9ic2VydmVyLAorICAgICAg
ICAgICAgICAgICAgIG5zSVN0cmVhbUxpc3RlbmVyLCBuc0lDaGFubmVsRXZlbnRTaW5rLAorICAg
ICAgICAgICAgICAgICAgIG5zSUludGVyZmFjZVJlcXVlc3RvciwgbnNJT2JzZXJ2ZXIpCisKK05T
X0lNRVRIT0RJTVAKK25zSFRNTFRyYWNrRWxlbWVudDo6TG9hZExpc3RlbmVyOjpPYnNlcnZlKG5z
SVN1cHBvcnRzKiBhU3ViamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmFUb3BpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciogYURhdGEpCit7CisgIG5zQ29udGVudFV0aWxz
OjpVbnJlZ2lzdGVyU2h1dGRvd25PYnNlcnZlcih0aGlzKTsKKworICAvLyBDbGVhciBtRWxlbWVu
dCB0byBicmVhayBjeWNsZSBzbyB3ZSBkb24ndCBsZWFrIG9uIHNodXRkb3duCisgIG1FbGVtZW50
ID0gbnNudWxsOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zSFRNTFRy
YWNrRWxlbWVudDo6TG9hZExpc3RlbmVyOjpPblN0YXJ0UmVxdWVzdChuc0lSZXF1ZXN0KiBhUmVx
dWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdXBwb3J0cyogYUNvbnRleHQpCit7CisgIHByaW50ZigidHJhY2sgZ290IHN0YXJ0IHJlcXVl
c3RcbiIpOworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zSFRNTFRyYWNr
RWxlbWVudDo6TG9hZExpc3RlbmVyOjpPblN0b3BSZXF1ZXN0KG5zSVJlcXVlc3QqIGFSZXF1ZXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3Vw
cG9ydHMqIGFDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNyZXN1bHQgYVN0YXR1cykKK3sKKyAgcHJpbnRmKCJ0cmFjayBnb3Qgc3RvcCBy
ZXF1ZXN0XG4iKTsKKworICBuc0NvbnRlbnRVdGlsczo6VW5yZWdpc3RlclNodXRkb3duT2JzZXJ2
ZXIodGhpcyk7CisKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCituc0hUTUxU
cmFja0VsZW1lbnQ6OkxvYWRMaXN0ZW5lcjo6T25EYXRhQXZhaWxhYmxlKG5zSVJlcXVlc3QqIGFS
ZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lTdXBwb3J0cyAqYUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUlucHV0U3RyZWFtKiBhU3RyZWFtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhT2Zmc2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQz
MiBhQ291bnQpCit7CisgIHByaW50ZigiVHJhY2sgZ290IGRhdGEhICV1IGJ5dGVzIGF0IG9mZnNl
dCAldVxuIiwgYUNvdW50LCBhT2Zmc2V0KTsKKworICBuc3Jlc3VsdCBydjsKKyAgUFJVaW50MzIg
YXZhaWxhYmxlOworICBib29sIGJsb2NraW5nOworCisgIHJ2ID0gYVN0cmVhbS0+SXNOb25CbG9j
a2luZygmYmxvY2tpbmcpOworICBOU19FTlNVUkVfU1VDQ0VTUyhydixydik7CisKKyAgaWYgKGJs
b2NraW5nKQorICAgIHByaW50ZigiVHJhY2sgZGF0YSBzdHJlYW0gaXMgbm9uIGJsb2NraW5nXG4i
KTsKKyAgZWxzZQorICAgIHByaW50ZigiVHJhY2sgZGF0YSBzdHJlYW0gaXMgQkxPQ0tJTkchXG4i
KTsKKworICBydiA9IGFTdHJlYW0tPkF2YWlsYWJsZSgmYXZhaWxhYmxlKTsKKyAgTlNfRU5TVVJF
X1NVQ0NFU1MocnYsIHJ2KTsKKyAgcHJpbnRmKCJUcmFjayBoYXMgJXUgYnl0ZXMgYXZhaWxhYmxl
XG4iLCBhdmFpbGFibGUpOworCisgIGNoYXIgKmJ1ZiA9IChjaGFyICopbWFsbG9jKGFDb3VudCk7
CisgIGlmIChidWYpIHsKKyAgICBQUlVpbnQzMiByZWFkOworICAgIHJ2ID0gYVN0cmVhbS0+UmVh
ZChidWYsIGFDb3VudCwgJnJlYWQpOworICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7Cisg
ICAgaWYgKHJlYWQgPj0gYUNvdW50KQorICAgICAgcmVhZCA9IGFDb3VudCAtIDE7CisgICAgYnVm
W3JlYWRdID0gJ1wwJzsKKyAgICBwcmludGYoIlRyYWNrIGRhdGE6XG4lc1xuIiwgYnVmKTsKKwor
ICAgIHdlYnZ0dF9wYXJzZXIgKndlYnZ0dCA9IHdlYnZ0dF9wYXJzZV9uZXcoKTsKKyAgICBOU19F
TlNVUkVfVFJVRSh3ZWJ2dHQsIE5TX0VSUk9SX0ZBSUxVUkUpOworICAgIHdlYnZ0dF9jdWUgKmN1
ZSA9IHdlYnZ0dF9wYXJzZV9idWZmZXIod2VidnR0LCBidWYsIHJlYWQpOworCisgICAgd2VidnR0
X3BhcnNlX2ZyZWUod2VidnR0KTsKKworICAgIC8vIHBva2UgdGhlIGN1ZXMgaW50byB0aGUgcGFy
ZW50IG9iamVjdAorICAgIG5zSFRNTE1lZGlhRWxlbWVudCogcGFyZW50ID0gc3RhdGljX2Nhc3Q8
bnNIVE1MTWVkaWFFbGVtZW50Kj4obUVsZW1lbnQtPm1NZWRpYVBhcmVudC5nZXQoKSk7CisgICAg
cGFyZW50LT5tQ3VlcyA9IGN1ZTsKKworICAgIC8vIEdldCB0aGUgcGFyZW50IG1lZGlhIGVsZW1l
bnQncyBmcmFtZQorICAgIG5zSUZyYW1lKiBmcmFtZSA9IG1FbGVtZW50LT5tTWVkaWFQYXJlbnQt
PkdldFByaW1hcnlGcmFtZSgpOworICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+R2V0VHlwZSgpID09
IG5zR2tBdG9tczo6SFRNTFZpZGVvRnJhbWUpIHsKKyAgICAgIG5zSUNvbnRlbnQgKm92ZXJsYXkg
PSBzdGF0aWNfY2FzdDxuc1ZpZGVvRnJhbWUqPihmcmFtZSktPkdldENhcHRpb25PdmVybGF5KCk7
CisgICAgICBuc0NPTVB0cjxuc0lET01IVE1MRWxlbWVudD4gZGl2ID0gZG9fUXVlcnlJbnRlcmZh
Y2Uob3ZlcmxheSk7CisgICAgICBkaXYtPlNldElubmVySFRNTChOU19Db252ZXJ0VVRGOHRvVVRG
MTYoY3VlLT50ZXh0KSk7CisgICAgfQorCisgICAgZnJlZShidWYpOworICB9CisKKyAgcmV0dXJu
IE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCituc0hUTUxUcmFja0VsZW1lbnQ6OkxvYWRMaXN0
ZW5lcjo6QXN5bmNPbkNoYW5uZWxSZWRpcmVjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNoYW5uZWwqIGFPbGRDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5l
bCogYU5ld0NoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICBuc0lBc3luY1ZlcmlmeVJlZGlyZWN0Q2FsbGJhY2sq
IGNiKQoreworICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zSFRNTFRyYWNr
RWxlbWVudDo6TG9hZExpc3RlbmVyOjpHZXRJbnRlcmZhY2UoY29uc3QgbnNJSUQgJmFJSUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiphUmVz
dWx0KQoreworICByZXR1cm4gUXVlcnlJbnRlcmZhY2UoYUlJRCwgYVJlc3VsdCk7Cit9CisKKwor
CisvKiogVHJhY2sgZWxlbWVudCBpbXBsZW1lbnRhaXRvbiAqLworTlNfSU1QTF9OU19ORVdfSFRN
TF9FTEVNRU5UKFRyYWNrKQorCisKK25zSFRNTFRyYWNrRWxlbWVudDo6bnNIVE1MVHJhY2tFbGVt
ZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbykKKyAgOiBuc0dlbmVy
aWNIVE1MRWxlbWVudChhTm9kZUluZm8pCit7CisjaWZkZWYgUFJfTE9HR0lORworICBpZiAoIWdU
cmFja0VsZW1lbnRMb2cpIHsKKyAgICBnVHJhY2tFbGVtZW50TG9nID0gUFJfTmV3TG9nTW9kdWxl
KCJuc1RyYWNrRWxlbWVudCIpOworICB9CisjZW5kaWYKK30KKworbnNIVE1MVHJhY2tFbGVtZW50
Ojp+bnNIVE1MVHJhY2tFbGVtZW50KCkKK3sKK30KKworCitOU19JTVBMX0FERFJFRl9JTkhFUklU
RUQobnNIVE1MVHJhY2tFbGVtZW50LCBuc0dlbmVyaWNFbGVtZW50KQorTlNfSU1QTF9SRUxFQVNF
X0lOSEVSSVRFRChuc0hUTUxUcmFja0VsZW1lbnQsIG5zR2VuZXJpY0VsZW1lbnQpCisKKworRE9N
Q0lfTk9ERV9EQVRBKEhUTUxUcmFja0VsZW1lbnQsIG5zSFRNTFRyYWNrRWxlbWVudCkKKworLy8g
UXVlcnlJbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gZm9yIG5zSFRNTFRyYWNrRWxlbWVudAorTlNf
SU5URVJGQUNFX1RBQkxFX0hFQUQobnNIVE1MVHJhY2tFbGVtZW50KQorICBOU19IVE1MX0NPTlRF
TlRfSU5URVJGQUNFX1RBQkxFMShuc0hUTUxUcmFja0VsZW1lbnQsIG5zSURPTUhUTUxUcmFja0Vs
ZW1lbnQpCisgIE5TX0hUTUxfQ09OVEVOVF9JTlRFUkZBQ0VfVEFCTEVfVE9fTUFQX1NFR1VFKG5z
SFRNTFRyYWNrRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNHZW5lcmljSFRNTEVsZW1lbnQpCitOU19IVE1MX0NPTlRFTlRfSU5URVJGQUNF
X1RBQkxFX1RBSUxfQ0xBU1NJTkZPKEhUTUxUcmFja0VsZW1lbnQpCisKKworTlNfSU1QTF9FTEVN
RU5UX0NMT05FKG5zSFRNTFRyYWNrRWxlbWVudCkKKworCitOU19JTVBMX1NUUklOR19BVFRSKG5z
SFRNTFRyYWNrRWxlbWVudCwgS2luZCwga2luZCkKK05TX0lNUExfVVJJX0FUVFIobnNIVE1MVHJh
Y2tFbGVtZW50LCBTcmMsIHNyYykKK05TX0lNUExfU1RSSU5HX0FUVFIobnNIVE1MVHJhY2tFbGVt
ZW50LCBTcmNsYW5nLCBzcmNsYW5nKQorTlNfSU1QTF9TVFJJTkdfQVRUUihuc0hUTUxUcmFja0Vs
ZW1lbnQsIExhYmVsLCBsYWJlbCkKK05TX0lNUExfQk9PTF9BVFRSKG5zSFRNTFRyYWNrRWxlbWVu
dCwgRGVmYXVsdCwgX2RlZmF1bHQpCisKK25zcmVzdWx0Cituc0hUTUxUcmFja0VsZW1lbnQ6OlNl
dEFjY2VwdEhlYWRlcihuc0lIdHRwQ2hhbm5lbCAqYUNoYW5uZWwpCit7CisjaWZkZWYgTU9aX1dF
QlZUVAorICBuc0NBdXRvU3RyaW5nIHZhbHVlKAorICAgICAgInRleHQvd2VidnR0IgorICAgICAg
KTsKKworICByZXR1cm4gYUNoYW5uZWwtPlNldFJlcXVlc3RIZWFkZXIoTlNfTElURVJBTF9DU1RS
SU5HKCJBY2NlcHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworI2Vsc2UKKyAg
cmV0dXJuIE5TX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKKyNlbmRpZgorfQorCisvKiogY29waWVk
IGZyb20gbnNIVE1MTWVkaWFFbGVtZW50OjpOZXdVUklGcm9tU3RyaW5nICovCituc3Jlc3VsdAor
bnNIVE1MVHJhY2tFbGVtZW50OjpOZXdVUklGcm9tU3RyaW5nKGNvbnN0IG5zQXV0b1N0cmluZyYg
YVVSSVNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJVVJJKiog
YVVSSSkKK3sKKyAgTlNfRU5TVVJFX0FSR19QT0lOVEVSKGFVUkkpOworCisgICphVVJJID0gbnNu
dWxsOworCisgIG5zQ09NUHRyPG5zSURvY3VtZW50PiBkb2MgPSBPd25lckRvYygpOworCisgIG5z
Q09NUHRyPG5zSVVSST4gYmFzZVVSSSA9IEdldEJhc2VVUkkoKTsKKyAgbnNyZXN1bHQgcnYgPSBu
c0NvbnRlbnRVdGlsczo6TmV3VVJJV2l0aERvY3VtZW50Q2hhcnNldChhVVJJLCBhVVJJU3BlYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb2MsIGJhc2VVUkkpOworICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworCisgIGJvb2wg
ZXF1YWw7CisgIGlmIChhVVJJU3BlYy5Jc0VtcHR5KCkgJiYKKyAgICAgIGRvYy0+R2V0RG9jdW1l
bnRVUkkoKSAmJgorICAgICAgTlNfU1VDQ0VFREVEKGRvYy0+R2V0RG9jdW1lbnRVUkkoKS0+RXF1
YWxzKCphVVJJLCAmZXF1YWwpKSAmJgorICAgICAgZXF1YWwpIHsKKyAgICAvLyBnaXZlIHVwCisg
ICAgTlNfUkVMRUFTRSgqYVVSSSk7CisgICAgcmV0dXJuIE5TX0VSUk9SX0RPTV9JTlZBTElEX1NU
QVRFX0VSUjsKKyAgfQorCisgIHJldHVybiBOU19PSzsKK30KKworbnNyZXN1bHQKK25zSFRNTFRy
YWNrRWxlbWVudDo6TG9hZFJlc291cmNlKG5zSVVSSSogYVVSSSkKK3sKKyAgbnNyZXN1bHQgcnY7
CisKKyAgaWYgKG1DaGFubmVsKSB7CisgICAgbUNoYW5uZWwtPkNhbmNlbChOU19CSU5ESU5HX0FC
T1JURUQpOworICAgIG1DaGFubmVsID0gbnNudWxsOworICB9CisKKyAgUFJJbnQxNiBzaG91bGRM
b2FkID0gbnNJQ29udGVudFBvbGljeTo6QUNDRVBUOworICBydiA9IE5TX0NoZWNrQ29udGVudExv
YWRQb2xpY3kobnNJQ29udGVudFBvbGljeTo6VFlQRV9NRURJQSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFVUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlUHJpbmNpcGFsKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxuc0dlbmVyaWNFbGVtZW50Kj4odGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFbXB0eUNTdHJpbmcoKSwgLy8gbWltZSB0eXBlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc251bGwsIC8vIGV4dHJhCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmc2hvdWxkTG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
Q29udGVudFV0aWxzOjpHZXRDb250ZW50UG9saWN5KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0NvbnRlbnRVdGlsczo6R2V0U2VjdXJpdHlNYW5hZ2VyKCkpOworICBOU19F
TlNVUkVfU1VDQ0VTUyhydixydik7CisgIGlmIChOU19DUF9SRUpFQ1RFRChzaG91bGRMb2FkKSkK
KyAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKworICBuc0NPTVB0cjxuc0lMb2FkR3JvdXA+
IGxvYWRHcm91cCA9IE93bmVyRG9jKCktPkdldERvY3VtZW50TG9hZEdyb3VwKCk7CisKKyAgLy8g
Y2hlY2sgZm9yIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdG8gcGFzcyBkb3duIHRvIHRoZSBj
aGFubmVsCisgIC8vIGNyZWF0ZWQgdG8gbG9hZCB0aGUgbWVkaWEgY29udGVudAorICBuc0NPTVB0
cjxuc0lDaGFubmVsUG9saWN5PiBjaGFubmVsUG9saWN5OworICBuc0NPTVB0cjxuc0lDb250ZW50
U2VjdXJpdHlQb2xpY3k+IGNzcDsKKyAgcnYgPSBOb2RlUHJpbmNpcGFsKCktPkdldENzcChnZXR0
ZXJfQWRkUmVmcyhjc3ApKTsKKyAgTlNfRU5TVVJFX1NVQ0NFU1MocnYscnYpOworICBpZiAoY3Nw
KSB7CisgICAgY2hhbm5lbFBvbGljeSA9IGRvX0NyZWF0ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcv
bnNjaGFubmVscG9saWN5OzEiKTsKKyAgICBjaGFubmVsUG9saWN5LT5TZXRDb250ZW50U2VjdXJp
dHlQb2xpY3koY3NwKTsKKyAgICBjaGFubmVsUG9saWN5LT5TZXRMb2FkVHlwZShuc0lDb250ZW50
UG9saWN5OjpUWVBFX01FRElBKTsKKyAgfQorICBuc0NPTVB0cjxuc0lDaGFubmVsPiBjaGFubmVs
OworICBydiA9IE5TX05ld0NoYW5uZWwoZ2V0dGVyX0FkZFJlZnMoY2hhbm5lbCksCisgICAgICAg
ICAgICAgICAgICAgICAgYVVSSSwKKyAgICAgICAgICAgICAgICAgICAgICBuc251bGwsCisgICAg
ICAgICAgICAgICAgICAgICAgbG9hZEdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgIG5zbnVs
bCwKKyAgICAgICAgICAgICAgICAgICAgICBuc0lDYWNoaW5nQ2hhbm5lbDo6TE9BRF9CWVBBU1Nf
TE9DQUxfQ0FDSEVfSUZfQlVTWSwKKyAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsUG9saWN5
KTsKKyAgTlNfRU5TVVJFX1NVQ0NFU1MocnYscnYpOworCisgIG5zUmVmUHRyPExvYWRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSBuZXcgTG9hZExpc3RlbmVyKHRoaXMpOworICBjaGFubmVsLT5TZXROb3Rp
ZmljYXRpb25DYWxsYmFja3MobGlzdGVuZXIpOworCisgIHByaW50Zigib3BlbmluZyB3ZWJ2dHQg
Y2hhbm5lbFxuIik7CisgIHJ2ID0gY2hhbm5lbC0+QXN5bmNPcGVuKGxpc3RlbmVyLCBuc251bGwp
OworICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworCisgIG1DaGFubmVsID0gY2hhbm5lbDsK
KworICBuc0NvbnRlbnRVdGlsczo6UmVnaXN0ZXJTaHV0ZG93bk9ic2VydmVyKGxpc3RlbmVyKTsK
KworICByZXR1cm4gTlNfT0s7Cit9CisKK25zcmVzdWx0Cituc0hUTUxUcmFja0VsZW1lbnQ6OkJp
bmRUb1RyZWUobnNJRG9jdW1lbnQgKmFEb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQ29udGVudCAqYVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJQ29udGVudCAqYUJpbmRpbmdQYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYUNvbXBpbGVFdmVudEhhbmRsZXJzKQoreworICBuc3Jlc3VsdCBydiA9
IG5zR2VuZXJpY0hUTUxFbGVtZW50OjpCaW5kVG9UcmVlKGFEb2N1bWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhUGFyZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFCaW5kaW5nUGFyZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21waWxl
RXZlbnRIYW5kbGVycyk7CisgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisKKyAgTE9HKFBS
X0xPR19ERUJVRywgKCJUcmFjayBFbGVtZW50IGJvdW5kIHRvIHRyZWUuIikpOworICBmcHJpbnRm
KHN0ZGVyciwgIlRyYWNrIGVsZW1lbnQgYm91bmQgdG8gdHJlZS5cbiIpOworICBpZiAoIWFQYXJl
bnQgfHwgIWFQYXJlbnQtPklzTm9kZU9mVHlwZShuc0lOb2RlOjplTUVESUEpKQorICAgIHJldHVy
biBOU19PSzsKKworICAvLyBTdG9yZSBvdXIgcGFyZW50IHNvIHdlIGNhbiBsb29rIHVwIGl0cyBm
cmFtZSBmb3IgZGlzcGxheQorICBtTWVkaWFQYXJlbnQgPSBnZXR0ZXJfQWRkUmVmcyhhUGFyZW50
KTsKKworICBuc0hUTUxNZWRpYUVsZW1lbnQqIG1lZGlhID0gc3RhdGljX2Nhc3Q8bnNIVE1MTWVk
aWFFbGVtZW50Kj4oYVBhcmVudCk7CisgIC8vIFRPRE86IHNlcGFyYXRlIG5vdGlmaWNhdGlvbiBm
b3IgJ2FsdGVybmF0ZScgdHJhY2tzPworICBtZWRpYS0+Tm90aWZ5QWRkZWRTb3VyY2UoKTsKKyAg
TE9HKFBSX0xPR19ERUJVRywgKCJUcmFjayBlbGVtZW50IHNlbnQgbm90aWZpY2F0aW9uIHRvIHBh
cmVudC4iKSk7CisKKyAgLy8gRmluZCBvdXIgJ3NyYycgdXJsCisgIG5zQXV0b1N0cmluZyBzcmM7
CisgIG5zQ09NUHRyPG5zSVVSST4gdXJpOworCisgIGlmIChHZXRBdHRyKGtOYW1lU3BhY2VJRF9O
b25lLCBuc0drQXRvbXM6OnNyYywgc3JjKSkgeworICAgIG5zcmVzdWx0IHJ2ID0gTmV3VVJJRnJv
bVN0cmluZyhzcmMsIGdldHRlcl9BZGRSZWZzKHVyaSkpOworICAgIGlmIChOU19TVUNDRUVERUQo
cnYpKSB7CisgICAgICBMT0coUFJfTE9HX0FMV0FZUywgKCIlcCBUcnlpbmcgdG8gbG9hZCBmcm9t
IHNyYz0lcyIsIHRoaXMsCisgICAgICAgICAgICAgTlNfQ29udmVydFVURjE2dG9VVEY4KHNyYyku
Z2V0KCkpKTsKKyAgICAgIHByaW50ZigiJXAgVHJ5aW5nIHRvIGxvYWQgZnJvbSBzcmM9JXNcbiIs
IHRoaXMsCisgICAgICAgICAgICAgTlNfQ29udmVydFVURjE2dG9VVEY4KHNyYykuZ2V0KCkpOwor
ICAgICAgTG9hZFJlc291cmNlKHVyaSk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE5TX09LOwor
fQorCitOU19JTUVUSE9ESU1QCituc0hUTUxUcmFja0VsZW1lbnQ6OkdldFRyYWNrKG5zSURPTVRl
eHRUcmFjayAqICphVHJhY2spCit7CisgIGZwcmludGYoc3RkZXJyLCAiVHJhY2tFbGVtZW50OjpH
ZXRUcmFjaygpIGNhbGxlZC5cbiIpOworICAqYVRyYWNrID0gTlVMTDsKKworICByZXR1cm4gTlNf
T0s7Cit9CmRpZmYgLS1naXQgYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNUZXh0VHJhY2su
Y3BwIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zVGV4dFRyYWNrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGY1NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zVGV4dFRyYWNrLmNwcApAQCAtMCwwICsxLDEyOCBAQAor
LyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMt
YmFzaWMtb2Zmc2V0OiAyIC0qLSAqLworLyogdmltOnNldCB0cz0yIHN3PTIgc3RzPTIgZXQgY2lu
ZGVudDogKi8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246
IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZp
bGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICog
MS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m
IHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBT
b2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICog
TGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIGNvZGUuCisgKgor
ICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBNb3pp
bGxhIEZvdW5kYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVs
b3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDExCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKiAgUmFscGggR2ls
ZXMgPGdpbGVzQG1vemlsbGEuY29tPgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50
cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJH
UEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlz
aW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9m
IHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3Ig
dGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgor
ICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2Ug
dGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5
IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlz
aW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRo
ZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpbmNs
dWRlICJuc0lTdXBwb3J0cy5oIgorI2luY2x1ZGUgIm5zR2VuZXJpY0hUTUxFbGVtZW50LmgiCisj
aW5jbHVkZSAibnNUZXh0VHJhY2suaCIKKyNpbmNsdWRlICJuc1RleHRUcmFja0N1ZS5oIgorI2lu
Y2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCisjaW5jbHVkZSAibnNET01DbGFzc0luZm9JRC5oIgor
CitOU19JTVBMX0FERFJFRihuc1RleHRUcmFjaykKK05TX0lNUExfUkVMRUFTRShuc1RleHRUcmFj
aykKKworRE9NQ0lfREFUQShUZXh0VHJhY2ssIG5zVGV4dFRyYWNrKQorCitOU19JTlRFUkZBQ0Vf
TUFQX0JFR0lOKG5zVGV4dFRyYWNrKQorICBOU19JTlRFUkZBQ0VfTUFQX0VOVFJZKG5zSVN1cHBv
cnRzKQorICBOU19JTlRFUkZBQ0VfTUFQX0VOVFJZKG5zSURPTVRleHRUcmFjaykKKyAgTlNfRE9N
X0lOVEVSRkFDRV9NQVBfRU5UUllfQ0xBU1NJTkZPKFRleHRUcmFjaykKK05TX0lOVEVSRkFDRV9N
QVBfRU5ECisKK25zVGV4dFRyYWNrOjpuc1RleHRUcmFjaygpIHsKKyAgTU9aX0NPVU5UX0NUT1Io
bnNUZXh0VHJhY2spOworfQorCituc1RleHRUcmFjazo6fm5zVGV4dFRyYWNrKCkgeworICBNT1pf
Q09VTlRfRFRPUihuc1RleHRUcmFjayk7Cit9CisKKy8qIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcga2luZDsgKi8KK05TX0lNRVRIT0RJTVAKK25zVGV4dFRyYWNrOjpHZXRLaW5kKG5zQVN0
cmluZyYgYUtpbmQpIHsKKyAgYUtpbmQgPSBtS2luZDsKKyAgcmV0dXJuIE5TX09LOworfQorCisv
KiByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhYmVsOyAqLworTlNfSU1FVEhPRElNUAor
bnNUZXh0VHJhY2s6OkdldExhYmVsKG5zQVN0cmluZyYgYUxhYmVsKSB7CisgIGFMYWJlbCA9IG1M
YWJlbDsKKyAgcmV0dXJuIE5TX09LOworfQorCisvKiByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGxhbmd1YWdlOyAqLworTlNfSU1FVEhPRElNUAorbnNUZXh0VHJhY2s6OkdldExhbmd1YWdl
KG5zQVN0cmluZyYgYUxhbmd1YWdlKSB7CisgIGFMYW5ndWFnZSA9IG1MYW5ndWFnZTsKKyAgcmV0
dXJuIE5TX09LOworfQorCisvKiByZWFkb25seSBhdHRyaWJ1dGUgbnNJRE9NVGV4dFRyYWNrQ3Vl
TGlzdCBjdWVzOyAqLworTlNfSU1FVEhPRElNUAorbnNUZXh0VHJhY2s6OkdldEN1ZXMobnNJRE9N
VGV4dFRyYWNrQ3VlTGlzdCoqIGN1ZXMpIHsKKyAgY3VlcyA9IE5VTEw7CisgIHJldHVybiBOU19F
UlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9CisKKworLyogcmVhZG9ubHkgYXR0cmlidXRlIG5zSURP
TVRleHRUcmFja0N1ZUxpc3QgQWN0aXZlQ3VlczsgKi8KK05TX0lNRVRIT0RJTVAKK25zVGV4dFRy
YWNrOjpHZXRBY3RpdmVDdWVzKG5zSURPTVRleHRUcmFja0N1ZUxpc3QqKiBjdWVzKSB7CisgIGN1
ZXMgPSBOVUxMOworICByZXR1cm4gTlNfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCisvKiBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZTsgKi8KK05TX0lNRVRI
T0RJTVAKK25zVGV4dFRyYWNrOjpHZXRSZWFkeVN0YXRlKFBSVWludDE2ICphUmVhZHlTdGF0ZSkg
eworICAqYVJlYWR5U3RhdGUgPSBtUmVhZHlTdGF0ZTsKKyAgcmV0dXJuIE5TX09LOworfQorCisv
KiAgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBtb2RlOyAqLworTlNfSU1FVEhPRElN
UAorbnNUZXh0VHJhY2s6OkdldE1vZGUoUFJVaW50MTYgKmFNb2RlKSB7CisgICphTW9kZSA9IG1N
b2RlOworICByZXR1cm4gTlNfT0s7Cit9CitOU19JTUVUSE9ESU1QCituc1RleHRUcmFjazo6U2V0
TW9kZShQUlVpbnQxNiBhTW9kZSkgeworICBtTW9kZSA9IGFNb2RlOworICByZXR1cm4gTlNfT0s7
Cit9CisKK05TX0lNRVRIT0RJTVAKK25zVGV4dFRyYWNrOjpBZGRDdWUobnNJRE9NVGV4dFRyYWNr
Q3VlKiBjdWUpIHsKKyAgcmV0dXJuIE5TX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworTlNf
SU1FVEhPRElNUAorbnNUZXh0VHJhY2s6OlJlbW92ZUN1ZShuc0lET01UZXh0VHJhY2tDdWUqIGN1
ZSkgeworICByZXR1cm4gTlNfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQpkaWZmIC0tZ2l0IGEv
Y29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zVGV4dFRyYWNrLmggYi9jb250ZW50L2h0bWwvY29u
dGVudC9zcmMvbnNUZXh0VHJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4yNzNmZTlmCi0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25z
VGV4dFRyYWNrLmgKQEAgLTAsMCArMSw2OCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRo
OiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLworLyog
dmltOnNldCB0cz0yIHN3PTIgc3RzPTIgZXQgY2luZGVudDogKi8KKy8qICoqKioqIEJFR0lOIExJ
Q0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQor
ICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemls
bGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGlj
ZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8v
d3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9V
VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRo
ZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMg
YW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyBNb3ppbGxhIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9m
IHRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBNb3ppbGxhIEZvdW5kYXRpb24uCisgKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDEx
CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
Q29udHJpYnV0b3Iocyk6CisgKiAgUmFscGggR2lsZXMgPGdpbGVzQG1vemlsbGEuY29tPgorICoK
KyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQg
dW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIp
LAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BM
IGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0
aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFu
ZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlv
dSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovCisKKyNpZm5kZWYgbnNUZXh0VHJhY2tfaF9fCisjZGVmaW5l
IG5zVGV4dFRyYWNrX2hfXworCisjaW5jbHVkZSAibnNJU3VwcG9ydHMuaCIKKyNpbmNsdWRlICJu
c0lET01UZXh0VHJhY2suaCIKKworLyoqIEltcGxlbWVudHMgbWVkaWEgVGV4dFRyYWNrIG9iamVj
dHMKKyAqICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3Jr
LyN0ZXh0dHJhY2sKKyAqLworY2xhc3MgbnNUZXh0VHJhY2sgOiBwdWJsaWMgbnNJRE9NVGV4dFRy
YWNrCit7CitwdWJsaWM6CisgIE5TX0RFQ0xfSVNVUFBPUlRTCisgIE5TX0RFQ0xfTlNJRE9NVEVY
VFRSQUNLCisKKyAgbnNUZXh0VHJhY2soKTsKKworcHJpdmF0ZToKKyAgfm5zVGV4dFRyYWNrKCk7
CisKK3Byb3RlY3RlZDoKKyAgLyogaW1wbGVtZW50YXRpb24gbWVtYmVycyAqLworICBuc1N0cmlu
ZyBtS2luZDsKKyAgbnNTdHJpbmcgbUxhYmVsOworICBuc1N0cmluZyBtTGFuZ3VhZ2U7CisgIFBS
VWludDE2IG1SZWFkeVN0YXRlOworICBQUlVpbnQxNiBtTW9kZTsKK307CisKKyNlbmRpZiAvLyBu
c1RleHRUcmFja19oX18KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc1Rl
eHRUcmFja0N1ZS5jcHAgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNUZXh0VHJhY2tDdWUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTBmMmEKLS0tIC9kZXYv
bnVsbAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNUZXh0VHJhY2tDdWUuY3BwCkBA
IC0wLDAgKzEsMTY3IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10
YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisvKiB2aW06c2V0IHRzPTIg
c3c9MiBzdHM9MiBldCBjaW5kZW50OiAqLworLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAq
KioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAq
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlv
bnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1v
emlsbGEgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFs
IENvZGUgaXMgdGhlIE1vemlsbGEgRm91bmRhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkg
dGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMTEKKyAqIHRoZSBJbml0
aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihz
KToKKyAqICBSYWxwaCBHaWxlcyA8Z2lsZXNAbW96aWxsYS5jb20+CisgKgorICogQWx0ZXJuYXRp
dmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVy
bXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAy
IG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGlj
aCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2Fi
bGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBv
ZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBl
aXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAq
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBM
LCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBh
Ym92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zp
c2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxl
dGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVy
c2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBN
UEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sg
KioqKiogKi8KKworI2luY2x1ZGUgIm5zSVN1cHBvcnRzLmgiCisjaW5jbHVkZSAibnNUZXh0VHJh
Y2tDdWUuaCIKKyNpbmNsdWRlICJuc1RleHRUcmFjay5oIgorI2luY2x1ZGUgIm5zQ29udGVudFV0
aWxzLmgiCisKKy8qIG5zVGV4dFRyYWNrQ3VlIGltcGxlbWVudGF0aW9uICovCitOU19JTVBMX0FE
RFJFRihuc1RleHRUcmFja0N1ZSkKK05TX0lNUExfUkVMRUFTRShuc1RleHRUcmFja0N1ZSkKKwor
RE9NQ0lfREFUQShUZXh0VHJhY2tDdWUsIG5zVGV4dFRyYWNrQ3VlKQorCitOU19JTlRFUkZBQ0Vf
TUFQX0JFR0lOKG5zVGV4dFRyYWNrQ3VlKQorICBOU19JTlRFUkZBQ0VfTUFQX0VOVFJZKG5zSVN1
cHBvcnRzKQorICBOU19JTlRFUkZBQ0VfTUFQX0VOVFJZKG5zSURPTVRleHRUcmFja0N1ZSkKKyAg
TlNfRE9NX0lOVEVSRkFDRV9NQVBfRU5UUllfQ0xBU1NJTkZPKFRleHRUcmFja0N1ZSkKK05TX0lO
VEVSRkFDRV9NQVBfRU5ECisKK25zVGV4dFRyYWNrQ3VlOjpuc1RleHRUcmFja0N1ZSgpIHsKKyAg
TU9aX0NPVU5UX0NUT1IobnNUZXh0VHJhY2tDdWUpOworfQorCituc1RleHRUcmFja0N1ZTo6fm5z
VGV4dFRyYWNrQ3VlKCkgeworICBNT1pfQ09VTlRfRFRPUihuc1RleHRUcmFja0N1ZSk7Cit9CisK
K05TX0lNRVRIT0RJTVAKK25zVGV4dFRyYWNrQ3VlOjpHZXRUcmFjayhuc0lET01UZXh0VHJhY2sq
KiBhVHJhY2spCit7CisgIHJldHVybiBOU19FUlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9CisKK05T
X0lNRVRIT0RJTVAKK25zVGV4dFRyYWNrQ3VlOjpHZXRJZChuc0FTdHJpbmcmIGFJZCkgeworICBy
ZXR1cm4gTlNfRVJST1JfTk9UX0lNUExFTUVOVEVEOworfQorCitOU19JTUVUSE9ESU1QCituc1Rl
eHRUcmFja0N1ZTo6R2V0U3RhcnRUaW1lKGRvdWJsZSAqYVN0YXJ0VGltZSkgeworICAqYVN0YXJ0
VGltZSA9IG1TdGFydFRpbWU7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAor
bnNUZXh0VHJhY2tDdWU6OkdldEVuZFRpbWUoZG91YmxlICphRW5kVGltZSkgeworICAqYUVuZFRp
bWUgPSBtRW5kVGltZTsKKyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCituc1Rl
eHRUcmFja0N1ZTo6R2V0UGF1c2VPbkV4aXQoYm9vbCAqYVBhdXNlT25FeGl0KSB7CisgICphUGF1
c2VPbkV4aXQgPSBtUGF1c2VPbkV4aXQ7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhP
RElNUAorbnNUZXh0VHJhY2tDdWU6OkdldERpcmVjdGlvbihuc0FTdHJpbmcgJiBhRGlyZWN0aW9u
KSB7CisgIHJldHVybiBOU19FUlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9CisKK05TX0lNRVRIT0RJ
TVAKK25zVGV4dFRyYWNrQ3VlOjpHZXRTbmFwVG9MaW5lcyhib29sICphR2V0U25hcFRvTGluZXMp
IHsKKyAgKmFHZXRTbmFwVG9MaW5lcyA9IG1TbmFwVG9MaW5lczsKKyAgcmV0dXJuIE5TX09LOwor
fQorCitOU19JTUVUSE9ESU1QCituc1RleHRUcmFja0N1ZTo6R2V0TGluZVBvc2l0aW9uKFBSSW50
MzIgKmFMaW5lUG9zaXRpb24pIHsKKyAgKmFMaW5lUG9zaXRpb24gPSBtTGluZVBvc2l0aW9uOwor
ICByZXR1cm4gTlNfT0s7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zVGV4dFRyYWNrQ3VlOjpHZXRU
ZXh0UG9zaXRpb24oUFJJbnQzMiAqYVRleHRQb3NpdGlvbikgeworICAqYVRleHRQb3NpdGlvbiA9
IG1UZXh0UG9zaXRpb247CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAorbnNU
ZXh0VHJhY2tDdWU6OkdldFNpemUoUFJJbnQzMiAqYVNpemUpIHsKKyAgKmFTaXplID0gbVNpemU7
CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAorbnNUZXh0VHJhY2tDdWU6Okdl
dEFsaWdubWVudChuc0FTdHJpbmcgJmFBbGlnbm1lbnQpIHsKKyAgcmV0dXJuIE5TX0VSUk9SX05P
VF9JTVBMRU1FTlRFRDsKK30KKworTlNfSU1FVEhPRElNUAorbnNUZXh0VHJhY2tDdWU6OkdldEN1
ZUFzU291cmNlKG5zQVN0cmluZyAmIF9yZXR2YWwpIHsKKyAgcmV0dXJuIE5TX0VSUk9SX05PVF9J
TVBMRU1FTlRFRDsKK30KKworTlNfSU1FVEhPRElNUAorbnNUZXh0VHJhY2tDdWU6OkdldEN1ZUFz
SFRNTChuc0lET01Eb2N1bWVudEZyYWdtZW50KiogYUhUTUwpIHsKKyAgcmV0dXJuIE5TX0VSUk9S
X05PVF9JTVBMRU1FTlRFRDsKK30KKworCisvKiBuc1RleHRUcmFja0N1ZUxpc3QgaW1wbGVtZW50
YXRpb24gKi8KK05TX0lNUExfQUREUkVGKG5zVGV4dFRyYWNrQ3VlTGlzdCkKK05TX0lNUExfUkVM
RUFTRShuc1RleHRUcmFja0N1ZUxpc3QpCisKK0RPTUNJX0RBVEEoVGV4dFRyYWNrQ3VlTGlzdCwg
bnNUZXh0VHJhY2tDdWVMaXN0KQorCitOU19JTlRFUkZBQ0VfTUFQX0JFR0lOKG5zVGV4dFRyYWNr
Q3VlTGlzdCkKKyAgTlNfSU5URVJGQUNFX01BUF9FTlRSWShuc0lTdXBwb3J0cykKKyAgTlNfSU5U
RVJGQUNFX01BUF9FTlRSWShuc0lET01UZXh0VHJhY2tDdWVMaXN0KQorICBOU19ET01fSU5URVJG
QUNFX01BUF9FTlRSWV9DTEFTU0lORk8oVGV4dFRyYWNrQ3VlTGlzdCkKK05TX0lOVEVSRkFDRV9N
QVBfRU5ECisKK25zVGV4dFRyYWNrQ3VlTGlzdDo6bnNUZXh0VHJhY2tDdWVMaXN0KCkgeworICBN
T1pfQ09VTlRfQ1RPUihuc1RleHRUcmFja0N1ZUxpc3QpOworfQorCituc1RleHRUcmFja0N1ZUxp
c3Q6On5uc1RleHRUcmFja0N1ZUxpc3QoKSB7CisgIE1PWl9DT1VOVF9EVE9SKG5zVGV4dFRyYWNr
Q3VlTGlzdCk7Cit9CisKK05TX0lNRVRIT0RJTVAKK25zVGV4dFRyYWNrQ3VlTGlzdDo6R2V0TGVu
Z3RoKFBSVWludDMyICphTGVuZ3RoKQoreworICByZXR1cm4gTlNfRVJST1JfTk9UX0lNUExFTUVO
VEVEOworfQorCitOU19JTUVUSE9ESU1QCituc1RleHRUcmFja0N1ZUxpc3Q6OkdldEN1ZUJ5SWQo
Y29uc3QgbnNBU3RyaW5nJiBhSWQsIG5zSURPTVRleHRUcmFja0N1ZSAqKmFDdWUpIHsKKyAgcmV0
dXJuIE5TX0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRt
bC9jb250ZW50L3NyYy9uc1RleHRUcmFja0N1ZS5oIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3Jj
L25zVGV4dFRyYWNrQ3VlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNi
MTQ2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9uc1RleHRU
cmFja0N1ZS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDog
MjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8qIHZp
bTpzZXQgdHM9MiBzdz0yIHN0cz0yIGV0IGNpbmRlbnQ6ICovCisvKiAqKioqKiBCRUdJTiBMSUNF
TlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAq
CisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxh
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vu
c2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3
dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQg
V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUg
TGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFu
ZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFs
IENvZGUgaXMgTW96aWxsYSBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0
aGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgTW96aWxsYSBGb3VuZGF0aW9uLgorICogUG9ydGlvbnMg
Y3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMQor
ICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENv
bnRyaWJ1dG9yKHMpOgorICogIFJhbHBoIEdpbGVzIDxnaWxlc0Btb3ppbGxhLmNvbT4KKyAqCisg
KiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVu
ZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwK
KyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBh
cmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8g
YWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhl
IHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90
aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBw
cm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQg
b3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3Ug
ZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBv
bmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElD
RU5TRSBCTE9DSyAqKioqKiAqLworCisjaWZuZGVmIG5zVGV4dFRyYWNrX2hfXworI2RlZmluZSBu
c1RleHRUcmFja19oX18KKworI2luY2x1ZGUgIm5zSVN1cHBvcnRzLmgiCisjaW5jbHVkZSAibnNJ
RE9NVGV4dFRyYWNrQ3VlLmgiCisjaW5jbHVkZSAibnNUZXh0VHJhY2suaCIKKworLyoqIEltcGxl
bWVudHMgbWVkaWEgVGV4dFRyYWNrQ3VlIG9iamVjdHMKKyAqICBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyN0ZXh0dHJhY2sKKyAqLworY2xhc3MgbnNU
ZXh0VHJhY2tDdWUgOiBwdWJsaWMgbnNJRE9NVGV4dFRyYWNrQ3VlCit7CitwdWJsaWM6CisgIE5T
X0RFQ0xfSVNVUFBPUlRTCisgIE5TX0RFQ0xfTlNJRE9NVEVYVFRSQUNLQ1VFCisKKyAgbnNUZXh0
VHJhY2tDdWUoKTsKKworcHJpdmF0ZToKKyAgfm5zVGV4dFRyYWNrQ3VlKCk7CisKK3Byb3RlY3Rl
ZDoKKyAgLyogYXR0cmlidXRlIHN0b3JhZ2UgKi8KKyAgZG91YmxlIG1TdGFydFRpbWU7CisgIGRv
dWJsZSBtRW5kVGltZTsKKworICBib29sIG1QYXVzZU9uRXhpdDsKKworICBib29sIG1TbmFwVG9M
aW5lczsKKyAgUFJJbnQzMiBtTGluZVBvc2l0aW9uOworICBQUkludDMyIG1UZXh0UG9zaXRpb247
CisgIFBSSW50MzIgbVNpemU7CisKKyAgLy9uc1RleHRUcmFjayAqdHJhY2s7IC8qKjwgUGFyZW50
IFRleHRUcmFjayBvYmplY3QgKi8KK307CisKKy8qKiBJbXBsZW1lbnRzIG1lYWQgVGV4dFRyYWNr
Q3VlTGlzdCBvYmplY3RzCisgKiAgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBz
L2N1cnJlbnQtd29yay8jdGV4dHRyYWNrCisgKi8KK2NsYXNzIG5zVGV4dFRyYWNrQ3VlTGlzdCA6
IHB1YmxpYyBuc0lET01UZXh0VHJhY2tDdWVMaXN0Cit7CisgIHB1YmxpYzoKKyAgTlNfREVDTF9J
U1VQUE9SVFMKKyAgICBOU19ERUNMX05TSURPTVRFWFRUUkFDS0NVRUxJU1QKKworICBuc1RleHRU
cmFja0N1ZUxpc3QoKTsKKworcHJpdmF0ZToKKyAgfm5zVGV4dFRyYWNrQ3VlTGlzdCgpOworCitw
cm90ZWN0ZWQ6CisgIC8qIGluc3RhbmNlIG1lbWJlcnMgKi8KKworfTsKKworI2VuZGlmIC8vIG5z
VGV4dFRyYWNrX2hfXwpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS9NYWtlZmlsZS5pbiBiL2Nv
bnRlbnQvbWVkaWEvTWFrZWZpbGUuaW4KaW5kZXggODYzZDMwNi4uM2ZmZWJlMSAxMDA2NDQKLS0t
IGEvY29udGVudC9tZWRpYS9NYWtlZmlsZS5pbgorKysgYi9jb250ZW50L21lZGlhL01ha2VmaWxl
LmluCkBAIC05NCw2ICs5NCwxMCBAQCBpZmRlZiBNT1pfV0VCTQogUEFSQUxMRUxfRElSUyArPSB3
ZWJtCiBlbmRpZgogCitpZmRlZiBNT1pfV0VCVlRUCitQQVJBTExFTF9ESVJTICs9IHdlYnZ0dAor
ZW5kaWYKKwogaWZkZWYgRU5BQkxFX1RFU1RTCiBQQVJBTExFTF9ESVJTICs9IHRlc3QKIGVuZGlm
CmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL25zQnVpbHRpbkRlY29kZXIuaCBiL2NvbnRlbnQv
bWVkaWEvbnNCdWlsdGluRGVjb2Rlci5oCmluZGV4IDgzMzg0NjAuLmZmYjYzNzEgMTAwNjQ0Ci0t
LSBhL2NvbnRlbnQvbWVkaWEvbnNCdWlsdGluRGVjb2Rlci5oCisrKyBiL2NvbnRlbnQvbWVkaWEv
bnNCdWlsdGluRGVjb2Rlci5oCkBAIC0zNyw3ICszNyw3IEBACiAgKgogICogKioqKiogRU5EIExJ
Q0VOU0UgQkxPQ0sgKioqKiogKi8KIC8qCi1FYWNoIHZpZGVvIGVsZW1lbnQgYmFzZWQgb24gbnNC
dWlsdGluRGVjb2RlciBoYXMgYSBzdGF0ZSBtYWNoaW5lIHRvIG1hbmFnZQorRWFjaCBtZWRpYSBl
bGVtZW50IGJhc2VkIG9uIG5zQnVpbHRpbkRlY29kZXIgaGFzIGEgc3RhdGUgbWFjaGluZSB0byBt
YW5hZ2UKIGl0cyBwbGF5IHN0YXRlIGFuZCBrZWVwIHRoZSBjdXJyZW50IGZyYW1lIHVwIHRvIGRh
dGUuIEFsbCBzdGF0ZSBtYWNoaW5lcwogc2hhcmUgdGltZSBpbiBhIHNpbmdsZSBzaGFyZWQgdGhy
ZWFkLiBFYWNoIGRlY29kZXIgYWxzbyBoYXMgb25lIHRocmVhZAogZGVkaWNhdGVkIHRvIGRlY29k
aW5nIGF1ZGlvIGFuZCB2aWRlbyBkYXRhLiBUaGlzIHRocmVhZCBpcyBzaHV0ZG93biB3aGVuCkBA
IC01Myw3ICs1Myw3IEBAIGRlY29kaW5nIG9wZXJhdGlvbnMgYW5kIEEvViBzeW5jLgogCiBFYWNo
IHN0YXRlIG1hY2hpbmUgcnVucyBvbiB0aGUgc2hhcmVkIHN0YXRlIG1hY2hpbmUgdGhyZWFkLiBF
dmVyeSB0aW1lIHNvbWUKIGFjdGlvbiBpcyByZXF1aXJlZCBmb3IgYSBzdGF0ZSBtYWNoaW5lLCBp
dCBpcyBzY2hlZHVsZWQgdG8gcnVuIG9uIHRoZSBzaGFyZWQKLXRoZSBzdGF0ZSBtYWNoaW5lIHRo
cmVhZC4gVGhlIHN0YXRlIG1hY2hpbmUgcnVucyBvbmUgImN5Y2xlIiBvbiB0aGUgc3RhdGUKK3N0
YXRlIG1hY2hpbmUgdGhyZWFkLiBUaGUgc3RhdGUgbWFjaGluZSBydW5zIG9uZSAiY3ljbGUiIG9u
IHRoZSBzdGF0ZQogbWFjaGluZSB0aHJlYWQsIGFuZCB0aGVuIHJldHVybnMuIElmIG5lY2Vzc2Fy
eSwgaXQgd2lsbCBzY2hlZHVsZSBpdHNlbGYgdG8KIHJ1biBhZ2FpbiBpbiBmdXR1cmUuIFdoaWxl
IHJ1bm5pbmcgdGhpcyBjeWNsZSwgaXQgbXVzdCBub3QgYmxvY2sgdGhlCiB0aHJlYWQsIGFzIG90
aGVyIHN0YXRlIG1hY2hpbmVzJyBldmVudHMgbWF5IG5lZWQgdG8gcnVuLiBTdGF0ZSBzaGFyZWQK
QEAgLTE3Miw4ICsxNzIsOCBAQCBwbGF5ZXIgU0hVVERPV04gIGRlY29kZXIgU0hVVERPV04KIAog
VGhlIGdlbmVyYWwgc2VxdWVuY2Ugb2YgZXZlbnRzIGlzOgogCi0xKSBUaGUgdmlkZW8gZWxlbWVu
dCBjYWxscyBMb2FkIG9uIG5zTWVkaWFEZWNvZGVyLiBUaGlzIGNyZWF0ZXMgdGhlCi0gICBzdGF0
ZSBtYWNoaW5lIGFuZCBzdGFydHMgdGhlIGNoYW5uZWwgZm9yIGRvd25sb2FkaW5nIHRoZQorMSkg
VGhlIG1lZGlhIGVsZW1lbnQgY2FsbHMgTG9hZCBvbiBuc01lZGlhRGVjb2Rlci4gVGhpcyBjcmVh
dGVzCisgICB0aGUgc3RhdGUgbWFjaGluZSBhbmQgc3RhcnRzIHRoZSBjaGFubmVsIGZvciBkb3du
bG9hZGluZyB0aGUKICAgIGZpbGUuIEl0IGluc3RhbnRpYXRlcyBhbmQgc2NoZWR1bGVzIHRoZSBu
c0RlY29kZXJTdGF0ZU1hY2hpbmUuIFRoZQogICAgaGlnaCBsZXZlbCBMT0FESU5HIHN0YXRlIGlz
IGVudGVyZWQsIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGRlY29kZQogICAgdGhyZWFkIGJlaW5nIGNy
ZWF0ZWQgYW5kIHN0YXJ0aW5nIHRvIGRlY29kZSBtZXRhZGF0YS4gVGhlc2UgYXJlCmRpZmYgLS1n
aXQgYS9jb250ZW50L21lZGlhL3dlYnZ0dC9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvbWVkaWEvd2Vi
dnR0L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MmNm
ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L21lZGlhL3dlYnZ0dC9NYWtlZmlsZS5pbgpA
QCAtMCwwICsxLDY1IEBACisjICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyMgVmVy
c2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisjCisjIFRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgor
IyAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorIyBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyMKKyMgU29m
dHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBiYXNpcywKKyMgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisjIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisjIExpY2Vu
c2UuCisjCisjIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgY29kZS4KKyMKKyMgVGhlIElu
aXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBNb3ppbGxhIEZvdW5k
YXRpb24uCisjIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBD
b3B5cmlnaHQgKEMpIDIwMTEKKyMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorIworIyBDb250cmlidXRvcihzKToKKyMgICBSYWxwaCBHaWxlcyA8Z2lsZXNAbW96
aWxsYS5jb20+CisjCisjIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
bWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisjIGVpdGhlciB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorIyB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0
aGUgIkxHUEwiKSwKKyMgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9y
IHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyMgb2YgdGhvc2UgYWJvdmUuIElmIHlv
dSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyMg
dW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRv
IGFsbG93IG90aGVycyB0bworIyB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorIyBkZWNpc2lvbiBieSBkZWxldGlu
ZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQor
IyBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJ
ZiB5b3UgZG8gbm90IGRlbGV0ZQorIyB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQg
bWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisjIHRoZSB0ZXJtcyBvZiBh
bnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisjCisjICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqCisKK0RFUFRICQk9IC4uLy4uLy4uCit0b3BzcmNkaXIgICAgICAg
PSBAdG9wX3NyY2RpckAKK3NyY2RpciAgICAgICAgICA9IEBzcmNkaXJACitWUEFUSCAgICAgICAg
ICAgPSBAc3JjZGlyQAorCitpbmNsdWRlICQoREVQVEgpL2NvbmZpZy9hdXRvY29uZi5taworCitN
T0RVTEUJCT0gY29udGVudAorTElCUkFSWV9OQU1FCT0gZ2tjb25ud2VidnR0X3MKK0xJQlhVTF9M
SUJSQVJZICA9IDEKKworRk9SQ0VfU1RBVElDX0xJQiA9IDEKKworRVhQT1JUUyArPSBcCisgIG5z
V2ViVlRURGVjb2Rlci5oIFwKKyAgbnNXZWJWVFRSZWFkZXIuaCBcCisgICQoTlVMTCkKKworQ1BQ
U1JDUyA9IFwKKyAgbnNXZWJWVFREZWNvZGVyLmNwcCBcCisgIG5zV2ViVlRUUmVhZGVyLmggXAor
ICAkKE5VTEwpCisKK2luY2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5taworCitJTkNM
VURFUyArPSBcCisgIC1JJChzcmNkaXIpLy4uLy4uL2Jhc2Uvc3JjIFwKKyAgLUkkKHNyY2Rpcikv
Li4vLi4vaHRtbC9jb250ZW50L3NyYyBcCisgICQoTlVMTCkKZGlmZiAtLWdpdCBhL2NvbnRlbnQv
bWVkaWEvd2VidnR0L25zV2ViVlRURGVjb2Rlci5jcHAgYi9jb250ZW50L21lZGlhL3dlYnZ0dC9u
c1dlYlZUVERlY29kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2
MWE2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L21lZGlhL3dlYnZ0dC9uc1dlYlZUVERl
Y29kZXIuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDog
MjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8qIHZp
bTpzZXQgdHM9MiBzdz0yIHN0cz0yIGV0IGNpbmRlbnQ6ICovCisvKiAqKioqKiBCRUdJTiBMSUNF
TlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAq
CisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxh
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vu
c2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3
dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQg
V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUg
TGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFu
ZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFs
IENvZGUgaXMgTW96aWxsYSBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0
aGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgTW96aWxsYSBGb3VuZGF0aW9uLgorICogUG9ydGlvbnMg
Y3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMQor
ICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENv
bnRyaWJ1dG9yKHMpOgorICogIFJhbHBoIEdpbGVzIDxnaWxlc0Btb3ppbGxhLmNvbT4KKyAqCisg
KiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVu
ZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwK
KyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBh
cmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8g
YWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhl
IHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90
aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBw
cm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQg
b3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3Ug
ZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBv
bmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElD
RU5TRSBCTE9DSyAqKioqKiAqLworCisjaW5jbHVkZSAibnNCdWlsdGluRGVjb2RlclN0YXRlTWFj
aGluZS5oIgorI2luY2x1ZGUgIm5zV2ViVlRURGVjb2Rlci5oIgorI2luY2x1ZGUgIm5zV2ViVlRU
UmVhZGVyLmgiCisKK25zRGVjb2RlclN0YXRlTWFjaGluZSogbnNXZWJWVFREZWNvZGVyOjpDcmVh
dGVTdGF0ZU1hY2hpbmUoKQoreworICByZXR1cm4gbmV3IG5zQnVpbHRpbkRlY29kZXJTdGF0ZU1h
Y2hpbmUodGhpcywgbmV3IG5zV2ViVlRUUmVhZGVyKHRoaXMpKTsKK30KZGlmZiAtLWdpdCBhL2Nv
bnRlbnQvbWVkaWEvd2VidnR0L25zV2ViVlRURGVjb2Rlci5oIGIvY29udGVudC9tZWRpYS93ZWJ2
dHQvbnNXZWJWVFREZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YjIzODQyNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvbWVkaWEvd2VidnR0L25zV2ViVlRU
RGVjb2Rlci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDog
MjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8qIHZp
bTpzZXQgdHM9MiBzdz0yIHN0cz0yIGV0IGNpbmRlbnQ6ICovCisvKiAqKioqKiBCRUdJTiBMSUNF
TlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAq
CisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxh
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vu
c2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3
dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQg
V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUg
TGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFu
ZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFs
IENvZGUgaXMgTW96aWxsYSBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0
aGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgTW96aWxsYSBGb3VuZGF0aW9uLgorICogUG9ydGlvbnMg
Y3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAxMQor
ICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENv
bnRyaWJ1dG9yKHMpOgorICogIFJhbHBoIEdpbGVzIDxnaWxlc0Btb3ppbGxhLmNvbT4KKyAqCisg
KiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVu
ZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwK
KyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBh
cmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8g
YWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhl
IHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90
aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBw
cm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQg
b3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3Ug
ZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBv
bmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElD
RU5TRSBCTE9DSyAqKioqKiAqLworI2lmICFkZWZpbmVkKG5zV2ViVlRURGVjb2Rlcl9oXykKKyNk
ZWZpbmUgbnNXZWJWVFREZWNvZGVyX2hfCisKKyNpbmNsdWRlICJuc0J1aWx0aW5EZWNvZGVyLmgi
CisKK2NsYXNzIG5zV2ViVlRURGVjb2RlciA6IHB1YmxpYyBuc0J1aWx0aW5EZWNvZGVyCit7Citw
dWJsaWM6CisgIHZpcnR1YWwgbnNNZWRpYURlY29kZXIqIENsb25lKCkgeyByZXR1cm4gbmV3IG5z
V2ViVlRURGVjb2RlcigpOyB9CisgIHZpcnR1YWwgbnNEZWNvZGVyU3RhdGVNYWNoaW5lKiBDcmVh
dGVTdGF0ZU1hY2hpbmUoKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRp
YS93ZWJ2dHQvbnNXZWJWVFRSZWFkZXIuY3BwIGIvY29udGVudC9tZWRpYS93ZWJ2dHQvbnNXZWJW
VFRSZWFkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZmJjODkK
LS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L21lZGlhL3dlYnZ0dC9uc1dlYlZUVFJlYWRlci5j
cHAKQEAgLTAsMCArMSw1NyBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRl
bnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLworLyogdmltOnNldCB0
cz0yIHN3PTIgc3RzPTIgZXQgY2luZGVudDogKi8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxP
Q0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemls
bGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNl
CisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0
YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBp
cyBNb3ppbGxhIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmln
aW5hbCBDb2RlIGlzIHRoZSBNb3ppbGxhIEZvdW5kYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVk
IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDExCisgKiB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0
b3Iocyk6CisgKiAgUmFscGggR2lsZXMgPGdpbGVzQG1vemlsbGEuY29tPgorICoKKyAqIEFsdGVy
bmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhl
IHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNp
b24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4g
d2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBs
aWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1
c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMg
b2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRv
CisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lv
bnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBw
cm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3Qg
ZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3Vy
IHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0
aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJM
T0NLICoqKioqICovCisjaWYgIWRlZmluZWQobnNXZWJWVFRSZWFkZXJfaF8pCisjZGVmaW5lIG5z
V2ViVlRUUmVhZGVyX2hfCisKKyNpbmNsdWRlICJuc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmgiCisj
aW5jbHVkZSAibnNXZWJWVFRSZWFkZXIuaCIKKworI2luY2x1ZGUgIndlYnZ0dC93ZWJ2dHQuaCIK
KworbnNXZWJWVFRSZWFkZXI6Om5zV2ViVlRUUmVhZGVyKG5zQnVpbGRpbkRlY29kZXIqIGFEZWNv
ZGVyKQorICA6IG5zQnVpbHRpbkRlY29kZXJSZWFkZXIoYURlY29kZXIpCit7CisgIE1PWl9DT1VO
VF9DVE9SKG5zV2ViVlRUUmVhZGVyKTsKK30KKworbnNXZWJWVFRSZWFkZXI6On5uc1dlYlZUVFJl
YWRlcigpCit7CisgIE1PWl9DT1VOVF9EVE9SKG5zV2ViTVJlYWRlcik7Cit9CisKKyNlbmRpZiAv
KiBuc1dlYlZUVFJlYWRlcl9oXyAqLwpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS93ZWJ2dHQv
bnNXZWJWVFRSZWFkZXIuaCBiL2NvbnRlbnQvbWVkaWEvd2VidnR0L25zV2ViVlRUUmVhZGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1YzlkMgotLS0gL2Rldi9udWxs
CisrKyBiL2NvbnRlbnQvbWVkaWEvd2VidnR0L25zV2ViVlRUUmVhZGVyLmgKQEAgLTAsMCArMSw3
MiBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBu
aWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLworLyogdmltOnNldCB0cz0yIHN3PTIgc3RzPTIg
ZXQgY2luZGVudDogKi8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZl
cnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0
aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lv
bgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAq
CisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIGNvZGUu
CisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIHRo
ZSBNb3ppbGxhIEZvdW5kYXRpb24uCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFs
IERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDExCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKiAgUmFs
cGggR2lsZXMgPGdpbGVzQG1vemlsbGEuY29tPgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBj
b250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBl
aXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAo
dGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQK
KyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBH
UEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUg
eW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJl
cGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVp
cmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUg
cHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BM
IG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisj
aWYgIWRlZmluZWQobnNXZWJWVFRSZWFkZXJfaF8pCisjZGVmaW5lIG5zV2ViVlRUUmVhZGVyX2hf
CisKKyNpbmNsdWRlICJuc0J1aWx0aW5EZWNvZGVyUmVhZGVyLmgiCisjaW5jbHVkZSAibnNCdWls
dGluRGVjb2Rlci5oIgorCitjbGFzcyBuc1dlYlZUVFJlYWRlciA6IHB1YmxpYyBuc0J1aWx0aW5E
ZWNvZGVyUmVhZGVyCit7CitwdWJsaWM6CisgIG5zV2ViVlRUUmVhZGVyKG5zQnVpbHRpbkRlY29k
ZXIqIGFEZWNvZGVyKTsKKyAgfm5zV2ViVlRUUmVhZGVyKCk7CisKKyAgdmlydHVhbCBuc3Jlc3Vs
dCBJbml0KG5zQnVpbHRpbkRlY29kZXJSZWFkZXIqIGFDbG9uZURvbm9yKTsKKyAgdmlydHVhbCBu
c3Jlc3VsdCBSZXNldERlY29kZSgpOworICB2aXJ0dWFsIGJvb2wgRGVjb2RlQXVkaW9EYXRhKCk7
CisgIHZpcnR1YWwgYm9vbCBEZWNvZGVWaWRlb0ZyYW1lKGJvb2wgJmFLZXlmcmFtZVNraXAsIFBS
SW50NjQgYVRpbWVUaHJlc2hvbGQpOworCisgIHZpcnR1YWwgYm9vbCBIYXNBdWRpbygpCisgIHsK
KyAgICBOU19BU1NFUlRJT04obURlY29kZXItPk9uRGVjb2RlVGhyZWFkKCksICJTaG91bGQgYmUg
b24gZGVjb2RlIHRocmVhZC4iKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICB2aXJ0dWFs
IGJvb2wgSGFzVmlkZW8oKQorICB7CisgICAgTlNfQVNTRVJUSU9OKG1EZWNvZGVyLT5PbkRlY29k
ZVRocmVhZCgpLCAiU2hvdWxkIGJlIG9uIGRlY29kZSB0aHJlYWQuIik7CisgICAgcmV0dXJuIGZh
bHNlOworICB9CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBSZWFkTWV0YWRhdGEobnNWaWRlb0luZm8q
IGFJbmZvKTsKKyAgdmlydHVhbCBuc3Jlc3VsdCBTZWVrKFBSSW50NjQgYVRpbWUsIFBSSW50NjQg
YVN0YXJ0VGltZSwgUFJJbnQ2NCBhRW5kVGltZSwgUFJJbnQ2NCBhQ3VycmVudFRpbWUpOworICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEJ1ZmZlcmVkKG5zVGltZVJhbmdlcyogYUJ1ZmZlcmVkLCBQUklu
dDY0IGFTdGFydFRpbWUpOworfTsKKworI2VuZGlmIC8qIG5zV2ViVlRUUmVhZGVyX2hfICovCmRp
ZmYgLS1naXQgYS9kb20vYmFzZS9uc0RPTUNsYXNzSW5mby5jcHAgYi9kb20vYmFzZS9uc0RPTUNs
YXNzSW5mby5jcHAKaW5kZXggODQ1ZjU1Ni4uMzUxYjU3NSAxMDA2NDQKLS0tIGEvZG9tL2Jhc2Uv
bnNET01DbGFzc0luZm8uY3BwCisrKyBiL2RvbS9iYXNlL25zRE9NQ2xhc3NJbmZvLmNwcApAQCAt
MzAzLDYgKzMwMyw3IEBACiAjaW5jbHVkZSAibnNJRE9NTWVkaWFFcnJvci5oIgogI2luY2x1ZGUg
Im5zSURPTVRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJuc0lET01IVE1MU291cmNlRWxlbWVudC5o
IgorI2luY2x1ZGUgIm5zSURPTUhUTUxUcmFja0VsZW1lbnQuaCIKICNpbmNsdWRlICJuc0lET01I
VE1MVmlkZW9FbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NSFRNTEF1ZGlvRWxlbWVudC5oIgog
I2luY2x1ZGUgIm5zSURPTVByb2dyZXNzRXZlbnQuaCIKQEAgLTE0NjUsMTIgKzE0NjYsMjAgQEAg
c3RhdGljIG5zRE9NQ2xhc3NJbmZvRGF0YSBzQ2xhc3NJbmZvRGF0YVtdID0gewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRUxFTUVOVF9TQ1JJUFRBQkxFX0ZMQUdTKQogICBOU19ERUZJTkVf
Q0xBU1NJTkZPX0RBVEEoSFRNTFNvdXJjZUVsZW1lbnQsIG5zRWxlbWVudFNILAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRUxFTUVOVF9TQ1JJUFRBQkxFX0ZMQUdTKQorICBOU19ERUZJTkVf
Q0xBU1NJTkZPX0RBVEEoSFRNTFRyYWNrRWxlbWVudCwgbnNFbGVtZW50U0gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFTEVNRU5UX1NDUklQVEFCTEVfRkxBR1MpCiAgIE5TX0RFRklORV9D
TEFTU0lORk9fREFUQShNZWRpYUVycm9yLCBuc0RPTUdlbmVyaWNTSCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERPTV9ERUZBVUxUX1NDUklQVEFCTEVfRkxBR1MpCiAgIE5TX0RFRklORV9D
TEFTU0lORk9fREFUQShIVE1MQXVkaW9FbGVtZW50LCBuc0VsZW1lbnRTSCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEVMRU1FTlRfU0NSSVBUQUJMRV9GTEFHUykKICAgTlNfREVGSU5FX0NM
QVNTSU5GT19EQVRBKFRpbWVSYW5nZXMsIG5zRE9NR2VuZXJpY1NILAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRE9NX0RFRkFVTFRfU0NSSVBUQUJMRV9GTEFHUykKKyAgTlNfREVGSU5FX0NM
QVNTSU5GT19EQVRBKFRleHRUcmFjaywgbnNET01HZW5lcmljU0gsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBET01fREVGQVVMVF9TQ1JJUFRBQkxFX0ZMQUdTKQorICBOU19ERUZJTkVfQ0xB
U1NJTkZPX0RBVEEoVGV4dFRyYWNrQ3VlLCBuc0RPTUdlbmVyaWNTSCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERPTV9ERUZBVUxUX1NDUklQVEFCTEVfRkxBR1MpCisgIE5TX0RFRklORV9D
TEFTU0lORk9fREFUQShUZXh0VHJhY2tDdWVMaXN0LCBuc0RPTUdlbmVyaWNTSCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERPTV9ERUZBVUxUX1NDUklQVEFCTEVfRkxBR1MpCiAjZW5kaWYK
IAogICBOU19ERUZJTkVfQ0xBU1NJTkZPX0RBVEEoUHJvZ3Jlc3NFdmVudCwgbnNET01HZW5lcmlj
U0gsCkBAIC00MDg0LDYgKzQwOTMsMTEgQEAgbnNET01DbGFzc0luZm86OkluaXQoKQogICAgIERP
TV9DTEFTU0lORk9fR0VORVJJQ19IVE1MX01BUF9FTlRSSUVTCiAgIERPTV9DTEFTU0lORk9fTUFQ
X0VORAogCisgIERPTV9DTEFTU0lORk9fTUFQX0JFR0lOKEhUTUxUcmFja0VsZW1lbnQsIG5zSURP
TUhUTUxUcmFja0VsZW1lbnQpCisgICAgRE9NX0NMQVNTSU5GT19NQVBfRU5UUlkobnNJRE9NSFRN
TFRyYWNrRWxlbWVudCkKKyAgICBET01fQ0xBU1NJTkZPX0dFTkVSSUNfSFRNTF9NQVBfRU5UUklF
UworICBET01fQ0xBU1NJTkZPX01BUF9FTkQKKwogICBET01fQ0xBU1NJTkZPX01BUF9CRUdJTihN
ZWRpYUVycm9yLCBuc0lET01NZWRpYUVycm9yKQogICAgIERPTV9DTEFTU0lORk9fTUFQX0VOVFJZ
KG5zSURPTU1lZGlhRXJyb3IpCiAgIERPTV9DTEFTU0lORk9fTUFQX0VORApAQCAtNDA5NSw3ICs0
MTA5LDE5IEBAIG5zRE9NQ2xhc3NJbmZvOjpJbml0KCkKIAogICBET01fQ0xBU1NJTkZPX01BUF9C
RUdJTihUaW1lUmFuZ2VzLCBuc0lET01UaW1lUmFuZ2VzKQogICAgIERPTV9DTEFTU0lORk9fTUFQ
X0VOVFJZKG5zSURPTVRpbWVSYW5nZXMpCi0gIERPTV9DTEFTU0lORk9fTUFQX0VORCAgCisgIERP
TV9DTEFTU0lORk9fTUFQX0VORAorCisgIERPTV9DTEFTU0lORk9fTUFQX0JFR0lOKFRleHRUcmFj
aywgbnNJRE9NVGV4dFRyYWNrKQorICAgIERPTV9DTEFTU0lORk9fTUFQX0VOVFJZKG5zSURPTVRl
eHRUcmFjaykKKyAgRE9NX0NMQVNTSU5GT19NQVBfRU5ECisKKyAgRE9NX0NMQVNTSU5GT19NQVBf
QkVHSU4oVGV4dFRyYWNrQ3VlLCBuc0lET01UZXh0VHJhY2tDdWUpCisgICAgRE9NX0NMQVNTSU5G
T19NQVBfRU5UUlkobnNJRE9NVGV4dFRyYWNrQ3VlKQorICBET01fQ0xBU1NJTkZPX01BUF9FTkQK
KworICBET01fQ0xBU1NJTkZPX01BUF9CRUdJTihUZXh0VHJhY2tDdWVMaXN0LCBuc0lET01UZXh0
VHJhY2tDdWVMaXN0KQorICAgIERPTV9DTEFTU0lORk9fTUFQX0VOVFJZKG5zSURPTVRleHRUcmFj
a0N1ZUxpc3QpCisgIERPTV9DTEFTU0lORk9fTUFQX0VORAogI2VuZGlmCiAKICAgRE9NX0NMQVNT
SU5GT19NQVBfQkVHSU4oUHJvZ3Jlc3NFdmVudCwgbnNJRE9NUHJvZ3Jlc3NFdmVudCkKZGlmZiAt
LWdpdCBhL2RvbS9iYXNlL25zRE9NQ2xhc3NJbmZvQ2xhc3Nlcy5oIGIvZG9tL2Jhc2UvbnNET01D
bGFzc0luZm9DbGFzc2VzLmgKaW5kZXggMzExZWRhYi4uNTFhNDEzNCAxMDA2NDQKLS0tIGEvZG9t
L2Jhc2UvbnNET01DbGFzc0luZm9DbGFzc2VzLmgKKysrIGIvZG9tL2Jhc2UvbnNET01DbGFzc0lu
Zm9DbGFzc2VzLmgKQEAgLTQ0Niw5ICs0NDYsMTMgQEAgRE9NQ0lfQ0xBU1MoQ1NTRm9udEZhY2VT
dHlsZURlY2wpCiAvLyBXaGF0V0cgVmlkZW8gRWxlbWVudAogRE9NQ0lfQ0xBU1MoSFRNTFZpZGVv
RWxlbWVudCkKIERPTUNJX0NMQVNTKEhUTUxTb3VyY2VFbGVtZW50KQorRE9NQ0lfQ0xBU1MoSFRN
TFRyYWNrRWxlbWVudCkKIERPTUNJX0NMQVNTKE1lZGlhRXJyb3IpCiBET01DSV9DTEFTUyhIVE1M
QXVkaW9FbGVtZW50KQogRE9NQ0lfQ0xBU1MoVGltZVJhbmdlcykKK0RPTUNJX0NMQVNTKFRleHRU
cmFjaykKK0RPTUNJX0NMQVNTKFRleHRUcmFja0N1ZSkKK0RPTUNJX0NMQVNTKFRleHRUcmFja0N1
ZUxpc3QpCiAjZW5kaWYKIAogRE9NQ0lfQ0xBU1MoUHJvZ3Jlc3NFdmVudCkKZGlmZiAtLWdpdCBh
L2RvbS9pbnRlcmZhY2VzL2h0bWwvTWFrZWZpbGUuaW4gYi9kb20vaW50ZXJmYWNlcy9odG1sL01h
a2VmaWxlLmluCmluZGV4IDBlMjg2ZmIuLmRhYTQyOTEgMTAwNjQ0Ci0tLSBhL2RvbS9pbnRlcmZh
Y2VzL2h0bWwvTWFrZWZpbGUuaW4KKysrIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9NYWtlZmlsZS5p
bgpAQCAtMTA5LDkgKzEwOSwxMiBAQCBTREtfWFBJRExTUkNTID0JCQkJCVwKIAluc0lET01IVE1M
VUxpc3RFbGVtZW50LmlkbAkJXAogCW5zSURPTU1lZGlhRXJyb3IuaWRsCQlcCiAJbnNJRE9NVGlt
ZVJhbmdlcy5pZGwJCVwKKwluc0lET01UZXh0VHJhY2suaWRsCQlcCisJbnNJRE9NVGV4dFRyYWNr
Q3VlLmlkbAkJXAogCW5zSURPTUhUTUxCeXRlUmFuZ2VzLmlkbAkJXAogCW5zSURPTUhUTUxNZWRp
YUVsZW1lbnQuaWRsCQlcCiAJbnNJRE9NSFRNTFNvdXJjZUVsZW1lbnQuaWRsCQlcCisJbnNJRE9N
SFRNTFRyYWNrRWxlbWVudC5pZGwJCVwKIAluc0lET01IVE1MVmlkZW9FbGVtZW50LmlkbAkJXAog
CW5zSURPTUhUTUxBdWRpb0VsZW1lbnQuaWRsCQlcCiAJbnNJRE9NVmFsaWRpdHlTdGF0ZS5pZGwJ
CVwKZGlmZiAtLWdpdCBhL2RvbS9pbnRlcmZhY2VzL2h0bWwvbnNJRE9NSFRNTFRyYWNrRWxlbWVu
dC5pZGwgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxUcmFja0VsZW1lbnQuaWRsCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzYwNDIKLS0tIC9kZXYvbnVsbAor
KysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTUhUTUxUcmFja0VsZW1lbnQuaWRsCkBAIC0w
LDAgKzEsNjMgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMt
bW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8qIHZpbTpzZXQgdHM9MiBzdz0y
IHN0cz0yIGV0IGNpbmRlbnQ6ICovCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioq
CisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVu
dHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNl
IFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9N
UEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1
bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxs
YSBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29k
ZSBpcyB0aGUgTW96aWxsYSBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhl
IEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDcKKyAqIHRoZSBJbml0aWFs
IERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToK
KyAqICBDaHJpcyBEb3VibGUgPGNocmlzLmRvdWJsZUBkb3VibGUuY28ubno+CisgKiAgUmFscGgg
R2lsZXMgPGdpbGVzQG1vemlsbGEuY29tPgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRo
ZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhl
ICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVy
c2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJv
dmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAq
IG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwg
b3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91
cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxh
Y2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVk
IGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJv
dmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9y
IHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKyNp
bmNsdWRlICJuc0lET01IVE1MRWxlbWVudC5pZGwiCisjaW5jbHVkZSAibnNJRE9NVGV4dFRyYWNr
LmlkbCIKKworLyoqCisgKiBUaGUgbnNJRE9NSFRNTFRyYWNrRWxlbWVudCBpbnRlcmZhY2UgaXMg
dGhlIGludGVyZmFjZSB0byBhIEhUTUwKKyAqIDx0cmFjaz4gZWxlbWVudC4KKyAqCisgKiBGb3Ig
bW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGludGVyZmFjZSwgcGxlYXNlIHNlZQorICogaHR0cDov
L3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jdGhlLXRyYWNrLWVs
ZW1lbnQKKyAqCisgKiBAc3RhdHVzIFVOREVSX0RFVkVMT1BNRU5UCisgKi8KKworW3NjcmlwdGFi
bGUsIHV1aWQoODQxZTY0YzMtNDM2My00MTlhLTkxMmQtZDBiNzljMWQxYmY3KV0KK2ludGVyZmFj
ZSBuc0lET01IVE1MVHJhY2tFbGVtZW50IDogbnNJRE9NSFRNTEVsZW1lbnQKK3sKKyAgICAgICAg
ICAgYXR0cmlidXRlIERPTVN0cmluZyBraW5kOworICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHNyYzsKKyAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBzcmNsYW5nOworICAgICAg
ICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhYmVsOworICAgICAgICAgICBhdHRyaWJ1dGUgYm9v
bGVhbiBkZWZhdWx0OworCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBuc0lET01UZXh0VHJhY2sgdHJh
Y2s7Cit9OwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01UZXh0VHJhY2su
aWRsIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01UZXh0VHJhY2suaWRsCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YjgzMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb20v
aW50ZXJmYWNlcy9odG1sL25zSURPTVRleHRUcmFjay5pZGwKQEAgLTAsMCArMSw4MiBAQAorLyog
LSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFz
aWMtb2Zmc2V0OiAyIC0qLSAqLworLyogdmltOnNldCB0cz0yIHN3PTIgc3RzPTIgZXQgY2luZGVu
dDogKi8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1Q
TCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
YXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4x
ICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0
d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGlj
ZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIGNvZGUuCisgKgorICog
VGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBNb3ppbGxh
IENvcnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIgYXJlIENvcHlyaWdodCAoQykgMjAwNworICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICogIFJhbHBoIEdpbGVz
IDxnaWxlc0Btb3ppbGxhLmNvbT4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMg
b2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BM
IiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
Mi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lv
bnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0
aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0
aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRo
ZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAq
IGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRo
ZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0
aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lv
bnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUg
TEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworI2luY2x1ZGUg
ImRvbXN0dWJzLmlkbCIKKyNpbmNsdWRlICJuc0lET01UZXh0VHJhY2tDdWUuaWRsIgorCitbc2Ny
aXB0YWJsZSwgdXVpZCg0MGRhOTFjNC01YzMyLTRjMjItOTA5OC0yZWNkODI0MjhjNzQpXQorLyog
RklYTUU6IGhvdyBkbyB3ZSBzYXkgaXQgaW1wbGVtZW50cyBFdmVudFRhcmdldD8gKi8KK2ludGVy
ZmFjZSBuc0lET01UZXh0VHJhY2sgOiBuc0lTdXBwb3J0cworeworICAvKiBjYXRlZ29yeTogc3Vi
dGl0bGVzLCBjYXB0aW9ucywgY2hhcHRlcnMsIG1ldGFkYXRhLCBldGMuICovCisgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcga2luZDsKKworICAvKiBIdW1hbiByZWFkYWJsZSBpZGVudGlm
aWVyIHRvIHByZXNlbnQgaW4gVUkgKi8KKyAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBs
YWJlbDsKKworICAvKiBEZWZhdWx0IGxhbmd1YWdlIG9mIHRoZSBjdWVzIChCQ1AgNDcgbGFuZ3Vh
Z2UgdGFnKSAqLworICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhbmd1YWdlOworCisK
KyAgLyogUmVzb3VyY2Ugc3RhdGUgKi8KKyAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9ORSA9IDA7
CisgIGNvbnN0IHVuc2lnbmVkIHNob3J0IExPQURJTkcgPSAxOworICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBMT0FERUQgPSAyOworICBjb25zdCB1bnNpZ25lZCBzaG9ydCBFUlJPUiA9IDM7CisgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCByZWFkeVN0YXRlOworLy8gICAgICAgICAg
IGF0dHJpYnV0ZSBGdW5jdGlvbiBvbmxvYWQ7CisvLyAgICAgICAgICAgYXR0cmlidXRlIEZ1bmN0
aW9uIG9uZXJyb3I7CisKKyAgLyogRGVjb2RlIGFuZCBwbGF5YmFjayBzdGF0ZSAqLworICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBPRkYgPSAwOworICBjb25zdCB1bnNpZ25lZCBzaG9ydCBISURERU4g
PSAxOworICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTSE9XSU5HID0gMjsKKyAgICAgICAgICAgYXR0
cmlidXRlIHVuc2lnbmVkIHNob3J0IG1vZGU7CisKKyAgLyogYWNjZXNzIHRvIHRoZSBjb250YWlu
ZWQgY3VlIG9iamVjdHMgKi8KKyAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVRleHRUcmFja0N1
ZUxpc3QgY3VlczsKKworICAvKiBhY2Nlc3MgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgKHNob3dp
bmcpIGN1ZXMgKi8KKyAgcmVhZG9ubHkgYXR0cmlidXRlIG5zSURPTVRleHRUcmFja0N1ZUxpc3Qg
YWN0aXZlQ3VlczsKKworICAvKiBBZGQgYSBjdWUgb2JqZWN0IHRvIHRoZSB0cmFjayAqLworICB2
b2lkIGFkZEN1ZShpbiBuc0lET01UZXh0VHJhY2tDdWUgY3VlKTsKKworICAvKiBSZW1vdmUgYSBj
dWUgb2JqZWN0IGZyb20gdGhlIHRyYWNrICovCisgIHZvaWQgcmVtb3ZlQ3VlKGluIG5zSURPTVRl
eHRUcmFja0N1ZSBjdWUpOworCit9OwpkaWZmIC0tZ2l0IGEvZG9tL2ludGVyZmFjZXMvaHRtbC9u
c0lET01UZXh0VHJhY2tDdWUuaWRsIGIvZG9tL2ludGVyZmFjZXMvaHRtbC9uc0lET01UZXh0VHJh
Y2tDdWUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Nzk5NjIKLS0t
IC9kZXYvbnVsbAorKysgYi9kb20vaW50ZXJmYWNlcy9odG1sL25zSURPTVRleHRUcmFja0N1ZS5p
ZGwKQEAgLTAsMCArMSwxMDMgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5k
ZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8qIHZpbTpzZXQg
dHM9MiBzdz0yIHN0cz0yIGV0IGNpbmRlbnQ6ICovCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJM
T0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBU
aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1Ymxp
YyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3pp
bGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFO
VFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5z
ZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1p
dGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUg
aXMgTW96aWxsYSBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3Jp
Z2luYWwgQ29kZSBpcyB0aGUgTW96aWxsYSBDb3Jwb3JhdGlvbi4KKyAqIFBvcnRpb25zIGNyZWF0
ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDcKKyAqIHRo
ZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmli
dXRvcihzKToKKyAqICBSYWxwaCBHaWxlcyA8Z2lsZXNAbW96aWxsYS5jb20+CisgKgorICogQWx0
ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0
aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVy
c2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBp
biB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFw
cGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93
IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJt
cyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMg
dG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlz
aW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVy
IHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5v
dCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9m
IHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0Ug
QkxPQ0sgKioqKiogKi8KKyNpbmNsdWRlICJkb21zdHVicy5pZGwiCisKKy8qIENyb3NzLWRlY2xh
cmF0aW9uIHdpdGggbnNJRE9NVGV4dFRyYWNrLmlkbCAqLworaW50ZXJmYWNlIG5zSURPTVRleHRU
cmFjazsKKworW3NjcmlwdGFibGUsIHV1aWQoNGI0MzVmZGItMjM0Yi00YjJhLWIzN2EtZTEyNWI2
MzRkNjkxKV0KKy8qIEZJWE1FOiBob3cgZG8gc2F5IHRoaXMgaW5oZXJpdHMgZnJvbSBFdmVudFRh
cmdldD8gKi8KK2ludGVyZmFjZSBuc0lET01UZXh0VHJhY2tDdWUgOiBuc0lTdXBwb3J0cworewor
CisgIC8qIGFzc29jaWF0ZWQgdGV4dCB0cmFjaywgaWYgYW55ICovCisgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBuc0lET01UZXh0VHJhY2sgdHJhY2s7CisKKyAgLyogaWRlbnRpZmllciBhdHRyaWJ1dGUg
Ki8KKyAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBpZDsKKworICAvKiBhY3RpdmUgaW50
ZXJ2YWwgKi8KKyAgcmVhZG9ubHkgYXR0cmlidXRlIGRvdWJsZSBzdGFydFRpbWU7CisgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBkb3VibGUgZW5kVGltZTsKKworICAvKiBzZXQgdG8gcGF1c2UgdGhlIGNv
bnRhaW5pbmcgbWVkaWEgZWxlbWVudCBhdCBlbmRUaW1lICovCisgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBib29sZWFuIHBhdXNlT25FeGl0OworCisgIC8qIERpc3BsYXkgb3JpZW50YXRpb246ICdob3Jp
em9udGFsJywKKyAgICAgICAndmVydGljYWwgZ3Jvd2luZyBsZWZ0Jywgb3IgJ3ZlcnRpY2FsIGdy
b3dpbmcgcmlnaHQnICovCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZGlyZWN0aW9u
OworCisgIC8qIGludGVycHJldCBsaW5lUG9zaXRpb24gcmVsYXRpdmUgdG8gY3VlIHRleHQgb3Ig
dmlkZW8gKi8KKyAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gc25hcFRvTGluZXM7CisKKyAg
LyogRGlzcGxheSBwb3NpdGlvbiBmb3IgdGhlIGJsb2NrICovCisgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBsb25nIGxpbmVQb3NpdGlvbjsKKworICAvKiBEaXNwbGF5IHBvc2l0aW9uIHdpdGhpbiB0aGUg
YmxvY2sgKi8KKyAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgdGV4dFBvc2l0aW9uOworCisgIC8q
IERpc3BsYXkgc2l6ZTogcGVyY2VudGFnZSBvZiB0aGUgdmlkZW8gKi8KKyAgcmVhZG9ubHkgYXR0
cmlidXRlIGxvbmcgc2l6ZTsKKworICAvKiBEaXNwbGF5IGFsaWdubWVudDogJ3N0YXJ0IGFsaWdu
bWVudCcsCisgICAgICAgJ21pZGRsZSBhbGlnbm1lbnQnLCBvciAnZW5kIGFsaWdubWVudCcgKi8K
KyAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBhbGlnbm1lbnQ7CisKKyAgLyogR2V0IHRo
ZSBjdWUgaW4gaXRzIG5hdGl2ZSBmb3JtYXQgKGkuZS4gV2ViVlRUKSAqLworICBET01TdHJpbmcg
Z2V0Q3VlQXNTb3VyY2UoKTsKKworICAvKiBHZXQgdGhlIGN1ZSBmb3JtYXR0ZWQgYXMgYW4gSFRN
TCBmcmFnbWVudCAqLworICBuc0lET01Eb2N1bWVudEZyYWdtZW50IGdldEN1ZUFzSFRNTCgpOwor
CisgIC8qIGNhbGxiYWNrcyB3aGVuIHBsYXliYWNrIGVudGVycyBhbmQgbGVhdmVzIHRoZSBjdWUg
Ki8KKy8vICAgICAgICAgICAgYXR0cmlidXRlIEZ1bmN0aW9uIG9uZW50ZXI7CisvLyAgICAgICAg
ICAgIGF0dHJpYnV0ZSBGdW5jdGlvbiBvbmV4aXQ7Cit9OworCitbc2NyaXB0YWJsZSwgdXVpZCg5
ZDdhMzg0Ni1mZGQ0LTQ4NWYtYWNjYy00MDE3MGQ0NTZjNDkpXQoraW50ZXJmYWNlIG5zSURPTVRl
eHRUcmFja0N1ZUxpc3QgOiBuc0lTdXBwb3J0cworeworICAvKiBjb3VudCBvZiBjdWVzIGluIHRo
ZSB0ZXh0IHRyYWNrICovCisgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0
aDsKKworICAvKiBhcnJheS1hZGRyZXNzaW5nIGdldHRlciBtZXRob2QgKi8KKy8vICBnZXR0ZXIg
bnNJRE9NVGV4dFRyYWNrQ3VlKGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpOworCisgIC8qIGZpbmQg
Y3VlIGJ5IGlkZW50aWZpZXIgKi8KKyAgbnNJRE9NVGV4dFRyYWNrQ3VlIGdldEN1ZUJ5SWQoaW4g
RE9NU3RyaW5nIGlkKTsKK307CmRpZmYgLS1naXQgYS9lZGl0b3IvbGliZWRpdG9yL2h0bWwvbnNI
VE1MRWRpdFV0aWxzLmNwcCBiL2VkaXRvci9saWJlZGl0b3IvaHRtbC9uc0hUTUxFZGl0VXRpbHMu
Y3BwCmluZGV4IDQwNjc1OGYuLjM0ODQxYWMgMTAwNjQ0Ci0tLSBhL2VkaXRvci9saWJlZGl0b3Iv
aHRtbC9uc0hUTUxFZGl0VXRpbHMuY3BwCisrKyBiL2VkaXRvci9saWJlZGl0b3IvaHRtbC9uc0hU
TUxFZGl0VXRpbHMuY3BwCkBAIC03NTUsNiArNzU1LDkgQEAgc3RhdGljIGNvbnN0IG5zRWxlbWVu
dEluZm8ga0VsZW1lbnRzW2VIVE1MVGFnX3VzZXJkZWZpbmVkXSA9IHsKICAgRUxFTSh0aGVhZCwg
dHJ1ZSwgZmFsc2UsIEdST1VQX05PTkUsIEdST1VQX1RCT0RZX0NPTlRFTlQpLAogICBFTEVNKHRp
dGxlLCB0cnVlLCBmYWxzZSwgR1JPVVBfSEVBRF9DT05URU5ULCBHUk9VUF9MRUFGKSwKICAgRUxF
TSh0ciwgdHJ1ZSwgZmFsc2UsIEdST1VQX1RCT0RZX0NPTlRFTlQsIEdST1VQX1RSX0NPTlRFTlQp
LAorI2lmIGRlZmluZWQoTU9aX01FRElBKQorICBFTEVNKHRyYWNrLCBmYWxzZSwgZmFsc2UsIEdS
T1VQX05PTkUsIEdST1VQX05PTkUpLAorI2VuZGlmCiAgIEVMRU0odHQsIHRydWUsIHRydWUsIEdS
T1VQX0ZPTlRTVFlMRSwgR1JPVVBfSU5MSU5FX0VMRU1FTlQpLAogICBFTEVNKHUsIHRydWUsIHRy
dWUsIEdST1VQX0ZPTlRTVFlMRSwgR1JPVVBfSU5MSU5FX0VMRU1FTlQpLAogICAvLyBYWFggQ2Fu
IGNvbnRhaW4gc2VsZiBhbmQgb2wgYmVjYXVzZSBlZGl0b3IgZG9lcyBzdWJsaXN0cyBpbGxlZ2Fs
bHkuCmRpZmYgLS1naXQgYS9sYXlvdXQvYnVpbGQvTWFrZWZpbGUuaW4gYi9sYXlvdXQvYnVpbGQv
TWFrZWZpbGUuaW4KaW5kZXggODIzOTU1Yy4uMmQyZWIzMCAxMDA2NDQKLS0tIGEvbGF5b3V0L2J1
aWxkL01ha2VmaWxlLmluCisrKyBiL2xheW91dC9idWlsZC9NYWtlZmlsZS5pbgpAQCAtMTgxLDYg
KzE4MSwxMiBAQCBTSEFSRURfTElCUkFSWV9MSUJTIAkrPSBcCiAJJChOVUxMKQogZW5kaWYKIAor
aWZkZWYgTU9aX1dFQlZUVAorU0hBUkVEX0xJQlJBUllfTElCUwkrPSBcCisJJChERVBUSCkvbWVk
aWEvd2VidnR0LyQoTElCX1BSRUZJWCl3ZWJ2dHQuJChMSUJfU1VGRklYKSBcCisJJChOVUxMKQor
ZW5kaWYKKwogaWZkZWYgTU9aX1dBVkUKIFNIQVJFRF9MSUJSQVJZX0xJQlMgCSs9IFwKIAkkKERF
UFRIKS9jb250ZW50L21lZGlhL3dhdmUvJChMSUJfUFJFRklYKWdrY29ud2F2ZV9zLiQoTElCX1NV
RkZJWCkgXApkaWZmIC0tZ2l0IGEvbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmNwcCBiL2xh
eW91dC9nZW5lcmljL25zVmlkZW9GcmFtZS5jcHAKaW5kZXggODI4NzExYi4uOTg1YWVhNSAxMDA2
NDQKLS0tIGEvbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmNwcAorKysgYi9sYXlvdXQvZ2Vu
ZXJpYy9uc1ZpZGVvRnJhbWUuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAibnNWaWRl
b0ZyYW1lLmgiCiAjaW5jbHVkZSAibnNIVE1MVmlkZW9FbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJ
RE9NSFRNTFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zSURPTUhUTUxFbGVtZW50LmgiCiAj
aW5jbHVkZSAibnNEaXNwbGF5TGlzdC5oIgogI2luY2x1ZGUgImdmeENvbnRleHQuaCIKICNpbmNs
dWRlICJnZnhJbWFnZVN1cmZhY2UuaCIKQEAgLTkzLDYgKzk0LDggQEAgbnNWaWRlb0ZyYW1lOjpD
cmVhdGVBbm9ueW1vdXNDb250ZW50KG5zVEFycmF5PENvbnRlbnRJbmZvPiYgYUVsZW1lbnRzKQog
ewogICBuc05vZGVJbmZvTWFuYWdlciAqbm9kZUluZm9NYW5hZ2VyID0gR2V0Q29udGVudCgpLT5H
ZXRDdXJyZW50RG9jKCktPk5vZGVJbmZvTWFuYWdlcigpOwogICBuc0NPTVB0cjxuc0lOb2RlSW5m
bz4gbm9kZUluZm87CisgIEVsZW1lbnQgKmVsZW1lbnQ7CisKICAgaWYgKEhhc1ZpZGVvRWxlbWVu
dCgpKSB7CiAgICAgLy8gQ3JlYXRlIGFuIGFub255bW91cyBpbWFnZSBlbGVtZW50IGFzIGEgY2hp
bGQgdG8gaG9sZCB0aGUgcG9zdGVyCiAgICAgLy8gaW1hZ2UuIFdlIG1heSBub3QgaGF2ZSBhIHBv
c3RlciBpbWFnZSBub3csIGJ1dCBvbmUgY291bGQgYmUgYWRkZWQKQEAgLTEwMiw3ICsxMDUsNyBA
QCBuc1ZpZGVvRnJhbWU6OkNyZWF0ZUFub255bW91c0NvbnRlbnQobnNUQXJyYXk8Q29udGVudElu
Zm8+JiBhRWxlbWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtOYW1lU3BhY2VJRF9YSFRNTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJRE9NTm9kZTo6RUxFTUVOVF9OT0RFKTsKICAgICBOU19FTlNVUkVfVFJV
RShub2RlSW5mbywgTlNfRVJST1JfT1VUX09GX01FTU9SWSk7Ci0gICAgRWxlbWVudCogZWxlbWVu
dCA9IE5TX05ld0hUTUxJbWFnZUVsZW1lbnQobm9kZUluZm8uZm9yZ2V0KCkpOworICAgIGVsZW1l
bnQgPSBOU19OZXdIVE1MSW1hZ2VFbGVtZW50KG5vZGVJbmZvLmZvcmdldCgpKTsKICAgICBtUG9z
dGVySW1hZ2UgPSBlbGVtZW50OwogICAgIE5TX0VOU1VSRV9UUlVFKG1Qb3N0ZXJJbWFnZSwgTlNf
RVJST1JfT1VUX09GX01FTU9SWSk7CiAKQEAgLTE0Miw2ICsxNDUsMzAgQEAgbnNWaWRlb0ZyYW1l
OjpDcmVhdGVBbm9ueW1vdXNDb250ZW50KG5zVEFycmF5PENvbnRlbnRJbmZvPiYgYUVsZW1lbnRz
KQogICBpZiAoIWFFbGVtZW50cy5BcHBlbmRFbGVtZW50KG1WaWRlb0NvbnRyb2xzKSkKICAgICBy
ZXR1cm4gTlNfRVJST1JfT1VUX09GX01FTU9SWTsKIAorICAvLyBTZXQgdXAgdGhlIGNhcHRpb24g
b3ZlcmxheSBkaXYgZm9yIHNob3dpbmcgYW55IFRleHRUcmFjayBkYXRhCisgIG5vZGVJbmZvID0g
bm9kZUluZm9NYW5hZ2VyLT5HZXROb2RlSW5mbyhuc0drQXRvbXM6OmRpdiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zbnVsbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtOYW1lU3BhY2VJRF9YSFRNTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURPTU5vZGU6OkVMRU1FTlRfTk9ERSk7
CisgIE5TX0VOU1VSRV9UUlVFKG5vZGVJbmZvLCBOU19FUlJPUl9PVVRfT0ZfTUVNT1JZKTsKKyAg
ZWxlbWVudCA9IE5TX05ld0hUTUxEaXZFbGVtZW50KG5vZGVJbmZvLmZvcmdldCgpKTsKKyAgbUNh
cHRpb25EaXYgPSBlbGVtZW50OworICBOU19FTlNVUkVfVFJVRShtQ2FwdGlvbkRpdiwgTlNfRVJS
T1JfT1VUX09GX01FTU9SWSk7CisgIC8vIGhhbmcgYSBjbGFzcyBuYW1lIG9uIHRoZSBkaXYgZm9y
IGRlZmF1bHQgc3R5bGluZworICBuc3Jlc3VsdCBydiA9IG1DYXB0aW9uRGl2LT5TZXRBdHRyKGtO
YW1lU3BhY2VJRF9Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
R2tBdG9tczo6X2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5T
X0xJVEVSQUxfU1RSSU5HKCJjYXB0aW9uRGl2IiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ1ZSk7CisgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisKKyAgaWYg
KCFhRWxlbWVudHMuQXBwZW5kRWxlbWVudChtQ2FwdGlvbkRpdikpCisgICAgcmV0dXJuIE5TX0VS
Uk9SX09VVF9PRl9NRU1PUlk7CisKKyAgLy8gYWRkIGEgdGVzdCBzdHJpbmcgc28gd2UgY2FuIHRl
c3QgdGhlIGRpdgorICBuc0NPTVB0cjxuc0lET01IVE1MRWxlbWVudD4gZGl2ID0gZG9fUXVlcnlJ
bnRlcmZhY2UobUNhcHRpb25EaXYpOworICBydiA9IGRpdi0+U2V0SW5uZXJIVE1MKE5TX0xJVEVS
QUxfU1RSSU5HKCI8cD5Mb3JlbSBpcHN1bSBkb2xvcjwvcD4iKSk7CisgIE5TX0VOU1VSRV9TVUND
RVNTKHJ2LCBydik7CisKICAgcmV0dXJuIE5TX09LOwogfQogCkBAIC0xNTEsMTEgKzE3OCwxMyBA
QCBuc1ZpZGVvRnJhbWU6OkFwcGVuZEFub255bW91c0NvbnRlbnRUbyhuc0Jhc2VDb250ZW50TGlz
dCYgYUVsZW1lbnRzLAogewogICBhRWxlbWVudHMuTWF5YmVBcHBlbmRFbGVtZW50KG1Qb3N0ZXJJ
bWFnZSk7CiAgIGFFbGVtZW50cy5NYXliZUFwcGVuZEVsZW1lbnQobVZpZGVvQ29udHJvbHMpOwor
ICBhRWxlbWVudHMuTWF5YmVBcHBlbmRFbGVtZW50KG1DYXB0aW9uRGl2KTsKIH0KIAogdm9pZAog
bnNWaWRlb0ZyYW1lOjpEZXN0cm95RnJvbShuc0lGcmFtZSogYURlc3RydWN0Um9vdCkKIHsKKyAg
bnNDb250ZW50VXRpbHM6OkRlc3Ryb3lBbm9ueW1vdXNDb250ZW50KCZtQ2FwdGlvbkRpdik7CiAg
IG5zQ29udGVudFV0aWxzOjpEZXN0cm95QW5vbnltb3VzQ29udGVudCgmbVZpZGVvQ29udHJvbHMp
OwogICBuc0NvbnRlbnRVdGlsczo6RGVzdHJveUFub255bW91c0NvbnRlbnQoJm1Qb3N0ZXJJbWFn
ZSk7CiAgIG5zQ29udGFpbmVyRnJhbWU6OkRlc3Ryb3lGcm9tKGFEZXN0cnVjdFJvb3QpOwpAQCAt
MjY5LDcgKzI5OCw3IEBAIG5zVmlkZW9GcmFtZTo6UmVmbG93KG5zUHJlc0NvbnRleHQqICAgICAg
ICAgICBhUHJlc0NvbnRleHQsCiAgIGZvciAobnNJRnJhbWUgKmNoaWxkID0gbUZyYW1lcy5GaXJz
dENoaWxkKCk7CiAgICAgICAgY2hpbGQ7CiAgICAgICAgY2hpbGQgPSBjaGlsZC0+R2V0TmV4dFNp
YmxpbmcoKSkgewotICAgIGlmIChjaGlsZC0+R2V0VHlwZSgpID09IG5zR2tBdG9tczo6aW1hZ2VG
cmFtZSkgeworICAgIGlmIChjaGlsZC0+R2V0Q29udGVudCgpID09IG1Qb3N0ZXJJbWFnZSkgewog
ICAgICAgLy8gUmVmbG93IHRoZSBwb3N0ZXIgZnJhbWUuCiAgICAgICBuc0ltYWdlRnJhbWUqIGlt
YWdlRnJhbWUgPSBzdGF0aWNfY2FzdDxuc0ltYWdlRnJhbWUqPihjaGlsZCk7CiAgICAgICBuc0hU
TUxSZWZsb3dNZXRyaWNzIGtpZERlc2lyZWRTaXplOwpAQCAtMjkzLDcgKzMyMiw3IEBAIG5zVmlk
ZW9GcmFtZTo6UmVmbG93KG5zUHJlc0NvbnRleHQqICAgICAgICAgICBhUHJlc0NvbnRleHQsCiAg
ICAgICBGaW5pc2hSZWZsb3dDaGlsZChpbWFnZUZyYW1lLCBhUHJlc0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAma2lkUmVmbG93U3RhdGUsIGtpZERlc2lyZWRTaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgbUJvcmRlclBhZGRpbmcubGVmdCwgbUJvcmRlclBhZGRpbmcudG9w
LCAwKTsKLSAgICB9IGVsc2UgaWYgKGNoaWxkLT5HZXRUeXBlKCkgPT0gbnNHa0F0b21zOjpib3hG
cmFtZSkgeworICAgIH0gZWxzZSBpZiAoY2hpbGQtPkdldENvbnRlbnQoKSA9PSBtVmlkZW9Db250
cm9scykgewogICAgICAgLy8gUmVmbG93IHRoZSB2aWRlbyBjb250cm9scyBmcmFtZS4KICAgICAg
IG5zQm94TGF5b3V0U3RhdGUgYm94U3RhdGUoUHJlc0NvbnRleHQoKSwgYVJlZmxvd1N0YXRlLnJl
bmRDb250ZXh0KTsKICAgICAgIG5zQm94RnJhbWU6OkxheW91dENoaWxkQXQoYm94U3RhdGUsCkBA
IC0zMDIsNiArMzMxLDI0IEBAIG5zVmlkZW9GcmFtZTo6UmVmbG93KG5zUHJlc0NvbnRleHQqICAg
ICAgICAgICBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtQm9yZGVyUGFkZGluZy50b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhUmVmbG93U3RhdGUuQ29tcHV0ZWRXaWR0aCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYVJlZmxvd1N0YXRlLkNvbXB1dGVkSGVpZ2h0KCkpKTsKKyAg
ICB9IGVsc2UgaWYgKGNoaWxkLT5HZXRDb250ZW50KCkgPT0gbUNhcHRpb25EaXYpIHsKKyAgICAg
IC8vIFJlZmxvdyB0byBjYXB0aW9uIGRpdgorICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyBraWRE
ZXNpcmVkU2l6ZTsKKyAgICAgIG5zU2l6ZSBhdmFpbGFibGVTaXplID0gbnNTaXplKGFSZWZsb3dT
dGF0ZS5hdmFpbGFibGVXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFSZWZsb3dTdGF0ZS5hdmFpbGFibGVIZWlnaHQpOworICAgICAgbnNIVE1MUmVmbG93U3RhdGUg
a2lkUmVmbG93U3RhdGUoYVByZXNDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYVJlZmxvd1N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
dmFpbGFibGVTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU1l
dHJpY3Mud2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTWV0
cmljcy5oZWlnaHQpOworICAgICAga2lkUmVmbG93U3RhdGUuU2V0Q29tcHV0ZWRXaWR0aChhUmVm
bG93U3RhdGUuQ29tcHV0ZWRXaWR0aCgpKTsKKyAgICAgIGtpZFJlZmxvd1N0YXRlLlNldENvbXB1
dGVkSGVpZ2h0KGFSZWZsb3dTdGF0ZS5Db21wdXRlZEhlaWdodCgpKTsKKyAgICAgIFJlZmxvd0No
aWxkKGNoaWxkLCBhUHJlc0NvbnRleHQsIGtpZERlc2lyZWRTaXplLCBraWRSZWZsb3dTdGF0ZSwK
KyAgICAgICAgICAgICAgICAgIG1Cb3JkZXJQYWRkaW5nLmxlZnQsIG1Cb3JkZXJQYWRkaW5nLnRv
cCwgMCwgYVN0YXR1cyk7CisgICAgICBGaW5pc2hSZWZsb3dDaGlsZChjaGlsZCwgYVByZXNDb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgJmtpZFJlZmxvd1N0YXRlLCBraWREZXNpcmVk
U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Cb3JkZXJQYWRkaW5nLmxlZnQsIG1Cb3Jk
ZXJQYWRkaW5nLnRvcCwgMCk7CiAgICAgfQogICB9CiAgIGFNZXRyaWNzLlNldE92ZXJmbG93QXJl
YXNUb0Rlc2lyZWRCb3VuZHMoKTsKQEAgLTM5NiwxNyArNDQzLDEzIEBAIG5zVmlkZW9GcmFtZTo6
QnVpbGREaXNwbGF5TGlzdChuc0Rpc3BsYXlMaXN0QnVpbGRlciogICBhQnVpbGRlciwKICAgICBO
U19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOwogICB9CiAKLSAgLy8gQWRkIGNoaWxkIGZyYW1lcyB0
byBkaXNwbGF5IGxpc3QuIFdlIGV4cGVjdCB1cCB0byB0d28gY2hpbGRyZW4sIGFuIGltYWdlCi0g
IC8vIGZyYW1lIGZvciB0aGUgcG9zdGVyLCBhbmQgdGhlIGJveCBmcmFtZSBmb3IgdGhlIHZpZGVv
IGNvbnRyb2xzLgorICAvLyBBZGQgY2hpbGQgZnJhbWVzIHRvIGRpc3BsYXkgbGlzdC4gV2UgZXhw
ZWN0IHZhcmlvdXMgY2hpbGRyZW4sCisgIC8vIGJ1dCBvbmx5IHdhbnQgdG8gZHJhdyBtUG9zdGVy
SW1hZ2UgY29uZGl0aW9uYWxseS4gT3RoZXJzIHdlCisgIC8vIGFsd2F5cyBhZGQgdG8gdGhlIGRp
c3BsYXkgbGlzdC4KICAgZm9yIChuc0lGcmFtZSAqY2hpbGQgPSBtRnJhbWVzLkZpcnN0Q2hpbGQo
KTsKICAgICAgICBjaGlsZDsKICAgICAgICBjaGlsZCA9IGNoaWxkLT5HZXROZXh0U2libGluZygp
KSB7Ci0gICAgaWYgKGNoaWxkLT5HZXRUeXBlKCkgPT0gbnNHa0F0b21zOjppbWFnZUZyYW1lICYm
IFNob3VsZERpc3BsYXlQb3N0ZXIoKSkgewotICAgICAgcnYgPSBjaGlsZC0+QnVpbGREaXNwbGF5
TGlzdEZvclN0YWNraW5nQ29udGV4dChhQnVpbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYURpcnR5UmVjdCAtIGNoaWxkLT5HZXRPZmZz
ZXRUbyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnJlcGxhY2VkQ29udGVudCk7Ci0gICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydixy
dik7Ci0gICAgfSBlbHNlIGlmIChjaGlsZC0+R2V0VHlwZSgpID09IG5zR2tBdG9tczo6Ym94RnJh
bWUpIHsKKyAgICBpZiAoY2hpbGQtPkdldENvbnRlbnQoKSAhPSBtUG9zdGVySW1hZ2UgfHwgU2hv
dWxkRGlzcGxheVBvc3RlcigpKSB7CiAgICAgICBydiA9IGNoaWxkLT5CdWlsZERpc3BsYXlMaXN0
Rm9yU3RhY2tpbmdDb250ZXh0KGFCdWlsZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhRGlydHlSZWN0IC0gY2hpbGQtPkdldE9mZnNldFRv
KHRoaXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmcmVwbGFjZWRDb250ZW50KTsKZGlmZiAtLWdpdCBhL2xheW91dC9nZW5lcmljL25zVmlk
ZW9GcmFtZS5oIGIvbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmgKaW5kZXggMDhiYmJhZi4u
NDc4ZDhlMyAxMDA2NDQKLS0tIGEvbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmgKKysrIGIv
bGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmgKQEAgLTExMyw2ICsxMTMsOCBAQCBwdWJsaWM6
CiAgIC8vIGEgdmlkZW8gZnJhbWUsIHRoZSBwb3N0ZXIgd2lsbCBuZXZlciBiZSBkaXNwbGF5ZWQg
YWdhaW4uCiAgIGJvb2wgU2hvdWxkRGlzcGxheVBvc3RlcigpOwogCisgIG5zSUNvbnRlbnQgKkdl
dENhcHRpb25PdmVybGF5KCkgeyByZXR1cm4gbUNhcHRpb25EaXY7IH0KKwogI2lmZGVmIERFQlVH
CiAgIE5TX0lNRVRIT0QgR2V0RnJhbWVOYW1lKG5zQVN0cmluZyYgYVJlc3VsdCkgY29uc3Q7CiAj
ZW5kaWYKQEAgLTE0Niw2ICsxNDgsMTAgQEAgcHJvdGVjdGVkOgogICAKICAgLy8gQW5vbnltb3Vz
IGNoaWxkIHdoaWNoIGlzIHRoZSBpbWFnZSBlbGVtZW50IG9mIHRoZSBwb3N0ZXIgZnJhbWUuCiAg
IG5zQ09NUHRyPG5zSUNvbnRlbnQ+IG1Qb3N0ZXJJbWFnZTsKKworICAvLyBBbm9ueW1vdXMgY2hp
bGQgd2hpY2ggaXMgdGhlIHRleHQgdHJhY2sgY2FwdGlvbiBkaXNwbGF5IGRpdi4KKyAgbnNDT01Q
dHI8bnNJQ29udGVudD4gbUNhcHRpb25EaXY7CisKIH07CiAKICNlbmRpZiAvKiBuc1ZpZGVvRnJh
bWVfaF9fXyAqLwpkaWZmIC0tZ2l0IGEvbGF5b3V0L3N0eWxlL2h0bWwuY3NzIGIvbGF5b3V0L3N0
eWxlL2h0bWwuY3NzCmluZGV4IDcwNjFmZDcuLmMwODE0MzIgMTAwNjQ0Ci0tLSBhL2xheW91dC9z
dHlsZS9odG1sLmNzcworKysgYi9sYXlvdXQvc3R5bGUvaHRtbC5jc3MKQEAgLTc1Niw2ICs3NTYs
MTkgQEAgYXVkaW86bm90KFtjb250cm9sc10pIHsKICAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0
ZSgwKSAhaW1wb3J0YW50OwogfQogCit2aWRlbyA+IGRpdi5jYXB0aW9uRGl2IHsKKyAgdGV4dC1h
bGlnbjogY2VudGVyOworICBmb250LXdlaWdodDogYm9sZDsKKyAgZm9udC1zaXplOiAyNHB4Owor
ICBwb2ludGVyLWV2ZW50czogbm9uZTsKK30KKwordmlkZW8gPiBkaXYuY2FwdGlvbkRpdiBwIHsK
KyAgY29sb3I6IGdvbGQ7CisgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTA1LDEwNSwxMDUsMC40
KTsKKyAgcG9pbnRlci1ldmVudHM6IGF1dG87Cit9CisKIC8qIGVtdWxhdGlvbiBvZiBub24tc3Rh
bmRhcmQgSFRNTCA8bWFycXVlZT4gdGFnICovCiBtYXJxdWVlIHsKICAgd2lkdGg6IC1tb3otYXZh
aWxhYmxlOwpkaWZmIC0tZ2l0IGEvbWVkaWEvd2VidnR0L01ha2VmaWxlLmluIGIvbWVkaWEvd2Vi
dnR0L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZmJj
NGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS93ZWJ2dHQvTWFrZWZpbGUuaW4KQEAgLTAsMCAr
MSw2MCBAQAorIyAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisjIFZlcnNpb246IE1Q
TCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorIworIyBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFy
ZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyMgMS4xICh0
aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyMgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisjCisjIFNvZnR3YXJlIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
YmFzaXMsCisjIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorIyBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorIyBMaWNlbnNlLgorIwor
IyBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIGNvZGUuCisjCisjIFRoZSBJbml0aWFsIERl
dmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgTW96aWxsYSBGb3VuZGF0aW9uLgor
IyBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0
IChDKSAyMDExCisjIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyMKKyMgQ29udHJpYnV0b3Iocyk6CisjICAgUmFscGggR2lsZXMgPGdpbGVzQG1vemlsbGEuY29t
PgorIworIyBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1
c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorIyBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyMgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BM
IiksCisjIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQ
TCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisjIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisjIHVuZGVyIHRo
ZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBv
dGhlcnMgdG8KKyMgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyMgZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHBy
b3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyMgYW5kIG90
aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRv
IG5vdCBkZWxldGUKKyMgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2Ug
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorIyB0aGUgdGVybXMgb2YgYW55IG9uZSBv
ZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorIworIyAqKioqKiBFTkQgTElDRU5TRSBC
TE9DSyAqKioqKgorCitERVBUSAkJPSAuLi8uLgordG9wc3JjZGlyICAgICAgID0gQHRvcF9zcmNk
aXJACitzcmNkaXIgICAgICAgICAgPSBAc3JjZGlyQAorVlBBVEggICAgICAgICAgID0gQHNyY2Rp
ckAKKworaW5jbHVkZSAkKERFUFRIKS9jb25maWcvYXV0b2NvbmYubWsKKworTU9EVUxFCQk9IHdl
YnZ0dAorTElCUkFSWV9OQU1FCT0gd2VidnR0CitGT1JDRV9TVEFUSUNfTElCPSAxCisKK0VYUE9S
VFMgPSBcCisgIHdlYnZ0dC5oIFwKKyAgJChOVUxMKQorCitWUEFUSCArPSBcCisgICQoc3JjZGly
KS9zcmMgXAorICAkKE5VTEwpCisKK0NTUkNTID0gXAorICB3ZWJ2dHQuYyBcCisgICQoTlVMTCkK
KworaW5jbHVkZSAkKHRvcHNyY2RpcikvY29uZmlnL3J1bGVzLm1rCmRpZmYgLS1naXQgYS9tZWRp
YS93ZWJ2dHQvdXBkYXRlLnNoIGIvbWVkaWEvd2VidnR0L3VwZGF0ZS5zaApuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZWU2ODc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEv
d2VidnR0L3VwZGF0ZS5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKyMgc2NyaXB0IHRv
IHVwZGF0ZSB0aGUgd2VidnR0IGxpYnJhcnkgc291cmNlCisKK1VSTD1odHRwczovL2dpdGh1Yi5j
b20vcmlsbGlhbi93ZWJ2dHQuZ2l0CitTUkNESVI9c3JjCisKK2lmIFsgLWQgJHtTUkNESVJ9Ly5n
aXQgXTsgdGhlbgorICBlY2hvICJVcGRhdGluZyBleGlzdGluZyBjaGVja291dC4uLiIKKyAgY2Qg
JHtTUkNESVJ9ICYmIGdpdCBwdWxsCitlbHNlCisgIGVjaG8gIkRvd25sb2FkaW5nIHNvdXJjZSBm
cm9tICR7VVJMfSIKKyAgZ2l0IGNsb25lICR7VVJMfSAke1NSQ0RJUn0KK2ZpCmRpZmYgLS1naXQg
YS9wYXJzZXIvaHRtbHBhcnNlci9wdWJsaWMvbnNIVE1MVGFnTGlzdC5oIGIvcGFyc2VyL2h0bWxw
YXJzZXIvcHVibGljL25zSFRNTFRhZ0xpc3QuaAppbmRleCAyZmM0MzAxLi42YjcwN2RjIDEwMDY0
NAotLS0gYS9wYXJzZXIvaHRtbHBhcnNlci9wdWJsaWMvbnNIVE1MVGFnTGlzdC5oCisrKyBiL3Bh
cnNlci9odG1scGFyc2VyL3B1YmxpYy9uc0hUTUxUYWdMaXN0LmgKQEAgLTE4NCw2ICsxODQsOSBA
QCBIVE1MX1RBRyh0aGVhZCwgVGFibGVTZWN0aW9uKQogSFRNTF9UQUcodGl0bGUsIFRpdGxlKQog
SFRNTF9UQUcodHIsIFRhYmxlUm93KQogSFRNTF9IVE1MRUxFTUVOVF9UQUcodHQpCisjaWYgZGVm
aW5lZChNT1pfTUVESUEpCitIVE1MX1RBRyh0cmFjaywgVHJhY2spCisjZW5kaWYKIEhUTUxfSFRN
TEVMRU1FTlRfVEFHKHUpCiBIVE1MX1RBRyh1bCwgU2hhcmVkTGlzdCkKIEhUTUxfSFRNTEVMRU1F
TlRfVEFHKHZhcikKZGlmZiAtLWdpdCBhL3BhcnNlci9odG1scGFyc2VyL3NyYy9uc0VsZW1lbnRU
YWJsZS5jcHAgYi9wYXJzZXIvaHRtbHBhcnNlci9zcmMvbnNFbGVtZW50VGFibGUuY3BwCmluZGV4
IDllOGVmMzEuLjg3NzhhZWUgMTAwNjQ0Ci0tLSBhL3BhcnNlci9odG1scGFyc2VyL3NyYy9uc0Vs
ZW1lbnRUYWJsZS5jcHAKKysrIGIvcGFyc2VyL2h0bWxwYXJzZXIvc3JjL25zRWxlbWVudFRhYmxl
LmNwcApAQCAtNzksNiArNzksNyBAQCBERUNMX1RBR19MSVNUKGdUUlBhcmVudHMse2VIVE1MVGFn
X3Rib2R5IENPTU1BIGVIVE1MVGFnX3Rmb290IENPTU1BIGVIVE1MVGFnX3RoZQogREVDTF9UQUdf
TElTVChnVFJFbmRQYXJlbnRzLHtlSFRNTFRhZ190Ym9keSBDT01NQSBlSFRNTFRhZ190Zm9vdCBD
T01NQSBlSFRNTFRhZ190aGVhZCBDT01NQSBlSFRNTFRhZ190YWJsZSBDT01NQSBlSFRNTFRhZ19h
cHBsZXR9KQogI2lmZGVmIE1PWl9NRURJQQogREVDTF9UQUdfTElTVChnU291cmNlUGFyZW50cyx7
ZUhUTUxUYWdfdmlkZW8gQ09NTUEgZUhUTUxUYWdfYXVkaW99KQorREVDTF9UQUdfTElTVChnVHJh
Y2tQYXJlbnRzLHtlSFRNTFRhZ192aWRlbyBDT01NQSBlSFRNTFRhZ19hdWRpb30pCiAjZW5kaWYK
IAogLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEwOTEsNiArMTA5
MiwxNSBAQCBjb25zdCBuc0hUTUxFbGVtZW50IGdIVE1MRWxlbWVudHNbXSA9IHsKICAgICAvKnNw
ZWNpYWwgcHJvcHMsIHByb3AtcmFuZ2UqLyAgICAgICBrTm9uQ29udGFpbmVyLGtOb1Byb3BSYW5n
ZSwKICAgICAvKnNwZWNpYWwgcGFyZW50cyxraWRzKi8gICAgICAgICAgICAmZ1NvdXJjZVBhcmVu
dHMsMCwKICAgfSwKKyAgeworICAgIC8qdGFnKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVIVE1MVGFnX3RyYWNrLAorICAgIC8qcmVxLXBhcmVudCBleGNsLXBhcmVudCovICAgICAgICAg
IGVIVE1MVGFnX3Vua25vd24sZUhUTUxUYWdfdW5rbm93biwKKyAgICAvKnJvb3Rub2RlcyxlbmRy
b290bm9kZXMqLyAgICAgICAgICAmZ1RyYWNrUGFyZW50cywmZ1RyYWNrUGFyZW50cywKKyAgICAv
KmF1dG9jbG9zZSBzdGFydHRhZ3MgYW5kIGVuZHRhZ3MqLyAmZ1BBdXRvQ2xvc2UsIDAsIDAsMCwK
KyAgICAvKnBhcmVudCxpbmNsLGV4Y2xncm91cHMqLyAgICAgICAgICBrU3BlY2lhbCwga05vbmUs
IGtOb25lLAorICAgIC8qc3BlY2lhbCBwcm9wcywgcHJvcC1yYW5nZSovICAgICAgIGtOb25Db250
YWluZXIsa05vUHJvcFJhbmdlLAorICAgIC8qc3BlY2lhbCBwYXJlbnRzLGtpZHMqLyAgICAgICAg
ICAgICZnVHJhY2tQYXJlbnRzLDAsCisgIH0sCiAjZW5kaWYKICAgewogICAgIApkaWZmIC0tZ2l0
IGEvcGFyc2VyL2h0bWxwYXJzZXIvc3JjL25zSFRNTFRhZ3MuY3BwIGIvcGFyc2VyL2h0bWxwYXJz
ZXIvc3JjL25zSFRNTFRhZ3MuY3BwCmluZGV4IGQ1NWExZTIuLmM2ZTE4ZmEgMTAwNjQ0Ci0tLSBh
L3BhcnNlci9odG1scGFyc2VyL3NyYy9uc0hUTUxUYWdzLmNwcAorKysgYi9wYXJzZXIvaHRtbHBh
cnNlci9zcmMvbnNIVE1MVGFncy5jcHAKQEAgLTI4Niw2ICsyODYsMTAgQEAgc3RhdGljIGNvbnN0
IFBSVW5pY2hhciBzSFRNTFRhZ1VuaWNvZGVOYW1lX3RpdGxlW10gPQogICB7J3QnLCAnaScsICd0
JywgJ2wnLCAnZScsICdcMCd9Owogc3RhdGljIGNvbnN0IFBSVW5pY2hhciBzSFRNTFRhZ1VuaWNv
ZGVOYW1lX3RyW10gPQogICB7J3QnLCAncicsICdcMCd9OworI2lmIGRlZmluZWQoTU9aX01FRElB
KQorc3RhdGljIGNvbnN0IFBSVW5pY2hhciBzSFRNTFRhZ1VuaWNvZGVOYW1lX3RyYWNrW10gPQor
ICB7J3QnLCAncicsICdhJywgJ2MnLCAnaycsICdcMCd9OworI2VuZGlmCiBzdGF0aWMgY29uc3Qg
UFJVbmljaGFyIHNIVE1MVGFnVW5pY29kZU5hbWVfdHRbXSA9CiAgIHsndCcsICd0JywgJ1wwJ307
CiBzdGF0aWMgY29uc3QgUFJVbmljaGFyIHNIVE1MVGFnVW5pY29kZU5hbWVfdVtdID0KZGlmZiAt
LWdpdCBhL3Rvb2xraXQvdG9vbGtpdC10aWVycy5tayBiL3Rvb2xraXQvdG9vbGtpdC10aWVycy5t
awppbmRleCBiMjk1MDJkLi44NTBmZmYzIDEwMDY0NAotLS0gYS90b29sa2l0L3Rvb2xraXQtdGll
cnMubWsKKysrIGIvdG9vbGtpdC90b29sa2l0LXRpZXJzLm1rCkBAIC0xNDcsNiArMTQ3LDEwIEBA
IHRpZXJfcGxhdGZvcm1fZGlycyArPSBcCiAJCSQoTlVMTCkKIGVuZGlmCiAKK2lmZGVmIE1PWl9X
RUJWVFQKK3RpZXJfcGxhdGZvcm1fZGlycyArPSBtZWRpYS93ZWJ2dHQKK2VuZGlmCisKIGlmZGVm
IE1PWl9TWURORVlBVURJTwogdGllcl9wbGF0Zm9ybV9kaXJzICs9IFwKIAkJbWVkaWEvbGlic3lk
bmV5YXVkaW8gXAotLSAKMS43LjYuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>704716</attachid>
            <date>2013-01-21 16:25:15 -0800</date>
            <delta_ts>2013-01-21 16:25:15 -0800</delta_ts>
            <desc>Ralph&apos;s &quot;work in progress dump&quot; updated to Jan 21, 2012</desc>
            <filename>wip-updated.diff</filename>
            <type>text/plain</type>
            <size>73329</size>
            <attacher>david.humphrey</attacher>
            
              <data encoding="base64">SmFudWFyeSAyMSwgMjAxMjoKClVwZGF0ZWQgaHR0cHM6Ly9idWc2MjkzNTAuYnVnemlsbGEubW96
aWxsYS5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9NjA2NjczIGZyb20gYnVnCmh0dHBzOi8vYnVnemls
bGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTM1MC4KClNlZSBnaXQgY29tbWl0LCBo
dHRwczovL2dpdGh1Yi5jb20vaHVtcGhkL21vemlsbGEtY2VudHJhbC9jb21wYXJlL3RyYWNrLWVs
ZW1lbnQsCndoaWNoIHdhcyBiYXNlZCBvbiBnaXRodWIuY29tL21vemlsbGEvbW96aWxsYS1jZW50
cmFsOgoKY29tbWl0IDU0MzFlOTcwNGQ3ZWZiNDgwMjBiY2IzMzg1ODJmZjU4YThjZTFiZTMKQXV0
aG9yOiBMLiBEYXZpZCBCYXJvbiA8ZGJhcm9uQGRiYXJvbi5vcmc+CkRhdGU6ICAgU2F0IEphbiAx
OSAxNjo1OToyNSAyMDEzIC0wODAwCgogICAgQnVnIDgyMzk4OTogRG9uJ3QgYnVpbGQgdGVzdHBp
bG90IG9uIGF1cm9yYSB1cGRhdGUgY2hhbm5lbCwgYT1ha2V5YmwgRE9OVEJVSUxECgpJZiB1c2lu
ZyBIRywgYmFzZWQgb24gaHR0cHM6Ly9oZy5tb3ppbGxhLm9yZy9tb3ppbGxhLWNlbnRyYWwvcmV2
LzQ5MTllODA5MTU0MjoKCmF1dGhvciAgIEwuIERhdmlkIEJhcm9uIDxkYmFyb25AZGJhcm9uLm9y
Zz4KICAgICAgICAgU2F0IEphbiAxOSAxNjo1OToyNSAyMDEzIC0wODAwIChhdCBTYXQgSmFuIDE5
IDE2OjU5OjI1IDIwMTMgLTA4MDApCmNoYW5nZXNldCAxMTkzODYgNDkxOWU4MDkxNTQyCnBhcmVu
dCAxMTkzODUgICAgMDFjOTY0NzA1YmU3CmNoaWxkIDExOTM4OSAgICAgOTFiOTk5NWY5YWM3CnB1
c2hsb2c6ICAgICAgICAgNDkxOWU4MDkxNTQyCgpOT1RFOiByZXF1aXJlcyBodHRwczovL2J1Zzgz
MDg3OS5idWd6aWxsYS5tb3ppbGxhLm9yZy9hdHRhY2htZW50LmNnaT9pZD03MDI0MjggdG8gYmUK
YXBwbGllZCBpbiBvcmRlciB0byBidWlsZCwgc2VlIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5v
cmcvc2hvd19idWcuY2dpP2lkPTgzMDg3OS4KLS0tCgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmlu
IGIvY29uZmlndXJlLmluCmluZGV4IDZhYTJkYjYuLmI3MDVmYWFjIDEwMDY0NAotLS0gYS9jb25m
aWd1cmUuaW4KKysrIGIvY29uZmlndXJlLmluCkBAIC00MjQxLDE2ICs0MjQxLDE3IEBAIE1PWl9X
RUJSVENfU0lHTkFMSU5HPQogTU9aX1dFQlJUQ19JTl9MSUJYVUw9CiBNT1pfU0NUUD0KIE1PWl9N
RURJQV9QTFVHSU5TPQogTU9aX01FRElBX05BVklHQVRPUj0KIE1PWl9PTVhfUExVR0lOPQogTU9a
X1ZQOD0KIE1PWl9WUDhfRVJST1JfQ09OQ0VBTE1FTlQ9CiBNT1pfVlA4X0VOQ09ERVI9CitNT1pf
V0VCVlRUPTEKIFZQWF9BUz0KIFZQWF9BU0ZMQUdTPQogVlBYX0FTX0RBU0hfQ19GTEFHPQogVlBY
X0FTX0NPTlZFUlNJT049CiBWUFhfQVNNX1NVRkZJWD0KIFZQWF9YODZfQVNNPQogVlBYX0FSTV9B
U009CiBMSUJKUEVHX1RVUkJPX0FTPQpAQCAtODg0NSwxNiArODg0NiwxNyBAQCBBQ19TVUJTVChN
T1pfV0VCTSkKIEFDX1NVQlNUKE1PWl9EQVNIKQogQUNfU1VCU1QoTU9aX1dNRikKIEFDX1NVQlNU
KE1PWl9NRURJQV9QTFVHSU5TKQogQUNfU1VCU1QoTU9aX09NWF9QTFVHSU4pCiBBQ19TVUJTVChN
T1pfVlA4X0VSUk9SX0NPTkNFQUxNRU5UKQogQUNfU1VCU1QoTU9aX1ZQOF9FTkNPREVSKQogQUNf
U1VCU1QoTU9aX1ZQOCkKIEFDX1NVQlNUKE1PWl9PR0cpCitBQ19TVUJTVChNT1pfV0VCVlRUKQog
QUNfU1VCU1QoVlBYX0FTKQogQUNfU1VCU1QoVlBYX0FTRkxBR1MpCiBBQ19TVUJTVChWUFhfREFT
SF9DX0ZMQUcpCiBBQ19TVUJTVChWUFhfQVNfQ09OVkVSU0lPTikKIEFDX1NVQlNUKFZQWF9BU01f
U1VGRklYKQogQUNfU1VCU1QoVlBYX1g4Nl9BU00pCiBBQ19TVUJTVChWUFhfQVJNX0FTTSkKIEFD
X1NVQlNUKFZQWF9ORUVEX09CSl9JTlRfRVhUUkFDVCkKZGlmZiAtLWdpdCBhL2NvbnRlbnQvYmFz
ZS9zcmMvbnNHa0F0b21MaXN0LmggYi9jb250ZW50L2Jhc2Uvc3JjL25zR2tBdG9tTGlzdC5oCmlu
ZGV4IDkyZjViZDkuLmE2YmI2ZWMgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvYmFzZS9zcmMvbnNHa0F0
b21MaXN0LmgKKysrIGIvY29udGVudC9iYXNlL3NyYy9uc0drQXRvbUxpc3QuaApAQCAtNjU4LDE2
ICs2NTgsMTcgQEAgR0tfQVRPTShvbmNvbW1hbmR1cGRhdGUsICJvbmNvbW1hbmR1cGRhdGUiKQog
R0tfQVRPTShvbmNvbXBsZXRlLCAib25jb21wbGV0ZSIpCiBHS19BVE9NKG9uY29tcG9zaXRpb25l
bmQsICJvbmNvbXBvc2l0aW9uZW5kIikKIEdLX0FUT00ob25jb21wb3NpdGlvbnN0YXJ0LCAib25j
b21wb3NpdGlvbnN0YXJ0IikKIEdLX0FUT00ob25jb21wb3NpdGlvbnVwZGF0ZSwgIm9uY29tcG9z
aXRpb251cGRhdGUiKQogR0tfQVRPTShvbmNvbm5lY3RlZCwgIm9uY29ubmVjdGVkIikKIEdLX0FU
T00ob25jb25uZWN0aW5nLCAib25jb25uZWN0aW5nIikKIEdLX0FUT00ob25jb250ZXh0bWVudSwg
Im9uY29udGV4dG1lbnUiKQogR0tfQVRPTShvbmNvcHksICJvbmNvcHkiKQorR0tfQVRPTShvbmN1
ZWNoYW5nZSwgIm9uY3VlY2hhbmdlIikKIEdLX0FUT00ob25jdXQsICJvbmN1dCIpCiBHS19BVE9N
KG9uZGF0YWNoYW5nZSwgIm9uZGF0YWNoYW5nZSIpCiBHS19BVE9NKG9uZGF0YWVycm9yLCAib25k
YXRhZXJyb3IiKQogR0tfQVRPTShvbmRibGNsaWNrLCAib25kYmxjbGljayIpCiBHS19BVE9NKG9u
ZGVsaXZlcnlzdWNjZXNzLCAib25kZWxpdmVyeXN1Y2Nlc3MiKQogR0tfQVRPTShvbmRlbGl2ZXJ5
ZXJyb3IsICJvbmRlbGl2ZXJ5ZXJyb3IiKQogR0tfQVRPTShvbmRldmljZWNyZWF0ZWQsICJvbmRl
dmljZWNyZWF0ZWQiKQogR0tfQVRPTShvbmRldmljZWRpc2FwcGVhcmVkLCAib25kZXZpY2VkaXNh
cHBlYXJlZCIpCkBAIC02OTUsMTcgKzY5NiwxOSBAQCBHS19BVE9NKG9uZHJhZ2VuZCwgIm9uZHJh
Z2VuZCIpCiBHS19BVE9NKG9uZHJhZ2VudGVyLCAib25kcmFnZW50ZXIiKQogR0tfQVRPTShvbmRy
YWdleGl0LCAib25kcmFnZXhpdCIpCiBHS19BVE9NKG9uZHJhZ2dlc3R1cmUsICJvbmRyYWdnZXN0
dXJlIikKIEdLX0FUT00ob25kcmFnbGVhdmUsICJvbmRyYWdsZWF2ZSIpCiBHS19BVE9NKG9uZHJh
Z292ZXIsICJvbmRyYWdvdmVyIikKIEdLX0FUT00ob25kcmFnc3RhcnQsICJvbmRyYWdzdGFydCIp
CiBHS19BVE9NKG9uZHJvcCwgIm9uZHJvcCIpCiBHS19BVE9NKG9uZW5hYmxlZCwgIm9uZW5hYmxl
ZCIpCitHS19BVE9NKG9uZW50ZXIsICJvbmVudGVyIikKIEdLX0FUT00ob25lcnJvciwgIm9uZXJy
b3IiKQorR0tfQVRPTShvbmV4aXQsICJvbmV4aXQiKQogR0tfQVRPTShvbmZhaWxlZCwgIm9uZmFp
bGVkIikKIEdLX0FUT00ob25mb2N1cywgIm9uZm9jdXMiKQogR0tfQVRPTShvbmdldCwgIm9uZ2V0
IikKIEdLX0FUT00ob25oYXNoY2hhbmdlLCAib25oYXNoY2hhbmdlIikKIEdLX0FUT00ob25oZWFk
cGhvbmVzY2hhbmdlLCAib25oZWFkcGhvbmVzY2hhbmdlIikKIEdLX0FUT00ob25oZWxkLCAib25o
ZWxkIikKIEdLX0FUT00ob25ob2xkaW5nLCAib25ob2xkaW5nIikKIEdLX0FUT00ob25pY2NpbmZv
Y2hhbmdlLCAib25pY2NpbmZvY2hhbmdlIikKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250
ZW50L3B1YmxpYy9uc0hUTUxNZWRpYUVsZW1lbnQuaCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3B1
YmxpYy9uc0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCA5MmRhNDUyLi5lODIyMzE4IDEwMDY0NAot
LS0gYS9jb250ZW50L2h0bWwvY29udGVudC9wdWJsaWMvbnNIVE1MTWVkaWFFbGVtZW50LmgKKysr
IGIvY29udGVudC9odG1sL2NvbnRlbnQvcHVibGljL25zSFRNTE1lZGlhRWxlbWVudC5oCkBAIC0y
MiwxNiArMjIsMTkgQEAKICNpbmNsdWRlICJuc0RPTU1lZGlhU3RyZWFtLmgiCiAjaW5jbHVkZSAi
bW96aWxsYS9NdXRleC5oIgogI2luY2x1ZGUgIm5zVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIm5z
SURPTVdha2VMb2NrLmgiCiAjaW5jbHVkZSAiQXVkaW9DaGFubmVsQ29tbW9uLmgiCiAjaW5jbHVk
ZSAiRGVjb2RlclRyYWl0cy5oIgogI2luY2x1ZGUgIk1lZGlhTWV0YWRhdGFNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiQXVkaW9DaGFubmVsQWdlbnQuaCIKKy8vWFhYaHVtcGg6IGNvbW1lbnRlZCBvdXQg
aW4gcmlsbGlhbidzIG9yaWdpbmFsLi4uCisvLyNpbmNsdWRlICJtb3ppbGxhL2RvbS9UZXh0VHJh
Y2suaCIKKyNpbmNsdWRlICJ3ZWJ2dHQuaCIKIAogLy8gRGVmaW5lIHRvIG91dHB1dCBpbmZvcm1h
dGlvbiBvbiBkZWNvZGluZyBhbmQgcGFpbnRpbmcgZnJhbWVyYXRlCiAvKiAjZGVmaW5lIERFQlVH
X0ZSQU1FX1JBVEUgMSAqLwogCiB0eXBlZGVmIHVpbnQxNl90IG5zTWVkaWFOZXR3b3JrU3RhdGU7
CiB0eXBlZGVmIHVpbnQxNl90IG5zTWVkaWFSZWFkeVN0YXRlOwogCiBuYW1lc3BhY2UgbW96aWxs
YSB7CkBAIC05MDAsMTEgKzkwMywxOCBAQCBwcm90ZWN0ZWQ6CiAgIC8vIFRoZSBhdWRpb2NoYW5u
ZWwgaGFzIGJlZW4gc3VzcGVuZGVkLgogICBib29sIG1DaGFubmVsU3VzcGVuZGVkOwogCiAgIC8v
IElzIHRoaXMgbWVkaWEgZWxlbWVudCBwbGF5aW5nPwogICBib29sIG1QbGF5aW5nVGhyb3VnaFRo
ZUF1ZGlvQ2hhbm5lbDsKIAogICAvLyBBbiBhZ2VudCB1c2VkIHRvIGpvaW4gYXVkaW8gY2hhbm5l
bCBzZXJ2aWNlLgogICBuc0NPTVB0cjxuc0lBdWRpb0NoYW5uZWxBZ2VudD4gbUF1ZGlvQ2hhbm5l
bEFnZW50OworCisgIC8vWFhYaHVtcGg6IGNvbW1lbnRlZCBvdXQgaW4gcmFscGgncyBvcmlnaW5h
bCBwYXRjaAorICAvLyBDb250YWlucyBhIGxpc3Qgb2Ygb3VyIGF0dGFjaGVkIHRleHQgdHJhY2sg
b2JqZWN0cy4KKyAgLy9uc1RBcnJheTxuc1JlZlB0cjxUZXh0VHJhY2s+PiBtVGV4dFRyYWNrczsK
KworcHVibGljOgorICB3ZWJ2dHRfY3VlICptQ3VlczsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL0hUTUxUcmFja0VsZW1lbnQuY3BwIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvc3JjL0hUTUxUcmFja0VsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjIxNTlmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L2h0
bWwvY29udGVudC9zcmMvSFRNTFRyYWNrRWxlbWVudC5jcHAKQEAgLTAsMCArMSwzODIgQEAKKy8q
IC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJh
c2ljLW9mZnNldDogMiAtKi0gKi8KKy8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0
IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAqIExpY2Vuc2UsIHYuIDIuMC4g
SWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKyAqIGZp
bGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICov
CisKKyNpbmNsdWRlICJIVE1MVHJhY2tFbGVtZW50LmgiCisjaW5jbHVkZSAibW96aWxsYS9kb20v
SFRNTFRyYWNrRWxlbWVudEJpbmRpbmcuaCIKKworI2luY2x1ZGUgIm5zSURPTUV2ZW50VGFyZ2V0
LmgiCisjaW5jbHVkZSAibnNHZW5lcmljSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0drQXRv
bXMuaCIKKyNpbmNsdWRlICJuc1N0eWxlQ29uc3RzLmgiCisjaW5jbHVkZSAibnNNYXBwZWRBdHRy
aWJ1dGVzLmgiCisjaW5jbHVkZSAibnNSdWxlRGF0YS5oIgorI2luY2x1ZGUgIm5zQ29udGVudFV0
aWxzLmgiCisjaW5jbHVkZSAibnNJQ29udGVudFBvbGljeS5oIgorI2luY2x1ZGUgIm5zQ29udGVu
dFBvbGljeVV0aWxzLmgiCisjaW5jbHVkZSAibnNJTG9hZEdyb3VwLmgiCisjaW5jbHVkZSAibnNJ
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJuc0lDYWNoaW5nQ2hhbm5lbC5oIgorI2luY2x1ZGUgIm5z
SFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIm5zSUh0dHBDaGFubmVsLmgiCisjaW5jbHVk
ZSAibnNOZXRVdGlsLmgiCisjaW5jbHVkZSAibnNJU3RyZWFtTGlzdGVuZXIuaCIKKyNpbmNsdWRl
ICJuc0lDaGFubmVsRXZlbnRTaW5rLmgiCisjaW5jbHVkZSAibnNJQ2hhbm5lbFBvbGljeS5oIgor
I2luY2x1ZGUgIm5zSUFzeW5jVmVyaWZ5UmVkaXJlY3RDYWxsYmFjay5oIgorI2luY2x1ZGUgIm5z
SUNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIm5zSUludGVyZmFjZVJlcXVlc3Rv
ci5oIgorI2luY2x1ZGUgIm5zSU9ic2VydmVyLmgiCisjaW5jbHVkZSAibnNDT01QdHIuaCIKKyNp
bmNsdWRlICJuc1RocmVhZFV0aWxzLmgiCisjaW5jbHVkZSAibnNJRnJhbWUuaCIKKyNpbmNsdWRl
ICJuc1ZpZGVvRnJhbWUuaCIKKyNpbmNsdWRlICJ3ZWJ2dHQuaCIKKworI2lmZGVmIFBSX0xPR0dJ
TkcKKyN3YXJuaW5nIGVuYWJsaW5nIG5zcHIgbG9nZ2luZworc3RhdGljIFBSTG9nTW9kdWxlSW5m
byogZ1RyYWNrRWxlbWVudExvZzsKKyNkZWZpbmUgTE9HKHR5cGUsIG1zZykgUFJfTE9HKGdUcmFj
a0VsZW1lbnRMb2csIHR5cGUsIG1zZykKKyNlbHNlCisjZGVmaW5lIExPRyh0eXBlLCBtc2cpCisj
ZW5kaWYKKworLy8gWFhYaHVtcGg6IGRvaW5nIHRoaXMgbWFudWFsbHksIHNpbmNlCisvLyBOU19J
TVBMX05TX05FV19IVE1MX0VMRU1FTlQoVHJhY2spIGFzc3VtZXMgbmFtZXMgd2l0aCBuc0hUTUwq
IHZzLiBIVE1MKgorbnNHZW5lcmljSFRNTEVsZW1lbnQqCitOU19OZXdIVE1MVHJhY2tFbGVtZW50
KGFscmVhZHlfQWRkUmVmZWQ8bnNJTm9kZUluZm8+IGFOb2RlSW5mbywKKyAgICAgICAgICAgICAg
ICAgICAgICAgbW96aWxsYTo6ZG9tOjpGcm9tUGFyc2VyIGFGcm9tUGFyc2VyKQoreworICByZXR1
cm4gbmV3IG1vemlsbGE6OmRvbTo6SFRNTFRyYWNrRWxlbWVudChhTm9kZUluZm8pOworfQorCitu
YW1lc3BhY2UgbW96aWxsYSB7CituYW1lc3BhY2UgZG9tIHsKKworLyoqIENoYW5uZWwgTGlzdGVu
ZXIgaGVscGVyIGNsYXNzICovCitjbGFzcyBIVE1MVHJhY2tFbGVtZW50OjpMb2FkTGlzdGVuZXIg
TU9aX0ZJTkFMIDogcHVibGljIG5zSVN0cmVhbUxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBuc0lDaGFubmVsRXZlbnRTaW5r
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBuc0lJbnRlcmZhY2VSZXF1ZXN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIG5zSU9ic2VydmVyCit7CisgIE5TX0RFQ0xfSVNVUFBP
UlRTCisgIE5TX0RFQ0xfTlNJUkVRVUVTVE9CU0VSVkVSCisgIE5TX0RFQ0xfTlNJU1RSRUFNTElT
VEVORVIKKyAgTlNfREVDTF9OU0lDSEFOTkVMRVZFTlRTSU5LCisgIE5TX0RFQ0xfTlNJT0JTRVJW
RVIKKyAgTlNfREVDTF9OU0lJTlRFUkZBQ0VSRVFVRVNUT1IKKworcHVibGljOgorICBMb2FkTGlz
dGVuZXIoSFRNTFRyYWNrRWxlbWVudCAqYUVsZW1lbnQpCisgICAgOiBtRWxlbWVudChhRWxlbWVu
dCksCisgICAgICBtTG9hZElEKGFFbGVtZW50LT5HZXRDdXJyZW50TG9hZElEKCkpCisgICAgewor
ICAgICAgTlNfQUJPUlRfSUZfRkFMU0UobUVsZW1lbnQsICJNdXN0IHBhc3MgYW4gZWxlbWVudCB0
byB0aGUgY2FsbGJhY2siKTsKKyAgICB9CisKK3ByaXZhdGU6CisgIG5zUmVmUHRyPEhUTUxUcmFj
a0VsZW1lbnQ+IG1FbGVtZW50OworICBuc0NPTVB0cjxuc0lTdHJlYW1MaXN0ZW5lcj4gbU5leHRM
aXN0ZW5lcjsKKyAgdWludDMyX3QgbUxvYWRJRDsKK307CisKK05TX0lNUExfSVNVUFBPUlRTNShI
VE1MVHJhY2tFbGVtZW50OjpMb2FkTGlzdGVuZXIsIG5zSVJlcXVlc3RPYnNlcnZlciwKKyAgICAg
ICAgICAgICAgICAgICBuc0lTdHJlYW1MaXN0ZW5lciwgbnNJQ2hhbm5lbEV2ZW50U2luaywKKyAg
ICAgICAgICAgICAgICAgICBuc0lJbnRlcmZhY2VSZXF1ZXN0b3IsIG5zSU9ic2VydmVyKQorCitO
U19JTUVUSE9ESU1QCitIVE1MVHJhY2tFbGVtZW50OjpMb2FkTGlzdGVuZXI6Ok9ic2VydmUobnNJ
U3VwcG9ydHMqIGFTdWJqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKmFUb3BpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFEYXRhKQoreworICBuc0NvbnRlbnRVdGlsczo6VW5y
ZWdpc3RlclNodXRkb3duT2JzZXJ2ZXIodGhpcyk7CisKKyAgLy8gQ2xlYXIgbUVsZW1lbnQgdG8g
YnJlYWsgY3ljbGUgc28gd2UgZG9uJ3QgbGVhayBvbiBzaHV0ZG93bgorICBtRWxlbWVudCA9IG51
bGxwdHI7CisgIHJldHVybiBOU19PSzsKK30KKworTlNfSU1FVEhPRElNUAorSFRNTFRyYWNrRWxl
bWVudDo6TG9hZExpc3RlbmVyOjpPblN0YXJ0UmVxdWVzdChuc0lSZXF1ZXN0KiBhUmVxdWVzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9y
dHMqIGFDb250ZXh0KQoreworICBwcmludGYoInRyYWNrIGdvdCBzdGFydCByZXF1ZXN0XG4iKTsK
KyAgcmV0dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCitIVE1MVHJhY2tFbGVtZW50OjpM
b2FkTGlzdGVuZXI6Ok9uU3RvcFJlcXVlc3QobnNJUmVxdWVzdCogYVJlcXVlc3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFDb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcmVz
dWx0IGFTdGF0dXMpCit7CisgIHByaW50ZigidHJhY2sgZ290IHN0b3AgcmVxdWVzdFxuIik7Cisg
IG5zQ29udGVudFV0aWxzOjpVbnJlZ2lzdGVyU2h1dGRvd25PYnNlcnZlcih0aGlzKTsKKyAgcmV0
dXJuIE5TX09LOworfQorCitOU19JTUVUSE9ESU1QCitIVE1MVHJhY2tFbGVtZW50OjpMb2FkTGlz
dGVuZXI6Ok9uRGF0YUF2YWlsYWJsZShuc0lSZXF1ZXN0KiBhUmVxdWVzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICphQ29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUlu
cHV0U3RyZWFtKiBhU3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDY0X3QgYU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFDb3VudCkKK3sKKyAgcHJpbnRmKCJUcmFj
ayBnb3QgZGF0YSEgJXUgYnl0ZXMgYXQgb2Zmc2V0ICVsbHVcbiIsIGFDb3VudCwgYU9mZnNldCk7
CisKKyAgbnNyZXN1bHQgcnY7CisgIHVpbnQ2NF90IGF2YWlsYWJsZTsKKyAgYm9vbCBibG9ja2lu
ZzsKKworICBydiA9IGFTdHJlYW0tPklzTm9uQmxvY2tpbmcoJmJsb2NraW5nKTsKKyAgTlNfRU5T
VVJFX1NVQ0NFU1MocnYscnYpOworCisgIGlmIChibG9ja2luZykKKyAgICBwcmludGYoIlRyYWNr
IGRhdGEgc3RyZWFtIGlzIG5vbiBibG9ja2luZ1xuIik7CisgIGVsc2UKKyAgICBwcmludGYoIlRy
YWNrIGRhdGEgc3RyZWFtIGlzIEJMT0NLSU5HIVxuIik7CisKKyAgcnYgPSBhU3RyZWFtLT5BdmFp
bGFibGUoJmF2YWlsYWJsZSk7CisgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgIHByaW50
ZigiVHJhY2sgaGFzICVsbHUgYnl0ZXMgYXZhaWxhYmxlXG4iLCBhdmFpbGFibGUpOworCisgIGNo
YXIgKmJ1ZiA9IChjaGFyICopbWFsbG9jKGFDb3VudCk7CisgIGlmIChidWYpIHsKKyAgICB1aW50
MzJfdCByZWFkOworICAgIHJ2ID0gYVN0cmVhbS0+UmVhZChidWYsIGFDb3VudCwgJnJlYWQpOwor
ICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBydik7CisgICAgaWYgKHJlYWQgPj0gYUNvdW50KQor
ICAgICAgcmVhZCA9IGFDb3VudCAtIDE7CisgICAgYnVmW3JlYWRdID0gJ1wwJzsKKyAgICBwcmlu
dGYoIlRyYWNrIGRhdGE6XG4lc1xuIiwgYnVmKTsKKworICAgIHdlYnZ0dF9wYXJzZXIgKndlYnZ0
dCA9IHdlYnZ0dF9wYXJzZV9uZXcoKTsKKyAgICBOU19FTlNVUkVfVFJVRSh3ZWJ2dHQsIE5TX0VS
Uk9SX0ZBSUxVUkUpOworICAgIHdlYnZ0dF9jdWUgKmN1ZSA9IHdlYnZ0dF9wYXJzZV9idWZmZXIo
d2VidnR0LCBidWYsIHJlYWQpOworCisgICAgd2VidnR0X3BhcnNlX2ZyZWUod2VidnR0KTsKKwor
ICAgIC8vIHBva2UgdGhlIGN1ZXMgaW50byB0aGUgcGFyZW50IG9iamVjdAorICAgIG5zSFRNTE1l
ZGlhRWxlbWVudCogcGFyZW50ID0KKyAgICAgIHN0YXRpY19jYXN0PG5zSFRNTE1lZGlhRWxlbWVu
dCo+KG1FbGVtZW50LT5tTWVkaWFQYXJlbnQuZ2V0KCkpOworICAgIHBhcmVudC0+bUN1ZXMgPSBj
dWU7CisKKyAgICAvLyBHZXQgdGhlIHBhcmVudCBtZWRpYSBlbGVtZW50J3MgZnJhbWUKKyAgICBu
c0lGcmFtZSogZnJhbWUgPSBtRWxlbWVudC0+bU1lZGlhUGFyZW50LT5HZXRQcmltYXJ5RnJhbWUo
KTsKKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPkdldFR5cGUoKSA9PSBuc0drQXRvbXM6OkhUTUxW
aWRlb0ZyYW1lKSB7CisgICAgICBuc0lDb250ZW50ICpvdmVybGF5ID0gc3RhdGljX2Nhc3Q8bnNW
aWRlb0ZyYW1lKj4oZnJhbWUpLT5HZXRDYXB0aW9uT3ZlcmxheSgpOworICAgICAgbnNDT01QdHI8
bnNJRE9NSFRNTEVsZW1lbnQ+IGRpdiA9IGRvX1F1ZXJ5SW50ZXJmYWNlKG92ZXJsYXkpOworICAg
ICAgZGl2LT5TZXRJbm5lckhUTUwoTlNfQ29udmVydFVURjh0b1VURjE2KGN1ZS0+dGV4dCkpOwor
ICAgIH0KKworICAgIGZyZWUoYnVmKTsKKyAgfQorCisgIHJldHVybiBOU19PSzsKK30KKworTlNf
SU1FVEhPRElNUAorSFRNTFRyYWNrRWxlbWVudDo6TG9hZExpc3RlbmVyOjpBc3luY09uQ2hhbm5l
bFJlZGlyZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ2hhbm5lbCogYU9sZENoYW5u
ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICBuc0lDaGFubmVsKiBhTmV3Q2hhbm5lbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFGbGFncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUFzeW5jVmVyaWZ5UmVkaXJlY3RDYWxsYmFjayogY2IpCit7CisgIHJldHVybiBO
U19PSzsKK30KKworTlNfSU1FVEhPRElNUAorSFRNTFRyYWNrRWxlbWVudDo6TG9hZExpc3RlbmVy
OjpHZXRJbnRlcmZhY2UoY29uc3QgbnNJSUQgJmFJSUQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqYVJlc3VsdCkKK3sKKyAgcmV0dXJuIFF1ZXJ5
SW50ZXJmYWNlKGFJSUQsIGFSZXN1bHQpOworfQorCisKKy8qKiBIVE1MVHJhY2tFbGVtZW50ICov
CitIVE1MVHJhY2tFbGVtZW50OjpIVE1MVHJhY2tFbGVtZW50KGFscmVhZHlfQWRkUmVmZWQ8bnNJ
Tm9kZUluZm8+IGFOb2RlSW5mbykKKyAgICA6IG5zR2VuZXJpY0hUTUxFbGVtZW50KGFOb2RlSW5m
bykKK3sKKyNpZmRlZiBQUl9MT0dHSU5HCisgIGlmICghZ1RyYWNrRWxlbWVudExvZykgeworICAg
IGdUcmFja0VsZW1lbnRMb2cgPSBQUl9OZXdMb2dNb2R1bGUoIm5zVHJhY2tFbGVtZW50Iik7Cisg
IH0KKyNlbmRpZgorCisgIFNldElzRE9NQmluZGluZygpOworfQorCitIVE1MVHJhY2tFbGVtZW50
Ojp+SFRNTFRyYWNrRWxlbWVudCgpCit7Cit9CisKK05TX0lNUExfQUREUkVGX0lOSEVSSVRFRChI
VE1MVHJhY2tFbGVtZW50LCBFbGVtZW50KQorTlNfSU1QTF9SRUxFQVNFX0lOSEVSSVRFRChIVE1M
VHJhY2tFbGVtZW50LCBFbGVtZW50KQorCitOU19JTlRFUkZBQ0VfVEFCTEVfSEVBRChIVE1MVHJh
Y2tFbGVtZW50KQorICBOU19IVE1MX0NPTlRFTlRfSU5URVJGQUNFX1RBQkxFMShIVE1MVHJhY2tF
bGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lET01IVE1MRWxl
bWVudCkKKyAgTlNfSFRNTF9DT05URU5UX0lOVEVSRkFDRV9UQUJMRV9UT19NQVBfU0VHVUUoSFRN
TFRyYWNrRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNHZW5lcmljSFRNTEVsZW1lbnQpCitOU19IVE1MX0NPTlRFTlRfSU5URVJGQUNFX01B
UF9FTkQKKworTlNfSU1QTF9FTEVNRU5UX0NMT05FKEhUTUxUcmFja0VsZW1lbnQpCisKK0pTT2Jq
ZWN0KgorSFRNTFRyYWNrRWxlbWVudDo6V3JhcE5vZGUoSlNDb250ZXh0KiBjeCwgSlNPYmplY3Qq
IHNjb3BlLCBib29sKiB0cmllZFRvV3JhcCkKK3sKKyAgcmV0dXJuIEhUTUxUcmFja0VsZW1lbnRC
aW5kaW5nOjpXcmFwKGN4LCBzY29wZSwgdGhpcywgdHJpZWRUb1dyYXApOworfQorCituc3Jlc3Vs
dAorSFRNTFRyYWNrRWxlbWVudDo6U2V0QWNjZXB0SGVhZGVyKG5zSUh0dHBDaGFubmVsICphQ2hh
bm5lbCkKK3sKKyNpZmRlZiBNT1pfV0VCVlRUCisgIG5zQ0F1dG9TdHJpbmcgdmFsdWUoCisgICAg
ICAidGV4dC93ZWJ2dHQiCisgICAgICApOworCisgIHJldHVybiBhQ2hhbm5lbC0+U2V0UmVxdWVz
dEhlYWRlcihOU19MSVRFUkFMX0NTVFJJTkcoIkFjY2VwdCIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmYWxzZSk7CisjZWxzZQorICByZXR1cm4gTlNfRVJST1JfTk9UX0lNUExFTUVOVEVEOwor
I2VuZGlmCit9CisKKy8qKiBjb3BpZWQgZnJvbSBuc0hUTUxNZWRpYUVsZW1lbnQ6Ok5ld1VSSUZy
b21TdHJpbmcgKi8KK25zcmVzdWx0CitIVE1MVHJhY2tFbGVtZW50OjpOZXdVUklGcm9tU3RyaW5n
KGNvbnN0IG5zQXV0b1N0cmluZyYgYVVSSVNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSVVSSSoqIGFVUkkpCit7CisgIE5TX0VOU1VSRV9BUkdfUE9JTlRFUihhVVJJ
KTsKKworICAqYVVSSSA9IG51bGxwdHI7CisKKyAgbnNDT01QdHI8bnNJRG9jdW1lbnQ+IGRvYyA9
IE93bmVyRG9jKCk7CisKKyAgbnNDT01QdHI8bnNJVVJJPiBiYXNlVVJJID0gR2V0QmFzZVVSSSgp
OworICBuc3Jlc3VsdCBydiA9IG5zQ29udGVudFV0aWxzOjpOZXdVUklXaXRoRG9jdW1lbnRDaGFy
c2V0KGFVUkksIGFVUklTcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvYywgYmFzZVVSSSk7CisgIE5TX0VOU1VSRV9TVUNDRVNT
KHJ2LCBydik7CisKKyAgYm9vbCBlcXVhbDsKKyAgaWYgKGFVUklTcGVjLklzRW1wdHkoKSAmJgor
ICAgICAgZG9jLT5HZXREb2N1bWVudFVSSSgpICYmCisgICAgICBOU19TVUNDRUVERUQoZG9jLT5H
ZXREb2N1bWVudFVSSSgpLT5FcXVhbHMoKmFVUkksICZlcXVhbCkpICYmCisgICAgICBlcXVhbCkg
eworICAgIC8vIGdpdmUgdXAKKyAgICBOU19SRUxFQVNFKCphVVJJKTsKKyAgICByZXR1cm4gTlNf
RVJST1JfRE9NX0lOVkFMSURfU1RBVEVfRVJSOworICB9CisKKyAgcmV0dXJuIE5TX09LOworfQor
Cituc3Jlc3VsdAorSFRNTFRyYWNrRWxlbWVudDo6TG9hZFJlc291cmNlKG5zSVVSSSogYVVSSSkK
K3sKKyAgbnNyZXN1bHQgcnY7CisKKyAgaWYgKG1DaGFubmVsKSB7CisgICAgbUNoYW5uZWwtPkNh
bmNlbChOU19CSU5ESU5HX0FCT1JURUQpOworICAgIG1DaGFubmVsID0gbnVsbHB0cjsKKyAgfQor
CisgIGludDE2X3Qgc2hvdWxkTG9hZCA9IG5zSUNvbnRlbnRQb2xpY3k6OkFDQ0VQVDsKKyAgcnYg
PSBOU19DaGVja0NvbnRlbnRMb2FkUG9saWN5KG5zSUNvbnRlbnRQb2xpY3k6OlRZUEVfTUVESUEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhVVJJLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZVByaW5jaXBhbCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bnNHZW5lcmljSFRNTEVsZW1lbnQqPih0aGlzKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtcHR5Q1N0cmluZygpLCAvLyBtaW1lIHR5
cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIC8vIGV4dHJhCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hvdWxkTG9hZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQ29udGVudFV0aWxzOjpHZXRDb250ZW50UG9saWN5KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NvbnRlbnRVdGlsczo6R2V0U2Vj
dXJpdHlNYW5hZ2VyKCkpOworICBOU19FTlNVUkVfU1VDQ0VTUyhydixydik7CisgIGlmIChOU19D
UF9SRUpFQ1RFRChzaG91bGRMb2FkKSkKKyAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKwor
ICBuc0NPTVB0cjxuc0lMb2FkR3JvdXA+IGxvYWRHcm91cCA9IE93bmVyRG9jKCktPkdldERvY3Vt
ZW50TG9hZEdyb3VwKCk7CisKKyAgLy8gY2hlY2sgZm9yIGEgQ29udGVudCBTZWN1cml0eSBQb2xp
Y3kgdG8gcGFzcyBkb3duIHRvIHRoZSBjaGFubmVsCisgIC8vIGNyZWF0ZWQgdG8gbG9hZCB0aGUg
bWVkaWEgY29udGVudAorICBuc0NPTVB0cjxuc0lDaGFubmVsUG9saWN5PiBjaGFubmVsUG9saWN5
OworICBuc0NPTVB0cjxuc0lDb250ZW50U2VjdXJpdHlQb2xpY3k+IGNzcDsKKyAgcnYgPSBOb2Rl
UHJpbmNpcGFsKCktPkdldENzcChnZXR0ZXJfQWRkUmVmcyhjc3ApKTsKKyAgTlNfRU5TVVJFX1NV
Q0NFU1MocnYscnYpOworICBpZiAoY3NwKSB7CisgICAgY2hhbm5lbFBvbGljeSA9IGRvX0NyZWF0
ZUluc3RhbmNlKCJAbW96aWxsYS5vcmcvbnNjaGFubmVscG9saWN5OzEiKTsKKyAgICBjaGFubmVs
UG9saWN5LT5TZXRDb250ZW50U2VjdXJpdHlQb2xpY3koY3NwKTsKKyAgICBjaGFubmVsUG9saWN5
LT5TZXRMb2FkVHlwZShuc0lDb250ZW50UG9saWN5OjpUWVBFX01FRElBKTsKKyAgfQorICBuc0NP
TVB0cjxuc0lDaGFubmVsPiBjaGFubmVsOworICBydiA9IE5TX05ld0NoYW5uZWwoZ2V0dGVyX0Fk
ZFJlZnMoY2hhbm5lbCksCisgICAgICAgICAgICAgICAgICAgICBhVVJJLAorICAgICAgICAgICAg
ICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgIGxvYWRHcm91cCwKKyAgICAg
ICAgICAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICBuc0lDYWNoaW5n
Q2hhbm5lbDo6TE9BRF9CWVBBU1NfTE9DQUxfQ0FDSEVfSUZfQlVTWSwKKyAgICAgICAgICAgICAg
ICAgICAgIGNoYW5uZWxQb2xpY3kpOworICBOU19FTlNVUkVfU1VDQ0VTUyhydixydik7CisKKyAg
bnNSZWZQdHI8TG9hZExpc3RlbmVyPiBsaXN0ZW5lciA9IG5ldyBMb2FkTGlzdGVuZXIodGhpcyk7
CisgIGNoYW5uZWwtPlNldE5vdGlmaWNhdGlvbkNhbGxiYWNrcyhsaXN0ZW5lcik7CisKKyAgcHJp
bnRmKCJvcGVuaW5nIHdlYnZ0dCBjaGFubmVsXG4iKTsKKyAgcnYgPSBjaGFubmVsLT5Bc3luY09w
ZW4obGlzdGVuZXIsIG51bGxwdHIpOworICBOU19FTlNVUkVfU1VDQ0VTUyhydiwgcnYpOworCisg
IG1DaGFubmVsID0gY2hhbm5lbDsKKworICBuc0NvbnRlbnRVdGlsczo6UmVnaXN0ZXJTaHV0ZG93
bk9ic2VydmVyKGxpc3RlbmVyKTsKKworICByZXR1cm4gTlNfT0s7Cit9CisKK25zcmVzdWx0CitI
VE1MVHJhY2tFbGVtZW50OjpCaW5kVG9UcmVlKG5zSURvY3VtZW50ICphRG9jdW1lbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQgKmFQYXJlbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQgKmFCaW5kaW5nUGFyZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFDb21waWxlRXZlbnRIYW5kbGVycykKK3sKKyAgbnNy
ZXN1bHQgcnYgPSBuc0dlbmVyaWNIVE1MRWxlbWVudDo6QmluZFRvVHJlZShhRG9jdW1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVBhcmVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQmluZGlu
Z1BhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhQ29tcGlsZUV2ZW50SGFuZGxlcnMpOworICBpZihOU19GQUlMRUQocnYpKQorICAgIHJldHVy
biBydjsKKworICBMT0coUFJfTE9HX0RFQlVHLCAoIlRyYWNrIEVsZW1lbnQgYm91bmQgdG8gdHJl
ZS4iKSk7CisgIGZwcmludGYoc3RkZXJyLCAiVHJhY2sgZWxlbWVudCBib3VuZCB0byB0cmVlLlxu
Iik7CisgIGlmICghYVBhcmVudCB8fCAhYVBhcmVudC0+SXNOb2RlT2ZUeXBlKG5zSU5vZGU6OmVN
RURJQSkpCisgICAgcmV0dXJuIE5TX09LOworCisgIC8vIFN0b3JlIG91ciBwYXJlbnQgc28gd2Ug
Y2FuIGxvb2sgdXAgaXRzIGZyYW1lIGZvciBkaXNwbGF5CisgIG1NZWRpYVBhcmVudCA9IGdldHRl
cl9BZGRSZWZzKGFQYXJlbnQpOworCisgIG5zSFRNTE1lZGlhRWxlbWVudCogbWVkaWEgPSBzdGF0
aWNfY2FzdDxuc0hUTUxNZWRpYUVsZW1lbnQqPihhUGFyZW50KTsKKyAgLy8gVE9ETzogc2VwYXJh
dGUgbm90aWZpY2F0aW9uIGZvciAnYWx0ZXJuYXRlJyB0cmFja3M/CisgIG1lZGlhLT5Ob3RpZnlB
ZGRlZFNvdXJjZSgpOworICBMT0coUFJfTE9HX0RFQlVHLCAoIlRyYWNrIGVsZW1lbnQgc2VudCBu
b3RpZmljYXRpb24gdG8gcGFyZW50LiIpKTsKKworICAvLyBGaW5kIG91ciAnc3JjJyB1cmwKKyAg
bnNBdXRvU3RyaW5nIHNyYzsKKyAgbnNDT01QdHI8bnNJVVJJPiB1cmk7CisKKyAgaWYgKEdldEF0
dHIoa05hbWVTcGFjZUlEX05vbmUsIG5zR2tBdG9tczo6c3JjLCBzcmMpKSB7CisgICAgbnNyZXN1
bHQgcnYgPSBOZXdVUklGcm9tU3RyaW5nKHNyYywgZ2V0dGVyX0FkZFJlZnModXJpKSk7CisgICAg
aWYgKE5TX1NVQ0NFRURFRChydikpIHsKKyAgICAgIExPRyhQUl9MT0dfQUxXQVlTLCAoIiVwIFRy
eWluZyB0byBsb2FkIGZyb20gc3JjPSVzIiwgdGhpcywKKyAgICAgICAgICAgICBOU19Db252ZXJ0
VVRGMTZ0b1VURjgoc3JjKS5nZXQoKSkpOworICAgICAgcHJpbnRmKCIlcCBUcnlpbmcgdG8gbG9h
ZCBmcm9tIHNyYz0lc1xuIiwgdGhpcywKKyAgICAgICAgICAgICBOU19Db252ZXJ0VVRGMTZ0b1VU
Rjgoc3JjKS5nZXQoKSk7CisgICAgICBMb2FkUmVzb3VyY2UodXJpKTsKKyAgICB9CisgIH0KKwor
ICByZXR1cm4gTlNfT0s7Cit9CisKK30gLy8gbmFtZXNwYWNlIGRvbQorfSAvLyBuYW1lc3BhY2Ug
bW96aWxsYQpkaWZmIC0tZ2l0IGEvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL0hUTUxUcmFja0Vs
ZW1lbnQuaCBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9IVE1MVHJhY2tFbGVtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmMTYyYQotLS0gL2Rldi9udWxsCisr
KyBiL2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9IVE1MVHJhY2tFbGVtZW50LmgKQEAgLTAsMCAr
MSwxMzUgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9k
ZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8qIFRoaXMgU291cmNlIENvZGUgRm9y
bSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAqIExpY2Vu
c2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRo
IHRoaXMKKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcv
TVBMLzIuMC8uICovCisKKyNpZm5kZWYgbW96aWxsYV9kb21fSFRNTFRyYWNrRWxlbWVudF9oCisj
ZGVmaW5lIG1vemlsbGFfZG9tX0hUTUxUcmFja0VsZW1lbnRfaAorCisjaW5jbHVkZSAibnNJRE9N
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
Im5zR2VuZXJpY0hUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAibnNJQ29udGVudC5oIgorI2luY2x1
ZGUgIm5zSURvY3VtZW50LmgiCisjaW5jbHVkZSAibnNJSHR0cENoYW5uZWwuaCIKKyNpbmNsdWRl
ICJuc0drQXRvbXMuaCIKKyNpbmNsdWRlICJtb3ppbGxhL2RvbS9UZXh0VHJhY2suaCIKKworbmFt
ZXNwYWNlIG1vemlsbGEgeworbmFtZXNwYWNlIGRvbSB7CisKK2NsYXNzIFRleHRUcmFjazsKKwor
LyoqCisgKiBYWFhodW1waDogdGhlcmUgYXJlIHNvbWUgcGxhY2VzIHdoZXJlIEhUTUxFbGVtZW50
cyBhcmUgYXNzdW1lZCB0byBiZSBuYW1lZAorICogdXNpbmcgbnNIVE1MKkVsZW1lbnQgYXMgdGhl
IHByZWZpeCB2cy4gSFRNTCpFbGVtZW50LiAgRm9yIGV4YW1wbGUsIHNlZToKKyAqIE5TX0lNUExf
TlNfTkVXX0hUTUxfRUxFTUVOVCBpbiBjb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNHZW5lcmlj
SFRNTEVsZW1lbnQuaC4KKyAqLworY2xhc3MgSFRNTFRyYWNrRWxlbWVudCA6IHB1YmxpYyBuc0dl
bmVyaWNIVE1MRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgbnNJRE9N
SFRNTEVsZW1lbnQKK3sKK3B1YmxpYzoKKyAgSFRNTFRyYWNrRWxlbWVudChhbHJlYWR5X0FkZFJl
ZmVkPG5zSU5vZGVJbmZvPiBhTm9kZUluZm8pOworICB2aXJ0dWFsIH5IVE1MVHJhY2tFbGVtZW50
KCk7CisKKyAgLy8gbnNJU3VwcG9ydHMKKyAgTlNfREVDTF9JU1VQUE9SVFNfSU5IRVJJVEVECisK
KyAgLy8gbnNJRE9NTm9kZQorICBOU19GT1JXQVJEX05TSURPTU5PREVfVE9fTlNJTk9ERQorCisg
IC8vIG5zSURPTUVsZW1lbnQKKyAgTlNfRk9SV0FSRF9OU0lET01FTEVNRU5UX1RPX0dFTkVSSUMK
KworICAvLyBuc0lET01IVE1MRWxlbWVudAorICBOU19GT1JXQVJEX05TSURPTUhUTUxFTEVNRU5U
X1RPX0dFTkVSSUMKKworICAvLyBIVE1MVHJhY2tFbGVtZW50IFdlYklETAorICB2b2lkIEdldEtp
bmQobnNTdHJpbmcmIGFLaW5kKQorICB7CisgICAgR2V0SFRNTEF0dHIobnNHa0F0b21zOjpraW5k
LCBhS2luZCk7CisgIH0KKyAgdm9pZCBTZXRLaW5kKGNvbnN0IG5zQVN0cmluZyYgYUtpbmQsIG1v
emlsbGE6OkVycm9yUmVzdWx0JiBhRXJyb3IpCisgIHsKKyAgICBTZXRIVE1MQXR0cihuc0drQXRv
bXM6OmtpbmQsIGFLaW5kLCBhRXJyb3IpOworICB9CisKKyAgdm9pZCBHZXRTcmMobnNTdHJpbmcm
IGFTcmMpCisgIHsKKyAgICBHZXRIVE1MQXR0cihuc0drQXRvbXM6OnNyYywgYVNyYyk7CisgIH0K
KyAgdm9pZCBTZXRTcmMoY29uc3QgbnNBU3RyaW5nJiBhU3JjLCBtb3ppbGxhOjpFcnJvclJlc3Vs
dCYgYUVycm9yKQorICB7CisgICAgU2V0SFRNTEF0dHIobnNHa0F0b21zOjpzcmMsIGFTcmMsIGFF
cnJvcik7CisgIH0KKworICB2b2lkIEdldFNyY2xhbmcobnNTdHJpbmcmIGFTcmNsYW5nKQorICB7
CisgICAgR2V0SFRNTEF0dHIobnNHa0F0b21zOjpzcmNsYW5nLCBhU3JjbGFuZyk7CisgIH0KKyAg
dm9pZCBTZXRTcmNsYW5nKGNvbnN0IG5zQVN0cmluZyYgYVNyY2xhbmcsIG1vemlsbGE6OkVycm9y
UmVzdWx0JiBhRXJyb3IpCisgIHsKKyAgICBTZXRIVE1MQXR0cihuc0drQXRvbXM6OnNyY2xhbmcs
IGFTcmNsYW5nLCBhRXJyb3IpOworICB9CisKKyAgdm9pZCBHZXRMYWJlbChuc1N0cmluZyYgYUxh
YmVsKQorICB7CisgICAgR2V0SFRNTEF0dHIobnNHa0F0b21zOjpsYWJlbCwgYUxhYmVsKTsKKyAg
fQorICB2b2lkIFNldExhYmVsKGNvbnN0IG5zQVN0cmluZyYgYUxhYmVsLCBtb3ppbGxhOjpFcnJv
clJlc3VsdCYgYUVycm9yKQorICB7CisgICAgU2V0SFRNTEF0dHIobnNHa0F0b21zOjpsYWJlbCwg
YUxhYmVsLCBhRXJyb3IpOworICB9CisKKyAgYm9vbCBEZWZhdWx0KCkKKyAgeworICAgIHJldHVy
biBtRGVmYXVsdDsKKyAgfQorCisgIHZvaWQgU2V0RGVmYXVsdChib29sIGFEZWZhdWx0KQorICB7
CisgICAgbURlZmF1bHQgPSBhRGVmYXVsdDsKKyAgfQorCisgIHVpbnQxNl90IFJlYWR5U3RhdGUo
KQorICB7CisgICAgcmV0dXJuIG1SZWFkeVN0YXRlOworICB9CisKKyAgVGV4dFRyYWNrKiBUcmFj
aygpCisgIHsKKyAgICAvLyBYWFhodW1waDogdG9kbworICAgIHJldHVybiBudWxscHRyOworICB9
CisKKyAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZShuc0lOb2RlSW5mbyAqYU5vZGVJbmZvLCBuc0lO
b2RlICoqYVJlc3VsdCkgY29uc3Q7CisgIHZpcnR1YWwgbnNyZXN1bHQgU2V0QWNjZXB0SGVhZGVy
KG5zSUh0dHBDaGFubmVsKiBhQ2hhbm5lbCk7CisgIHZpcnR1YWwgbnNJRE9NTm9kZSogQXNET01O
b2RlKCkgeyByZXR1cm4gdGhpczsgfQorCisgIC8vIE92ZXJyaWRlIEJpbmRUb1RyZWUoKSBzbyB0
aGF0IHdlIGNhbiB0cmlnZ2VyIGEgbG9hZCB3aGVuIHdlIGFkZCBhCisgIC8vIGNoaWxkIHRyYWNr
IGVsZW1lbnQuCisgIHZpcnR1YWwgbnNyZXN1bHQgQmluZFRvVHJlZShuc0lEb2N1bWVudCAqYURv
Y3VtZW50LCBuc0lDb250ZW50ICphUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJQ29udGVudCAqYUJpbmRpbmdQYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFDb21waWxlRXZlbnRIYW5kbGVycyk7CisKKyAgUFJVaW50MzIgR2V0Q3VycmVu
dExvYWRJRCgpIHsgcmV0dXJuIG1DdXJyZW50TG9hZElEOyB9CisKK3Byb3RlY3RlZDoKKyAgdmly
dHVhbCBKU09iamVjdCogV3JhcE5vZGUoSlNDb250ZXh0ICphQ3gsIEpTT2JqZWN0ICphU2NvcGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmFUcmllZFRvV3JhcCkgTU9aX09W
RVJSSURFOworCisgIGNsYXNzIExvYWRMaXN0ZW5lcjsKKyAgUFJVaW50MzIgbUN1cnJlbnRMb2Fk
SUQ7CisgIG5zQ09NUHRyPG5zSUNoYW5uZWw+IG1DaGFubmVsOworICBuc0NPTVB0cjxuc0lDb250
ZW50PiBtTWVkaWFQYXJlbnQ7CisgIHVpbnQxNl90IG1SZWFkeVN0YXRlOworICBib29sIG1EZWZh
dWx0OworCisgIG5zcmVzdWx0IE5ld1VSSUZyb21TdHJpbmcoY29uc3QgbnNBdXRvU3RyaW5nJiBh
VVJJU3BlYywgbnNJVVJJKiogYVVSSSk7CisgIG5zcmVzdWx0IExvYWRSZXNvdXJjZShuc0lVUkkq
IGFVUkkpOworfTsKKworfSAvLyBuYW1lc3BhY2UgZG9tCit9IC8vIG5hbWVzcGFjZSBtb3ppbGxh
CisKKyNlbmRpZiAvLyBtb3ppbGxhX2RvbV9IVE1MVHJhY2tFbGVtZW50X2gKZGlmZiAtLWdpdCBh
L2NvbnRlbnQvaHRtbC9jb250ZW50L3NyYy9NYWtlZmlsZS5pbiBiL2NvbnRlbnQvaHRtbC9jb250
ZW50L3NyYy9NYWtlZmlsZS5pbgppbmRleCAxYWNlNzM5Li4zOGFmMzc2IDEwMDY0NAotLS0gYS9j
b250ZW50L2h0bWwvY29udGVudC9zcmMvTWFrZWZpbGUuaW4KKysrIGIvY29udGVudC9odG1sL2Nv
bnRlbnQvc3JjL01ha2VmaWxlLmluCkBAIC0xMjcsMTggKzEyNywyMyBAQCBDUFBTUkNTCQk9IFwK
IGlmZGVmIE1PWl9NRURJQQogQ1BQU1JDUwkJKz0gXAogCQluc0hUTUxBdWRpb0VsZW1lbnQuY3Bw
IFwKIAkJbnNIVE1MTWVkaWFFbGVtZW50LmNwcCBcCiAJCW5zTWVkaWFFcnJvci5jcHAgXAogCQlu
c01lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwIFwKIAkJbnNIVE1MU291cmNlRWxlbWVudC5jcHAg
XAogCQluc1RpbWVSYW5nZXMuY3BwIFwKKwkJSFRNTFRyYWNrRWxlbWVudC5jcHAgXAogCQluc0hU
TUxWaWRlb0VsZW1lbnQuY3BwIFwKIAkJJChOVUxMKQorCitFWFBPUlRTX21vemlsbGEvZG9tICs9
IFwKKwkJSFRNTFRyYWNrRWxlbWVudC5oIFwKKwkJJChOVUxMKQogZW5kaWYKIAogIyB3ZSBkb24n
dCB3YW50IHRoZSBzaGFyZWQgbGliLCBidXQgd2Ugd2FudCB0byBmb3JjZSB0aGUgY3JlYXRpb24g
b2YgYSBzdGF0aWMgbGliLgogRk9SQ0VfU1RBVElDX0xJQiA9IDEKIAogaW5jbHVkZSAkKHRvcHNy
Y2RpcikvY29uZmlnL3J1bGVzLm1rCiBpbmNsdWRlICQodG9wc3JjZGlyKS9pcGMvY2hyb21pdW0v
Y2hyb21pdW0tY29uZmlnLm1rCiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvaHRtbC9jb250ZW50L3Ny
Yy9uc0dlbmVyaWNIVE1MRWxlbWVudC5oIGIvY29udGVudC9odG1sL2NvbnRlbnQvc3JjL25zR2Vu
ZXJpY0hUTUxFbGVtZW50LmgKaW5kZXggZTFkZTIyMS4uNjViYzAwOCAxMDA2NDQKLS0tIGEvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zR2VuZXJpY0hUTUxFbGVtZW50LmgKKysrIGIvY29udGVu
dC9odG1sL2NvbnRlbnQvc3JjL25zR2VuZXJpY0hUTUxFbGVtZW50LmgKQEAgLTE5MTUsMTYgKzE5
MTUsMTkgQEAgTlNfREVDTEFSRV9OU19ORVdfSFRNTF9FTEVNRU5UKFRhYmxlQ29sKQogTlNfREVD
TEFSRV9OU19ORVdfSFRNTF9FTEVNRU5UKFRhYmxlKQogTlNfREVDTEFSRV9OU19ORVdfSFRNTF9F
TEVNRU5UKFRhYmxlUm93KQogTlNfREVDTEFSRV9OU19ORVdfSFRNTF9FTEVNRU5UKFRhYmxlU2Vj
dGlvbikKIE5TX0RFQ0xBUkVfTlNfTkVXX0hUTUxfRUxFTUVOVChUYm9keSkKIE5TX0RFQ0xBUkVf
TlNfTkVXX0hUTUxfRUxFTUVOVChUZXh0QXJlYSkKIE5TX0RFQ0xBUkVfTlNfTkVXX0hUTUxfRUxF
TUVOVChUZm9vdCkKIE5TX0RFQ0xBUkVfTlNfTkVXX0hUTUxfRUxFTUVOVChUaGVhZCkKIE5TX0RF
Q0xBUkVfTlNfTkVXX0hUTUxfRUxFTUVOVChUaXRsZSkKKyNpZiBkZWZpbmVkKE1PWl9NRURJQSkK
K05TX0RFQ0xBUkVfTlNfTkVXX0hUTUxfRUxFTUVOVChUcmFjaykKKyNlbmRpZgogTlNfREVDTEFS
RV9OU19ORVdfSFRNTF9FTEVNRU5UKFVMaXN0KQogTlNfREVDTEFSRV9OU19ORVdfSFRNTF9FTEVN
RU5UKFVua25vd24pCiAjaWYgZGVmaW5lZChNT1pfTUVESUEpCiBOU19ERUNMQVJFX05TX05FV19I
VE1MX0VMRU1FTlQoVmlkZW8pCiAjZW5kaWYKIAogaW5saW5lIG5zSVN1cHBvcnRzKgogVG9TdXBw
b3J0cyhuc0dlbmVyaWNIVE1MRWxlbWVudCogYUhUTUxFbGVtZW50KQpkaWZmIC0tZ2l0IGEvY29u
dGVudC9odG1sL2NvbnRlbnQvc3JjL25zSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9jb250ZW50L2h0
bWwvY29udGVudC9zcmMvbnNIVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBmYzdlNThhLi4wZTUw
YWQ4IDEwMDY0NAotLS0gYS9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MTWVkaWFFbGVt
ZW50LmNwcAorKysgYi9jb250ZW50L2h0bWwvY29udGVudC9zcmMvbnNIVE1MTWVkaWFFbGVtZW50
LmNwcApAQCAtMTAxLDE2ICsxMDEsMTkgQEAKICNpbmNsdWRlICJNZWRpYU9teERlY29kZXIuaCIK
ICNlbmRpZgogI2lmZGVmIE1PWl9EQVNICiAjaW5jbHVkZSAiREFTSERlY29kZXIuaCIKICNlbmRp
ZgogI2lmZGVmIE1PWl9XTUYKICNpbmNsdWRlICJXTUZEZWNvZGVyLmgiCiAjZW5kaWYKKyNpZmRl
ZiBNT1pfV0VCVlRUCisjaW5jbHVkZSAibnNXZWJWVFREZWNvZGVyLmgiCisjZW5kaWYKIAogI2lm
ZGVmIFBSX0xPR0dJTkcKIHN0YXRpYyBQUkxvZ01vZHVsZUluZm8qIGdNZWRpYUVsZW1lbnRMb2c7
CiBzdGF0aWMgUFJMb2dNb2R1bGVJbmZvKiBnTWVkaWFFbGVtZW50RXZlbnRzTG9nOwogI2RlZmlu
ZSBMT0codHlwZSwgbXNnKSBQUl9MT0coZ01lZGlhRWxlbWVudExvZywgdHlwZSwgbXNnKQogI2Rl
ZmluZSBMT0dfRVZFTlQodHlwZSwgbXNnKSBQUl9MT0coZ01lZGlhRWxlbWVudEV2ZW50c0xvZywg
dHlwZSwgbXNnKQogI2Vsc2UKICNkZWZpbmUgTE9HKHR5cGUsIG1zZykKQEAgLTM0MDUsMTYgKzM0
MDgsMzUgQEAgdm9pZCBuc0hUTUxNZWRpYUVsZW1lbnQ6OkZpcmVUaW1lVXBkYXRlKGJvb2wgYVBl
cmlvZGljKQogICAgIG1MYXN0Q3VycmVudFRpbWUgPSB0aW1lOwogICB9CiAgIGlmIChtRnJhZ21l
bnRFbmQgPj0gMC4wICYmIHRpbWUgPj0gbUZyYWdtZW50RW5kKSB7CiAgICAgUGF1c2UoKTsKICAg
ICBtRnJhZ21lbnRFbmQgPSAtMS4wOwogICAgIG1GcmFnbWVudFN0YXJ0ID0gLTEuMDsKICAgICBt
RGVjb2Rlci0+U2V0RnJhZ21lbnRFbmRUaW1lKG1GcmFnbWVudEVuZCk7CiAgIH0KKworICAvLyBI
QUNLOiB1cGRhdGUgY3VycmVudCB0ZXh0IHRyYWNrIGN1ZSBmcm9tIGhlcmUKKyAgbnNJRnJhbWUq
IGZyYW1lID0gR2V0UHJpbWFyeUZyYW1lKCk7CisgIGlmIChmcmFtZSAmJiBmcmFtZS0+R2V0VHlw
ZSgpID09IG5zR2tBdG9tczo6SFRNTFZpZGVvRnJhbWUpIHsKKyAgICBuc0lDb250ZW50ICpvdmVy
bGF5ID0gc3RhdGljX2Nhc3Q8bnNWaWRlb0ZyYW1lKj4oZnJhbWUpLT5HZXRDYXB0aW9uT3Zlcmxh
eSgpOworICAgIGxvbmcgbXN0aW1lID0gdGltZSAqIDFlMzsKKyAgICB3ZWJ2dHRfY3VlICpjdWUg
PSBtQ3VlczsKKyAgICB3aGlsZSAoY3VlKSB7CisgICAgICBpZiAoY3VlLT5zdGFydCA8IG1zdGlt
ZSAmJiBjdWUtPmVuZCA+IG1zdGltZSkKKyAgICAgICAgYnJlYWs7CisgICAgICBjdWUgPSBjdWUt
Pm5leHQ7CisgICAgfQorICAgIGNvbnN0IGNoYXIgKnRleHQgPSBjdWUgPyBjdWUtPnRleHQgOiAi
IjsKKyAgICBuc0NPTVB0cjxuc0lET01IVE1MRWxlbWVudD4gZGl2ID0gZG9fUXVlcnlJbnRlcmZh
Y2Uob3ZlcmxheSk7CisgICAgY2hhciB0aW1lc3RyaW5nWzEwMjRdID0gIm1vbGxpcyBub24gY29t
bW9kbyBldCI7CisgICAgc25wcmludGYodGltZXN0cmluZywgMTAyNCwgIjxwPkN1ZSB1cGRhdGUg
JWxmPC9wPlxuIgorICAgICAgICAiPHA+JXM8L3A+XG4iLCB0aW1lLCB0ZXh0KTsKKyAgICBkaXYt
PlNldElubmVySFRNTChOU19Db252ZXJ0VVRGOHRvVVRGMTYodGltZXN0cmluZykpOworICB9CiB9
CiAKIHZvaWQgbnNIVE1MTWVkaWFFbGVtZW50OjpHZXRDdXJyZW50U3BlYyhuc0NTdHJpbmcmIGFT
dHJpbmcpCiB7CiAgIGlmIChtTG9hZGluZ1NyYykgewogICAgIG1Mb2FkaW5nU3JjLT5HZXRTcGVj
KGFTdHJpbmcpOwogICB9IGVsc2UgewogICAgIGFTdHJpbmcuVHJ1bmNhdGUoKTsKZGlmZiAtLWdp
dCBhL2NvbnRlbnQvbWVkaWEvTWFrZWZpbGUuaW4gYi9jb250ZW50L21lZGlhL01ha2VmaWxlLmlu
CmluZGV4IDRiMDUyNWEuLjJhMjk0MGUgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvTWFrZWZp
bGUuaW4KKysrIGIvY29udGVudC9tZWRpYS9NYWtlZmlsZS5pbgpAQCAtODMsMTYgKzgzLDIwIEBA
IGVuZGlmCiBpZmRlZiBNT1pfV0FWRQogUEFSQUxMRUxfRElSUyArPSB3YXZlCiBlbmRpZgogCiBp
ZmRlZiBNT1pfV0VCTQogUEFSQUxMRUxfRElSUyArPSB3ZWJtCiBlbmRpZgogCitpZmRlZiBNT1pf
V0VCVlRUCitQQVJBTExFTF9ESVJTICs9IHdlYnZ0dAorZW5kaWYKKwogaWZkZWYgTU9aX0dTVFJF
QU1FUgogUEFSQUxMRUxfRElSUyArPSBnc3RyZWFtZXIKIGVuZGlmCiAKIGlmZGVmIE1PWl9EQVNI
CiBQQVJBTExFTF9ESVJTICs9IGRhc2gKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2NvbnRlbnQvbWVk
aWEvTWVkaWFEZWNvZGVyLmggYi9jb250ZW50L21lZGlhL01lZGlhRGVjb2Rlci5oCmluZGV4IDZm
MTIwYTMuLjRiMmQyMWMgMTAwNjQ0Ci0tLSBhL2NvbnRlbnQvbWVkaWEvTWVkaWFEZWNvZGVyLmgK
KysrIGIvY29udGVudC9tZWRpYS9NZWRpYURlY29kZXIuaApAQCAtMSwzMCArMSwzMCBAQAogLyog
LSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFz
aWMtb2Zmc2V0OiAyIC0qLSAqLwogLyogdmltOnNldCB0cz0yIHN3PTIgc3RzPTIgZXQgY2luZGVu
dDogKi8KIC8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBv
ZiB0aGUgTW96aWxsYSBQdWJsaWMKICAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRo
ZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKICAqIGZpbGUsIFlvdSBjYW4gb2J0
YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCiAvKgotRWFjaCB2aWRl
byBlbGVtZW50IGJhc2VkIG9uIE1lZGlhRGVjb2RlciBoYXMgYSBzdGF0ZSBtYWNoaW5lIHRvIG1h
bmFnZQorRWFjaCBtZWRpYSBlbGVtZW50IGJhc2VkIG9uIE1lZGlhRGVjb2RlciBoYXMgYSBzdGF0
ZSBtYWNoaW5lIHRvIG1hbmFnZQogaXRzIHBsYXkgc3RhdGUgYW5kIGtlZXAgdGhlIGN1cnJlbnQg
ZnJhbWUgdXAgdG8gZGF0ZS4gQWxsIHN0YXRlIG1hY2hpbmVzCiBzaGFyZSB0aW1lIGluIGEgc2lu
Z2xlIHNoYXJlZCB0aHJlYWQuIEVhY2ggZGVjb2RlciBhbHNvIGhhcyBvbmUgdGhyZWFkCiBkZWRp
Y2F0ZWQgdG8gZGVjb2RpbmcgYXVkaW8gYW5kIHZpZGVvIGRhdGEuIFRoaXMgdGhyZWFkIGlzIHNo
dXRkb3duIHdoZW4KIHBsYXliYWNrIGlzIHBhdXNlZC4gRWFjaCBkZWNvZGVyIGFsc28gaGFzIGEg
dGhyZWFkIHRvIHB1c2ggZGVjb2RlZCBhdWRpbwogdG8gdGhlIGhhcmR3YXJlLiBUaGlzIHRocmVh
ZCBpcyBub3QgY3JlYXRlZCB1bnRpbCBwbGF5YmFjayBzdGFydHMsIGJ1dAogY3VycmVudGx5IGlz
IG5vdCBkZXN0cm95ZWQgd2hlbiBwYXVzZWQsIG9ubHkgd2hlbiBwbGF5YmFjayBlbmRzLgogCiBU
aGUgZGVjb2RlciBvd25zIHRoZSByZXNvdXJjZXMgZm9yIGRvd25sb2FkaW5nIHRoZSBtZWRpYSBm
aWxlLCBhbmQgdGhlCiBoaWdoIGxldmVsIHN0YXRlLiBJdCBob2xkcyBhbiBvd25pbmcgcmVmZXJl
bmNlIHRvIHRoZSBzdGF0ZSBtYWNoaW5lIHRoYXQKIG93bnMgYWxsIHRoZSByZXNvdXJjZXMgcmVs
YXRlZCB0byBkZWNvZGluZyBkYXRhLCBhbmQgbWFuYWdlcyB0aGUgbG93IGxldmVsCiBkZWNvZGlu
ZyBvcGVyYXRpb25zIGFuZCBBL1Ygc3luYy4KIAogRWFjaCBzdGF0ZSBtYWNoaW5lIHJ1bnMgb24g
dGhlIHNoYXJlZCBzdGF0ZSBtYWNoaW5lIHRocmVhZC4gRXZlcnkgdGltZSBzb21lCiBhY3Rpb24g
aXMgcmVxdWlyZWQgZm9yIGEgc3RhdGUgbWFjaGluZSwgaXQgaXMgc2NoZWR1bGVkIHRvIHJ1biBv
biB0aGUgc2hhcmVkCi10aGUgc3RhdGUgbWFjaGluZSB0aHJlYWQuIFRoZSBzdGF0ZSBtYWNoaW5l
IHJ1bnMgb25lICJjeWNsZSIgb24gdGhlIHN0YXRlCitzdGF0ZSBtYWNoaW5lIHRocmVhZC4gVGhl
IHN0YXRlIG1hY2hpbmUgcnVucyBvbmUgImN5Y2xlIiBvbiB0aGUgc3RhdGUKIG1hY2hpbmUgdGhy
ZWFkLCBhbmQgdGhlbiByZXR1cm5zLiBJZiBuZWNlc3NhcnksIGl0IHdpbGwgc2NoZWR1bGUgaXRz
ZWxmIHRvCiBydW4gYWdhaW4gaW4gZnV0dXJlLiBXaGlsZSBydW5uaW5nIHRoaXMgY3ljbGUsIGl0
IG11c3Qgbm90IGJsb2NrIHRoZQogdGhyZWFkLCBhcyBvdGhlciBzdGF0ZSBtYWNoaW5lcycgZXZl
bnRzIG1heSBuZWVkIHRvIHJ1bi4gU3RhdGUgc2hhcmVkCiBiZXR3ZWVuIGEgc3RhdGUgbWFjaGlu
ZSdzIHRocmVhZHMgaXMgc3luY2hyb25pc2VkIHZpYSB0aGUgbW9uaXRvciBvd25lZAogYnkgaXRz
IE1lZGlhRGVjb2RlciBvYmplY3QuCiAKIFRoZSBNYWluIHRocmVhZCBjb250cm9scyB0aGUgZGVj
b2RlIHN0YXRlIG1hY2hpbmUgYnkgc2V0dGluZyB0aGUgdmFsdWUKIG9mIGEgbVBsYXlTdGF0ZSB2
YXJpYWJsZSBhbmQgbm90aWZ5aW5nIG9uIHRoZSBtb25pdG9yIGJhc2VkIG9uIHRoZQpAQCAtMTMz
LDE4ICsxMzMsMTggQEAgcGxheWVyIExPQURJTkcgICBkZWNvZGVyIERFQ09ESU5HX01FVEFEQVRB
CiBwbGF5ZXIgUExBWUlORyAgIGRlY29kZXIgREVDT0RJTkcsIEJVRkZFUklORywgU0VFS0lORywg
Q09NUExFVEVECiBwbGF5ZXIgUEFVU0VEICAgIGRlY29kZXIgREVDT0RJTkcsIEJVRkZFUklORywg
U0VFS0lORywgQ09NUExFVEVECiBwbGF5ZXIgU0VFS0lORyAgIGRlY29kZXIgU0VFS0lORwogcGxh
eWVyIENPTVBMRVRFRCBkZWNvZGVyIFNIVVRET1dOCiBwbGF5ZXIgU0hVVERPV04gIGRlY29kZXIg
U0hVVERPV04KIAogVGhlIGdlbmVyYWwgc2VxdWVuY2Ugb2YgZXZlbnRzIGlzOgogCi0xKSBUaGUg
dmlkZW8gZWxlbWVudCBjYWxscyBMb2FkIG9uIE1lZGlhRGVjb2Rlci4gVGhpcyBjcmVhdGVzIHRo
ZQotICAgc3RhdGUgbWFjaGluZSBhbmQgc3RhcnRzIHRoZSBjaGFubmVsIGZvciBkb3dubG9hZGlu
ZyB0aGUKKzEpIFRoZSBtZWRpYSBlbGVtZW50IGNhbGxzIExvYWQgb24gbnNNZWRpYURlY29kZXIu
IFRoaXMgY3JlYXRlcworICAgdGhlIHN0YXRlIG1hY2hpbmUgYW5kIHN0YXJ0cyB0aGUgY2hhbm5l
bCBmb3IgZG93bmxvYWRpbmcgdGhlCiAgICBmaWxlLiBJdCBpbnN0YW50aWF0ZXMgYW5kIHNjaGVk
dWxlcyB0aGUgTWVkaWFEZWNvZGVyU3RhdGVNYWNoaW5lLiBUaGUKICAgIGhpZ2ggbGV2ZWwgTE9B
RElORyBzdGF0ZSBpcyBlbnRlcmVkLCB3aGljaCByZXN1bHRzIGluIHRoZSBkZWNvZGUKICAgIHRo
cmVhZCBiZWluZyBjcmVhdGVkIGFuZCBzdGFydGluZyB0byBkZWNvZGUgbWV0YWRhdGEuIFRoZXNl
IGFyZQogICAgdGhlIGhlYWRlcnMgdGhhdCBnaXZlIHRoZSB2aWRlbyBzaXplLCBmcmFtZXJhdGUs
IGV0Yy4gTG9hZCgpIHJldHVybnMKICAgIGltbWVkaWF0ZWx5IHRvIHRoZSBjYWxsaW5nIHZpZGVv
IGVsZW1lbnQuCiAKIDIpIFdoZW4gdGhlIG1ldGFkYXRhIGhhcyBiZWVuIGxvYWRlZCBieSB0aGUg
ZGVjb2RlIHRocmVhZCwgdGhlIHN0YXRlIG1hY2hpbmUKICAgIHdpbGwgY2FsbCBhIG1ldGhvZCBv
biB0aGUgdmlkZW8gZWxlbWVudCBvYmplY3QgdG8gaW5mb3JtIGl0IHRoYXQgdGhpcwpkaWZmIC0t
Z2l0IGEvY29udGVudC9tZWRpYS93ZWJ2dHQvTWFrZWZpbGUuaW4gYi9jb250ZW50L21lZGlhL3dl
YnZ0dC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzVi
OGY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9tZWRpYS93ZWJ2dHQvTWFrZWZpbGUuaW4K
QEAgLTAsMCArMSwzMyBAQAorIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0
aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBj
b3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKyMgZmlsZSwgWW91
IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KKworREVQVEgJ
CT0gLi4vLi4vLi4KK3RvcHNyY2RpciAgICAgICA9IEB0b3Bfc3JjZGlyQAorc3JjZGlyICAgICAg
ICAgID0gQHNyY2RpckAKK1ZQQVRIICAgICAgICAgICA9IEBzcmNkaXJACisKK2luY2x1ZGUgJChE
RVBUSCkvY29uZmlnL2F1dG9jb25mLm1rCisKK01PRFVMRQkJPSBjb250ZW50CitMSUJSQVJZX05B
TUUJPSBna2Nvbm53ZWJ2dHRfcworTElCWFVMX0xJQlJBUlkgID0gMQorCitGT1JDRV9TVEFUSUNf
TElCID0gMQorCitFWFBPUlRTICs9IFwKKyAgbnNXZWJWVFREZWNvZGVyLmggXAorICBuc1dlYlZU
VFJlYWRlci5oIFwKKyAgJChOVUxMKQorCitDUFBTUkNTID0gXAorICBuc1dlYlZUVERlY29kZXIu
Y3BwIFwKKyAgbnNXZWJWVFRSZWFkZXIuaCBcCisgICQoTlVMTCkKKworaW5jbHVkZSAkKHRvcHNy
Y2RpcikvY29uZmlnL3J1bGVzLm1rCisKK0lOQ0xVREVTICs9IFwKKyAgLUkkKHNyY2RpcikvLi4v
Li4vYmFzZS9zcmMgXAorICAtSSQoc3JjZGlyKS8uLi8uLi9odG1sL2NvbnRlbnQvc3JjIFwKKyAg
JChOVUxMKQpkaWZmIC0tZ2l0IGEvY29udGVudC9tZWRpYS93ZWJ2dHQvbnNXZWJWVFREZWNvZGVy
LmNwcCBiL2NvbnRlbnQvbWVkaWEvd2VidnR0L25zV2ViVlRURGVjb2Rlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4YjM1YQotLS0gL2Rldi9udWxsCisrKyBiL2Nv
bnRlbnQvbWVkaWEvd2VidnR0L25zV2ViVlRURGVjb2Rlci5jcHAKQEAgLTAsMCArMSwxNCBAQAor
LyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMt
YmFzaWMtb2Zmc2V0OiAyIC0qLSAqLworLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1Ympl
Y3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICogTGljZW5zZSwgdi4gMi4w
LiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworICog
ZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4g
Ki8KKworI2luY2x1ZGUgIk1lZGlhRGVjb2RlclN0YXRlTWFjaGluZS5oIgorI2luY2x1ZGUgIm5z
V2ViVlRURGVjb2Rlci5oIgorI2luY2x1ZGUgIm5zV2ViVlRUUmVhZGVyLmgiCisKK21vemlsbGE6
Ok1lZGlhRGVjb2RlclN0YXRlTWFjaGluZSoKK25zV2ViVlRURGVjb2Rlcjo6Q3JlYXRlU3RhdGVN
YWNoaW5lKCkKK3sKKyAgcmV0dXJuIG5ldyBtb3ppbGxhOjpNZWRpYURlY29kZXJTdGF0ZU1hY2hp
bmUodGhpcywgbmV3IG5zV2ViVlRUUmVhZGVyKHRoaXMpKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRl
bnQvbWVkaWEvd2VidnR0L25zV2ViVlRURGVjb2Rlci5oIGIvY29udGVudC9tZWRpYS93ZWJ2dHQv
bnNXZWJWVFREZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJk
MDIwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRlbnQvbWVkaWEvd2VidnR0L25zV2ViVlRURGVj
b2Rlci5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsg
aW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8qIFRoaXMg
U291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQ
dWJsaWMKKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBk
aXN0cmlidXRlZCB3aXRoIHRoaXMKKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRw
Oi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCisKKyNpZiAhZGVmaW5lZChuc1dlYlZUVERlY29k
ZXJfaF8pCisjZGVmaW5lIG5zV2ViVlRURGVjb2Rlcl9oXworCisjaW5jbHVkZSAiTWVkaWFEZWNv
ZGVyLmgiCisjaW5jbHVkZSAiTWVkaWFEZWNvZGVyU3RhdGVNYWNoaW5lLmgiCisKK2NsYXNzIG5z
V2ViVlRURGVjb2RlciA6IHB1YmxpYyBtb3ppbGxhOjpNZWRpYURlY29kZXIKK3sKK3B1YmxpYzoK
KyAgdmlydHVhbCBtb3ppbGxhOjpNZWRpYURlY29kZXIqIENsb25lKCkgeyByZXR1cm4gbmV3IG5z
V2ViVlRURGVjb2RlcigpOyB9CisgIHZpcnR1YWwgbW96aWxsYTo6TWVkaWFEZWNvZGVyU3RhdGVN
YWNoaW5lKiBDcmVhdGVTdGF0ZU1hY2hpbmUoKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
Y29udGVudC9tZWRpYS93ZWJ2dHQvbnNXZWJWVFRSZWFkZXIuY3BwIGIvY29udGVudC9tZWRpYS93
ZWJ2dHQvbnNXZWJWVFRSZWFkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjEzYjY5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250ZW50L21lZGlhL3dlYnZ0dC9uc1dl
YlZUVFJlYWRlci5jcHAKQEAgLTAsMCArMSwzMyBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdp
ZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLwor
LyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBN
b3ppbGxhIFB1YmxpYworICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3
YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25l
IGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKworI2lmICFkZWZpbmVkKG5zV2Vi
VlRUUmVhZGVyX2hfKQorI2RlZmluZSBuc1dlYlZUVFJlYWRlcl9oXworCisjaW5jbHVkZSAibnNC
dWlsdGluRGVjb2RlclJlYWRlci5oIgorI2luY2x1ZGUgIm5zV2ViVlRUUmVhZGVyLmgiCisKKyNp
bmNsdWRlICJ3ZWJ2dHQvd2VidnR0LmgiCisKK25zV2ViVlRUUmVhZGVyOjpuc1dlYlZUVFJlYWRl
cihuc0J1aWxkaW5EZWNvZGVyKiBhRGVjb2RlcikKKyAgOiBuc0J1aWx0aW5EZWNvZGVyUmVhZGVy
KGFEZWNvZGVyKQoreworICBNT1pfQ09VTlRfQ1RPUihuc1dlYlZUVFJlYWRlcik7Cit9CisKK25z
V2ViVlRUUmVhZGVyOjp+bnNXZWJWVFRSZWFkZXIoKQoreworICBNT1pfQ09VTlRfRFRPUihuc1dl
Yk1SZWFkZXIpOworfQorCituc3Jlc3VsdAorbnNXZWJWVFRSZWFkZXI6OlJlYWRNZXRhZGF0YSht
b3ppbGxhOjpWaWRlb0luZm8qIGFJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
b3ppbGxhOjpNZXRhZGF0YVRhZ3MqKiBhVGFncykKK3sKKyAgLy8gVE9ETzoKKyAgcmV0dXJuIE5T
X0VSUk9SX05PVF9JTVBMRU1FTlRFRDsKK30KKworI2VuZGlmIC8qIG5zV2ViVlRUUmVhZGVyX2hf
ICovCmRpZmYgLS1naXQgYS9jb250ZW50L21lZGlhL3dlYnZ0dC9uc1dlYlZUVFJlYWRlci5oIGIv
Y29udGVudC9tZWRpYS93ZWJ2dHQvbnNXZWJWVFRSZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kNDI4YTRiCi0tLSAvZGV2L251bGwKKysrIGIvY29udGVudC9tZWRp
YS93ZWJ2dHQvbnNXZWJWVFRSZWFkZXIuaApAQCAtMCwwICsxLDQwIEBACisvKiAtKi0gTW9kZTog
QysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6
IDIgLSotICovCisvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVy
bXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBv
ZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisgKiBmaWxlLCBZb3UgY2Fu
IG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLworCisjaWYgIWRl
ZmluZWQobnNXZWJWVFRSZWFkZXJfaF8pCisjZGVmaW5lIG5zV2ViVlRUUmVhZGVyX2hfCisKKyNp
bmNsdWRlICJNZWRpYURlY29kZXJSZWFkZXIuaCIKKyNpbmNsdWRlICJNZWRpYURlY29kZXIuaCIK
KworY2xhc3MgbnNXZWJWVFRSZWFkZXIgOiBwdWJsaWMgbW96aWxsYTo6TWVkaWFEZWNvZGVyUmVh
ZGVyCit7CitwdWJsaWM6CisgIG5zV2ViVlRUUmVhZGVyKG1vemlsbGE6Ok1lZGlhRGVjb2Rlciog
YURlY29kZXIpOworICB+bnNXZWJWVFRSZWFkZXIoKTsKKworICB2aXJ0dWFsIG5zcmVzdWx0IElu
aXQobW96aWxsYTo6TWVkaWFEZWNvZGVyUmVhZGVyKiBhQ2xvbmVEb25vcik7CisgIHZpcnR1YWwg
bnNyZXN1bHQgUmVzZXREZWNvZGUoKTsKKyAgdmlydHVhbCBib29sIERlY29kZUF1ZGlvRGF0YSgp
OworICB2aXJ0dWFsIGJvb2wgRGVjb2RlVmlkZW9GcmFtZShib29sICZhS2V5ZnJhbWVTa2lwLCBQ
UkludDY0IGFUaW1lVGhyZXNob2xkKTsKKworICB2aXJ0dWFsIGJvb2wgSGFzQXVkaW8oKQorICB7
CisgICAgTlNfQVNTRVJUSU9OKG1EZWNvZGVyLT5PbkRlY29kZVRocmVhZCgpLCAiU2hvdWxkIGJl
IG9uIGRlY29kZSB0aHJlYWQuIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgdmlydHVh
bCBib29sIEhhc1ZpZGVvKCkKKyAgeworICAgIE5TX0FTU0VSVElPTihtRGVjb2Rlci0+T25EZWNv
ZGVUaHJlYWQoKSwgIlNob3VsZCBiZSBvbiBkZWNvZGUgdGhyZWFkLiIpOworICAgIHJldHVybiBm
YWxzZTsKKyAgfQorCisgIHZpcnR1YWwgbnNyZXN1bHQgUmVhZE1ldGFkYXRhKG1vemlsbGE6OlZp
ZGVvSW5mbyogYUluZm8sIG1vemlsbGE6Ok1ldGFkYXRhVGFncyoqIGFUYWdzKTsKKyAgdmlydHVh
bCBuc3Jlc3VsdCBTZWVrKFBSSW50NjQgYVRpbWUsIFBSSW50NjQgYVN0YXJ0VGltZSwgUFJJbnQ2
NCBhRW5kVGltZSwgUFJJbnQ2NCBhQ3VycmVudFRpbWUpOworICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dEJ1ZmZlcmVkKG5zVGltZVJhbmdlcyogYUJ1ZmZlcmVkLCBQUkludDY0IGFTdGFydFRpbWUpOwor
fTsKKworI2VuZGlmIC8qIG5zV2ViVlRUUmVhZGVyX2hfICovCmRpZmYgLS1naXQgYS9kb20vbWVk
aWEvTWFrZWZpbGUuaW4gYi9kb20vbWVkaWEvTWFrZWZpbGUuaW4KaW5kZXggM2QxNjIyMC4uMzdj
NGJlMCAxMDA2NDQKLS0tIGEvZG9tL21lZGlhL01ha2VmaWxlLmluCisrKyBiL2RvbS9tZWRpYS9N
YWtlZmlsZS5pbgpAQCAtMjgsMjYgKzI4LDQ0IEBAIEVYVFJBX0NPTVBPTkVOVFMgPSBcCiAKIFhQ
SURMU1JDUyA9IFwKICAgbnNJRE9NTWVkaWFTdHJlYW0uaWRsIFwKICAgbnNJRE9NUlRDUGVlckNv
bm5lY3Rpb24uaWRsIFwKICAgbnNJRE9NTmF2aWdhdG9yVXNlck1lZGlhLmlkbCBcCiAgIG5zSU1l
ZGlhTWFuYWdlci5pZGwgXAogICAkKE5VTEwpCiAKLUVYUE9SVFNfTkFNRVNQQUNFID0gbW96aWxs
YQorRVhQT1JUU19OQU1FU1BBQ0VTID0gXAorCW1vemlsbGEgXAorCSQoTlVMTCkKIAogRVhQT1JU
U19tb3ppbGxhID0gXAogICBNZWRpYU1hbmFnZXIuaCBcCiAgICQoTlVMTCkKIAogQ1BQU1JDUyA9
IFwKICAgTWVkaWFNYW5hZ2VyLmNwcCBcCiAgICQoTlVMTCkKIAoraWZkZWYgTU9aX1dFQlZUVAor
RVhQT1JUU19OQU1FU1BBQ0VTICs9IFwKKwltb3ppbGxhL2RvbSBcCisJJChOVUxMKQorRVhQT1JU
U19tb3ppbGxhL2RvbSA9IFwKKyAgVGV4dFRyYWNrLmggXAorICBUZXh0VHJhY2tDdWUuaCBcCisg
IFRleHRUcmFja0N1ZUxpc3QuaCBcCisgICQoTlVMTCkKK0NQUFNSQ1MgKz0gXAorICBUZXh0VHJh
Y2suY3BwIFwKKyAgVGV4dFRyYWNrQ3VlLmNwcCBcCisgIFRleHRUcmFja0N1ZUxpc3QuY3BwIFwK
KyAgJChOVUxMKQorZW5kaWYKKwogaWZkZWYgTU9aX1dFQlJUQwogTE9DQUxfSU5DTFVERVMgKz0g
XAogICAtSSQodG9wc3JjZGlyKS9tZWRpYS93ZWJydGMvdHJ1bmsvc3JjIFwKICAgLUkkKHRvcHNy
Y2RpcikvbWVkaWEvd2VicnRjL3NpZ25hbGluZy9zcmMvY29tbW9uIFwKICAgJChOVUxMKQogRElS
UyArPSBicmlkZ2UKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2RvbS9tZWRpYS9UZXh0VHJhY2suY3Bw
IGIvZG9tL21lZGlhL1RleHRUcmFjay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTZlOTY0OQotLS0gL2Rldi9udWxsCisrKyBiL2RvbS9tZWRpYS9UZXh0VHJhY2suY3Bw
CkBAIC0wLDAgKzEsNTIgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50
LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8qIHZpbTpzZXQgdHM9
MiBzdz0yIGV0IHR3PTc4OiAqLworLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3Qg
dG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICogTGljZW5zZSwgdi4gMi4wLiBJ
ZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLAor
ICogWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8K
KworI2luY2x1ZGUgIlRleHRUcmFjay5oIgorI2luY2x1ZGUgIm1vemlsbGEvZG9tL1RleHRUcmFj
a0JpbmRpbmcuaCIKKworbmFtZXNwYWNlIG1vemlsbGEgeworbmFtZXNwYWNlIGRvbSB7CisKK05T
X0lNUExfQ1lDTEVfQ09MTEVDVElPTl9VTkxJTktfQkVHSU4oVGV4dFRyYWNrKQorICBOU19JTVBM
X0NZQ0xFX0NPTExFQ1RJT05fVU5MSU5LX1BSRVNFUlZFRF9XUkFQUEVSCitOU19JTVBMX0NZQ0xF
X0NPTExFQ1RJT05fVU5MSU5LX0VORAorCitOU19JTVBMX0NZQ0xFX0NPTExFQ1RJT05fVFJBVkVS
U0VfQkVHSU4oVGV4dFRyYWNrKQorICBOU19JTVBMX0NZQ0xFX0NPTExFQ1RJT05fVFJBVkVSU0Uo
bVBhcmVudCkKKyAgTlNfSU1QTF9DWUNMRV9DT0xMRUNUSU9OX1RSQVZFUlNFX1NDUklQVF9PQkpF
Q1RTCitOU19JTVBMX0NZQ0xFX0NPTExFQ1RJT05fVFJBVkVSU0VfRU5ECisKK05TX0lNUExfQ1lD
TEVfQ09MTEVDVElPTl9UUkFDRV9CRUdJTihUZXh0VHJhY2spCisgIE5TX0lNUExfQ1lDTEVfQ09M
TEVDVElPTl9UUkFDRV9QUkVTRVJWRURfV1JBUFBFUgorTlNfSU1QTF9DWUNMRV9DT0xMRUNUSU9O
X1RSQUNFX0VORAorCitOU19JTVBMX0NZQ0xFX0NPTExFQ1RJTkdfQUREUkVGKFRleHRUcmFjaykK
K05TX0lNUExfQ1lDTEVfQ09MTEVDVElOR19SRUxFQVNFKFRleHRUcmFjaykKKworTlNfSU5URVJG
QUNFX01BUF9CRUdJTl9DWUNMRV9DT0xMRUNUSU9OKFRleHRUcmFjaykKKyAgTlNfV1JBUFBFUkNB
Q0hFX0lOVEVSRkFDRV9NQVBfRU5UUlkKKyAgTlNfSU5URVJGQUNFX01BUF9FTlRSWShuc0lTdXBw
b3J0cykKK05TX0lOVEVSRkFDRV9NQVBfRU5ECisKK1RleHRUcmFjazo6VGV4dFRyYWNrKG5zSVN1
cHBvcnRzICphUGFyZW50KSA6IG1QYXJlbnQoYVBhcmVudCkKK3sKKyAgU2V0SXNET01CaW5kaW5n
KCk7Cit9CisKK1RleHRUcmFjazo6flRleHRUcmFjaygpCit7CisgIG1QYXJlbnQgPSBudWxscHRy
OworfQorCitKU09iamVjdCoKK1RleHRUcmFjazo6V3JhcE9iamVjdChKU0NvbnRleHQqIGFDeCwg
SlNPYmplY3QqIGFTY29wZSwKKyAgICAgICAgICAgICAgICAgICAgICBib29sKiBhVHJpZWRUb1dy
YXApCit7CisgIHJldHVybiBUZXh0VHJhY2tCaW5kaW5nOjpXcmFwKGFDeCwgYVNjb3BlLCB0aGlz
LCBhVHJpZWRUb1dyYXApOworfQorCit9IC8vIG5hbWVzcGFjZSBkb20KK30gLy8gbmFtZXNwYWNl
IG1vemlsbGEKZGlmZiAtLWdpdCBhL2RvbS9tZWRpYS9UZXh0VHJhY2suaCBiL2RvbS9tZWRpYS9U
ZXh0VHJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDI2ODdhCi0t
LSAvZGV2L251bGwKKysrIGIvZG9tL21lZGlhL1RleHRUcmFjay5oCkBAIC0wLDAgKzEsMTAzIEBA
CisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsg
Yy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisvKiB2aW06c2V0IHRzPTIgc3c9MiBldCB0dz03ODog
Ki8KKy8qIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0
aGUgTW96aWxsYSBQdWJsaWMKKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBN
UEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwKKyAqIFlvdSBjYW4gb2J0YWlu
IG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCisKKyNpZm5kZWYgbW96aWxs
YV9kb21fVGV4dFRyYWNrX2gKKyNkZWZpbmUgbW96aWxsYV9kb21fVGV4dFRyYWNrX2gKKworLy8j
aW5jbHVkZSAibW96aWxsYS9kb20vVGV4dFRyYWNrQmluZGluZy5oIgorI2luY2x1ZGUgIlRleHRU
cmFja0N1ZS5oIgorI2luY2x1ZGUgIlRleHRUcmFja0N1ZUxpc3QuaCIKKyNpbmNsdWRlICJuc1dy
YXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIm5zQ3ljbGVDb2xsZWN0aW9uUGFydGljaXBhbnQuaCIK
KyNpbmNsdWRlICJuc0RPTUV2ZW50VGFyZ2V0SGVscGVyLmgiCisjaW5jbHVkZSAibnNTdHJpbmcu
aCIKKyNpbmNsdWRlICJuc0NPTVB0ci5oIgorCituYW1lc3BhY2UgbW96aWxsYSB7CituYW1lc3Bh
Y2UgZG9tIHsKKworY2xhc3MgVGV4dFRyYWNrQ3VlOworY2xhc3MgVGV4dFRyYWNrQ3VlTGlzdDsK
KworY2xhc3MgVGV4dFRyYWNrIE1PWl9GSU5BTCA6IHB1YmxpYyBuc0RPTUV2ZW50VGFyZ2V0SGVs
cGVyCit7CitwdWJsaWM6CisgIE5TX0RFQ0xfSVNVUFBPUlRTX0lOSEVSSVRFRAorICBOU19ERUNM
X0NZQ0xFX0NPTExFQ1RJT05fU0NSSVBUX0hPTERFUl9DTEFTUyhUZXh0VHJhY2spCisgIE5TX0ZP
UldBUkRfTlNJRE9NRVZFTlRUQVJHRVQobnNET01FdmVudFRhcmdldEhlbHBlcjo6KQorCisgIFRl
eHRUcmFjayhuc0lTdXBwb3J0cyAqYVBhcmVudCk7CisgIH5UZXh0VHJhY2soKTsKKworICB2aXJ0
dWFsIEpTT2JqZWN0KiBXcmFwT2JqZWN0KEpTQ29udGV4dCogYUN4LCBKU09iamVjdCogYVNjb3Bl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGFUcmllZFRvV3JhcCk7CisK
KyAgbnNJU3VwcG9ydHMqIEdldFBhcmVudE9iamVjdCgpCisgIHsKKyAgICByZXR1cm4gbVBhcmVu
dDsKKyAgfQorCisgIHZvaWQgR2V0S2luZChuc0FTdHJpbmcmIGFLaW5kKQorICB7CisgICAgYUtp
bmQgPSBtS2luZDsKKyAgfQorCisgIHZvaWQgR2V0TGFiZWwobnNBU3RyaW5nJiBhTGFiZWwpCisg
IHsKKyAgICBhTGFiZWwgPSBtTGFiZWw7CisgIH0KKworICB2b2lkIEdldExhbmd1YWdlKG5zQVN0
cmluZyYgYUxhbmd1YWdlKQorICB7CisgICAgYUxhbmd1YWdlID0gbUxhbmd1YWdlOworICB9CisK
KyAgdm9pZCBHZXRJbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKG5zQVN0cmluZyYgYVR5
cGUpCisgIHsKKyAgICBhVHlwZSA9IG1UeXBlOworICB9CisKKyAgVGV4dFRyYWNrQ3VlTGlzdCoK
KyAgR2V0Q3VlcygpCisgIHsKKyAgICAvLyBYWFhodW1waDogdG9kbworICAgIHJldHVybiBudWxs
cHRyOworICB9CisKKyAgVGV4dFRyYWNrQ3VlTGlzdCoKKyAgR2V0QWN0aXZlQ3VlcygpCisgIHsK
KyAgICAvLyBYWFhodW1waDogdG9kbworICAgIHJldHVybiBudWxscHRyOworICB9CisKKyAgdm9p
ZCBBZGRDdWUoVGV4dFRyYWNrQ3VlJiBjdWUpCisgIHsKKyAgICAvLyBYWFhodW1waDogdG9kbwor
ICB9CisKKyAgdm9pZCBSZW1vdmVDdWUoVGV4dFRyYWNrQ3VlJiBjdWUpCisgIHsKKyAgICAvLyBY
WFhodW1waDogdG9kbworICB9CisKKyAgSU1QTF9FVkVOVF9IQU5ETEVSKGN1ZWNoYW5nZSkKKwor
cHJpdmF0ZToKKyAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IG1QYXJlbnQ7CisKKyAgbnNTdHJpbmcg
bUtpbmQ7CisgIG5zU3RyaW5nIG1MYWJlbDsKKyAgbnNTdHJpbmcgbUxhbmd1YWdlOworICBuc1N0
cmluZyBtVHlwZTsKKworICAvLyBYWFhodW1waDogbmVlZCBsaXN0IG9mIGN1ZXMsIGFjdGl2ZSBj
dWVzLi4uCit9OworCit9IC8vIG5hbWVzcGFjZSBkb20KK30gLy8gbmFtZXNwYWNlIG1vemlsbGEK
KworI2VuZGlmIC8vIG1vemlsbGFfZG9tX1RleHRUcmFja19oCmRpZmYgLS1naXQgYS9kb20vbWVk
aWEvVGV4dFRyYWNrQ3VlLmNwcCBiL2RvbS9tZWRpYS9UZXh0VHJhY2tDdWUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZGFlNzcKLS0tIC9kZXYvbnVsbAorKysgYi9k
b20vbWVkaWEvVGV4dFRyYWNrQ3VlLmNwcApAQCAtMCwwICsxLDYzIEBACisvKiAtKi0gTW9kZTog
QysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6
IDIgLSotICovCisvKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVy
bXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBv
ZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisgKiBmaWxlLCBZb3UgY2Fu
IG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLworCisjaW5jbHVk
ZSAiVGV4dFRyYWNrQ3VlLmgiCisjaW5jbHVkZSAibW96aWxsYS9kb20vVGV4dFRyYWNrQ3VlQmlu
ZGluZy5oIgorCituYW1lc3BhY2UgbW96aWxsYSB7CituYW1lc3BhY2UgZG9tIHsKKworTlNfSU1Q
TF9DWUNMRV9DT0xMRUNUSU9OX1VOTElOS19CRUdJTihUZXh0VHJhY2tDdWUpCisgIE5TX0lNUExf
Q1lDTEVfQ09MTEVDVElPTl9VTkxJTktfUFJFU0VSVkVEX1dSQVBQRVIKK05TX0lNUExfQ1lDTEVf
Q09MTEVDVElPTl9VTkxJTktfRU5ECisKK05TX0lNUExfQ1lDTEVfQ09MTEVDVElPTl9UUkFWRVJT
RV9CRUdJTihUZXh0VHJhY2tDdWUpCisgIE5TX0lNUExfQ1lDTEVfQ09MTEVDVElPTl9UUkFWRVJT
RShtR2xvYmFsKQorICBOU19JTVBMX0NZQ0xFX0NPTExFQ1RJT05fVFJBVkVSU0VfU0NSSVBUX09C
SkVDVFMKK05TX0lNUExfQ1lDTEVfQ09MTEVDVElPTl9UUkFWRVJTRV9FTkQKKworTlNfSU1QTF9D
WUNMRV9DT0xMRUNUSU9OX1RSQUNFX0JFR0lOKFRleHRUcmFja0N1ZSkKKyAgTlNfSU1QTF9DWUNM
RV9DT0xMRUNUSU9OX1RSQUNFX1BSRVNFUlZFRF9XUkFQUEVSCitOU19JTVBMX0NZQ0xFX0NPTExF
Q1RJT05fVFJBQ0VfRU5ECisKK05TX0lNUExfQ1lDTEVfQ09MTEVDVElOR19BRERSRUYoVGV4dFRy
YWNrQ3VlKQorTlNfSU1QTF9DWUNMRV9DT0xMRUNUSU5HX1JFTEVBU0UoVGV4dFRyYWNrQ3VlKQor
CitOU19JTlRFUkZBQ0VfTUFQX0JFR0lOX0NZQ0xFX0NPTExFQ1RJT04oVGV4dFRyYWNrQ3VlKQor
ICBOU19XUkFQUEVSQ0FDSEVfSU5URVJGQUNFX01BUF9FTlRSWQorICBOU19JTlRFUkZBQ0VfTUFQ
X0VOVFJZKG5zSVN1cHBvcnRzKQorTlNfSU5URVJGQUNFX01BUF9FTkQKKworVGV4dFRyYWNrQ3Vl
OjpUZXh0VHJhY2tDdWUobnNJU3VwcG9ydHMgKmFHbG9iYWwpIDogbUdsb2JhbChhR2xvYmFsKQor
eworICBNT1pfQVNTRVJUKGFHbG9iYWwpOworICBTZXRJc0RPTUJpbmRpbmcoKTsKK30KKworVGV4
dFRyYWNrQ3VlOjp+VGV4dFRyYWNrQ3VlKCkKK3sKKyAgbUdsb2JhbCA9IG51bGxwdHI7CisgIG1U
cmFjayA9IG51bGxwdHI7Cit9CisKK0pTT2JqZWN0KgorVGV4dFRyYWNrQ3VlOjpXcmFwT2JqZWN0
KEpTQ29udGV4dCogYUN4LCBKU09iamVjdCogYVNjb3BlLAorICAgICAgICAgICAgICAgICAgICAg
IGJvb2wqIGFUcmllZFRvV3JhcCkKK3sKKyAgcmV0dXJuIFRleHRUcmFja0N1ZUJpbmRpbmc6Oldy
YXAoYUN4LCBhU2NvcGUsIHRoaXMsIGFUcmllZFRvV3JhcCk7Cit9CisKK3ZvaWQKK1RleHRUcmFj
a0N1ZTo6SW5pdChjb25zdCBkb3VibGUgYVN0YXJ0VGltZSwgY29uc3QgZG91YmxlIGFFbmRUaW1l
LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVRleHQsIEVycm9yUmVzdWx0
JiBhUnYpCit7CisgIC8vIFhYWGh1bXBoOiB2YWxpZGF0aW9uLi4uCisgIG1TdGFydFRpbWUgPSBh
U3RhcnRUaW1lOworICBtRW5kVGltZSA9IGFFbmRUaW1lOworICBtVGV4dCA9IGFUZXh0OworfQor
Cit9IC8vIG5hbWVzcGFjZSBkb20KK30gLy8gbmFtZXNwYWNlIG1vemlsbGEKZGlmZiAtLWdpdCBh
L2RvbS9tZWRpYS9UZXh0VHJhY2tDdWUuaCBiL2RvbS9tZWRpYS9UZXh0VHJhY2tDdWUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTVlMmMyCi0tLSAvZGV2L251bGwKKysr
IGIvZG9tL21lZGlhL1RleHRUcmFja0N1ZS5oCkBAIC0wLDAgKzEsMTk3IEBACisvKiAtKi0gTW9k
ZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZz
ZXQ6IDIgLSotICovCisvKiB2aW06c2V0IHRzPTIgc3c9MiBldCB0dz03ODogKi8KKy8qIFRoaXMg
U291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQ
dWJsaWMKKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBk
aXN0cmlidXRlZCB3aXRoIHRoaXMgZmlsZSwKKyAqIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRw
Oi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCisKKyNpZm5kZWYgbW96aWxsYV9kb21fVGV4dFRy
YWNrQ3VlX2gKKyNkZWZpbmUgbW96aWxsYV9kb21fVGV4dFRyYWNrQ3VlX2gKKworI2luY2x1ZGUg
IlRleHRUcmFjay5oIgorI2luY2x1ZGUgIm5zQ3ljbGVDb2xsZWN0aW9uUGFydGljaXBhbnQuaCIK
KyNpbmNsdWRlICJtb3ppbGxhL2RvbS9Eb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAibnNE
T01FdmVudFRhcmdldEhlbHBlci5oIgorCituYW1lc3BhY2UgbW96aWxsYSB7CituYW1lc3BhY2Ug
ZG9tIHsKKworY2xhc3MgVGV4dFRyYWNrOworCitjbGFzcyBUZXh0VHJhY2tDdWUgTU9aX0ZJTkFM
IDogcHVibGljIG5zRE9NRXZlbnRUYXJnZXRIZWxwZXIKK3sKK3B1YmxpYzoKKyAgTlNfREVDTF9J
U1VQUE9SVFNfSU5IRVJJVEVECisgIE5TX0RFQ0xfQ1lDTEVfQ09MTEVDVElPTl9TQ1JJUFRfSE9M
REVSX0NMQVNTKFRleHRUcmFja0N1ZSkKKyAgTlNfRk9SV0FSRF9OU0lET01FVkVOVFRBUkdFVChu
c0RPTUV2ZW50VGFyZ2V0SGVscGVyOjopCisKKyAgLy8gVGV4dFRyYWNrQ3VlIFdlYklETAorICBz
dGF0aWMgYWxyZWFkeV9BZGRSZWZlZDxUZXh0VHJhY2tDdWU+CisgIENvbnN0cnVjdG9yKG5zSVN1
cHBvcnRzKiBhR2xvYmFsLAorICAgICAgICAgICAgICBjb25zdCBkb3VibGUgYVN0YXJ0VGltZSwK
KyAgICAgICAgICAgICAgY29uc3QgZG91YmxlIGFFbmRUaW1lLAorICAgICAgICAgICAgICBjb25z
dCBuc0FTdHJpbmcmIGFUZXh0LAorICAgICAgICAgICAgICBFcnJvclJlc3VsdCYgYVJ2KQorICB7
CisgICAgbnNSZWZQdHI8VGV4dFRyYWNrQ3VlPiB0dGN1ZSA9IG5ldyBUZXh0VHJhY2tDdWUoYUds
b2JhbCk7CisgICAgdHRjdWUtPkluaXQoYVN0YXJ0VGltZSwgYUVuZFRpbWUsIGFUZXh0LCBhUnYp
OworICAgIGlmIChhUnYuRmFpbGVkKCkpIHsKKyAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICByZXR1cm4gdHRjdWUuZm9yZ2V0KCk7CisgIH0KKworICBUZXh0VHJhY2tDdWUobnNJU3Vw
cG9ydHMqIGFHbG9iYWwpOworICB+VGV4dFRyYWNrQ3VlKCk7CisKKyAgdm9pZCBJbml0KGNvbnN0
IGRvdWJsZSBhU3RhcnRUaW1lLCBjb25zdCBkb3VibGUgYUVuZFRpbWUsCisgICAgICAgICAgICBj
b25zdCBuc0FTdHJpbmcmIGFUZXh0LCBFcnJvclJlc3VsdCYgYVJ2KTsKKworICB2aXJ0dWFsIEpT
T2JqZWN0KiBXcmFwT2JqZWN0KEpTQ29udGV4dCogYUN4LCBKU09iamVjdCogYVNjb3BlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGFUcmllZFRvV3JhcCk7CisKKyAgbnNJ
U3VwcG9ydHMqCisgIEdldFBhcmVudE9iamVjdCgpCisgIHsKKyAgICByZXR1cm4gbUdsb2JhbDsK
KyAgfQorCisgIFRleHRUcmFjayogR2V0VHJhY2soKSBjb25zdAorICB7CisgICAgcmV0dXJuIG1U
cmFjazsKKyAgfQorCisgIHZvaWQgR2V0SWQobnNBU3RyaW5nJiBhSWQpIGNvbnN0CisgIHsKKyAg
ICBhSWQgPSBtSWQ7CisgIH0KKworICB2b2lkIFNldElkKGNvbnN0IG5zQVN0cmluZyYgYUlkKQor
ICB7CisgICAgbUlkID0gYUlkOworICB9CisKKyAgZG91YmxlIFN0YXJ0VGltZSgpIGNvbnN0Cisg
IHsKKyAgICByZXR1cm4gbVN0YXJ0VGltZTsKKyAgfQorCisgIHZvaWQgU2V0U3RhcnRUaW1lKGNv
bnN0IGRvdWJsZSBhU3RhcnRUaW1lKQorICB7CisgICAgLy9YWFhodW1waDogdmFsaWRhdGU/Cisg
ICAgbVN0YXJ0VGltZSA9IGFTdGFydFRpbWU7CisgIH0KKworICBkb3VibGUgRW5kVGltZSgpIGNv
bnN0CisgIHsKKyAgICByZXR1cm4gbUVuZFRpbWU7CisgIH0KKworICB2b2lkIFNldEVuZFRpbWUo
Y29uc3QgZG91YmxlIGFFbmRUaW1lKQorICB7CisgICAgLy9YWFhodW1waDogdmFsaWRhdGU/Cisg
ICAgbUVuZFRpbWUgPSBhRW5kVGltZTsKKyAgfQorCisgIGJvb2wgUGF1c2VPbkV4aXQoKQorICB7
CisgICAgcmV0dXJuIG1QYXVzZU9uRXhpdDsKKyAgfQorCisgIHZvaWQgU2V0UGF1c2VPbkV4aXQo
Y29uc3QgYm9vbCBhUGF1c2VPbkV4aXQpCisgIHsKKyAgICBtUGF1c2VPbkV4aXQgPSBhUGF1c2VP
bkV4aXQ7CisgIH0KKworICB2b2lkIEdldFZlcnRpY2FsKG5zQVN0cmluZyYgYVZlcnRpY2FsKQor
ICB7CisgICAgYVZlcnRpY2FsID0gbVZlcnRpY2FsOworICB9CisKKyAgdm9pZCBTZXRWZXJ0aWNh
bChjb25zdCBuc0FTdHJpbmcmIGFWZXJ0aWNhbCkKKyAgeworICAgIG1WZXJ0aWNhbCA9IGFWZXJ0
aWNhbDsKKyAgfQorCisgIGJvb2wgU25hcFRvTGluZXMoKQorICB7CisgICAgcmV0dXJuIG1TbmFw
VG9MaW5lczsKKyAgfQorCisgIHZvaWQgU2V0U25hcFRvTGluZXMoYm9vbCBhU25hcFRvTGluZXMp
CisgIHsKKyAgICBtU25hcFRvTGluZXMgPSBhU25hcFRvTGluZXM7CisgIH0KKworICBpbnQzMl90
IFBvc2l0aW9uKCkKKyAgeworICAgIHJldHVybiBtUG9zaXRpb247CisgIH0KKworICB2b2lkIFNl
dFBvc2l0aW9uKGludDMyX3QgYVBvc2l0aW9uKQorICB7CisgICAgLy8gWFhYaHVtcGg6IHZhbGlk
YXRlPworICAgIG1Qb3NpdGlvbiA9IGFQb3NpdGlvbjsKKyAgfQorCisgIGludDMyX3QgU2l6ZSgp
CisgIHsKKyAgICByZXR1cm4gbVNpemU7CisgIH0KKworICB2b2lkIFNldFNpemUoaW50MzJfdCBh
U2l6ZSkKKyAgeworICAgIC8vIFhYWGh1bXBoOiB2YWxpZGF0ZT8KKyAgICBtU2l6ZSA9IGFTaXpl
OworICB9CisKKyAgdm9pZCBHZXRBbGlnbihuc0FTdHJpbmcmIGFBbGlnbikKKyAgeworICAgIGFB
bGlnbiA9IG1BbGlnbjsKKyAgfQorCisgIHZvaWQgU2V0QWxpZ24oY29uc3QgbnNBU3RyaW5nJiBh
QWxpZ24pCisgIHsKKyAgICAvLyBYWFhodW1waDogdmFsaWRhdGU/CisgICAgbUFsaWduID0gYUFs
aWduOworICB9CisKKyAgdm9pZCBHZXRUZXh0KG5zQVN0cmluZyYgYVRleHQpCisgIHsKKyAgICBh
VGV4dCA9IG1UZXh0OworICB9CisKKyAgdm9pZCBTZXRUZXh0KGNvbnN0IG5zQVN0cmluZyYgYVRl
eHQpCisgIHsKKyAgICAvLyBYWFhodW1waDogdmFsaWRhdGU/CisgICAgbVRleHQgPSBhVGV4dDsK
KyAgfQorCisgIERvY3VtZW50RnJhZ21lbnQqIEdldEN1ZUFzSFRNTCgpCisgIHsKKyAgICAvLyBY
WFhodW1waDogdG9kbworICAgIHJldHVybiBudWxscHRyOworICB9CisKKyAgSU1QTF9FVkVOVF9I
QU5ETEVSKGVudGVyKQorICBJTVBMX0VWRU5UX0hBTkRMRVIoZXhpdCkKKworcHJpdmF0ZToKKyAg
bnNDT01QdHI8bnNJU3VwcG9ydHM+IG1HbG9iYWw7CisKKyAgbnNSZWZQdHI8VGV4dFRyYWNrPiBt
VHJhY2s7CisgIG5zU3RyaW5nIG1JZDsKKyAgZG91YmxlIG1TdGFydFRpbWU7CisgIGRvdWJsZSBt
RW5kVGltZTsKKyAgYm9vbCBtUGF1c2VPbkV4aXQ7CisgIG5zU3RyaW5nIG1WZXJ0aWNhbDsKKyAg
Ym9vbCBtU25hcFRvTGluZXM7CisgIGludDMyX3QgbVBvc2l0aW9uOworICBpbnQzMl90IG1TaXpl
OworICBuc1N0cmluZyBtQWxpZ247CisgIG5zU3RyaW5nIG1UZXh0OworfTsKKworfSAvLyBuYW1l
c3BhY2UgZG9tCit9IC8vIG5hbWVzcGFjZSBtb3ppbGxhCisKKyNlbmRpZiAvLyBtb3ppbGxhX2Rv
bV9UZXh0VHJhY2tDdWVfaApkaWZmIC0tZ2l0IGEvZG9tL21lZGlhL1RleHRUcmFja0N1ZUxpc3Qu
Y3BwIGIvZG9tL21lZGlhL1RleHRUcmFja0N1ZUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmU3NTdiNmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb20vbWVkaWEvVGV4
dFRyYWNrQ3VlTGlzdC5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFi
LXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAq
LworLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRo
ZSBNb3ppbGxhIFB1YmxpYworICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1Q
TCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworICogZmlsZSwgWW91IGNhbiBvYnRhaW4g
b25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKworI2luY2x1ZGUgIlRleHRU
cmFja0N1ZUxpc3QuaCIKKyNpbmNsdWRlICJtb3ppbGxhL2RvbS9UZXh0VHJhY2tDdWVMaXN0Qmlu
ZGluZy5oIgorCituYW1lc3BhY2UgbW96aWxsYSB7CituYW1lc3BhY2UgZG9tIHsKKworTlNfSU1Q
TF9DWUNMRV9DT0xMRUNUSU9OX1VOTElOS19CRUdJTihUZXh0VHJhY2tDdWVMaXN0KQorICBOU19J
TVBMX0NZQ0xFX0NPTExFQ1RJT05fVU5MSU5LX1BSRVNFUlZFRF9XUkFQUEVSCitOU19JTVBMX0NZ
Q0xFX0NPTExFQ1RJT05fVU5MSU5LX0VORAorCitOU19JTVBMX0NZQ0xFX0NPTExFQ1RJT05fVFJB
VkVSU0VfQkVHSU4oVGV4dFRyYWNrQ3VlTGlzdCkKKyAgTlNfSU1QTF9DWUNMRV9DT0xMRUNUSU9O
X1RSQVZFUlNFKG1QYXJlbnQpCisgIE5TX0lNUExfQ1lDTEVfQ09MTEVDVElPTl9UUkFWRVJTRV9T
Q1JJUFRfT0JKRUNUUworTlNfSU1QTF9DWUNMRV9DT0xMRUNUSU9OX1RSQVZFUlNFX0VORAorCitO
U19JTVBMX0NZQ0xFX0NPTExFQ1RJT05fVFJBQ0VfQkVHSU4oVGV4dFRyYWNrQ3VlTGlzdCkKKyAg
TlNfSU1QTF9DWUNMRV9DT0xMRUNUSU9OX1RSQUNFX1BSRVNFUlZFRF9XUkFQUEVSCitOU19JTVBM
X0NZQ0xFX0NPTExFQ1RJT05fVFJBQ0VfRU5ECisKK05TX0lNUExfQ1lDTEVfQ09MTEVDVElOR19B
RERSRUYoVGV4dFRyYWNrQ3VlTGlzdCkKK05TX0lNUExfQ1lDTEVfQ09MTEVDVElOR19SRUxFQVNF
KFRleHRUcmFja0N1ZUxpc3QpCisKK05TX0lOVEVSRkFDRV9NQVBfQkVHSU5fQ1lDTEVfQ09MTEVD
VElPTihUZXh0VHJhY2tDdWVMaXN0KQorICBOU19XUkFQUEVSQ0FDSEVfSU5URVJGQUNFX01BUF9F
TlRSWQorICBOU19JTlRFUkZBQ0VfTUFQX0VOVFJZKG5zSVN1cHBvcnRzKQorTlNfSU5URVJGQUNF
X01BUF9FTkQKKworVGV4dFRyYWNrQ3VlTGlzdDo6VGV4dFRyYWNrQ3VlTGlzdChuc0lTdXBwb3J0
cyAqYVBhcmVudCkgOiBtUGFyZW50KGFQYXJlbnQpCit7CisgIFNldElzRE9NQmluZGluZygpOwor
fQorCitUZXh0VHJhY2tDdWVMaXN0Ojp+VGV4dFRyYWNrQ3VlTGlzdCgpCit7CisgIG1QYXJlbnQg
PSBudWxscHRyOworfQorCitKU09iamVjdCoKK1RleHRUcmFja0N1ZUxpc3Q6OldyYXBPYmplY3Qo
SlNDb250ZXh0KiBhQ3gsIEpTT2JqZWN0KiBhU2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wqIGFUcmllZFRvV3JhcCkKK3sKKyAgcmV0dXJuIFRleHRUcmFja0N1ZUxpc3RC
aW5kaW5nOjpXcmFwKGFDeCwgYVNjb3BlLCB0aGlzLCBhVHJpZWRUb1dyYXApOworfQorCit9IC8v
IG5hbWVzcGFjZSBkb20KK30gLy8gbmFtZXNwYWNlIG1vemlsbGEKZGlmZiAtLWdpdCBhL2RvbS9t
ZWRpYS9UZXh0VHJhY2tDdWVMaXN0LmggYi9kb20vbWVkaWEvVGV4dFRyYWNrQ3VlTGlzdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MmM4OWMKLS0tIC9kZXYvbnVsbAor
KysgYi9kb20vbWVkaWEvVGV4dFRyYWNrQ3VlTGlzdC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qIC0q
LSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2lj
LW9mZnNldDogMiAtKi0gKi8KKy8qIHZpbTpzZXQgdHM9MiBzdz0yIGV0IHR3PTc4OiAqLworLyog
VGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3pp
bGxhIFB1YmxpYworICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMg
bm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLAorICogWW91IGNhbiBvYnRhaW4gb25lIGF0
IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKworI2lmbmRlZiBtb3ppbGxhX2RvbV9U
ZXh0VHJhY2tDdWVMaXN0X2gKKyNkZWZpbmUgbW96aWxsYV9kb21fVGV4dFRyYWNrQ3VlTGlzdF9o
CisKKyNpbmNsdWRlICJuc1dyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIm5zQ3ljbGVDb2xsZWN0
aW9uUGFydGljaXBhbnQuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKKyNpbmNsdWRlICJu
c0NPTVB0ci5oIgorCituYW1lc3BhY2UgbW96aWxsYSB7CituYW1lc3BhY2UgZG9tIHsKKworY2xh
c3MgVGV4dFRyYWNrQ3VlOworCisvLyBYWFhodW1waDogc2hvdWxkIHRoaXMgZm9sbG93IHdoYXQg
TWVkaWFTdHJlYW1MaXN0IGRvZXMsIGFuZCB1c2UgTm9uUmVmY291bnRlZERPTU9iamVjdD8KK2Ns
YXNzIFRleHRUcmFja0N1ZUxpc3QgTU9aX0ZJTkFMIDogcHVibGljIG5zSVN1cHBvcnRzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgbnNXcmFwcGVyQ2FjaGUKK3sK
K3B1YmxpYzoKKyAgTlNfREVDTF9DWUNMRV9DT0xMRUNUSU5HX0lTVVBQT1JUUworICBOU19ERUNM
X0NZQ0xFX0NPTExFQ1RJT05fU0NSSVBUX0hPTERFUl9DTEFTUyhUZXh0VHJhY2tDdWVMaXN0KQor
CisgIC8vIFRleHRUcmFja0N1ZUxpc3QgV2ViSURMCisgIFRleHRUcmFja0N1ZUxpc3QobnNJU3Vw
cG9ydHMgKmFQYXJlbnQpOworICB+VGV4dFRyYWNrQ3VlTGlzdCgpOworICB2aXJ0dWFsIEpTT2Jq
ZWN0KiBXcmFwT2JqZWN0KEpTQ29udGV4dCogYUN4LCBKU09iamVjdCogYVNjb3BlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGFUcmllZFRvV3JhcCk7CisKKyAgbnNJU3Vw
cG9ydHMqIEdldFBhcmVudE9iamVjdCgpCisgIHsKKyAgICByZXR1cm4gbVBhcmVudDsKKyAgfQor
CisgIHVpbnQzMl90IExlbmd0aCgpCisgIHsKKyAgICByZXR1cm4gbUxlbmd0aDsKKyAgfQorCisg
IFRleHRUcmFja0N1ZSogSW5kZXhlZEdldHRlcihpbnQzMl90IGFJbmRleCwgYm9vbCYgYUZvdW5k
KQorICB7CisgICAgLy8gWFhYaHVtcGg6IHRvZG8KKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQor
CisgIFRleHRUcmFja0N1ZSogR2V0Q3VlQnlJZChjb25zdCBuc0FTdHJpbmcmIGlkKQorICB7Cisg
ICAgLy8gWFhYaHVtcGg6IHRvZG8KKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQorCitwcml2YXRl
OgorICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVBhcmVudDsKKworICB1aW50MzJfdCBtTGVuZ3Ro
OworfTsKKworfSAvLyBuYW1lc3BhY2UgZG9tCit9IC8vIG5hbWVzcGFjZSBtb3ppbGxhCisKKyNl
bmRpZiAvLyBtb3ppbGxhX2RvbV9UZXh0VHJhY2tDdWVMaXN0X2gKZGlmZiAtLWdpdCBhL2RvbS93
ZWJpZGwvSFRNTFRyYWNrRWxlbWVudC53ZWJpZGwgYi9kb20vd2ViaWRsL0hUTUxUcmFja0VsZW1l
bnQud2ViaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmYyZTQKLS0t
IC9kZXYvbnVsbAorKysgYi9kb20vd2ViaWRsL0hUTUxUcmFja0VsZW1lbnQud2ViaWRsCkBAIC0w
LDAgKzEsMjggQEAKKy8qIC0qLSBNb2RlOiBJREw7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMt
bW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8qIFRoaXMgU291cmNlIENvZGUg
Rm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAqIExp
Y2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3
aXRoIHRoaXMgZmlsZSwKKyAqIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5v
cmcvTVBMLzIuMC8uCisgKgorICogVGhlIG9yaWdpbiBvZiB0aGlzIElETCBmaWxlIGlzCisgKiBo
dHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyN0aGUtdHJh
Y2stZWxlbWVudAorICovCisKK2ludGVyZmFjZSBIVE1MVHJhY2tFbGVtZW50IDogSFRNTEVsZW1l
bnQgeworICAgICAgICAgICBbU2V0dGVyVGhyb3dzXQorICAgICAgICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nIGtpbmQ7CisgICAgICAgICAgIFtTZXR0ZXJUaHJvd3NdCisgICAgICAgICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgc3JjOworICAgICAgICAgICBbU2V0dGVyVGhyb3dzXQorICAgICAgICAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNyY2xhbmc7CisgICAgICAgICAgIFtTZXR0ZXJUaHJvd3Nd
CisgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbGFiZWw7CisgICAgICAgICAgIGF0dHJp
YnV0ZSBib29sZWFuIGRlZmF1bHQ7CisKKyAgY29uc3QgdW5zaWduZWQgc2hvcnQgTk9ORSA9IDA7
CisgIGNvbnN0IHVuc2lnbmVkIHNob3J0IExPQURJTkcgPSAxOworICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBMT0FERUQgPSAyOworICBjb25zdCB1bnNpZ25lZCBzaG9ydCBFUlJPUiA9IDM7CisgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCByZWFkeVN0YXRlOworCisgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBUZXh0VHJhY2sgdHJhY2s7Cit9OwpkaWZmIC0tZ2l0IGEvZG9tL3dlYmlkbC9U
ZXh0VHJhY2sud2ViaWRsIGIvZG9tL3dlYmlkbC9UZXh0VHJhY2sud2ViaWRsCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDBhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb20v
d2ViaWRsL1RleHRUcmFjay53ZWJpZGwKQEAgLTAsMCArMSwzMCBAQAorLyogLSotIE1vZGU6IElE
TDsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAy
IC0qLSAqLworLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1z
IG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2Yg
dGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLAorICogWW91IGNhbiBv
YnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KKyAqCisgKiBUaGUgb3Jp
Z2luIG9mIHRoaXMgSURMIGZpbGUgaXMKKyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93
ZWItYXBwcy9jdXJyZW50LXdvcmsvI3RleHR0cmFjaworICovCisKKy8vIFhYWGh1bXBoOiB0b2Rv
CisvL2VudW0gVGV4dFRyYWNrTW9kZSB7ICJkaXNhYmxlZCIsICJoaWRkZW4iLCAic2hvd2luZyIg
fTsKKworaW50ZXJmYWNlIFRleHRUcmFjayA6IEV2ZW50VGFyZ2V0IHsKKyAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyBraW5kOworICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxh
YmVsOworICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhbmd1YWdlOworICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGluQmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGU7CisK
Ky8vIFhYWGh1bXBoOiB0b2RvCisvLyAgICAgICAgICAgYXR0cmlidXRlIFRleHRUcmFja01vZGUg
bW9kZTsKKworICByZWFkb25seSBhdHRyaWJ1dGUgVGV4dFRyYWNrQ3VlTGlzdD8gY3VlczsKKyAg
cmVhZG9ubHkgYXR0cmlidXRlIFRleHRUcmFja0N1ZUxpc3Q/IGFjdGl2ZUN1ZXM7CisKKyAgdm9p
ZCBhZGRDdWUoVGV4dFRyYWNrQ3VlIGN1ZSk7CisgIHZvaWQgcmVtb3ZlQ3VlKFRleHRUcmFja0N1
ZSBjdWUpOworCisgICAgICAgICAgIFtTZXR0ZXJUaHJvd3NdCisgICAgICAgICAgIGF0dHJpYnV0
ZSBFdmVudEhhbmRsZXIgb25jdWVjaGFuZ2U7Cit9OwpkaWZmIC0tZ2l0IGEvZG9tL3dlYmlkbC9U
ZXh0VHJhY2tDdWUud2ViaWRsIGIvZG9tL3dlYmlkbC9UZXh0VHJhY2tDdWUud2ViaWRsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OThmMWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9kb20vd2ViaWRsL1RleHRUcmFja0N1ZS53ZWJpZGwKQEAgLTAsMCArMSwzNiBAQAorLyogLSot
IE1vZGU6IElETDsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLSAqLworLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8g
dGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICogTGljZW5zZSwgdi4gMi4wLiBJZiBh
IGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLAorICog
WW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KKyAqCisg
KiBUaGUgb3JpZ2luIG9mIHRoaXMgSURMIGZpbGUgaXMKKyAqIGh0dHA6Ly93d3cud2hhdHdnLm9y
Zy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3RleHR0cmFja2N1ZQorICovCisKKy8vIFhY
WGh1bXBoOiBodHRwczovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTIw
NjUxCisvL2VudW0gQXV0b0tleXdvcmQgeyAiYXV0byIgfTsKKworW0NvbnN0cnVjdG9yKGRvdWJs
ZSBzdGFydFRpbWUsIGRvdWJsZSBlbmRUaW1lLCBET01TdHJpbmcgdGV4dCldCitpbnRlcmZhY2Ug
VGV4dFRyYWNrQ3VlIDogRXZlbnRUYXJnZXQgeworICByZWFkb25seSBhdHRyaWJ1dGUgVGV4dFRy
YWNrPyB0cmFjazsKKworICAgICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGlkOworICAgICAg
ICAgICBhdHRyaWJ1dGUgZG91YmxlIHN0YXJ0VGltZTsKKyAgICAgICAgICAgYXR0cmlidXRlIGRv
dWJsZSBlbmRUaW1lOworICAgICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBwYXVzZU9uRXhpdDsK
KyAgICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJ0aWNhbDsKKyAgICAgICAgICAgYXR0
cmlidXRlIGJvb2xlYW4gc25hcFRvTGluZXM7CisvLyBYWFhodW1waDogaHR0cHM6Ly93d3cudzMu
b3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0yMDY1MQorLy8gICAgICAgICAgIGF0dHJp
YnV0ZSAobG9uZyBvciBBdXRvS2V5d29yZCkgbGluZTsKKyAgICAgICAgICAgYXR0cmlidXRlIGxv
bmcgcG9zaXRpb247CisgICAgICAgICAgIGF0dHJpYnV0ZSBsb25nIHNpemU7CisgICAgICAgICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgYWxpZ247CisgICAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgdGV4dDsKKyAgRG9jdW1lbnRGcmFnbWVudCBnZXRDdWVBc0hUTUwoKTsKKworICAgICAgICAg
ICBbU2V0dGVyVGhyb3dzXQorICAgICAgICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uZW50
ZXI7CisKKyAgICAgICAgICAgW1NldHRlclRocm93c10KKyAgICAgICAgICAgYXR0cmlidXRlIEV2
ZW50SGFuZGxlciBvbmV4aXQ7Cit9OwpkaWZmIC0tZ2l0IGEvZG9tL3dlYmlkbC9UZXh0VHJhY2tD
dWVMaXN0LndlYmlkbCBiL2RvbS93ZWJpZGwvVGV4dFRyYWNrQ3VlTGlzdC53ZWJpZGwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiMzFjZQotLS0gL2Rldi9udWxsCisrKyBi
L2RvbS93ZWJpZGwvVGV4dFRyYWNrQ3VlTGlzdC53ZWJpZGwKQEAgLTAsMCArMSwxNSBAQAorLyog
LSotIE1vZGU6IElETDsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFz
aWMtb2Zmc2V0OiAyIC0qLSAqLworLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3Qg
dG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICogTGljZW5zZSwgdi4gMi4wLiBJ
ZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBmaWxlLAor
ICogWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KKyAq
CisgKiBUaGUgb3JpZ2luIG9mIHRoaXMgSURMIGZpbGUgaXMKKyAqIGh0dHA6Ly93d3cud2hhdHdn
Lm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3RleHR0cmFja2N1ZWxpc3QKKyAqLwor
CitpbnRlcmZhY2UgVGV4dFRyYWNrQ3VlTGlzdCB7CisgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBsb25nIGxlbmd0aDsKKyAgZ2V0dGVyIFRleHRUcmFja0N1ZSAodW5zaWduZWQgbG9uZyBp
bmRleCk7CisgIFRleHRUcmFja0N1ZT8gZ2V0Q3VlQnlJZChET01TdHJpbmcgaWQpOworfTsKKwpk
aWZmIC0tZ2l0IGEvZG9tL3dlYmlkbC9XZWJJREwubWsgYi9kb20vd2ViaWRsL1dlYklETC5tawpp
bmRleCBlOGJlY2VkLi41ZTFhOGVlIDEwMDY0NAotLS0gYS9kb20vd2ViaWRsL1dlYklETC5tawor
KysgYi9kb20vd2ViaWRsL1dlYklETC5tawpAQCAtMTk0LDE2ICsxOTQsMjUgQEAgd2ViaWRsX2Zp
bGVzICs9IFwKIGVuZGlmCiAKIGlmZGVmIE1PWl9CMkdfUklMCiB3ZWJpZGxfZmlsZXMgKz0gXAog
ICBVU1NEUmVjZWl2ZWRFdmVudC53ZWJpZGwgXAogICAkKE5VTEwpCiBlbmRpZgogCitpZmRlZiBN
T1pfV0VCVlRUCit3ZWJpZGxfZmlsZXMgKz0gXAorICBIVE1MVHJhY2tFbGVtZW50LndlYmlkbCBc
CisgIFRleHRUcmFjay53ZWJpZGwgXAorCVRleHRUcmFja0N1ZS53ZWJpZGwgXAorCVRleHRUcmFj
a0N1ZUxpc3Qud2ViaWRsIFwKKwkkKE5VTEwpCitlbmRpZgorCiBpZmRlZiBFTkFCTEVfVEVTVFMK
IHRlc3Rfd2ViaWRsX2ZpbGVzIDo9IFwKICAgVGVzdENvZGVHZW4ud2ViaWRsIFwKICAgVGVzdERp
Y3Rpb25hcnkud2ViaWRsIFwKICAgVGVzdEV4YW1wbGVHZW4ud2ViaWRsIFwKICAgVGVzdFR5cGVk
ZWYud2ViaWRsIFwKICAgJChOVUxMKQogZWxzZQpkaWZmIC0tZ2l0IGEvZWRpdG9yL2xpYmVkaXRv
ci9odG1sL25zSFRNTEVkaXRVdGlscy5jcHAgYi9lZGl0b3IvbGliZWRpdG9yL2h0bWwvbnNIVE1M
RWRpdFV0aWxzLmNwcAppbmRleCBiM2M1MTNiLi45ZGE1OWFmIDEwMDY0NAotLS0gYS9lZGl0b3Iv
bGliZWRpdG9yL2h0bWwvbnNIVE1MRWRpdFV0aWxzLmNwcAorKysgYi9lZGl0b3IvbGliZWRpdG9y
L2h0bWwvbnNIVE1MRWRpdFV0aWxzLmNwcApAQCAtNzQ2LDE2ICs3NDYsMTkgQEAgc3RhdGljIGNv
bnN0IG5zRWxlbWVudEluZm8ga0VsZW1lbnRzW2VIVE1MVGFnX3VzZXJkZWZpbmVkXSA9IHsKICAg
RUxFTSh0Ym9keSwgdHJ1ZSwgZmFsc2UsIEdST1VQX1RBQkxFX0NPTlRFTlQsIEdST1VQX1RCT0RZ
X0NPTlRFTlQpLAogICBFTEVNKHRkLCB0cnVlLCBmYWxzZSwgR1JPVVBfVFJfQ09OVEVOVCwgR1JP
VVBfRkxPV19FTEVNRU5UKSwKICAgRUxFTSh0ZXh0YXJlYSwgdHJ1ZSwgZmFsc2UsIEdST1VQX0ZP
Uk1DT05UUk9MLCBHUk9VUF9MRUFGKSwKICAgRUxFTSh0Zm9vdCwgdHJ1ZSwgZmFsc2UsIEdST1VQ
X05PTkUsIEdST1VQX1RCT0RZX0NPTlRFTlQpLAogICBFTEVNKHRoLCB0cnVlLCBmYWxzZSwgR1JP
VVBfVFJfQ09OVEVOVCwgR1JPVVBfRkxPV19FTEVNRU5UKSwKICAgRUxFTSh0aGVhZCwgdHJ1ZSwg
ZmFsc2UsIEdST1VQX05PTkUsIEdST1VQX1RCT0RZX0NPTlRFTlQpLAogICBFTEVNKHRpdGxlLCB0
cnVlLCBmYWxzZSwgR1JPVVBfSEVBRF9DT05URU5ULCBHUk9VUF9MRUFGKSwKICAgRUxFTSh0ciwg
dHJ1ZSwgZmFsc2UsIEdST1VQX1RCT0RZX0NPTlRFTlQsIEdST1VQX1RSX0NPTlRFTlQpLAorI2lm
IGRlZmluZWQoTU9aX01FRElBKQorICBFTEVNKHRyYWNrLCBmYWxzZSwgZmFsc2UsIEdST1VQX05P
TkUsIEdST1VQX05PTkUpLAorI2VuZGlmCiAgIEVMRU0odHQsIHRydWUsIHRydWUsIEdST1VQX0ZP
TlRTVFlMRSwgR1JPVVBfSU5MSU5FX0VMRU1FTlQpLAogICBFTEVNKHUsIHRydWUsIHRydWUsIEdS
T1VQX0ZPTlRTVFlMRSwgR1JPVVBfSU5MSU5FX0VMRU1FTlQpLAogICAvLyBYWFggQ2FuIGNvbnRh
aW4gc2VsZiBhbmQgb2wgYmVjYXVzZSBlZGl0b3IgZG9lcyBzdWJsaXN0cyBpbGxlZ2FsbHkuCiAg
IEVMRU0odWwsIHRydWUsIHRydWUsIEdST1VQX0JMT0NLIHwgR1JPVVBfT0xfVUwsCiAgICAgICAg
R1JPVVBfTEkgfCBHUk9VUF9PTF9VTCksCiAgIEVMRU0odmFyLCB0cnVlLCB0cnVlLCBHUk9VUF9Q
SFJBU0UsIEdST1VQX0lOTElORV9FTEVNRU5UKSwKICNpZiBkZWZpbmVkKE1PWl9NRURJQSkKICAg
RUxFTSh2aWRlbywgZmFsc2UsIGZhbHNlLCBHUk9VUF9OT05FLCBHUk9VUF9OT05FKSwKZGlmZiAt
LWdpdCBhL2xheW91dC9idWlsZC9NYWtlZmlsZS5pbiBiL2xheW91dC9idWlsZC9NYWtlZmlsZS5p
bgppbmRleCA4YmIzNzA3Li4wN2RiMzY3IDEwMDY0NAotLS0gYS9sYXlvdXQvYnVpbGQvTWFrZWZp
bGUuaW4KKysrIGIvbGF5b3V0L2J1aWxkL01ha2VmaWxlLmluCkBAIC0yMDQsMTYgKzIwNCwyMiBA
QCBTSEFSRURfTElCUkFSWV9MSUJTIAkrPSBcCiBlbmRpZgogCiBpZmRlZiBNT1pfREFTSAogU0hB
UkVEX0xJQlJBUllfTElCUyArPSBcCiAgICQoREVQVEgpL2NvbnRlbnQvbWVkaWEvZGFzaC8kKExJ
Ql9QUkVGSVgpZ2tjb25kYXNoX3MuJChMSUJfU1VGRklYKSBcCiAgICQoTlVMTCkKIGVuZGlmCiAK
K2lmZGVmIE1PWl9XRUJWVFQKK1NIQVJFRF9MSUJSQVJZX0xJQlMJKz0gXAorCSQoREVQVEgpL21l
ZGlhL3dlYnZ0dC8kKExJQl9QUkVGSVgpd2VidnR0LiQoTElCX1NVRkZJWCkgXAorCSQoTlVMTCkK
K2VuZGlmCisKIGlmZXEgKGdvbmssJChNT1pfV0lER0VUX1RPT0xLSVQpKQogSU5DTFVERVMJKz0g
XAogCQktSSQoc3JjZGlyKS8uLi8uLi9iYXNlL3NyYyBcCiAJCS1JJChzcmNkaXIpLy4uLy4uL2h0
bWwvY29udGVudC9zcmMgXAogCQktSSQoQU5EUk9JRF9TT1VSQ0UpL2RhbHZpay9saWJuYXRpdmVo
ZWxwZXIvaW5jbHVkZS9uYXRpdmVoZWxwZXIgXAogCQktSSQoQU5EUk9JRF9TT1VSQ0UpL2ZyYW1l
d29ya3MvYmFzZS9pbmNsdWRlLyBcCiAJCS1JJChBTkRST0lEX1NPVVJDRSkvZnJhbWV3b3Jrcy9i
YXNlL2luY2x1ZGUvYmluZGVyLyBcCiAJCS1JJChBTkRST0lEX1NPVVJDRSkvZnJhbWV3b3Jrcy9i
YXNlL2luY2x1ZGUvdXRpbHMvIFwKZGlmZiAtLWdpdCBhL2xheW91dC9nZW5lcmljL25zVmlkZW9G
cmFtZS5jcHAgYi9sYXlvdXQvZ2VuZXJpYy9uc1ZpZGVvRnJhbWUuY3BwCmluZGV4IDZmOTYwYjEu
LmEyODU5OTEgMTAwNjQ0Ci0tLSBhL2xheW91dC9nZW5lcmljL25zVmlkZW9GcmFtZS5jcHAKKysr
IGIvbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmNwcApAQCAtMTAsMTYgKzEwLDE3IEBACiAj
aW5jbHVkZSAibnNDT01QdHIuaCIKICNpbmNsdWRlICJuc0lTZXJ2aWNlTWFuYWdlci5oIgogI2lu
Y2x1ZGUgIm5zR2tBdG9tcy5oIgogCiAjaW5jbHVkZSAibnNWaWRlb0ZyYW1lLmgiCiAjaW5jbHVk
ZSAibnNIVE1MVmlkZW9FbGVtZW50LmgiCiAjaW5jbHVkZSAibnNJRE9NSFRNTFZpZGVvRWxlbWVu
dC5oIgogI2luY2x1ZGUgIm5zSURPTUhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJuc0lE
T01IVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIm5zRGlzcGxheUxpc3QuaCIKICNpbmNsdWRlICJn
ZnhDb250ZXh0LmgiCiAjaW5jbHVkZSAiZ2Z4SW1hZ2VTdXJmYWNlLmgiCiAjaW5jbHVkZSAibnNQ
cmVzQ29udGV4dC5oIgogI2luY2x1ZGUgIm5zVHJhbnNmb3JtMkQuaCIKICNpbmNsdWRlICJuc0Nv
bnRlbnRDcmVhdG9yRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAibnNCb3hMYXlvdXRTdGF0ZS5oIgog
I2luY2x1ZGUgIm5zQm94RnJhbWUuaCIKQEAgLTU4LDI2ICs1OSwyOCBAQCBOU19RVUVSWUZSQU1F
X0hFQUQobnNWaWRlb0ZyYW1lKQogICBOU19RVUVSWUZSQU1FX0VOVFJZKG5zSUFub255bW91c0Nv
bnRlbnRDcmVhdG9yKQogTlNfUVVFUllGUkFNRV9UQUlMX0lOSEVSSVRJTkcobnNDb250YWluZXJG
cmFtZSkKIAogbnNyZXN1bHQKIG5zVmlkZW9GcmFtZTo6Q3JlYXRlQW5vbnltb3VzQ29udGVudChu
c1RBcnJheTxDb250ZW50SW5mbz4mIGFFbGVtZW50cykKIHsKICAgbnNOb2RlSW5mb01hbmFnZXIg
Km5vZGVJbmZvTWFuYWdlciA9IEdldENvbnRlbnQoKS0+R2V0Q3VycmVudERvYygpLT5Ob2RlSW5m
b01hbmFnZXIoKTsKICAgbnNDT01QdHI8bnNJTm9kZUluZm8+IG5vZGVJbmZvOworICBFbGVtZW50
ICplbGVtZW50OworCiAgIGlmIChIYXNWaWRlb0VsZW1lbnQoKSkgewogICAgIC8vIENyZWF0ZSBh
biBhbm9ueW1vdXMgaW1hZ2UgZWxlbWVudCBhcyBhIGNoaWxkIHRvIGhvbGQgdGhlIHBvc3Rlcgog
ICAgIC8vIGltYWdlLiBXZSBtYXkgbm90IGhhdmUgYSBwb3N0ZXIgaW1hZ2Ugbm93LCBidXQgb25l
IGNvdWxkIGJlIGFkZGVkCiAgICAgLy8gYmVmb3JlIHdlIGxvYWQsIG9yIG9uIGEgc3Vic2VxdWVu
dCBsb2FkLgogICAgIG5vZGVJbmZvID0gbm9kZUluZm9NYW5hZ2VyLT5HZXROb2RlSW5mbyhuc0dr
QXRvbXM6OmltZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnVsbHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga05h
bWVTcGFjZUlEX1hIVE1MLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lET01Ob2RlOjpFTEVNRU5UX05PREUpOwogICAgIE5TX0VOU1VSRV9UUlVFKG5vZGVJ
bmZvLCBOU19FUlJPUl9PVVRfT0ZfTUVNT1JZKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gTlNf
TmV3SFRNTEltYWdlRWxlbWVudChub2RlSW5mby5mb3JnZXQoKSk7CisgICAgZWxlbWVudCA9IE5T
X05ld0hUTUxJbWFnZUVsZW1lbnQobm9kZUluZm8uZm9yZ2V0KCkpOwogICAgIG1Qb3N0ZXJJbWFn
ZSA9IGVsZW1lbnQ7CiAgICAgTlNfRU5TVVJFX1RSVUUobVBvc3RlckltYWdlLCBOU19FUlJPUl9P
VVRfT0ZfTUVNT1JZKTsKIAogICAgIC8vIFB1c2ggYSBudWxsIEpTQ29udGV4dCBvbiB0aGUgc3Rh
Y2sgc28gdGhhdCBjb2RlIHRoYXQgcnVucwogICAgIC8vIHdpdGhpbiB0aGUgYmVsb3cgY29kZSBk
b2Vzbid0IHRoaW5rIGl0J3MgYmVpbmcgY2FsbGVkIGJ5CiAgICAgLy8gSlMuIFNlZSBidWcgNjA0
MjYyLgogICAgIG5zQ3hQdXNoZXIgcHVzaGVyOwogICAgIHB1c2hlci5QdXNoTnVsbCgpOwpAQCAt
MTA3LDMwICsxMTAsNTYgQEAgbnNWaWRlb0ZyYW1lOjpDcmVhdGVBbm9ueW1vdXNDb250ZW50KG5z
VEFycmF5PENvbnRlbnRJbmZvPiYgYUVsZW1lbnRzKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga05hbWVTcGFjZUlEX1hVTCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSURPTU5vZGU6OkVMRU1FTlRfTk9ERSk7CiAgIE5TX0VO
U1VSRV9UUlVFKG5vZGVJbmZvLCBOU19FUlJPUl9PVVRfT0ZfTUVNT1JZKTsKIAogICBOU19UcnVz
dGVkTmV3WFVMRWxlbWVudChnZXR0ZXJfQWRkUmVmcyhtVmlkZW9Db250cm9scyksIG5vZGVJbmZv
LmZvcmdldCgpKTsKICAgaWYgKCFhRWxlbWVudHMuQXBwZW5kRWxlbWVudChtVmlkZW9Db250cm9s
cykpCiAgICAgcmV0dXJuIE5TX0VSUk9SX09VVF9PRl9NRU1PUlk7CiAKKyAgLy8gU2V0IHVwIHRo
ZSBjYXB0aW9uIG92ZXJsYXkgZGl2IGZvciBzaG93aW5nIGFueSBUZXh0VHJhY2sgZGF0YQorICBu
b2RlSW5mbyA9IG5vZGVJbmZvTWFuYWdlci0+R2V0Tm9kZUluZm8obnNHa0F0b21zOjpkaXYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga05hbWVTcGFjZUlEX1hIVE1MLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NTm9kZTo6RUxF
TUVOVF9OT0RFKTsKKyAgTlNfRU5TVVJFX1RSVUUobm9kZUluZm8sIE5TX0VSUk9SX09VVF9PRl9N
RU1PUlkpOworICBlbGVtZW50ID0gTlNfTmV3SFRNTERpdkVsZW1lbnQobm9kZUluZm8uZm9yZ2V0
KCkpOworICBtQ2FwdGlvbkRpdiA9IGVsZW1lbnQ7CisgIE5TX0VOU1VSRV9UUlVFKG1DYXB0aW9u
RGl2LCBOU19FUlJPUl9PVVRfT0ZfTUVNT1JZKTsKKyAgLy8gaGFuZyBhIGNsYXNzIG5hbWUgb24g
dGhlIGRpdiBmb3IgZGVmYXVsdCBzdHlsaW5nCisgIG5zcmVzdWx0IHJ2ID0gbUNhcHRpb25EaXYt
PlNldEF0dHIoa05hbWVTcGFjZUlEX05vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNHa0F0b21zOjpfY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlNfTElURVJBTF9TVFJJTkcoImNhcHRpb25EaXYiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgTlNfRU5TVVJFX1NVQ0NFU1MocnYsIHJ2
KTsKKworICBpZiAoIWFFbGVtZW50cy5BcHBlbmRFbGVtZW50KG1DYXB0aW9uRGl2KSkKKyAgICBy
ZXR1cm4gTlNfRVJST1JfT1VUX09GX01FTU9SWTsKKworICAvLyBhZGQgYSB0ZXN0IHN0cmluZyBz
byB3ZSBjYW4gdGVzdCB0aGUgZGl2CisgIG5zQ09NUHRyPG5zSURPTUhUTUxFbGVtZW50PiBkaXYg
PSBkb19RdWVyeUludGVyZmFjZShtQ2FwdGlvbkRpdik7CisgIHJ2ID0gZGl2LT5TZXRJbm5lckhU
TUwoTlNfTElURVJBTF9TVFJJTkcoIjxwPkxvcmVtIGlwc3VtIGRvbG9yPC9wPiIpKTsKKyAgTlNf
RU5TVVJFX1NVQ0NFU1MocnYsIHJ2KTsKKwogICByZXR1cm4gTlNfT0s7CiB9CiAKIHZvaWQKIG5z
VmlkZW9GcmFtZTo6QXBwZW5kQW5vbnltb3VzQ29udGVudFRvKG5zQmFzZUNvbnRlbnRMaXN0JiBh
RWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBhRmxpdGVyKQogewogICBhRWxlbWVudHMuTWF5YmVBcHBlbmRFbGVtZW50KG1Qb3N0ZXJJbWFn
ZSk7CiAgIGFFbGVtZW50cy5NYXliZUFwcGVuZEVsZW1lbnQobVZpZGVvQ29udHJvbHMpOworICBh
RWxlbWVudHMuTWF5YmVBcHBlbmRFbGVtZW50KG1DYXB0aW9uRGl2KTsKIH0KIAogdm9pZAogbnNW
aWRlb0ZyYW1lOjpEZXN0cm95RnJvbShuc0lGcmFtZSogYURlc3RydWN0Um9vdCkKIHsKKyAgbnND
b250ZW50VXRpbHM6OkRlc3Ryb3lBbm9ueW1vdXNDb250ZW50KCZtQ2FwdGlvbkRpdik7CiAgIG5z
Q29udGVudFV0aWxzOjpEZXN0cm95QW5vbnltb3VzQ29udGVudCgmbVZpZGVvQ29udHJvbHMpOwog
ICBuc0NvbnRlbnRVdGlsczo6RGVzdHJveUFub255bW91c0NvbnRlbnQoJm1Qb3N0ZXJJbWFnZSk7
CiAgIG5zQ29udGFpbmVyRnJhbWU6OkRlc3Ryb3lGcm9tKGFEZXN0cnVjdFJvb3QpOwogfQogCiBi
b29sCiBuc1ZpZGVvRnJhbWU6OklzTGVhZigpIGNvbnN0CiB7CkBAIC0yNDEsMTcgKzI3MCwxNyBA
QCBuc1ZpZGVvRnJhbWU6OlJlZmxvdyhuc1ByZXNDb250ZXh0KiAgICAgICAgICAgYVByZXNDb250
ZXh0LAogICBhTWV0cmljcy53aWR0aCArPSBtQm9yZGVyUGFkZGluZy5sZWZ0ICsgbUJvcmRlclBh
ZGRpbmcucmlnaHQ7CiAgIGFNZXRyaWNzLmhlaWdodCArPSBtQm9yZGVyUGFkZGluZy50b3AgKyBt
Qm9yZGVyUGFkZGluZy5ib3R0b207CiAKICAgLy8gUmVmbG93IHRoZSBjaGlsZCBmcmFtZXMuIFdl
IG1heSBoYXZlIHVwIHRvIHR3bywgYW4gaW1hZ2UgZnJhbWUKICAgLy8gd2hpY2ggaXMgdGhlIHBv
c3RlciwgYW5kIGEgYm94IGZyYW1lLCB3aGljaCBpcyB0aGUgdmlkZW8gY29udHJvbHMuCiAgIGZv
ciAobnNJRnJhbWUgKmNoaWxkID0gbUZyYW1lcy5GaXJzdENoaWxkKCk7CiAgICAgICAgY2hpbGQ7
CiAgICAgICAgY2hpbGQgPSBjaGlsZC0+R2V0TmV4dFNpYmxpbmcoKSkgewotICAgIGlmIChjaGls
ZC0+R2V0VHlwZSgpID09IG5zR2tBdG9tczo6aW1hZ2VGcmFtZSkgeworICAgIGlmIChjaGlsZC0+
R2V0Q29udGVudCgpID09IG1Qb3N0ZXJJbWFnZSkgewogICAgICAgLy8gUmVmbG93IHRoZSBwb3N0
ZXIgZnJhbWUuCiAgICAgICBuc0ltYWdlRnJhbWUqIGltYWdlRnJhbWUgPSBzdGF0aWNfY2FzdDxu
c0ltYWdlRnJhbWUqPihjaGlsZCk7CiAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzIGtpZERlc2ly
ZWRTaXplOwogICAgICAgbnNTaXplIGF2YWlsYWJsZVNpemUgPSBuc1NpemUoYVJlZmxvd1N0YXRl
LmF2YWlsYWJsZVdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVJl
Zmxvd1N0YXRlLmF2YWlsYWJsZUhlaWdodCk7CiAgICAgICBuc0hUTUxSZWZsb3dTdGF0ZSBraWRS
ZWZsb3dTdGF0ZShhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhUmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbWFnZUZyYW1lLApAQCAtMjgxLDI1ICszMTAsNDMgQEAgbnNWaWRlb0ZyYW1lOjpSZWZs
b3cobnNQcmVzQ29udGV4dCogICAgICAgICAgIGFQcmVzQ29udGV4dCwKICAgICAgIGtpZFJlZmxv
d1N0YXRlLlNldENvbXB1dGVkSGVpZ2h0KHNjYWxlZFBvc3RlclNpemUuaGVpZ2h0KTsKICAgICAg
IHBvc3RlclRvcExlZnQueCA9ICgoY29tcHV0ZWRBcmVhLndpZHRoIC0gc2NhbGVkUG9zdGVyU2l6
ZS53aWR0aCkgLyAyKSArIG1Cb3JkZXJQYWRkaW5nLmxlZnQ7CiAgICAgICBwb3N0ZXJUb3BMZWZ0
LnkgPSAoKGNvbXB1dGVkQXJlYS5oZWlnaHQgLSBzY2FsZWRQb3N0ZXJTaXplLmhlaWdodCkgLyAy
KSArIG1Cb3JkZXJQYWRkaW5nLnRvcDsKIAogICAgICAgUmVmbG93Q2hpbGQoaW1hZ2VGcmFtZSwg
YVByZXNDb250ZXh0LCBraWREZXNpcmVkU2l6ZSwga2lkUmVmbG93U3RhdGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3N0ZXJUb3BMZWZ0LngsIHBvc3RlclRvcExlZnQueSwgMCwgYVN0YXR1
cyk7CiAgICAgICBGaW5pc2hSZWZsb3dDaGlsZChpbWFnZUZyYW1lLCBhUHJlc0NvbnRleHQsICZr
aWRSZWZsb3dTdGF0ZSwga2lkRGVzaXJlZFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBw
b3N0ZXJUb3BMZWZ0LngsIHBvc3RlclRvcExlZnQueSwgMCk7Ci0gICAgfSBlbHNlIGlmIChjaGls
ZC0+R2V0VHlwZSgpID09IG5zR2tBdG9tczo6Ym94RnJhbWUpIHsKKyAgICB9IGVsc2UgaWYgKGNo
aWxkLT5HZXRDb250ZW50KCkgPT0gbVZpZGVvQ29udHJvbHMpIHsKICAgICAgIC8vIFJlZmxvdyB0
aGUgdmlkZW8gY29udHJvbHMgZnJhbWUuCiAgICAgICBuc0JveExheW91dFN0YXRlIGJveFN0YXRl
KFByZXNDb250ZXh0KCksIGFSZWZsb3dTdGF0ZS5yZW5kQ29udGV4dCk7CiAgICAgICBuc0JveEZy
YW1lOjpMYXlvdXRDaGlsZEF0KGJveFN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNSZWN0KG1Cb3Jk
ZXJQYWRkaW5nLmxlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
Qm9yZGVyUGFkZGluZy50b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhUmVmbG93U3RhdGUuQ29tcHV0ZWRXaWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYVJlZmxvd1N0YXRlLkNvbXB1dGVkSGVpZ2h0KCkpKTsKKyAgICB9IGVs
c2UgaWYgKGNoaWxkLT5HZXRDb250ZW50KCkgPT0gbUNhcHRpb25EaXYpIHsKKyAgICAgIC8vIFJl
ZmxvdyB0byBjYXB0aW9uIGRpdgorICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyBraWREZXNpcmVk
U2l6ZTsKKyAgICAgIG5zU2l6ZSBhdmFpbGFibGVTaXplID0gbnNTaXplKGFSZWZsb3dTdGF0ZS5h
dmFpbGFibGVXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFSZWZs
b3dTdGF0ZS5hdmFpbGFibGVIZWlnaHQpOworICAgICAgbnNIVE1MUmVmbG93U3RhdGUga2lkUmVm
bG93U3RhdGUoYVByZXNDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYVJlZmxvd1N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFi
bGVTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU1ldHJpY3Mu
d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTWV0cmljcy5o
ZWlnaHQpOworICAgICAga2lkUmVmbG93U3RhdGUuU2V0Q29tcHV0ZWRXaWR0aChhUmVmbG93U3Rh
dGUuQ29tcHV0ZWRXaWR0aCgpKTsKKyAgICAgIGtpZFJlZmxvd1N0YXRlLlNldENvbXB1dGVkSGVp
Z2h0KGFSZWZsb3dTdGF0ZS5Db21wdXRlZEhlaWdodCgpKTsKKyAgICAgIFJlZmxvd0NoaWxkKGNo
aWxkLCBhUHJlc0NvbnRleHQsIGtpZERlc2lyZWRTaXplLCBraWRSZWZsb3dTdGF0ZSwKKyAgICAg
ICAgICAgICAgICAgIG1Cb3JkZXJQYWRkaW5nLmxlZnQsIG1Cb3JkZXJQYWRkaW5nLnRvcCwgMCwg
YVN0YXR1cyk7CisgICAgICBGaW5pc2hSZWZsb3dDaGlsZChjaGlsZCwgYVByZXNDb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgJmtpZFJlZmxvd1N0YXRlLCBraWREZXNpcmVkU2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1Cb3JkZXJQYWRkaW5nLmxlZnQsIG1Cb3JkZXJQYWRk
aW5nLnRvcCwgMCk7CiAgICAgfQogICB9CiAgIGFNZXRyaWNzLlNldE92ZXJmbG93QXJlYXNUb0Rl
c2lyZWRCb3VuZHMoKTsKIAogICBGaW5pc2hBbmRTdG9yZU92ZXJmbG93KCZhTWV0cmljcyk7CiAK
ICAgTlNfRlJBTUVfVFJBQ0UoTlNfRlJBTUVfVFJBQ0VfQ0FMTFMsCiAgICAgICAgICAgICAgICAg
ICAoImV4aXQgbnNWaWRlb0ZyYW1lOjpSZWZsb3c6IHNpemU9JWQsJWQiLApAQCAtMzgxLDI3ICs0
MjgsMjMgQEAgbnNWaWRlb0ZyYW1lOjpCdWlsZERpc3BsYXlMaXN0KG5zRGlzcGxheUxpc3RCdWls
ZGVyKiAgIGFCdWlsZGVyLAogICBuc0Rpc3BsYXlMaXN0IHJlcGxhY2VkQ29udGVudDsKIAogICBp
ZiAoSGFzVmlkZW9FbGVtZW50KCkgJiYgIVNob3VsZERpc3BsYXlQb3N0ZXIoKSkgewogICAgIHJ2
ID0gcmVwbGFjZWRDb250ZW50LkFwcGVuZE5ld1RvVG9wKAogICAgICAgbmV3IChhQnVpbGRlcikg
bnNEaXNwbGF5VmlkZW8oYUJ1aWxkZXIsIHRoaXMpKTsKICAgICBOU19FTlNVUkVfU1VDQ0VTUyhy
diwgcnYpOwogICB9CiAKLSAgLy8gQWRkIGNoaWxkIGZyYW1lcyB0byBkaXNwbGF5IGxpc3QuIFdl
IGV4cGVjdCB1cCB0byB0d28gY2hpbGRyZW4sIGFuIGltYWdlCi0gIC8vIGZyYW1lIGZvciB0aGUg
cG9zdGVyLCBhbmQgdGhlIGJveCBmcmFtZSBmb3IgdGhlIHZpZGVvIGNvbnRyb2xzLgorICAvLyBB
ZGQgY2hpbGQgZnJhbWVzIHRvIGRpc3BsYXkgbGlzdC4gV2UgZXhwZWN0IHZhcmlvdXMgY2hpbGRy
ZW4sCisgIC8vIGJ1dCBvbmx5IHdhbnQgdG8gZHJhdyBtUG9zdGVySW1hZ2UgY29uZGl0aW9uYWxs
eS4gT3RoZXJzIHdlCisgIC8vIGFsd2F5cyBhZGQgdG8gdGhlIGRpc3BsYXkgbGlzdC4KICAgZm9y
IChuc0lGcmFtZSAqY2hpbGQgPSBtRnJhbWVzLkZpcnN0Q2hpbGQoKTsKICAgICAgICBjaGlsZDsK
ICAgICAgICBjaGlsZCA9IGNoaWxkLT5HZXROZXh0U2libGluZygpKSB7Ci0gICAgaWYgKGNoaWxk
LT5HZXRUeXBlKCkgPT0gbnNHa0F0b21zOjppbWFnZUZyYW1lICYmIFNob3VsZERpc3BsYXlQb3N0
ZXIoKSkgewotICAgICAgcnYgPSBjaGlsZC0+QnVpbGREaXNwbGF5TGlzdEZvclN0YWNraW5nQ29u
dGV4dChhQnVpbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYURpcnR5UmVjdCAtIGNoaWxkLT5HZXRPZmZzZXRUbyh0aGlzKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlcGxhY2Vk
Q29udGVudCk7Ci0gICAgICBOU19FTlNVUkVfU1VDQ0VTUyhydixydik7Ci0gICAgfSBlbHNlIGlm
IChjaGlsZC0+R2V0VHlwZSgpID09IG5zR2tBdG9tczo6Ym94RnJhbWUpIHsKKyAgICBpZiAoY2hp
bGQtPkdldENvbnRlbnQoKSAhPSBtUG9zdGVySW1hZ2UgfHwgU2hvdWxkRGlzcGxheVBvc3Rlcigp
KSB7CiAgICAgICBydiA9IGNoaWxkLT5CdWlsZERpc3BsYXlMaXN0Rm9yU3RhY2tpbmdDb250ZXh0
KGFCdWlsZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhRGlydHlSZWN0IC0gY2hpbGQtPkdldE9mZnNldFRvKHRoaXMpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVwbGFjZWRDb250
ZW50KTsKICAgICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LHJ2KTsKICAgICB9CiAgIH0KIAogICBX
cmFwUmVwbGFjZWRDb250ZW50Rm9yQm9yZGVyUmFkaXVzKGFCdWlsZGVyLCAmcmVwbGFjZWRDb250
ZW50LCBhTGlzdHMpOwpkaWZmIC0tZ2l0IGEvbGF5b3V0L2dlbmVyaWMvbnNWaWRlb0ZyYW1lLmgg
Yi9sYXlvdXQvZ2VuZXJpYy9uc1ZpZGVvRnJhbWUuaAppbmRleCAyYTI4MDc1Li45ZmYxZTVkIDEw
MDY0NAotLS0gYS9sYXlvdXQvZ2VuZXJpYy9uc1ZpZGVvRnJhbWUuaAorKysgYi9sYXlvdXQvZ2Vu
ZXJpYy9uc1ZpZGVvRnJhbWUuaApAQCAtODQsMTYgKzg0LDE4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhRmlsdGVycykgTU9aX09W
RVJSSURFOwogCiAgIG5zSUNvbnRlbnQqIEdldFBvc3RlckltYWdlKCkgeyByZXR1cm4gbVBvc3Rl
ckltYWdlOyB9CiAKICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBkaXNwbGF5IHRoZSBw
b3N0ZXIuIE5vdGUgdGhhdCBvbmNlIHdlIHNob3cKICAgLy8gYSB2aWRlbyBmcmFtZSwgdGhlIHBv
c3RlciB3aWxsIG5ldmVyIGJlIGRpc3BsYXllZCBhZ2Fpbi4KICAgYm9vbCBTaG91bGREaXNwbGF5
UG9zdGVyKCk7CiAKKyAgbnNJQ29udGVudCAqR2V0Q2FwdGlvbk92ZXJsYXkoKSB7IHJldHVybiBt
Q2FwdGlvbkRpdjsgfQorCiAjaWZkZWYgREVCVUcKICAgTlNfSU1FVEhPRCBHZXRGcmFtZU5hbWUo
bnNBU3RyaW5nJiBhUmVzdWx0KSBjb25zdDsKICNlbmRpZgogCiAgIGFscmVhZHlfQWRkUmVmZWQ8
TGF5ZXI+IEJ1aWxkTGF5ZXIobnNEaXNwbGF5TGlzdEJ1aWxkZXIqIGFCdWlsZGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWVyTWFuYWdlciogYU1hbmFnZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNEaXNwbGF5SXRlbSogYUl0ZW0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyUGFy
YW1ldGVycyYgYUNvbnRhaW5lclBhcmFtZXRlcnMpOwpAQCAtMTE4LDExICsxMjAsMTUgQEAgcHJv
dGVjdGVkOgogCiAgIG5zTWFyZ2luIG1Cb3JkZXJQYWRkaW5nOwogCiAgIC8vIEFub255bW91cyBj
aGlsZCB3aGljaCBpcyBib3VuZCB2aWEgWEJMIHRvIHRoZSB2aWRlbyBjb250cm9scy4KICAgbnND
T01QdHI8bnNJQ29udGVudD4gbVZpZGVvQ29udHJvbHM7CiAKICAgLy8gQW5vbnltb3VzIGNoaWxk
IHdoaWNoIGlzIHRoZSBpbWFnZSBlbGVtZW50IG9mIHRoZSBwb3N0ZXIgZnJhbWUuCiAgIG5zQ09N
UHRyPG5zSUNvbnRlbnQ+IG1Qb3N0ZXJJbWFnZTsKKworICAvLyBBbm9ueW1vdXMgY2hpbGQgd2hp
Y2ggaXMgdGhlIHRleHQgdHJhY2sgY2FwdGlvbiBkaXNwbGF5IGRpdi4KKyAgbnNDT01QdHI8bnNJ
Q29udGVudD4gbUNhcHRpb25EaXY7CisKIH07CiAKICNlbmRpZiAvKiBuc1ZpZGVvRnJhbWVfaF9f
XyAqLwpkaWZmIC0tZ2l0IGEvbGF5b3V0L3N0eWxlL2h0bWwuY3NzIGIvbGF5b3V0L3N0eWxlL2h0
bWwuY3NzCmluZGV4IGE5ODhkNjguLjdmYmMwMDggMTAwNjQ0Ci0tLSBhL2xheW91dC9zdHlsZS9o
dG1sLmNzcworKysgYi9sYXlvdXQvc3R5bGUvaHRtbC5jc3MKQEAgLTcxOCwxNiArNzE4LDI5IEBA
IGF1ZGlvOm5vdChbY29udHJvbHNdKSB7CiB9CiAKICp8Kjo6LW1vei1odG1sLWNhbnZhcy1jb250
ZW50IHsKICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgLyogd2Ugd2FudCB0byBiZSBh
biBhYnNvbHV0ZSBhbmQgZml4ZWQgY29udGFpbmVyICovCiAgIC1tb3otdHJhbnNmb3JtOiB0cmFu
c2xhdGUoMCkgIWltcG9ydGFudDsKIH0KIAordmlkZW8gPiBkaXYuY2FwdGlvbkRpdiB7CisgIHRl
eHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGZvbnQtc2l6ZTogMjRw
eDsKKyAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cit9CisKK3ZpZGVvID4gZGl2LmNhcHRpb25EaXYg
cCB7CisgIGNvbG9yOiBnb2xkOworICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwNSwxMDUsMTA1
LDAuNCk7CisgIHBvaW50ZXItZXZlbnRzOiBhdXRvOworfQorCiAvKiBlbXVsYXRpb24gb2Ygbm9u
LXN0YW5kYXJkIEhUTUwgPG1hcnF1ZWU+IHRhZyAqLwogbWFycXVlZSB7CiAgIHdpZHRoOiAtbW96
LWF2YWlsYWJsZTsKICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICB2ZXJ0aWNhbC1hbGlnbjog
dGV4dC1ib3R0b207CiAgIHRleHQtYWxpZ246IHN0YXJ0OwogICAtbW96LWJpbmRpbmc6IHVybCgn
Y2hyb21lOi8veGJsLW1hcnF1ZWUvY29udGVudC94YmwtbWFycXVlZS54bWwjbWFycXVlZS1ob3Jp
em9udGFsJyk7CiB9CmRpZmYgLS1naXQgYS9tZWRpYS93ZWJ2dHQvTWFrZWZpbGUuaW4gYi9tZWRp
YS93ZWJ2dHQvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MWJjMmI3NAotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL3dlYnZ0dC9NYWtlZmlsZS5pbgpAQCAt
MCwwICsxLDI4IEBACisjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0
ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkg
b2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworIyBmaWxlLCBZb3UgY2Fu
IG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLgorCitERVBUSAkJPSAu
Li8uLgordG9wc3JjZGlyICAgICAgID0gQHRvcF9zcmNkaXJACitzcmNkaXIgICAgICAgICAgPSBA
c3JjZGlyQAorVlBBVEggICAgICAgICAgID0gQHNyY2RpckAKKworaW5jbHVkZSAkKERFUFRIKS9j
b25maWcvYXV0b2NvbmYubWsKKworTU9EVUxFCQk9IHdlYnZ0dAorTElCUkFSWV9OQU1FCT0gd2Vi
dnR0CitGT1JDRV9TVEFUSUNfTElCPSAxCisKK0VYUE9SVFMgPSBcCisgIHdlYnZ0dC5oIFwKKyAg
JChOVUxMKQorCitWUEFUSCArPSBcCisgICQoc3JjZGlyKS9zcmMgXAorICAkKE5VTEwpCisKK0NT
UkNTID0gXAorICB3ZWJ2dHQuYyBcCisgICQoTlVMTCkKKworaW5jbHVkZSAkKHRvcHNyY2Rpcikv
Y29uZmlnL3J1bGVzLm1rCmRpZmYgLS1naXQgYS9tZWRpYS93ZWJ2dHQvdXBkYXRlLnNoIGIvbWVk
aWEvd2VidnR0L3VwZGF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43
ZWU2ODc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvd2VidnR0L3VwZGF0ZS5zaApAQCAtMCww
ICsxLDEzIEBACisjIS9iaW4vc2gKKyMgc2NyaXB0IHRvIHVwZGF0ZSB0aGUgd2VidnR0IGxpYnJh
cnkgc291cmNlCisKK1VSTD1odHRwczovL2dpdGh1Yi5jb20vcmlsbGlhbi93ZWJ2dHQuZ2l0CitT
UkNESVI9c3JjCisKK2lmIFsgLWQgJHtTUkNESVJ9Ly5naXQgXTsgdGhlbgorICBlY2hvICJVcGRh
dGluZyBleGlzdGluZyBjaGVja291dC4uLiIKKyAgY2QgJHtTUkNESVJ9ICYmIGdpdCBwdWxsCitl
bHNlCisgIGVjaG8gIkRvd25sb2FkaW5nIHNvdXJjZSBmcm9tICR7VVJMfSIKKyAgZ2l0IGNsb25l
ICR7VVJMfSAke1NSQ0RJUn0KK2ZpCmRpZmYgLS1naXQgYS9wYXJzZXIvaHRtbHBhcnNlci9wdWJs
aWMvbnNIVE1MVGFnTGlzdC5oIGIvcGFyc2VyL2h0bWxwYXJzZXIvcHVibGljL25zSFRNTFRhZ0xp
c3QuaAppbmRleCA4OTgzMzZmLi44ZDA5YjE3IDEwMDY0NAotLS0gYS9wYXJzZXIvaHRtbHBhcnNl
ci9wdWJsaWMvbnNIVE1MVGFnTGlzdC5oCisrKyBiL3BhcnNlci9odG1scGFyc2VyL3B1YmxpYy9u
c0hUTUxUYWdMaXN0LmgKQEAgLTE1MCwxNiArMTUwLDE5IEBAIEhUTUxfVEFHKHRib2R5LCBUYWJs
ZVNlY3Rpb24pCiBIVE1MX1RBRyh0ZCwgVGFibGVDZWxsKQogSFRNTF9UQUcodGV4dGFyZWEsIFRl
eHRBcmVhKQogSFRNTF9UQUcodGZvb3QsIFRhYmxlU2VjdGlvbikKIEhUTUxfVEFHKHRoLCBUYWJs
ZUNlbGwpCiBIVE1MX1RBRyh0aGVhZCwgVGFibGVTZWN0aW9uKQogSFRNTF9UQUcodGl0bGUsIFRp
dGxlKQogSFRNTF9UQUcodHIsIFRhYmxlUm93KQogSFRNTF9IVE1MRUxFTUVOVF9UQUcodHQpCisj
aWYgZGVmaW5lZChNT1pfTUVESUEpCitIVE1MX1RBRyh0cmFjaywgVHJhY2spCisjZW5kaWYKIEhU
TUxfSFRNTEVMRU1FTlRfVEFHKHUpCiBIVE1MX1RBRyh1bCwgVUxpc3QpCiBIVE1MX0hUTUxFTEVN
RU5UX1RBRyh2YXIpCiAjaWYgZGVmaW5lZChNT1pfTUVESUEpCiBIVE1MX1RBRyh2aWRlbywgVmlk
ZW8pCiAjZW5kaWYKIEhUTUxfSFRNTEVMRU1FTlRfVEFHKHdicikKIEhUTUxfSFRNTEVMRU1FTlRf
VEFHKHhtcCkKZGlmZiAtLWdpdCBhL3BhcnNlci9odG1scGFyc2VyL3NyYy9uc0VsZW1lbnRUYWJs
ZS5jcHAgYi9wYXJzZXIvaHRtbHBhcnNlci9zcmMvbnNFbGVtZW50VGFibGUuY3BwCmluZGV4IGQy
MzNhYjUuLjdjNmZkNzYgMTAwNjQ0Ci0tLSBhL3BhcnNlci9odG1scGFyc2VyL3NyYy9uc0VsZW1l
bnRUYWJsZS5jcHAKKysrIGIvcGFyc2VyL2h0bWxwYXJzZXIvc3JjL25zRWxlbWVudFRhYmxlLmNw
cApAQCAtNDAsMTYgKzQwLDE3IEBAIERFQ0xfVEFHX0xJU1QoZ0NvbFBhcmVudHMse2VIVE1MVGFn
X3RhYmxlIENPTU1BIGVIVE1MVGFnX2NvbGdyb3VwfSkKIERFQ0xfVEFHX0xJU1QoZ0ZyYW1lc2V0
UGFyZW50cyx7ZUhUTUxUYWdfaHRtbCBDT01NQSBlSFRNTFRhZ19mcmFtZXNldH0pCiBERUNMX1RB
R19MSVNUKGdMZWdlbmRQYXJlbnRzLHtlSFRNTFRhZ19maWVsZHNldH0pCiBERUNMX1RBR19MSVNU
KGdBcmVhUGFyZW50LHtlSFRNTFRhZ19tYXB9KQogREVDTF9UQUdfTElTVChnUGFyYW1QYXJlbnRz
LHtlSFRNTFRhZ19hcHBsZXQgQ09NTUEgZUhUTUxUYWdfb2JqZWN0fSkKIERFQ0xfVEFHX0xJU1Qo
Z1RSUGFyZW50cyx7ZUhUTUxUYWdfdGJvZHkgQ09NTUEgZUhUTUxUYWdfdGZvb3QgQ09NTUEgZUhU
TUxUYWdfdGhlYWQgQ09NTUEgZUhUTUxUYWdfdGFibGV9KQogREVDTF9UQUdfTElTVChnVFJFbmRQ
YXJlbnRzLHtlSFRNTFRhZ190Ym9keSBDT01NQSBlSFRNTFRhZ190Zm9vdCBDT01NQSBlSFRNTFRh
Z190aGVhZCBDT01NQSBlSFRNTFRhZ190YWJsZSBDT01NQSBlSFRNTFRhZ19hcHBsZXR9KQogI2lm
ZGVmIE1PWl9NRURJQQogREVDTF9UQUdfTElTVChnU291cmNlUGFyZW50cyx7ZUhUTUxUYWdfdmlk
ZW8gQ09NTUEgZUhUTUxUYWdfYXVkaW99KQorREVDTF9UQUdfTElTVChnVHJhY2tQYXJlbnRzLHtl
SFRNTFRhZ192aWRlbyBDT01NQSBlSFRNTFRhZ19hdWRpb30pCiAjZW5kaWYKIAogLy8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC8vICBOZXh0LCBkZWZpbmUgdGhlIHNldCBv
ZiB0YWdsaXN0cyBmb3IgdGFncyB3aXRoIHNwZWNpYWwga2lkcy4uLgogLy8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKIAogREVDTF9UQUdfTElTVChnQ29udGFpbnNUZXh0LHtl
SFRNTFRhZ190ZXh0IENPTU1BIGVIVE1MVGFnX25ld2xpbmUgQ09NTUEgZUhUTUxUYWdfd2hpdGVz
cGFjZSBDT01NQSBlSFRNTFRhZ19lbnRpdHl9KQogREVDTF9UQUdfTElTVChnVW5rbm93bktpZHMs
e2VIVE1MVGFnX2h0bWwgQ09NTUEgZUhUTUxUYWdfZnJhbWVzZXR9KQpAQCAtMTIxNCwxNiArMTIx
NSwyNyBAQCBjb25zdCBuc0hUTUxFbGVtZW50IGdIVE1MRWxlbWVudHNbXSA9IHsKICAgICAvKnRh
ZyovICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlSFRNTFRhZ190dCwKICAgICAvKnJlcS1w
YXJlbnQgZXhjbC1wYXJlbnQqLyAgICAgICAgICBlSFRNTFRhZ191bmtub3duLGVIVE1MVGFnX3Vu
a25vd24sCiAgICAgLypyb290bm9kZXMsZW5kcm9vdG5vZGVzKi8gICAgICAgICAgJmdSb290VGFn
cywmZ1Jvb3RUYWdzLAogICAgIC8qYXV0b2Nsb3NlIHN0YXJ0dGFncyBhbmQgZW5kdGFncyovIDAs
MCwwLDAsCiAgICAgLypwYXJlbnQsaW5jbCxleGNsZ3JvdXBzKi8gICAgICAgICAga0ZvbnRTdHls
ZSwgKGtTZWxmfGtJbmxpbmVFbnRpdHkpLCBrTm9uZSwKICAgICAvKnNwZWNpYWwgcHJvcHMsIHBy
b3AtcmFuZ2UqLyAgICAgICAwLCBrRGVmYXVsdFByb3BSYW5nZSwKICAgICAvKnNwZWNpYWwgcGFy
ZW50cyxraWRzKi8gICAgICAgICAgICAwLDAsCiAgIH0sCisjaWYgZGVmaW5lZChNT1pfTUVESUEp
CisgIHsKKyAgICAvKnRhZyovICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlSFRNTFRhZ190
cmFjaywKKyAgICAvKnJlcS1wYXJlbnQgZXhjbC1wYXJlbnQqLyAgICAgICAgICBlSFRNTFRhZ191
bmtub3duLGVIVE1MVGFnX3Vua25vd24sCisgICAgLypyb290bm9kZXMsZW5kcm9vdG5vZGVzKi8g
ICAgICAgICAgJmdUcmFja1BhcmVudHMsJmdUcmFja1BhcmVudHMsCisgICAgLyphdXRvY2xvc2Ug
c3RhcnR0YWdzIGFuZCBlbmR0YWdzKi8gJmdQQXV0b0Nsb3NlLCAwLCAwLDAsCisgICAgLypwYXJl
bnQsaW5jbCxleGNsZ3JvdXBzKi8gICAgICAgICAga1NwZWNpYWwsIGtOb25lLCBrTm9uZSwKKyAg
ICAvKnNwZWNpYWwgcHJvcHMsIHByb3AtcmFuZ2UqLyAgICAgICBrTm9uQ29udGFpbmVyLGtOb1By
b3BSYW5nZSwKKyAgICAvKnNwZWNpYWwgcGFyZW50cyxraWRzKi8gICAgICAgICAgICAmZ1RyYWNr
UGFyZW50cywwLAorICB9LAorI2VuZGlmCiAgIHsKICAgICAvKnRhZyovICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlSFRNTFRhZ191LAogICAgIC8qcmVxLXBhcmVudCBleGNsLXBhcmVudCov
ICAgICAgICAgIGVIVE1MVGFnX3Vua25vd24sZUhUTUxUYWdfdW5rbm93biwKICAgICAvKnJvb3Ru
b2RlcyxlbmRyb290bm9kZXMqLyAgICAgICAgICAmZ1Jvb3RUYWdzLCZnUm9vdFRhZ3MsCiAgICAg
LyphdXRvY2xvc2Ugc3RhcnR0YWdzIGFuZCBlbmR0YWdzKi8gMCwwLDAsMCwKICAgICAvKnBhcmVu
dCxpbmNsLGV4Y2xncm91cHMqLyAgICAgICAgICBrRm9udFN0eWxlLCAoa1NlbGZ8a0lubGluZUVu
dGl0eSksIGtOb25lLAogICAgIC8qc3BlY2lhbCBwcm9wcywgcHJvcC1yYW5nZSovICAgICAgIDAs
IGtEZWZhdWx0UHJvcFJhbmdlLAogICAgIC8qc3BlY2lhbCBwYXJlbnRzLGtpZHMqLyAgICAgICAg
ICAgIDAsMCwKZGlmZiAtLWdpdCBhL3BhcnNlci9odG1scGFyc2VyL3NyYy9uc0hUTUxUYWdzLmNw
cCBiL3BhcnNlci9odG1scGFyc2VyL3NyYy9uc0hUTUxUYWdzLmNwcAppbmRleCBlMzUxYzNkLi42
ZmU2M2QzIDEwMDY0NAotLS0gYS9wYXJzZXIvaHRtbHBhcnNlci9zcmMvbnNIVE1MVGFncy5jcHAK
KysrIGIvcGFyc2VyL2h0bWxwYXJzZXIvc3JjL25zSFRNTFRhZ3MuY3BwCkBAIC0yNTIsMTYgKzI1
MiwyMCBAQCBzdGF0aWMgY29uc3QgUFJVbmljaGFyIHNIVE1MVGFnVW5pY29kZU5hbWVfdGZvb3Rb
XSA9CiBzdGF0aWMgY29uc3QgUFJVbmljaGFyIHNIVE1MVGFnVW5pY29kZU5hbWVfdGhbXSA9CiAg
IHsndCcsICdoJywgJ1wwJ307CiBzdGF0aWMgY29uc3QgUFJVbmljaGFyIHNIVE1MVGFnVW5pY29k
ZU5hbWVfdGhlYWRbXSA9CiAgIHsndCcsICdoJywgJ2UnLCAnYScsICdkJywgJ1wwJ307CiBzdGF0
aWMgY29uc3QgUFJVbmljaGFyIHNIVE1MVGFnVW5pY29kZU5hbWVfdGl0bGVbXSA9CiAgIHsndCcs
ICdpJywgJ3QnLCAnbCcsICdlJywgJ1wwJ307CiBzdGF0aWMgY29uc3QgUFJVbmljaGFyIHNIVE1M
VGFnVW5pY29kZU5hbWVfdHJbXSA9CiAgIHsndCcsICdyJywgJ1wwJ307CisjaWYgZGVmaW5lZChN
T1pfTUVESUEpCitzdGF0aWMgY29uc3QgUFJVbmljaGFyIHNIVE1MVGFnVW5pY29kZU5hbWVfdHJh
Y2tbXSA9CisgIHsndCcsICdyJywgJ2EnLCAnYycsICdrJywgJ1wwJ307CisjZW5kaWYKIHN0YXRp
YyBjb25zdCBQUlVuaWNoYXIgc0hUTUxUYWdVbmljb2RlTmFtZV90dFtdID0KICAgeyd0JywgJ3Qn
LCAnXDAnfTsKIHN0YXRpYyBjb25zdCBQUlVuaWNoYXIgc0hUTUxUYWdVbmljb2RlTmFtZV91W10g
PQogICB7J3UnLCAnXDAnfTsKIHN0YXRpYyBjb25zdCBQUlVuaWNoYXIgc0hUTUxUYWdVbmljb2Rl
TmFtZV91bFtdID0KICAgeyd1JywgJ2wnLCAnXDAnfTsKIHN0YXRpYyBjb25zdCBQUlVuaWNoYXIg
c0hUTUxUYWdVbmljb2RlTmFtZV92YXJbXSA9CiAgIHsndicsICdhJywgJ3InLCAnXDAnfTsKZGlm
ZiAtLWdpdCBhL3Rvb2xraXQvdG9vbGtpdC10aWVycy5tayBiL3Rvb2xraXQvdG9vbGtpdC10aWVy
cy5tawppbmRleCBmNWZlYWQxLi40MmE2ZmVlIDEwMDY0NAotLS0gYS90b29sa2l0L3Rvb2xraXQt
dGllcnMubWsKKysrIGIvdG9vbGtpdC90b29sa2l0LXRpZXJzLm1rCkBAIC0xMjgsMTYgKzEyOCwy
MCBAQCBlbmRpZgogCiBpZmRlZiBNT1pfT0dHCiB0aWVyX3BsYXRmb3JtX2RpcnMgKz0gXAogCQlt
ZWRpYS9saWJvZ2cgXAogCQltZWRpYS9saWJ0aGVvcmEgXAogCQkkKE5VTEwpCiBlbmRpZgogCitp
ZmRlZiBNT1pfV0VCVlRUCit0aWVyX3BsYXRmb3JtX2RpcnMgKz0gbWVkaWEvd2VidnR0CitlbmRp
ZgorCiBpZmRlZiBNT1pfU1lETkVZQVVESU8KIHRpZXJfcGxhdGZvcm1fZGlycyArPSBcCiAJCW1l
ZGlhL2xpYnN5ZG5leWF1ZGlvIFwKIAkJJChOVUxMKQogZW5kaWYKIAogaWZkZWYgTU9aX1dFQlJU
QwogdGllcl9wbGF0Zm9ybV9kaXJzICs9IFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>9386470</attachid>
            <date>2024-02-27 03:36:31 -0800</date>
            <delta_ts>2024-02-27 03:41:16 -0800</delta_ts>
            <desc>same problem</desc>
            <filename>file_629350.txt</filename>
            <type>text/html</type>
            <size>35</size>
            <attacher>yxaxyguveg</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIE5FVFNDQVBFLUJvb2ttYXJrLWZpbGUtMT4=
</data>

          </attachment>


    </bug>

</bugzilla>