<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[283146] branches/safari-612-branch</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/283146">283146</a></dd>
<dt>Author</dt> <dd>alancoon@apple.com</dd>
<dt>Date</dt> <dd>2021-09-27 15:49:35 -0700 (Mon, 27 Sep 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>Cherry-pick <a href="http://trac.webkit.org/projects/webkit/changeset/283035">r283035</a>. rdar://problem/83584492

    <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
    https://bugs.webkit.org/show_bug.cgi?id=229792
    <rdar://problem/82776741>

    Reviewed by Eric Carlson.

    Source/WebCore:

    We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
    We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
    This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.

    Test: fast/mediastream/video-rotation.html

    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
    (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
    (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
    * platform/graphics/cg/ImageBufferUtilitiesCG.h:

    Source/WebKit:

    Helper routined used in WTR.

    * Shared/API/c/cg/WKImageCG.cpp:
    (WKImageCreateDataURLFromImage):
    * Shared/API/c/cg/WKImageCG.h:

    Tools:

    Add testRunner API to take a view port snapshot as a PNG data URL.
    We can then use this data URL to validate some rendered pixel values.

    * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
    * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
    (WTR::InjectedBundle::didReceiveMessageToPage):
    * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
    (WTR::TestRunner::takeViewPortSnapshot):
    (WTR::TestRunner::viewPortSnapshotTaken):
    * WebKitTestRunner/InjectedBundle/TestRunner.h:
    * WebKitTestRunner/TestController.cpp:
    (WTR::TestController::takeViewPortSnapshot):
    * WebKitTestRunner/TestController.h:
    * WebKitTestRunner/TestInvocation.cpp:
    (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
    * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
    (WTR::TestController::takeViewPortSnapshot):

    LayoutTests:

    * fast/mediastream/video-rotation-expected.txt: Added.
    * fast/mediastream/video-rotation.html: Added.
    * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
    * platform/mac/fast/mediastream/video-rotation-expected.png: Added.

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283035 268f45cc-cd09-0410-ab3c-d52691b4dbfc</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchessafari612branchLayoutTestsChangeLog">branches/safari-612-branch/LayoutTests/ChangeLog</a></li>
<li><a href="#branchessafari612branchSourceWebCoreChangeLog">branches/safari-612-branch/Source/WebCore/ChangeLog</a></li>
<li><a href="#branchessafari612branchSourceWebCoreplatformgraphicsavfoundationobjcLocalSampleBufferDisplayLayerh">branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h</a></li>
<li><a href="#branchessafari612branchSourceWebCoreplatformgraphicsavfoundationobjcLocalSampleBufferDisplayLayermm">branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm</a></li>
<li><a href="#branchessafari612branchSourceWebCoreplatformgraphicscgImageBufferUtilitiesCGh">branches/safari-612-branch/Source/WebCore/platform/graphics/cg/ImageBufferUtilitiesCG.h</a></li>
<li><a href="#branchessafari612branchSourceWebKitChangeLog">branches/safari-612-branch/Source/WebKit/ChangeLog</a></li>
<li><a href="#branchessafari612branchSourceWebKitSharedAPIccgWKImageCGcpp">branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.cpp</a></li>
<li><a href="#branchessafari612branchSourceWebKitSharedAPIccgWKImageCGh">branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.h</a></li>
<li><a href="#branchessafari612branchToolsChangeLog">branches/safari-612-branch/Tools/ChangeLog</a></li>
<li><a href="#branchessafari612branchToolsWebKitTestRunnerInjectedBundleBindingsTestRunneridl">branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl</a></li>
<li><a href="#branchessafari612branchToolsWebKitTestRunnerInjectedBundleInjectedBundlecpp">branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp</a></li>
<li><a href="#branchessafari612branchToolsWebKitTestRunnerInjectedBundleTestRunnercpp">branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp</a></li>
<li><a href="#branchessafari612branchToolsWebKitTestRunnerInjectedBundleTestRunnerh">branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h</a></li>
<li><a href="#branchessafari612branchToolsWebKitTestRunnerTestControllercpp">branches/safari-612-branch/Tools/WebKitTestRunner/TestController.cpp</a></li>
<li><a href="#branchessafari612branchToolsWebKitTestRunnerTestControllerh">branches/safari-612-branch/Tools/WebKitTestRunner/TestController.h</a></li>
<li><a href="#branchessafari612branchToolsWebKitTestRunnerTestInvocationcpp">branches/safari-612-branch/Tools/WebKitTestRunner/TestInvocation.cpp</a></li>
<li><a href="#branchessafari612branchToolsWebKitTestRunnercocoaTestControllerCocoamm">branches/safari-612-branch/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#branchessafari612branchLayoutTestsfastmediastreamvideorotationexpectedtxt">branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation-expected.txt</a></li>
<li><a href="#branchessafari612branchLayoutTestsfastmediastreamvideorotationhtml">branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation.html</a></li>
<li>branches/safari-612-branch/LayoutTests/platform/ios-simulator/fast/mediastream/</li>
<li><a href="#branchessafari612branchLayoutTestsplatformiossimulatorfastmediastreamvideorotationexpectedpng">branches/safari-612-branch/LayoutTests/platform/ios-simulator/fast/mediastream/video-rotation-expected.png</a></li>
<li>branches/safari-612-branch/LayoutTests/platform/mac/fast/mediastream/</li>
<li><a href="#branchessafari612branchLayoutTestsplatformmacfastmediastreamvideorotationexpectedpng">branches/safari-612-branch/LayoutTests/platform/mac/fast/mediastream/video-rotation-expected.png</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchessafari612branchLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/LayoutTests/ChangeLog (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/LayoutTests/ChangeLog 2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/LayoutTests/ChangeLog    2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -1,5 +1,79 @@
</span><span class="cx"> 2021-09-27  Alan Coon  <alancoon@apple.com>
</span><span class="cx"> 
</span><ins>+        Cherry-pick r283035. rdar://problem/83584492
+
+    <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+    https://bugs.webkit.org/show_bug.cgi?id=229792
+    <rdar://problem/82776741>
+    
+    Reviewed by Eric Carlson.
+    
+    Source/WebCore:
+    
+    We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
+    We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
+    This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.
+    
+    Test: fast/mediastream/video-rotation.html
+    
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
+    (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
+    (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
+    * platform/graphics/cg/ImageBufferUtilitiesCG.h:
+    
+    Source/WebKit:
+    
+    Helper routined used in WTR.
+    
+    * Shared/API/c/cg/WKImageCG.cpp:
+    (WKImageCreateDataURLFromImage):
+    * Shared/API/c/cg/WKImageCG.h:
+    
+    Tools:
+    
+    Add testRunner API to take a view port snapshot as a PNG data URL.
+    We can then use this data URL to validate some rendered pixel values.
+    
+    * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+    * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+    (WTR::InjectedBundle::didReceiveMessageToPage):
+    * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+    (WTR::TestRunner::takeViewPortSnapshot):
+    (WTR::TestRunner::viewPortSnapshotTaken):
+    * WebKitTestRunner/InjectedBundle/TestRunner.h:
+    * WebKitTestRunner/TestController.cpp:
+    (WTR::TestController::takeViewPortSnapshot):
+    * WebKitTestRunner/TestController.h:
+    * WebKitTestRunner/TestInvocation.cpp:
+    (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+    * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+    (WTR::TestController::takeViewPortSnapshot):
+    
+    LayoutTests:
+    
+    * fast/mediastream/video-rotation-expected.txt: Added.
+    * fast/mediastream/video-rotation.html: Added.
+    * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
+    * platform/mac/fast/mediastream/video-rotation-expected.png: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283035 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-09-24  Youenn Fablet  <youenn@apple.com>
+
+            <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+            https://bugs.webkit.org/show_bug.cgi?id=229792
+            <rdar://problem/82776741>
+
+            Reviewed by Eric Carlson.
+
+            * fast/mediastream/video-rotation-expected.txt: Added.
+            * fast/mediastream/video-rotation.html: Added.
+            * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
+            * platform/mac/fast/mediastream/video-rotation-expected.png: Added.
+
+2021-09-27  Alan Coon  <alancoon@apple.com>
+
</ins><span class="cx">         Cherry-pick r282924. rdar://problem/83584505
</span><span class="cx"> 
</span><span class="cx">     Make SharedBuffer inherit from ThreadSafeRefCounted
</span></span></pre></div>
<a id="branchessafari612branchLayoutTestsfastmediastreamvideorotationexpectedtxt"></a>
<div class="addfile"><h4>Added: branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation-expected.txt (0 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation-expected.txt                              (rev 0)
+++ branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation-expected.txt 2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -0,0 +1,2 @@
</span><ins>+
+PASS
</ins></span></pre></div>
<a id="branchessafari612branchLayoutTestsfastmediastreamvideorotationhtml"></a>
<div class="addfile"><h4>Added: branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation.html (0 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation.html                              (rev 0)
+++ branches/safari-612-branch/LayoutTests/fast/mediastream/video-rotation.html 2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -0,0 +1,109 @@
</span><ins>+<!doctype html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>Testing video rotation</title>
+    </head>
+    <body>
+        <video style="z-index: 1; position: absolute; top: 0px; left: 0px;" id="video" autoplay playsInline></video>
+        <div style="z-index: 2; position: absolute; top: 5px; left: 0px; background-color:green; width:200px; height:390px"></div>
+        <image id='image'></image>
+        <canvas id='canvas'></canvas>
+        <div style="z-index: 3" id="log"></div>
+        <script>
+
+function getPixel(x, y, canvas, data)
+{
+    const position = 4 * (x * canvas.width + y);
+    return {r: data[position], g: data[position+1], b: data[position+2]};
+}
+
+function isPixelGreen(x, y, canvas, data)
+{
+   const pixel = getPixel(x, y, canvas, data);
+   return pixel.r === 0 && pixel.g === 128 && pixel.b === 0;
+}
+
+function isPixelWhite(x, y, canvas, data)
+{
+   const pixel = getPixel(x, y, canvas, data);
+   return pixel.r === 255 && pixel.g === 255 && pixel.b === 255;
+}
+
+async function validateSnapshot()
+{
+    const dataURL = await new Promise(resolve => testRunner.takeViewPortSnapshot(resolve));
+
+    const loadPromise = new Promise((resolve, reject) => {
+        image.onload = resolve;
+        image.onerror = reject;
+        setTimeout(() => reject("image load timed out"), 2000);
+    });
+    image.src = dataURL;
+    await loadPromise;
+
+    canvas.width = image.width;
+    canvas.height = image.height;
+    canvas.getContext('2d').drawImage(image, 0, 0);
+    const data = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height).data;
+
+    document.body.appendChild(canvas);
+
+    // We expect to have a green horizontal line until getting some white.
+    let j = 100;
+    if (!isPixelGreen(100, j, canvas, data))
+        return Promise.reject("first pixel is not green");
+
+    while (isPixelGreen(100, ++j, canvas, data)) { };
+
+    // We then expect a vertical line until the end of the canvas.
+    j = j + 5;
+    if (!isPixelWhite(100, j, canvas, data))
+        return Promise.reject("did not find white pixel");
+
+    let i = 100;
+    while (++i < canvas.height && isPixelWhite(i, j, canvas, data)) { };
+
+    return i === canvas.height;
+}
+
+onload = async () => {
+    try {
+        video.srcObject = await navigator.mediaDevices.getUserMedia({video: {width: 400, height: 200} });
+        await video.play();
+
+        if (!window.testRunner)
+            return;
+
+        testRunner.setMockCameraOrientation(90);
+        let counter = 0;
+        while (video.videoWidth !== 200 && ++counter < 100)
+            await new Promise(resolve => setTimeout(resolve, 50));
+
+        counter = 0;
+        let isValidSnapshot = false;
+        do {
+            await new Promise(resolve => setTimeout(resolve, 50));
+            isValidSnapshot = await validateSnapshot();
+        } while (++counter < 50 && !isValidSnapshot)
+
+        log.innerHTML = counter < 50 ? "PASS" : "FAIL";
+
+         if (counter < 50) {
+            document.body.removeChild(image);
+            document.body.removeChild(canvas);
+         }
+    } catch (e) {
+        console.log(e);
+    }
+
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+if (window.testRunner) {
+    testRunner.dumpAsText(true);
+    testRunner.waitUntilDone();
+}
+        </script>
+    </body>
+</html>
</ins></span></pre></div>
<a id="branchessafari612branchLayoutTestsplatformiossimulatorfastmediastreamvideorotationexpectedpng"></a>
<div class="addfile"><h4>Added: branches/safari-612-branch/LayoutTests/platform/ios-simulator/fast/mediastream/video-rotation-expected.png (0 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/LayoutTests/platform/ios-simulator/fast/mediastream/video-rotation-expected.png                               (rev 0)
+++ branches/safari-612-branch/LayoutTests/platform/ios-simulator/fast/mediastream/video-rotation-expected.png  2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -0,0 +1,206 @@
</span><ins>+\x89PNG
+
++IHDR@\xB0\xA3\x86\x97)tEXtchecksum12934a747eff1e218fd4db450c305da8\xD2\xE7\xA7sRGB\xAE\xCE\xE9DeXIfMM*\x87i\xA0\xA0@\xA0\xB0\x9B\x88\xEC~@IDATx\xEC\xDDɊd\x85\xBA\xE0]\xF6\xF6v\xA03\x87:)A\x9C\xF8\xEA;8\xF7>\x81\x88O\xE0\xF8
+
+*\x8A\x94\x82\xA2\xD8 \xEC\xFB\xBE\xEF\xEA\xDE\xD7ٕi\x9D\xAA\xB8\x87Ź\x9Ce\xD5\x90\x95\x91\x91\xB12\xFE\xFC\xFE5\xD8+#\xF3\xC0\xB2,G8\xB0\xCC\xDB\\x8E9\xB2\|\xF1\xC5\xCB+7ܰ<xpy\xE0\x81\x96\xDBn\xBBm\xF9\xED\xB7\xDF\xD6ϟ}\xF6\xD9˻ᄏ<\xF5\xD4SˡC\x87\x96\xA7\x9F~zy\xFF\xFD\xF7\x97\xB9}.s\xBF\xB9\xFF\x83>\xB8毿\xFE\xFA\xE5\x92K.Y\xBF\xEE\xFC\xB1~\xFE\x99g\x9EY}\xF4\xD1e\xDE\xCF\xFD\xFF\xFC\xF3\xCF5;\xF7\xF3\xB8u\xE3\xCD\xF9\x83>X\xCE;\xEF\xBC宻\xEEZz\xE8\xA1\xE5\xCE;\xEF\\xDDgwc;\xBB\x9B\xEB\xE3\xF9믿\xAE\xBE\x9C\x97\xF5\xF8;\x9D\x8E\xABK/\xBD\xF4\xD8\xF3\xE8\xFE\xFB\xEF_\xAE\xBB\xEE\xBA\xE5\x8D7\xDEX\xBE\xFA\xEA\xAB\xF5x\xF9\xEC\xB3ϖ\x97_~yy\xE5\x95W\x96W_}u\x99\x8F\xCF<\xF3\xCC\xF598\xC7э7޸\xDCs\xCF=\xEB\xF3\xF8\x9Ak\xAEY.\xBC\xF0\xC2\xF5\x98\x9A\xCF\xFD\xFE\xFB\xEF\xCBk\xAF\xBD\xB6<\xF9\xE4\x93\xEB\xFB\xB9m{\xFE\xCE\xFD\xAE\xBE\xFA\xEA5w\xEF\xBD\xF7\xAE3l\xFFo\x9C{\xEE\xB9\xEB\xE3>|\xD8\xE3\xFE\xAF\xF4\xA9\xE0|\xF3\xCD7/\xF7\xDDw\xD
 Fz\xDC\xF8\x87 @\x80 @\x80@\xA3\xC0Y'jN\xA2\x9Fq\xC6\xEB\xDBv};A\xBA\xDD>\xCF\xDB|\xFE\xF8\xCB\xDC笳\xCEZ\xDF\xE6\xFA\xDCg\xDE\xE6\xFD\xFE\xDCv\x{359F3F7}\xAF\xBF]\xF7\xB8'w\xB7\xCDpܶdn\xE7\xBCw\n\xC7\xD2v,\xCE\xFBS\xF9\xB8\x9A\xFD\xEF\xFF^\xCF9\xE7\x9CeJ\x91\xF9\x9E\xE7y9\xA5\xC4E]\xB4\x96i\xDB\xFD\xC6h.\xF3~\xEE3\x9F\xBF\xEC\xB2˖\xCB/\xBF|\xBD>%ǼM2E\xE5|\xCD-\xB3\xF7e\xCF?\xFF\xFC\xF5>W\q\xC5\xFAXs\xBF)H=\xEE^\xD1|*8ϱ\xE1B\x80 @\x80 @\xA0Y`g\xB2\x9DD\x9F\xF7s\xA2t.s\xE2n>\x9E\xA0sRs\xBB}\xFF79\xB7\xCD+\xE6D\xE8\xDCg\xEE?\x97\xB9}\xAE\xCFO\x83o\xB7\xED\xCF\xCD\xD7\xDE\xEE3\x9F\x9F\xB7\xED럎\x8F;'\xA2\xC7o\xDE\xE6\xFB\x9F\xCB\xF6\xFEx\xB7\xB1\xDA
+\x901\x9B7\xCEG\x95N\xD7\xE3j\x8E\x9F9\xA6̘WbMy1\xCF\xF3r^M4E\xC6[s\xD9\\xCDs\xF7\xDAk\xAF]n\xBA\xE9\xA6\xF5\xD5#\xF3\x8A\xB09\xB6\xB6d^I2\xAF\xF6؟\x99\xAF1\xC7\xE0d\xA78\x99ǻ\xF5\xD6[\xD7W:l\x9F\x9BǝW\x8By\xDCYV\xAB\xBF\xB3\xF3-\xB7\xDCr\xF4\xF1/ @\x80 @\x80\x81R\x81 s\xA2s~Z\xFB\xDBo\xBF]>\xFA\xE8\xA3\xF5\xA7\xC7\xE7\xE8\\xE6\xA4\xE7\x87~\xB8|\xF1\xC5\xCB?\xFC\xB0\x9ET=\xFE{\x9B\xEC\x9C$\x9D\xFB\xCD\xF5 .\xB8\xE0\xD8]\xE6\xEB|\xF2\xC9'\xCBO?\xFD\xB4\x9ETݾ\xEE\xDC\xC1\xE3^\xBA\x9A\x8C\xC5\xE6\xFC\xE5\x97_\xAE\xCE\xF3+s\xE6\xB2\xDFk>\x9E\xDB\xFE\xF9\xE7uW\xBF\xFC\xF2\xCBܴ^8=^\xE3t>\xAE>\xFE\xF8㵬\xF8\xF1\xC7\x8F \xF3\x9C\xDEu\m\xCF\xDF\xC9\xCE\xE5\x9Bo\xBE9V\x80\xCC\xF1\xF6駟\xAE\xC7\xDC\xF1\xC7\xE28ϯ^\xFB\xEE\xBB\xEF\x96\xC9Nq\xB2\xB7S\x8Exܿ>\xFF\xEE\xCESdͫ|\ @\x80 @\x80\xB4
+\x9C\xB0\x99ss\xD2s\xFE\xD6Nj/\xBE\xB8\xFBOdN\xF9\xF1\xFA믯?\xCD=E\xC6\\xE6\xE4\xE7v\x99\xEC\xFCm\x81\xF9\x89\xF3\xF95)\xF3S\xE1s\x99\xA6s\xBF\xF9{\xF35\xF6g\xE6\xF3\x{1D3FDC}0\xA3\xB1\x9A\x9F\x9A\x9F؛߼\x9F\x9F\xE4\xDF\xCC\xE6\x84\xF4x\xFE\xF9\xE7\xEBm\xDB\xFD8\xAF\xA7\xDDq5ϻ)/\xDF{\xEF\xBD\xE5\x85^X\xDEz\xEB\xAD\xF5\xDF\xFF\xFD\xFA*\x8D\xEDss\MY\xB1/\xA35\xD7\xE7\xB8{\xF6\xD9g\xD7\xE7\xFF\xF6뮶\xFB\xCCsv\x8A\xCDy\xC9\xFC\x9F0\xB7o\x97)?\xA6X\x99cqn\xBF\xF2\xCA+\x8F\xCF\xF3j\x94y\xAC\xF9?\xC5\xE3\x9E\xCEW]u\xD5\xF2\xD8c\x8Fm\xEB\xF7\x9E @\x80 @\x80@\x9D\xC0Z\x80\xEC?\x899\xD7\xE7Ꜭ\x9C\xA8S\x80\xBC\xFD\xF6\xDB\xC7ʊ9\xF1>\xAF\xFC\x98\x9F枟\xF2\x9EWLf+3\xE6\xFAd\xA7 \xF9\xFA\xEB\xAF\xD7_\xBF3\xBF.kn\xDF\xEE7\xAF\x99\xA5\x93\x99۶\x8B\xC7\xDD\xED<N\x9B\xD7V\x80\xCCI\xE7\xF1|饗\x96w\xDEyg}\xE5\xC8\xDCgNNs>zd\x9Dn\xC7\xD5\x89\xFB\x9F\xBF\xF3k\xAE\xA6\xB4\x98d\x8E\x9B\xEDU\xF3\xF1ɞ\xBFo\xBE\xF9\xE6\xFA\x9F_\xA36\x999\xA6\xB6\x
 B7y\
 xFE\xCF+\xBCN\xF6\xFC\xDD
+\xBB)>\xB7\xFF\xE6 3ה/\xF7\xE8\xF3xv\xF4wv\x9E_i\xE6B\x80 @\x80 @\xA0Y`\xFE\xB0\xC4^\xF1\x8FI\xE7\x84\xE7\xFC\xC4\xF6\x9C\xC0\x9C\xBF\xB0\xF3\xE9\xF9\xD5LsByN\x9Cno\xF3\xF1\xF6\xF7\xE6$\xE9\xDC\xFB#\xCB\xDB\xDF!\x98\xEC|n.\x93\x9BW\x89̯l\xDAn\x9B\xDB=\xEEѢh,N\xE4<'\x93\xE7d\xF6\xDDw߽<\xFC\xF0\xC3\xCBwܱ\x9EP~\xEE\xB9\xE7\x96'\x9Exb9|\xF8\xF0D\xD7˸r>jq\xBAW\xF3\xFD\xCF+\xB5\xB6\xE7\xE9GSF\xCC\xC7S\x94m%\xC5?\x9D\xF5U"s\x9C\xCDsw\x8A\x8B\xFD\x979\xAE&3\xCF\xDD\xC9\xEF\xBF\xCC1\xBBY\xCF\xFFs}\xBB\xCC\xE7<\xEEޫ\xE4\xC6el\xFF\xCE\xCE3\xFFa. @\x80 @\x80ZNX\x80\xECv+6\xF6߶]\xDF_^l\xB7m\xEFw\xE5\xE6>\xBB\xB2\xF3\xF9]\xF9]\xD9]\xB9\xBF\xEB\xE3ns\xCF      \xE59az\xF0\xE0\xC1\xE5\x91GYn\xBF\xFD\xF6\xF5\xE4\xA1C\x87\x96\xC7|y\xFE\xF9\xE7\xE7\xAE\xB9첚;\xEE\xF2ڕݕ\x9B\xAF\xBB+\xEBqG`\xEF\xB2\xCB\xEA\xFF\xCBy\xD7cn\x93\x9D\xEC\xB1e7\xA1\xBD\xF7\xA7\xAB\xD5\xF1\xE5ٞ\x88k @\x80 @\x80\xFE\xF3'\xFC 3\
 xD6vBoN
 \xBAo׷q\xE7\xE8vt{\xBF}n\xCBNf{\xDB\xFF\xB9\xB9>\x999qv\xB2\xEC\xDC\xC7\xE3\xEE\x95\xC7;\x8D\xEBv\xDB\\xAB\xF9i\xEC\xFD\xB4>\xE79\x9AN\xEF\xE3\xF9\xA8\xC0\xDE\xF1\xB4}<\xEF\xB7\xE3h\xFFms\xFDd\xCF\xDD\xED~\xBBr[~\xBB\xEF\x89\xDE\xEF\xCA\xCFc\x9F\xEC\xB2+7\x99]\xD9\xF9\xFC\xAE\xFC\xAE쮜\xC7 @\x80 @\x80}{\xBF\xA3\xA6o6\xFD \xFF׉\xEA\xE1K\xB8  @\x80 @\x808\xE5,\xFF\xFD\xCF\xE4\x94\xFB.}C \xF0o8\xF2_\xFF\xF4'\xA4\xFE\xED\x8F\xE1  @\x80 @\x80H\xBC$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xBA\xA1\xE7@IDAT\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB1 @\x80 @\x80 \x90
+(@R99 @\x80 @\x80 @\xA0V@R\xBB\x83 @\x80 @\x80 @\x80\xA9\x80$\x95\x93#@\x80 @\x80 @\x80j \xB5\xAB\xF9\x9F\xF6\xEE\\xC7\xCE\xDD\xC2\xF0\xA61\xF3$ !C\x82\x88!d\x993\xB8r.\x83\xCB!$C"!\x82        B\x8Cb\xA6\xFB\xDF֦\x8Du8\xE0\xB7i\x9De\xCESRS@\xD5r\xADz\xBE\xEDji/\xAA\xAC @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x980\x80̞F1 @\x80 @\x80 @\xA0
+@\xAA\x9C @\x80 @\x80 0+`\x99=\x8Db @\x80 @\x80 @\x80@0\x80T99 @\x80 @\x80 @`V\xC02{\xC5 @\x80 @\x80 @\x80\x81*`\xA9rr @\x80 @\x80 @\x80\xC0\xAC\x80d\xF64\x8A @\x80 @\x80 @\x80U\xC0R\xE5\xE4 @\x80 @\x80 @\x80\x81Y\xC8\xECi#@\x80 @\x80 @\x80\xAA\x80\xA4\xCA\xC9 @\x80 @\x80 @\x80\xB3\x90\xD9\xD3(F\x80 @\x80 @\x80TH\x95\x93#@\x80 @\x80 @\x80f  \xB3\xA7Q\x8C @\x80 @\x80\xA8\x90*'G\x80 @\x80 @\x80\xCC
+@fO\xA3 @\x80 @\x80 P  UN\x8E @\x80 @\x80\x98\xB8\xED_\xCD~\x99mw\xC5n\xBB\xED\xF8T\xFE\xFC\xCB/\xBF\xDC\x9F\xF6\xE5\xF3:\xFA\xFE\xE3\xFF8\xDDq\xC7\xA7\xABW\xAF\x9E^{\xED\xB5\xD3\xF3\xCF?\xFA\xFC\xF3\xCFOo\xBE\xF9\xE6\xE9\xF5\xD7_?\xBD\xF5\xD6[\xA7\xEB\xDF\xFF\xCFkxOܼ\xC0\xAD\xF2u\xF4\xE6?3        @\x80 @\x80\x81\xBF\x83\xC0\x95\xBF\xC3'q|\x97'\xE2.\xC0\xE5\xF3\xBA\xFC\xFB\xCB?\xDFʯ\x8F\xCF\xED\xC6\xCF\xEFV\xFE|t'@\x80 @\x80 @\x80\xFF-\x81+7>\xA1\xFEG\x83\xC1\x8D\xEF)Vs\xFFi\xFEƏ{\xE3?\xFF^߿\xFA\xE3^~\xBD\xCB\xEB\xBF\xFA\xE3\xFEѯw\xF9\xB8\x97׿\xF7\xFE7\xFA\\xDE\xFF\xF2\xFA\xAF\xCE]~]\xF7"q\xED5\xE7k\xF5qqѬ\xF9\x9A\xF3q/^ @\x80 @\x80\xD8\xF0g\x80\xEC\xDF\xE87+\x8F'n\xFF\xE8\xC9\xDB\xDF\xFC @\x80 @\x80\xF8(p\xE5f\x9FL\xBF\xD9\xF7\xBF\x98\xD6\xDC\x9A\xFF;}\xDC\xE3s\xF9\xA3\xCF\xE7\x8F\xDE~\xF1\xFC\xBD\xD75_s\x975_s>\xEEE\xE0Ͻ\xE6\xFC\xE7\x9C.\xEF
 U\xBDj\xEE\xF
 F\xFA\xE3^>\xBE\xD7 @\x80 @\x80\x96\xAE\xBC\xF8⋧\x9F\xFE\xF9\xF4\xE3\x8F?\x9E\xBE\xF8\xE2\x8B\xD3\xC7|\xFAꫯ~\xFD\xB3&\x8E'\xE4\x8E?x\xFB\xDE{\xEF==\xF8\xE0\x83\xA7\x87~\xF8t\xF7\xDDw\xFF\xFAD\xFC\xF1\xA3|\xBE\xFD\xF6\xDB\xD3g\x9F}v\xCE\xF3\xCD7\xA7~\xF8\xE17\xF9\xFB\xEF\xBF\xFF\xF4\xD8c\x8F\x9D\xF3\xB7\xDF~\xFB\xF9\xF3>|ܛs\xFE\xFE\xFB\xEFO_~\xF9\xE5\xD9\xF1\xF8\xD1\xBF\xE3\xE5\xF2\xE3\x948_\xFB\x86&\x8F\xAB\x9B{\\xF9\xFD\xEB\xEB՟\xFD\xFA|\xFE\x82\xE3/ @\x80 @\x80n\x81+\xAF\xBE\xFA\xEA\xE9xb\xFD믿>\xBD\xFB7\xDEx\xE3\xFC\xF7\xC7\xEC\xC7\xCB\xF1d\xF21~<\xFE\xF8㧧\x9Ez\xEA\xF4\xDCsϝnj\x9F~\xFA\xE9\xFC\xF6c\xD0\xF8裏No\xBF\xFD\xF6\xE9\xBD\xF7\xDE;}\xF8\xE1\x87\xE7!\xE4\xF2\xA4\xFC\xF1NǓk/\xBF\xFC\xF2\xE9駟>\xFFZw\xDEy\xE79\xEB\xE3~\xFD\x9B1菜?\xF9\xE4\x93\xD3;\xEF\xBCsz\xF4\xD1GOW\xAE\9\xDF퀼Xί\xBC\xF2\xCA\xF9N\xF7\xDDw\xDFy\xB8:\xDE\xCE\xF9\xE6\x9C=\x9E\xBF\xF8\xF51u<~\xFC\xFE\xF5\xF5\xEA\xF8\xFF\x85
 \x8
 7\xF1\xE3\xB1\xE1\x85 @\x80 @\x80\xC0\xB2\xC0\x95\xABW\xAF\x9E\xBF\x83\xE3\xF3\xCF???\xE9\xF9\xD6[o\x9D\xFB^\x9ET?\xFEᮻ\xEE:?\xE9\xFE\xE4\x93O\x9E^x\xE1\x85\xD3O<q\xFE\x8E\x91\xE3m\xC7\xF1\xEF\xBF\xFF\xFE\xE9\xD3O?=\xF7\xC8\xF1\xE4\xF1\xF1r\xC9\xDFAr|\xE7ȳ\xCF>{z饗\xCE\xFCz\xC7\xCB\xF1_\x9E\xFB\xB8\xB7\x9D-\x8E\xBF\xFCO\xCE\xD7M|\xF0\xC1\xF9;@\xDBc\xA0:\xDEv\xF8\xFF|\xFC\xEFp~\xE6\x99g8{\\xFD\xFA\xFB\xEF\xF7W\xC7w|/~\xFF\xFAzu3_\x9F\xCF!@\x80 @\x80 p\x8B\9~\xA4\xD5w\xDF}w~"\xF4\xA1\x87\xFA\xF5\xBB\xAE\xEF<\xD9~|\xD7\xC6\xF1]\xC7\xFB<\xF2\xC8#\xBF\xFE\xF8\xA5\xE3m\xC7\xF8q|\xF7\xC2\xF1>\x97\xEF\xB9  ǯs\xFC\xAD\xE3I\xB6\xE3;x\xE0\x81\xF3\xFB\xFF\xDE\xC7=\xFE\xFDr\xA3\xF3\xE1u\xF91W\xC7ێ3v8\xC3\xC7\xE1{y\xDB\xC5\xFAp>\xEE\xC3\xD9\xE3\xF9ߏ\xAA\xD3\xF9\xF7\xA4߿\xD7~\\x9C\xAFW׾\xB3\xEF\xF25\xE3x\x9Cԯ\xCF\xD7?\xC6\xFC= @\x80 @\x80\x81E\x81+\xF7\xDCs\xCF\xF9  \xD2\xE3\xBF?\xBE\xE12`\_\xF6
 x\xB2\
 xEC\xF8QW\xC7eǟ\xFFqd.X\xEF\xF1\xB6#w<\xC1z\xBC\xCF\xF5O\xAC]~\x8D\xE3\xD7<\xDE\xE7\xC8\xFF;\xDE\xF7x9\xFE\xBD\x8F{Q\xBA\xF6]3\xFF\x9B\xF3a\xDC\xE0\xF7^\x8E\xEC\xE1|\x8C$\x9C=\x9E/\x8F\xBF}\xBD\xFAo|}\xBE<\xBE\xBC&@\x80 @\x80 \xB0*pۿ\x86\x8C_V\xCB\xE9E\x80 @\x80 @\x80(\xD7~JI\xCA @\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\xB8\xC3IrIDAT\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\x90\xD1èE\x80 @\x80 @\x80tH\xB7\x93$@\x80 @\x80 @\x80F  \xA3\x87Q\x8B @\x80 @\x80\xE8\x90n'I\x80 @\x80 @\x80\x8C
+@F\xA3 @\x80 @\x80 \xD0  \xDDN\x92 @\x80 @\x800\x80\x8CF- @\x80 @\x80 @\xA0 @\xBA\x9D$ @\x80 @\x80 0*`=\x8CZ @\x80 @\x80 @\x80@0\x80t;I @\x80 @\x80 @`T\xC02z\xB5 @\x80 @\x80 @\x80\x81.`\xE9v\x92 @\x80 @\x80 @\x80\xC0\xA8\x80d\xF40j @\x80 @\x80 @\x80]\xC0\xD2\xED$       @\x80 @\x80 @\x80\x81Q\xC8\xE8a\xD4"@\x80 @\x80 @\x80\xBA\x80\xA4\xDBI @\x80 @\x80 @\x80\xA3\xFF\xBBDH\xA0\xF1\x9D\xDCIEND\xAEB`\x82
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="branchessafari612branchLayoutTestsplatformmacfastmediastreamvideorotationexpectedpng"></a>
<div class="addfile"><h4>Added: branches/safari-612-branch/LayoutTests/platform/mac/fast/mediastream/video-rotation-expected.png (0 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/LayoutTests/platform/mac/fast/mediastream/video-rotation-expected.png                         (rev 0)
+++ branches/safari-612-branch/LayoutTests/platform/mac/fast/mediastream/video-rotation-expected.png    2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -0,0 +1,82 @@
</span><ins>+\x89PNG
+
++IHDR X\x9Av\x82p)tEXtchecksumba93e369ed7c8cf5cb4096aceee4495a\xA3ޞ9sRGB\xAE\xCE\xE9DeXIfMM*\x87i\xA0\xA0 \xA0X\xC2j\xB5\x94,\xE6IDATx\xED۱\x8E\xED\xB5\xF0}\xC1       \x85+1\xD4VR@\xE2 *Z_\x84{K\xF0I(\xB41\xB6\xC0\xCE
+:\x94\xC5 \xE3\xF9o\xB3\xE7\x8E\xC0\\xEEZr\xBE{8\xDFo\xD8s\xF6\xCC7k\xAF\xDFY&\xF3\xCD\xC8\xE9t:]]\xFE\xF9\xD9\xCF~vu\xBC\xFD\xE5/9?\xBE\xF2\xCA+\xE7\x8F=\xF2\xC8#\xE7\xC7\xDF\xFF\xFE\xF7\xE7\xE7?\xFF\xFC\xF3\xF3\xE7\\x9E?\xF2\xF7[\xF6\xD1G\xBD\xFA\xE4\x93Oί\xF7\xEF\xFF\xFBշ\xE15_<\xEF\x95\xF3\xF3\xCF?\xF6\xF8\xCDo~s\xF5\xF6\xDBo_\xBD\xFC\xF2\xCB\xE7\xBF\xD7\xEF}\xEF{\xE7\xC7W_}\xF5\xEA\x8D7޸\xFA\xDD\xEF~w\xF5\xEB_\xFF\xFA\xEA\xF2\xFC\xF1\xF7\xFB\xDCs\xCF]\xAF\xEBx\xFE\xF8CM\xF6 \xE6_ @\x80ߘ\xC0\xC3w\xBF\xB9\xBC~\xBB\xFB+\xF0\xF9\xFD\xC7{\xEC\xFC\xF8\xF8㏟\xEFܹs~|\xFA駯\xFF||\xCE\xE5\xF9\xE3\xC9\xFB-{\xBC\xA6\xBB\xA5\xE3x8}\xF7\xBB\xDF=?\xDE\xEF\xAF\xF9\xE2y\xAF\x9C\xBF\xFF\xFD\xEF\x9F^z\xE9\xA5\xF3\xE3;\xEF\xBCsz\xFD\xF5\xD7O=\xF4\xD0\xF9\xCF?\xFF\xF9\xCFO?\xFD\xE9O\xCF\xEF\xFF\xBA<\xBC\xFF\xA3\xFD\xE8\xF4\xC2 /\xEF\x9E\xDF\xDEz뭪\xECeo\x8F @\x80\xFF\x99\xC0\xBF\x90w\xDF}\xF7\xF4\xAB_\xFD\xEAt\xF77 \xA7'\x9Ex\xE2t\xF7'\xE1\xE7\xAF~
 \
 xF77\xE7ǻ?!?=\xFB쳧\xE3ϗ.\xE3\xEF\xB7\xEC?\xFE\xF1\x8F\xD3\xF1+\xF7\xC7|z\xED\xB5\xD7N?\xFC\xF0\xE9\xB3\xCF>;\xBF\xEE\xFB\xF55\xDFk\xE7\xF7\xDE{\xEFt\xFC\xFE\xF6\xB7\xBF=\xDB>\xDE.s\xF9\xCB_\x9E~\xF8\xC3\x9E\xBB\xE3\x9F\xCB\xF3\xC7\xE7\xFC\xF1\x8F<\xBD\xF8⋧O?\xFD\xF4\xF4\x83\xFC\xE0t\xFC}o\x97\xCFyP\xB3w\xEBs\xDEӿ @\x80\xBE\x81\xE3W\xC7\xFF\xFD\xE6\xFC\xD3\xEE\xCBo n~\xE9\xE3\xA7\xE0\xC7\xF3\x97Ǜ\xBB\xBC\xDB\xC7.\xCF_/\x9F\xF3\xF1\xB6\x8F]\x9E\xBF<\xDE\xCC\\xDE\xFF\xDF>v\x94\x8F\xBF\xFD\xEDo\xA7\xF7\xDF\xFF\xF4\xE3\xFF\xF8\xB9~\xBC-{y\xFE\xF2x\xB8\xF1\xCEm\xBB<y\xBC\xB9~\xF7\xB6\x8F]\x9E\xBF<^n\xBCs\xDB\xC7.\xCF_oD\xAE߽\xEDc\xC7o]\xEE\xFE>\xED\xFC۬\xE3\xF1\xAB\xDE.\x9F\xF3ŏ]\x9E\xBF<~\xF1\xE3ǟo\xFB\xD8\xE5\xF9\xCB\xE3\xFD\x9A\xBD\xCD\xE4\xAB^\xAF\xE7 @\x80\xBE^\xE0\xFA7 G\xC98\xBE<~Sp)\xC7O\xC1/\xA5\xE4x\xFC\xCEw\xBE\xF3oE\xE4\xF8\xF8\xF1v?f\x8F]\x8E\xB7c\x9F\xCB\xDB\xF1\xFA\xEF\xE7\xD7|\xBC΄\xF3
 \
 xC5\xE0\xF8\xE6\xFA\xF2+\xF6\xF1x\x98]\xDC.\xAF\xE5x\xBC|\xCEQb.om\xD9\xCB\xDE         @\x80\xFE3\x81;\xA7\xFF\xFE\xD7o@\xFE\xB3/#M\xE0\xC1\xB8\xFA\xAF\xAF\xFE\xADЃ\xB9\xAD\xAD @\x80\xF7^\xE0~\xA4}\xEFg\x99@\x80 @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5
+H\xF9X\x9F @\x80@R@Ij\x9BE\x80 @\xA0\@)?\xEB @\x80H
+( Im\xB3 @\x80\x94 ( \xE5`} @\x80I$\xA9m @\x80\x81r\xA4\xFC\xACO\x80 @ )\xA0\x80$\xB5\xCD"@\x80 P.\xA0\x80\x94\x80\xF5       @\x80$\x90\xA4\xB6Y @\x80\xCA\x90\xF2\xB0> @\x80\x81\xA4\x80\x92\xD46\x8B @\x80@\xB9\x80R~\xD6'@\x80 \x90P@\x92\xDAf @\x80(P@\xCA\xC0\xFA @\x80\x92
+HR\xDB, @\x80\xE5w\xEE\xEE\xF5 <\xF2\xC8#\xA7\xBF\xFE\xF5\xAF\xA7>\xF8\xE0\xF4\xCC3\xCF<\x88+\xDA) pu\xF5@\xFE\xCF# g @\xE0\xAB\xD8߀|\xFE\xF9\xE7_\xBD\xB1g       @\x80\xF8\xF8R\xB9s\xE7\xF8\xA5ȗ\xDFn{\xFE\xE6g\xDE\xF69\xB7=/\xB3\xFFן\\xDF\xF6\xDAn{\xFE^\xBE\xE6\xE3k\x9B{S\xF8_\xEF\xDFfr\xDB\xF37\xBF\xC2m\x9Fs\xDB\xF37\xB3\xDE'@\x80\xF8\xE6\xFA\xF0\xC3Oo\xBF\xFD\xF6\xF5W>\xBEq\xFF\xC5/~q\xFA\xF8\xE3\x8FO\xFAӟΏǟo~C|\xFE\x91\xBB_\xB3}\xF4\xD1饗^:\xFD\xF9\xCF\xBE\xDE\xEB\xCD7߼\xAF_\xF3\xE1\xFDms~\xD0_\xF3\xF5\xF1x\x87 @\xE0x\xF8\xA9\xA7\x9E\xFA\xD2O\xDD\xFC\xF1ӣ\x8F>z\xFA\xC9O~rt\xFC\xF9\xE6\xDB\xF1\xFC\x93O>y~\xEA\x8B?I\xBE_\xB2O<\xF1\xC4\xE9\xB3\xCF>\xBB~\xD9\xCF>\xFB\xEC\xE9\xD8\xF5x\xBB__\xF3\xB7\xD1\xF9A\xCD\xD7\xE4 @\x80\x81oD\xE0\xCE\xDD\xDFl\xF8\xAFl\xBFJ_\x84 @\x80\x81\xAF\xF8\xD2\xF2u'@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x
 90\xAD\x9C
  @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\x
 D9\xCA\xC9 @\x80 0P@\xC6d
  @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&a
 mp;@\x80 @\x80\xC0V@\xD9\xC
 A\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\
 xAD\x9C @\x80cdL&@\
 x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P
 @\xC6d @\x80l\x90\xAD\x
 9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@
 \xD9\xCA\xC9 @\x80 0P@\xC6
 d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\x90\xAD\x9C @\x80cdL&@\x80 @\x80\xC0V@\xD9\xCA\xC9 @\x80 0P@\xC6d @\x80l\xFE  z|\xC5B']\xEEIEND\xAEB`\x82
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="branchessafari612branchSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Source/WebCore/ChangeLog (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Source/WebCore/ChangeLog      2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebCore/ChangeLog 2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -1,5 +1,86 @@
</span><span class="cx"> 2021-09-27  Alan Coon  <alancoon@apple.com>
</span><span class="cx"> 
</span><ins>+        Cherry-pick r283035. rdar://problem/83584492
+
+    <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+    https://bugs.webkit.org/show_bug.cgi?id=229792
+    <rdar://problem/82776741>
+    
+    Reviewed by Eric Carlson.
+    
+    Source/WebCore:
+    
+    We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
+    We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
+    This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.
+    
+    Test: fast/mediastream/video-rotation.html
+    
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
+    (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
+    (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
+    * platform/graphics/cg/ImageBufferUtilitiesCG.h:
+    
+    Source/WebKit:
+    
+    Helper routined used in WTR.
+    
+    * Shared/API/c/cg/WKImageCG.cpp:
+    (WKImageCreateDataURLFromImage):
+    * Shared/API/c/cg/WKImageCG.h:
+    
+    Tools:
+    
+    Add testRunner API to take a view port snapshot as a PNG data URL.
+    We can then use this data URL to validate some rendered pixel values.
+    
+    * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+    * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+    (WTR::InjectedBundle::didReceiveMessageToPage):
+    * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+    (WTR::TestRunner::takeViewPortSnapshot):
+    (WTR::TestRunner::viewPortSnapshotTaken):
+    * WebKitTestRunner/InjectedBundle/TestRunner.h:
+    * WebKitTestRunner/TestController.cpp:
+    (WTR::TestController::takeViewPortSnapshot):
+    * WebKitTestRunner/TestController.h:
+    * WebKitTestRunner/TestInvocation.cpp:
+    (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+    * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+    (WTR::TestController::takeViewPortSnapshot):
+    
+    LayoutTests:
+    
+    * fast/mediastream/video-rotation-expected.txt: Added.
+    * fast/mediastream/video-rotation.html: Added.
+    * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
+    * platform/mac/fast/mediastream/video-rotation-expected.png: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283035 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-09-24  Youenn Fablet  <youenn@apple.com>
+
+            <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+            https://bugs.webkit.org/show_bug.cgi?id=229792
+            <rdar://problem/82776741>
+
+            Reviewed by Eric Carlson.
+
+            We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
+            We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
+            This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.
+
+            Test: fast/mediastream/video-rotation.html
+
+            * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
+            * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
+            (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
+            (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
+            * platform/graphics/cg/ImageBufferUtilitiesCG.h:
+
+2021-09-27  Alan Coon  <alancoon@apple.com>
+
</ins><span class="cx">         Cherry-pick r282924. rdar://problem/83584505
</span><span class="cx"> 
</span><span class="cx">     Make SharedBuffer inherit from ThreadSafeRefCounted
</span></span></pre></div>
<a id="branchessafari612branchSourceWebCoreplatformgraphicsavfoundationobjcLocalSampleBufferDisplayLayerh"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h    2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h       2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -88,6 +88,7 @@
</span><span class="cx">     void addSampleToPendingQueue(MediaSample&);
</span><span class="cx">     void requestNotificationWhenReadyForVideoData();
</span><span class="cx">     void enqueueSampleBuffer(MediaSample&);
</span><ins>+    void setRootLayerBoundsAndPositions(CGRect, MediaSample::VideoRotation);
</ins><span class="cx"> 
</span><span class="cx"> #if !RELEASE_LOG_DISABLED
</span><span class="cx">     void onIrregularFrameRateNotification(MonotonicTime frameTime, MonotonicTime lastFrameTime);
</span></span></pre></div>
<a id="branchessafari612branchSourceWebCoreplatformgraphicsavfoundationobjcLocalSampleBufferDisplayLayermm"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm   2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm      2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -267,19 +267,27 @@
</span><span class="cx">     updateRootLayerBoundsAndPosition(bounds, rotation, ShouldUpdateRootLayer::No);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions(CGRect bounds, MediaSample::VideoRotation rotation)
+{
+    CGPoint position = { bounds.size.width / 2, bounds.size.height / 2};
+    if (rotation == MediaSample::VideoRotation::Right || rotation == MediaSample::VideoRotation::Left)
+        std::swap(bounds.size.width, bounds.size.height);
+
+    m_rootLayer.get().position = position;
+    m_rootLayer.get().bounds = bounds;
+}
+
</ins><span class="cx"> void LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition(CGRect bounds, MediaSample::VideoRotation rotation, ShouldUpdateRootLayer shouldUpdateRootLayer)
</span><span class="cx"> {
</span><span class="cx">     runWithoutAnimations([&] {
</span><del>-        CGPoint position = { bounds.size.width / 2, bounds.size.height / 2};
</del><ins>+        if (shouldUpdateRootLayer == ShouldUpdateRootLayer::Yes)
+            setRootLayerBoundsAndPositions(bounds, rotation);
</ins><span class="cx"> 
</span><del>-        if (shouldUpdateRootLayer == ShouldUpdateRootLayer::Yes) {
-            m_rootLayer.get().position = position;
-            m_rootLayer.get().bounds = bounds;
-        }
-
</del><span class="cx">         if (rotation == MediaSample::VideoRotation::Right || rotation == MediaSample::VideoRotation::Left)
</span><span class="cx">             std::swap(bounds.size.width, bounds.size.height);
</span><span class="cx"> 
</span><ins>+        CGPoint position = { bounds.size.width / 2, bounds.size.height / 2};
+
</ins><span class="cx">         m_sampleBufferDisplayLayer.get().position = position;
</span><span class="cx">         m_sampleBufferDisplayLayer.get().bounds = bounds;
</span><span class="cx">     });
</span></span></pre></div>
<a id="branchessafari612branchSourceWebCoreplatformgraphicscgImageBufferUtilitiesCGh"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Source/WebCore/platform/graphics/cg/ImageBufferUtilitiesCG.h (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Source/WebCore/platform/graphics/cg/ImageBufferUtilitiesCG.h  2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebCore/platform/graphics/cg/ImageBufferUtilitiesCG.h     2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -37,12 +37,12 @@
</span><span class="cx"> WEBCORE_EXPORT uint8_t verifyImageBufferIsBigEnough(const void* buffer, size_t bufferSize);
</span><span class="cx"> 
</span><span class="cx"> CFStringRef jpegUTI();
</span><del>-RetainPtr<CFStringRef> utiFromImageBufferMIMEType(const String&);
</del><ins>+WEBCORE_EXPORT RetainPtr<CFStringRef> utiFromImageBufferMIMEType(const String&);
</ins><span class="cx"> 
</span><span class="cx"> Vector<uint8_t> data(CGImageRef, CFStringRef destinationUTI, std::optional<double> quality);
</span><span class="cx"> Vector<uint8_t> data(const PixelBuffer&, const String& mimeType, std::optional<double> quality);
</span><span class="cx"> 
</span><del>-String dataURL(CGImageRef, CFStringRef destinationUTI, const String& mimeType, std::optional<double> quality);
</del><ins>+WEBCORE_EXPORT String dataURL(CGImageRef, CFStringRef destinationUTI, const String& mimeType, std::optional<double> quality);
</ins><span class="cx"> String dataURL(const PixelBuffer&, const String& mimeType, std::optional<double> quality);
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="branchessafari612branchSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Source/WebKit/ChangeLog (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Source/WebKit/ChangeLog       2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebKit/ChangeLog  2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -1,3 +1,78 @@
</span><ins>+2021-09-27  Alan Coon  <alancoon@apple.com>
+
+        Cherry-pick r283035. rdar://problem/83584492
+
+    <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+    https://bugs.webkit.org/show_bug.cgi?id=229792
+    <rdar://problem/82776741>
+    
+    Reviewed by Eric Carlson.
+    
+    Source/WebCore:
+    
+    We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
+    We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
+    This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.
+    
+    Test: fast/mediastream/video-rotation.html
+    
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
+    (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
+    (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
+    * platform/graphics/cg/ImageBufferUtilitiesCG.h:
+    
+    Source/WebKit:
+    
+    Helper routined used in WTR.
+    
+    * Shared/API/c/cg/WKImageCG.cpp:
+    (WKImageCreateDataURLFromImage):
+    * Shared/API/c/cg/WKImageCG.h:
+    
+    Tools:
+    
+    Add testRunner API to take a view port snapshot as a PNG data URL.
+    We can then use this data URL to validate some rendered pixel values.
+    
+    * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+    * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+    (WTR::InjectedBundle::didReceiveMessageToPage):
+    * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+    (WTR::TestRunner::takeViewPortSnapshot):
+    (WTR::TestRunner::viewPortSnapshotTaken):
+    * WebKitTestRunner/InjectedBundle/TestRunner.h:
+    * WebKitTestRunner/TestController.cpp:
+    (WTR::TestController::takeViewPortSnapshot):
+    * WebKitTestRunner/TestController.h:
+    * WebKitTestRunner/TestInvocation.cpp:
+    (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+    * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+    (WTR::TestController::takeViewPortSnapshot):
+    
+    LayoutTests:
+    
+    * fast/mediastream/video-rotation-expected.txt: Added.
+    * fast/mediastream/video-rotation.html: Added.
+    * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
+    * platform/mac/fast/mediastream/video-rotation-expected.png: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283035 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-09-24  Youenn Fablet  <youenn@apple.com>
+
+            <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+            https://bugs.webkit.org/show_bug.cgi?id=229792
+            <rdar://problem/82776741>
+
+            Reviewed by Eric Carlson.
+
+            Helper routined used in WTR.
+
+            * Shared/API/c/cg/WKImageCG.cpp:
+            (WKImageCreateDataURLFromImage):
+            * Shared/API/c/cg/WKImageCG.h:
+
</ins><span class="cx"> 2021-09-23  Russell Epstein  <repstein@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Cherry-pick r282175. rdar://problem/83460931
</span></span></pre></div>
<a id="branchessafari612branchSourceWebKitSharedAPIccgWKImageCGcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.cpp (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.cpp   2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.cpp      2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include "WebImage.h"
</span><span class="cx"> #include <WebCore/ColorSpace.h>
</span><span class="cx"> #include <WebCore/GraphicsContext.h>
</span><ins>+#include <WebCore/ImageBufferUtilitiesCG.h>
</ins><span class="cx"> #include <WebCore/NativeImage.h>
</span><span class="cx"> 
</span><span class="cx"> CGImageRef WKImageCreateCGImage(WKImageRef imageRef)
</span><span class="lines">@@ -62,3 +63,10 @@
</span><span class="cx">     return toAPI(webImage.leakRef());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WKStringRef WKImageCreateDataURLFromImage(CGImageRef imageRef)
+{
+    String mimeType { "image/png"_s };
+    auto destinationUTI = WebCore::utiFromImageBufferMIMEType(mimeType);
+    auto value = WebCore::dataURL(imageRef, destinationUTI.get(), mimeType, { });
+    return WKStringCreateWithUTF8CString(value.utf8().data());
+}
</ins></span></pre></div>
<a id="branchessafari612branchSourceWebKitSharedAPIccgWKImageCGh"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.h (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.h     2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Source/WebKit/Shared/API/c/cg/WKImageCG.h        2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx"> 
</span><span class="cx"> WK_EXPORT WKImageRef WKImageCreateFromCGImage(CGImageRef imageRef, WKImageOptions options);
</span><span class="cx"> 
</span><ins>+WK_EXPORT WKStringRef WKImageCreateDataURLFromImage(CGImageRef imageRef);
+
</ins><span class="cx"> #ifdef __cplusplus
</span><span class="cx"> }
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="branchessafari612branchToolsChangeLog"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Tools/ChangeLog (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Tools/ChangeLog       2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/ChangeLog  2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -1,3 +1,90 @@
</span><ins>+2021-09-27  Alan Coon  <alancoon@apple.com>
+
+        Cherry-pick r283035. rdar://problem/83584492
+
+    <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+    https://bugs.webkit.org/show_bug.cgi?id=229792
+    <rdar://problem/82776741>
+    
+    Reviewed by Eric Carlson.
+    
+    Source/WebCore:
+    
+    We need to swap the bounds for both m_rootLayer and m_sampleBufferDisplayLayer if the sample is rotated by 90.
+    We also need to ompute m_sampleBufferDisplayLayer position based on m_rootLayer coordinates.
+    This means we swap root layer bounds width and height before computing m_sampleBufferDisplayLayer position based on it.
+    
+    Test: fast/mediastream/video-rotation.html
+    
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
+    * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
+    (WebCore::LocalSampleBufferDisplayLayer::setRootLayerBoundsAndPositions):
+    (WebCore::LocalSampleBufferDisplayLayer::updateRootLayerBoundsAndPosition):
+    * platform/graphics/cg/ImageBufferUtilitiesCG.h:
+    
+    Source/WebKit:
+    
+    Helper routined used in WTR.
+    
+    * Shared/API/c/cg/WKImageCG.cpp:
+    (WKImageCreateDataURLFromImage):
+    * Shared/API/c/cg/WKImageCG.h:
+    
+    Tools:
+    
+    Add testRunner API to take a view port snapshot as a PNG data URL.
+    We can then use this data URL to validate some rendered pixel values.
+    
+    * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+    * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+    (WTR::InjectedBundle::didReceiveMessageToPage):
+    * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+    (WTR::TestRunner::takeViewPortSnapshot):
+    (WTR::TestRunner::viewPortSnapshotTaken):
+    * WebKitTestRunner/InjectedBundle/TestRunner.h:
+    * WebKitTestRunner/TestController.cpp:
+    (WTR::TestController::takeViewPortSnapshot):
+    * WebKitTestRunner/TestController.h:
+    * WebKitTestRunner/TestInvocation.cpp:
+    (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+    * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+    (WTR::TestController::takeViewPortSnapshot):
+    
+    LayoutTests:
+    
+    * fast/mediastream/video-rotation-expected.txt: Added.
+    * fast/mediastream/video-rotation.html: Added.
+    * platform/ios-simulator/fast/mediastream/video-rotation-expected.png: Added.
+    * platform/mac/fast/mediastream/video-rotation-expected.png: Added.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@283035 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-09-24  Youenn Fablet  <youenn@apple.com>
+
+            <video> element rendered incorrectly when provided with a portrait orientation stream in Safari 15
+            https://bugs.webkit.org/show_bug.cgi?id=229792
+            <rdar://problem/82776741>
+
+            Reviewed by Eric Carlson.
+
+            Add testRunner API to take a view port snapshot as a PNG data URL.
+            We can then use this data URL to validate some rendered pixel values.
+
+            * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+            * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+            (WTR::InjectedBundle::didReceiveMessageToPage):
+            * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+            (WTR::TestRunner::takeViewPortSnapshot):
+            (WTR::TestRunner::viewPortSnapshotTaken):
+            * WebKitTestRunner/InjectedBundle/TestRunner.h:
+            * WebKitTestRunner/TestController.cpp:
+            (WTR::TestController::takeViewPortSnapshot):
+            * WebKitTestRunner/TestController.h:
+            * WebKitTestRunner/TestInvocation.cpp:
+            (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+            * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+            (WTR::TestController::takeViewPortSnapshot):
+
</ins><span class="cx"> 2021-09-23  Alan Coon  <alancoon@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Cherry-pick r282881. rdar://problem/83430003
</span></span></pre></div>
<a id="branchessafari612branchToolsWebKitTestRunnerInjectedBundleBindingsTestRunneridl"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl 2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl    2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -423,4 +423,6 @@
</span><span class="cx"> 
</span><span class="cx">     // MediaKeySystem
</span><span class="cx">     undefined setIsMediaKeySystemPermissionGranted(boolean value);
</span><ins>+
+    undefined takeViewPortSnapshot(object callback);
</ins><span class="cx"> };
</span></span></pre></div>
<a id="branchessafari612branchToolsWebKitTestRunnerInjectedBundleInjectedBundlecpp"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp      2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp 2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -491,6 +491,13 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    if (WKStringIsEqualToUTF8CString(messageName, "ViewPortSnapshotTaken")) {
+        ASSERT(messageBody);
+        ASSERT(WKGetTypeID(messageBody) == WKStringGetTypeID());
+        m_testRunner->viewPortSnapshotTaken(static_cast<WKStringRef>(messageBody));
+        return;
+    }
+
</ins><span class="cx">     postPageMessage("Error", "Unknown");
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchessafari612branchToolsWebKitTestRunnerInjectedBundleTestRunnercpp"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp  2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp     2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -650,6 +650,7 @@
</span><span class="cx">     ExitFullscreenForElementCallbackID,
</span><span class="cx">     AppBoundRequestContextDataForDomainCallbackID,
</span><span class="cx">     DidHandleTapCallbackID,
</span><ins>+    TakeViewPortSnapshotCallbackID,
</ins><span class="cx">     FirstUIScriptCallbackID = 100
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -2173,6 +2174,23 @@
</span><span class="cx">     postSynchronousPageMessage("SetIsMediaKeySystemPermissionGranted", granted);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void TestRunner::takeViewPortSnapshot(JSValueRef callback)
+{
+    if (m_takeViewPortSnapshot)
+        return;
+
+    cacheTestRunnerCallback(TakeViewPortSnapshotCallbackID, callback);
+    postMessage("TakeViewPortSnapshot");
+    m_takeViewPortSnapshot = true;
+}
+
+void TestRunner::viewPortSnapshotTaken(WKStringRef value)
+{
+    auto jsValue = JSValueMakeString(mainFrameJSContext(), toJS(value).get());
+    callTestRunnerCallback(TakeViewPortSnapshotCallbackID, 1, &jsValue);
+    m_takeViewPortSnapshot = false;
+}
+
</ins><span class="cx"> ALLOW_DEPRECATED_DECLARATIONS_END
</span><span class="cx"> 
</span><span class="cx"> } // namespace WTR
</span></span></pre></div>
<a id="branchessafari612branchToolsWebKitTestRunnerInjectedBundleTestRunnerh"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h    2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h       2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -541,6 +541,9 @@
</span><span class="cx"> 
</span><span class="cx">     void setIsMediaKeySystemPermissionGranted(bool);
</span><span class="cx"> 
</span><ins>+    void takeViewPortSnapshot(JSValueRef callback);
+    void viewPortSnapshotTaken(WKStringRef);
+
</ins><span class="cx"> private:
</span><span class="cx">     TestRunner();
</span><span class="cx"> 
</span><span class="lines">@@ -609,6 +612,7 @@
</span><span class="cx">     bool m_hasSetDowngradeReferrerCallback { false };
</span><span class="cx">     bool m_hasSetBlockThirdPartyCookiesCallback { false };
</span><span class="cx">     bool m_hasSetFirstPartyWebsiteDataRemovalModeCallback { false };
</span><ins>+    bool m_takeViewPortSnapshot { false };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WTR
</span></span></pre></div>
<a id="branchessafari612branchToolsWebKitTestRunnerTestControllercpp"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Tools/WebKitTestRunner/TestController.cpp (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Tools/WebKitTestRunner/TestController.cpp     2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/TestController.cpp        2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -3579,6 +3579,10 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WKRetainPtr<WKStringRef> TestController::takeViewPortSnapshot()
+{
+    return adoptWK(WKStringCreateWithUTF8CString("not implemented"));
+}
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> void TestController::sendDisplayConfigurationChangedMessageForTesting()
</span></span></pre></div>
<a id="branchessafari612branchToolsWebKitTestRunnerTestControllerh"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Tools/WebKitTestRunner/TestController.h (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Tools/WebKitTestRunner/TestController.h       2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/TestController.h  2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -361,6 +361,7 @@
</span><span class="cx"> 
</span><span class="cx">     void completeMediaKeySystemPermissionCheck(WKMediaKeySystemPermissionCallbackRef);
</span><span class="cx">     void setIsMediaKeySystemPermissionGranted(bool);
</span><ins>+    WKRetainPtr<WKStringRef> takeViewPortSnapshot();
</ins><span class="cx"> 
</span><span class="cx">     void didHandleTap(bool wasMeaningful);
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchessafari612branchToolsWebKitTestRunnerTestInvocationcpp"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Tools/WebKitTestRunner/TestInvocation.cpp (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Tools/WebKitTestRunner/TestInvocation.cpp     2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/TestInvocation.cpp        2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -744,6 +744,12 @@
</span><span class="cx">         TestController::singleton().setStatisticsFirstPartyWebsiteDataRemovalMode(booleanValue(messageBody));
</span><span class="cx">         return;
</span><span class="cx">     }
</span><ins>+    
+    if (WKStringIsEqualToUTF8CString(messageName, "TakeViewPortSnapshot")) {
+        auto value = TestController::singleton().takeViewPortSnapshot();
+        postPageMessage("ViewPortSnapshotTaken", value.get());
+        return;
+    }
</ins><span class="cx"> 
</span><span class="cx">     if (WKStringIsEqualToUTF8CString(messageName, "StatisticsSetToSameSiteStrictCookies")) {
</span><span class="cx">         TestController::singleton().setStatisticsToSameSiteStrictCookies(stringValue(messageBody));
</span></span></pre></div>
<a id="branchessafari612branchToolsWebKitTestRunnercocoaTestControllerCocoamm"></a>
<div class="modfile"><h4>Modified: branches/safari-612-branch/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm (283145 => 283146)</h4>
<pre class="diff"><span>
<span class="info">--- branches/safari-612-branch/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm   2021-09-27 22:49:28 UTC (rev 283145)
+++ branches/safari-612-branch/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm      2021-09-27 22:49:35 UTC (rev 283146)
</span><span class="lines">@@ -37,6 +37,7 @@
</span><span class="cx"> #import <Security/SecItem.h>
</span><span class="cx"> #import <WebKit/WKContextConfigurationRef.h>
</span><span class="cx"> #import <WebKit/WKContextPrivate.h>
</span><ins>+#import <WebKit/WKImageCG.h>
</ins><span class="cx"> #import <WebKit/WKPreferencesRefPrivate.h>
</span><span class="cx"> #import <WebKit/WKProcessPoolPrivate.h>
</span><span class="cx"> #import <WebKit/WKStringCF.h>
</span><span class="lines">@@ -570,4 +571,9 @@
</span><span class="cx">     configuration.defaultWebpagePreferences = webpagePreferences.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WKRetainPtr<WKStringRef> TestController::takeViewPortSnapshot()
+{
+    return adoptWK(WKImageCreateDataURLFromImage(mainWebView()->windowSnapshotImage().get()));
+}
+
</ins><span class="cx"> } // namespace WTR
</span></span></pre>
</div>
</div>

</body>
</html>